diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000000..585f456870 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,120 @@ +{ + "rules": { + "indent": [2, 2], + "quotes": [2, "single"], + "linebreak-style": [2, "unix"], + "semi": [2, "always"], + "no-extra-parens": 2, + "no-unexpected-multiline": 2, + "block-scoped-var": 2, + "dot-location": [2, "property"], + "dot-notation": 2, + "eqeqeq": 2, + "no-caller": 2, + "no-eval": 2, + "no-extend-native": 2, + "no-extra-bind": 2, + "no-fallthrough": 2, + "no-floating-decimal": 2, + "no-empty-pattern": 2, + "no-empty-label": 2, + "no-lone-blocks": 2, + "no-loop-func": 2, + "no-implicit-coercion": 2, + "no-implied-eval": 2, + "no-native-reassign": 2, + "no-new-func": 2, + "no-new-wrappers": 2, + "no-new": 2, + "no-octal-escape": 2, + "no-octal": 2, + "no-process-env": 2, + "no-proto": 2, + "no-implied-eval": 2, + "yoda": 2, + "wrap-iife": 2, + "radix": 2, + "no-with": 2, + "no-void": 2, + "no-useless-concat": 2, + "no-unused-expressions": 2, + "no-throw-literal": 2, + "no-sequences": 2, + "no-self-compare": 2, + "no-return-assign": 2, + "no-redeclare": 2, + "strict": [2, "global"], + "no-delete-var": 2, + "no-label-var": 2, + "no-shadow-restricted-names": 2, + "no-shadow": [2, { "builtinGlobals": true }], + "no-undef-init": 2, + "no-undef": [2, { typeof: true }], + "no-unused-vars": 2, + "no-use-before-define": 2, + "global-require": 2, + "handle-callback-err": [2, "^.*(e|E)rr"], + "no-path-concat": 2, + "arrow-spacing": 2, + "constructor-super": 2, + "generator-star-spacing": 2, + "no-arrow-condition": 2, + "no-class-assign": 2, + "no-const-assign": 2, + "no-dupe-class-members": 2, + "no-this-before-super": 2, + "no-var": 2, + "object-shorthand": 2, + "prefer-const": 0, + "prefer-spread": 2, + "prefer-template": 2, + "array-bracket-spacing": [2, "never"], + "brace-style": [2, "1tbs", { "allowSingleLine": false }], + "camelcase": 2, + "comma-spacing": 2, + "comma-style": [2, "last"], + "comma-dangle": [2, "always-multiline"], + "computed-property-spacing": [2, "never"], + "consistent-this": [2, "self"], + "func-names": 2, + "func-style": [2, "declaration", { "allowArrowFunctions": true }], + "block-spacing": [2, "always"], + "key-spacing": [2, {"beforeColon": false, "afterColon": true}], + "max-nested-callbacks": [2, 3], + "new-cap": 2, + "new-parens": 2, + "newline-after-var": 2, + "no-array-constructor": 2, + "no-continue": 2, + "no-lonely-if": 2, + "no-mixed-spaces-and-tabs": 2, + "no-trailing-spaces": 2, + "no-spaced-func": 2, + "no-new-object": 2, + "no-nested-ternary": 2, + "one-var": [2, "never"], + "operator-linebreak": [2, "after"], + "quote-props": [2, "as-needed"], + "semi-spacing": [2, {"before": false, "after": true}], + "space-after-keywords": 2, + "space-before-blocks": 2, + "space-before-function-paren": 2, + "space-before-keywords": 2, + "space-in-parens": [2, "never"], + "space-infix-ops": 2, + "space-return-throw-case": 2, + "space-unary-ops": 2, + "spaced-comment": [2, "always", { exceptions: ["-"]}], + "padded-blocks": [2, "never"], + "no-multiple-empty-lines": [2, {max: 2}] + }, + "env": { + "es6": true, + "mocha": true, + "node": true + }, + ecmaFeatures : { + modules: true + }, + "extends": "eslint:recommended" +} diff --git a/.gitignore b/.gitignore index 94ad5f5766..911f7f45e9 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,7 @@ newrelic_agent.log .bower-cache .vagrant Vagrantfile - +TODO *.log src/*/*.map src/*/*/*.map diff --git a/.nvmrc b/.nvmrc index 1d8df22149..313d2e48ee 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -0.10.40 +0.10.40 \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index dcd028fd9e..a5ff61b605 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,8 @@ language: node_js node_js: - '0.10' before_install: + - "npm install -g npm@2" + - "npm install -g gulp" - "sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10" - "echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list" - "sudo apt-get update" diff --git a/Dockerfile b/Dockerfile index 42573acb10..fa9accc94a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,41 +1,41 @@ FROM ubuntu:trusty -MAINTAINER Thibault Cohen +MAINTAINER Sabe Jones -ENV DEBIAN_FRONTEND noninteractive - -### Init +# Avoid ERROR: invoke-rc.d: policy-rc.d denied execution of start. +RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d +# Install prerequisites RUN apt-get update +RUN apt-get install -y \ + build-essential \ + curl \ + git \ + libkrb5-dev \ + python -### Utils +# Install NodeJS +RUN curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash - +RUN apt-get install -y nodejs -RUN apt-get install -y git vim graphicsmagick nodejs phantomjs npm pkgconf libcairo2-dev libjpeg8-dev +# Clean up package management +RUN apt-get clean +RUN rm -rf /var/lib/apt/lists/* -### Installation +# Clone Habitica repo and install dependencies +RUN git clone https://github.com/HabitRPG/habitrpg.git +RUN npm install -g gulp grunt-cli bower +RUN cd /habitrpg && npm install +RUN cd /habitrpg && bower install --allow-root -RUN cd /opt && git clone https://github.com/HabitRPG/habitrpg.git +# Create environment config file and build directory +RUN cd /habitrpg && cp config.json.example config.json +RUN mkdir -p /habitrpg/website/build -#RUN cd /opt/habitrpg && git checkout -t origin/develop +# Point config.json to Mongo instance. Edit the IP address to your running Mongo container's IP before running. +RUN cd /habitrpg && sed -i 's/localhost/0.0.0.0/g' config.json -RUN cd /opt/habitrpg && git pull - -RUN cd /opt/habitrpg && npm install -g grunt-cli bower nodemon - -RUN ln -s /usr/bin/nodejs /usr/bin/node - -RUN cd /opt/habitrpg && npm install - -# Add config file - -ADD ./config.json /opt/habitrpg/ - -RUN mkdir -p /opt/habitrpg/build - -RUN cd /opt/habitrpg && bower install --allow-root - -# Run server - -RUN cd /opt/habitrpg && grunt build:prod - -CMD cd /opt/habitrpg && grunt nodemon +# Start Habitica +EXPOSE 3000 +WORKDIR /habitrpg/ +CMD ["npm", "start"] diff --git a/EXTENDEDCHANGELOG.md b/EXTENDEDCHANGELOG.md deleted file mode 100644 index 0fe028c6dd..0000000000 --- a/EXTENDEDCHANGELOG.md +++ /dev/null @@ -1,64 +0,0 @@ -HabitRPG -# (2014-01-28) - - -## Documentation - -- **rebirth:** Bullet point about repurchase of limited ed gear after Rebirth - ([d3f4a561](https://github.com/habitrpg/habitrpg/commits/d3f4a561fdf137e5d8f406bae03be4fef1caff22)) - - -## Bug Fixes - -- **#2003:** healer gear not showing - ([949cd97b](https://github.com/habitrpg/habitrpg/commits/949cd97b91b42e9450eba559bbfea17e239ab100)) -- **#2375:** merge in @SabreCat's stats.jade changes "More elegant show/hide setup for attribute bonuses" - ([518f200a](https://github.com/habitrpg/habitrpg/commits/518f200a8fc7373b44ed7d7b5f016d921b0746bd)) -- **beastmaster:** fixes #2557, adds opacity to previously-owned pets after they're mounted. You can earn them back again - ([5caaff1c](https://github.com/habitrpg/habitrpg/commits/5caaff1cea1a68fe572e7ddf4aac50248b13df5d)) -- **bosses:** don't reset progress.up when starting a new quest. We want to be able to carry over damage from the same day a boss battle begins, even if the dailies were completed before battle-start. Fixes #2168 - ([4efd0f5e](https://github.com/habitrpg/habitrpg/commits/4efd0f5ed8708f2491dd483f93e3d7a268a6337d)) -- **classes:** - - misc fixes - ([d2121a85](https://github.com/habitrpg/habitrpg/commits/d2121a858716cb5a532a53ee9c5a1adaa74a7f69)) - - misc class fixes (not @snicker, ng-if on item store since we dynamically swap it sometimes) - ([478be611](https://github.com/habitrpg/habitrpg/commits/478be6111337cd200374f7f31b959725c6a0b945)) -- **find_uniq_user:** fix - ([ecbe780e](https://github.com/habitrpg/habitrpg/commits/ecbe780e70549b1470504efe052f238c89a9db14)) -- **mounts:** Move avatar upward when mounted regardless of pet - ([bc1adeb1](https://github.com/habitrpg/habitrpg/commits/bc1adeb1277103a5ca1f756e175ed68bbe837a2f)) -- **nodemon:** ignore CHANGELOG.md on watch - ([d6c55952](https://github.com/habitrpg/habitrpg/commits/d6c55952da8b49f36e9d8e4570d80931d081343d)) -- **party:** Round boss health up instead of to nearest integer - ([626da568](https://github.com/habitrpg/habitrpg/commits/626da5681f5ea95700f8ddf40587c7184926971c), - [#2504](https://github.com/habitrpg/habitrpg/issues/2504)) -- **paypal:** fixes #2492, remove environment check for now, only have production-mode option. revisit - ([1dc68112](https://github.com/habitrpg/habitrpg/commits/1dc68112d131e4ebdec32ddff938eb6311d6565f)) -- **profile:** fix bug where empty profile displayed on username click - ([0579c432](https://github.com/habitrpg/habitrpg/commits/0579c432489c4a038e8c9f95ea3b285f5abc146f), - [#2465](https://github.com/habitrpg/habitrpg/issues/2465)) -- **quests:** - - bug fix to multi-drop - ([f478d10c](https://github.com/habitrpg/habitrpg/commits/f478d10c20f816cd104b3f0da814c189957f45f5)) - - list multiple rewards in dialog - ([e48c7277](https://github.com/habitrpg/habitrpg/commits/e48c7277f8256cf827790aece51e897fe0439374)) -- **settings:** reintroduce space between captions and help bubbles stripped during localization - ([5ddf09fe](https://github.com/habitrpg/habitrpg/commits/5ddf09fe13c7f8d844c8c47be0fb8f8b2fd1df33)) -- **spells:** - - more $rootScope spell-casting bug fixes - ([47bd6dcb](https://github.com/habitrpg/habitrpg/commits/47bd6dcb79778d90d6f3ddeb003c3d8e45433333)) - - add some spells tests, don't send up body to spell paths - ([e0646bb9](https://github.com/habitrpg/habitrpg/commits/e0646bb98d44b6874b5259107c9be5fa34c58933)) - - some $rootScope.applying action fixes so cast-ending is immediate instead of waiting on response. Also, slim down party population to the essentials to avoid RequestEntityTooLarge - ([c6f7ab8a](https://github.com/habitrpg/habitrpg/commits/c6f7ab8a5c6f4e382208a928b90ba5f4eba9cd37)) - - to cancel spell-casting - ([a1df41ad](https://github.com/habitrpg/habitrpg/commits/a1df41ad8165cd9eb6d2d5d59c7fe404edde716c)) -- **stable:** show hatchable combo when petOwned>0 (fyi @deilann) - ([51bff238](https://github.com/habitrpg/habitrpg/commits/51bff23885ca0080e7e71ff752daa0950ae923ae)) -- **stats:** Better layout for attribute point allocation - ([d782fc6b](https://github.com/habitrpg/habitrpg/commits/d782fc6b6a3cd7e90d327c93a5764626b2990c74)) -- **tests:** - - include select2 in test manifest - ([38b4cea7](https://github.com/habitrpg/habitrpg/commits/38b4cea73299f51c4db7f6b2eb12533d219745f8)) - - don't use cluster in tests, else we get "connection refused" - ([7a479098](https://github.com/habitrpg/habitrpg/commits/7a479098dc6535654e322c737d80813790967941) \ No newline at end of file diff --git a/Gruntfile.js b/Gruntfile.js index 954215132f..b692b6c6bc 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,4 +1,5 @@ /*global module:false*/ +require('babel-core/register'); var _ = require('lodash'); module.exports = function(grunt) { @@ -51,17 +52,6 @@ module.exports = function(grunt) { } }, - browserify: { - dist: { - src: ["common/index.js"], - dest: "common/dist/scripts/habitrpg-shared.js" - }, - options: { - transform: ['coffeeify'] - //debug: true Huge data uri source map (400kb!) - } - }, - copy: { build: { files: [ @@ -136,13 +126,12 @@ module.exports = function(grunt) { }); // Register tasks. - grunt.registerTask('build:prod', ['loadManifestFiles', 'clean:build', 'browserify', 'uglify', 'stylus', 'cssmin', 'copy:build', 'hashres']); - grunt.registerTask('build:dev', ['browserify', 'cssmin', 'stylus']); + grunt.registerTask('build:prod', ['loadManifestFiles', 'clean:build', 'uglify', 'stylus', 'cssmin', 'copy:build', 'hashres']); + grunt.registerTask('build:dev', ['cssmin', 'stylus']); grunt.registerTask('build:test', ['test:prepare:translations', 'build:dev']); grunt.registerTask('test:prepare:translations', function() { - require('coffee-script'); - var i18n = require('./website/src/i18n'), + var i18n = require('./website/src/libs/i18n'), fs = require('fs'); fs.writeFileSync('test/spec/mocks/translations.js', "if(!window.env) window.env = {};\n" + @@ -150,7 +139,6 @@ module.exports = function(grunt) { }); // Load tasks - grunt.loadNpmTasks('grunt-browserify'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-clean'); grunt.loadNpmTasks('grunt-contrib-stylus'); diff --git a/README.md b/README.md index b9a02261ff..e546a4295d 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ -Habitica [![Build Status](https://travis-ci.org/HabitRPG/habitrpg.svg?branch=develop)](https://travis-ci.org/HabitRPG/habitrpg) [![Code Climate](https://codeclimate.com/github/HabitRPG/habitrpg.svg)](https://codeclimate.com/github/HabitRPG/habitrpg) [![Coverage Status](https://coveralls.io/repos/HabitRPG/habitrpg/badge.svg?branch=develop)](https://coveralls.io/r/HabitRPG/habitrpg?branch=develop) [![Bountysource](https://api.bountysource.com/badge/tracker?tracker_id=68393)](https://www.bountysource.com/trackers/68393-habitrpg?utm_source=68393&utm_medium=shield&utm_campaign=TRACKER_BADGE) [![Dependency Status](https://gemnasium.com/HabitRPG/habitrpg.svg)](https://gemnasium.com/HabitRPG/habitrpg) +Habitica [![Build Status](https://travis-ci.org/HabitRPG/habitrpg.svg?branch=develop)](https://travis-ci.org/HabitRPG/habitrpg) [![Code Climate](https://codeclimate.com/github/HabitRPG/habitrpg.svg)](https://codeclimate.com/github/HabitRPG/habitrpg) [![Coverage Status](https://coveralls.io/repos/HabitRPG/habitrpg/badge.svg?branch=develop)](https://coveralls.io/r/HabitRPG/habitrpg?branch=develop) [![Bountysource](https://api.bountysource.com/badge/tracker?tracker_id=68393)](https://www.bountysource.com/trackers/68393-habitrpg?utm_source=68393&utm_medium=shield&utm_campaign=TRACKER_BADGE) =============== [Habitica](https://habitica.com) is an open source habit building program which treats your life like a Role Playing Game. Level up as you succeed, lose HP as you fail, earn money to buy weapons and armor. We need more programmers! Your assistance will be greatly appreciated. -For an introduction to the technologies used and how the software is organised, refer to [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica#Coders_.28Web_.26_Mobile.29) - "Coders (Web & Mobile)" section. +For an introduction to the technologies used and how the software is organized, refer to [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica#Coders_.28Web_.26_Mobile.29) - "Coders (Web & Mobile)" section. To set up a local install of Habitica for development and testing, see [Setting up Habitica Locally](http://habitica.wikia.com/wiki/Setting_up_Habitica_Locally), which contains instructions for Windows, *nix / Mac OS, and Vagrant. diff --git a/archive/CHANGELOG_ARCHIVED.md b/archive/CHANGELOG_ARCHIVED.md deleted file mode 100644 index 59950d5c4c..0000000000 --- a/archive/CHANGELOG_ARCHIVED.md +++ /dev/null @@ -1,34 +0,0 @@ -My app - Changelog -# (2015-05-08) - -## Bug Fixes - -- **Spring:** WHO IS LESLIE - ([6685e935](watch/commits/6685e93554a1274dedb55dae054e787fb80eb440)) -- **invite-friends:** text should be valid for both parties and guilds - ([54e82a14](watch/commits/54e82a14a252c3b9923449a7ef7cee6033a5d160)) -- **mystery:** It's 2015 now, Sabe - ([00252f20](watch/commits/00252f200481f06de9bccd1e55275d5366b03919)) -- **scoring:** move gainMP into score - ([2fc0cb8f](watch/commits/2fc0cb8fa1b3b5975c16653cb110be2f03b5427e)) -- **slimes:** Tweaks and missing sprite - ([7d1a58ca](watch/commits/7d1a58ca002af9dac19aba65d6465bd23b28d649)) - - -## Features - -- **Spring:** Flung - ([d50d4ad8](watch/commits/d50d4ad8bb0f89e39ceb6562e0f8f392f94b5444)) -- **emails:** add support for weekly recap emails - ([37f7db3c](watch/commits/37f7db3c4e3859d03fd55a44e63819e273a06442)) -- **i18n:** upload japanese, serbian and chinese (taiwan) - ([ee7ba19e](watch/commits/ee7ba19ed17e72b33cbef8a324266617d384f852)) -- **mystery:** April Subscribee Items - ([7a7fc968](watch/commits/7a7fc96818ffd7f92738e8c6cc8a59e48d60597d)) -- **pets:** Slime Quest - ([f13c6cba](watch/commits/f13c6cba0026c645b19a0b1355ba2c5b27f80878)) -- **quests:** Boss damage from Habits - ([43dcded0](watch/commits/43dcded051b602d8a4efc30eef45365abfd238b4)) -- **scoring:** MP gain from Habits and Dailies - ([7b22244f](watch/commits/7b22244f0123cf649c9f2aada0811f35a565688d)) - diff --git a/archive/README.md b/archive/README.md deleted file mode 100644 index a1e5cc1ee4..0000000000 --- a/archive/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# What's This? - -I'm consolidating @litenull's rewrite branch with the old code, and removing files from both sources once they've been -successfully merged into the new platform. While @litenull's "from scratch" approach was really clean, it will take -us longer to implemente all the original features. This approach will (1) let us leverage code we already have, (2) merge -in litenull's hard work from the last few weeks. - -Once this archive/ directory is completely empty, we should be fully merged and ready to deploy the rewrite! \ No newline at end of file diff --git a/archive/derby_controllers/browser.coffee b/archive/derby_controllers/browser.coffee deleted file mode 100644 index 5efa078558..0000000000 --- a/archive/derby_controllers/browser.coffee +++ /dev/null @@ -1,46 +0,0 @@ -_ = require 'lodash' -moment = require 'moment' - -### - Loads JavaScript files from public/vendor/* - Use require() to min / concatinate for faster page load -### -loadJavaScripts = (model) -> - - # Turns out you can't have expressions in browserify require() statements - #vendor = '../../public/vendor' - #require "#{vendor}/jquery-ui-1.10.2/jquery-1.9.1" - - ### - Internal Scripts - ### - require "../vendor/jquery.cookie.min.js" - require "../vendor/bootstrap/js/bootstrap.min.js" - require "../vendor/datepicker/js/bootstrap-datepicker" - require "../vendor/bootstrap-tour/bootstrap-tour" - - unless (model.get('_mobileDevice') is true) - require "../vendor/sticky" - - # note: external script loading is handled in app.on('render') near the bottom of this file (see https://groups.google.com/forum/?fromgroups=#!topic/derbyjs/x8FwdTLEuXo) - - -# jquery sticky header on scroll, no need for position fixed -initStickyHeader = (model) -> - $('.header-wrap').sticky({topSpacing:0}) - - -module.exports.app = (appExports, model, app) -> - - app.on 'render', (ctx) -> - #restoreRefs(model) - unless model.get('_mobileDevice') - setupTooltips(model) - initStickyHeader(model) - setupSortable(model) - - $('.datepicker').datepicker({autoclose:true, todayBtn:true}) - .on 'changeDate', (ev) -> - #for some reason selecting a date doesn't fire a change event on the field, meaning our changes aren't saved - model.at(ev.target).set 'date', moment(ev.date).format('MM/DD/YYYY') - diff --git a/archive/derby_controllers/challenges.coffee b/archive/derby_controllers/challenges.coffee deleted file mode 100644 index d89ebef890..0000000000 --- a/archive/derby_controllers/challenges.coffee +++ /dev/null @@ -1,239 +0,0 @@ -_ = require 'lodash' -{helpers} = require 'habitrpg-shared' -async = require 'async' - -module.exports.app = (app) -> - - ### - Sync any updates to challenges since last refresh. Do it after cron, so we don't punish them for new tasks - This is challenge->user sync. user->challenge happens when user interacts with their tasks - ### - app.on 'ready', (model) -> - window.setTimeout -> - _.each model.get('groups'), (g) -> - if (@uid in g.members) and g.challenges - _.each(g.challenges, ->app.challenges.syncChalToUser g) - true - , 500 - - ### - Sync user to challenge (when they score, add to statistics) - ### - app.model.on "change", "_page.user.priv.tasks.*.value", (id, value, previous, passed) -> - ### Sync to challenge, but do it later ### - async.nextTick => - model = app.model - ctx = {model: model} - task = model.at "_page.user.priv.tasks.#{id}" - tobj = task.get() - pub = model.get "_page.user.pub" - - if (chalTask = helpers.taskInChallenge.call ctx, tobj)? and chalTask.get() - chalTask.increment "value", value - previous - chal = model.at "groups.#{tobj.group.id}.challenges.#{tobj.challenge}" - chalUser = -> helpers.indexedAt.call(ctx, chal.path(), 'members', {id:pub.id}) - cu = chalUser() - unless cu?.get() - chal.push "members", {id: pub.id, name: model.get(pub.profile.name)} - cu = model.at chalUser() - else - cu.set 'name', pub.profile.name # update their name incase it changed - cu.set "#{tobj.type}s.#{tobj.id}", - value: tobj.value - history: tobj.history - - ### - Render graphs for user scores when the "Challenges" tab is clicked - ### - - ### - TODO - 1) on main tab click or party - * sort & render graphs for party - 2) guild -> all guilds - 3) public -> all public - ### - - - ### - $('#profile-challenges-tab-link').on 'shown', -> - async.each _.toArray(model.get('groups')), (g) -> - async.each _.toArray(g.challenges), (chal) -> - async.each _.toArray(chal.tasks), (task) -> - async.each _.toArray(chal.members), (member) -> - if (history = member?["#{task.type}s"]?[task.id]?.history) and !!history - data = google.visualization.arrayToDataTable _.map(history, (h)-> [h.date,h.value]) - options = - backgroundColor: { fill:'transparent' } - width: 150 - height: 50 - chartArea: width: '80%', height: '80%' - axisTitlePosition: 'none' - legend: position: 'bottom' - hAxis: gridlines: color: 'transparent' # since you can't seem to *remove* gridlines... - vAxis: gridlines: color: 'transparent' - chart = new google.visualization.LineChart $(".challenge-#{chal.id}-member-#{member.id}-history-#{task.id}")[0] - chart.draw(data, options) - ### - - app.fn - challenges: - - ### - Create - ### - create: (e,el) -> - [type, gid] = [$(el).attr('data-type'), $(el).attr('data-gid')] - cid = @model.id() - @model.set '_page.new.challenge', - id: cid - name: '' - habits: [] - dailys: [] - todos: [] - rewards: [] - user: - uid: @uid - name: @pub.get('profile.name') - group: {type, id:gid} - timestamp: +new Date - - ### - Save - ### - save: -> - newChal = @model.get('_page.new.challenge') - [gid, cid] = [newChal.group.id, newChal.id] - @model.push "_page.lists.challenges.#{gid}", newChal, -> - app.browser.growlNotification('Challenge Created','success') - app.challenges.discard() - app.browser.resetDom() # something is going absolutely haywire here, all model data at end of reflist after chal created - - ### - Toggle Edit - ### - toggleEdit: (e, el) -> - path = "_page.editing.challenges.#{$(el).attr('data-id')}" - @model.set path, !@model.get(path) - - ### - Discard - ### - discard: -> - @model.del '_page.new.challenge' - - ### - Delete - ### - delete: (e) -> - return unless confirm("Delete challenge, are you sure?") is true - e.at().remove() - - ### - Add challenge name as a tag for user - ### - syncChalToUser: (chal) -> - return unless chal - ### Sync tags ### - tags = @priv.get('tags') or [] - idx = _.findIndex tags, {id: chal.id} - if ~idx and (tags[idx].name isnt chal.name) - ### update the name - it's been changed since ### - @priv.set "tags.#{idx}.name", chal.name - else - @priv.push 'tags', {id: chal.id, name: chal.name, challenge: true} - - tags = {}; tags[chal.id] = true - _.each chal.habits.concat(chal.dailys.concat(chal.todos.concat(chal.rewards))), (task) => - _.defaults task, { tags, challenge: chal.id, group: {id: chal.group.id, type: chal.group.type} } - path = "tasks.#{task.id}" - if @priv.get path - @priv.set path, _.defaults(@priv.get(path), task) - else - @model.push "_page.lists.tasks.#{@uid}.#{task.type}s", task - true - - ### - Subscribe - ### - subscribe: (e) -> - chal = e.get() - ### Add all challenge's tasks to user's tasks ### - currChallenges = @pub.get('challenges') - @pub.unshift('challenges', chal.id) unless currChallenges and ~currChallenges.indexOf(chal.id) - e.at().push "members", - id: @uid - name: @pub.get('profile.name') - app.challenges.syncChalToUser(chal) - - ### - -------------------------- - Unsubscribe functions - -------------------------- - ### - - unsubscribe: (chal, keep=true) -> - - ### Remove challenge from user ### - i = @pub.get('challenges')?.indexOf(chal.id) - if i? and ~i - @pub.remove("challenges", i, 1) - - ### Remove user from challenge ### - if ~(i = _.findIndex chal.members, {id: @uid}) - @model.remove "groups.#{chal.group.id}.challenges.#{chal.id}.members", i, 1 - - ### Remove tasks from user ### - async.each chal.habits.concat(chal.dailys.concat(chal.todos.concat(chal.rewards))), (task) => - if keep is true - @priv.del "tasks.#{task.id}.challenge" - else - path = "_page.lists.tasks.#{@uid}.#{task.type}s" - if ~(i = _.findIndex(@model.get(path), {id:task.id})) - @model.remove(path, i, 1) - true - - taskUnsubscribe: (e, el) -> - - ### - since the challenge was deleted, we don't have its data to unsubscribe from - but we have the vestiges on the task - FIXME this is a really dumb way of doing this - ### - tasks = @priv.get('tasks') - tobj = tasks[$(el).attr("data-tid")] - deletedChal = - id: tobj.challenge - members: [@uid] - habits: _.where tasks, {type: 'habit', challenge: tobj.challenge} - dailys: _.where tasks, {type: 'daily', challenge: tobj.challenge} - todos: _.where tasks, {type: 'todo', challenge: tobj.challenge} - rewards: _.where tasks, {type: 'reward', challenge: tobj.challenge} - - switch $(el).attr('data-action') - when 'keep' - @priv.del "tasks.#{tobj.id}.challenge" - @priv.del "tasks.#{tobj.id}.group" - when 'keep-all' - app.challenges.unsubscribe.call @, deletedChal, true - when 'remove' - path = "_page.lists.tasks.#{@uid}.#{tobj.type}s" - if ~(i = _.findIndex @model.get(path), {id: tobj.id}) - @model.remove path, i - when 'remove-all' - app.challenges.unsubscribe.call @, deletedChal, false - - challengeUnsubscribe: (e, el) -> - $(el).popover('destroy').popover({ - html: true - placement: 'top' - trigger: 'manual' - title: 'Unsubscribe From Challenge And:' - content: """ - Remove Tasks
- Keep Tasks
- Cancel
- """ - }).popover('show') - $('.challenge-unsubscribe-and-remove').click => app.challenges.unsubscribe.call @, e.get(), false - $('.challenge-unsubscribe-and-keep').click => app.challenges.unsubscribe.call @, e.get(), true - $('[class^=challenge-unsubscribe]').click => $(el).popover('destroy') \ No newline at end of file diff --git a/archive/derby_controllers/filters.coffee b/archive/derby_controllers/filters.coffee deleted file mode 100644 index d03d8424e4..0000000000 --- a/archive/derby_controllers/filters.coffee +++ /dev/null @@ -1,22 +0,0 @@ -_ = require 'lodash' - -module.exports.app = (appExports, model) -> - user = model.at('_user') - - appExports.filtersDeleteTag = (e, el) -> - tags = user.get('tags') - tag = e.at "_user.tags." + $(el).attr('data-index') - tagId = tag.get('id') - - ###something got corrupted, let's clear the corrupt tags### - unless tagId - user.set 'tags', _.filter( tags, ((t)-> t?.id) ) - user.set 'filters', {} - return - - model.del "_user.filters.#{tagId}" - tag.remove() - - ### remove tag from all tasks### - _.each user.get("tasks"), (task) -> user.del "tasks.#{task.id}.tags.#{tagId}"; true - diff --git a/archive/derby_controllers/groups.coffee b/archive/derby_controllers/groups.coffee deleted file mode 100644 index 79992f0f6a..0000000000 --- a/archive/derby_controllers/groups.coffee +++ /dev/null @@ -1,139 +0,0 @@ -_ = require('lodash') -helpers = require('habitrpg-shared/script/helpers') - -module.exports.app = (appExports, model, app) -> - browser = require './browser' - - _currentTime = model.at '_currentTime' - _currentTime.setNull +new Date - # Every 60 seconds, reset the current time so that the chat can update relative times - setInterval (->_currentTime.set +new Date), 60000 - - appExports.groupCreate = (e,el) -> - type = $(el).attr('data-type') - newGroup = - name: model.get("_new.group.name") - description: model.get("_new.group.description") - leader: user.get('id') - members: [user.get('id')] - type: type - - # parties - free - if type is 'party' - return model.add 'groups', newGroup, ->location.reload() - - # guilds - 4G - unless user.get('balance') >= 1 - return $('#more-gems-modal').modal 'show' - if confirm "Create Guild for 4 Gems?" - newGroup.privacy = (model.get("_new.group.privacy") || 'public') if type is 'guild' - newGroup.balance = 1 # they spent $ to open the guild, it goes into their guild bank - model.add 'groups', newGroup, -> - user.incr 'balance', -1, ->location.reload() - - appExports.toggleGroupEdit = (e, el) -> - path = "_editing.groups.#{$(el).attr('data-gid')}" - model.set path, !model.get(path) - - appExports.toggleLeaderMessageEdit = (e, el) -> - path = "_editing.leaderMessage.#{$(el).attr('data-gid')}" - model.set path, !model.get(path) - - appExports.groupAddWebsite = (e, el) -> - test = e.get() - e.at().unshift 'websites', model.get('_newGroupWebsite') - model.del '_newGroupWebsite' - - appExports.groupInvite = (e,el) -> - uid = model.get('_groupInvitee').replace(/[\s"]/g, '') - model.set '_groupInvitee', '' - return if _.isEmpty(uid) - - model.query('users').publicInfo([uid]).fetch (err, profiles) -> - throw err if err - profile = profiles.at(0).get() - return model.set("_groupError", "User with id #{uid} not found.") unless profile - model.query('groups').withMember(uid).fetch (err, g) -> - throw err if err - group = e.get(); groups = g.get() - {type, name} = group; gid = group.id - groupError = (msg) -> model.set("_groupError", msg) - invite = -> - $.bootstrapGrowl "Invitation Sent." - switch type - when 'guild' then model.push "users.#{uid}.invitations.guilds", {id:gid, name}, ->location.reload() - when 'party' then model.set "users.#{uid}.invitations.party", {id:gid, name}, ->location.reload() - - switch type - when 'guild' - if profile.invitations?.guilds and _.find(profile.invitations.guilds, {id:gid}) - return groupError("User already invited to that group") - else if uid in group.members - return groupError("User already in that group") - else invite() - when 'party' - if profile.invitations?.party - return groupError("User already pending invitation.") - else if _.find(groups, {type:'party'}) - return groupError("User already in a party.") - else invite() - - - appExports.acceptInvitation = (e,el) -> - gid = e.get('id') - if $(el).attr('data-type') is 'party' - user.set 'invitations.party', null, ->joinGroup(gid) - else - e.at().remove ->joinGroup(gid) - - appExports.rejectInvitation = (e, el) -> - clear = -> browser.resetDom(model) - if e.at().path().indexOf('party') != -1 - model.del e.at().path(), clear - else e.at().remove clear - - appExports.groupLeave = (e,el) -> - if confirm("Leave this group, are you sure?") is true - uid = user.get('id') - group = model.at "groups.#{$(el).attr('data-id')}" - index = group.get('members').indexOf(uid) - if index != -1 - group.remove 'members', index, 1, -> - updated = group.get() - # last member out, delete the party - if _.isEmpty(updated.members) and (updated.type is 'party') - group.del ->location.reload() - # assign new leader, so the party is editable #TODO allow old leader to assign new leader, this is just random - else if (updated.leader is uid) - group.set "leader", updated.members[0], ->location.reload() - else location.reload() - - ### - Chat Functionality - ### - - model.on 'unshift', '_party.chat', -> $('.chat-message').tooltip() - model.on 'unshift', '_habitrpg.chat', -> $('.chat-message').tooltip() - - appExports.chatKeyup = (e, el, next) -> - return next() unless e.keyCode is 13 - appExports.sendChat(e, el) - - appExports.deleteChatMessage = (e) -> - if confirm("Delete chat message?") is true - e.at().remove() #requires the {#with} - - app.on 'render', (ctx) -> - $('#party-tab-link').on 'shown', (e) -> - messages = model.get('_party.chat') - return false unless messages?.length > 0 - model.set '_user.party.lastMessageSeen', messages[0].id - - appExports.gotoPartyChat = -> - model.set '_gamePane', true, -> - $('#party-tab-link').tab('show') - - appExports.assignGroupLeader = (e, el) -> - newLeader = model.get('_new.groupLeader') - if newLeader and (confirm("Assign new leader, you sure?") is true) - e.at().set('leader', newLeader, ->browser.resetDom(model)) if newLeader diff --git a/archive/derby_controllers/i18n.coffee b/archive/derby_controllers/i18n.coffee deleted file mode 100644 index b9ed898876..0000000000 --- a/archive/derby_controllers/i18n.coffee +++ /dev/null @@ -1,7 +0,0 @@ -i18n = require 'derby-i18n' - -i18n.plurals.add 'he', (n) -> n -i18n.plurals.add 'bg', (n) -> n -i18n.plurals.add 'nl', (n) -> n - -module.exports = i18n diff --git a/archive/derby_controllers/index.coffee b/archive/derby_controllers/index.coffee deleted file mode 100644 index e88b23c79b..0000000000 --- a/archive/derby_controllers/index.coffee +++ /dev/null @@ -1,20 +0,0 @@ -# Translations -i18n = require './i18n' -i18n.localize app, - availableLocales: ['en', 'he', 'bg', 'nl'] - defaultLocale: 'en' - urlScheme: false - checkHeader: true - - -# ========== CONTROLLER FUNCTIONS ========== - -ready (model) -> - misc.fixCorruptUser(model) # https://github.com/lefnire/habitrpg/issues/634 - - # used for things like remove website, chat, etc - exports.removeAt = (e, el) -> - if (confirmMessage = $(el).attr 'data-confirm')? - return unless confirm(confirmMessage) is true - e.at().remove() - browser.resetDom(model) if $(el).attr('data-refresh') diff --git a/archive/derby_controllers/items.coffee b/archive/derby_controllers/items.coffee deleted file mode 100644 index 9c118be29b..0000000000 --- a/archive/derby_controllers/items.coffee +++ /dev/null @@ -1,39 +0,0 @@ -items = require 'habitrpg-shared/script/items' -_ = require 'lodash' - -updateStore = (model) -> - nextItems = items.updateStore(model.get('_user')) - _.each nextItems, (v,k) -> model.set("_items.next.#{k}",v); true - -### - server exports -### -module.exports.server = (model) -> - model.set '_items', items.items - updateStore(model) - -### - app exports -### -module.exports.app = (appExports, model) -> - misc = require './misc' - - model.on "set", "_user.items.*", -> updateStore(model) - - appExports.buyItem = (e, el) -> - misc.batchTxn model, (uObj, paths) -> - ret = items.buyItem uObj, $(el).attr('data-type'), {paths} - alert("Not enough GP") if ret is false - - appExports.activateRewardsTab = -> - model.set '_activeTabRewards', true - model.set '_activeTabPets', false - appExports.activatePetsTab = -> - model.set '_activeTabPets', true - model.set '_activeTabRewards', false - - - - - - diff --git a/archive/derby_controllers/misc.coffee b/archive/derby_controllers/misc.coffee deleted file mode 100644 index 06e74249c1..0000000000 --- a/archive/derby_controllers/misc.coffee +++ /dev/null @@ -1,152 +0,0 @@ -_ = require 'lodash' -algos = require 'habitrpg-shared/script/algos' -items = require('habitrpg-shared/script/items').items -helpers = require('habitrpg-shared/script/helpers') - -#TODO put this in habitrpg-shared -### - We can't always use refLists, but we often still need to get a positional path by id: eg, users.1234.tasks.5678.value - For arrays (which use indexes, not id-paths), here's a helper function so we can run indexedPath('users',:user.id,'tasks',:task.id,'value) -### -indexedPath = -> - _.reduce arguments, (m,v) => - return v if !m #first iteration - return "#{m}.#{v}" if _.isString v #string paths - return "#{m}." + _.findIndex(@model.get(m),v) - , '' - -taskInChallenge = (task) -> - return undefined unless task?.challenge - @model.at indexedPath.call(@, "groups.#{task.group.id}.challenges", {id:task.challenge}, "#{task.type}s", {id:task.id}) - -### - algos.score wrapper for habitrpg-helpers to work in Derby. We need to do model.set() instead of simply setting the - object properties, and it's very difficult to diff the two objects and find dot-separated paths to set. So we to first - clone our user object (if we don't do that, it screws with model.on() listeners, ping Tyler for an explaination), - perform the updates while tracking paths, then all the values at those paths -### -module.exports.score = (model, taskId, direction, allowUndo=false) -> - drop = undefined - delta = batchTxn model, (uObj, paths) -> - tObj = uObj.tasks[taskId] - - # Stuff for undo - if allowUndo - tObjBefore = _.cloneDeep tObj - tObjBefore.completed = !tObjBefore.completed if tObjBefore.type in ['daily', 'todo'] - previousUndo = model.get('_undo') - clearTimeout(previousUndo.timeoutId) if previousUndo?.timeoutId - timeoutId = setTimeout (-> model.del('_undo')), 20000 - model.set '_undo', {stats:_.cloneDeep(uObj.stats), task:tObjBefore, timeoutId: timeoutId} - - delta = algos.score(uObj, tObj, direction, {paths}) - model.set('_streakBonus', uObj._tmp.streakBonus) if uObj._tmp?.streakBonus - drop = uObj._tmp?.drop - - # Update challenge statistics - # FIXME put this in it's own batchTxn, make batchTxn model.at() ref aware (not just _user) - # FIXME use reflists for users & challenges - if (chalTask = taskInChallenge.call({model}, tObj)) and chalTask?.get() - model._dontPersist = false - chalTask.incr "value", delta - chal = model.at indexedPath.call({model}, "groups.#{tObj.group.id}.challenges", {id:tObj.challenge}) - chalUser = -> indexedPath.call({model}, chal.path(), 'users', {id:uObj.id}) - cu = model.at chalUser() - unless cu?.get() - chal.push "users", {id: uObj.id, name: helpers.username(uObj.auth, uObj.profile?.name)} - cu = model.at chalUser() - else - cu.set 'name', helpers.username(uObj.auth, uObj.profile?.name) # update their name incase it changed - cu.set "#{tObj.type}s.#{tObj.id}", - value: tObj.value - history: tObj.history - model._dontPersist = true - , done:-> - if drop and $? - model.set '_drop', drop - $('#item-dropped-modal').modal 'show' - - delta - -### - Cleanup task-corruption (null tasks, rogue/invisible tasks, etc) - Obviously none of this should be happening, but we'll stop-gap until we can find & fix - Gotta love refLists! see https://github.com/lefnire/habitrpg/issues/803 & https://github.com/lefnire/habitrpg/issues/6343 -### -module.exports.fixCorruptUser = (model) -> - user = model.at('_user') - tasks = user.get('tasks') - - ## Remove corrupted tasks - _.each tasks, (task, key) -> - unless task?.id? and task?.type? - user.del("tasks.#{key}") - delete tasks[key] - true - resetDom = false - batchTxn model, (uObj, paths, batch) -> - ## fix https://github.com/lefnire/habitrpg/issues/1086 - uniqPets = _.uniq(uObj.items.pets) - batch.set('items.pets', uniqPets) if !_.isEqual(uniqPets, uObj.items.pets) - - if uObj.invitations?.guilds - uniqInvites = _.uniq(uObj.invitations.guilds) - batch.set('invitations.guilds', uniqInvites) if !_.isEqual(uniqInvites, uObj.invitations.guilds) - - ## Task List Cleanup - ['habit','daily','todo','reward'].forEach (type) -> - - # 1. remove duplicates - # 2. restore missing zombie tasks back into list - idList = uObj["#{type}Ids"] - taskIds = _.pluck( _.where(tasks, {type}), 'id') - union = _.union idList, taskIds - - # 2. remove empty (grey) tasks - preened = _.filter union, (id) -> id and _.contains(taskIds, id) - - # There were indeed issues found, set the new list - if !_.isEqual(idList, preened) - batch.set("#{type}Ids", preened) - console.error uObj.id + "'s #{type}s were corrupt." - true - resetDom = !_.isEmpty(paths) - require('./browser').resetDom(model) if resetDom - -module.exports.viewHelpers = (view) -> - - #misc - view.fn "percent", (x, y) -> - x=1 if x==0 - Math.round(x/y*100) - view.fn 'indexOf', (str1, str2) -> - return false unless str1 && str2 - str1.indexOf(str2) != -1 - view.fn "round", Math.round - view.fn "floor", Math.floor - view.fn "ceil", Math.ceil - view.fn "truarr", (num) -> num-1 - view.fn 'count', (arr) -> arr?.length or 0 - view.fn 'int', - get: (num) -> num - set: (num) -> [parseInt(num)] - view.fn 'indexedPath', indexedPath - - - #iCal - view.fn "encodeiCalLink", helpers.encodeiCalLink - - #User - view.fn "gems", (balance) -> balance * 4 - - #Challenges - view.fn 'taskInChallenge', (task) -> - taskInChallenge.call(@,task)?.get() - view.fn 'taskAttrFromChallenge', (task, attr) -> - taskInChallenge.call(@,task)?.get(attr) - view.fn 'brokenChallengeLink', (task) -> - task?.challenge and !(taskInChallenge.call(@,task)?.get()) - - view.fn 'challengeMemberScore', (member, tType, tid) -> - Math.round(member["#{tType}s"]?[tid]?.value) - diff --git a/archive/derby_controllers/pets.coffee b/archive/derby_controllers/pets.coffee deleted file mode 100644 index 46288b5164..0000000000 --- a/archive/derby_controllers/pets.coffee +++ /dev/null @@ -1,73 +0,0 @@ -_ = require 'lodash' -{ randomVal } = require 'habitrpg-shared/script/helpers' -{ pets, hatchingPotions } = require('habitrpg-shared/script/items').items - -### - app exports -### -module.exports.app = (appExports, model) -> - user = model.at '_user' - - appExports.chooseEgg = (e, el) -> - model.ref '_hatchEgg', e.at() - - appExports.hatchEgg = (e, el) -> - hatchingPotionName = $(el).children('select').val() - myHatchingPotion = user.get 'items.hatchingPotions' - egg = model.get '_hatchEgg' - eggs = user.get 'items.eggs' - myPets = user.get 'items.pets' - - hatchingPotionIdx = myHatchingPotion.indexOf hatchingPotionName - eggIdx = eggs.indexOf egg - - return alert "You don't own that hatching potion yet, complete more tasks!" if hatchingPotionIdx is -1 - return alert "You don't own that egg yet, complete more tasks!" if eggIdx is -1 - return alert "You already have that pet, hatch a different combo." if myPets and myPets.indexOf("#{egg.name}-#{hatchingPotionName}") != -1 - - user.push 'items.pets', egg.name + '-' + hatchingPotionName, -> - eggs.splice eggIdx, 1 - myHatchingPotion.splice hatchingPotionIdx, 1 - user.set 'items.eggs', eggs - user.set 'items.hatchingPotions', myHatchingPotion - - alert 'Your egg hatched! Visit your stable to equip your pet.' - - #FIXME Bug: this removes from the array properly in the browser, but on refresh is has removed all items from the arrays -# user.remove 'items.hatchingPotions', hatchingPotionIdx, 1 -# user.remove 'items.eggs', eggIdx, 1 - - appExports.choosePet = (e, el, next) -> - petStr = $(el).attr('data-pet') - - return next() if user.get('items.pets').indexOf(petStr) == -1 - # If user's pet is already active, deselect it - return user.set 'items.currentPet', {} if user.get('items.currentPet.str') is petStr - - [name, modifier] = petStr.split('-') - pet = _.find pets, {name: name} - pet.modifier = modifier - pet.str = petStr - user.set 'items.currentPet', pet - - appExports.buyHatchingPotion = (e, el) -> - name = $(el).attr 'data-hatchingPotion' - newHatchingPotion = _.find hatchingPotions, {name: name} - gems = user.get('balance') * 4 - if gems >= newHatchingPotion.value - if confirm "Buy this hatching potion with #{newHatchingPotion.value} of your #{gems} Gems?" - user.push 'items.hatchingPotions', newHatchingPotion.name - user.set 'balance', (gems - newHatchingPotion.value) / 4 - else - $('#more-gems-modal').modal 'show' - - appExports.buyEgg = (e, el) -> - name = $(el).attr 'data-egg' - newEgg = _.find pets, {name: name} - gems = user.get('balance') * 4 - if gems >= newEgg.value - if confirm "Buy this egg with #{newEgg.value} of your #{gems} Gems?" - user.push 'items.eggs', newEgg - user.set 'balance', (gems - newEgg.value) / 4 - else - $('#more-gems-modal').modal 'show' diff --git a/archive/derby_controllers/tasks.coffee b/archive/derby_controllers/tasks.coffee deleted file mode 100644 index 1a01c095e0..0000000000 --- a/archive/derby_controllers/tasks.coffee +++ /dev/null @@ -1,29 +0,0 @@ -algos = require 'habitrpg-shared/script/algos' -helpers = require 'habitrpg-shared/script/helpers' -_ = require 'lodash' -moment = require 'moment' -misc = require './misc' - - appExports.clearCompleted = (e, el) -> - completedIds = _.pluck( _.where(model.get('_todoList'), {completed:true}), 'id') - todoIds = user.get('todoIds') - _.each completedIds, (id) -> user.del "tasks.#{id}"; true - user.set 'todoIds', _.difference(todoIds, completedIds) - - - ### - Undo - ### - appExports.undo = () -> - undo = model.get '_undo' - clearTimeout(undo.timeoutId) if undo?.timeoutId - model.del '_undo' - _.each undo.stats, (val, key) -> user.set "stats.#{key}", val; true - taskPath = "tasks.#{undo.task.id}" - _.each undo.task, (val, key) -> - return true if key in ['id', 'type'] # strange bugs in this world: https://workflowy.com/shared/a53582ea-43d6-bcce-c719-e134f9bf71fd/ - if key is 'completed' - user.pass({cron:true}).set("#{taskPath}.completed",val) - else - user.set "#{taskPath}.#{key}", val - true diff --git a/archive/derby_controllers/unlock.coffee b/archive/derby_controllers/unlock.coffee deleted file mode 100644 index 73527b9d8a..0000000000 --- a/archive/derby_controllers/unlock.coffee +++ /dev/null @@ -1,95 +0,0 @@ -_ = require 'lodash' -{ randomVal } = require 'habitrpg-shared/script/helpers' -{ pets, hatchingPotions } = require('habitrpg-shared/script/items').items - -### - Listeners to enabled flags, set notifications to the user when they've unlocked features -### - -module.exports.app = (appExports, model) -> - user = model.at('_user') - - alreadyShown = (before, after) -> !(!before and after is true) - - showPopover = (selector, title, html, placement='bottom') -> - $(selector).popover('destroy') - html += " [Close]" - $(selector).popover({ - title: title - placement: placement - trigger: 'manual' - html: true - content: html - }).popover 'show' - - - user.on 'set', 'flags.customizationsNotification', (after, before) -> - return if alreadyShown(before,after) - $('.main-herobox').popover('destroy') #remove previous popovers - html = "Click your avatar to customize your appearance." - showPopover '.main-herobox', 'Customize Your Avatar', html, 'bottom' - - user.on 'set', 'flags.itemsEnabled', (after, before) -> - return if alreadyShown(before,after) - html = """ - - Congratulations, you have unlocked the Item Store! You can now buy weapons, armor, potions, etc. Read each item's comment for more information. - """ - showPopover 'div.rewards', 'Item Store Unlocked', html, 'left' - - user.on 'set', 'flags.petsEnabled', (after, before) -> - return if alreadyShown(before,after) - html = """ - - You have unlocked Pets! You can now buy pets with Gems (note, you replenish Gems with real-life money - so chose your pets wisely!) - """ - showPopover '#rewardsTabs', 'Pets Unlocked', html, 'left' - - user.on 'set', 'flags.partyEnabled', (after, before) -> - return if user.get('party.current') or alreadyShown(before,after) - html = """ - Be social, join a party and play Habit with your friends! You'll be better at your habits with accountability partners. Click User -> Options -> Party, and follow the instructions. LFG anyone? - """ - showPopover '.user-menu', 'Party System', html, 'bottom' - - user.on 'set', 'flags.dropsEnabled', (after, before) -> - return if alreadyShown(before,after) - - egg = randomVal pets - - dontPersist = model._dontPersist - - model._dontPersist = false - user.push 'items.eggs', egg - model._dontPersist = dontPersist - - $('#drops-enabled-modal').modal 'show' - - user.on 'push', 'items.pets', (after, before) -> - return if user.get('achievements.beastMaster') - if before >= 90 # evidently before is the count? - dontPersist = model._dontPersist; model._dontPersist = false - user.set 'achievements.beastMaster', true, (-> model._dontPersist = dontPersist) - $('#beastmaster-achievement-modal').modal('show') - - user.on 'set', 'items.*', (after, before) -> - return if user.get('achievements.ultimateGear') - items = user.get('items') - if parseInt(items.weapon) >= 6 and parseInt(items.armor) >= 5 and parseInt(items.head) >= 5 and parseInt(items.shield) >= 5 - dontPersist = model._dontPersist; model._dontPersist = false - user.set 'achievements.ultimateGear', true, (->model._dontPersist = dontPersist) - $('#max-gear-achievement-modal').modal('show') - - user.on 'set', 'tasks.*.streak', (id, after, before) -> - if after > 0 - - # 21-day streak, as per the old philosophy of doign a thing 21-days in a row makes a habit - if (after % 21) is 0 - dontPersist = model._dontPersist; model._dontPersist = false - user.incr 'achievements.streak', 1, (-> model._dontPersist = dontPersist) - $('#streak-achievement-modal').modal('show') - - # they're undoing a task at the 21 mark, take back their badge - else if (before - after is 1) and (before % 21 is 0) - dontPersist = model._dontPersist; model._dontPersist = false - user.incr 'achievements.streak', -1, (-> model._dontPersist = dontPersist) diff --git a/common/README.md b/common/README.md index 9d3e1e2a43..c7ecb052a6 100644 --- a/common/README.md +++ b/common/README.md @@ -12,5 +12,5 @@ Shared resources useful for the multiple Habitica repositories, that way all the Because of some wonkiness with Heroku, the spritesheet compilation is not part of the production build process and must be done manually when new images are added by running: ``` bash -grunt compile:sprites +npm run sprites ``` diff --git a/common/audio/danielTheBard/Achievement_Unlocked.mp3 b/common/audio/danielTheBard/Achievement_Unlocked.mp3 index 539771b46f..a7080af148 100644 Binary files a/common/audio/danielTheBard/Achievement_Unlocked.mp3 and b/common/audio/danielTheBard/Achievement_Unlocked.mp3 differ diff --git a/common/audio/danielTheBard/Achievement_Unlocked.ogg b/common/audio/danielTheBard/Achievement_Unlocked.ogg index b70b4fe1ec..4bf46d0326 100644 Binary files a/common/audio/danielTheBard/Achievement_Unlocked.ogg and b/common/audio/danielTheBard/Achievement_Unlocked.ogg differ diff --git a/common/audio/danielTheBard/Chat.mp3 b/common/audio/danielTheBard/Chat.mp3 index dd3d8e0995..7276235419 100644 Binary files a/common/audio/danielTheBard/Chat.mp3 and b/common/audio/danielTheBard/Chat.mp3 differ diff --git a/common/audio/danielTheBard/Chat.ogg b/common/audio/danielTheBard/Chat.ogg index 462f1fe63f..4eeccdcbfb 100644 Binary files a/common/audio/danielTheBard/Chat.ogg and b/common/audio/danielTheBard/Chat.ogg differ diff --git a/common/audio/danielTheBard/Daily.mp3 b/common/audio/danielTheBard/Daily.mp3 index 0252f35975..8bf57b2f9f 100644 Binary files a/common/audio/danielTheBard/Daily.mp3 and b/common/audio/danielTheBard/Daily.mp3 differ diff --git a/common/audio/danielTheBard/Daily.ogg b/common/audio/danielTheBard/Daily.ogg index 6cb33851ee..2a49b43c91 100644 Binary files a/common/audio/danielTheBard/Daily.ogg and b/common/audio/danielTheBard/Daily.ogg differ diff --git a/common/audio/danielTheBard/Death.mp3 b/common/audio/danielTheBard/Death.mp3 index cda07e9076..b0b131d12c 100644 Binary files a/common/audio/danielTheBard/Death.mp3 and b/common/audio/danielTheBard/Death.mp3 differ diff --git a/common/audio/danielTheBard/Death.ogg b/common/audio/danielTheBard/Death.ogg index 9c0711cbfd..ef0c10bc01 100644 Binary files a/common/audio/danielTheBard/Death.ogg and b/common/audio/danielTheBard/Death.ogg differ diff --git a/common/audio/danielTheBard/Item_Drop.mp3 b/common/audio/danielTheBard/Item_Drop.mp3 index bfaa6a7171..3ffafb65c0 100644 Binary files a/common/audio/danielTheBard/Item_Drop.mp3 and b/common/audio/danielTheBard/Item_Drop.mp3 differ diff --git a/common/audio/danielTheBard/Item_Drop.ogg b/common/audio/danielTheBard/Item_Drop.ogg index a498bdb166..20861caf21 100644 Binary files a/common/audio/danielTheBard/Item_Drop.ogg and b/common/audio/danielTheBard/Item_Drop.ogg differ diff --git a/common/audio/danielTheBard/Level_Up.mp3 b/common/audio/danielTheBard/Level_Up.mp3 index 6f0e6e1a02..b99efdc458 100644 Binary files a/common/audio/danielTheBard/Level_Up.mp3 and b/common/audio/danielTheBard/Level_Up.mp3 differ diff --git a/common/audio/danielTheBard/Level_Up.ogg b/common/audio/danielTheBard/Level_Up.ogg index fe7988b68d..4daf76d2b0 100644 Binary files a/common/audio/danielTheBard/Level_Up.ogg and b/common/audio/danielTheBard/Level_Up.ogg differ diff --git a/common/audio/danielTheBard/Minus_Habit.mp3 b/common/audio/danielTheBard/Minus_Habit.mp3 index d29c6d8fe0..87230c71f1 100644 Binary files a/common/audio/danielTheBard/Minus_Habit.mp3 and b/common/audio/danielTheBard/Minus_Habit.mp3 differ diff --git a/common/audio/danielTheBard/Minus_Habit.ogg b/common/audio/danielTheBard/Minus_Habit.ogg index 182c856262..4295f9c978 100644 Binary files a/common/audio/danielTheBard/Minus_Habit.ogg and b/common/audio/danielTheBard/Minus_Habit.ogg differ diff --git a/common/audio/danielTheBard/Plus_Habit.mp3 b/common/audio/danielTheBard/Plus_Habit.mp3 index 3f43d830ac..fc2f8088a4 100644 Binary files a/common/audio/danielTheBard/Plus_Habit.mp3 and b/common/audio/danielTheBard/Plus_Habit.mp3 differ diff --git a/common/audio/danielTheBard/Plus_Habit.ogg b/common/audio/danielTheBard/Plus_Habit.ogg index d0874ba48d..3b8a61611a 100644 Binary files a/common/audio/danielTheBard/Plus_Habit.ogg and b/common/audio/danielTheBard/Plus_Habit.ogg differ diff --git a/common/audio/danielTheBard/Reward.mp3 b/common/audio/danielTheBard/Reward.mp3 index 58994c86b2..c88009f676 100644 Binary files a/common/audio/danielTheBard/Reward.mp3 and b/common/audio/danielTheBard/Reward.mp3 differ diff --git a/common/audio/danielTheBard/Reward.ogg b/common/audio/danielTheBard/Reward.ogg index 31341da2c4..c97bf5862d 100644 Binary files a/common/audio/danielTheBard/Reward.ogg and b/common/audio/danielTheBard/Reward.ogg differ diff --git a/common/audio/danielTheBard/ToDo.mp3 b/common/audio/danielTheBard/ToDo.mp3 index 50c1e8e32e..5e7478fdd8 100644 Binary files a/common/audio/danielTheBard/ToDo.mp3 and b/common/audio/danielTheBard/ToDo.mp3 differ diff --git a/common/audio/danielTheBard/ToDo.ogg b/common/audio/danielTheBard/ToDo.ogg index 23b8244f38..3d1ea001ca 100644 Binary files a/common/audio/danielTheBard/ToDo.ogg and b/common/audio/danielTheBard/ToDo.ogg differ diff --git a/common/audio/gokulTheme/Achievement_Unlocked.mp3 b/common/audio/gokulTheme/Achievement_Unlocked.mp3 index 05cd28ab61..329633deb2 100644 Binary files a/common/audio/gokulTheme/Achievement_Unlocked.mp3 and b/common/audio/gokulTheme/Achievement_Unlocked.mp3 differ diff --git a/common/audio/gokulTheme/Achievement_Unlocked.ogg b/common/audio/gokulTheme/Achievement_Unlocked.ogg index 666b7501fd..b3fc51b3ae 100644 Binary files a/common/audio/gokulTheme/Achievement_Unlocked.ogg and b/common/audio/gokulTheme/Achievement_Unlocked.ogg differ diff --git a/common/audio/gokulTheme/Chat.mp3 b/common/audio/gokulTheme/Chat.mp3 index 9bbfac8a29..0eff90059d 100644 Binary files a/common/audio/gokulTheme/Chat.mp3 and b/common/audio/gokulTheme/Chat.mp3 differ diff --git a/common/audio/gokulTheme/Chat.ogg b/common/audio/gokulTheme/Chat.ogg index a386443a5b..b5ffa577ae 100644 Binary files a/common/audio/gokulTheme/Chat.ogg and b/common/audio/gokulTheme/Chat.ogg differ diff --git a/common/audio/gokulTheme/Daily.mp3 b/common/audio/gokulTheme/Daily.mp3 index 58ece9fe2d..802d7a183d 100644 Binary files a/common/audio/gokulTheme/Daily.mp3 and b/common/audio/gokulTheme/Daily.mp3 differ diff --git a/common/audio/gokulTheme/Daily.ogg b/common/audio/gokulTheme/Daily.ogg index 03b75bf3d4..1d7741fbb5 100644 Binary files a/common/audio/gokulTheme/Daily.ogg and b/common/audio/gokulTheme/Daily.ogg differ diff --git a/common/audio/gokulTheme/Death.mp3 b/common/audio/gokulTheme/Death.mp3 index e5cbfd2699..e0fcdc39c4 100644 Binary files a/common/audio/gokulTheme/Death.mp3 and b/common/audio/gokulTheme/Death.mp3 differ diff --git a/common/audio/gokulTheme/Death.ogg b/common/audio/gokulTheme/Death.ogg index accd2390b3..c98fca9493 100644 Binary files a/common/audio/gokulTheme/Death.ogg and b/common/audio/gokulTheme/Death.ogg differ diff --git a/common/audio/gokulTheme/Item_Drop.mp3 b/common/audio/gokulTheme/Item_Drop.mp3 index 439fb7792d..8dda74181b 100644 Binary files a/common/audio/gokulTheme/Item_Drop.mp3 and b/common/audio/gokulTheme/Item_Drop.mp3 differ diff --git a/common/audio/gokulTheme/Item_Drop.ogg b/common/audio/gokulTheme/Item_Drop.ogg index 8a1309020c..99d174feff 100644 Binary files a/common/audio/gokulTheme/Item_Drop.ogg and b/common/audio/gokulTheme/Item_Drop.ogg differ diff --git a/common/audio/gokulTheme/Level_Up.mp3 b/common/audio/gokulTheme/Level_Up.mp3 index 49af3e84e9..f2153f5329 100644 Binary files a/common/audio/gokulTheme/Level_Up.mp3 and b/common/audio/gokulTheme/Level_Up.mp3 differ diff --git a/common/audio/gokulTheme/Level_Up.ogg b/common/audio/gokulTheme/Level_Up.ogg index f4473d8727..c88c355b45 100644 Binary files a/common/audio/gokulTheme/Level_Up.ogg and b/common/audio/gokulTheme/Level_Up.ogg differ diff --git a/common/audio/gokulTheme/Minus_Habit.mp3 b/common/audio/gokulTheme/Minus_Habit.mp3 index f7afb5c94b..c67418da4f 100644 Binary files a/common/audio/gokulTheme/Minus_Habit.mp3 and b/common/audio/gokulTheme/Minus_Habit.mp3 differ diff --git a/common/audio/gokulTheme/Minus_Habit.ogg b/common/audio/gokulTheme/Minus_Habit.ogg index 6e1d9eaeef..28c68f4cf3 100644 Binary files a/common/audio/gokulTheme/Minus_Habit.ogg and b/common/audio/gokulTheme/Minus_Habit.ogg differ diff --git a/common/audio/gokulTheme/Plus_Habit.mp3 b/common/audio/gokulTheme/Plus_Habit.mp3 index 91afbba5e9..9b79815eac 100644 Binary files a/common/audio/gokulTheme/Plus_Habit.mp3 and b/common/audio/gokulTheme/Plus_Habit.mp3 differ diff --git a/common/audio/gokulTheme/Plus_Habit.ogg b/common/audio/gokulTheme/Plus_Habit.ogg index 6343875f4d..8fd471d46d 100644 Binary files a/common/audio/gokulTheme/Plus_Habit.ogg and b/common/audio/gokulTheme/Plus_Habit.ogg differ diff --git a/common/audio/gokulTheme/Reward.mp3 b/common/audio/gokulTheme/Reward.mp3 index 570c2f424f..0ec446cc7d 100644 Binary files a/common/audio/gokulTheme/Reward.mp3 and b/common/audio/gokulTheme/Reward.mp3 differ diff --git a/common/audio/gokulTheme/Reward.ogg b/common/audio/gokulTheme/Reward.ogg index fe7c59cff1..f0aac8abd2 100644 Binary files a/common/audio/gokulTheme/Reward.ogg and b/common/audio/gokulTheme/Reward.ogg differ diff --git a/common/audio/gokulTheme/ToDo.mp3 b/common/audio/gokulTheme/ToDo.mp3 index 11bdd69e2e..6706c1fbbc 100644 Binary files a/common/audio/gokulTheme/ToDo.mp3 and b/common/audio/gokulTheme/ToDo.mp3 differ diff --git a/common/audio/gokulTheme/ToDo.ogg b/common/audio/gokulTheme/ToDo.ogg index 9a53b12874..3edc7e398b 100644 Binary files a/common/audio/gokulTheme/ToDo.ogg and b/common/audio/gokulTheme/ToDo.ogg differ diff --git a/common/audio/luneFoxTheme/Achievement_Unlocked.mp3 b/common/audio/luneFoxTheme/Achievement_Unlocked.mp3 index f45ac96f75..8ba7b1a371 100644 Binary files a/common/audio/luneFoxTheme/Achievement_Unlocked.mp3 and b/common/audio/luneFoxTheme/Achievement_Unlocked.mp3 differ diff --git a/common/audio/luneFoxTheme/Achievement_Unlocked.ogg b/common/audio/luneFoxTheme/Achievement_Unlocked.ogg index 9a81307512..a4cd548ed3 100644 Binary files a/common/audio/luneFoxTheme/Achievement_Unlocked.ogg and b/common/audio/luneFoxTheme/Achievement_Unlocked.ogg differ diff --git a/common/audio/luneFoxTheme/Chat.mp3 b/common/audio/luneFoxTheme/Chat.mp3 index 9fe637ff00..e7b8cce2b5 100644 Binary files a/common/audio/luneFoxTheme/Chat.mp3 and b/common/audio/luneFoxTheme/Chat.mp3 differ diff --git a/common/audio/luneFoxTheme/Chat.ogg b/common/audio/luneFoxTheme/Chat.ogg index 3caadb1909..1b90c9371b 100644 Binary files a/common/audio/luneFoxTheme/Chat.ogg and b/common/audio/luneFoxTheme/Chat.ogg differ diff --git a/common/audio/luneFoxTheme/Daily.mp3 b/common/audio/luneFoxTheme/Daily.mp3 index aa8561590a..8a019d8924 100644 Binary files a/common/audio/luneFoxTheme/Daily.mp3 and b/common/audio/luneFoxTheme/Daily.mp3 differ diff --git a/common/audio/luneFoxTheme/Daily.ogg b/common/audio/luneFoxTheme/Daily.ogg index 05287d2b4c..c4e94f31e8 100644 Binary files a/common/audio/luneFoxTheme/Daily.ogg and b/common/audio/luneFoxTheme/Daily.ogg differ diff --git a/common/audio/luneFoxTheme/Death.mp3 b/common/audio/luneFoxTheme/Death.mp3 index 917f6f4ac4..4b7961a750 100644 Binary files a/common/audio/luneFoxTheme/Death.mp3 and b/common/audio/luneFoxTheme/Death.mp3 differ diff --git a/common/audio/luneFoxTheme/Death.ogg b/common/audio/luneFoxTheme/Death.ogg index 25efd1f888..f1712da291 100644 Binary files a/common/audio/luneFoxTheme/Death.ogg and b/common/audio/luneFoxTheme/Death.ogg differ diff --git a/common/audio/luneFoxTheme/Item_Drop.mp3 b/common/audio/luneFoxTheme/Item_Drop.mp3 index 26b6e8e331..dfc595a93f 100644 Binary files a/common/audio/luneFoxTheme/Item_Drop.mp3 and b/common/audio/luneFoxTheme/Item_Drop.mp3 differ diff --git a/common/audio/luneFoxTheme/Item_Drop.ogg b/common/audio/luneFoxTheme/Item_Drop.ogg index b08764a709..58b7398b77 100644 Binary files a/common/audio/luneFoxTheme/Item_Drop.ogg and b/common/audio/luneFoxTheme/Item_Drop.ogg differ diff --git a/common/audio/luneFoxTheme/Level_Up.mp3 b/common/audio/luneFoxTheme/Level_Up.mp3 index 979678479f..4c128bc2d9 100644 Binary files a/common/audio/luneFoxTheme/Level_Up.mp3 and b/common/audio/luneFoxTheme/Level_Up.mp3 differ diff --git a/common/audio/luneFoxTheme/Level_Up.ogg b/common/audio/luneFoxTheme/Level_Up.ogg index f99dede828..6b94c08bf5 100644 Binary files a/common/audio/luneFoxTheme/Level_Up.ogg and b/common/audio/luneFoxTheme/Level_Up.ogg differ diff --git a/common/audio/luneFoxTheme/Minus_Habit.mp3 b/common/audio/luneFoxTheme/Minus_Habit.mp3 index 159ffa8afa..011c784494 100644 Binary files a/common/audio/luneFoxTheme/Minus_Habit.mp3 and b/common/audio/luneFoxTheme/Minus_Habit.mp3 differ diff --git a/common/audio/luneFoxTheme/Minus_Habit.ogg b/common/audio/luneFoxTheme/Minus_Habit.ogg index acc69e64b2..e769acdfcc 100644 Binary files a/common/audio/luneFoxTheme/Minus_Habit.ogg and b/common/audio/luneFoxTheme/Minus_Habit.ogg differ diff --git a/common/audio/luneFoxTheme/Plus_Habit.mp3 b/common/audio/luneFoxTheme/Plus_Habit.mp3 index 985c912883..a9fc0ce702 100644 Binary files a/common/audio/luneFoxTheme/Plus_Habit.mp3 and b/common/audio/luneFoxTheme/Plus_Habit.mp3 differ diff --git a/common/audio/luneFoxTheme/Plus_Habit.ogg b/common/audio/luneFoxTheme/Plus_Habit.ogg index db29eef496..264ff82d28 100644 Binary files a/common/audio/luneFoxTheme/Plus_Habit.ogg and b/common/audio/luneFoxTheme/Plus_Habit.ogg differ diff --git a/common/audio/luneFoxTheme/Reward.mp3 b/common/audio/luneFoxTheme/Reward.mp3 index f6e18a4157..52aa2cd686 100644 Binary files a/common/audio/luneFoxTheme/Reward.mp3 and b/common/audio/luneFoxTheme/Reward.mp3 differ diff --git a/common/audio/luneFoxTheme/Reward.ogg b/common/audio/luneFoxTheme/Reward.ogg index e149a004f0..f4d8c09360 100644 Binary files a/common/audio/luneFoxTheme/Reward.ogg and b/common/audio/luneFoxTheme/Reward.ogg differ diff --git a/common/audio/luneFoxTheme/ToDo.mp3 b/common/audio/luneFoxTheme/ToDo.mp3 index 188d023fb5..5871adbc91 100644 Binary files a/common/audio/luneFoxTheme/ToDo.mp3 and b/common/audio/luneFoxTheme/ToDo.mp3 differ diff --git a/common/audio/luneFoxTheme/ToDo.ogg b/common/audio/luneFoxTheme/ToDo.ogg index 38abefc5f3..ee7bb4671a 100644 Binary files a/common/audio/luneFoxTheme/ToDo.ogg and b/common/audio/luneFoxTheme/ToDo.ogg differ diff --git a/common/audio/wattsTheme/Achievement_Unlocked.mp3 b/common/audio/wattsTheme/Achievement_Unlocked.mp3 index f21b4dd9ab..9029fbff99 100644 Binary files a/common/audio/wattsTheme/Achievement_Unlocked.mp3 and b/common/audio/wattsTheme/Achievement_Unlocked.mp3 differ diff --git a/common/audio/wattsTheme/Achievement_Unlocked.ogg b/common/audio/wattsTheme/Achievement_Unlocked.ogg index 5fb69d90fa..a7d706ed77 100644 Binary files a/common/audio/wattsTheme/Achievement_Unlocked.ogg and b/common/audio/wattsTheme/Achievement_Unlocked.ogg differ diff --git a/common/audio/wattsTheme/Daily.mp3 b/common/audio/wattsTheme/Daily.mp3 index 8ad2ccf91b..574319801e 100644 Binary files a/common/audio/wattsTheme/Daily.mp3 and b/common/audio/wattsTheme/Daily.mp3 differ diff --git a/common/audio/wattsTheme/Daily.ogg b/common/audio/wattsTheme/Daily.ogg index 55cbdd1ab7..0c92bff7e5 100644 Binary files a/common/audio/wattsTheme/Daily.ogg and b/common/audio/wattsTheme/Daily.ogg differ diff --git a/common/audio/wattsTheme/Death.mp3 b/common/audio/wattsTheme/Death.mp3 index f540666a76..3eded7c2ab 100644 Binary files a/common/audio/wattsTheme/Death.mp3 and b/common/audio/wattsTheme/Death.mp3 differ diff --git a/common/audio/wattsTheme/Death.ogg b/common/audio/wattsTheme/Death.ogg index a2db1834fb..aab1b335c7 100644 Binary files a/common/audio/wattsTheme/Death.ogg and b/common/audio/wattsTheme/Death.ogg differ diff --git a/common/audio/wattsTheme/Item_Drop.mp3 b/common/audio/wattsTheme/Item_Drop.mp3 index 2d5b879fc7..7c61a91071 100644 Binary files a/common/audio/wattsTheme/Item_Drop.mp3 and b/common/audio/wattsTheme/Item_Drop.mp3 differ diff --git a/common/audio/wattsTheme/Item_Drop.ogg b/common/audio/wattsTheme/Item_Drop.ogg index 9a69aea16d..c09fd1d174 100644 Binary files a/common/audio/wattsTheme/Item_Drop.ogg and b/common/audio/wattsTheme/Item_Drop.ogg differ diff --git a/common/audio/wattsTheme/Level_Up.mp3 b/common/audio/wattsTheme/Level_Up.mp3 index 7e4be04d88..36427090b1 100644 Binary files a/common/audio/wattsTheme/Level_Up.mp3 and b/common/audio/wattsTheme/Level_Up.mp3 differ diff --git a/common/audio/wattsTheme/Level_Up.ogg b/common/audio/wattsTheme/Level_Up.ogg index da782f56f7..25672991a0 100644 Binary files a/common/audio/wattsTheme/Level_Up.ogg and b/common/audio/wattsTheme/Level_Up.ogg differ diff --git a/common/audio/wattsTheme/Minus_Habit.mp3 b/common/audio/wattsTheme/Minus_Habit.mp3 index 71cf23cd53..8584a5ae8c 100644 Binary files a/common/audio/wattsTheme/Minus_Habit.mp3 and b/common/audio/wattsTheme/Minus_Habit.mp3 differ diff --git a/common/audio/wattsTheme/Minus_Habit.ogg b/common/audio/wattsTheme/Minus_Habit.ogg index 981dc429e6..ec6247eb8e 100644 Binary files a/common/audio/wattsTheme/Minus_Habit.ogg and b/common/audio/wattsTheme/Minus_Habit.ogg differ diff --git a/common/audio/wattsTheme/Plus_Habit.mp3 b/common/audio/wattsTheme/Plus_Habit.mp3 index 54f132127d..5157827895 100644 Binary files a/common/audio/wattsTheme/Plus_Habit.mp3 and b/common/audio/wattsTheme/Plus_Habit.mp3 differ diff --git a/common/audio/wattsTheme/Plus_Habit.ogg b/common/audio/wattsTheme/Plus_Habit.ogg index 3436395de8..ba013e29fd 100644 Binary files a/common/audio/wattsTheme/Plus_Habit.ogg and b/common/audio/wattsTheme/Plus_Habit.ogg differ diff --git a/common/audio/wattsTheme/Reward.mp3 b/common/audio/wattsTheme/Reward.mp3 index d90efdd83c..a1c3b5dae8 100644 Binary files a/common/audio/wattsTheme/Reward.mp3 and b/common/audio/wattsTheme/Reward.mp3 differ diff --git a/common/audio/wattsTheme/Reward.ogg b/common/audio/wattsTheme/Reward.ogg index 1fce2f529c..b2cd01648f 100644 Binary files a/common/audio/wattsTheme/Reward.ogg and b/common/audio/wattsTheme/Reward.ogg differ diff --git a/common/audio/wattsTheme/ToDo.mp3 b/common/audio/wattsTheme/ToDo.mp3 index 9c85f09e26..26f160b3cc 100644 Binary files a/common/audio/wattsTheme/ToDo.mp3 and b/common/audio/wattsTheme/ToDo.mp3 differ diff --git a/common/audio/wattsTheme/ToDo.ogg b/common/audio/wattsTheme/ToDo.ogg index 9dbf533418..f91392d4e0 100644 Binary files a/common/audio/wattsTheme/ToDo.ogg and b/common/audio/wattsTheme/ToDo.ogg differ diff --git a/common/css/index.css b/common/css/index.css index e184b14328..ba74c066b0 100644 --- a/common/css/index.css +++ b/common/css/index.css @@ -1,9 +1,9 @@ -/* Comment out for holiday events +/* Comment out for holiday events */ .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/habitrpg-shared.css b/common/dist/sprites/habitrpg-shared.css index 8fa3c49987..3accdf078a 100644 --- a/common/dist/sprites/habitrpg-shared.css +++ b/common/dist/sprites/habitrpg-shared.css @@ -1 +1 @@ -.2014_Fall_HealerPROMO2{background-image:url(spritesmith-largeSprites-0.png);background-position:-472px -950px;width:90px;height:90px}.2014_Fall_Mage_PROMO9{background-image:url(spritesmith-largeSprites-0.png);background-position:-970px -392px;width:120px;height:90px}.2014_Fall_RoguePROMO3{background-image:url(spritesmith-largeSprites-0.png);background-position:-970px -589px;width:105px;height:90px}.2014_Fall_Warrior_PROMO{background-image:url(spritesmith-largeSprites-0.png);background-position:-563px -950px;width:90px;height:90px}.promo_backtoschool{background-image:url(spritesmith-largeSprites-0.png);background-position:-220px -220px;width:150px;height:150px}.promo_burnout{background-image:url(spritesmith-largeSprites-0.png);background-position:0 -220px;width:219px;height:240px}.promo_classes_fall_2014{background-image:url(spritesmith-largeSprites-0.png);background-position:-326px -664px;width:321px;height:100px}.promo_classes_fall_2015{background-image:url(spritesmith-largeSprites-0.png);background-position:0 -564px;width:377px;height:99px}.promo_dilatoryDistress{background-image:url(spritesmith-largeSprites-0.png);background-position:-836px -950px;width:90px;height:90px}.promo_enchanted_armoire{background-image:url(spritesmith-largeSprites-0.png);background-position:-378px -564px;width:374px;height:76px}.promo_enchanted_armoire_201507{background-image:url(spritesmith-largeSprites-0.png);background-position:-289px -859px;width:217px;height:90px}.promo_enchanted_armoire_201508{background-image:url(spritesmith-largeSprites-0.png);background-position:-725px -859px;width:180px;height:90px}.promo_enchanted_armoire_201509{background-image:url(spritesmith-largeSprites-0.png);background-position:-290px -950px;width:90px;height:90px}.promo_habitica{background-image:url(spritesmith-largeSprites-0.png);background-position:-723px -166px;width:175px;height:175px}.promo_haunted_hair{background-image:url(spritesmith-largeSprites-0.png);background-position:-970px -148px;width:100px;height:137px}.customize-option.promo_haunted_hair{background-image:url(spritesmith-largeSprites-0.png);background-position:-995px -163px;width:60px;height:60px}.promo_item_notif{background-image:url(spritesmith-largeSprites-0.png);background-position:-452px -347px;width:249px;height:102px}.promo_mystery_201405{background-image:url(spritesmith-largeSprites-0.png);background-position:-199px -950px;width:90px;height:90px}.promo_mystery_201406{background-image:url(spritesmith-largeSprites-0.png);background-position:-970px -680px;width:90px;height:96px}.promo_mystery_201407{background-image:url(spritesmith-largeSprites-0.png);background-position:-1111px -431px;width:42px;height:62px}.promo_mystery_201408{background-image:url(spritesmith-largeSprites-0.png);background-position:-1111px -155px;width:60px;height:71px}.promo_mystery_201409{background-image:url(spritesmith-largeSprites-0.png);background-position:-745px -950px;width:90px;height:90px}.promo_mystery_201410{background-image:url(spritesmith-largeSprites-0.png);background-position:-1111px -91px;width:72px;height:63px}.promo_mystery_201411{background-image:url(spritesmith-largeSprites-0.png);background-position:-927px -950px;width:90px;height:90px}.promo_mystery_201412{background-image:url(spritesmith-largeSprites-0.png);background-position:-1154px -361px;width:42px;height:66px}.promo_mystery_201501{background-image:url(spritesmith-largeSprites-0.png);background-position:-1111px -297px;width:48px;height:63px}.promo_mystery_201502{background-image:url(spritesmith-largeSprites-0.png);background-position:-381px -950px;width:90px;height:90px}.promo_mystery_201503{background-image:url(spritesmith-largeSprites-0.png);background-position:-1111px 0;width:90px;height:90px}.promo_mystery_201504{background-image:url(spritesmith-largeSprites-0.png);background-position:-1111px -227px;width:60px;height:69px}.promo_mystery_201505{background-image:url(spritesmith-largeSprites-0.png);background-position:-654px -950px;width:90px;height:90px}.promo_mystery_201506{background-image:url(spritesmith-largeSprites-0.png);background-position:-1111px -361px;width:42px;height:69px}.promo_mystery_201507{background-image:url(spritesmith-largeSprites-0.png);background-position:-970px -483px;width:90px;height:105px}.promo_mystery_201508{background-image:url(spritesmith-largeSprites-0.png);background-position:-970px -777px;width:93px;height:90px}.promo_mystery_201509{background-image:url(spritesmith-largeSprites-0.png);background-position:-1018px -950px;width:90px;height:90px}.promo_mystery_3014{background-image:url(spritesmith-largeSprites-0.png);background-position:-507px -859px;width:217px;height:90px}.promo_orca{background-image:url(spritesmith-largeSprites-0.png);background-position:-970px -286px;width:105px;height:105px}.promo_partyhats{background-image:url(spritesmith-largeSprites-0.png);background-position:-970px -868px;width:115px;height:47px}.promo_pastel_skin{background-image:url(spritesmith-largeSprites-0.png);background-position:0 -775px;width:330px;height:83px}.customize-option.promo_pastel_skin{background-image:url(spritesmith-largeSprites-0.png);background-position:-25px -790px;width:60px;height:60px}.promo_pet_skins{background-image:url(spritesmith-largeSprites-0.png);background-position:-970px 0;width:140px;height:147px}.customize-option.promo_pet_skins{background-image:url(spritesmith-largeSprites-0.png);background-position:-995px -15px;width:60px;height:60px}.promo_shimmer_hair{background-image:url(spritesmith-largeSprites-0.png);background-position:-331px -775px;width:330px;height:83px}.customize-option.promo_shimmer_hair{background-image:url(spritesmith-largeSprites-0.png);background-position:-356px -790px;width:60px;height:60px}.promo_splashyskins{background-image:url(spritesmith-largeSprites-0.png);background-position:0 -950px;width:198px;height:91px}.customize-option.promo_splashyskins{background-image:url(spritesmith-largeSprites-0.png);background-position:-25px -965px;width:60px;height:60px}.promo_springclasses2014{background-image:url(spritesmith-largeSprites-0.png);background-position:-430px -461px;width:288px;height:90px}.promo_springclasses2015{background-image:url(spritesmith-largeSprites-0.png);background-position:0 -859px;width:288px;height:90px}.promo_summer_classes_2014{background-image:url(spritesmith-largeSprites-0.png);background-position:0 -461px;width:429px;height:102px}.promo_summer_classes_2015{background-image:url(spritesmith-largeSprites-0.png);background-position:-648px -664px;width:300px;height:88px}.promo_updos{background-image:url(spritesmith-largeSprites-0.png);background-position:-723px -342px;width:156px;height:147px}.promo_veteran_pets{background-image:url(spritesmith-largeSprites-0.png);background-position:-753px -564px;width:146px;height:75px}.promo_winterclasses2015{background-image:url(spritesmith-largeSprites-0.png);background-position:0 -664px;width:325px;height:110px}.promo_winteryhair{background-image:url(spritesmith-largeSprites-0.png);background-position:-220px -371px;width:152px;height:75px}.customize-option.promo_winteryhair{background-image:url(spritesmith-largeSprites-0.png);background-position:-245px -386px;width:60px;height:60px}.party_preview{background-image:url(spritesmith-largeSprites-0.png);background-position:0 0;width:451px;height:219px}.welcome_basic_avatars{background-image:url(spritesmith-largeSprites-0.png);background-position:-452px -181px;width:246px;height:165px}.welcome_promo_party{background-image:url(spritesmith-largeSprites-0.png);background-position:-452px 0;width:270px;height:180px}.welcome_sample_tasks{background-image:url(spritesmith-largeSprites-0.png);background-position:-723px 0;width:246px;height:165px}.achievement-alien{background-image:url(spritesmith-main-0.png);background-position:-1703px -533px;width:24px;height:26px}.achievement-alpha{background-image:url(spritesmith-main-0.png);background-position:-1703px -182px;width:24px;height:26px}.achievement-armor{background-image:url(spritesmith-main-0.png);background-position:-1678px -533px;width:24px;height:26px}.achievement-boot{background-image:url(spritesmith-main-0.png);background-position:-1728px -506px;width:24px;height:26px}.achievement-bow{background-image:url(spritesmith-main-0.png);background-position:-1703px -506px;width:24px;height:26px}.achievement-burnout{background-image:url(spritesmith-main-0.png);background-position:-1678px -506px;width:24px;height:26px}.achievement-cactus{background-image:url(spritesmith-main-0.png);background-position:-1728px -479px;width:24px;height:26px}.achievement-cake{background-image:url(spritesmith-main-0.png);background-position:-1703px -479px;width:24px;height:26px}.achievement-cave{background-image:url(spritesmith-main-0.png);background-position:-1678px -479px;width:24px;height:26px}.achievement-coffin{background-image:url(spritesmith-main-0.png);background-position:-1728px -452px;width:24px;height:26px}.achievement-comment{background-image:url(spritesmith-main-0.png);background-position:-1703px -452px;width:24px;height:26px}.achievement-costumeContest{background-image:url(spritesmith-main-0.png);background-position:-1678px -452px;width:24px;height:26px}.achievement-dilatory{background-image:url(spritesmith-main-0.png);background-position:-1728px -425px;width:24px;height:26px}.achievement-firefox{background-image:url(spritesmith-main-0.png);background-position:-1703px -425px;width:24px;height:26px}.achievement-greeting{background-image:url(spritesmith-main-0.png);background-position:-1678px -425px;width:24px;height:26px}.achievement-habitBirthday{background-image:url(spritesmith-main-0.png);background-position:-1728px -398px;width:24px;height:26px}.achievement-habiticaDay{background-image:url(spritesmith-main-0.png);background-position:-1703px -398px;width:24px;height:26px}.achievement-heart{background-image:url(spritesmith-main-0.png);background-position:-1678px -398px;width:24px;height:26px}.achievement-karaoke{background-image:url(spritesmith-main-0.png);background-position:-1728px -371px;width:24px;height:26px}.achievement-ninja{background-image:url(spritesmith-main-0.png);background-position:-1703px -371px;width:24px;height:26px}.achievement-nye{background-image:url(spritesmith-main-0.png);background-position:-1678px -371px;width:24px;height:26px}.achievement-perfect{background-image:url(spritesmith-main-0.png);background-position:-1678px -182px;width:24px;height:26px}.achievement-rat{background-image:url(spritesmith-main-0.png);background-position:-1703px -344px;width:24px;height:26px}.achievement-seafoam{background-image:url(spritesmith-main-0.png);background-position:-1678px -344px;width:24px;height:26px}.achievement-shield{background-image:url(spritesmith-main-0.png);background-position:-1728px -317px;width:24px;height:26px}.achievement-shinySeed{background-image:url(spritesmith-main-0.png);background-position:-1703px -317px;width:24px;height:26px}.achievement-snowball{background-image:url(spritesmith-main-0.png);background-position:-1678px -317px;width:24px;height:26px}.achievement-spookDust{background-image:url(spritesmith-main-0.png);background-position:-1728px -290px;width:24px;height:26px}.achievement-stoikalm{background-image:url(spritesmith-main-0.png);background-position:-1703px -290px;width:24px;height:26px}.achievement-sun{background-image:url(spritesmith-main-0.png);background-position:-1678px -290px;width:24px;height:26px}.achievement-sword{background-image:url(spritesmith-main-0.png);background-position:-1728px -263px;width:24px;height:26px}.achievement-thankyou{background-image:url(spritesmith-main-0.png);background-position:-1703px -263px;width:24px;height:26px}.achievement-thermometer{background-image:url(spritesmith-main-0.png);background-position:-1678px -263px;width:24px;height:26px}.achievement-tree{background-image:url(spritesmith-main-0.png);background-position:-1728px -236px;width:24px;height:26px}.achievement-triadbingo{background-image:url(spritesmith-main-0.png);background-position:-1703px -236px;width:24px;height:26px}.achievement-ultimate-healer{background-image:url(spritesmith-main-0.png);background-position:-1678px -236px;width:24px;height:26px}.achievement-ultimate-mage{background-image:url(spritesmith-main-0.png);background-position:-1728px -209px;width:24px;height:26px}.achievement-ultimate-rogue{background-image:url(spritesmith-main-0.png);background-position:-1703px -209px;width:24px;height:26px}.achievement-ultimate-warrior{background-image:url(spritesmith-main-0.png);background-position:-1678px -209px;width:24px;height:26px}.achievement-valentine{background-image:url(spritesmith-main-0.png);background-position:-1728px -182px;width:24px;height:26px}.achievement-wolf{background-image:url(spritesmith-main-0.png);background-position:-1728px -344px;width:24px;height:26px}.background_autumn_forest{background-image:url(spritesmith-main-0.png);background-position:-282px -592px;width:140px;height:147px}.background_beach{background-image:url(spritesmith-main-0.png);background-position:-426px 0;width:141px;height:147px}.background_blacksmithy{background-image:url(spritesmith-main-0.png);background-position:-709px 0;width:140px;height:147px}.background_cherry_trees{background-image:url(spritesmith-main-0.png);background-position:-709px -148px;width:140px;height:147px}.background_clouds{background-image:url(spritesmith-main-0.png);background-position:-709px -444px;width:140px;height:147px}.background_coral_reef{background-image:url(spritesmith-main-0.png);background-position:-705px -592px;width:140px;height:147px}.background_crystal_cave{background-image:url(spritesmith-main-0.png);background-position:-850px -296px;width:140px;height:147px}.background_dilatory_ruins{background-image:url(spritesmith-main-0.png);background-position:-850px -444px;width:140px;height:147px}.background_distant_castle{background-image:url(spritesmith-main-0.png);background-position:0 -888px;width:140px;height:147px}.background_drifting_raft{background-image:url(spritesmith-main-0.png);background-position:-141px -888px;width:140px;height:147px}.background_dusty_canyons{background-image:url(spritesmith-main-0.png);background-position:-282px -888px;width:140px;height:147px}.background_fairy_ring{background-image:url(spritesmith-main-0.png);background-position:-568px 0;width:140px;height:147px}.background_floral_meadow{background-image:url(spritesmith-main-0.png);background-position:-568px -148px;width:140px;height:147px}.background_forest{background-image:url(spritesmith-main-0.png);background-position:-568px -296px;width:140px;height:147px}.background_frigid_peak{background-image:url(spritesmith-main-0.png);background-position:0 -444px;width:140px;height:147px}.background_giant_wave{background-image:url(spritesmith-main-0.png);background-position:-284px 0;width:141px;height:147px}.background_graveyard{background-image:url(spritesmith-main-0.png);background-position:-282px -444px;width:140px;height:147px}.background_gumdrop_land{background-image:url(spritesmith-main-0.png);background-position:-423px -444px;width:140px;height:147px}.background_harvest_feast{background-image:url(spritesmith-main-0.png);background-position:-564px -444px;width:140px;height:147px}.background_harvest_fields{background-image:url(spritesmith-main-0.png);background-position:0 -148px;width:141px;height:147px}.background_harvest_moon{background-image:url(spritesmith-main-0.png);background-position:-142px -148px;width:141px;height:147px}.background_haunted_house{background-image:url(spritesmith-main-0.png);background-position:-709px -296px;width:140px;height:147px}.background_ice_cave{background-image:url(spritesmith-main-0.png);background-position:-284px -148px;width:141px;height:147px}.background_iceberg{background-image:url(spritesmith-main-0.png);background-position:0 -592px;width:140px;height:147px}.background_island_waterfalls{background-image:url(spritesmith-main-0.png);background-position:-141px -592px;width:140px;height:147px}.background_marble_temple{background-image:url(spritesmith-main-0.png);background-position:-142px 0;width:141px;height:147px}.background_market{background-image:url(spritesmith-main-0.png);background-position:-423px -592px;width:140px;height:147px}.background_mountain_lake{background-image:url(spritesmith-main-0.png);background-position:-564px -592px;width:140px;height:147px}.background_open_waters{background-image:url(spritesmith-main-0.png);background-position:0 0;width:141px;height:147px}.background_pagodas{background-image:url(spritesmith-main-0.png);background-position:-850px 0;width:140px;height:147px}.background_pumpkin_patch{background-image:url(spritesmith-main-0.png);background-position:-850px -148px;width:140px;height:147px}.background_pyramids{background-image:url(spritesmith-main-0.png);background-position:-426px -148px;width:141px;height:147px}.background_rolling_hills{background-image:url(spritesmith-main-0.png);background-position:0 -296px;width:141px;height:147px}.background_seafarer_ship{background-image:url(spritesmith-main-0.png);background-position:-850px -592px;width:140px;height:147px}.background_shimmery_bubbles{background-image:url(spritesmith-main-0.png);background-position:0 -740px;width:140px;height:147px}.background_slimy_swamp{background-image:url(spritesmith-main-0.png);background-position:-141px -740px;width:140px;height:147px}.background_snowy_pines{background-image:url(spritesmith-main-0.png);background-position:-282px -740px;width:140px;height:147px}.background_south_pole{background-image:url(spritesmith-main-0.png);background-position:-423px -740px;width:140px;height:147px}.background_spring_rain{background-image:url(spritesmith-main-0.png);background-position:-564px -740px;width:140px;height:147px}.background_stable{background-image:url(spritesmith-main-0.png);background-position:-705px -740px;width:140px;height:147px}.background_stained_glass{background-image:url(spritesmith-main-0.png);background-position:-846px -740px;width:140px;height:147px}.background_starry_skies{background-image:url(spritesmith-main-0.png);background-position:-991px 0;width:140px;height:147px}.background_sunken_ship{background-image:url(spritesmith-main-0.png);background-position:-991px -148px;width:140px;height:147px}.background_sunset_meadow{background-image:url(spritesmith-main-0.png);background-position:-991px -296px;width:140px;height:147px}.background_sunset_savannah{background-image:url(spritesmith-main-0.png);background-position:-991px -444px;width:140px;height:147px}.background_swarming_darkness{background-image:url(spritesmith-main-0.png);background-position:-991px -592px;width:140px;height:147px}.background_tavern{background-image:url(spritesmith-main-0.png);background-position:-991px -740px;width:140px;height:147px}.background_thunderstorm{background-image:url(spritesmith-main-0.png);background-position:-142px -296px;width:141px;height:147px}.background_twinkly_lights{background-image:url(spritesmith-main-0.png);background-position:-284px -296px;width:141px;height:147px}.background_twinkly_party_lights{background-image:url(spritesmith-main-0.png);background-position:-426px -296px;width:141px;height:147px}.background_volcano{background-image:url(spritesmith-main-0.png);background-position:-141px -444px;width:140px;height:147px}.hair_beard_1_TRUred{background-image:url(spritesmith-main-0.png);background-position:-910px -1127px;width:90px;height:90px}.customize-option.hair_beard_1_TRUred{background-image:url(spritesmith-main-0.png);background-position:-935px -1142px;width:60px;height:60px}.hair_beard_1_aurora{background-image:url(spritesmith-main-0.png);background-position:-1001px -1127px;width:90px;height:90px}.customize-option.hair_beard_1_aurora{background-image:url(spritesmith-main-0.png);background-position:-1026px -1142px;width:60px;height:60px}.hair_beard_1_black{background-image:url(spritesmith-main-0.png);background-position:-1092px -1127px;width:90px;height:90px}.customize-option.hair_beard_1_black{background-image:url(spritesmith-main-0.png);background-position:-1117px -1142px;width:60px;height:60px}.hair_beard_1_blond{background-image:url(spritesmith-main-0.png);background-position:-1223px 0;width:90px;height:90px}.customize-option.hair_beard_1_blond{background-image:url(spritesmith-main-0.png);background-position:-1248px -15px;width:60px;height:60px}.hair_beard_1_blue{background-image:url(spritesmith-main-0.png);background-position:-1223px -91px;width:90px;height:90px}.customize-option.hair_beard_1_blue{background-image:url(spritesmith-main-0.png);background-position:-1248px -106px;width:60px;height:60px}.hair_beard_1_brown{background-image:url(spritesmith-main-0.png);background-position:-1223px -182px;width:90px;height:90px}.customize-option.hair_beard_1_brown{background-image:url(spritesmith-main-0.png);background-position:-1248px -197px;width:60px;height:60px}.hair_beard_1_candycane{background-image:url(spritesmith-main-0.png);background-position:-1223px -273px;width:90px;height:90px}.customize-option.hair_beard_1_candycane{background-image:url(spritesmith-main-0.png);background-position:-1248px -288px;width:60px;height:60px}.hair_beard_1_candycorn{background-image:url(spritesmith-main-0.png);background-position:-1223px -364px;width:90px;height:90px}.customize-option.hair_beard_1_candycorn{background-image:url(spritesmith-main-0.png);background-position:-1248px -379px;width:60px;height:60px}.hair_beard_1_festive{background-image:url(spritesmith-main-0.png);background-position:-1223px -455px;width:90px;height:90px}.customize-option.hair_beard_1_festive{background-image:url(spritesmith-main-0.png);background-position:-1248px -470px;width:60px;height:60px}.hair_beard_1_frost{background-image:url(spritesmith-main-0.png);background-position:-1223px -546px;width:90px;height:90px}.customize-option.hair_beard_1_frost{background-image:url(spritesmith-main-0.png);background-position:-1248px -561px;width:60px;height:60px}.hair_beard_1_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-1223px -637px;width:90px;height:90px}.customize-option.hair_beard_1_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-1248px -652px;width:60px;height:60px}.hair_beard_1_green{background-image:url(spritesmith-main-0.png);background-position:-1223px -728px;width:90px;height:90px}.customize-option.hair_beard_1_green{background-image:url(spritesmith-main-0.png);background-position:-1248px -743px;width:60px;height:60px}.hair_beard_1_halloween{background-image:url(spritesmith-main-0.png);background-position:-1223px -819px;width:90px;height:90px}.customize-option.hair_beard_1_halloween{background-image:url(spritesmith-main-0.png);background-position:-1248px -834px;width:60px;height:60px}.hair_beard_1_holly{background-image:url(spritesmith-main-0.png);background-position:-1223px -910px;width:90px;height:90px}.customize-option.hair_beard_1_holly{background-image:url(spritesmith-main-0.png);background-position:-1248px -925px;width:60px;height:60px}.hair_beard_1_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-1223px -1001px;width:90px;height:90px}.customize-option.hair_beard_1_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-1248px -1016px;width:60px;height:60px}.hair_beard_1_midnight{background-image:url(spritesmith-main-0.png);background-position:-1223px -1092px;width:90px;height:90px}.customize-option.hair_beard_1_midnight{background-image:url(spritesmith-main-0.png);background-position:-1248px -1107px;width:60px;height:60px}.hair_beard_1_pblue{background-image:url(spritesmith-main-0.png);background-position:0 -1218px;width:90px;height:90px}.customize-option.hair_beard_1_pblue{background-image:url(spritesmith-main-0.png);background-position:-25px -1233px;width:60px;height:60px}.hair_beard_1_peppermint{background-image:url(spritesmith-main-0.png);background-position:-91px -1218px;width:90px;height:90px}.customize-option.hair_beard_1_peppermint{background-image:url(spritesmith-main-0.png);background-position:-116px -1233px;width:60px;height:60px}.hair_beard_1_pgreen{background-image:url(spritesmith-main-0.png);background-position:-182px -1218px;width:90px;height:90px}.customize-option.hair_beard_1_pgreen{background-image:url(spritesmith-main-0.png);background-position:-207px -1233px;width:60px;height:60px}.hair_beard_1_porange{background-image:url(spritesmith-main-0.png);background-position:-273px -1218px;width:90px;height:90px}.customize-option.hair_beard_1_porange{background-image:url(spritesmith-main-0.png);background-position:-298px -1233px;width:60px;height:60px}.hair_beard_1_ppink{background-image:url(spritesmith-main-0.png);background-position:-364px -1218px;width:90px;height:90px}.customize-option.hair_beard_1_ppink{background-image:url(spritesmith-main-0.png);background-position:-389px -1233px;width:60px;height:60px}.hair_beard_1_ppurple{background-image:url(spritesmith-main-0.png);background-position:-455px -1218px;width:90px;height:90px}.customize-option.hair_beard_1_ppurple{background-image:url(spritesmith-main-0.png);background-position:-480px -1233px;width:60px;height:60px}.hair_beard_1_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-546px -1218px;width:90px;height:90px}.customize-option.hair_beard_1_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-571px -1233px;width:60px;height:60px}.hair_beard_1_purple{background-image:url(spritesmith-main-0.png);background-position:-637px -1218px;width:90px;height:90px}.customize-option.hair_beard_1_purple{background-image:url(spritesmith-main-0.png);background-position:-662px -1233px;width:60px;height:60px}.hair_beard_1_pyellow{background-image:url(spritesmith-main-0.png);background-position:-728px -1218px;width:90px;height:90px}.customize-option.hair_beard_1_pyellow{background-image:url(spritesmith-main-0.png);background-position:-753px -1233px;width:60px;height:60px}.hair_beard_1_rainbow{background-image:url(spritesmith-main-0.png);background-position:-819px -1218px;width:90px;height:90px}.customize-option.hair_beard_1_rainbow{background-image:url(spritesmith-main-0.png);background-position:-844px -1233px;width:60px;height:60px}.hair_beard_1_red{background-image:url(spritesmith-main-0.png);background-position:-910px -1218px;width:90px;height:90px}.customize-option.hair_beard_1_red{background-image:url(spritesmith-main-0.png);background-position:-935px -1233px;width:60px;height:60px}.hair_beard_1_snowy{background-image:url(spritesmith-main-0.png);background-position:-1001px -1218px;width:90px;height:90px}.customize-option.hair_beard_1_snowy{background-image:url(spritesmith-main-0.png);background-position:-1026px -1233px;width:60px;height:60px}.hair_beard_1_white{background-image:url(spritesmith-main-0.png);background-position:-1092px -1218px;width:90px;height:90px}.customize-option.hair_beard_1_white{background-image:url(spritesmith-main-0.png);background-position:-1117px -1233px;width:60px;height:60px}.hair_beard_1_winternight{background-image:url(spritesmith-main-0.png);background-position:-1183px -1218px;width:90px;height:90px}.customize-option.hair_beard_1_winternight{background-image:url(spritesmith-main-0.png);background-position:-1208px -1233px;width:60px;height:60px}.hair_beard_1_winterstar{background-image:url(spritesmith-main-0.png);background-position:-1314px 0;width:90px;height:90px}.customize-option.hair_beard_1_winterstar{background-image:url(spritesmith-main-0.png);background-position:-1339px -15px;width:60px;height:60px}.hair_beard_1_yellow{background-image:url(spritesmith-main-0.png);background-position:-1314px -91px;width:90px;height:90px}.customize-option.hair_beard_1_yellow{background-image:url(spritesmith-main-0.png);background-position:-1339px -106px;width:60px;height:60px}.hair_beard_1_zombie{background-image:url(spritesmith-main-0.png);background-position:-1314px -182px;width:90px;height:90px}.customize-option.hair_beard_1_zombie{background-image:url(spritesmith-main-0.png);background-position:-1339px -197px;width:60px;height:60px}.hair_beard_2_TRUred{background-image:url(spritesmith-main-0.png);background-position:-1314px -273px;width:90px;height:90px}.customize-option.hair_beard_2_TRUred{background-image:url(spritesmith-main-0.png);background-position:-1339px -288px;width:60px;height:60px}.hair_beard_2_aurora{background-image:url(spritesmith-main-0.png);background-position:-1314px -364px;width:90px;height:90px}.customize-option.hair_beard_2_aurora{background-image:url(spritesmith-main-0.png);background-position:-1339px -379px;width:60px;height:60px}.hair_beard_2_black{background-image:url(spritesmith-main-0.png);background-position:-1314px -455px;width:90px;height:90px}.customize-option.hair_beard_2_black{background-image:url(spritesmith-main-0.png);background-position:-1339px -470px;width:60px;height:60px}.hair_beard_2_blond{background-image:url(spritesmith-main-0.png);background-position:-1314px -546px;width:90px;height:90px}.customize-option.hair_beard_2_blond{background-image:url(spritesmith-main-0.png);background-position:-1339px -561px;width:60px;height:60px}.hair_beard_2_blue{background-image:url(spritesmith-main-0.png);background-position:-1314px -637px;width:90px;height:90px}.customize-option.hair_beard_2_blue{background-image:url(spritesmith-main-0.png);background-position:-1339px -652px;width:60px;height:60px}.hair_beard_2_brown{background-image:url(spritesmith-main-0.png);background-position:-1314px -728px;width:90px;height:90px}.customize-option.hair_beard_2_brown{background-image:url(spritesmith-main-0.png);background-position:-1339px -743px;width:60px;height:60px}.hair_beard_2_candycane{background-image:url(spritesmith-main-0.png);background-position:-1314px -819px;width:90px;height:90px}.customize-option.hair_beard_2_candycane{background-image:url(spritesmith-main-0.png);background-position:-1339px -834px;width:60px;height:60px}.hair_beard_2_candycorn{background-image:url(spritesmith-main-0.png);background-position:-1314px -910px;width:90px;height:90px}.customize-option.hair_beard_2_candycorn{background-image:url(spritesmith-main-0.png);background-position:-1339px -925px;width:60px;height:60px}.hair_beard_2_festive{background-image:url(spritesmith-main-0.png);background-position:-1314px -1001px;width:90px;height:90px}.customize-option.hair_beard_2_festive{background-image:url(spritesmith-main-0.png);background-position:-1339px -1016px;width:60px;height:60px}.hair_beard_2_frost{background-image:url(spritesmith-main-0.png);background-position:-1314px -1092px;width:90px;height:90px}.customize-option.hair_beard_2_frost{background-image:url(spritesmith-main-0.png);background-position:-1339px -1107px;width:60px;height:60px}.hair_beard_2_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-1314px -1183px;width:90px;height:90px}.customize-option.hair_beard_2_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-1339px -1198px;width:60px;height:60px}.hair_beard_2_green{background-image:url(spritesmith-main-0.png);background-position:0 -1309px;width:90px;height:90px}.customize-option.hair_beard_2_green{background-image:url(spritesmith-main-0.png);background-position:-25px -1324px;width:60px;height:60px}.hair_beard_2_halloween{background-image:url(spritesmith-main-0.png);background-position:-91px -1309px;width:90px;height:90px}.customize-option.hair_beard_2_halloween{background-image:url(spritesmith-main-0.png);background-position:-116px -1324px;width:60px;height:60px}.hair_beard_2_holly{background-image:url(spritesmith-main-0.png);background-position:-182px -1309px;width:90px;height:90px}.customize-option.hair_beard_2_holly{background-image:url(spritesmith-main-0.png);background-position:-207px -1324px;width:60px;height:60px}.hair_beard_2_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-273px -1309px;width:90px;height:90px}.customize-option.hair_beard_2_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-298px -1324px;width:60px;height:60px}.hair_beard_2_midnight{background-image:url(spritesmith-main-0.png);background-position:-364px -1309px;width:90px;height:90px}.customize-option.hair_beard_2_midnight{background-image:url(spritesmith-main-0.png);background-position:-389px -1324px;width:60px;height:60px}.hair_beard_2_pblue{background-image:url(spritesmith-main-0.png);background-position:-455px -1309px;width:90px;height:90px}.customize-option.hair_beard_2_pblue{background-image:url(spritesmith-main-0.png);background-position:-480px -1324px;width:60px;height:60px}.hair_beard_2_peppermint{background-image:url(spritesmith-main-0.png);background-position:-546px -1309px;width:90px;height:90px}.customize-option.hair_beard_2_peppermint{background-image:url(spritesmith-main-0.png);background-position:-571px -1324px;width:60px;height:60px}.hair_beard_2_pgreen{background-image:url(spritesmith-main-0.png);background-position:-637px -1309px;width:90px;height:90px}.customize-option.hair_beard_2_pgreen{background-image:url(spritesmith-main-0.png);background-position:-662px -1324px;width:60px;height:60px}.hair_beard_2_porange{background-image:url(spritesmith-main-0.png);background-position:-728px -1309px;width:90px;height:90px}.customize-option.hair_beard_2_porange{background-image:url(spritesmith-main-0.png);background-position:-753px -1324px;width:60px;height:60px}.hair_beard_2_ppink{background-image:url(spritesmith-main-0.png);background-position:-819px -1309px;width:90px;height:90px}.customize-option.hair_beard_2_ppink{background-image:url(spritesmith-main-0.png);background-position:-844px -1324px;width:60px;height:60px}.hair_beard_2_ppurple{background-image:url(spritesmith-main-0.png);background-position:-423px -888px;width:90px;height:90px}.customize-option.hair_beard_2_ppurple{background-image:url(spritesmith-main-0.png);background-position:-448px -903px;width:60px;height:60px}.hair_beard_2_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-1001px -1309px;width:90px;height:90px}.customize-option.hair_beard_2_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-1026px -1324px;width:60px;height:60px}.hair_beard_2_purple{background-image:url(spritesmith-main-0.png);background-position:-1092px -1309px;width:90px;height:90px}.customize-option.hair_beard_2_purple{background-image:url(spritesmith-main-0.png);background-position:-1117px -1324px;width:60px;height:60px}.hair_beard_2_pyellow{background-image:url(spritesmith-main-0.png);background-position:-1183px -1309px;width:90px;height:90px}.customize-option.hair_beard_2_pyellow{background-image:url(spritesmith-main-0.png);background-position:-1208px -1324px;width:60px;height:60px}.hair_beard_2_rainbow{background-image:url(spritesmith-main-0.png);background-position:-1274px -1309px;width:90px;height:90px}.customize-option.hair_beard_2_rainbow{background-image:url(spritesmith-main-0.png);background-position:-1299px -1324px;width:60px;height:60px}.hair_beard_2_red{background-image:url(spritesmith-main-0.png);background-position:-1405px 0;width:90px;height:90px}.customize-option.hair_beard_2_red{background-image:url(spritesmith-main-0.png);background-position:-1430px -15px;width:60px;height:60px}.hair_beard_2_snowy{background-image:url(spritesmith-main-0.png);background-position:-1405px -91px;width:90px;height:90px}.customize-option.hair_beard_2_snowy{background-image:url(spritesmith-main-0.png);background-position:-1430px -106px;width:60px;height:60px}.hair_beard_2_white{background-image:url(spritesmith-main-0.png);background-position:-1405px -182px;width:90px;height:90px}.customize-option.hair_beard_2_white{background-image:url(spritesmith-main-0.png);background-position:-1430px -197px;width:60px;height:60px}.hair_beard_2_winternight{background-image:url(spritesmith-main-0.png);background-position:-1405px -273px;width:90px;height:90px}.customize-option.hair_beard_2_winternight{background-image:url(spritesmith-main-0.png);background-position:-1430px -288px;width:60px;height:60px}.hair_beard_2_winterstar{background-image:url(spritesmith-main-0.png);background-position:-1405px -364px;width:90px;height:90px}.customize-option.hair_beard_2_winterstar{background-image:url(spritesmith-main-0.png);background-position:-1430px -379px;width:60px;height:60px}.hair_beard_2_yellow{background-image:url(spritesmith-main-0.png);background-position:-1405px -455px;width:90px;height:90px}.customize-option.hair_beard_2_yellow{background-image:url(spritesmith-main-0.png);background-position:-1430px -470px;width:60px;height:60px}.hair_beard_2_zombie{background-image:url(spritesmith-main-0.png);background-position:-1405px -546px;width:90px;height:90px}.customize-option.hair_beard_2_zombie{background-image:url(spritesmith-main-0.png);background-position:-1430px -561px;width:60px;height:60px}.hair_beard_3_TRUred{background-image:url(spritesmith-main-0.png);background-position:-1405px -637px;width:90px;height:90px}.customize-option.hair_beard_3_TRUred{background-image:url(spritesmith-main-0.png);background-position:-1430px -652px;width:60px;height:60px}.hair_beard_3_aurora{background-image:url(spritesmith-main-0.png);background-position:-1405px -728px;width:90px;height:90px}.customize-option.hair_beard_3_aurora{background-image:url(spritesmith-main-0.png);background-position:-1430px -743px;width:60px;height:60px}.hair_beard_3_black{background-image:url(spritesmith-main-0.png);background-position:-1405px -819px;width:90px;height:90px}.customize-option.hair_beard_3_black{background-image:url(spritesmith-main-0.png);background-position:-1430px -834px;width:60px;height:60px}.hair_beard_3_blond{background-image:url(spritesmith-main-0.png);background-position:-1405px -910px;width:90px;height:90px}.customize-option.hair_beard_3_blond{background-image:url(spritesmith-main-0.png);background-position:-1430px -925px;width:60px;height:60px}.hair_beard_3_blue{background-image:url(spritesmith-main-0.png);background-position:-1405px -1001px;width:90px;height:90px}.customize-option.hair_beard_3_blue{background-image:url(spritesmith-main-0.png);background-position:-1430px -1016px;width:60px;height:60px}.hair_beard_3_brown{background-image:url(spritesmith-main-0.png);background-position:-1405px -1092px;width:90px;height:90px}.customize-option.hair_beard_3_brown{background-image:url(spritesmith-main-0.png);background-position:-1430px -1107px;width:60px;height:60px}.hair_beard_3_candycane{background-image:url(spritesmith-main-0.png);background-position:-1405px -1183px;width:90px;height:90px}.customize-option.hair_beard_3_candycane{background-image:url(spritesmith-main-0.png);background-position:-1430px -1198px;width:60px;height:60px}.hair_beard_3_candycorn{background-image:url(spritesmith-main-0.png);background-position:-1405px -1274px;width:90px;height:90px}.customize-option.hair_beard_3_candycorn{background-image:url(spritesmith-main-0.png);background-position:-1430px -1289px;width:60px;height:60px}.hair_beard_3_festive{background-image:url(spritesmith-main-0.png);background-position:0 -1400px;width:90px;height:90px}.customize-option.hair_beard_3_festive{background-image:url(spritesmith-main-0.png);background-position:-25px -1415px;width:60px;height:60px}.hair_beard_3_frost{background-image:url(spritesmith-main-0.png);background-position:-91px -1400px;width:90px;height:90px}.customize-option.hair_beard_3_frost{background-image:url(spritesmith-main-0.png);background-position:-116px -1415px;width:60px;height:60px}.hair_beard_3_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-182px -1400px;width:90px;height:90px}.customize-option.hair_beard_3_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-207px -1415px;width:60px;height:60px}.hair_beard_3_green{background-image:url(spritesmith-main-0.png);background-position:-273px -1400px;width:90px;height:90px}.customize-option.hair_beard_3_green{background-image:url(spritesmith-main-0.png);background-position:-298px -1415px;width:60px;height:60px}.hair_beard_3_halloween{background-image:url(spritesmith-main-0.png);background-position:-364px -1400px;width:90px;height:90px}.customize-option.hair_beard_3_halloween{background-image:url(spritesmith-main-0.png);background-position:-389px -1415px;width:60px;height:60px}.hair_beard_3_holly{background-image:url(spritesmith-main-0.png);background-position:-455px -1400px;width:90px;height:90px}.customize-option.hair_beard_3_holly{background-image:url(spritesmith-main-0.png);background-position:-480px -1415px;width:60px;height:60px}.hair_beard_3_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-546px -1400px;width:90px;height:90px}.customize-option.hair_beard_3_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-571px -1415px;width:60px;height:60px}.hair_beard_3_midnight{background-image:url(spritesmith-main-0.png);background-position:-637px -1400px;width:90px;height:90px}.customize-option.hair_beard_3_midnight{background-image:url(spritesmith-main-0.png);background-position:-662px -1415px;width:60px;height:60px}.hair_beard_3_pblue{background-image:url(spritesmith-main-0.png);background-position:-728px -1400px;width:90px;height:90px}.customize-option.hair_beard_3_pblue{background-image:url(spritesmith-main-0.png);background-position:-753px -1415px;width:60px;height:60px}.hair_beard_3_peppermint{background-image:url(spritesmith-main-0.png);background-position:-819px -1400px;width:90px;height:90px}.customize-option.hair_beard_3_peppermint{background-image:url(spritesmith-main-0.png);background-position:-844px -1415px;width:60px;height:60px}.hair_beard_3_pgreen{background-image:url(spritesmith-main-0.png);background-position:-910px -1400px;width:90px;height:90px}.customize-option.hair_beard_3_pgreen{background-image:url(spritesmith-main-0.png);background-position:-935px -1415px;width:60px;height:60px}.hair_beard_3_porange{background-image:url(spritesmith-main-0.png);background-position:-1001px -1400px;width:90px;height:90px}.customize-option.hair_beard_3_porange{background-image:url(spritesmith-main-0.png);background-position:-1026px -1415px;width:60px;height:60px}.hair_beard_3_ppink{background-image:url(spritesmith-main-0.png);background-position:-1092px -1400px;width:90px;height:90px}.customize-option.hair_beard_3_ppink{background-image:url(spritesmith-main-0.png);background-position:-1117px -1415px;width:60px;height:60px}.hair_beard_3_ppurple{background-image:url(spritesmith-main-0.png);background-position:-1183px -1400px;width:90px;height:90px}.customize-option.hair_beard_3_ppurple{background-image:url(spritesmith-main-0.png);background-position:-1208px -1415px;width:60px;height:60px}.hair_beard_3_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-1274px -1400px;width:90px;height:90px}.customize-option.hair_beard_3_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-1299px -1415px;width:60px;height:60px}.hair_beard_3_purple{background-image:url(spritesmith-main-0.png);background-position:-1365px -1400px;width:90px;height:90px}.customize-option.hair_beard_3_purple{background-image:url(spritesmith-main-0.png);background-position:-1390px -1415px;width:60px;height:60px}.hair_beard_3_pyellow{background-image:url(spritesmith-main-0.png);background-position:-1496px 0;width:90px;height:90px}.customize-option.hair_beard_3_pyellow{background-image:url(spritesmith-main-0.png);background-position:-1521px -15px;width:60px;height:60px}.hair_beard_3_rainbow{background-image:url(spritesmith-main-0.png);background-position:-1496px -91px;width:90px;height:90px}.customize-option.hair_beard_3_rainbow{background-image:url(spritesmith-main-0.png);background-position:-1521px -106px;width:60px;height:60px}.hair_beard_3_red{background-image:url(spritesmith-main-0.png);background-position:-1496px -182px;width:90px;height:90px}.customize-option.hair_beard_3_red{background-image:url(spritesmith-main-0.png);background-position:-1521px -197px;width:60px;height:60px}.hair_beard_3_snowy{background-image:url(spritesmith-main-0.png);background-position:-1496px -273px;width:90px;height:90px}.customize-option.hair_beard_3_snowy{background-image:url(spritesmith-main-0.png);background-position:-1521px -288px;width:60px;height:60px}.hair_beard_3_white{background-image:url(spritesmith-main-0.png);background-position:-1496px -364px;width:90px;height:90px}.customize-option.hair_beard_3_white{background-image:url(spritesmith-main-0.png);background-position:-1521px -379px;width:60px;height:60px}.hair_beard_3_winternight{background-image:url(spritesmith-main-0.png);background-position:-1496px -455px;width:90px;height:90px}.customize-option.hair_beard_3_winternight{background-image:url(spritesmith-main-0.png);background-position:-1521px -470px;width:60px;height:60px}.hair_beard_3_winterstar{background-image:url(spritesmith-main-0.png);background-position:-1496px -546px;width:90px;height:90px}.customize-option.hair_beard_3_winterstar{background-image:url(spritesmith-main-0.png);background-position:-1521px -561px;width:60px;height:60px}.hair_beard_3_yellow{background-image:url(spritesmith-main-0.png);background-position:-1496px -637px;width:90px;height:90px}.customize-option.hair_beard_3_yellow{background-image:url(spritesmith-main-0.png);background-position:-1521px -652px;width:60px;height:60px}.hair_beard_3_zombie{background-image:url(spritesmith-main-0.png);background-position:-1496px -728px;width:90px;height:90px}.customize-option.hair_beard_3_zombie{background-image:url(spritesmith-main-0.png);background-position:-1521px -743px;width:60px;height:60px}.hair_mustache_1_TRUred{background-image:url(spritesmith-main-0.png);background-position:-1496px -819px;width:90px;height:90px}.customize-option.hair_mustache_1_TRUred{background-image:url(spritesmith-main-0.png);background-position:-1521px -834px;width:60px;height:60px}.hair_mustache_1_aurora{background-image:url(spritesmith-main-0.png);background-position:-1496px -910px;width:90px;height:90px}.customize-option.hair_mustache_1_aurora{background-image:url(spritesmith-main-0.png);background-position:-1521px -925px;width:60px;height:60px}.hair_mustache_1_black{background-image:url(spritesmith-main-0.png);background-position:-1496px -1001px;width:90px;height:90px}.customize-option.hair_mustache_1_black{background-image:url(spritesmith-main-0.png);background-position:-1521px -1016px;width:60px;height:60px}.hair_mustache_1_blond{background-image:url(spritesmith-main-0.png);background-position:-1496px -1092px;width:90px;height:90px}.customize-option.hair_mustache_1_blond{background-image:url(spritesmith-main-0.png);background-position:-1521px -1107px;width:60px;height:60px}.hair_mustache_1_blue{background-image:url(spritesmith-main-0.png);background-position:-1496px -1183px;width:90px;height:90px}.customize-option.hair_mustache_1_blue{background-image:url(spritesmith-main-0.png);background-position:-1521px -1198px;width:60px;height:60px}.hair_mustache_1_brown{background-image:url(spritesmith-main-0.png);background-position:-1496px -1274px;width:90px;height:90px}.customize-option.hair_mustache_1_brown{background-image:url(spritesmith-main-0.png);background-position:-1521px -1289px;width:60px;height:60px}.hair_mustache_1_candycane{background-image:url(spritesmith-main-0.png);background-position:-1496px -1365px;width:90px;height:90px}.customize-option.hair_mustache_1_candycane{background-image:url(spritesmith-main-0.png);background-position:-1521px -1380px;width:60px;height:60px}.hair_mustache_1_candycorn{background-image:url(spritesmith-main-0.png);background-position:0 -1491px;width:90px;height:90px}.customize-option.hair_mustache_1_candycorn{background-image:url(spritesmith-main-0.png);background-position:-25px -1506px;width:60px;height:60px}.hair_mustache_1_festive{background-image:url(spritesmith-main-0.png);background-position:-91px -1491px;width:90px;height:90px}.customize-option.hair_mustache_1_festive{background-image:url(spritesmith-main-0.png);background-position:-116px -1506px;width:60px;height:60px}.hair_mustache_1_frost{background-image:url(spritesmith-main-0.png);background-position:-182px -1491px;width:90px;height:90px}.customize-option.hair_mustache_1_frost{background-image:url(spritesmith-main-0.png);background-position:-207px -1506px;width:60px;height:60px}.hair_mustache_1_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-273px -1491px;width:90px;height:90px}.customize-option.hair_mustache_1_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-298px -1506px;width:60px;height:60px}.hair_mustache_1_green{background-image:url(spritesmith-main-0.png);background-position:-364px -1491px;width:90px;height:90px}.customize-option.hair_mustache_1_green{background-image:url(spritesmith-main-0.png);background-position:-389px -1506px;width:60px;height:60px}.hair_mustache_1_halloween{background-image:url(spritesmith-main-0.png);background-position:-455px -1491px;width:90px;height:90px}.customize-option.hair_mustache_1_halloween{background-image:url(spritesmith-main-0.png);background-position:-480px -1506px;width:60px;height:60px}.hair_mustache_1_holly{background-image:url(spritesmith-main-0.png);background-position:-546px -1491px;width:90px;height:90px}.customize-option.hair_mustache_1_holly{background-image:url(spritesmith-main-0.png);background-position:-571px -1506px;width:60px;height:60px}.hair_mustache_1_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-637px -1491px;width:90px;height:90px}.customize-option.hair_mustache_1_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-662px -1506px;width:60px;height:60px}.hair_mustache_1_midnight{background-image:url(spritesmith-main-0.png);background-position:-728px -1491px;width:90px;height:90px}.customize-option.hair_mustache_1_midnight{background-image:url(spritesmith-main-0.png);background-position:-753px -1506px;width:60px;height:60px}.hair_mustache_1_pblue{background-image:url(spritesmith-main-0.png);background-position:-819px -1491px;width:90px;height:90px}.customize-option.hair_mustache_1_pblue{background-image:url(spritesmith-main-0.png);background-position:-844px -1506px;width:60px;height:60px}.hair_mustache_1_peppermint{background-image:url(spritesmith-main-0.png);background-position:-910px -1491px;width:90px;height:90px}.customize-option.hair_mustache_1_peppermint{background-image:url(spritesmith-main-0.png);background-position:-935px -1506px;width:60px;height:60px}.hair_mustache_1_pgreen{background-image:url(spritesmith-main-0.png);background-position:-1001px -1491px;width:90px;height:90px}.customize-option.hair_mustache_1_pgreen{background-image:url(spritesmith-main-0.png);background-position:-1026px -1506px;width:60px;height:60px}.hair_mustache_1_porange{background-image:url(spritesmith-main-0.png);background-position:-1092px -1491px;width:90px;height:90px}.customize-option.hair_mustache_1_porange{background-image:url(spritesmith-main-0.png);background-position:-1117px -1506px;width:60px;height:60px}.hair_mustache_1_ppink{background-image:url(spritesmith-main-0.png);background-position:-1183px -1491px;width:90px;height:90px}.customize-option.hair_mustache_1_ppink{background-image:url(spritesmith-main-0.png);background-position:-1208px -1506px;width:60px;height:60px}.hair_mustache_1_ppurple{background-image:url(spritesmith-main-0.png);background-position:-1274px -1491px;width:90px;height:90px}.customize-option.hair_mustache_1_ppurple{background-image:url(spritesmith-main-0.png);background-position:-1299px -1506px;width:60px;height:60px}.hair_mustache_1_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-1365px -1491px;width:90px;height:90px}.customize-option.hair_mustache_1_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-1390px -1506px;width:60px;height:60px}.hair_mustache_1_purple{background-image:url(spritesmith-main-0.png);background-position:-1456px -1491px;width:90px;height:90px}.customize-option.hair_mustache_1_purple{background-image:url(spritesmith-main-0.png);background-position:-1481px -1506px;width:60px;height:60px}.hair_mustache_1_pyellow{background-image:url(spritesmith-main-0.png);background-position:-1587px 0;width:90px;height:90px}.customize-option.hair_mustache_1_pyellow{background-image:url(spritesmith-main-0.png);background-position:-1612px -15px;width:60px;height:60px}.hair_mustache_1_rainbow{background-image:url(spritesmith-main-0.png);background-position:-1587px -91px;width:90px;height:90px}.customize-option.hair_mustache_1_rainbow{background-image:url(spritesmith-main-0.png);background-position:-1612px -106px;width:60px;height:60px}.hair_mustache_1_red{background-image:url(spritesmith-main-0.png);background-position:-1587px -182px;width:90px;height:90px}.customize-option.hair_mustache_1_red{background-image:url(spritesmith-main-0.png);background-position:-1612px -197px;width:60px;height:60px}.hair_mustache_1_snowy{background-image:url(spritesmith-main-0.png);background-position:-1587px -273px;width:90px;height:90px}.customize-option.hair_mustache_1_snowy{background-image:url(spritesmith-main-0.png);background-position:-1612px -288px;width:60px;height:60px}.hair_mustache_1_white{background-image:url(spritesmith-main-0.png);background-position:-1587px -364px;width:90px;height:90px}.customize-option.hair_mustache_1_white{background-image:url(spritesmith-main-0.png);background-position:-1612px -379px;width:60px;height:60px}.hair_mustache_1_winternight{background-image:url(spritesmith-main-0.png);background-position:-1587px -455px;width:90px;height:90px}.customize-option.hair_mustache_1_winternight{background-image:url(spritesmith-main-0.png);background-position:-1612px -470px;width:60px;height:60px}.hair_mustache_1_winterstar{background-image:url(spritesmith-main-0.png);background-position:-1587px -546px;width:90px;height:90px}.customize-option.hair_mustache_1_winterstar{background-image:url(spritesmith-main-0.png);background-position:-1612px -561px;width:60px;height:60px}.hair_mustache_1_yellow{background-image:url(spritesmith-main-0.png);background-position:-1587px -637px;width:90px;height:90px}.customize-option.hair_mustache_1_yellow{background-image:url(spritesmith-main-0.png);background-position:-1612px -652px;width:60px;height:60px}.hair_mustache_1_zombie{background-image:url(spritesmith-main-0.png);background-position:-1587px -728px;width:90px;height:90px}.customize-option.hair_mustache_1_zombie{background-image:url(spritesmith-main-0.png);background-position:-1612px -743px;width:60px;height:60px}.hair_mustache_2_TRUred{background-image:url(spritesmith-main-0.png);background-position:-1587px -819px;width:90px;height:90px}.customize-option.hair_mustache_2_TRUred{background-image:url(spritesmith-main-0.png);background-position:-1612px -834px;width:60px;height:60px}.hair_mustache_2_aurora{background-image:url(spritesmith-main-0.png);background-position:-1587px -910px;width:90px;height:90px}.customize-option.hair_mustache_2_aurora{background-image:url(spritesmith-main-0.png);background-position:-1612px -925px;width:60px;height:60px}.hair_mustache_2_black{background-image:url(spritesmith-main-0.png);background-position:-1587px -1001px;width:90px;height:90px}.customize-option.hair_mustache_2_black{background-image:url(spritesmith-main-0.png);background-position:-1612px -1016px;width:60px;height:60px}.hair_mustache_2_blond{background-image:url(spritesmith-main-0.png);background-position:-1587px -1092px;width:90px;height:90px}.customize-option.hair_mustache_2_blond{background-image:url(spritesmith-main-0.png);background-position:-1612px -1107px;width:60px;height:60px}.hair_mustache_2_blue{background-image:url(spritesmith-main-0.png);background-position:-1587px -1183px;width:90px;height:90px}.customize-option.hair_mustache_2_blue{background-image:url(spritesmith-main-0.png);background-position:-1612px -1198px;width:60px;height:60px}.hair_mustache_2_brown{background-image:url(spritesmith-main-0.png);background-position:-1587px -1274px;width:90px;height:90px}.customize-option.hair_mustache_2_brown{background-image:url(spritesmith-main-0.png);background-position:-1612px -1289px;width:60px;height:60px}.hair_mustache_2_candycane{background-image:url(spritesmith-main-0.png);background-position:-1587px -1365px;width:90px;height:90px}.customize-option.hair_mustache_2_candycane{background-image:url(spritesmith-main-0.png);background-position:-1612px -1380px;width:60px;height:60px}.hair_mustache_2_candycorn{background-image:url(spritesmith-main-0.png);background-position:-1587px -1456px;width:90px;height:90px}.customize-option.hair_mustache_2_candycorn{background-image:url(spritesmith-main-0.png);background-position:-1612px -1471px;width:60px;height:60px}.hair_mustache_2_festive{background-image:url(spritesmith-main-0.png);background-position:0 -1582px;width:90px;height:90px}.customize-option.hair_mustache_2_festive{background-image:url(spritesmith-main-0.png);background-position:-25px -1597px;width:60px;height:60px}.hair_mustache_2_frost{background-image:url(spritesmith-main-0.png);background-position:-91px -1582px;width:90px;height:90px}.customize-option.hair_mustache_2_frost{background-image:url(spritesmith-main-0.png);background-position:-116px -1597px;width:60px;height:60px}.hair_mustache_2_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-182px -1582px;width:90px;height:90px}.customize-option.hair_mustache_2_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-207px -1597px;width:60px;height:60px}.hair_mustache_2_green{background-image:url(spritesmith-main-0.png);background-position:-273px -1582px;width:90px;height:90px}.customize-option.hair_mustache_2_green{background-image:url(spritesmith-main-0.png);background-position:-298px -1597px;width:60px;height:60px}.hair_mustache_2_halloween{background-image:url(spritesmith-main-0.png);background-position:-364px -1582px;width:90px;height:90px}.customize-option.hair_mustache_2_halloween{background-image:url(spritesmith-main-0.png);background-position:-389px -1597px;width:60px;height:60px}.hair_mustache_2_holly{background-image:url(spritesmith-main-0.png);background-position:-455px -1582px;width:90px;height:90px}.customize-option.hair_mustache_2_holly{background-image:url(spritesmith-main-0.png);background-position:-480px -1597px;width:60px;height:60px}.hair_mustache_2_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-546px -1582px;width:90px;height:90px}.customize-option.hair_mustache_2_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-571px -1597px;width:60px;height:60px}.hair_mustache_2_midnight{background-image:url(spritesmith-main-0.png);background-position:-637px -1582px;width:90px;height:90px}.customize-option.hair_mustache_2_midnight{background-image:url(spritesmith-main-0.png);background-position:-662px -1597px;width:60px;height:60px}.hair_mustache_2_pblue{background-image:url(spritesmith-main-0.png);background-position:-728px -1582px;width:90px;height:90px}.customize-option.hair_mustache_2_pblue{background-image:url(spritesmith-main-0.png);background-position:-753px -1597px;width:60px;height:60px}.hair_mustache_2_peppermint{background-image:url(spritesmith-main-0.png);background-position:-819px -1582px;width:90px;height:90px}.customize-option.hair_mustache_2_peppermint{background-image:url(spritesmith-main-0.png);background-position:-844px -1597px;width:60px;height:60px}.hair_mustache_2_pgreen{background-image:url(spritesmith-main-0.png);background-position:-910px -1582px;width:90px;height:90px}.customize-option.hair_mustache_2_pgreen{background-image:url(spritesmith-main-0.png);background-position:-935px -1597px;width:60px;height:60px}.hair_mustache_2_porange{background-image:url(spritesmith-main-0.png);background-position:-1001px -1582px;width:90px;height:90px}.customize-option.hair_mustache_2_porange{background-image:url(spritesmith-main-0.png);background-position:-1026px -1597px;width:60px;height:60px}.hair_mustache_2_ppink{background-image:url(spritesmith-main-0.png);background-position:-1092px -1582px;width:90px;height:90px}.customize-option.hair_mustache_2_ppink{background-image:url(spritesmith-main-0.png);background-position:-1117px -1597px;width:60px;height:60px}.hair_mustache_2_ppurple{background-image:url(spritesmith-main-0.png);background-position:-1183px -1582px;width:90px;height:90px}.customize-option.hair_mustache_2_ppurple{background-image:url(spritesmith-main-0.png);background-position:-1208px -1597px;width:60px;height:60px}.hair_mustache_2_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-1274px -1582px;width:90px;height:90px}.customize-option.hair_mustache_2_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-1299px -1597px;width:60px;height:60px}.hair_mustache_2_purple{background-image:url(spritesmith-main-0.png);background-position:-1365px -1582px;width:90px;height:90px}.customize-option.hair_mustache_2_purple{background-image:url(spritesmith-main-0.png);background-position:-1390px -1597px;width:60px;height:60px}.hair_mustache_2_pyellow{background-image:url(spritesmith-main-0.png);background-position:-1456px -1582px;width:90px;height:90px}.customize-option.hair_mustache_2_pyellow{background-image:url(spritesmith-main-0.png);background-position:-1481px -1597px;width:60px;height:60px}.hair_mustache_2_rainbow{background-image:url(spritesmith-main-0.png);background-position:-1547px -1582px;width:90px;height:90px}.customize-option.hair_mustache_2_rainbow{background-image:url(spritesmith-main-0.png);background-position:-1572px -1597px;width:60px;height:60px}.hair_mustache_2_red{background-image:url(spritesmith-main-0.png);background-position:-1678px 0;width:90px;height:90px}.customize-option.hair_mustache_2_red{background-image:url(spritesmith-main-0.png);background-position:-1703px -15px;width:60px;height:60px}.hair_mustache_2_snowy{background-image:url(spritesmith-main-0.png);background-position:-1678px -91px;width:90px;height:90px}.customize-option.hair_mustache_2_snowy{background-image:url(spritesmith-main-0.png);background-position:-1703px -106px;width:60px;height:60px}.hair_mustache_2_white{background-image:url(spritesmith-main-0.png);background-position:-910px -1309px;width:90px;height:90px}.customize-option.hair_mustache_2_white{background-image:url(spritesmith-main-0.png);background-position:-935px -1324px;width:60px;height:60px}.hair_mustache_2_winternight{background-image:url(spritesmith-main-0.png);background-position:-1132px -910px;width:90px;height:90px}.customize-option.hair_mustache_2_winternight{background-image:url(spritesmith-main-0.png);background-position:-1157px -925px;width:60px;height:60px}.hair_mustache_2_winterstar{background-image:url(spritesmith-main-0.png);background-position:-1132px -819px;width:90px;height:90px}.customize-option.hair_mustache_2_winterstar{background-image:url(spritesmith-main-0.png);background-position:-1157px -834px;width:60px;height:60px}.hair_mustache_2_yellow{background-image:url(spritesmith-main-0.png);background-position:-1132px -728px;width:90px;height:90px}.customize-option.hair_mustache_2_yellow{background-image:url(spritesmith-main-0.png);background-position:-1157px -743px;width:60px;height:60px}.hair_mustache_2_zombie{background-image:url(spritesmith-main-0.png);background-position:-1132px -637px;width:90px;height:90px}.customize-option.hair_mustache_2_zombie{background-image:url(spritesmith-main-0.png);background-position:-1157px -652px;width:60px;height:60px}.hair_flower_1{background-image:url(spritesmith-main-0.png);background-position:-1132px -546px;width:90px;height:90px}.customize-option.hair_flower_1{background-image:url(spritesmith-main-0.png);background-position:-1157px -561px;width:60px;height:60px}.hair_flower_2{background-image:url(spritesmith-main-0.png);background-position:-1132px -455px;width:90px;height:90px}.customize-option.hair_flower_2{background-image:url(spritesmith-main-0.png);background-position:-1157px -470px;width:60px;height:60px}.hair_flower_3{background-image:url(spritesmith-main-0.png);background-position:-1132px -364px;width:90px;height:90px}.customize-option.hair_flower_3{background-image:url(spritesmith-main-0.png);background-position:-1157px -379px;width:60px;height:60px}.hair_flower_4{background-image:url(spritesmith-main-0.png);background-position:-1132px -273px;width:90px;height:90px}.customize-option.hair_flower_4{background-image:url(spritesmith-main-0.png);background-position:-1157px -288px;width:60px;height:60px}.hair_flower_5{background-image:url(spritesmith-main-0.png);background-position:-1132px -182px;width:90px;height:90px}.customize-option.hair_flower_5{background-image:url(spritesmith-main-0.png);background-position:-1157px -197px;width:60px;height:60px}.hair_flower_6{background-image:url(spritesmith-main-0.png);background-position:-1132px -91px;width:90px;height:90px}.customize-option.hair_flower_6{background-image:url(spritesmith-main-0.png);background-position:-1157px -106px;width:60px;height:60px}.hair_bangs_1_TRUred{background-image:url(spritesmith-main-0.png);background-position:-1132px 0;width:90px;height:90px}.customize-option.hair_bangs_1_TRUred{background-image:url(spritesmith-main-0.png);background-position:-1157px -15px;width:60px;height:60px}.hair_bangs_1_aurora{background-image:url(spritesmith-main-0.png);background-position:-1001px -1036px;width:90px;height:90px}.customize-option.hair_bangs_1_aurora{background-image:url(spritesmith-main-0.png);background-position:-1026px -1051px;width:60px;height:60px}.hair_bangs_1_black{background-image:url(spritesmith-main-0.png);background-position:-910px -1036px;width:90px;height:90px}.customize-option.hair_bangs_1_black{background-image:url(spritesmith-main-0.png);background-position:-935px -1051px;width:60px;height:60px}.hair_bangs_1_blond{background-image:url(spritesmith-main-0.png);background-position:-819px -1036px;width:90px;height:90px}.customize-option.hair_bangs_1_blond{background-image:url(spritesmith-main-0.png);background-position:-844px -1051px;width:60px;height:60px}.hair_bangs_1_blue{background-image:url(spritesmith-main-0.png);background-position:-728px -1036px;width:90px;height:90px}.customize-option.hair_bangs_1_blue{background-image:url(spritesmith-main-0.png);background-position:-753px -1051px;width:60px;height:60px}.hair_bangs_1_brown{background-image:url(spritesmith-main-0.png);background-position:-637px -1036px;width:90px;height:90px}.customize-option.hair_bangs_1_brown{background-image:url(spritesmith-main-0.png);background-position:-662px -1051px;width:60px;height:60px}.hair_bangs_1_candycane{background-image:url(spritesmith-main-0.png);background-position:-546px -1036px;width:90px;height:90px}.customize-option.hair_bangs_1_candycane{background-image:url(spritesmith-main-0.png);background-position:-571px -1051px;width:60px;height:60px}.hair_bangs_1_candycorn{background-image:url(spritesmith-main-0.png);background-position:-455px -1036px;width:90px;height:90px}.customize-option.hair_bangs_1_candycorn{background-image:url(spritesmith-main-0.png);background-position:-480px -1051px;width:60px;height:60px}.hair_bangs_1_festive{background-image:url(spritesmith-main-0.png);background-position:-364px -1036px;width:90px;height:90px}.customize-option.hair_bangs_1_festive{background-image:url(spritesmith-main-0.png);background-position:-389px -1051px;width:60px;height:60px}.hair_bangs_1_frost{background-image:url(spritesmith-main-0.png);background-position:-273px -1036px;width:90px;height:90px}.customize-option.hair_bangs_1_frost{background-image:url(spritesmith-main-0.png);background-position:-298px -1051px;width:60px;height:60px}.hair_bangs_1_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-182px -1036px;width:90px;height:90px}.customize-option.hair_bangs_1_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-207px -1051px;width:60px;height:60px}.hair_bangs_1_green{background-image:url(spritesmith-main-0.png);background-position:-91px -1036px;width:90px;height:90px}.customize-option.hair_bangs_1_green{background-image:url(spritesmith-main-0.png);background-position:-116px -1051px;width:60px;height:60px}.hair_bangs_1_halloween{background-image:url(spritesmith-main-0.png);background-position:0 -1036px;width:90px;height:90px}.customize-option.hair_bangs_1_halloween{background-image:url(spritesmith-main-0.png);background-position:-25px -1051px;width:60px;height:60px}.hair_bangs_1_holly{background-image:url(spritesmith-main-0.png);background-position:-969px -888px;width:90px;height:90px}.customize-option.hair_bangs_1_holly{background-image:url(spritesmith-main-0.png);background-position:-994px -903px;width:60px;height:60px}.hair_bangs_1_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-878px -888px;width:90px;height:90px}.customize-option.hair_bangs_1_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-903px -903px;width:60px;height:60px}.hair_bangs_1_midnight{background-image:url(spritesmith-main-0.png);background-position:-787px -888px;width:90px;height:90px}.customize-option.hair_bangs_1_midnight{background-image:url(spritesmith-main-0.png);background-position:-812px -903px;width:60px;height:60px}.hair_bangs_1_pblue{background-image:url(spritesmith-main-0.png);background-position:-696px -888px;width:90px;height:90px}.customize-option.hair_bangs_1_pblue{background-image:url(spritesmith-main-0.png);background-position:-721px -903px;width:60px;height:60px}.hair_bangs_1_pblue2{background-image:url(spritesmith-main-0.png);background-position:-605px -888px;width:90px;height:90px}.customize-option.hair_bangs_1_pblue2{background-image:url(spritesmith-main-0.png);background-position:-630px -903px;width:60px;height:60px}.hair_bangs_1_peppermint{background-image:url(spritesmith-main-0.png);background-position:-514px -888px;width:90px;height:90px}.customize-option.hair_bangs_1_peppermint{background-image:url(spritesmith-main-0.png);background-position:-539px -903px;width:60px;height:60px}.hair_bangs_1_pgreen{background-image:url(spritesmith-main-0.png);background-position:-819px -1127px;width:90px;height:90px}.customize-option.hair_bangs_1_pgreen{background-image:url(spritesmith-main-0.png);background-position:-844px -1142px;width:60px;height:60px}.hair_bangs_1_pgreen2{background-image:url(spritesmith-main-0.png);background-position:-728px -1127px;width:90px;height:90px}.customize-option.hair_bangs_1_pgreen2{background-image:url(spritesmith-main-0.png);background-position:-753px -1142px;width:60px;height:60px}.hair_bangs_1_porange{background-image:url(spritesmith-main-0.png);background-position:-637px -1127px;width:90px;height:90px}.customize-option.hair_bangs_1_porange{background-image:url(spritesmith-main-0.png);background-position:-662px -1142px;width:60px;height:60px}.hair_bangs_1_porange2{background-image:url(spritesmith-main-0.png);background-position:-546px -1127px;width:90px;height:90px}.customize-option.hair_bangs_1_porange2{background-image:url(spritesmith-main-0.png);background-position:-571px -1142px;width:60px;height:60px}.hair_bangs_1_ppink{background-image:url(spritesmith-main-0.png);background-position:-455px -1127px;width:90px;height:90px}.customize-option.hair_bangs_1_ppink{background-image:url(spritesmith-main-0.png);background-position:-480px -1142px;width:60px;height:60px}.hair_bangs_1_ppink2{background-image:url(spritesmith-main-0.png);background-position:-364px -1127px;width:90px;height:90px}.customize-option.hair_bangs_1_ppink2{background-image:url(spritesmith-main-0.png);background-position:-389px -1142px;width:60px;height:60px}.hair_bangs_1_ppurple{background-image:url(spritesmith-main-0.png);background-position:-273px -1127px;width:90px;height:90px}.customize-option.hair_bangs_1_ppurple{background-image:url(spritesmith-main-0.png);background-position:-298px -1142px;width:60px;height:60px}.hair_bangs_1_ppurple2{background-image:url(spritesmith-main-0.png);background-position:-182px -1127px;width:90px;height:90px}.customize-option.hair_bangs_1_ppurple2{background-image:url(spritesmith-main-0.png);background-position:-207px -1142px;width:60px;height:60px}.hair_bangs_1_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-91px -1127px;width:90px;height:90px}.customize-option.hair_bangs_1_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-116px -1142px;width:60px;height:60px}.hair_bangs_1_purple{background-image:url(spritesmith-main-0.png);background-position:0 -1127px;width:90px;height:90px}.customize-option.hair_bangs_1_purple{background-image:url(spritesmith-main-0.png);background-position:-25px -1142px;width:60px;height:60px}.hair_bangs_1_pyellow{background-image:url(spritesmith-main-0.png);background-position:-1132px -1001px;width:90px;height:90px}.customize-option.hair_bangs_1_pyellow{background-image:url(spritesmith-main-0.png);background-position:-1157px -1016px;width:60px;height:60px}.hair_bangs_1_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-91px 0;width:90px;height:90px}.customize-option.hair_bangs_1_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-116px -15px;width:60px;height:60px}.hair_bangs_1_rainbow{background-image:url(spritesmith-main-1.png);background-position:-728px -1092px;width:90px;height:90px}.customize-option.hair_bangs_1_rainbow{background-image:url(spritesmith-main-1.png);background-position:-753px -1107px;width:60px;height:60px}.hair_bangs_1_red{background-image:url(spritesmith-main-1.png);background-position:0 -91px;width:90px;height:90px}.customize-option.hair_bangs_1_red{background-image:url(spritesmith-main-1.png);background-position:-25px -106px;width:60px;height:60px}.hair_bangs_1_snowy{background-image:url(spritesmith-main-1.png);background-position:-91px -91px;width:90px;height:90px}.customize-option.hair_bangs_1_snowy{background-image:url(spritesmith-main-1.png);background-position:-116px -106px;width:60px;height:60px}.hair_bangs_1_white{background-image:url(spritesmith-main-1.png);background-position:-182px 0;width:90px;height:90px}.customize-option.hair_bangs_1_white{background-image:url(spritesmith-main-1.png);background-position:-207px -15px;width:60px;height:60px}.hair_bangs_1_winternight{background-image:url(spritesmith-main-1.png);background-position:-182px -91px;width:90px;height:90px}.customize-option.hair_bangs_1_winternight{background-image:url(spritesmith-main-1.png);background-position:-207px -106px;width:60px;height:60px}.hair_bangs_1_winterstar{background-image:url(spritesmith-main-1.png);background-position:0 -182px;width:90px;height:90px}.customize-option.hair_bangs_1_winterstar{background-image:url(spritesmith-main-1.png);background-position:-25px -197px;width:60px;height:60px}.hair_bangs_1_yellow{background-image:url(spritesmith-main-1.png);background-position:-91px -182px;width:90px;height:90px}.customize-option.hair_bangs_1_yellow{background-image:url(spritesmith-main-1.png);background-position:-116px -197px;width:60px;height:60px}.hair_bangs_1_zombie{background-image:url(spritesmith-main-1.png);background-position:-182px -182px;width:90px;height:90px}.customize-option.hair_bangs_1_zombie{background-image:url(spritesmith-main-1.png);background-position:-207px -197px;width:60px;height:60px}.hair_bangs_2_TRUred{background-image:url(spritesmith-main-1.png);background-position:-273px 0;width:90px;height:90px}.customize-option.hair_bangs_2_TRUred{background-image:url(spritesmith-main-1.png);background-position:-298px -15px;width:60px;height:60px}.hair_bangs_2_aurora{background-image:url(spritesmith-main-1.png);background-position:-273px -91px;width:90px;height:90px}.customize-option.hair_bangs_2_aurora{background-image:url(spritesmith-main-1.png);background-position:-298px -106px;width:60px;height:60px}.hair_bangs_2_black{background-image:url(spritesmith-main-1.png);background-position:-273px -182px;width:90px;height:90px}.customize-option.hair_bangs_2_black{background-image:url(spritesmith-main-1.png);background-position:-298px -197px;width:60px;height:60px}.hair_bangs_2_blond{background-image:url(spritesmith-main-1.png);background-position:0 -273px;width:90px;height:90px}.customize-option.hair_bangs_2_blond{background-image:url(spritesmith-main-1.png);background-position:-25px -288px;width:60px;height:60px}.hair_bangs_2_blue{background-image:url(spritesmith-main-1.png);background-position:-91px -273px;width:90px;height:90px}.customize-option.hair_bangs_2_blue{background-image:url(spritesmith-main-1.png);background-position:-116px -288px;width:60px;height:60px}.hair_bangs_2_brown{background-image:url(spritesmith-main-1.png);background-position:-182px -273px;width:90px;height:90px}.customize-option.hair_bangs_2_brown{background-image:url(spritesmith-main-1.png);background-position:-207px -288px;width:60px;height:60px}.hair_bangs_2_candycane{background-image:url(spritesmith-main-1.png);background-position:-273px -273px;width:90px;height:90px}.customize-option.hair_bangs_2_candycane{background-image:url(spritesmith-main-1.png);background-position:-298px -288px;width:60px;height:60px}.hair_bangs_2_candycorn{background-image:url(spritesmith-main-1.png);background-position:-364px 0;width:90px;height:90px}.customize-option.hair_bangs_2_candycorn{background-image:url(spritesmith-main-1.png);background-position:-389px -15px;width:60px;height:60px}.hair_bangs_2_festive{background-image:url(spritesmith-main-1.png);background-position:-364px -91px;width:90px;height:90px}.customize-option.hair_bangs_2_festive{background-image:url(spritesmith-main-1.png);background-position:-389px -106px;width:60px;height:60px}.hair_bangs_2_frost{background-image:url(spritesmith-main-1.png);background-position:-364px -182px;width:90px;height:90px}.customize-option.hair_bangs_2_frost{background-image:url(spritesmith-main-1.png);background-position:-389px -197px;width:60px;height:60px}.hair_bangs_2_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-364px -273px;width:90px;height:90px}.customize-option.hair_bangs_2_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-389px -288px;width:60px;height:60px}.hair_bangs_2_green{background-image:url(spritesmith-main-1.png);background-position:0 -364px;width:90px;height:90px}.customize-option.hair_bangs_2_green{background-image:url(spritesmith-main-1.png);background-position:-25px -379px;width:60px;height:60px}.hair_bangs_2_halloween{background-image:url(spritesmith-main-1.png);background-position:-91px -364px;width:90px;height:90px}.customize-option.hair_bangs_2_halloween{background-image:url(spritesmith-main-1.png);background-position:-116px -379px;width:60px;height:60px}.hair_bangs_2_holly{background-image:url(spritesmith-main-1.png);background-position:-182px -364px;width:90px;height:90px}.customize-option.hair_bangs_2_holly{background-image:url(spritesmith-main-1.png);background-position:-207px -379px;width:60px;height:60px}.hair_bangs_2_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-273px -364px;width:90px;height:90px}.customize-option.hair_bangs_2_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-298px -379px;width:60px;height:60px}.hair_bangs_2_midnight{background-image:url(spritesmith-main-1.png);background-position:-364px -364px;width:90px;height:90px}.customize-option.hair_bangs_2_midnight{background-image:url(spritesmith-main-1.png);background-position:-389px -379px;width:60px;height:60px}.hair_bangs_2_pblue{background-image:url(spritesmith-main-1.png);background-position:-455px 0;width:90px;height:90px}.customize-option.hair_bangs_2_pblue{background-image:url(spritesmith-main-1.png);background-position:-480px -15px;width:60px;height:60px}.hair_bangs_2_pblue2{background-image:url(spritesmith-main-1.png);background-position:-455px -91px;width:90px;height:90px}.customize-option.hair_bangs_2_pblue2{background-image:url(spritesmith-main-1.png);background-position:-480px -106px;width:60px;height:60px}.hair_bangs_2_peppermint{background-image:url(spritesmith-main-1.png);background-position:-455px -182px;width:90px;height:90px}.customize-option.hair_bangs_2_peppermint{background-image:url(spritesmith-main-1.png);background-position:-480px -197px;width:60px;height:60px}.hair_bangs_2_pgreen{background-image:url(spritesmith-main-1.png);background-position:-455px -273px;width:90px;height:90px}.customize-option.hair_bangs_2_pgreen{background-image:url(spritesmith-main-1.png);background-position:-480px -288px;width:60px;height:60px}.hair_bangs_2_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-455px -364px;width:90px;height:90px}.customize-option.hair_bangs_2_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-480px -379px;width:60px;height:60px}.hair_bangs_2_porange{background-image:url(spritesmith-main-1.png);background-position:0 -455px;width:90px;height:90px}.customize-option.hair_bangs_2_porange{background-image:url(spritesmith-main-1.png);background-position:-25px -470px;width:60px;height:60px}.hair_bangs_2_porange2{background-image:url(spritesmith-main-1.png);background-position:-91px -455px;width:90px;height:90px}.customize-option.hair_bangs_2_porange2{background-image:url(spritesmith-main-1.png);background-position:-116px -470px;width:60px;height:60px}.hair_bangs_2_ppink{background-image:url(spritesmith-main-1.png);background-position:-182px -455px;width:90px;height:90px}.customize-option.hair_bangs_2_ppink{background-image:url(spritesmith-main-1.png);background-position:-207px -470px;width:60px;height:60px}.hair_bangs_2_ppink2{background-image:url(spritesmith-main-1.png);background-position:-273px -455px;width:90px;height:90px}.customize-option.hair_bangs_2_ppink2{background-image:url(spritesmith-main-1.png);background-position:-298px -470px;width:60px;height:60px}.hair_bangs_2_ppurple{background-image:url(spritesmith-main-1.png);background-position:-364px -455px;width:90px;height:90px}.customize-option.hair_bangs_2_ppurple{background-image:url(spritesmith-main-1.png);background-position:-389px -470px;width:60px;height:60px}.hair_bangs_2_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-455px -455px;width:90px;height:90px}.customize-option.hair_bangs_2_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-480px -470px;width:60px;height:60px}.hair_bangs_2_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-546px 0;width:90px;height:90px}.customize-option.hair_bangs_2_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-571px -15px;width:60px;height:60px}.hair_bangs_2_purple{background-image:url(spritesmith-main-1.png);background-position:-546px -91px;width:90px;height:90px}.customize-option.hair_bangs_2_purple{background-image:url(spritesmith-main-1.png);background-position:-571px -106px;width:60px;height:60px}.hair_bangs_2_pyellow{background-image:url(spritesmith-main-1.png);background-position:-546px -182px;width:90px;height:90px}.customize-option.hair_bangs_2_pyellow{background-image:url(spritesmith-main-1.png);background-position:-571px -197px;width:60px;height:60px}.hair_bangs_2_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-546px -273px;width:90px;height:90px}.customize-option.hair_bangs_2_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-571px -288px;width:60px;height:60px}.hair_bangs_2_rainbow{background-image:url(spritesmith-main-1.png);background-position:-546px -364px;width:90px;height:90px}.customize-option.hair_bangs_2_rainbow{background-image:url(spritesmith-main-1.png);background-position:-571px -379px;width:60px;height:60px}.hair_bangs_2_red{background-image:url(spritesmith-main-1.png);background-position:-546px -455px;width:90px;height:90px}.customize-option.hair_bangs_2_red{background-image:url(spritesmith-main-1.png);background-position:-571px -470px;width:60px;height:60px}.hair_bangs_2_snowy{background-image:url(spritesmith-main-1.png);background-position:0 -546px;width:90px;height:90px}.customize-option.hair_bangs_2_snowy{background-image:url(spritesmith-main-1.png);background-position:-25px -561px;width:60px;height:60px}.hair_bangs_2_white{background-image:url(spritesmith-main-1.png);background-position:-91px -546px;width:90px;height:90px}.customize-option.hair_bangs_2_white{background-image:url(spritesmith-main-1.png);background-position:-116px -561px;width:60px;height:60px}.hair_bangs_2_winternight{background-image:url(spritesmith-main-1.png);background-position:-182px -546px;width:90px;height:90px}.customize-option.hair_bangs_2_winternight{background-image:url(spritesmith-main-1.png);background-position:-207px -561px;width:60px;height:60px}.hair_bangs_2_winterstar{background-image:url(spritesmith-main-1.png);background-position:-273px -546px;width:90px;height:90px}.customize-option.hair_bangs_2_winterstar{background-image:url(spritesmith-main-1.png);background-position:-298px -561px;width:60px;height:60px}.hair_bangs_2_yellow{background-image:url(spritesmith-main-1.png);background-position:-364px -546px;width:90px;height:90px}.customize-option.hair_bangs_2_yellow{background-image:url(spritesmith-main-1.png);background-position:-389px -561px;width:60px;height:60px}.hair_bangs_2_zombie{background-image:url(spritesmith-main-1.png);background-position:-455px -546px;width:90px;height:90px}.customize-option.hair_bangs_2_zombie{background-image:url(spritesmith-main-1.png);background-position:-480px -561px;width:60px;height:60px}.hair_bangs_3_TRUred{background-image:url(spritesmith-main-1.png);background-position:-546px -546px;width:90px;height:90px}.customize-option.hair_bangs_3_TRUred{background-image:url(spritesmith-main-1.png);background-position:-571px -561px;width:60px;height:60px}.hair_bangs_3_aurora{background-image:url(spritesmith-main-1.png);background-position:-637px 0;width:90px;height:90px}.customize-option.hair_bangs_3_aurora{background-image:url(spritesmith-main-1.png);background-position:-662px -15px;width:60px;height:60px}.hair_bangs_3_black{background-image:url(spritesmith-main-1.png);background-position:-637px -91px;width:90px;height:90px}.customize-option.hair_bangs_3_black{background-image:url(spritesmith-main-1.png);background-position:-662px -106px;width:60px;height:60px}.hair_bangs_3_blond{background-image:url(spritesmith-main-1.png);background-position:-637px -182px;width:90px;height:90px}.customize-option.hair_bangs_3_blond{background-image:url(spritesmith-main-1.png);background-position:-662px -197px;width:60px;height:60px}.hair_bangs_3_blue{background-image:url(spritesmith-main-1.png);background-position:-637px -273px;width:90px;height:90px}.customize-option.hair_bangs_3_blue{background-image:url(spritesmith-main-1.png);background-position:-662px -288px;width:60px;height:60px}.hair_bangs_3_brown{background-image:url(spritesmith-main-1.png);background-position:-637px -364px;width:90px;height:90px}.customize-option.hair_bangs_3_brown{background-image:url(spritesmith-main-1.png);background-position:-662px -379px;width:60px;height:60px}.hair_bangs_3_candycane{background-image:url(spritesmith-main-1.png);background-position:-637px -455px;width:90px;height:90px}.customize-option.hair_bangs_3_candycane{background-image:url(spritesmith-main-1.png);background-position:-662px -470px;width:60px;height:60px}.hair_bangs_3_candycorn{background-image:url(spritesmith-main-1.png);background-position:-637px -546px;width:90px;height:90px}.customize-option.hair_bangs_3_candycorn{background-image:url(spritesmith-main-1.png);background-position:-662px -561px;width:60px;height:60px}.hair_bangs_3_festive{background-image:url(spritesmith-main-1.png);background-position:0 -637px;width:90px;height:90px}.customize-option.hair_bangs_3_festive{background-image:url(spritesmith-main-1.png);background-position:-25px -652px;width:60px;height:60px}.hair_bangs_3_frost{background-image:url(spritesmith-main-1.png);background-position:-91px -637px;width:90px;height:90px}.customize-option.hair_bangs_3_frost{background-image:url(spritesmith-main-1.png);background-position:-116px -652px;width:60px;height:60px}.hair_bangs_3_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-182px -637px;width:90px;height:90px}.customize-option.hair_bangs_3_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-207px -652px;width:60px;height:60px}.hair_bangs_3_green{background-image:url(spritesmith-main-1.png);background-position:-273px -637px;width:90px;height:90px}.customize-option.hair_bangs_3_green{background-image:url(spritesmith-main-1.png);background-position:-298px -652px;width:60px;height:60px}.hair_bangs_3_halloween{background-image:url(spritesmith-main-1.png);background-position:-364px -637px;width:90px;height:90px}.customize-option.hair_bangs_3_halloween{background-image:url(spritesmith-main-1.png);background-position:-389px -652px;width:60px;height:60px}.hair_bangs_3_holly{background-image:url(spritesmith-main-1.png);background-position:-455px -637px;width:90px;height:90px}.customize-option.hair_bangs_3_holly{background-image:url(spritesmith-main-1.png);background-position:-480px -652px;width:60px;height:60px}.hair_bangs_3_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-546px -637px;width:90px;height:90px}.customize-option.hair_bangs_3_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-571px -652px;width:60px;height:60px}.hair_bangs_3_midnight{background-image:url(spritesmith-main-1.png);background-position:-637px -637px;width:90px;height:90px}.customize-option.hair_bangs_3_midnight{background-image:url(spritesmith-main-1.png);background-position:-662px -652px;width:60px;height:60px}.hair_bangs_3_pblue{background-image:url(spritesmith-main-1.png);background-position:-728px 0;width:90px;height:90px}.customize-option.hair_bangs_3_pblue{background-image:url(spritesmith-main-1.png);background-position:-753px -15px;width:60px;height:60px}.hair_bangs_3_pblue2{background-image:url(spritesmith-main-1.png);background-position:-728px -91px;width:90px;height:90px}.customize-option.hair_bangs_3_pblue2{background-image:url(spritesmith-main-1.png);background-position:-753px -106px;width:60px;height:60px}.hair_bangs_3_peppermint{background-image:url(spritesmith-main-1.png);background-position:-728px -182px;width:90px;height:90px}.customize-option.hair_bangs_3_peppermint{background-image:url(spritesmith-main-1.png);background-position:-753px -197px;width:60px;height:60px}.hair_bangs_3_pgreen{background-image:url(spritesmith-main-1.png);background-position:-728px -273px;width:90px;height:90px}.customize-option.hair_bangs_3_pgreen{background-image:url(spritesmith-main-1.png);background-position:-753px -288px;width:60px;height:60px}.hair_bangs_3_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-728px -364px;width:90px;height:90px}.customize-option.hair_bangs_3_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-753px -379px;width:60px;height:60px}.hair_bangs_3_porange{background-image:url(spritesmith-main-1.png);background-position:-728px -455px;width:90px;height:90px}.customize-option.hair_bangs_3_porange{background-image:url(spritesmith-main-1.png);background-position:-753px -470px;width:60px;height:60px}.hair_bangs_3_porange2{background-image:url(spritesmith-main-1.png);background-position:-728px -546px;width:90px;height:90px}.customize-option.hair_bangs_3_porange2{background-image:url(spritesmith-main-1.png);background-position:-753px -561px;width:60px;height:60px}.hair_bangs_3_ppink{background-image:url(spritesmith-main-1.png);background-position:-728px -637px;width:90px;height:90px}.customize-option.hair_bangs_3_ppink{background-image:url(spritesmith-main-1.png);background-position:-753px -652px;width:60px;height:60px}.hair_bangs_3_ppink2{background-image:url(spritesmith-main-1.png);background-position:0 -728px;width:90px;height:90px}.customize-option.hair_bangs_3_ppink2{background-image:url(spritesmith-main-1.png);background-position:-25px -743px;width:60px;height:60px}.hair_bangs_3_ppurple{background-image:url(spritesmith-main-1.png);background-position:-91px -728px;width:90px;height:90px}.customize-option.hair_bangs_3_ppurple{background-image:url(spritesmith-main-1.png);background-position:-116px -743px;width:60px;height:60px}.hair_bangs_3_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-182px -728px;width:90px;height:90px}.customize-option.hair_bangs_3_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-207px -743px;width:60px;height:60px}.hair_bangs_3_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-273px -728px;width:90px;height:90px}.customize-option.hair_bangs_3_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-298px -743px;width:60px;height:60px}.hair_bangs_3_purple{background-image:url(spritesmith-main-1.png);background-position:-364px -728px;width:90px;height:90px}.customize-option.hair_bangs_3_purple{background-image:url(spritesmith-main-1.png);background-position:-389px -743px;width:60px;height:60px}.hair_bangs_3_pyellow{background-image:url(spritesmith-main-1.png);background-position:-455px -728px;width:90px;height:90px}.customize-option.hair_bangs_3_pyellow{background-image:url(spritesmith-main-1.png);background-position:-480px -743px;width:60px;height:60px}.hair_bangs_3_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-546px -728px;width:90px;height:90px}.customize-option.hair_bangs_3_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-571px -743px;width:60px;height:60px}.hair_bangs_3_rainbow{background-image:url(spritesmith-main-1.png);background-position:-637px -728px;width:90px;height:90px}.customize-option.hair_bangs_3_rainbow{background-image:url(spritesmith-main-1.png);background-position:-662px -743px;width:60px;height:60px}.hair_bangs_3_red{background-image:url(spritesmith-main-1.png);background-position:-728px -728px;width:90px;height:90px}.customize-option.hair_bangs_3_red{background-image:url(spritesmith-main-1.png);background-position:-753px -743px;width:60px;height:60px}.hair_bangs_3_snowy{background-image:url(spritesmith-main-1.png);background-position:-819px 0;width:90px;height:90px}.customize-option.hair_bangs_3_snowy{background-image:url(spritesmith-main-1.png);background-position:-844px -15px;width:60px;height:60px}.hair_bangs_3_white{background-image:url(spritesmith-main-1.png);background-position:-819px -91px;width:90px;height:90px}.customize-option.hair_bangs_3_white{background-image:url(spritesmith-main-1.png);background-position:-844px -106px;width:60px;height:60px}.hair_bangs_3_winternight{background-image:url(spritesmith-main-1.png);background-position:-819px -182px;width:90px;height:90px}.customize-option.hair_bangs_3_winternight{background-image:url(spritesmith-main-1.png);background-position:-844px -197px;width:60px;height:60px}.hair_bangs_3_winterstar{background-image:url(spritesmith-main-1.png);background-position:-819px -273px;width:90px;height:90px}.customize-option.hair_bangs_3_winterstar{background-image:url(spritesmith-main-1.png);background-position:-844px -288px;width:60px;height:60px}.hair_bangs_3_yellow{background-image:url(spritesmith-main-1.png);background-position:-819px -364px;width:90px;height:90px}.customize-option.hair_bangs_3_yellow{background-image:url(spritesmith-main-1.png);background-position:-844px -379px;width:60px;height:60px}.hair_bangs_3_zombie{background-image:url(spritesmith-main-1.png);background-position:-819px -455px;width:90px;height:90px}.customize-option.hair_bangs_3_zombie{background-image:url(spritesmith-main-1.png);background-position:-844px -470px;width:60px;height:60px}.hair_base_10_TRUred{background-image:url(spritesmith-main-1.png);background-position:-819px -546px;width:90px;height:90px}.customize-option.hair_base_10_TRUred{background-image:url(spritesmith-main-1.png);background-position:-844px -561px;width:60px;height:60px}.hair_base_10_aurora{background-image:url(spritesmith-main-1.png);background-position:-819px -637px;width:90px;height:90px}.customize-option.hair_base_10_aurora{background-image:url(spritesmith-main-1.png);background-position:-844px -652px;width:60px;height:60px}.hair_base_10_black{background-image:url(spritesmith-main-1.png);background-position:-819px -728px;width:90px;height:90px}.customize-option.hair_base_10_black{background-image:url(spritesmith-main-1.png);background-position:-844px -743px;width:60px;height:60px}.hair_base_10_blond{background-image:url(spritesmith-main-1.png);background-position:0 -819px;width:90px;height:90px}.customize-option.hair_base_10_blond{background-image:url(spritesmith-main-1.png);background-position:-25px -834px;width:60px;height:60px}.hair_base_10_blue{background-image:url(spritesmith-main-1.png);background-position:-91px -819px;width:90px;height:90px}.customize-option.hair_base_10_blue{background-image:url(spritesmith-main-1.png);background-position:-116px -834px;width:60px;height:60px}.hair_base_10_brown{background-image:url(spritesmith-main-1.png);background-position:-182px -819px;width:90px;height:90px}.customize-option.hair_base_10_brown{background-image:url(spritesmith-main-1.png);background-position:-207px -834px;width:60px;height:60px}.hair_base_10_candycane{background-image:url(spritesmith-main-1.png);background-position:-273px -819px;width:90px;height:90px}.customize-option.hair_base_10_candycane{background-image:url(spritesmith-main-1.png);background-position:-298px -834px;width:60px;height:60px}.hair_base_10_candycorn{background-image:url(spritesmith-main-1.png);background-position:-364px -819px;width:90px;height:90px}.customize-option.hair_base_10_candycorn{background-image:url(spritesmith-main-1.png);background-position:-389px -834px;width:60px;height:60px}.hair_base_10_festive{background-image:url(spritesmith-main-1.png);background-position:-455px -819px;width:90px;height:90px}.customize-option.hair_base_10_festive{background-image:url(spritesmith-main-1.png);background-position:-480px -834px;width:60px;height:60px}.hair_base_10_frost{background-image:url(spritesmith-main-1.png);background-position:-546px -819px;width:90px;height:90px}.customize-option.hair_base_10_frost{background-image:url(spritesmith-main-1.png);background-position:-571px -834px;width:60px;height:60px}.hair_base_10_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-637px -819px;width:90px;height:90px}.customize-option.hair_base_10_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-662px -834px;width:60px;height:60px}.hair_base_10_green{background-image:url(spritesmith-main-1.png);background-position:-728px -819px;width:90px;height:90px}.customize-option.hair_base_10_green{background-image:url(spritesmith-main-1.png);background-position:-753px -834px;width:60px;height:60px}.hair_base_10_halloween{background-image:url(spritesmith-main-1.png);background-position:-819px -819px;width:90px;height:90px}.customize-option.hair_base_10_halloween{background-image:url(spritesmith-main-1.png);background-position:-844px -834px;width:60px;height:60px}.hair_base_10_holly{background-image:url(spritesmith-main-1.png);background-position:-910px 0;width:90px;height:90px}.customize-option.hair_base_10_holly{background-image:url(spritesmith-main-1.png);background-position:-935px -15px;width:60px;height:60px}.hair_base_10_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-910px -91px;width:90px;height:90px}.customize-option.hair_base_10_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-935px -106px;width:60px;height:60px}.hair_base_10_midnight{background-image:url(spritesmith-main-1.png);background-position:-910px -182px;width:90px;height:90px}.customize-option.hair_base_10_midnight{background-image:url(spritesmith-main-1.png);background-position:-935px -197px;width:60px;height:60px}.hair_base_10_pblue{background-image:url(spritesmith-main-1.png);background-position:-910px -273px;width:90px;height:90px}.customize-option.hair_base_10_pblue{background-image:url(spritesmith-main-1.png);background-position:-935px -288px;width:60px;height:60px}.hair_base_10_pblue2{background-image:url(spritesmith-main-1.png);background-position:-910px -364px;width:90px;height:90px}.customize-option.hair_base_10_pblue2{background-image:url(spritesmith-main-1.png);background-position:-935px -379px;width:60px;height:60px}.hair_base_10_peppermint{background-image:url(spritesmith-main-1.png);background-position:-910px -455px;width:90px;height:90px}.customize-option.hair_base_10_peppermint{background-image:url(spritesmith-main-1.png);background-position:-935px -470px;width:60px;height:60px}.hair_base_10_pgreen{background-image:url(spritesmith-main-1.png);background-position:-910px -546px;width:90px;height:90px}.customize-option.hair_base_10_pgreen{background-image:url(spritesmith-main-1.png);background-position:-935px -561px;width:60px;height:60px}.hair_base_10_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-910px -637px;width:90px;height:90px}.customize-option.hair_base_10_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-935px -652px;width:60px;height:60px}.hair_base_10_porange{background-image:url(spritesmith-main-1.png);background-position:-910px -728px;width:90px;height:90px}.customize-option.hair_base_10_porange{background-image:url(spritesmith-main-1.png);background-position:-935px -743px;width:60px;height:60px}.hair_base_10_porange2{background-image:url(spritesmith-main-1.png);background-position:-910px -819px;width:90px;height:90px}.customize-option.hair_base_10_porange2{background-image:url(spritesmith-main-1.png);background-position:-935px -834px;width:60px;height:60px}.hair_base_10_ppink{background-image:url(spritesmith-main-1.png);background-position:0 -910px;width:90px;height:90px}.customize-option.hair_base_10_ppink{background-image:url(spritesmith-main-1.png);background-position:-25px -925px;width:60px;height:60px}.hair_base_10_ppink2{background-image:url(spritesmith-main-1.png);background-position:-91px -910px;width:90px;height:90px}.customize-option.hair_base_10_ppink2{background-image:url(spritesmith-main-1.png);background-position:-116px -925px;width:60px;height:60px}.hair_base_10_ppurple{background-image:url(spritesmith-main-1.png);background-position:-182px -910px;width:90px;height:90px}.customize-option.hair_base_10_ppurple{background-image:url(spritesmith-main-1.png);background-position:-207px -925px;width:60px;height:60px}.hair_base_10_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-273px -910px;width:90px;height:90px}.customize-option.hair_base_10_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-298px -925px;width:60px;height:60px}.hair_base_10_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-364px -910px;width:90px;height:90px}.customize-option.hair_base_10_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-389px -925px;width:60px;height:60px}.hair_base_10_purple{background-image:url(spritesmith-main-1.png);background-position:-455px -910px;width:90px;height:90px}.customize-option.hair_base_10_purple{background-image:url(spritesmith-main-1.png);background-position:-480px -925px;width:60px;height:60px}.hair_base_10_pyellow{background-image:url(spritesmith-main-1.png);background-position:-546px -910px;width:90px;height:90px}.customize-option.hair_base_10_pyellow{background-image:url(spritesmith-main-1.png);background-position:-571px -925px;width:60px;height:60px}.hair_base_10_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-637px -910px;width:90px;height:90px}.customize-option.hair_base_10_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-662px -925px;width:60px;height:60px}.hair_base_10_rainbow{background-image:url(spritesmith-main-1.png);background-position:-728px -910px;width:90px;height:90px}.customize-option.hair_base_10_rainbow{background-image:url(spritesmith-main-1.png);background-position:-753px -925px;width:60px;height:60px}.hair_base_10_red{background-image:url(spritesmith-main-1.png);background-position:-819px -910px;width:90px;height:90px}.customize-option.hair_base_10_red{background-image:url(spritesmith-main-1.png);background-position:-844px -925px;width:60px;height:60px}.hair_base_10_snowy{background-image:url(spritesmith-main-1.png);background-position:-910px -910px;width:90px;height:90px}.customize-option.hair_base_10_snowy{background-image:url(spritesmith-main-1.png);background-position:-935px -925px;width:60px;height:60px}.hair_base_10_white{background-image:url(spritesmith-main-1.png);background-position:-1001px 0;width:90px;height:90px}.customize-option.hair_base_10_white{background-image:url(spritesmith-main-1.png);background-position:-1026px -15px;width:60px;height:60px}.hair_base_10_winternight{background-image:url(spritesmith-main-1.png);background-position:-1001px -91px;width:90px;height:90px}.customize-option.hair_base_10_winternight{background-image:url(spritesmith-main-1.png);background-position:-1026px -106px;width:60px;height:60px}.hair_base_10_winterstar{background-image:url(spritesmith-main-1.png);background-position:-1001px -182px;width:90px;height:90px}.customize-option.hair_base_10_winterstar{background-image:url(spritesmith-main-1.png);background-position:-1026px -197px;width:60px;height:60px}.hair_base_10_yellow{background-image:url(spritesmith-main-1.png);background-position:-1001px -273px;width:90px;height:90px}.customize-option.hair_base_10_yellow{background-image:url(spritesmith-main-1.png);background-position:-1026px -288px;width:60px;height:60px}.hair_base_10_zombie{background-image:url(spritesmith-main-1.png);background-position:-1001px -364px;width:90px;height:90px}.customize-option.hair_base_10_zombie{background-image:url(spritesmith-main-1.png);background-position:-1026px -379px;width:60px;height:60px}.hair_base_11_TRUred{background-image:url(spritesmith-main-1.png);background-position:-1001px -455px;width:90px;height:90px}.customize-option.hair_base_11_TRUred{background-image:url(spritesmith-main-1.png);background-position:-1026px -470px;width:60px;height:60px}.hair_base_11_aurora{background-image:url(spritesmith-main-1.png);background-position:-1001px -546px;width:90px;height:90px}.customize-option.hair_base_11_aurora{background-image:url(spritesmith-main-1.png);background-position:-1026px -561px;width:60px;height:60px}.hair_base_11_black{background-image:url(spritesmith-main-1.png);background-position:-1001px -637px;width:90px;height:90px}.customize-option.hair_base_11_black{background-image:url(spritesmith-main-1.png);background-position:-1026px -652px;width:60px;height:60px}.hair_base_11_blond{background-image:url(spritesmith-main-1.png);background-position:-1001px -728px;width:90px;height:90px}.customize-option.hair_base_11_blond{background-image:url(spritesmith-main-1.png);background-position:-1026px -743px;width:60px;height:60px}.hair_base_11_blue{background-image:url(spritesmith-main-1.png);background-position:-1001px -819px;width:90px;height:90px}.customize-option.hair_base_11_blue{background-image:url(spritesmith-main-1.png);background-position:-1026px -834px;width:60px;height:60px}.hair_base_11_brown{background-image:url(spritesmith-main-1.png);background-position:-1001px -910px;width:90px;height:90px}.customize-option.hair_base_11_brown{background-image:url(spritesmith-main-1.png);background-position:-1026px -925px;width:60px;height:60px}.hair_base_11_candycane{background-image:url(spritesmith-main-1.png);background-position:0 -1001px;width:90px;height:90px}.customize-option.hair_base_11_candycane{background-image:url(spritesmith-main-1.png);background-position:-25px -1016px;width:60px;height:60px}.hair_base_11_candycorn{background-image:url(spritesmith-main-1.png);background-position:-91px -1001px;width:90px;height:90px}.customize-option.hair_base_11_candycorn{background-image:url(spritesmith-main-1.png);background-position:-116px -1016px;width:60px;height:60px}.hair_base_11_festive{background-image:url(spritesmith-main-1.png);background-position:-182px -1001px;width:90px;height:90px}.customize-option.hair_base_11_festive{background-image:url(spritesmith-main-1.png);background-position:-207px -1016px;width:60px;height:60px}.hair_base_11_frost{background-image:url(spritesmith-main-1.png);background-position:-273px -1001px;width:90px;height:90px}.customize-option.hair_base_11_frost{background-image:url(spritesmith-main-1.png);background-position:-298px -1016px;width:60px;height:60px}.hair_base_11_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-364px -1001px;width:90px;height:90px}.customize-option.hair_base_11_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-389px -1016px;width:60px;height:60px}.hair_base_11_green{background-image:url(spritesmith-main-1.png);background-position:-455px -1001px;width:90px;height:90px}.customize-option.hair_base_11_green{background-image:url(spritesmith-main-1.png);background-position:-480px -1016px;width:60px;height:60px}.hair_base_11_halloween{background-image:url(spritesmith-main-1.png);background-position:-546px -1001px;width:90px;height:90px}.customize-option.hair_base_11_halloween{background-image:url(spritesmith-main-1.png);background-position:-571px -1016px;width:60px;height:60px}.hair_base_11_holly{background-image:url(spritesmith-main-1.png);background-position:-637px -1001px;width:90px;height:90px}.customize-option.hair_base_11_holly{background-image:url(spritesmith-main-1.png);background-position:-662px -1016px;width:60px;height:60px}.hair_base_11_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-728px -1001px;width:90px;height:90px}.customize-option.hair_base_11_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-753px -1016px;width:60px;height:60px}.hair_base_11_midnight{background-image:url(spritesmith-main-1.png);background-position:-819px -1001px;width:90px;height:90px}.customize-option.hair_base_11_midnight{background-image:url(spritesmith-main-1.png);background-position:-844px -1016px;width:60px;height:60px}.hair_base_11_pblue{background-image:url(spritesmith-main-1.png);background-position:-910px -1001px;width:90px;height:90px}.customize-option.hair_base_11_pblue{background-image:url(spritesmith-main-1.png);background-position:-935px -1016px;width:60px;height:60px}.hair_base_11_pblue2{background-image:url(spritesmith-main-1.png);background-position:-1001px -1001px;width:90px;height:90px}.customize-option.hair_base_11_pblue2{background-image:url(spritesmith-main-1.png);background-position:-1026px -1016px;width:60px;height:60px}.hair_base_11_peppermint{background-image:url(spritesmith-main-1.png);background-position:-1092px 0;width:90px;height:90px}.customize-option.hair_base_11_peppermint{background-image:url(spritesmith-main-1.png);background-position:-1117px -15px;width:60px;height:60px}.hair_base_11_pgreen{background-image:url(spritesmith-main-1.png);background-position:-1092px -91px;width:90px;height:90px}.customize-option.hair_base_11_pgreen{background-image:url(spritesmith-main-1.png);background-position:-1117px -106px;width:60px;height:60px}.hair_base_11_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-1092px -182px;width:90px;height:90px}.customize-option.hair_base_11_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-1117px -197px;width:60px;height:60px}.hair_base_11_porange{background-image:url(spritesmith-main-1.png);background-position:-1092px -273px;width:90px;height:90px}.customize-option.hair_base_11_porange{background-image:url(spritesmith-main-1.png);background-position:-1117px -288px;width:60px;height:60px}.hair_base_11_porange2{background-image:url(spritesmith-main-1.png);background-position:-1092px -364px;width:90px;height:90px}.customize-option.hair_base_11_porange2{background-image:url(spritesmith-main-1.png);background-position:-1117px -379px;width:60px;height:60px}.hair_base_11_ppink{background-image:url(spritesmith-main-1.png);background-position:-1092px -455px;width:90px;height:90px}.customize-option.hair_base_11_ppink{background-image:url(spritesmith-main-1.png);background-position:-1117px -470px;width:60px;height:60px}.hair_base_11_ppink2{background-image:url(spritesmith-main-1.png);background-position:-1092px -546px;width:90px;height:90px}.customize-option.hair_base_11_ppink2{background-image:url(spritesmith-main-1.png);background-position:-1117px -561px;width:60px;height:60px}.hair_base_11_ppurple{background-image:url(spritesmith-main-1.png);background-position:-1092px -637px;width:90px;height:90px}.customize-option.hair_base_11_ppurple{background-image:url(spritesmith-main-1.png);background-position:-1117px -652px;width:60px;height:60px}.hair_base_11_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-1092px -728px;width:90px;height:90px}.customize-option.hair_base_11_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-1117px -743px;width:60px;height:60px}.hair_base_11_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-1092px -819px;width:90px;height:90px}.customize-option.hair_base_11_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-1117px -834px;width:60px;height:60px}.hair_base_11_purple{background-image:url(spritesmith-main-1.png);background-position:-1092px -910px;width:90px;height:90px}.customize-option.hair_base_11_purple{background-image:url(spritesmith-main-1.png);background-position:-1117px -925px;width:60px;height:60px}.hair_base_11_pyellow{background-image:url(spritesmith-main-1.png);background-position:-1092px -1001px;width:90px;height:90px}.customize-option.hair_base_11_pyellow{background-image:url(spritesmith-main-1.png);background-position:-1117px -1016px;width:60px;height:60px}.hair_base_11_pyellow2{background-image:url(spritesmith-main-1.png);background-position:0 -1092px;width:90px;height:90px}.customize-option.hair_base_11_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-25px -1107px;width:60px;height:60px}.hair_base_11_rainbow{background-image:url(spritesmith-main-1.png);background-position:-91px -1092px;width:90px;height:90px}.customize-option.hair_base_11_rainbow{background-image:url(spritesmith-main-1.png);background-position:-116px -1107px;width:60px;height:60px}.hair_base_11_red{background-image:url(spritesmith-main-1.png);background-position:-182px -1092px;width:90px;height:90px}.customize-option.hair_base_11_red{background-image:url(spritesmith-main-1.png);background-position:-207px -1107px;width:60px;height:60px}.hair_base_11_snowy{background-image:url(spritesmith-main-1.png);background-position:-273px -1092px;width:90px;height:90px}.customize-option.hair_base_11_snowy{background-image:url(spritesmith-main-1.png);background-position:-298px -1107px;width:60px;height:60px}.hair_base_11_white{background-image:url(spritesmith-main-1.png);background-position:-364px -1092px;width:90px;height:90px}.customize-option.hair_base_11_white{background-image:url(spritesmith-main-1.png);background-position:-389px -1107px;width:60px;height:60px}.hair_base_11_winternight{background-image:url(spritesmith-main-1.png);background-position:-455px -1092px;width:90px;height:90px}.customize-option.hair_base_11_winternight{background-image:url(spritesmith-main-1.png);background-position:-480px -1107px;width:60px;height:60px}.hair_base_11_winterstar{background-image:url(spritesmith-main-1.png);background-position:-546px -1092px;width:90px;height:90px}.customize-option.hair_base_11_winterstar{background-image:url(spritesmith-main-1.png);background-position:-571px -1107px;width:60px;height:60px}.hair_base_11_yellow{background-image:url(spritesmith-main-1.png);background-position:-637px -1092px;width:90px;height:90px}.customize-option.hair_base_11_yellow{background-image:url(spritesmith-main-1.png);background-position:-662px -1107px;width:60px;height:60px}.hair_base_11_zombie{background-image:url(spritesmith-main-1.png);background-position:0 0;width:90px;height:90px}.customize-option.hair_base_11_zombie{background-image:url(spritesmith-main-1.png);background-position:-25px -15px;width:60px;height:60px}.hair_base_12_TRUred{background-image:url(spritesmith-main-1.png);background-position:-819px -1092px;width:90px;height:90px}.customize-option.hair_base_12_TRUred{background-image:url(spritesmith-main-1.png);background-position:-844px -1107px;width:60px;height:60px}.hair_base_12_aurora{background-image:url(spritesmith-main-1.png);background-position:-910px -1092px;width:90px;height:90px}.customize-option.hair_base_12_aurora{background-image:url(spritesmith-main-1.png);background-position:-935px -1107px;width:60px;height:60px}.hair_base_12_black{background-image:url(spritesmith-main-1.png);background-position:-1001px -1092px;width:90px;height:90px}.customize-option.hair_base_12_black{background-image:url(spritesmith-main-1.png);background-position:-1026px -1107px;width:60px;height:60px}.hair_base_12_blond{background-image:url(spritesmith-main-1.png);background-position:-1092px -1092px;width:90px;height:90px}.customize-option.hair_base_12_blond{background-image:url(spritesmith-main-1.png);background-position:-1117px -1107px;width:60px;height:60px}.hair_base_12_blue{background-image:url(spritesmith-main-1.png);background-position:-1183px 0;width:90px;height:90px}.customize-option.hair_base_12_blue{background-image:url(spritesmith-main-1.png);background-position:-1208px -15px;width:60px;height:60px}.hair_base_12_brown{background-image:url(spritesmith-main-1.png);background-position:-1183px -91px;width:90px;height:90px}.customize-option.hair_base_12_brown{background-image:url(spritesmith-main-1.png);background-position:-1208px -106px;width:60px;height:60px}.hair_base_12_candycane{background-image:url(spritesmith-main-1.png);background-position:-1183px -182px;width:90px;height:90px}.customize-option.hair_base_12_candycane{background-image:url(spritesmith-main-1.png);background-position:-1208px -197px;width:60px;height:60px}.hair_base_12_candycorn{background-image:url(spritesmith-main-1.png);background-position:-1183px -273px;width:90px;height:90px}.customize-option.hair_base_12_candycorn{background-image:url(spritesmith-main-1.png);background-position:-1208px -288px;width:60px;height:60px}.hair_base_12_festive{background-image:url(spritesmith-main-1.png);background-position:-1183px -364px;width:90px;height:90px}.customize-option.hair_base_12_festive{background-image:url(spritesmith-main-1.png);background-position:-1208px -379px;width:60px;height:60px}.hair_base_12_frost{background-image:url(spritesmith-main-1.png);background-position:-1183px -455px;width:90px;height:90px}.customize-option.hair_base_12_frost{background-image:url(spritesmith-main-1.png);background-position:-1208px -470px;width:60px;height:60px}.hair_base_12_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-1183px -546px;width:90px;height:90px}.customize-option.hair_base_12_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-1208px -561px;width:60px;height:60px}.hair_base_12_green{background-image:url(spritesmith-main-1.png);background-position:-1183px -637px;width:90px;height:90px}.customize-option.hair_base_12_green{background-image:url(spritesmith-main-1.png);background-position:-1208px -652px;width:60px;height:60px}.hair_base_12_halloween{background-image:url(spritesmith-main-1.png);background-position:-1183px -728px;width:90px;height:90px}.customize-option.hair_base_12_halloween{background-image:url(spritesmith-main-1.png);background-position:-1208px -743px;width:60px;height:60px}.hair_base_12_holly{background-image:url(spritesmith-main-1.png);background-position:-1183px -819px;width:90px;height:90px}.customize-option.hair_base_12_holly{background-image:url(spritesmith-main-1.png);background-position:-1208px -834px;width:60px;height:60px}.hair_base_12_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-1183px -910px;width:90px;height:90px}.customize-option.hair_base_12_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-1208px -925px;width:60px;height:60px}.hair_base_12_midnight{background-image:url(spritesmith-main-1.png);background-position:-1183px -1001px;width:90px;height:90px}.customize-option.hair_base_12_midnight{background-image:url(spritesmith-main-1.png);background-position:-1208px -1016px;width:60px;height:60px}.hair_base_12_pblue{background-image:url(spritesmith-main-1.png);background-position:-1183px -1092px;width:90px;height:90px}.customize-option.hair_base_12_pblue{background-image:url(spritesmith-main-1.png);background-position:-1208px -1107px;width:60px;height:60px}.hair_base_12_pblue2{background-image:url(spritesmith-main-1.png);background-position:0 -1183px;width:90px;height:90px}.customize-option.hair_base_12_pblue2{background-image:url(spritesmith-main-1.png);background-position:-25px -1198px;width:60px;height:60px}.hair_base_12_peppermint{background-image:url(spritesmith-main-1.png);background-position:-91px -1183px;width:90px;height:90px}.customize-option.hair_base_12_peppermint{background-image:url(spritesmith-main-1.png);background-position:-116px -1198px;width:60px;height:60px}.hair_base_12_pgreen{background-image:url(spritesmith-main-1.png);background-position:-182px -1183px;width:90px;height:90px}.customize-option.hair_base_12_pgreen{background-image:url(spritesmith-main-1.png);background-position:-207px -1198px;width:60px;height:60px}.hair_base_12_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-273px -1183px;width:90px;height:90px}.customize-option.hair_base_12_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-298px -1198px;width:60px;height:60px}.hair_base_12_porange{background-image:url(spritesmith-main-1.png);background-position:-364px -1183px;width:90px;height:90px}.customize-option.hair_base_12_porange{background-image:url(spritesmith-main-1.png);background-position:-389px -1198px;width:60px;height:60px}.hair_base_12_porange2{background-image:url(spritesmith-main-1.png);background-position:-455px -1183px;width:90px;height:90px}.customize-option.hair_base_12_porange2{background-image:url(spritesmith-main-1.png);background-position:-480px -1198px;width:60px;height:60px}.hair_base_12_ppink{background-image:url(spritesmith-main-1.png);background-position:-546px -1183px;width:90px;height:90px}.customize-option.hair_base_12_ppink{background-image:url(spritesmith-main-1.png);background-position:-571px -1198px;width:60px;height:60px}.hair_base_12_ppink2{background-image:url(spritesmith-main-1.png);background-position:-637px -1183px;width:90px;height:90px}.customize-option.hair_base_12_ppink2{background-image:url(spritesmith-main-1.png);background-position:-662px -1198px;width:60px;height:60px}.hair_base_12_ppurple{background-image:url(spritesmith-main-1.png);background-position:-728px -1183px;width:90px;height:90px}.customize-option.hair_base_12_ppurple{background-image:url(spritesmith-main-1.png);background-position:-753px -1198px;width:60px;height:60px}.hair_base_12_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-819px -1183px;width:90px;height:90px}.customize-option.hair_base_12_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-844px -1198px;width:60px;height:60px}.hair_base_12_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-910px -1183px;width:90px;height:90px}.customize-option.hair_base_12_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-935px -1198px;width:60px;height:60px}.hair_base_12_purple{background-image:url(spritesmith-main-1.png);background-position:-1001px -1183px;width:90px;height:90px}.customize-option.hair_base_12_purple{background-image:url(spritesmith-main-1.png);background-position:-1026px -1198px;width:60px;height:60px}.hair_base_12_pyellow{background-image:url(spritesmith-main-1.png);background-position:-1092px -1183px;width:90px;height:90px}.customize-option.hair_base_12_pyellow{background-image:url(spritesmith-main-1.png);background-position:-1117px -1198px;width:60px;height:60px}.hair_base_12_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-1183px -1183px;width:90px;height:90px}.customize-option.hair_base_12_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-1208px -1198px;width:60px;height:60px}.hair_base_12_rainbow{background-image:url(spritesmith-main-1.png);background-position:-1274px 0;width:90px;height:90px}.customize-option.hair_base_12_rainbow{background-image:url(spritesmith-main-1.png);background-position:-1299px -15px;width:60px;height:60px}.hair_base_12_red{background-image:url(spritesmith-main-1.png);background-position:-1274px -91px;width:90px;height:90px}.customize-option.hair_base_12_red{background-image:url(spritesmith-main-1.png);background-position:-1299px -106px;width:60px;height:60px}.hair_base_12_snowy{background-image:url(spritesmith-main-1.png);background-position:-1274px -182px;width:90px;height:90px}.customize-option.hair_base_12_snowy{background-image:url(spritesmith-main-1.png);background-position:-1299px -197px;width:60px;height:60px}.hair_base_12_white{background-image:url(spritesmith-main-1.png);background-position:-1274px -273px;width:90px;height:90px}.customize-option.hair_base_12_white{background-image:url(spritesmith-main-1.png);background-position:-1299px -288px;width:60px;height:60px}.hair_base_12_winternight{background-image:url(spritesmith-main-1.png);background-position:-1274px -364px;width:90px;height:90px}.customize-option.hair_base_12_winternight{background-image:url(spritesmith-main-1.png);background-position:-1299px -379px;width:60px;height:60px}.hair_base_12_winterstar{background-image:url(spritesmith-main-1.png);background-position:-1274px -455px;width:90px;height:90px}.customize-option.hair_base_12_winterstar{background-image:url(spritesmith-main-1.png);background-position:-1299px -470px;width:60px;height:60px}.hair_base_12_yellow{background-image:url(spritesmith-main-1.png);background-position:-1274px -546px;width:90px;height:90px}.customize-option.hair_base_12_yellow{background-image:url(spritesmith-main-1.png);background-position:-1299px -561px;width:60px;height:60px}.hair_base_12_zombie{background-image:url(spritesmith-main-1.png);background-position:-1274px -637px;width:90px;height:90px}.customize-option.hair_base_12_zombie{background-image:url(spritesmith-main-1.png);background-position:-1299px -652px;width:60px;height:60px}.hair_base_13_TRUred{background-image:url(spritesmith-main-1.png);background-position:-1274px -728px;width:90px;height:90px}.customize-option.hair_base_13_TRUred{background-image:url(spritesmith-main-1.png);background-position:-1299px -743px;width:60px;height:60px}.hair_base_13_aurora{background-image:url(spritesmith-main-1.png);background-position:-1274px -819px;width:90px;height:90px}.customize-option.hair_base_13_aurora{background-image:url(spritesmith-main-1.png);background-position:-1299px -834px;width:60px;height:60px}.hair_base_13_black{background-image:url(spritesmith-main-1.png);background-position:-1274px -910px;width:90px;height:90px}.customize-option.hair_base_13_black{background-image:url(spritesmith-main-1.png);background-position:-1299px -925px;width:60px;height:60px}.hair_base_13_blond{background-image:url(spritesmith-main-1.png);background-position:-1274px -1001px;width:90px;height:90px}.customize-option.hair_base_13_blond{background-image:url(spritesmith-main-1.png);background-position:-1299px -1016px;width:60px;height:60px}.hair_base_13_blue{background-image:url(spritesmith-main-1.png);background-position:-1274px -1092px;width:90px;height:90px}.customize-option.hair_base_13_blue{background-image:url(spritesmith-main-1.png);background-position:-1299px -1107px;width:60px;height:60px}.hair_base_13_brown{background-image:url(spritesmith-main-1.png);background-position:-1274px -1183px;width:90px;height:90px}.customize-option.hair_base_13_brown{background-image:url(spritesmith-main-1.png);background-position:-1299px -1198px;width:60px;height:60px}.hair_base_13_candycane{background-image:url(spritesmith-main-1.png);background-position:0 -1274px;width:90px;height:90px}.customize-option.hair_base_13_candycane{background-image:url(spritesmith-main-1.png);background-position:-25px -1289px;width:60px;height:60px}.hair_base_13_candycorn{background-image:url(spritesmith-main-1.png);background-position:-91px -1274px;width:90px;height:90px}.customize-option.hair_base_13_candycorn{background-image:url(spritesmith-main-1.png);background-position:-116px -1289px;width:60px;height:60px}.hair_base_13_festive{background-image:url(spritesmith-main-1.png);background-position:-182px -1274px;width:90px;height:90px}.customize-option.hair_base_13_festive{background-image:url(spritesmith-main-1.png);background-position:-207px -1289px;width:60px;height:60px}.hair_base_13_frost{background-image:url(spritesmith-main-1.png);background-position:-273px -1274px;width:90px;height:90px}.customize-option.hair_base_13_frost{background-image:url(spritesmith-main-1.png);background-position:-298px -1289px;width:60px;height:60px}.hair_base_13_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-364px -1274px;width:90px;height:90px}.customize-option.hair_base_13_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-389px -1289px;width:60px;height:60px}.hair_base_13_green{background-image:url(spritesmith-main-1.png);background-position:-455px -1274px;width:90px;height:90px}.customize-option.hair_base_13_green{background-image:url(spritesmith-main-1.png);background-position:-480px -1289px;width:60px;height:60px}.hair_base_13_halloween{background-image:url(spritesmith-main-1.png);background-position:-546px -1274px;width:90px;height:90px}.customize-option.hair_base_13_halloween{background-image:url(spritesmith-main-1.png);background-position:-571px -1289px;width:60px;height:60px}.hair_base_13_holly{background-image:url(spritesmith-main-1.png);background-position:-637px -1274px;width:90px;height:90px}.customize-option.hair_base_13_holly{background-image:url(spritesmith-main-1.png);background-position:-662px -1289px;width:60px;height:60px}.hair_base_13_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-728px -1274px;width:90px;height:90px}.customize-option.hair_base_13_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-753px -1289px;width:60px;height:60px}.hair_base_13_midnight{background-image:url(spritesmith-main-1.png);background-position:-819px -1274px;width:90px;height:90px}.customize-option.hair_base_13_midnight{background-image:url(spritesmith-main-1.png);background-position:-844px -1289px;width:60px;height:60px}.hair_base_13_pblue{background-image:url(spritesmith-main-1.png);background-position:-910px -1274px;width:90px;height:90px}.customize-option.hair_base_13_pblue{background-image:url(spritesmith-main-1.png);background-position:-935px -1289px;width:60px;height:60px}.hair_base_13_pblue2{background-image:url(spritesmith-main-1.png);background-position:-1001px -1274px;width:90px;height:90px}.customize-option.hair_base_13_pblue2{background-image:url(spritesmith-main-1.png);background-position:-1026px -1289px;width:60px;height:60px}.hair_base_13_peppermint{background-image:url(spritesmith-main-1.png);background-position:-1092px -1274px;width:90px;height:90px}.customize-option.hair_base_13_peppermint{background-image:url(spritesmith-main-1.png);background-position:-1117px -1289px;width:60px;height:60px}.hair_base_13_pgreen{background-image:url(spritesmith-main-1.png);background-position:-1183px -1274px;width:90px;height:90px}.customize-option.hair_base_13_pgreen{background-image:url(spritesmith-main-1.png);background-position:-1208px -1289px;width:60px;height:60px}.hair_base_13_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-1274px -1274px;width:90px;height:90px}.customize-option.hair_base_13_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-1299px -1289px;width:60px;height:60px}.hair_base_13_porange{background-image:url(spritesmith-main-1.png);background-position:-1365px 0;width:90px;height:90px}.customize-option.hair_base_13_porange{background-image:url(spritesmith-main-1.png);background-position:-1390px -15px;width:60px;height:60px}.hair_base_13_porange2{background-image:url(spritesmith-main-1.png);background-position:-1365px -91px;width:90px;height:90px}.customize-option.hair_base_13_porange2{background-image:url(spritesmith-main-1.png);background-position:-1390px -106px;width:60px;height:60px}.hair_base_13_ppink{background-image:url(spritesmith-main-1.png);background-position:-1365px -182px;width:90px;height:90px}.customize-option.hair_base_13_ppink{background-image:url(spritesmith-main-1.png);background-position:-1390px -197px;width:60px;height:60px}.hair_base_13_ppink2{background-image:url(spritesmith-main-1.png);background-position:-1365px -273px;width:90px;height:90px}.customize-option.hair_base_13_ppink2{background-image:url(spritesmith-main-1.png);background-position:-1390px -288px;width:60px;height:60px}.hair_base_13_ppurple{background-image:url(spritesmith-main-1.png);background-position:-1365px -364px;width:90px;height:90px}.customize-option.hair_base_13_ppurple{background-image:url(spritesmith-main-1.png);background-position:-1390px -379px;width:60px;height:60px}.hair_base_13_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-1365px -455px;width:90px;height:90px}.customize-option.hair_base_13_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-1390px -470px;width:60px;height:60px}.hair_base_13_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-1365px -546px;width:90px;height:90px}.customize-option.hair_base_13_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-1390px -561px;width:60px;height:60px}.hair_base_13_purple{background-image:url(spritesmith-main-1.png);background-position:-1365px -637px;width:90px;height:90px}.customize-option.hair_base_13_purple{background-image:url(spritesmith-main-1.png);background-position:-1390px -652px;width:60px;height:60px}.hair_base_13_pyellow{background-image:url(spritesmith-main-1.png);background-position:-1365px -728px;width:90px;height:90px}.customize-option.hair_base_13_pyellow{background-image:url(spritesmith-main-1.png);background-position:-1390px -743px;width:60px;height:60px}.hair_base_13_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-1365px -819px;width:90px;height:90px}.customize-option.hair_base_13_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-1390px -834px;width:60px;height:60px}.hair_base_13_rainbow{background-image:url(spritesmith-main-1.png);background-position:-1365px -910px;width:90px;height:90px}.customize-option.hair_base_13_rainbow{background-image:url(spritesmith-main-1.png);background-position:-1390px -925px;width:60px;height:60px}.hair_base_13_red{background-image:url(spritesmith-main-1.png);background-position:-1365px -1001px;width:90px;height:90px}.customize-option.hair_base_13_red{background-image:url(spritesmith-main-1.png);background-position:-1390px -1016px;width:60px;height:60px}.hair_base_13_snowy{background-image:url(spritesmith-main-1.png);background-position:-1365px -1092px;width:90px;height:90px}.customize-option.hair_base_13_snowy{background-image:url(spritesmith-main-1.png);background-position:-1390px -1107px;width:60px;height:60px}.hair_base_13_white{background-image:url(spritesmith-main-1.png);background-position:-1365px -1183px;width:90px;height:90px}.customize-option.hair_base_13_white{background-image:url(spritesmith-main-1.png);background-position:-1390px -1198px;width:60px;height:60px}.hair_base_13_winternight{background-image:url(spritesmith-main-1.png);background-position:-1365px -1274px;width:90px;height:90px}.customize-option.hair_base_13_winternight{background-image:url(spritesmith-main-1.png);background-position:-1390px -1289px;width:60px;height:60px}.hair_base_13_winterstar{background-image:url(spritesmith-main-1.png);background-position:0 -1365px;width:90px;height:90px}.customize-option.hair_base_13_winterstar{background-image:url(spritesmith-main-1.png);background-position:-25px -1380px;width:60px;height:60px}.hair_base_13_yellow{background-image:url(spritesmith-main-1.png);background-position:-91px -1365px;width:90px;height:90px}.customize-option.hair_base_13_yellow{background-image:url(spritesmith-main-1.png);background-position:-116px -1380px;width:60px;height:60px}.hair_base_13_zombie{background-image:url(spritesmith-main-1.png);background-position:-182px -1365px;width:90px;height:90px}.customize-option.hair_base_13_zombie{background-image:url(spritesmith-main-1.png);background-position:-207px -1380px;width:60px;height:60px}.hair_base_14_TRUred{background-image:url(spritesmith-main-1.png);background-position:-273px -1365px;width:90px;height:90px}.customize-option.hair_base_14_TRUred{background-image:url(spritesmith-main-1.png);background-position:-298px -1380px;width:60px;height:60px}.hair_base_14_aurora{background-image:url(spritesmith-main-1.png);background-position:-364px -1365px;width:90px;height:90px}.customize-option.hair_base_14_aurora{background-image:url(spritesmith-main-1.png);background-position:-389px -1380px;width:60px;height:60px}.hair_base_14_black{background-image:url(spritesmith-main-1.png);background-position:-455px -1365px;width:90px;height:90px}.customize-option.hair_base_14_black{background-image:url(spritesmith-main-1.png);background-position:-480px -1380px;width:60px;height:60px}.hair_base_14_blond{background-image:url(spritesmith-main-1.png);background-position:-546px -1365px;width:90px;height:90px}.customize-option.hair_base_14_blond{background-image:url(spritesmith-main-1.png);background-position:-571px -1380px;width:60px;height:60px}.hair_base_14_blue{background-image:url(spritesmith-main-1.png);background-position:-637px -1365px;width:90px;height:90px}.customize-option.hair_base_14_blue{background-image:url(spritesmith-main-1.png);background-position:-662px -1380px;width:60px;height:60px}.hair_base_14_brown{background-image:url(spritesmith-main-1.png);background-position:-728px -1365px;width:90px;height:90px}.customize-option.hair_base_14_brown{background-image:url(spritesmith-main-1.png);background-position:-753px -1380px;width:60px;height:60px}.hair_base_14_candycane{background-image:url(spritesmith-main-1.png);background-position:-819px -1365px;width:90px;height:90px}.customize-option.hair_base_14_candycane{background-image:url(spritesmith-main-1.png);background-position:-844px -1380px;width:60px;height:60px}.hair_base_14_candycorn{background-image:url(spritesmith-main-1.png);background-position:-910px -1365px;width:90px;height:90px}.customize-option.hair_base_14_candycorn{background-image:url(spritesmith-main-1.png);background-position:-935px -1380px;width:60px;height:60px}.hair_base_14_festive{background-image:url(spritesmith-main-1.png);background-position:-1001px -1365px;width:90px;height:90px}.customize-option.hair_base_14_festive{background-image:url(spritesmith-main-1.png);background-position:-1026px -1380px;width:60px;height:60px}.hair_base_14_frost{background-image:url(spritesmith-main-1.png);background-position:-1092px -1365px;width:90px;height:90px}.customize-option.hair_base_14_frost{background-image:url(spritesmith-main-1.png);background-position:-1117px -1380px;width:60px;height:60px}.hair_base_14_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-1183px -1365px;width:90px;height:90px}.customize-option.hair_base_14_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-1208px -1380px;width:60px;height:60px}.hair_base_14_green{background-image:url(spritesmith-main-1.png);background-position:-1274px -1365px;width:90px;height:90px}.customize-option.hair_base_14_green{background-image:url(spritesmith-main-1.png);background-position:-1299px -1380px;width:60px;height:60px}.hair_base_14_halloween{background-image:url(spritesmith-main-1.png);background-position:-1365px -1365px;width:90px;height:90px}.customize-option.hair_base_14_halloween{background-image:url(spritesmith-main-1.png);background-position:-1390px -1380px;width:60px;height:60px}.hair_base_14_holly{background-image:url(spritesmith-main-1.png);background-position:-1456px 0;width:90px;height:90px}.customize-option.hair_base_14_holly{background-image:url(spritesmith-main-1.png);background-position:-1481px -15px;width:60px;height:60px}.hair_base_14_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-1456px -91px;width:90px;height:90px}.customize-option.hair_base_14_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-1481px -106px;width:60px;height:60px}.hair_base_14_midnight{background-image:url(spritesmith-main-1.png);background-position:-1456px -182px;width:90px;height:90px}.customize-option.hair_base_14_midnight{background-image:url(spritesmith-main-1.png);background-position:-1481px -197px;width:60px;height:60px}.hair_base_14_pblue{background-image:url(spritesmith-main-1.png);background-position:-1456px -273px;width:90px;height:90px}.customize-option.hair_base_14_pblue{background-image:url(spritesmith-main-1.png);background-position:-1481px -288px;width:60px;height:60px}.hair_base_14_pblue2{background-image:url(spritesmith-main-1.png);background-position:-1456px -364px;width:90px;height:90px}.customize-option.hair_base_14_pblue2{background-image:url(spritesmith-main-1.png);background-position:-1481px -379px;width:60px;height:60px}.hair_base_14_peppermint{background-image:url(spritesmith-main-1.png);background-position:-1456px -455px;width:90px;height:90px}.customize-option.hair_base_14_peppermint{background-image:url(spritesmith-main-1.png);background-position:-1481px -470px;width:60px;height:60px}.hair_base_14_pgreen{background-image:url(spritesmith-main-1.png);background-position:-1456px -546px;width:90px;height:90px}.customize-option.hair_base_14_pgreen{background-image:url(spritesmith-main-1.png);background-position:-1481px -561px;width:60px;height:60px}.hair_base_14_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-1456px -637px;width:90px;height:90px}.customize-option.hair_base_14_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-1481px -652px;width:60px;height:60px}.hair_base_14_porange{background-image:url(spritesmith-main-1.png);background-position:-1456px -728px;width:90px;height:90px}.customize-option.hair_base_14_porange{background-image:url(spritesmith-main-1.png);background-position:-1481px -743px;width:60px;height:60px}.hair_base_14_porange2{background-image:url(spritesmith-main-1.png);background-position:-1456px -819px;width:90px;height:90px}.customize-option.hair_base_14_porange2{background-image:url(spritesmith-main-1.png);background-position:-1481px -834px;width:60px;height:60px}.hair_base_14_ppink{background-image:url(spritesmith-main-1.png);background-position:-1456px -910px;width:90px;height:90px}.customize-option.hair_base_14_ppink{background-image:url(spritesmith-main-1.png);background-position:-1481px -925px;width:60px;height:60px}.hair_base_14_ppink2{background-image:url(spritesmith-main-1.png);background-position:-1456px -1001px;width:90px;height:90px}.customize-option.hair_base_14_ppink2{background-image:url(spritesmith-main-1.png);background-position:-1481px -1016px;width:60px;height:60px}.hair_base_14_ppurple{background-image:url(spritesmith-main-1.png);background-position:-1456px -1092px;width:90px;height:90px}.customize-option.hair_base_14_ppurple{background-image:url(spritesmith-main-1.png);background-position:-1481px -1107px;width:60px;height:60px}.hair_base_14_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-1456px -1183px;width:90px;height:90px}.customize-option.hair_base_14_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-1481px -1198px;width:60px;height:60px}.hair_base_14_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-1456px -1274px;width:90px;height:90px}.customize-option.hair_base_14_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-1481px -1289px;width:60px;height:60px}.hair_base_14_purple{background-image:url(spritesmith-main-1.png);background-position:-1456px -1365px;width:90px;height:90px}.customize-option.hair_base_14_purple{background-image:url(spritesmith-main-1.png);background-position:-1481px -1380px;width:60px;height:60px}.hair_base_14_pyellow{background-image:url(spritesmith-main-1.png);background-position:0 -1456px;width:90px;height:90px}.customize-option.hair_base_14_pyellow{background-image:url(spritesmith-main-1.png);background-position:-25px -1471px;width:60px;height:60px}.hair_base_14_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-91px -1456px;width:90px;height:90px}.customize-option.hair_base_14_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-116px -1471px;width:60px;height:60px}.hair_base_14_rainbow{background-image:url(spritesmith-main-1.png);background-position:-182px -1456px;width:90px;height:90px}.customize-option.hair_base_14_rainbow{background-image:url(spritesmith-main-1.png);background-position:-207px -1471px;width:60px;height:60px}.hair_base_14_red{background-image:url(spritesmith-main-1.png);background-position:-273px -1456px;width:90px;height:90px}.customize-option.hair_base_14_red{background-image:url(spritesmith-main-1.png);background-position:-298px -1471px;width:60px;height:60px}.hair_base_14_snowy{background-image:url(spritesmith-main-1.png);background-position:-364px -1456px;width:90px;height:90px}.customize-option.hair_base_14_snowy{background-image:url(spritesmith-main-1.png);background-position:-389px -1471px;width:60px;height:60px}.hair_base_14_white{background-image:url(spritesmith-main-1.png);background-position:-455px -1456px;width:90px;height:90px}.customize-option.hair_base_14_white{background-image:url(spritesmith-main-1.png);background-position:-480px -1471px;width:60px;height:60px}.hair_base_14_winternight{background-image:url(spritesmith-main-1.png);background-position:-546px -1456px;width:90px;height:90px}.customize-option.hair_base_14_winternight{background-image:url(spritesmith-main-1.png);background-position:-571px -1471px;width:60px;height:60px}.hair_base_14_winterstar{background-image:url(spritesmith-main-1.png);background-position:-637px -1456px;width:90px;height:90px}.customize-option.hair_base_14_winterstar{background-image:url(spritesmith-main-1.png);background-position:-662px -1471px;width:60px;height:60px}.hair_base_14_yellow{background-image:url(spritesmith-main-1.png);background-position:-728px -1456px;width:90px;height:90px}.customize-option.hair_base_14_yellow{background-image:url(spritesmith-main-1.png);background-position:-753px -1471px;width:60px;height:60px}.hair_base_14_zombie{background-image:url(spritesmith-main-1.png);background-position:-819px -1456px;width:90px;height:90px}.customize-option.hair_base_14_zombie{background-image:url(spritesmith-main-1.png);background-position:-844px -1471px;width:60px;height:60px}.hair_base_1_TRUred{background-image:url(spritesmith-main-1.png);background-position:-910px -1456px;width:90px;height:90px}.customize-option.hair_base_1_TRUred{background-image:url(spritesmith-main-1.png);background-position:-935px -1471px;width:60px;height:60px}.hair_base_1_aurora{background-image:url(spritesmith-main-1.png);background-position:-1001px -1456px;width:90px;height:90px}.customize-option.hair_base_1_aurora{background-image:url(spritesmith-main-1.png);background-position:-1026px -1471px;width:60px;height:60px}.hair_base_1_black{background-image:url(spritesmith-main-1.png);background-position:-1092px -1456px;width:90px;height:90px}.customize-option.hair_base_1_black{background-image:url(spritesmith-main-1.png);background-position:-1117px -1471px;width:60px;height:60px}.hair_base_1_blond{background-image:url(spritesmith-main-1.png);background-position:-1183px -1456px;width:90px;height:90px}.customize-option.hair_base_1_blond{background-image:url(spritesmith-main-1.png);background-position:-1208px -1471px;width:60px;height:60px}.hair_base_1_blue{background-image:url(spritesmith-main-1.png);background-position:-1274px -1456px;width:90px;height:90px}.customize-option.hair_base_1_blue{background-image:url(spritesmith-main-1.png);background-position:-1299px -1471px;width:60px;height:60px}.hair_base_1_brown{background-image:url(spritesmith-main-1.png);background-position:-1365px -1456px;width:90px;height:90px}.customize-option.hair_base_1_brown{background-image:url(spritesmith-main-1.png);background-position:-1390px -1471px;width:60px;height:60px}.hair_base_1_candycane{background-image:url(spritesmith-main-1.png);background-position:-1456px -1456px;width:90px;height:90px}.customize-option.hair_base_1_candycane{background-image:url(spritesmith-main-1.png);background-position:-1481px -1471px;width:60px;height:60px}.hair_base_1_candycorn{background-image:url(spritesmith-main-1.png);background-position:-1547px 0;width:90px;height:90px}.customize-option.hair_base_1_candycorn{background-image:url(spritesmith-main-1.png);background-position:-1572px -15px;width:60px;height:60px}.hair_base_1_festive{background-image:url(spritesmith-main-1.png);background-position:-1547px -91px;width:90px;height:90px}.customize-option.hair_base_1_festive{background-image:url(spritesmith-main-1.png);background-position:-1572px -106px;width:60px;height:60px}.hair_base_1_frost{background-image:url(spritesmith-main-1.png);background-position:-1547px -182px;width:90px;height:90px}.customize-option.hair_base_1_frost{background-image:url(spritesmith-main-1.png);background-position:-1572px -197px;width:60px;height:60px}.hair_base_1_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-1547px -273px;width:90px;height:90px}.customize-option.hair_base_1_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-1572px -288px;width:60px;height:60px}.hair_base_1_green{background-image:url(spritesmith-main-1.png);background-position:-1547px -364px;width:90px;height:90px}.customize-option.hair_base_1_green{background-image:url(spritesmith-main-1.png);background-position:-1572px -379px;width:60px;height:60px}.hair_base_1_halloween{background-image:url(spritesmith-main-1.png);background-position:-1547px -455px;width:90px;height:90px}.customize-option.hair_base_1_halloween{background-image:url(spritesmith-main-1.png);background-position:-1572px -470px;width:60px;height:60px}.hair_base_1_holly{background-image:url(spritesmith-main-1.png);background-position:-1547px -546px;width:90px;height:90px}.customize-option.hair_base_1_holly{background-image:url(spritesmith-main-1.png);background-position:-1572px -561px;width:60px;height:60px}.hair_base_1_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-1547px -637px;width:90px;height:90px}.customize-option.hair_base_1_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-1572px -652px;width:60px;height:60px}.hair_base_1_midnight{background-image:url(spritesmith-main-1.png);background-position:-1547px -728px;width:90px;height:90px}.customize-option.hair_base_1_midnight{background-image:url(spritesmith-main-1.png);background-position:-1572px -743px;width:60px;height:60px}.hair_base_1_pblue{background-image:url(spritesmith-main-1.png);background-position:-1547px -819px;width:90px;height:90px}.customize-option.hair_base_1_pblue{background-image:url(spritesmith-main-1.png);background-position:-1572px -834px;width:60px;height:60px}.hair_base_1_pblue2{background-image:url(spritesmith-main-1.png);background-position:-1547px -910px;width:90px;height:90px}.customize-option.hair_base_1_pblue2{background-image:url(spritesmith-main-1.png);background-position:-1572px -925px;width:60px;height:60px}.hair_base_1_peppermint{background-image:url(spritesmith-main-1.png);background-position:-1547px -1001px;width:90px;height:90px}.customize-option.hair_base_1_peppermint{background-image:url(spritesmith-main-1.png);background-position:-1572px -1016px;width:60px;height:60px}.hair_base_1_pgreen{background-image:url(spritesmith-main-1.png);background-position:-1547px -1092px;width:90px;height:90px}.customize-option.hair_base_1_pgreen{background-image:url(spritesmith-main-1.png);background-position:-1572px -1107px;width:60px;height:60px}.hair_base_1_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-1547px -1183px;width:90px;height:90px}.customize-option.hair_base_1_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-1572px -1198px;width:60px;height:60px}.hair_base_1_porange{background-image:url(spritesmith-main-1.png);background-position:-1547px -1274px;width:90px;height:90px}.customize-option.hair_base_1_porange{background-image:url(spritesmith-main-1.png);background-position:-1572px -1289px;width:60px;height:60px}.hair_base_1_porange2{background-image:url(spritesmith-main-1.png);background-position:-1547px -1365px;width:90px;height:90px}.customize-option.hair_base_1_porange2{background-image:url(spritesmith-main-1.png);background-position:-1572px -1380px;width:60px;height:60px}.hair_base_1_ppink{background-image:url(spritesmith-main-1.png);background-position:-1547px -1456px;width:90px;height:90px}.customize-option.hair_base_1_ppink{background-image:url(spritesmith-main-1.png);background-position:-1572px -1471px;width:60px;height:60px}.hair_base_1_ppink2{background-image:url(spritesmith-main-1.png);background-position:0 -1547px;width:90px;height:90px}.customize-option.hair_base_1_ppink2{background-image:url(spritesmith-main-1.png);background-position:-25px -1562px;width:60px;height:60px}.hair_base_1_ppurple{background-image:url(spritesmith-main-1.png);background-position:-91px -1547px;width:90px;height:90px}.customize-option.hair_base_1_ppurple{background-image:url(spritesmith-main-1.png);background-position:-116px -1562px;width:60px;height:60px}.hair_base_1_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-182px -1547px;width:90px;height:90px}.customize-option.hair_base_1_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-207px -1562px;width:60px;height:60px}.hair_base_1_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-273px -1547px;width:90px;height:90px}.customize-option.hair_base_1_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-298px -1562px;width:60px;height:60px}.hair_base_1_purple{background-image:url(spritesmith-main-1.png);background-position:-364px -1547px;width:90px;height:90px}.customize-option.hair_base_1_purple{background-image:url(spritesmith-main-1.png);background-position:-389px -1562px;width:60px;height:60px}.hair_base_1_pyellow{background-image:url(spritesmith-main-1.png);background-position:-455px -1547px;width:90px;height:90px}.customize-option.hair_base_1_pyellow{background-image:url(spritesmith-main-1.png);background-position:-480px -1562px;width:60px;height:60px}.hair_base_1_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-546px -1547px;width:90px;height:90px}.customize-option.hair_base_1_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-571px -1562px;width:60px;height:60px}.hair_base_1_rainbow{background-image:url(spritesmith-main-1.png);background-position:-637px -1547px;width:90px;height:90px}.customize-option.hair_base_1_rainbow{background-image:url(spritesmith-main-1.png);background-position:-662px -1562px;width:60px;height:60px}.hair_base_1_red{background-image:url(spritesmith-main-1.png);background-position:-728px -1547px;width:90px;height:90px}.customize-option.hair_base_1_red{background-image:url(spritesmith-main-1.png);background-position:-753px -1562px;width:60px;height:60px}.hair_base_1_snowy{background-image:url(spritesmith-main-1.png);background-position:-819px -1547px;width:90px;height:90px}.customize-option.hair_base_1_snowy{background-image:url(spritesmith-main-1.png);background-position:-844px -1562px;width:60px;height:60px}.hair_base_1_white{background-image:url(spritesmith-main-1.png);background-position:-910px -1547px;width:90px;height:90px}.customize-option.hair_base_1_white{background-image:url(spritesmith-main-1.png);background-position:-935px -1562px;width:60px;height:60px}.hair_base_1_winternight{background-image:url(spritesmith-main-1.png);background-position:-1001px -1547px;width:90px;height:90px}.customize-option.hair_base_1_winternight{background-image:url(spritesmith-main-1.png);background-position:-1026px -1562px;width:60px;height:60px}.hair_base_1_winterstar{background-image:url(spritesmith-main-1.png);background-position:-1092px -1547px;width:90px;height:90px}.customize-option.hair_base_1_winterstar{background-image:url(spritesmith-main-1.png);background-position:-1117px -1562px;width:60px;height:60px}.hair_base_1_yellow{background-image:url(spritesmith-main-1.png);background-position:-1183px -1547px;width:90px;height:90px}.customize-option.hair_base_1_yellow{background-image:url(spritesmith-main-1.png);background-position:-1208px -1562px;width:60px;height:60px}.hair_base_1_zombie{background-image:url(spritesmith-main-1.png);background-position:-1274px -1547px;width:90px;height:90px}.customize-option.hair_base_1_zombie{background-image:url(spritesmith-main-1.png);background-position:-1299px -1562px;width:60px;height:60px}.hair_base_2_TRUred{background-image:url(spritesmith-main-1.png);background-position:-1365px -1547px;width:90px;height:90px}.customize-option.hair_base_2_TRUred{background-image:url(spritesmith-main-1.png);background-position:-1390px -1562px;width:60px;height:60px}.hair_base_2_aurora{background-image:url(spritesmith-main-1.png);background-position:-1456px -1547px;width:90px;height:90px}.customize-option.hair_base_2_aurora{background-image:url(spritesmith-main-1.png);background-position:-1481px -1562px;width:60px;height:60px}.hair_base_2_black{background-image:url(spritesmith-main-1.png);background-position:-1547px -1547px;width:90px;height:90px}.customize-option.hair_base_2_black{background-image:url(spritesmith-main-1.png);background-position:-1572px -1562px;width:60px;height:60px}.hair_base_2_blond{background-image:url(spritesmith-main-1.png);background-position:-1638px 0;width:90px;height:90px}.customize-option.hair_base_2_blond{background-image:url(spritesmith-main-1.png);background-position:-1663px -15px;width:60px;height:60px}.hair_base_2_blue{background-image:url(spritesmith-main-1.png);background-position:-1638px -91px;width:90px;height:90px}.customize-option.hair_base_2_blue{background-image:url(spritesmith-main-1.png);background-position:-1663px -106px;width:60px;height:60px}.hair_base_2_brown{background-image:url(spritesmith-main-1.png);background-position:-1638px -182px;width:90px;height:90px}.customize-option.hair_base_2_brown{background-image:url(spritesmith-main-1.png);background-position:-1663px -197px;width:60px;height:60px}.hair_base_2_candycane{background-image:url(spritesmith-main-1.png);background-position:-1638px -273px;width:90px;height:90px}.customize-option.hair_base_2_candycane{background-image:url(spritesmith-main-1.png);background-position:-1663px -288px;width:60px;height:60px}.hair_base_2_candycorn{background-image:url(spritesmith-main-1.png);background-position:-1638px -364px;width:90px;height:90px}.customize-option.hair_base_2_candycorn{background-image:url(spritesmith-main-1.png);background-position:-1663px -379px;width:60px;height:60px}.hair_base_2_festive{background-image:url(spritesmith-main-2.png);background-position:-91px 0;width:90px;height:90px}.customize-option.hair_base_2_festive{background-image:url(spritesmith-main-2.png);background-position:-116px -15px;width:60px;height:60px}.hair_base_2_frost{background-image:url(spritesmith-main-2.png);background-position:-728px -1092px;width:90px;height:90px}.customize-option.hair_base_2_frost{background-image:url(spritesmith-main-2.png);background-position:-753px -1107px;width:60px;height:60px}.hair_base_2_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:0 -91px;width:90px;height:90px}.customize-option.hair_base_2_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-25px -106px;width:60px;height:60px}.hair_base_2_green{background-image:url(spritesmith-main-2.png);background-position:-91px -91px;width:90px;height:90px}.customize-option.hair_base_2_green{background-image:url(spritesmith-main-2.png);background-position:-116px -106px;width:60px;height:60px}.hair_base_2_halloween{background-image:url(spritesmith-main-2.png);background-position:-182px 0;width:90px;height:90px}.customize-option.hair_base_2_halloween{background-image:url(spritesmith-main-2.png);background-position:-207px -15px;width:60px;height:60px}.hair_base_2_holly{background-image:url(spritesmith-main-2.png);background-position:-182px -91px;width:90px;height:90px}.customize-option.hair_base_2_holly{background-image:url(spritesmith-main-2.png);background-position:-207px -106px;width:60px;height:60px}.hair_base_2_hollygreen{background-image:url(spritesmith-main-2.png);background-position:0 -182px;width:90px;height:90px}.customize-option.hair_base_2_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-25px -197px;width:60px;height:60px}.hair_base_2_midnight{background-image:url(spritesmith-main-2.png);background-position:-91px -182px;width:90px;height:90px}.customize-option.hair_base_2_midnight{background-image:url(spritesmith-main-2.png);background-position:-116px -197px;width:60px;height:60px}.hair_base_2_pblue{background-image:url(spritesmith-main-2.png);background-position:-182px -182px;width:90px;height:90px}.customize-option.hair_base_2_pblue{background-image:url(spritesmith-main-2.png);background-position:-207px -197px;width:60px;height:60px}.hair_base_2_pblue2{background-image:url(spritesmith-main-2.png);background-position:-273px 0;width:90px;height:90px}.customize-option.hair_base_2_pblue2{background-image:url(spritesmith-main-2.png);background-position:-298px -15px;width:60px;height:60px}.hair_base_2_peppermint{background-image:url(spritesmith-main-2.png);background-position:-273px -91px;width:90px;height:90px}.customize-option.hair_base_2_peppermint{background-image:url(spritesmith-main-2.png);background-position:-298px -106px;width:60px;height:60px}.hair_base_2_pgreen{background-image:url(spritesmith-main-2.png);background-position:-273px -182px;width:90px;height:90px}.customize-option.hair_base_2_pgreen{background-image:url(spritesmith-main-2.png);background-position:-298px -197px;width:60px;height:60px}.hair_base_2_pgreen2{background-image:url(spritesmith-main-2.png);background-position:0 -273px;width:90px;height:90px}.customize-option.hair_base_2_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-25px -288px;width:60px;height:60px}.hair_base_2_porange{background-image:url(spritesmith-main-2.png);background-position:-91px -273px;width:90px;height:90px}.customize-option.hair_base_2_porange{background-image:url(spritesmith-main-2.png);background-position:-116px -288px;width:60px;height:60px}.hair_base_2_porange2{background-image:url(spritesmith-main-2.png);background-position:-182px -273px;width:90px;height:90px}.customize-option.hair_base_2_porange2{background-image:url(spritesmith-main-2.png);background-position:-207px -288px;width:60px;height:60px}.hair_base_2_ppink{background-image:url(spritesmith-main-2.png);background-position:-273px -273px;width:90px;height:90px}.customize-option.hair_base_2_ppink{background-image:url(spritesmith-main-2.png);background-position:-298px -288px;width:60px;height:60px}.hair_base_2_ppink2{background-image:url(spritesmith-main-2.png);background-position:-364px 0;width:90px;height:90px}.customize-option.hair_base_2_ppink2{background-image:url(spritesmith-main-2.png);background-position:-389px -15px;width:60px;height:60px}.hair_base_2_ppurple{background-image:url(spritesmith-main-2.png);background-position:-364px -91px;width:90px;height:90px}.customize-option.hair_base_2_ppurple{background-image:url(spritesmith-main-2.png);background-position:-389px -106px;width:60px;height:60px}.hair_base_2_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-364px -182px;width:90px;height:90px}.customize-option.hair_base_2_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-389px -197px;width:60px;height:60px}.hair_base_2_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-364px -273px;width:90px;height:90px}.customize-option.hair_base_2_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-389px -288px;width:60px;height:60px}.hair_base_2_purple{background-image:url(spritesmith-main-2.png);background-position:0 -364px;width:90px;height:90px}.customize-option.hair_base_2_purple{background-image:url(spritesmith-main-2.png);background-position:-25px -379px;width:60px;height:60px}.hair_base_2_pyellow{background-image:url(spritesmith-main-2.png);background-position:-91px -364px;width:90px;height:90px}.customize-option.hair_base_2_pyellow{background-image:url(spritesmith-main-2.png);background-position:-116px -379px;width:60px;height:60px}.hair_base_2_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-182px -364px;width:90px;height:90px}.customize-option.hair_base_2_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-207px -379px;width:60px;height:60px}.hair_base_2_rainbow{background-image:url(spritesmith-main-2.png);background-position:-273px -364px;width:90px;height:90px}.customize-option.hair_base_2_rainbow{background-image:url(spritesmith-main-2.png);background-position:-298px -379px;width:60px;height:60px}.hair_base_2_red{background-image:url(spritesmith-main-2.png);background-position:-364px -364px;width:90px;height:90px}.customize-option.hair_base_2_red{background-image:url(spritesmith-main-2.png);background-position:-389px -379px;width:60px;height:60px}.hair_base_2_snowy{background-image:url(spritesmith-main-2.png);background-position:-455px 0;width:90px;height:90px}.customize-option.hair_base_2_snowy{background-image:url(spritesmith-main-2.png);background-position:-480px -15px;width:60px;height:60px}.hair_base_2_white{background-image:url(spritesmith-main-2.png);background-position:-455px -91px;width:90px;height:90px}.customize-option.hair_base_2_white{background-image:url(spritesmith-main-2.png);background-position:-480px -106px;width:60px;height:60px}.hair_base_2_winternight{background-image:url(spritesmith-main-2.png);background-position:-455px -182px;width:90px;height:90px}.customize-option.hair_base_2_winternight{background-image:url(spritesmith-main-2.png);background-position:-480px -197px;width:60px;height:60px}.hair_base_2_winterstar{background-image:url(spritesmith-main-2.png);background-position:-455px -273px;width:90px;height:90px}.customize-option.hair_base_2_winterstar{background-image:url(spritesmith-main-2.png);background-position:-480px -288px;width:60px;height:60px}.hair_base_2_yellow{background-image:url(spritesmith-main-2.png);background-position:-455px -364px;width:90px;height:90px}.customize-option.hair_base_2_yellow{background-image:url(spritesmith-main-2.png);background-position:-480px -379px;width:60px;height:60px}.hair_base_2_zombie{background-image:url(spritesmith-main-2.png);background-position:0 -455px;width:90px;height:90px}.customize-option.hair_base_2_zombie{background-image:url(spritesmith-main-2.png);background-position:-25px -470px;width:60px;height:60px}.hair_base_3_TRUred{background-image:url(spritesmith-main-2.png);background-position:-91px -455px;width:90px;height:90px}.customize-option.hair_base_3_TRUred{background-image:url(spritesmith-main-2.png);background-position:-116px -470px;width:60px;height:60px}.hair_base_3_aurora{background-image:url(spritesmith-main-2.png);background-position:-182px -455px;width:90px;height:90px}.customize-option.hair_base_3_aurora{background-image:url(spritesmith-main-2.png);background-position:-207px -470px;width:60px;height:60px}.hair_base_3_black{background-image:url(spritesmith-main-2.png);background-position:-273px -455px;width:90px;height:90px}.customize-option.hair_base_3_black{background-image:url(spritesmith-main-2.png);background-position:-298px -470px;width:60px;height:60px}.hair_base_3_blond{background-image:url(spritesmith-main-2.png);background-position:-364px -455px;width:90px;height:90px}.customize-option.hair_base_3_blond{background-image:url(spritesmith-main-2.png);background-position:-389px -470px;width:60px;height:60px}.hair_base_3_blue{background-image:url(spritesmith-main-2.png);background-position:-455px -455px;width:90px;height:90px}.customize-option.hair_base_3_blue{background-image:url(spritesmith-main-2.png);background-position:-480px -470px;width:60px;height:60px}.hair_base_3_brown{background-image:url(spritesmith-main-2.png);background-position:-546px 0;width:90px;height:90px}.customize-option.hair_base_3_brown{background-image:url(spritesmith-main-2.png);background-position:-571px -15px;width:60px;height:60px}.hair_base_3_candycane{background-image:url(spritesmith-main-2.png);background-position:-546px -91px;width:90px;height:90px}.customize-option.hair_base_3_candycane{background-image:url(spritesmith-main-2.png);background-position:-571px -106px;width:60px;height:60px}.hair_base_3_candycorn{background-image:url(spritesmith-main-2.png);background-position:-546px -182px;width:90px;height:90px}.customize-option.hair_base_3_candycorn{background-image:url(spritesmith-main-2.png);background-position:-571px -197px;width:60px;height:60px}.hair_base_3_festive{background-image:url(spritesmith-main-2.png);background-position:-546px -273px;width:90px;height:90px}.customize-option.hair_base_3_festive{background-image:url(spritesmith-main-2.png);background-position:-571px -288px;width:60px;height:60px}.hair_base_3_frost{background-image:url(spritesmith-main-2.png);background-position:-546px -364px;width:90px;height:90px}.customize-option.hair_base_3_frost{background-image:url(spritesmith-main-2.png);background-position:-571px -379px;width:60px;height:60px}.hair_base_3_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-546px -455px;width:90px;height:90px}.customize-option.hair_base_3_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-571px -470px;width:60px;height:60px}.hair_base_3_green{background-image:url(spritesmith-main-2.png);background-position:0 -546px;width:90px;height:90px}.customize-option.hair_base_3_green{background-image:url(spritesmith-main-2.png);background-position:-25px -561px;width:60px;height:60px}.hair_base_3_halloween{background-image:url(spritesmith-main-2.png);background-position:-91px -546px;width:90px;height:90px}.customize-option.hair_base_3_halloween{background-image:url(spritesmith-main-2.png);background-position:-116px -561px;width:60px;height:60px}.hair_base_3_holly{background-image:url(spritesmith-main-2.png);background-position:-182px -546px;width:90px;height:90px}.customize-option.hair_base_3_holly{background-image:url(spritesmith-main-2.png);background-position:-207px -561px;width:60px;height:60px}.hair_base_3_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-273px -546px;width:90px;height:90px}.customize-option.hair_base_3_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-298px -561px;width:60px;height:60px}.hair_base_3_midnight{background-image:url(spritesmith-main-2.png);background-position:-364px -546px;width:90px;height:90px}.customize-option.hair_base_3_midnight{background-image:url(spritesmith-main-2.png);background-position:-389px -561px;width:60px;height:60px}.hair_base_3_pblue{background-image:url(spritesmith-main-2.png);background-position:-455px -546px;width:90px;height:90px}.customize-option.hair_base_3_pblue{background-image:url(spritesmith-main-2.png);background-position:-480px -561px;width:60px;height:60px}.hair_base_3_pblue2{background-image:url(spritesmith-main-2.png);background-position:-546px -546px;width:90px;height:90px}.customize-option.hair_base_3_pblue2{background-image:url(spritesmith-main-2.png);background-position:-571px -561px;width:60px;height:60px}.hair_base_3_peppermint{background-image:url(spritesmith-main-2.png);background-position:-637px 0;width:90px;height:90px}.customize-option.hair_base_3_peppermint{background-image:url(spritesmith-main-2.png);background-position:-662px -15px;width:60px;height:60px}.hair_base_3_pgreen{background-image:url(spritesmith-main-2.png);background-position:-637px -91px;width:90px;height:90px}.customize-option.hair_base_3_pgreen{background-image:url(spritesmith-main-2.png);background-position:-662px -106px;width:60px;height:60px}.hair_base_3_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-637px -182px;width:90px;height:90px}.customize-option.hair_base_3_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-662px -197px;width:60px;height:60px}.hair_base_3_porange{background-image:url(spritesmith-main-2.png);background-position:-637px -273px;width:90px;height:90px}.customize-option.hair_base_3_porange{background-image:url(spritesmith-main-2.png);background-position:-662px -288px;width:60px;height:60px}.hair_base_3_porange2{background-image:url(spritesmith-main-2.png);background-position:-637px -364px;width:90px;height:90px}.customize-option.hair_base_3_porange2{background-image:url(spritesmith-main-2.png);background-position:-662px -379px;width:60px;height:60px}.hair_base_3_ppink{background-image:url(spritesmith-main-2.png);background-position:-637px -455px;width:90px;height:90px}.customize-option.hair_base_3_ppink{background-image:url(spritesmith-main-2.png);background-position:-662px -470px;width:60px;height:60px}.hair_base_3_ppink2{background-image:url(spritesmith-main-2.png);background-position:-637px -546px;width:90px;height:90px}.customize-option.hair_base_3_ppink2{background-image:url(spritesmith-main-2.png);background-position:-662px -561px;width:60px;height:60px}.hair_base_3_ppurple{background-image:url(spritesmith-main-2.png);background-position:0 -637px;width:90px;height:90px}.customize-option.hair_base_3_ppurple{background-image:url(spritesmith-main-2.png);background-position:-25px -652px;width:60px;height:60px}.hair_base_3_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-91px -637px;width:90px;height:90px}.customize-option.hair_base_3_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-116px -652px;width:60px;height:60px}.hair_base_3_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-182px -637px;width:90px;height:90px}.customize-option.hair_base_3_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-207px -652px;width:60px;height:60px}.hair_base_3_purple{background-image:url(spritesmith-main-2.png);background-position:-273px -637px;width:90px;height:90px}.customize-option.hair_base_3_purple{background-image:url(spritesmith-main-2.png);background-position:-298px -652px;width:60px;height:60px}.hair_base_3_pyellow{background-image:url(spritesmith-main-2.png);background-position:-364px -637px;width:90px;height:90px}.customize-option.hair_base_3_pyellow{background-image:url(spritesmith-main-2.png);background-position:-389px -652px;width:60px;height:60px}.hair_base_3_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-455px -637px;width:90px;height:90px}.customize-option.hair_base_3_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-480px -652px;width:60px;height:60px}.hair_base_3_rainbow{background-image:url(spritesmith-main-2.png);background-position:-546px -637px;width:90px;height:90px}.customize-option.hair_base_3_rainbow{background-image:url(spritesmith-main-2.png);background-position:-571px -652px;width:60px;height:60px}.hair_base_3_red{background-image:url(spritesmith-main-2.png);background-position:-637px -637px;width:90px;height:90px}.customize-option.hair_base_3_red{background-image:url(spritesmith-main-2.png);background-position:-662px -652px;width:60px;height:60px}.hair_base_3_snowy{background-image:url(spritesmith-main-2.png);background-position:-728px 0;width:90px;height:90px}.customize-option.hair_base_3_snowy{background-image:url(spritesmith-main-2.png);background-position:-753px -15px;width:60px;height:60px}.hair_base_3_white{background-image:url(spritesmith-main-2.png);background-position:-728px -91px;width:90px;height:90px}.customize-option.hair_base_3_white{background-image:url(spritesmith-main-2.png);background-position:-753px -106px;width:60px;height:60px}.hair_base_3_winternight{background-image:url(spritesmith-main-2.png);background-position:-728px -182px;width:90px;height:90px}.customize-option.hair_base_3_winternight{background-image:url(spritesmith-main-2.png);background-position:-753px -197px;width:60px;height:60px}.hair_base_3_winterstar{background-image:url(spritesmith-main-2.png);background-position:-728px -273px;width:90px;height:90px}.customize-option.hair_base_3_winterstar{background-image:url(spritesmith-main-2.png);background-position:-753px -288px;width:60px;height:60px}.hair_base_3_yellow{background-image:url(spritesmith-main-2.png);background-position:-728px -364px;width:90px;height:90px}.customize-option.hair_base_3_yellow{background-image:url(spritesmith-main-2.png);background-position:-753px -379px;width:60px;height:60px}.hair_base_3_zombie{background-image:url(spritesmith-main-2.png);background-position:-728px -455px;width:90px;height:90px}.customize-option.hair_base_3_zombie{background-image:url(spritesmith-main-2.png);background-position:-753px -470px;width:60px;height:60px}.hair_base_4_TRUred{background-image:url(spritesmith-main-2.png);background-position:-728px -546px;width:90px;height:90px}.customize-option.hair_base_4_TRUred{background-image:url(spritesmith-main-2.png);background-position:-753px -561px;width:60px;height:60px}.hair_base_4_aurora{background-image:url(spritesmith-main-2.png);background-position:-728px -637px;width:90px;height:90px}.customize-option.hair_base_4_aurora{background-image:url(spritesmith-main-2.png);background-position:-753px -652px;width:60px;height:60px}.hair_base_4_black{background-image:url(spritesmith-main-2.png);background-position:0 -728px;width:90px;height:90px}.customize-option.hair_base_4_black{background-image:url(spritesmith-main-2.png);background-position:-25px -743px;width:60px;height:60px}.hair_base_4_blond{background-image:url(spritesmith-main-2.png);background-position:-91px -728px;width:90px;height:90px}.customize-option.hair_base_4_blond{background-image:url(spritesmith-main-2.png);background-position:-116px -743px;width:60px;height:60px}.hair_base_4_blue{background-image:url(spritesmith-main-2.png);background-position:-182px -728px;width:90px;height:90px}.customize-option.hair_base_4_blue{background-image:url(spritesmith-main-2.png);background-position:-207px -743px;width:60px;height:60px}.hair_base_4_brown{background-image:url(spritesmith-main-2.png);background-position:-273px -728px;width:90px;height:90px}.customize-option.hair_base_4_brown{background-image:url(spritesmith-main-2.png);background-position:-298px -743px;width:60px;height:60px}.hair_base_4_candycane{background-image:url(spritesmith-main-2.png);background-position:-364px -728px;width:90px;height:90px}.customize-option.hair_base_4_candycane{background-image:url(spritesmith-main-2.png);background-position:-389px -743px;width:60px;height:60px}.hair_base_4_candycorn{background-image:url(spritesmith-main-2.png);background-position:-455px -728px;width:90px;height:90px}.customize-option.hair_base_4_candycorn{background-image:url(spritesmith-main-2.png);background-position:-480px -743px;width:60px;height:60px}.hair_base_4_festive{background-image:url(spritesmith-main-2.png);background-position:-546px -728px;width:90px;height:90px}.customize-option.hair_base_4_festive{background-image:url(spritesmith-main-2.png);background-position:-571px -743px;width:60px;height:60px}.hair_base_4_frost{background-image:url(spritesmith-main-2.png);background-position:-637px -728px;width:90px;height:90px}.customize-option.hair_base_4_frost{background-image:url(spritesmith-main-2.png);background-position:-662px -743px;width:60px;height:60px}.hair_base_4_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-728px -728px;width:90px;height:90px}.customize-option.hair_base_4_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-753px -743px;width:60px;height:60px}.hair_base_4_green{background-image:url(spritesmith-main-2.png);background-position:-819px 0;width:90px;height:90px}.customize-option.hair_base_4_green{background-image:url(spritesmith-main-2.png);background-position:-844px -15px;width:60px;height:60px}.hair_base_4_halloween{background-image:url(spritesmith-main-2.png);background-position:-819px -91px;width:90px;height:90px}.customize-option.hair_base_4_halloween{background-image:url(spritesmith-main-2.png);background-position:-844px -106px;width:60px;height:60px}.hair_base_4_holly{background-image:url(spritesmith-main-2.png);background-position:-819px -182px;width:90px;height:90px}.customize-option.hair_base_4_holly{background-image:url(spritesmith-main-2.png);background-position:-844px -197px;width:60px;height:60px}.hair_base_4_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-819px -273px;width:90px;height:90px}.customize-option.hair_base_4_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-844px -288px;width:60px;height:60px}.hair_base_4_midnight{background-image:url(spritesmith-main-2.png);background-position:-819px -364px;width:90px;height:90px}.customize-option.hair_base_4_midnight{background-image:url(spritesmith-main-2.png);background-position:-844px -379px;width:60px;height:60px}.hair_base_4_pblue{background-image:url(spritesmith-main-2.png);background-position:-819px -455px;width:90px;height:90px}.customize-option.hair_base_4_pblue{background-image:url(spritesmith-main-2.png);background-position:-844px -470px;width:60px;height:60px}.hair_base_4_pblue2{background-image:url(spritesmith-main-2.png);background-position:-819px -546px;width:90px;height:90px}.customize-option.hair_base_4_pblue2{background-image:url(spritesmith-main-2.png);background-position:-844px -561px;width:60px;height:60px}.hair_base_4_peppermint{background-image:url(spritesmith-main-2.png);background-position:-819px -637px;width:90px;height:90px}.customize-option.hair_base_4_peppermint{background-image:url(spritesmith-main-2.png);background-position:-844px -652px;width:60px;height:60px}.hair_base_4_pgreen{background-image:url(spritesmith-main-2.png);background-position:-819px -728px;width:90px;height:90px}.customize-option.hair_base_4_pgreen{background-image:url(spritesmith-main-2.png);background-position:-844px -743px;width:60px;height:60px}.hair_base_4_pgreen2{background-image:url(spritesmith-main-2.png);background-position:0 -819px;width:90px;height:90px}.customize-option.hair_base_4_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-25px -834px;width:60px;height:60px}.hair_base_4_porange{background-image:url(spritesmith-main-2.png);background-position:-91px -819px;width:90px;height:90px}.customize-option.hair_base_4_porange{background-image:url(spritesmith-main-2.png);background-position:-116px -834px;width:60px;height:60px}.hair_base_4_porange2{background-image:url(spritesmith-main-2.png);background-position:-182px -819px;width:90px;height:90px}.customize-option.hair_base_4_porange2{background-image:url(spritesmith-main-2.png);background-position:-207px -834px;width:60px;height:60px}.hair_base_4_ppink{background-image:url(spritesmith-main-2.png);background-position:-273px -819px;width:90px;height:90px}.customize-option.hair_base_4_ppink{background-image:url(spritesmith-main-2.png);background-position:-298px -834px;width:60px;height:60px}.hair_base_4_ppink2{background-image:url(spritesmith-main-2.png);background-position:-364px -819px;width:90px;height:90px}.customize-option.hair_base_4_ppink2{background-image:url(spritesmith-main-2.png);background-position:-389px -834px;width:60px;height:60px}.hair_base_4_ppurple{background-image:url(spritesmith-main-2.png);background-position:-455px -819px;width:90px;height:90px}.customize-option.hair_base_4_ppurple{background-image:url(spritesmith-main-2.png);background-position:-480px -834px;width:60px;height:60px}.hair_base_4_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-546px -819px;width:90px;height:90px}.customize-option.hair_base_4_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-571px -834px;width:60px;height:60px}.hair_base_4_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-637px -819px;width:90px;height:90px}.customize-option.hair_base_4_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-662px -834px;width:60px;height:60px}.hair_base_4_purple{background-image:url(spritesmith-main-2.png);background-position:-728px -819px;width:90px;height:90px}.customize-option.hair_base_4_purple{background-image:url(spritesmith-main-2.png);background-position:-753px -834px;width:60px;height:60px}.hair_base_4_pyellow{background-image:url(spritesmith-main-2.png);background-position:-819px -819px;width:90px;height:90px}.customize-option.hair_base_4_pyellow{background-image:url(spritesmith-main-2.png);background-position:-844px -834px;width:60px;height:60px}.hair_base_4_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-910px 0;width:90px;height:90px}.customize-option.hair_base_4_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-935px -15px;width:60px;height:60px}.hair_base_4_rainbow{background-image:url(spritesmith-main-2.png);background-position:-910px -91px;width:90px;height:90px}.customize-option.hair_base_4_rainbow{background-image:url(spritesmith-main-2.png);background-position:-935px -106px;width:60px;height:60px}.hair_base_4_red{background-image:url(spritesmith-main-2.png);background-position:-910px -182px;width:90px;height:90px}.customize-option.hair_base_4_red{background-image:url(spritesmith-main-2.png);background-position:-935px -197px;width:60px;height:60px}.hair_base_4_snowy{background-image:url(spritesmith-main-2.png);background-position:-910px -273px;width:90px;height:90px}.customize-option.hair_base_4_snowy{background-image:url(spritesmith-main-2.png);background-position:-935px -288px;width:60px;height:60px}.hair_base_4_white{background-image:url(spritesmith-main-2.png);background-position:-910px -364px;width:90px;height:90px}.customize-option.hair_base_4_white{background-image:url(spritesmith-main-2.png);background-position:-935px -379px;width:60px;height:60px}.hair_base_4_winternight{background-image:url(spritesmith-main-2.png);background-position:-910px -455px;width:90px;height:90px}.customize-option.hair_base_4_winternight{background-image:url(spritesmith-main-2.png);background-position:-935px -470px;width:60px;height:60px}.hair_base_4_winterstar{background-image:url(spritesmith-main-2.png);background-position:-910px -546px;width:90px;height:90px}.customize-option.hair_base_4_winterstar{background-image:url(spritesmith-main-2.png);background-position:-935px -561px;width:60px;height:60px}.hair_base_4_yellow{background-image:url(spritesmith-main-2.png);background-position:-910px -637px;width:90px;height:90px}.customize-option.hair_base_4_yellow{background-image:url(spritesmith-main-2.png);background-position:-935px -652px;width:60px;height:60px}.hair_base_4_zombie{background-image:url(spritesmith-main-2.png);background-position:-910px -728px;width:90px;height:90px}.customize-option.hair_base_4_zombie{background-image:url(spritesmith-main-2.png);background-position:-935px -743px;width:60px;height:60px}.hair_base_5_TRUred{background-image:url(spritesmith-main-2.png);background-position:-910px -819px;width:90px;height:90px}.customize-option.hair_base_5_TRUred{background-image:url(spritesmith-main-2.png);background-position:-935px -834px;width:60px;height:60px}.hair_base_5_aurora{background-image:url(spritesmith-main-2.png);background-position:0 -910px;width:90px;height:90px}.customize-option.hair_base_5_aurora{background-image:url(spritesmith-main-2.png);background-position:-25px -925px;width:60px;height:60px}.hair_base_5_black{background-image:url(spritesmith-main-2.png);background-position:-91px -910px;width:90px;height:90px}.customize-option.hair_base_5_black{background-image:url(spritesmith-main-2.png);background-position:-116px -925px;width:60px;height:60px}.hair_base_5_blond{background-image:url(spritesmith-main-2.png);background-position:-182px -910px;width:90px;height:90px}.customize-option.hair_base_5_blond{background-image:url(spritesmith-main-2.png);background-position:-207px -925px;width:60px;height:60px}.hair_base_5_blue{background-image:url(spritesmith-main-2.png);background-position:-273px -910px;width:90px;height:90px}.customize-option.hair_base_5_blue{background-image:url(spritesmith-main-2.png);background-position:-298px -925px;width:60px;height:60px}.hair_base_5_brown{background-image:url(spritesmith-main-2.png);background-position:-364px -910px;width:90px;height:90px}.customize-option.hair_base_5_brown{background-image:url(spritesmith-main-2.png);background-position:-389px -925px;width:60px;height:60px}.hair_base_5_candycane{background-image:url(spritesmith-main-2.png);background-position:-455px -910px;width:90px;height:90px}.customize-option.hair_base_5_candycane{background-image:url(spritesmith-main-2.png);background-position:-480px -925px;width:60px;height:60px}.hair_base_5_candycorn{background-image:url(spritesmith-main-2.png);background-position:-546px -910px;width:90px;height:90px}.customize-option.hair_base_5_candycorn{background-image:url(spritesmith-main-2.png);background-position:-571px -925px;width:60px;height:60px}.hair_base_5_festive{background-image:url(spritesmith-main-2.png);background-position:-637px -910px;width:90px;height:90px}.customize-option.hair_base_5_festive{background-image:url(spritesmith-main-2.png);background-position:-662px -925px;width:60px;height:60px}.hair_base_5_frost{background-image:url(spritesmith-main-2.png);background-position:-728px -910px;width:90px;height:90px}.customize-option.hair_base_5_frost{background-image:url(spritesmith-main-2.png);background-position:-753px -925px;width:60px;height:60px}.hair_base_5_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-819px -910px;width:90px;height:90px}.customize-option.hair_base_5_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-844px -925px;width:60px;height:60px}.hair_base_5_green{background-image:url(spritesmith-main-2.png);background-position:-910px -910px;width:90px;height:90px}.customize-option.hair_base_5_green{background-image:url(spritesmith-main-2.png);background-position:-935px -925px;width:60px;height:60px}.hair_base_5_halloween{background-image:url(spritesmith-main-2.png);background-position:-1001px 0;width:90px;height:90px}.customize-option.hair_base_5_halloween{background-image:url(spritesmith-main-2.png);background-position:-1026px -15px;width:60px;height:60px}.hair_base_5_holly{background-image:url(spritesmith-main-2.png);background-position:-1001px -91px;width:90px;height:90px}.customize-option.hair_base_5_holly{background-image:url(spritesmith-main-2.png);background-position:-1026px -106px;width:60px;height:60px}.hair_base_5_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-1001px -182px;width:90px;height:90px}.customize-option.hair_base_5_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-1026px -197px;width:60px;height:60px}.hair_base_5_midnight{background-image:url(spritesmith-main-2.png);background-position:-1001px -273px;width:90px;height:90px}.customize-option.hair_base_5_midnight{background-image:url(spritesmith-main-2.png);background-position:-1026px -288px;width:60px;height:60px}.hair_base_5_pblue{background-image:url(spritesmith-main-2.png);background-position:-1001px -364px;width:90px;height:90px}.customize-option.hair_base_5_pblue{background-image:url(spritesmith-main-2.png);background-position:-1026px -379px;width:60px;height:60px}.hair_base_5_pblue2{background-image:url(spritesmith-main-2.png);background-position:-1001px -455px;width:90px;height:90px}.customize-option.hair_base_5_pblue2{background-image:url(spritesmith-main-2.png);background-position:-1026px -470px;width:60px;height:60px}.hair_base_5_peppermint{background-image:url(spritesmith-main-2.png);background-position:-1001px -546px;width:90px;height:90px}.customize-option.hair_base_5_peppermint{background-image:url(spritesmith-main-2.png);background-position:-1026px -561px;width:60px;height:60px}.hair_base_5_pgreen{background-image:url(spritesmith-main-2.png);background-position:-1001px -637px;width:90px;height:90px}.customize-option.hair_base_5_pgreen{background-image:url(spritesmith-main-2.png);background-position:-1026px -652px;width:60px;height:60px}.hair_base_5_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-1001px -728px;width:90px;height:90px}.customize-option.hair_base_5_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-1026px -743px;width:60px;height:60px}.hair_base_5_porange{background-image:url(spritesmith-main-2.png);background-position:-1001px -819px;width:90px;height:90px}.customize-option.hair_base_5_porange{background-image:url(spritesmith-main-2.png);background-position:-1026px -834px;width:60px;height:60px}.hair_base_5_porange2{background-image:url(spritesmith-main-2.png);background-position:-1001px -910px;width:90px;height:90px}.customize-option.hair_base_5_porange2{background-image:url(spritesmith-main-2.png);background-position:-1026px -925px;width:60px;height:60px}.hair_base_5_ppink{background-image:url(spritesmith-main-2.png);background-position:0 -1001px;width:90px;height:90px}.customize-option.hair_base_5_ppink{background-image:url(spritesmith-main-2.png);background-position:-25px -1016px;width:60px;height:60px}.hair_base_5_ppink2{background-image:url(spritesmith-main-2.png);background-position:-91px -1001px;width:90px;height:90px}.customize-option.hair_base_5_ppink2{background-image:url(spritesmith-main-2.png);background-position:-116px -1016px;width:60px;height:60px}.hair_base_5_ppurple{background-image:url(spritesmith-main-2.png);background-position:-182px -1001px;width:90px;height:90px}.customize-option.hair_base_5_ppurple{background-image:url(spritesmith-main-2.png);background-position:-207px -1016px;width:60px;height:60px}.hair_base_5_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-273px -1001px;width:90px;height:90px}.customize-option.hair_base_5_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-298px -1016px;width:60px;height:60px}.hair_base_5_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-364px -1001px;width:90px;height:90px}.customize-option.hair_base_5_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-389px -1016px;width:60px;height:60px}.hair_base_5_purple{background-image:url(spritesmith-main-2.png);background-position:-455px -1001px;width:90px;height:90px}.customize-option.hair_base_5_purple{background-image:url(spritesmith-main-2.png);background-position:-480px -1016px;width:60px;height:60px}.hair_base_5_pyellow{background-image:url(spritesmith-main-2.png);background-position:-546px -1001px;width:90px;height:90px}.customize-option.hair_base_5_pyellow{background-image:url(spritesmith-main-2.png);background-position:-571px -1016px;width:60px;height:60px}.hair_base_5_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-637px -1001px;width:90px;height:90px}.customize-option.hair_base_5_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-662px -1016px;width:60px;height:60px}.hair_base_5_rainbow{background-image:url(spritesmith-main-2.png);background-position:-728px -1001px;width:90px;height:90px}.customize-option.hair_base_5_rainbow{background-image:url(spritesmith-main-2.png);background-position:-753px -1016px;width:60px;height:60px}.hair_base_5_red{background-image:url(spritesmith-main-2.png);background-position:-819px -1001px;width:90px;height:90px}.customize-option.hair_base_5_red{background-image:url(spritesmith-main-2.png);background-position:-844px -1016px;width:60px;height:60px}.hair_base_5_snowy{background-image:url(spritesmith-main-2.png);background-position:-910px -1001px;width:90px;height:90px}.customize-option.hair_base_5_snowy{background-image:url(spritesmith-main-2.png);background-position:-935px -1016px;width:60px;height:60px}.hair_base_5_white{background-image:url(spritesmith-main-2.png);background-position:-1001px -1001px;width:90px;height:90px}.customize-option.hair_base_5_white{background-image:url(spritesmith-main-2.png);background-position:-1026px -1016px;width:60px;height:60px}.hair_base_5_winternight{background-image:url(spritesmith-main-2.png);background-position:-1092px 0;width:90px;height:90px}.customize-option.hair_base_5_winternight{background-image:url(spritesmith-main-2.png);background-position:-1117px -15px;width:60px;height:60px}.hair_base_5_winterstar{background-image:url(spritesmith-main-2.png);background-position:-1092px -91px;width:90px;height:90px}.customize-option.hair_base_5_winterstar{background-image:url(spritesmith-main-2.png);background-position:-1117px -106px;width:60px;height:60px}.hair_base_5_yellow{background-image:url(spritesmith-main-2.png);background-position:-1092px -182px;width:90px;height:90px}.customize-option.hair_base_5_yellow{background-image:url(spritesmith-main-2.png);background-position:-1117px -197px;width:60px;height:60px}.hair_base_5_zombie{background-image:url(spritesmith-main-2.png);background-position:-1092px -273px;width:90px;height:90px}.customize-option.hair_base_5_zombie{background-image:url(spritesmith-main-2.png);background-position:-1117px -288px;width:60px;height:60px}.hair_base_6_TRUred{background-image:url(spritesmith-main-2.png);background-position:-1092px -364px;width:90px;height:90px}.customize-option.hair_base_6_TRUred{background-image:url(spritesmith-main-2.png);background-position:-1117px -379px;width:60px;height:60px}.hair_base_6_aurora{background-image:url(spritesmith-main-2.png);background-position:-1092px -455px;width:90px;height:90px}.customize-option.hair_base_6_aurora{background-image:url(spritesmith-main-2.png);background-position:-1117px -470px;width:60px;height:60px}.hair_base_6_black{background-image:url(spritesmith-main-2.png);background-position:-1092px -546px;width:90px;height:90px}.customize-option.hair_base_6_black{background-image:url(spritesmith-main-2.png);background-position:-1117px -561px;width:60px;height:60px}.hair_base_6_blond{background-image:url(spritesmith-main-2.png);background-position:-1092px -637px;width:90px;height:90px}.customize-option.hair_base_6_blond{background-image:url(spritesmith-main-2.png);background-position:-1117px -652px;width:60px;height:60px}.hair_base_6_blue{background-image:url(spritesmith-main-2.png);background-position:-1092px -728px;width:90px;height:90px}.customize-option.hair_base_6_blue{background-image:url(spritesmith-main-2.png);background-position:-1117px -743px;width:60px;height:60px}.hair_base_6_brown{background-image:url(spritesmith-main-2.png);background-position:-1092px -819px;width:90px;height:90px}.customize-option.hair_base_6_brown{background-image:url(spritesmith-main-2.png);background-position:-1117px -834px;width:60px;height:60px}.hair_base_6_candycane{background-image:url(spritesmith-main-2.png);background-position:-1092px -910px;width:90px;height:90px}.customize-option.hair_base_6_candycane{background-image:url(spritesmith-main-2.png);background-position:-1117px -925px;width:60px;height:60px}.hair_base_6_candycorn{background-image:url(spritesmith-main-2.png);background-position:-1092px -1001px;width:90px;height:90px}.customize-option.hair_base_6_candycorn{background-image:url(spritesmith-main-2.png);background-position:-1117px -1016px;width:60px;height:60px}.hair_base_6_festive{background-image:url(spritesmith-main-2.png);background-position:0 -1092px;width:90px;height:90px}.customize-option.hair_base_6_festive{background-image:url(spritesmith-main-2.png);background-position:-25px -1107px;width:60px;height:60px}.hair_base_6_frost{background-image:url(spritesmith-main-2.png);background-position:-91px -1092px;width:90px;height:90px}.customize-option.hair_base_6_frost{background-image:url(spritesmith-main-2.png);background-position:-116px -1107px;width:60px;height:60px}.hair_base_6_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-182px -1092px;width:90px;height:90px}.customize-option.hair_base_6_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-207px -1107px;width:60px;height:60px}.hair_base_6_green{background-image:url(spritesmith-main-2.png);background-position:-273px -1092px;width:90px;height:90px}.customize-option.hair_base_6_green{background-image:url(spritesmith-main-2.png);background-position:-298px -1107px;width:60px;height:60px}.hair_base_6_halloween{background-image:url(spritesmith-main-2.png);background-position:-364px -1092px;width:90px;height:90px}.customize-option.hair_base_6_halloween{background-image:url(spritesmith-main-2.png);background-position:-389px -1107px;width:60px;height:60px}.hair_base_6_holly{background-image:url(spritesmith-main-2.png);background-position:-455px -1092px;width:90px;height:90px}.customize-option.hair_base_6_holly{background-image:url(spritesmith-main-2.png);background-position:-480px -1107px;width:60px;height:60px}.hair_base_6_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-546px -1092px;width:90px;height:90px}.customize-option.hair_base_6_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-571px -1107px;width:60px;height:60px}.hair_base_6_midnight{background-image:url(spritesmith-main-2.png);background-position:-637px -1092px;width:90px;height:90px}.customize-option.hair_base_6_midnight{background-image:url(spritesmith-main-2.png);background-position:-662px -1107px;width:60px;height:60px}.hair_base_6_pblue{background-image:url(spritesmith-main-2.png);background-position:0 0;width:90px;height:90px}.customize-option.hair_base_6_pblue{background-image:url(spritesmith-main-2.png);background-position:-25px -15px;width:60px;height:60px}.hair_base_6_pblue2{background-image:url(spritesmith-main-2.png);background-position:-819px -1092px;width:90px;height:90px}.customize-option.hair_base_6_pblue2{background-image:url(spritesmith-main-2.png);background-position:-844px -1107px;width:60px;height:60px}.hair_base_6_peppermint{background-image:url(spritesmith-main-2.png);background-position:-910px -1092px;width:90px;height:90px}.customize-option.hair_base_6_peppermint{background-image:url(spritesmith-main-2.png);background-position:-935px -1107px;width:60px;height:60px}.hair_base_6_pgreen{background-image:url(spritesmith-main-2.png);background-position:-1001px -1092px;width:90px;height:90px}.customize-option.hair_base_6_pgreen{background-image:url(spritesmith-main-2.png);background-position:-1026px -1107px;width:60px;height:60px}.hair_base_6_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-1092px -1092px;width:90px;height:90px}.customize-option.hair_base_6_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-1117px -1107px;width:60px;height:60px}.hair_base_6_porange{background-image:url(spritesmith-main-2.png);background-position:-1183px 0;width:90px;height:90px}.customize-option.hair_base_6_porange{background-image:url(spritesmith-main-2.png);background-position:-1208px -15px;width:60px;height:60px}.hair_base_6_porange2{background-image:url(spritesmith-main-2.png);background-position:-1183px -91px;width:90px;height:90px}.customize-option.hair_base_6_porange2{background-image:url(spritesmith-main-2.png);background-position:-1208px -106px;width:60px;height:60px}.hair_base_6_ppink{background-image:url(spritesmith-main-2.png);background-position:-1183px -182px;width:90px;height:90px}.customize-option.hair_base_6_ppink{background-image:url(spritesmith-main-2.png);background-position:-1208px -197px;width:60px;height:60px}.hair_base_6_ppink2{background-image:url(spritesmith-main-2.png);background-position:-1183px -273px;width:90px;height:90px}.customize-option.hair_base_6_ppink2{background-image:url(spritesmith-main-2.png);background-position:-1208px -288px;width:60px;height:60px}.hair_base_6_ppurple{background-image:url(spritesmith-main-2.png);background-position:-1183px -364px;width:90px;height:90px}.customize-option.hair_base_6_ppurple{background-image:url(spritesmith-main-2.png);background-position:-1208px -379px;width:60px;height:60px}.hair_base_6_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-1183px -455px;width:90px;height:90px}.customize-option.hair_base_6_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-1208px -470px;width:60px;height:60px}.hair_base_6_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-1183px -546px;width:90px;height:90px}.customize-option.hair_base_6_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-1208px -561px;width:60px;height:60px}.hair_base_6_purple{background-image:url(spritesmith-main-2.png);background-position:-1183px -637px;width:90px;height:90px}.customize-option.hair_base_6_purple{background-image:url(spritesmith-main-2.png);background-position:-1208px -652px;width:60px;height:60px}.hair_base_6_pyellow{background-image:url(spritesmith-main-2.png);background-position:-1183px -728px;width:90px;height:90px}.customize-option.hair_base_6_pyellow{background-image:url(spritesmith-main-2.png);background-position:-1208px -743px;width:60px;height:60px}.hair_base_6_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-1183px -819px;width:90px;height:90px}.customize-option.hair_base_6_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-1208px -834px;width:60px;height:60px}.hair_base_6_rainbow{background-image:url(spritesmith-main-2.png);background-position:-1183px -910px;width:90px;height:90px}.customize-option.hair_base_6_rainbow{background-image:url(spritesmith-main-2.png);background-position:-1208px -925px;width:60px;height:60px}.hair_base_6_red{background-image:url(spritesmith-main-2.png);background-position:-1183px -1001px;width:90px;height:90px}.customize-option.hair_base_6_red{background-image:url(spritesmith-main-2.png);background-position:-1208px -1016px;width:60px;height:60px}.hair_base_6_snowy{background-image:url(spritesmith-main-2.png);background-position:-1183px -1092px;width:90px;height:90px}.customize-option.hair_base_6_snowy{background-image:url(spritesmith-main-2.png);background-position:-1208px -1107px;width:60px;height:60px}.hair_base_6_white{background-image:url(spritesmith-main-2.png);background-position:0 -1183px;width:90px;height:90px}.customize-option.hair_base_6_white{background-image:url(spritesmith-main-2.png);background-position:-25px -1198px;width:60px;height:60px}.hair_base_6_winternight{background-image:url(spritesmith-main-2.png);background-position:-91px -1183px;width:90px;height:90px}.customize-option.hair_base_6_winternight{background-image:url(spritesmith-main-2.png);background-position:-116px -1198px;width:60px;height:60px}.hair_base_6_winterstar{background-image:url(spritesmith-main-2.png);background-position:-182px -1183px;width:90px;height:90px}.customize-option.hair_base_6_winterstar{background-image:url(spritesmith-main-2.png);background-position:-207px -1198px;width:60px;height:60px}.hair_base_6_yellow{background-image:url(spritesmith-main-2.png);background-position:-273px -1183px;width:90px;height:90px}.customize-option.hair_base_6_yellow{background-image:url(spritesmith-main-2.png);background-position:-298px -1198px;width:60px;height:60px}.hair_base_6_zombie{background-image:url(spritesmith-main-2.png);background-position:-364px -1183px;width:90px;height:90px}.customize-option.hair_base_6_zombie{background-image:url(spritesmith-main-2.png);background-position:-389px -1198px;width:60px;height:60px}.hair_base_7_TRUred{background-image:url(spritesmith-main-2.png);background-position:-455px -1183px;width:90px;height:90px}.customize-option.hair_base_7_TRUred{background-image:url(spritesmith-main-2.png);background-position:-480px -1198px;width:60px;height:60px}.hair_base_7_aurora{background-image:url(spritesmith-main-2.png);background-position:-546px -1183px;width:90px;height:90px}.customize-option.hair_base_7_aurora{background-image:url(spritesmith-main-2.png);background-position:-571px -1198px;width:60px;height:60px}.hair_base_7_black{background-image:url(spritesmith-main-2.png);background-position:-637px -1183px;width:90px;height:90px}.customize-option.hair_base_7_black{background-image:url(spritesmith-main-2.png);background-position:-662px -1198px;width:60px;height:60px}.hair_base_7_blond{background-image:url(spritesmith-main-2.png);background-position:-728px -1183px;width:90px;height:90px}.customize-option.hair_base_7_blond{background-image:url(spritesmith-main-2.png);background-position:-753px -1198px;width:60px;height:60px}.hair_base_7_blue{background-image:url(spritesmith-main-2.png);background-position:-819px -1183px;width:90px;height:90px}.customize-option.hair_base_7_blue{background-image:url(spritesmith-main-2.png);background-position:-844px -1198px;width:60px;height:60px}.hair_base_7_brown{background-image:url(spritesmith-main-2.png);background-position:-910px -1183px;width:90px;height:90px}.customize-option.hair_base_7_brown{background-image:url(spritesmith-main-2.png);background-position:-935px -1198px;width:60px;height:60px}.hair_base_7_candycane{background-image:url(spritesmith-main-2.png);background-position:-1001px -1183px;width:90px;height:90px}.customize-option.hair_base_7_candycane{background-image:url(spritesmith-main-2.png);background-position:-1026px -1198px;width:60px;height:60px}.hair_base_7_candycorn{background-image:url(spritesmith-main-2.png);background-position:-1092px -1183px;width:90px;height:90px}.customize-option.hair_base_7_candycorn{background-image:url(spritesmith-main-2.png);background-position:-1117px -1198px;width:60px;height:60px}.hair_base_7_festive{background-image:url(spritesmith-main-2.png);background-position:-1183px -1183px;width:90px;height:90px}.customize-option.hair_base_7_festive{background-image:url(spritesmith-main-2.png);background-position:-1208px -1198px;width:60px;height:60px}.hair_base_7_frost{background-image:url(spritesmith-main-2.png);background-position:-1274px 0;width:90px;height:90px}.customize-option.hair_base_7_frost{background-image:url(spritesmith-main-2.png);background-position:-1299px -15px;width:60px;height:60px}.hair_base_7_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-1274px -91px;width:90px;height:90px}.customize-option.hair_base_7_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-1299px -106px;width:60px;height:60px}.hair_base_7_green{background-image:url(spritesmith-main-2.png);background-position:-1274px -182px;width:90px;height:90px}.customize-option.hair_base_7_green{background-image:url(spritesmith-main-2.png);background-position:-1299px -197px;width:60px;height:60px}.hair_base_7_halloween{background-image:url(spritesmith-main-2.png);background-position:-1274px -273px;width:90px;height:90px}.customize-option.hair_base_7_halloween{background-image:url(spritesmith-main-2.png);background-position:-1299px -288px;width:60px;height:60px}.hair_base_7_holly{background-image:url(spritesmith-main-2.png);background-position:-1274px -364px;width:90px;height:90px}.customize-option.hair_base_7_holly{background-image:url(spritesmith-main-2.png);background-position:-1299px -379px;width:60px;height:60px}.hair_base_7_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-1274px -455px;width:90px;height:90px}.customize-option.hair_base_7_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-1299px -470px;width:60px;height:60px}.hair_base_7_midnight{background-image:url(spritesmith-main-2.png);background-position:-1274px -546px;width:90px;height:90px}.customize-option.hair_base_7_midnight{background-image:url(spritesmith-main-2.png);background-position:-1299px -561px;width:60px;height:60px}.hair_base_7_pblue{background-image:url(spritesmith-main-2.png);background-position:-1274px -637px;width:90px;height:90px}.customize-option.hair_base_7_pblue{background-image:url(spritesmith-main-2.png);background-position:-1299px -652px;width:60px;height:60px}.hair_base_7_pblue2{background-image:url(spritesmith-main-2.png);background-position:-1274px -728px;width:90px;height:90px}.customize-option.hair_base_7_pblue2{background-image:url(spritesmith-main-2.png);background-position:-1299px -743px;width:60px;height:60px}.hair_base_7_peppermint{background-image:url(spritesmith-main-2.png);background-position:-1274px -819px;width:90px;height:90px}.customize-option.hair_base_7_peppermint{background-image:url(spritesmith-main-2.png);background-position:-1299px -834px;width:60px;height:60px}.hair_base_7_pgreen{background-image:url(spritesmith-main-2.png);background-position:-1274px -910px;width:90px;height:90px}.customize-option.hair_base_7_pgreen{background-image:url(spritesmith-main-2.png);background-position:-1299px -925px;width:60px;height:60px}.hair_base_7_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-1274px -1001px;width:90px;height:90px}.customize-option.hair_base_7_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-1299px -1016px;width:60px;height:60px}.hair_base_7_porange{background-image:url(spritesmith-main-2.png);background-position:-1274px -1092px;width:90px;height:90px}.customize-option.hair_base_7_porange{background-image:url(spritesmith-main-2.png);background-position:-1299px -1107px;width:60px;height:60px}.hair_base_7_porange2{background-image:url(spritesmith-main-2.png);background-position:-1274px -1183px;width:90px;height:90px}.customize-option.hair_base_7_porange2{background-image:url(spritesmith-main-2.png);background-position:-1299px -1198px;width:60px;height:60px}.hair_base_7_ppink{background-image:url(spritesmith-main-2.png);background-position:0 -1274px;width:90px;height:90px}.customize-option.hair_base_7_ppink{background-image:url(spritesmith-main-2.png);background-position:-25px -1289px;width:60px;height:60px}.hair_base_7_ppink2{background-image:url(spritesmith-main-2.png);background-position:-91px -1274px;width:90px;height:90px}.customize-option.hair_base_7_ppink2{background-image:url(spritesmith-main-2.png);background-position:-116px -1289px;width:60px;height:60px}.hair_base_7_ppurple{background-image:url(spritesmith-main-2.png);background-position:-182px -1274px;width:90px;height:90px}.customize-option.hair_base_7_ppurple{background-image:url(spritesmith-main-2.png);background-position:-207px -1289px;width:60px;height:60px}.hair_base_7_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-273px -1274px;width:90px;height:90px}.customize-option.hair_base_7_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-298px -1289px;width:60px;height:60px}.hair_base_7_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-364px -1274px;width:90px;height:90px}.customize-option.hair_base_7_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-389px -1289px;width:60px;height:60px}.hair_base_7_purple{background-image:url(spritesmith-main-2.png);background-position:-455px -1274px;width:90px;height:90px}.customize-option.hair_base_7_purple{background-image:url(spritesmith-main-2.png);background-position:-480px -1289px;width:60px;height:60px}.hair_base_7_pyellow{background-image:url(spritesmith-main-2.png);background-position:-546px -1274px;width:90px;height:90px}.customize-option.hair_base_7_pyellow{background-image:url(spritesmith-main-2.png);background-position:-571px -1289px;width:60px;height:60px}.hair_base_7_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-637px -1274px;width:90px;height:90px}.customize-option.hair_base_7_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-662px -1289px;width:60px;height:60px}.hair_base_7_rainbow{background-image:url(spritesmith-main-2.png);background-position:-728px -1274px;width:90px;height:90px}.customize-option.hair_base_7_rainbow{background-image:url(spritesmith-main-2.png);background-position:-753px -1289px;width:60px;height:60px}.hair_base_7_red{background-image:url(spritesmith-main-2.png);background-position:-819px -1274px;width:90px;height:90px}.customize-option.hair_base_7_red{background-image:url(spritesmith-main-2.png);background-position:-844px -1289px;width:60px;height:60px}.hair_base_7_snowy{background-image:url(spritesmith-main-2.png);background-position:-910px -1274px;width:90px;height:90px}.customize-option.hair_base_7_snowy{background-image:url(spritesmith-main-2.png);background-position:-935px -1289px;width:60px;height:60px}.hair_base_7_white{background-image:url(spritesmith-main-2.png);background-position:-1001px -1274px;width:90px;height:90px}.customize-option.hair_base_7_white{background-image:url(spritesmith-main-2.png);background-position:-1026px -1289px;width:60px;height:60px}.hair_base_7_winternight{background-image:url(spritesmith-main-2.png);background-position:-1092px -1274px;width:90px;height:90px}.customize-option.hair_base_7_winternight{background-image:url(spritesmith-main-2.png);background-position:-1117px -1289px;width:60px;height:60px}.hair_base_7_winterstar{background-image:url(spritesmith-main-2.png);background-position:-1183px -1274px;width:90px;height:90px}.customize-option.hair_base_7_winterstar{background-image:url(spritesmith-main-2.png);background-position:-1208px -1289px;width:60px;height:60px}.hair_base_7_yellow{background-image:url(spritesmith-main-2.png);background-position:-1274px -1274px;width:90px;height:90px}.customize-option.hair_base_7_yellow{background-image:url(spritesmith-main-2.png);background-position:-1299px -1289px;width:60px;height:60px}.hair_base_7_zombie{background-image:url(spritesmith-main-2.png);background-position:-1365px 0;width:90px;height:90px}.customize-option.hair_base_7_zombie{background-image:url(spritesmith-main-2.png);background-position:-1390px -15px;width:60px;height:60px}.hair_base_8_TRUred{background-image:url(spritesmith-main-2.png);background-position:-1365px -91px;width:90px;height:90px}.customize-option.hair_base_8_TRUred{background-image:url(spritesmith-main-2.png);background-position:-1390px -106px;width:60px;height:60px}.hair_base_8_aurora{background-image:url(spritesmith-main-2.png);background-position:-1365px -182px;width:90px;height:90px}.customize-option.hair_base_8_aurora{background-image:url(spritesmith-main-2.png);background-position:-1390px -197px;width:60px;height:60px}.hair_base_8_black{background-image:url(spritesmith-main-2.png);background-position:-1365px -273px;width:90px;height:90px}.customize-option.hair_base_8_black{background-image:url(spritesmith-main-2.png);background-position:-1390px -288px;width:60px;height:60px}.hair_base_8_blond{background-image:url(spritesmith-main-2.png);background-position:-1365px -364px;width:90px;height:90px}.customize-option.hair_base_8_blond{background-image:url(spritesmith-main-2.png);background-position:-1390px -379px;width:60px;height:60px}.hair_base_8_blue{background-image:url(spritesmith-main-2.png);background-position:-1365px -455px;width:90px;height:90px}.customize-option.hair_base_8_blue{background-image:url(spritesmith-main-2.png);background-position:-1390px -470px;width:60px;height:60px}.hair_base_8_brown{background-image:url(spritesmith-main-2.png);background-position:-1365px -546px;width:90px;height:90px}.customize-option.hair_base_8_brown{background-image:url(spritesmith-main-2.png);background-position:-1390px -561px;width:60px;height:60px}.hair_base_8_candycane{background-image:url(spritesmith-main-2.png);background-position:-1365px -637px;width:90px;height:90px}.customize-option.hair_base_8_candycane{background-image:url(spritesmith-main-2.png);background-position:-1390px -652px;width:60px;height:60px}.hair_base_8_candycorn{background-image:url(spritesmith-main-2.png);background-position:-1365px -728px;width:90px;height:90px}.customize-option.hair_base_8_candycorn{background-image:url(spritesmith-main-2.png);background-position:-1390px -743px;width:60px;height:60px}.hair_base_8_festive{background-image:url(spritesmith-main-2.png);background-position:-1365px -819px;width:90px;height:90px}.customize-option.hair_base_8_festive{background-image:url(spritesmith-main-2.png);background-position:-1390px -834px;width:60px;height:60px}.hair_base_8_frost{background-image:url(spritesmith-main-2.png);background-position:-1365px -910px;width:90px;height:90px}.customize-option.hair_base_8_frost{background-image:url(spritesmith-main-2.png);background-position:-1390px -925px;width:60px;height:60px}.hair_base_8_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-1365px -1001px;width:90px;height:90px}.customize-option.hair_base_8_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-1390px -1016px;width:60px;height:60px}.hair_base_8_green{background-image:url(spritesmith-main-2.png);background-position:-1365px -1092px;width:90px;height:90px}.customize-option.hair_base_8_green{background-image:url(spritesmith-main-2.png);background-position:-1390px -1107px;width:60px;height:60px}.hair_base_8_halloween{background-image:url(spritesmith-main-2.png);background-position:-1365px -1183px;width:90px;height:90px}.customize-option.hair_base_8_halloween{background-image:url(spritesmith-main-2.png);background-position:-1390px -1198px;width:60px;height:60px}.hair_base_8_holly{background-image:url(spritesmith-main-2.png);background-position:-1365px -1274px;width:90px;height:90px}.customize-option.hair_base_8_holly{background-image:url(spritesmith-main-2.png);background-position:-1390px -1289px;width:60px;height:60px}.hair_base_8_hollygreen{background-image:url(spritesmith-main-2.png);background-position:0 -1365px;width:90px;height:90px}.customize-option.hair_base_8_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-25px -1380px;width:60px;height:60px}.hair_base_8_midnight{background-image:url(spritesmith-main-2.png);background-position:-91px -1365px;width:90px;height:90px}.customize-option.hair_base_8_midnight{background-image:url(spritesmith-main-2.png);background-position:-116px -1380px;width:60px;height:60px}.hair_base_8_pblue{background-image:url(spritesmith-main-2.png);background-position:-182px -1365px;width:90px;height:90px}.customize-option.hair_base_8_pblue{background-image:url(spritesmith-main-2.png);background-position:-207px -1380px;width:60px;height:60px}.hair_base_8_pblue2{background-image:url(spritesmith-main-2.png);background-position:-273px -1365px;width:90px;height:90px}.customize-option.hair_base_8_pblue2{background-image:url(spritesmith-main-2.png);background-position:-298px -1380px;width:60px;height:60px}.hair_base_8_peppermint{background-image:url(spritesmith-main-2.png);background-position:-364px -1365px;width:90px;height:90px}.customize-option.hair_base_8_peppermint{background-image:url(spritesmith-main-2.png);background-position:-389px -1380px;width:60px;height:60px}.hair_base_8_pgreen{background-image:url(spritesmith-main-2.png);background-position:-455px -1365px;width:90px;height:90px}.customize-option.hair_base_8_pgreen{background-image:url(spritesmith-main-2.png);background-position:-480px -1380px;width:60px;height:60px}.hair_base_8_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-546px -1365px;width:90px;height:90px}.customize-option.hair_base_8_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-571px -1380px;width:60px;height:60px}.hair_base_8_porange{background-image:url(spritesmith-main-2.png);background-position:-637px -1365px;width:90px;height:90px}.customize-option.hair_base_8_porange{background-image:url(spritesmith-main-2.png);background-position:-662px -1380px;width:60px;height:60px}.hair_base_8_porange2{background-image:url(spritesmith-main-2.png);background-position:-728px -1365px;width:90px;height:90px}.customize-option.hair_base_8_porange2{background-image:url(spritesmith-main-2.png);background-position:-753px -1380px;width:60px;height:60px}.hair_base_8_ppink{background-image:url(spritesmith-main-2.png);background-position:-819px -1365px;width:90px;height:90px}.customize-option.hair_base_8_ppink{background-image:url(spritesmith-main-2.png);background-position:-844px -1380px;width:60px;height:60px}.hair_base_8_ppink2{background-image:url(spritesmith-main-2.png);background-position:-910px -1365px;width:90px;height:90px}.customize-option.hair_base_8_ppink2{background-image:url(spritesmith-main-2.png);background-position:-935px -1380px;width:60px;height:60px}.hair_base_8_ppurple{background-image:url(spritesmith-main-2.png);background-position:-1001px -1365px;width:90px;height:90px}.customize-option.hair_base_8_ppurple{background-image:url(spritesmith-main-2.png);background-position:-1026px -1380px;width:60px;height:60px}.hair_base_8_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-1092px -1365px;width:90px;height:90px}.customize-option.hair_base_8_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-1117px -1380px;width:60px;height:60px}.hair_base_8_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-1183px -1365px;width:90px;height:90px}.customize-option.hair_base_8_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-1208px -1380px;width:60px;height:60px}.hair_base_8_purple{background-image:url(spritesmith-main-2.png);background-position:-1274px -1365px;width:90px;height:90px}.customize-option.hair_base_8_purple{background-image:url(spritesmith-main-2.png);background-position:-1299px -1380px;width:60px;height:60px}.hair_base_8_pyellow{background-image:url(spritesmith-main-2.png);background-position:-1365px -1365px;width:90px;height:90px}.customize-option.hair_base_8_pyellow{background-image:url(spritesmith-main-2.png);background-position:-1390px -1380px;width:60px;height:60px}.hair_base_8_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-1456px 0;width:90px;height:90px}.customize-option.hair_base_8_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-1481px -15px;width:60px;height:60px}.hair_base_8_rainbow{background-image:url(spritesmith-main-2.png);background-position:-1456px -91px;width:90px;height:90px}.customize-option.hair_base_8_rainbow{background-image:url(spritesmith-main-2.png);background-position:-1481px -106px;width:60px;height:60px}.hair_base_8_red{background-image:url(spritesmith-main-2.png);background-position:-1456px -182px;width:90px;height:90px}.customize-option.hair_base_8_red{background-image:url(spritesmith-main-2.png);background-position:-1481px -197px;width:60px;height:60px}.hair_base_8_snowy{background-image:url(spritesmith-main-2.png);background-position:-1456px -273px;width:90px;height:90px}.customize-option.hair_base_8_snowy{background-image:url(spritesmith-main-2.png);background-position:-1481px -288px;width:60px;height:60px}.hair_base_8_white{background-image:url(spritesmith-main-2.png);background-position:-1456px -364px;width:90px;height:90px}.customize-option.hair_base_8_white{background-image:url(spritesmith-main-2.png);background-position:-1481px -379px;width:60px;height:60px}.hair_base_8_winternight{background-image:url(spritesmith-main-2.png);background-position:-1456px -455px;width:90px;height:90px}.customize-option.hair_base_8_winternight{background-image:url(spritesmith-main-2.png);background-position:-1481px -470px;width:60px;height:60px}.hair_base_8_winterstar{background-image:url(spritesmith-main-2.png);background-position:-1456px -546px;width:90px;height:90px}.customize-option.hair_base_8_winterstar{background-image:url(spritesmith-main-2.png);background-position:-1481px -561px;width:60px;height:60px}.hair_base_8_yellow{background-image:url(spritesmith-main-2.png);background-position:-1456px -637px;width:90px;height:90px}.customize-option.hair_base_8_yellow{background-image:url(spritesmith-main-2.png);background-position:-1481px -652px;width:60px;height:60px}.hair_base_8_zombie{background-image:url(spritesmith-main-2.png);background-position:-1456px -728px;width:90px;height:90px}.customize-option.hair_base_8_zombie{background-image:url(spritesmith-main-2.png);background-position:-1481px -743px;width:60px;height:60px}.hair_base_9_TRUred{background-image:url(spritesmith-main-2.png);background-position:-1456px -819px;width:90px;height:90px}.customize-option.hair_base_9_TRUred{background-image:url(spritesmith-main-2.png);background-position:-1481px -834px;width:60px;height:60px}.hair_base_9_aurora{background-image:url(spritesmith-main-2.png);background-position:-1456px -910px;width:90px;height:90px}.customize-option.hair_base_9_aurora{background-image:url(spritesmith-main-2.png);background-position:-1481px -925px;width:60px;height:60px}.hair_base_9_black{background-image:url(spritesmith-main-2.png);background-position:-1456px -1001px;width:90px;height:90px}.customize-option.hair_base_9_black{background-image:url(spritesmith-main-2.png);background-position:-1481px -1016px;width:60px;height:60px}.hair_base_9_blond{background-image:url(spritesmith-main-2.png);background-position:-1456px -1092px;width:90px;height:90px}.customize-option.hair_base_9_blond{background-image:url(spritesmith-main-2.png);background-position:-1481px -1107px;width:60px;height:60px}.hair_base_9_blue{background-image:url(spritesmith-main-2.png);background-position:-1456px -1183px;width:90px;height:90px}.customize-option.hair_base_9_blue{background-image:url(spritesmith-main-2.png);background-position:-1481px -1198px;width:60px;height:60px}.hair_base_9_brown{background-image:url(spritesmith-main-2.png);background-position:-1456px -1274px;width:90px;height:90px}.customize-option.hair_base_9_brown{background-image:url(spritesmith-main-2.png);background-position:-1481px -1289px;width:60px;height:60px}.hair_base_9_candycane{background-image:url(spritesmith-main-2.png);background-position:-1456px -1365px;width:90px;height:90px}.customize-option.hair_base_9_candycane{background-image:url(spritesmith-main-2.png);background-position:-1481px -1380px;width:60px;height:60px}.hair_base_9_candycorn{background-image:url(spritesmith-main-2.png);background-position:0 -1456px;width:90px;height:90px}.customize-option.hair_base_9_candycorn{background-image:url(spritesmith-main-2.png);background-position:-25px -1471px;width:60px;height:60px}.hair_base_9_festive{background-image:url(spritesmith-main-2.png);background-position:-91px -1456px;width:90px;height:90px}.customize-option.hair_base_9_festive{background-image:url(spritesmith-main-2.png);background-position:-116px -1471px;width:60px;height:60px}.hair_base_9_frost{background-image:url(spritesmith-main-2.png);background-position:-182px -1456px;width:90px;height:90px}.customize-option.hair_base_9_frost{background-image:url(spritesmith-main-2.png);background-position:-207px -1471px;width:60px;height:60px}.hair_base_9_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-273px -1456px;width:90px;height:90px}.customize-option.hair_base_9_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-298px -1471px;width:60px;height:60px}.hair_base_9_green{background-image:url(spritesmith-main-2.png);background-position:-364px -1456px;width:90px;height:90px}.customize-option.hair_base_9_green{background-image:url(spritesmith-main-2.png);background-position:-389px -1471px;width:60px;height:60px}.hair_base_9_halloween{background-image:url(spritesmith-main-2.png);background-position:-455px -1456px;width:90px;height:90px}.customize-option.hair_base_9_halloween{background-image:url(spritesmith-main-2.png);background-position:-480px -1471px;width:60px;height:60px}.hair_base_9_holly{background-image:url(spritesmith-main-2.png);background-position:-546px -1456px;width:90px;height:90px}.customize-option.hair_base_9_holly{background-image:url(spritesmith-main-2.png);background-position:-571px -1471px;width:60px;height:60px}.hair_base_9_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-637px -1456px;width:90px;height:90px}.customize-option.hair_base_9_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-662px -1471px;width:60px;height:60px}.hair_base_9_midnight{background-image:url(spritesmith-main-2.png);background-position:-728px -1456px;width:90px;height:90px}.customize-option.hair_base_9_midnight{background-image:url(spritesmith-main-2.png);background-position:-753px -1471px;width:60px;height:60px}.hair_base_9_pblue{background-image:url(spritesmith-main-2.png);background-position:-819px -1456px;width:90px;height:90px}.customize-option.hair_base_9_pblue{background-image:url(spritesmith-main-2.png);background-position:-844px -1471px;width:60px;height:60px}.hair_base_9_pblue2{background-image:url(spritesmith-main-2.png);background-position:-910px -1456px;width:90px;height:90px}.customize-option.hair_base_9_pblue2{background-image:url(spritesmith-main-2.png);background-position:-935px -1471px;width:60px;height:60px}.hair_base_9_peppermint{background-image:url(spritesmith-main-2.png);background-position:-1001px -1456px;width:90px;height:90px}.customize-option.hair_base_9_peppermint{background-image:url(spritesmith-main-2.png);background-position:-1026px -1471px;width:60px;height:60px}.hair_base_9_pgreen{background-image:url(spritesmith-main-2.png);background-position:-1092px -1456px;width:90px;height:90px}.customize-option.hair_base_9_pgreen{background-image:url(spritesmith-main-2.png);background-position:-1117px -1471px;width:60px;height:60px}.hair_base_9_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-1183px -1456px;width:90px;height:90px}.customize-option.hair_base_9_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-1208px -1471px;width:60px;height:60px}.hair_base_9_porange{background-image:url(spritesmith-main-2.png);background-position:-1274px -1456px;width:90px;height:90px}.customize-option.hair_base_9_porange{background-image:url(spritesmith-main-2.png);background-position:-1299px -1471px;width:60px;height:60px}.hair_base_9_porange2{background-image:url(spritesmith-main-2.png);background-position:-1365px -1456px;width:90px;height:90px}.customize-option.hair_base_9_porange2{background-image:url(spritesmith-main-2.png);background-position:-1390px -1471px;width:60px;height:60px}.hair_base_9_ppink{background-image:url(spritesmith-main-2.png);background-position:-1456px -1456px;width:90px;height:90px}.customize-option.hair_base_9_ppink{background-image:url(spritesmith-main-2.png);background-position:-1481px -1471px;width:60px;height:60px}.hair_base_9_ppink2{background-image:url(spritesmith-main-2.png);background-position:-1547px 0;width:90px;height:90px}.customize-option.hair_base_9_ppink2{background-image:url(spritesmith-main-2.png);background-position:-1572px -15px;width:60px;height:60px}.hair_base_9_ppurple{background-image:url(spritesmith-main-2.png);background-position:-1547px -91px;width:90px;height:90px}.customize-option.hair_base_9_ppurple{background-image:url(spritesmith-main-2.png);background-position:-1572px -106px;width:60px;height:60px}.hair_base_9_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-1547px -182px;width:90px;height:90px}.customize-option.hair_base_9_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-1572px -197px;width:60px;height:60px}.hair_base_9_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-1547px -273px;width:90px;height:90px}.customize-option.hair_base_9_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-1572px -288px;width:60px;height:60px}.hair_base_9_purple{background-image:url(spritesmith-main-2.png);background-position:-1547px -364px;width:90px;height:90px}.customize-option.hair_base_9_purple{background-image:url(spritesmith-main-2.png);background-position:-1572px -379px;width:60px;height:60px}.hair_base_9_pyellow{background-image:url(spritesmith-main-2.png);background-position:-1547px -455px;width:90px;height:90px}.customize-option.hair_base_9_pyellow{background-image:url(spritesmith-main-2.png);background-position:-1572px -470px;width:60px;height:60px}.hair_base_9_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-1547px -546px;width:90px;height:90px}.customize-option.hair_base_9_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-1572px -561px;width:60px;height:60px}.hair_base_9_rainbow{background-image:url(spritesmith-main-2.png);background-position:-1547px -637px;width:90px;height:90px}.customize-option.hair_base_9_rainbow{background-image:url(spritesmith-main-2.png);background-position:-1572px -652px;width:60px;height:60px}.hair_base_9_red{background-image:url(spritesmith-main-2.png);background-position:-1547px -728px;width:90px;height:90px}.customize-option.hair_base_9_red{background-image:url(spritesmith-main-2.png);background-position:-1572px -743px;width:60px;height:60px}.hair_base_9_snowy{background-image:url(spritesmith-main-2.png);background-position:-1547px -819px;width:90px;height:90px}.customize-option.hair_base_9_snowy{background-image:url(spritesmith-main-2.png);background-position:-1572px -834px;width:60px;height:60px}.hair_base_9_white{background-image:url(spritesmith-main-2.png);background-position:-1547px -910px;width:90px;height:90px}.customize-option.hair_base_9_white{background-image:url(spritesmith-main-2.png);background-position:-1572px -925px;width:60px;height:60px}.hair_base_9_winternight{background-image:url(spritesmith-main-2.png);background-position:-1547px -1001px;width:90px;height:90px}.customize-option.hair_base_9_winternight{background-image:url(spritesmith-main-2.png);background-position:-1572px -1016px;width:60px;height:60px}.hair_base_9_winterstar{background-image:url(spritesmith-main-2.png);background-position:-1547px -1092px;width:90px;height:90px}.customize-option.hair_base_9_winterstar{background-image:url(spritesmith-main-2.png);background-position:-1572px -1107px;width:60px;height:60px}.hair_base_9_yellow{background-image:url(spritesmith-main-2.png);background-position:-1547px -1183px;width:90px;height:90px}.customize-option.hair_base_9_yellow{background-image:url(spritesmith-main-2.png);background-position:-1572px -1198px;width:60px;height:60px}.hair_base_9_zombie{background-image:url(spritesmith-main-2.png);background-position:-1547px -1274px;width:90px;height:90px}.customize-option.hair_base_9_zombie{background-image:url(spritesmith-main-2.png);background-position:-1572px -1289px;width:60px;height:60px}.hair_beard_1_pblue2{background-image:url(spritesmith-main-2.png);background-position:-1547px -1365px;width:90px;height:90px}.customize-option.hair_beard_1_pblue2{background-image:url(spritesmith-main-2.png);background-position:-1572px -1380px;width:60px;height:60px}.hair_beard_1_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-1547px -1456px;width:90px;height:90px}.customize-option.hair_beard_1_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-1572px -1471px;width:60px;height:60px}.hair_beard_1_porange2{background-image:url(spritesmith-main-2.png);background-position:0 -1547px;width:90px;height:90px}.customize-option.hair_beard_1_porange2{background-image:url(spritesmith-main-2.png);background-position:-25px -1562px;width:60px;height:60px}.hair_beard_1_ppink2{background-image:url(spritesmith-main-2.png);background-position:-91px -1547px;width:90px;height:90px}.customize-option.hair_beard_1_ppink2{background-image:url(spritesmith-main-2.png);background-position:-116px -1562px;width:60px;height:60px}.hair_beard_1_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-182px -1547px;width:90px;height:90px}.customize-option.hair_beard_1_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-207px -1562px;width:60px;height:60px}.hair_beard_1_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-273px -1547px;width:90px;height:90px}.customize-option.hair_beard_1_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-298px -1562px;width:60px;height:60px}.hair_beard_2_pblue2{background-image:url(spritesmith-main-2.png);background-position:-364px -1547px;width:90px;height:90px}.customize-option.hair_beard_2_pblue2{background-image:url(spritesmith-main-2.png);background-position:-389px -1562px;width:60px;height:60px}.hair_beard_2_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-455px -1547px;width:90px;height:90px}.customize-option.hair_beard_2_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-480px -1562px;width:60px;height:60px}.hair_beard_2_porange2{background-image:url(spritesmith-main-2.png);background-position:-546px -1547px;width:90px;height:90px}.customize-option.hair_beard_2_porange2{background-image:url(spritesmith-main-2.png);background-position:-571px -1562px;width:60px;height:60px}.hair_beard_2_ppink2{background-image:url(spritesmith-main-2.png);background-position:-637px -1547px;width:90px;height:90px}.customize-option.hair_beard_2_ppink2{background-image:url(spritesmith-main-2.png);background-position:-662px -1562px;width:60px;height:60px}.hair_beard_2_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-728px -1547px;width:90px;height:90px}.customize-option.hair_beard_2_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-753px -1562px;width:60px;height:60px}.hair_beard_2_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-819px -1547px;width:90px;height:90px}.customize-option.hair_beard_2_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-844px -1562px;width:60px;height:60px}.hair_beard_3_pblue2{background-image:url(spritesmith-main-2.png);background-position:-910px -1547px;width:90px;height:90px}.customize-option.hair_beard_3_pblue2{background-image:url(spritesmith-main-2.png);background-position:-935px -1562px;width:60px;height:60px}.hair_beard_3_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-1001px -1547px;width:90px;height:90px}.customize-option.hair_beard_3_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-1026px -1562px;width:60px;height:60px}.hair_beard_3_porange2{background-image:url(spritesmith-main-2.png);background-position:-1092px -1547px;width:90px;height:90px}.customize-option.hair_beard_3_porange2{background-image:url(spritesmith-main-2.png);background-position:-1117px -1562px;width:60px;height:60px}.hair_beard_3_ppink2{background-image:url(spritesmith-main-2.png);background-position:-1183px -1547px;width:90px;height:90px}.customize-option.hair_beard_3_ppink2{background-image:url(spritesmith-main-2.png);background-position:-1208px -1562px;width:60px;height:60px}.hair_beard_3_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-1274px -1547px;width:90px;height:90px}.customize-option.hair_beard_3_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-1299px -1562px;width:60px;height:60px}.hair_beard_3_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-1365px -1547px;width:90px;height:90px}.customize-option.hair_beard_3_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-1390px -1562px;width:60px;height:60px}.hair_mustache_1_pblue2{background-image:url(spritesmith-main-2.png);background-position:-1456px -1547px;width:90px;height:90px}.customize-option.hair_mustache_1_pblue2{background-image:url(spritesmith-main-2.png);background-position:-1481px -1562px;width:60px;height:60px}.hair_mustache_1_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-1547px -1547px;width:90px;height:90px}.customize-option.hair_mustache_1_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-1572px -1562px;width:60px;height:60px}.hair_mustache_1_porange2{background-image:url(spritesmith-main-2.png);background-position:-1638px 0;width:90px;height:90px}.customize-option.hair_mustache_1_porange2{background-image:url(spritesmith-main-2.png);background-position:-1663px -15px;width:60px;height:60px}.hair_mustache_1_ppink2{background-image:url(spritesmith-main-2.png);background-position:-1638px -91px;width:90px;height:90px}.customize-option.hair_mustache_1_ppink2{background-image:url(spritesmith-main-2.png);background-position:-1663px -106px;width:60px;height:60px}.hair_mustache_1_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-1638px -182px;width:90px;height:90px}.customize-option.hair_mustache_1_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-1663px -197px;width:60px;height:60px}.hair_mustache_1_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-1638px -273px;width:90px;height:90px}.customize-option.hair_mustache_1_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-1663px -288px;width:60px;height:60px}.hair_mustache_2_pblue2{background-image:url(spritesmith-main-2.png);background-position:-1638px -364px;width:90px;height:90px}.customize-option.hair_mustache_2_pblue2{background-image:url(spritesmith-main-2.png);background-position:-1663px -379px;width:60px;height:60px}.hair_mustache_2_pgreen2{background-image:url(spritesmith-main-3.png);background-position:-1185px -728px;width:90px;height:90px}.customize-option.hair_mustache_2_pgreen2{background-image:url(spritesmith-main-3.png);background-position:-1210px -743px;width:60px;height:60px}.hair_mustache_2_porange2{background-image:url(spritesmith-main-3.png);background-position:0 -1274px;width:90px;height:90px}.customize-option.hair_mustache_2_porange2{background-image:url(spritesmith-main-3.png);background-position:-25px -1289px;width:60px;height:60px}.hair_mustache_2_ppink2{background-image:url(spritesmith-main-3.png);background-position:-1185px -819px;width:90px;height:90px}.customize-option.hair_mustache_2_ppink2{background-image:url(spritesmith-main-3.png);background-position:-1210px -834px;width:60px;height:60px}.hair_mustache_2_ppurple2{background-image:url(spritesmith-main-3.png);background-position:-1185px -910px;width:90px;height:90px}.customize-option.hair_mustache_2_ppurple2{background-image:url(spritesmith-main-3.png);background-position:-1210px -925px;width:60px;height:60px}.hair_mustache_2_pyellow2{background-image:url(spritesmith-main-3.png);background-position:-637px -1183px;width:90px;height:90px}.customize-option.hair_mustache_2_pyellow2{background-image:url(spritesmith-main-3.png);background-position:-662px -1198px;width:60px;height:60px}.broad_shirt_black{background-image:url(spritesmith-main-3.png);background-position:-728px -1183px;width:90px;height:90px}.customize-option.broad_shirt_black{background-image:url(spritesmith-main-3.png);background-position:-753px -1213px;width:60px;height:60px}.broad_shirt_blue{background-image:url(spritesmith-main-3.png);background-position:-819px -1183px;width:90px;height:90px}.customize-option.broad_shirt_blue{background-image:url(spritesmith-main-3.png);background-position:-844px -1213px;width:60px;height:60px}.broad_shirt_convict{background-image:url(spritesmith-main-3.png);background-position:-273px -1365px;width:90px;height:90px}.customize-option.broad_shirt_convict{background-image:url(spritesmith-main-3.png);background-position:-298px -1395px;width:60px;height:60px}.broad_shirt_cross{background-image:url(spritesmith-main-3.png);background-position:-364px -1365px;width:90px;height:90px}.customize-option.broad_shirt_cross{background-image:url(spritesmith-main-3.png);background-position:-389px -1395px;width:60px;height:60px}.broad_shirt_fire{background-image:url(spritesmith-main-3.png);background-position:-728px -1365px;width:90px;height:90px}.customize-option.broad_shirt_fire{background-image:url(spritesmith-main-3.png);background-position:-753px -1395px;width:60px;height:60px}.broad_shirt_green{background-image:url(spritesmith-main-3.png);background-position:-819px -1365px;width:90px;height:90px}.customize-option.broad_shirt_green{background-image:url(spritesmith-main-3.png);background-position:-844px -1395px;width:60px;height:60px}.broad_shirt_horizon{background-image:url(spritesmith-main-3.png);background-position:-1001px -1365px;width:90px;height:90px}.customize-option.broad_shirt_horizon{background-image:url(spritesmith-main-3.png);background-position:-1026px -1395px;width:60px;height:60px}.broad_shirt_ocean{background-image:url(spritesmith-main-3.png);background-position:-1092px -1365px;width:90px;height:90px}.customize-option.broad_shirt_ocean{background-image:url(spritesmith-main-3.png);background-position:-1117px -1395px;width:60px;height:60px}.broad_shirt_pink{background-image:url(spritesmith-main-3.png);background-position:-1458px 0;width:90px;height:90px}.customize-option.broad_shirt_pink{background-image:url(spritesmith-main-3.png);background-position:-1483px -30px;width:60px;height:60px}.broad_shirt_purple{background-image:url(spritesmith-main-3.png);background-position:-1458px -91px;width:90px;height:90px}.customize-option.broad_shirt_purple{background-image:url(spritesmith-main-3.png);background-position:-1483px -121px;width:60px;height:60px}.broad_shirt_rainbow{background-image:url(spritesmith-main-3.png);background-position:-1458px -273px;width:90px;height:90px}.customize-option.broad_shirt_rainbow{background-image:url(spritesmith-main-3.png);background-position:-1483px -303px;width:60px;height:60px}.broad_shirt_redblue{background-image:url(spritesmith-main-3.png);background-position:-1458px -546px;width:90px;height:90px}.customize-option.broad_shirt_redblue{background-image:url(spritesmith-main-3.png);background-position:-1483px -576px;width:60px;height:60px}.broad_shirt_thunder{background-image:url(spritesmith-main-3.png);background-position:-1458px -637px;width:90px;height:90px}.customize-option.broad_shirt_thunder{background-image:url(spritesmith-main-3.png);background-position:-1483px -667px;width:60px;height:60px}.broad_shirt_tropical{background-image:url(spritesmith-main-3.png);background-position:-1549px 0;width:90px;height:90px}.customize-option.broad_shirt_tropical{background-image:url(spritesmith-main-3.png);background-position:-1574px -30px;width:60px;height:60px}.broad_shirt_white{background-image:url(spritesmith-main-3.png);background-position:-1549px -91px;width:90px;height:90px}.customize-option.broad_shirt_white{background-image:url(spritesmith-main-3.png);background-position:-1574px -121px;width:60px;height:60px}.broad_shirt_yellow{background-image:url(spritesmith-main-3.png);background-position:-1549px -364px;width:90px;height:90px}.customize-option.broad_shirt_yellow{background-image:url(spritesmith-main-3.png);background-position:-1574px -394px;width:60px;height:60px}.broad_shirt_zombie{background-image:url(spritesmith-main-3.png);background-position:-1549px -455px;width:90px;height:90px}.customize-option.broad_shirt_zombie{background-image:url(spritesmith-main-3.png);background-position:-1574px -485px;width:60px;height:60px}.slim_shirt_black{background-image:url(spritesmith-main-3.png);background-position:-1549px -819px;width:90px;height:90px}.customize-option.slim_shirt_black{background-image:url(spritesmith-main-3.png);background-position:-1574px -849px;width:60px;height:60px}.slim_shirt_blue{background-image:url(spritesmith-main-3.png);background-position:-1549px -910px;width:90px;height:90px}.customize-option.slim_shirt_blue{background-image:url(spritesmith-main-3.png);background-position:-1574px -940px;width:60px;height:60px}.slim_shirt_convict{background-image:url(spritesmith-main-3.png);background-position:-1549px -1092px;width:90px;height:90px}.customize-option.slim_shirt_convict{background-image:url(spritesmith-main-3.png);background-position:-1574px -1122px;width:60px;height:60px}.slim_shirt_cross{background-image:url(spritesmith-main-3.png);background-position:-1549px -1183px;width:90px;height:90px}.customize-option.slim_shirt_cross{background-image:url(spritesmith-main-3.png);background-position:-1574px -1213px;width:60px;height:60px}.slim_shirt_fire{background-image:url(spritesmith-main-3.png);background-position:-545px -182px;width:90px;height:90px}.customize-option.slim_shirt_fire{background-image:url(spritesmith-main-3.png);background-position:-570px -212px;width:60px;height:60px}.slim_shirt_green{background-image:url(spritesmith-main-3.png);background-position:-545px -273px;width:90px;height:90px}.customize-option.slim_shirt_green{background-image:url(spritesmith-main-3.png);background-position:-570px -303px;width:60px;height:60px}.slim_shirt_horizon{background-image:url(spritesmith-main-3.png);background-position:-545px -364px;width:90px;height:90px}.customize-option.slim_shirt_horizon{background-image:url(spritesmith-main-3.png);background-position:-570px -394px;width:60px;height:60px}.slim_shirt_ocean{background-image:url(spritesmith-main-3.png);background-position:0 -455px;width:90px;height:90px}.customize-option.slim_shirt_ocean{background-image:url(spritesmith-main-3.png);background-position:-25px -485px;width:60px;height:60px}.slim_shirt_pink{background-image:url(spritesmith-main-3.png);background-position:-91px -455px;width:90px;height:90px}.customize-option.slim_shirt_pink{background-image:url(spritesmith-main-3.png);background-position:-116px -485px;width:60px;height:60px}.slim_shirt_purple{background-image:url(spritesmith-main-3.png);background-position:-182px -455px;width:90px;height:90px}.customize-option.slim_shirt_purple{background-image:url(spritesmith-main-3.png);background-position:-207px -485px;width:60px;height:60px}.slim_shirt_rainbow{background-image:url(spritesmith-main-3.png);background-position:-273px -455px;width:90px;height:90px}.customize-option.slim_shirt_rainbow{background-image:url(spritesmith-main-3.png);background-position:-298px -485px;width:60px;height:60px}.slim_shirt_redblue{background-image:url(spritesmith-main-3.png);background-position:-364px -455px;width:90px;height:90px}.customize-option.slim_shirt_redblue{background-image:url(spritesmith-main-3.png);background-position:-389px -485px;width:60px;height:60px}.slim_shirt_thunder{background-image:url(spritesmith-main-3.png);background-position:-455px -455px;width:90px;height:90px}.customize-option.slim_shirt_thunder{background-image:url(spritesmith-main-3.png);background-position:-480px -485px;width:60px;height:60px}.slim_shirt_tropical{background-image:url(spritesmith-main-3.png);background-position:-546px -455px;width:90px;height:90px}.customize-option.slim_shirt_tropical{background-image:url(spritesmith-main-3.png);background-position:-571px -485px;width:60px;height:60px}.slim_shirt_white{background-image:url(spritesmith-main-3.png);background-position:0 -546px;width:90px;height:90px}.customize-option.slim_shirt_white{background-image:url(spritesmith-main-3.png);background-position:-25px -576px;width:60px;height:60px}.slim_shirt_yellow{background-image:url(spritesmith-main-3.png);background-position:-91px -546px;width:90px;height:90px}.customize-option.slim_shirt_yellow{background-image:url(spritesmith-main-3.png);background-position:-116px -576px;width:60px;height:60px}.slim_shirt_zombie{background-image:url(spritesmith-main-3.png);background-position:-182px -546px;width:90px;height:90px}.customize-option.slim_shirt_zombie{background-image:url(spritesmith-main-3.png);background-position:-207px -576px;width:60px;height:60px}.skin_0ff591{background-image:url(spritesmith-main-3.png);background-position:-273px -546px;width:90px;height:90px}.customize-option.skin_0ff591{background-image:url(spritesmith-main-3.png);background-position:-298px -561px;width:60px;height:60px}.skin_0ff591_sleep{background-image:url(spritesmith-main-3.png);background-position:-364px -546px;width:90px;height:90px}.customize-option.skin_0ff591_sleep{background-image:url(spritesmith-main-3.png);background-position:-389px -561px;width:60px;height:60px}.skin_2b43f6{background-image:url(spritesmith-main-3.png);background-position:-455px -546px;width:90px;height:90px}.customize-option.skin_2b43f6{background-image:url(spritesmith-main-3.png);background-position:-480px -561px;width:60px;height:60px}.skin_2b43f6_sleep{background-image:url(spritesmith-main-3.png);background-position:-546px -546px;width:90px;height:90px}.customize-option.skin_2b43f6_sleep{background-image:url(spritesmith-main-3.png);background-position:-571px -561px;width:60px;height:60px}.skin_6bd049{background-image:url(spritesmith-main-3.png);background-position:-639px 0;width:90px;height:90px}.customize-option.skin_6bd049{background-image:url(spritesmith-main-3.png);background-position:-664px -15px;width:60px;height:60px}.skin_6bd049_sleep{background-image:url(spritesmith-main-3.png);background-position:-639px -91px;width:90px;height:90px}.customize-option.skin_6bd049_sleep{background-image:url(spritesmith-main-3.png);background-position:-664px -106px;width:60px;height:60px}.skin_800ed0{background-image:url(spritesmith-main-3.png);background-position:-639px -182px;width:90px;height:90px}.customize-option.skin_800ed0{background-image:url(spritesmith-main-3.png);background-position:-664px -197px;width:60px;height:60px}.skin_800ed0_sleep{background-image:url(spritesmith-main-3.png);background-position:-639px -273px;width:90px;height:90px}.customize-option.skin_800ed0_sleep{background-image:url(spritesmith-main-3.png);background-position:-664px -288px;width:60px;height:60px}.skin_915533{background-image:url(spritesmith-main-3.png);background-position:-639px -364px;width:90px;height:90px}.customize-option.skin_915533{background-image:url(spritesmith-main-3.png);background-position:-664px -379px;width:60px;height:60px}.skin_915533_sleep{background-image:url(spritesmith-main-3.png);background-position:-639px -455px;width:90px;height:90px}.customize-option.skin_915533_sleep{background-image:url(spritesmith-main-3.png);background-position:-664px -470px;width:60px;height:60px}.skin_98461a{background-image:url(spritesmith-main-3.png);background-position:-639px -546px;width:90px;height:90px}.customize-option.skin_98461a{background-image:url(spritesmith-main-3.png);background-position:-664px -561px;width:60px;height:60px}.skin_98461a_sleep{background-image:url(spritesmith-main-3.png);background-position:0 -637px;width:90px;height:90px}.customize-option.skin_98461a_sleep{background-image:url(spritesmith-main-3.png);background-position:-25px -652px;width:60px;height:60px}.skin_bear{background-image:url(spritesmith-main-3.png);background-position:-91px -637px;width:90px;height:90px}.customize-option.skin_bear{background-image:url(spritesmith-main-3.png);background-position:-116px -652px;width:60px;height:60px}.skin_bear_sleep{background-image:url(spritesmith-main-3.png);background-position:-182px -637px;width:90px;height:90px}.customize-option.skin_bear_sleep{background-image:url(spritesmith-main-3.png);background-position:-207px -652px;width:60px;height:60px}.skin_c06534{background-image:url(spritesmith-main-3.png);background-position:-273px -637px;width:90px;height:90px}.customize-option.skin_c06534{background-image:url(spritesmith-main-3.png);background-position:-298px -652px;width:60px;height:60px}.skin_c06534_sleep{background-image:url(spritesmith-main-3.png);background-position:-364px -637px;width:90px;height:90px}.customize-option.skin_c06534_sleep{background-image:url(spritesmith-main-3.png);background-position:-389px -652px;width:60px;height:60px}.skin_c3e1dc{background-image:url(spritesmith-main-3.png);background-position:-455px -637px;width:90px;height:90px}.customize-option.skin_c3e1dc{background-image:url(spritesmith-main-3.png);background-position:-480px -652px;width:60px;height:60px}.skin_c3e1dc_sleep{background-image:url(spritesmith-main-3.png);background-position:-546px -637px;width:90px;height:90px}.customize-option.skin_c3e1dc_sleep{background-image:url(spritesmith-main-3.png);background-position:-571px -652px;width:60px;height:60px}.skin_cactus{background-image:url(spritesmith-main-3.png);background-position:-637px -637px;width:90px;height:90px}.customize-option.skin_cactus{background-image:url(spritesmith-main-3.png);background-position:-662px -652px;width:60px;height:60px}.skin_cactus_sleep{background-image:url(spritesmith-main-3.png);background-position:-730px 0;width:90px;height:90px}.customize-option.skin_cactus_sleep{background-image:url(spritesmith-main-3.png);background-position:-755px -15px;width:60px;height:60px}.skin_candycorn{background-image:url(spritesmith-main-3.png);background-position:-730px -91px;width:90px;height:90px}.customize-option.skin_candycorn{background-image:url(spritesmith-main-3.png);background-position:-755px -106px;width:60px;height:60px}.skin_candycorn_sleep{background-image:url(spritesmith-main-3.png);background-position:-730px -182px;width:90px;height:90px}.customize-option.skin_candycorn_sleep{background-image:url(spritesmith-main-3.png);background-position:-755px -197px;width:60px;height:60px}.skin_clownfish{background-image:url(spritesmith-main-3.png);background-position:-730px -273px;width:90px;height:90px}.customize-option.skin_clownfish{background-image:url(spritesmith-main-3.png);background-position:-755px -288px;width:60px;height:60px}.skin_clownfish_sleep{background-image:url(spritesmith-main-3.png);background-position:-730px -364px;width:90px;height:90px}.customize-option.skin_clownfish_sleep{background-image:url(spritesmith-main-3.png);background-position:-755px -379px;width:60px;height:60px}.skin_d7a9f7{background-image:url(spritesmith-main-3.png);background-position:-730px -455px;width:90px;height:90px}.customize-option.skin_d7a9f7{background-image:url(spritesmith-main-3.png);background-position:-755px -470px;width:60px;height:60px}.skin_d7a9f7_sleep{background-image:url(spritesmith-main-3.png);background-position:-730px -546px;width:90px;height:90px}.customize-option.skin_d7a9f7_sleep{background-image:url(spritesmith-main-3.png);background-position:-755px -561px;width:60px;height:60px}.skin_ddc994{background-image:url(spritesmith-main-3.png);background-position:-730px -637px;width:90px;height:90px}.customize-option.skin_ddc994{background-image:url(spritesmith-main-3.png);background-position:-755px -652px;width:60px;height:60px}.skin_ddc994_sleep{background-image:url(spritesmith-main-3.png);background-position:0 -728px;width:90px;height:90px}.customize-option.skin_ddc994_sleep{background-image:url(spritesmith-main-3.png);background-position:-25px -743px;width:60px;height:60px}.skin_deepocean{background-image:url(spritesmith-main-3.png);background-position:-91px -728px;width:90px;height:90px}.customize-option.skin_deepocean{background-image:url(spritesmith-main-3.png);background-position:-116px -743px;width:60px;height:60px}.skin_deepocean_sleep{background-image:url(spritesmith-main-3.png);background-position:-182px -728px;width:90px;height:90px}.customize-option.skin_deepocean_sleep{background-image:url(spritesmith-main-3.png);background-position:-207px -743px;width:60px;height:60px}.skin_ea8349{background-image:url(spritesmith-main-3.png);background-position:-273px -728px;width:90px;height:90px}.customize-option.skin_ea8349{background-image:url(spritesmith-main-3.png);background-position:-298px -743px;width:60px;height:60px}.skin_ea8349_sleep{background-image:url(spritesmith-main-3.png);background-position:-364px -728px;width:90px;height:90px}.customize-option.skin_ea8349_sleep{background-image:url(spritesmith-main-3.png);background-position:-389px -743px;width:60px;height:60px}.skin_eb052b{background-image:url(spritesmith-main-3.png);background-position:-455px -728px;width:90px;height:90px}.customize-option.skin_eb052b{background-image:url(spritesmith-main-3.png);background-position:-480px -743px;width:60px;height:60px}.skin_eb052b_sleep{background-image:url(spritesmith-main-3.png);background-position:-546px -728px;width:90px;height:90px}.customize-option.skin_eb052b_sleep{background-image:url(spritesmith-main-3.png);background-position:-571px -743px;width:60px;height:60px}.skin_f5a76e{background-image:url(spritesmith-main-3.png);background-position:-637px -728px;width:90px;height:90px}.customize-option.skin_f5a76e{background-image:url(spritesmith-main-3.png);background-position:-662px -743px;width:60px;height:60px}.skin_f5a76e_sleep{background-image:url(spritesmith-main-3.png);background-position:-728px -728px;width:90px;height:90px}.customize-option.skin_f5a76e_sleep{background-image:url(spritesmith-main-3.png);background-position:-753px -743px;width:60px;height:60px}.skin_f5d70f{background-image:url(spritesmith-main-3.png);background-position:-821px 0;width:90px;height:90px}.customize-option.skin_f5d70f{background-image:url(spritesmith-main-3.png);background-position:-846px -15px;width:60px;height:60px}.skin_f5d70f_sleep{background-image:url(spritesmith-main-3.png);background-position:-821px -91px;width:90px;height:90px}.customize-option.skin_f5d70f_sleep{background-image:url(spritesmith-main-3.png);background-position:-846px -106px;width:60px;height:60px}.skin_f69922{background-image:url(spritesmith-main-3.png);background-position:-821px -182px;width:90px;height:90px}.customize-option.skin_f69922{background-image:url(spritesmith-main-3.png);background-position:-846px -197px;width:60px;height:60px}.skin_f69922_sleep{background-image:url(spritesmith-main-3.png);background-position:-821px -273px;width:90px;height:90px}.customize-option.skin_f69922_sleep{background-image:url(spritesmith-main-3.png);background-position:-846px -288px;width:60px;height:60px}.skin_fox{background-image:url(spritesmith-main-3.png);background-position:-821px -364px;width:90px;height:90px}.customize-option.skin_fox{background-image:url(spritesmith-main-3.png);background-position:-846px -379px;width:60px;height:60px}.skin_fox_sleep{background-image:url(spritesmith-main-3.png);background-position:-821px -455px;width:90px;height:90px}.customize-option.skin_fox_sleep{background-image:url(spritesmith-main-3.png);background-position:-846px -470px;width:60px;height:60px}.skin_ghost{background-image:url(spritesmith-main-3.png);background-position:-821px -546px;width:90px;height:90px}.customize-option.skin_ghost{background-image:url(spritesmith-main-3.png);background-position:-846px -561px;width:60px;height:60px}.skin_ghost_sleep{background-image:url(spritesmith-main-3.png);background-position:-821px -637px;width:90px;height:90px}.customize-option.skin_ghost_sleep{background-image:url(spritesmith-main-3.png);background-position:-846px -652px;width:60px;height:60px}.skin_lion{background-image:url(spritesmith-main-3.png);background-position:-821px -728px;width:90px;height:90px}.customize-option.skin_lion{background-image:url(spritesmith-main-3.png);background-position:-846px -743px;width:60px;height:60px}.skin_lion_sleep{background-image:url(spritesmith-main-3.png);background-position:0 -819px;width:90px;height:90px}.customize-option.skin_lion_sleep{background-image:url(spritesmith-main-3.png);background-position:-25px -834px;width:60px;height:60px}.skin_merblue{background-image:url(spritesmith-main-3.png);background-position:-91px -819px;width:90px;height:90px}.customize-option.skin_merblue{background-image:url(spritesmith-main-3.png);background-position:-116px -834px;width:60px;height:60px}.skin_merblue_sleep{background-image:url(spritesmith-main-3.png);background-position:-182px -819px;width:90px;height:90px}.customize-option.skin_merblue_sleep{background-image:url(spritesmith-main-3.png);background-position:-207px -834px;width:60px;height:60px}.skin_mergold{background-image:url(spritesmith-main-3.png);background-position:-273px -819px;width:90px;height:90px}.customize-option.skin_mergold{background-image:url(spritesmith-main-3.png);background-position:-298px -834px;width:60px;height:60px}.skin_mergold_sleep{background-image:url(spritesmith-main-3.png);background-position:-364px -819px;width:90px;height:90px}.customize-option.skin_mergold_sleep{background-image:url(spritesmith-main-3.png);background-position:-389px -834px;width:60px;height:60px}.skin_mergreen{background-image:url(spritesmith-main-3.png);background-position:-455px -819px;width:90px;height:90px}.customize-option.skin_mergreen{background-image:url(spritesmith-main-3.png);background-position:-480px -834px;width:60px;height:60px}.skin_mergreen_sleep{background-image:url(spritesmith-main-3.png);background-position:-546px -819px;width:90px;height:90px}.customize-option.skin_mergreen_sleep{background-image:url(spritesmith-main-3.png);background-position:-571px -834px;width:60px;height:60px}.skin_merruby{background-image:url(spritesmith-main-3.png);background-position:-637px -819px;width:90px;height:90px}.customize-option.skin_merruby{background-image:url(spritesmith-main-3.png);background-position:-662px -834px;width:60px;height:60px}.skin_merruby_sleep{background-image:url(spritesmith-main-3.png);background-position:-728px -819px;width:90px;height:90px}.customize-option.skin_merruby_sleep{background-image:url(spritesmith-main-3.png);background-position:-753px -834px;width:60px;height:60px}.skin_monster{background-image:url(spritesmith-main-3.png);background-position:-819px -819px;width:90px;height:90px}.customize-option.skin_monster{background-image:url(spritesmith-main-3.png);background-position:-844px -834px;width:60px;height:60px}.skin_monster_sleep{background-image:url(spritesmith-main-3.png);background-position:-912px 0;width:90px;height:90px}.customize-option.skin_monster_sleep{background-image:url(spritesmith-main-3.png);background-position:-937px -15px;width:60px;height:60px}.skin_ogre{background-image:url(spritesmith-main-3.png);background-position:-912px -91px;width:90px;height:90px}.customize-option.skin_ogre{background-image:url(spritesmith-main-3.png);background-position:-937px -106px;width:60px;height:60px}.skin_ogre_sleep{background-image:url(spritesmith-main-3.png);background-position:-912px -182px;width:90px;height:90px}.customize-option.skin_ogre_sleep{background-image:url(spritesmith-main-3.png);background-position:-937px -197px;width:60px;height:60px}.skin_panda{background-image:url(spritesmith-main-3.png);background-position:-912px -273px;width:90px;height:90px}.customize-option.skin_panda{background-image:url(spritesmith-main-3.png);background-position:-937px -288px;width:60px;height:60px}.skin_panda_sleep{background-image:url(spritesmith-main-3.png);background-position:-912px -364px;width:90px;height:90px}.customize-option.skin_panda_sleep{background-image:url(spritesmith-main-3.png);background-position:-937px -379px;width:60px;height:60px}.skin_pastelBlue{background-image:url(spritesmith-main-3.png);background-position:-912px -455px;width:90px;height:90px}.customize-option.skin_pastelBlue{background-image:url(spritesmith-main-3.png);background-position:-937px -470px;width:60px;height:60px}.skin_pastelBlue_sleep{background-image:url(spritesmith-main-3.png);background-position:-912px -546px;width:90px;height:90px}.customize-option.skin_pastelBlue_sleep{background-image:url(spritesmith-main-3.png);background-position:-937px -561px;width:60px;height:60px}.skin_pastelGreen{background-image:url(spritesmith-main-3.png);background-position:-912px -637px;width:90px;height:90px}.customize-option.skin_pastelGreen{background-image:url(spritesmith-main-3.png);background-position:-937px -652px;width:60px;height:60px}.skin_pastelGreen_sleep{background-image:url(spritesmith-main-3.png);background-position:-912px -728px;width:90px;height:90px}.customize-option.skin_pastelGreen_sleep{background-image:url(spritesmith-main-3.png);background-position:-937px -743px;width:60px;height:60px}.skin_pastelOrange{background-image:url(spritesmith-main-3.png);background-position:-912px -819px;width:90px;height:90px}.customize-option.skin_pastelOrange{background-image:url(spritesmith-main-3.png);background-position:-937px -834px;width:60px;height:60px}.skin_pastelOrange_sleep{background-image:url(spritesmith-main-3.png);background-position:0 -910px;width:90px;height:90px}.customize-option.skin_pastelOrange_sleep{background-image:url(spritesmith-main-3.png);background-position:-25px -925px;width:60px;height:60px}.skin_pastelPink{background-image:url(spritesmith-main-3.png);background-position:-91px -910px;width:90px;height:90px}.customize-option.skin_pastelPink{background-image:url(spritesmith-main-3.png);background-position:-116px -925px;width:60px;height:60px}.skin_pastelPink_sleep{background-image:url(spritesmith-main-3.png);background-position:-182px -910px;width:90px;height:90px}.customize-option.skin_pastelPink_sleep{background-image:url(spritesmith-main-3.png);background-position:-207px -925px;width:60px;height:60px}.skin_pastelPurple{background-image:url(spritesmith-main-3.png);background-position:-273px -910px;width:90px;height:90px}.customize-option.skin_pastelPurple{background-image:url(spritesmith-main-3.png);background-position:-298px -925px;width:60px;height:60px}.skin_pastelPurple_sleep{background-image:url(spritesmith-main-3.png);background-position:-364px -910px;width:90px;height:90px}.customize-option.skin_pastelPurple_sleep{background-image:url(spritesmith-main-3.png);background-position:-389px -925px;width:60px;height:60px}.skin_pastelRainbowChevron{background-image:url(spritesmith-main-3.png);background-position:-455px -910px;width:90px;height:90px}.customize-option.skin_pastelRainbowChevron{background-image:url(spritesmith-main-3.png);background-position:-480px -925px;width:60px;height:60px}.skin_pastelRainbowChevron_sleep{background-image:url(spritesmith-main-3.png);background-position:-546px -910px;width:90px;height:90px}.customize-option.skin_pastelRainbowChevron_sleep{background-image:url(spritesmith-main-3.png);background-position:-571px -925px;width:60px;height:60px}.skin_pastelRainbowDiagonal{background-image:url(spritesmith-main-3.png);background-position:-637px -910px;width:90px;height:90px}.customize-option.skin_pastelRainbowDiagonal{background-image:url(spritesmith-main-3.png);background-position:-662px -925px;width:60px;height:60px}.skin_pastelRainbowDiagonal_sleep{background-image:url(spritesmith-main-3.png);background-position:-728px -910px;width:90px;height:90px}.customize-option.skin_pastelRainbowDiagonal_sleep{background-image:url(spritesmith-main-3.png);background-position:-753px -925px;width:60px;height:60px}.skin_pastelYellow{background-image:url(spritesmith-main-3.png);background-position:-819px -910px;width:90px;height:90px}.customize-option.skin_pastelYellow{background-image:url(spritesmith-main-3.png);background-position:-844px -925px;width:60px;height:60px}.skin_pastelYellow_sleep{background-image:url(spritesmith-main-3.png);background-position:-910px -910px;width:90px;height:90px}.customize-option.skin_pastelYellow_sleep{background-image:url(spritesmith-main-3.png);background-position:-935px -925px;width:60px;height:60px}.skin_pig{background-image:url(spritesmith-main-3.png);background-position:-1003px 0;width:90px;height:90px}.customize-option.skin_pig{background-image:url(spritesmith-main-3.png);background-position:-1028px -15px;width:60px;height:60px}.skin_pig_sleep{background-image:url(spritesmith-main-3.png);background-position:-1003px -91px;width:90px;height:90px}.customize-option.skin_pig_sleep{background-image:url(spritesmith-main-3.png);background-position:-1028px -106px;width:60px;height:60px}.skin_pumpkin{background-image:url(spritesmith-main-3.png);background-position:-1003px -182px;width:90px;height:90px}.customize-option.skin_pumpkin{background-image:url(spritesmith-main-3.png);background-position:-1028px -197px;width:60px;height:60px}.skin_pumpkin2{background-image:url(spritesmith-main-3.png);background-position:-1003px -273px;width:90px;height:90px}.customize-option.skin_pumpkin2{background-image:url(spritesmith-main-3.png);background-position:-1028px -288px;width:60px;height:60px}.skin_pumpkin2_sleep{background-image:url(spritesmith-main-3.png);background-position:-1003px -364px;width:90px;height:90px}.customize-option.skin_pumpkin2_sleep{background-image:url(spritesmith-main-3.png);background-position:-1028px -379px;width:60px;height:60px}.skin_pumpkin_sleep{background-image:url(spritesmith-main-3.png);background-position:-1003px -455px;width:90px;height:90px}.customize-option.skin_pumpkin_sleep{background-image:url(spritesmith-main-3.png);background-position:-1028px -470px;width:60px;height:60px}.skin_rainbow{background-image:url(spritesmith-main-3.png);background-position:-1003px -546px;width:90px;height:90px}.customize-option.skin_rainbow{background-image:url(spritesmith-main-3.png);background-position:-1028px -561px;width:60px;height:60px}.skin_rainbow_sleep{background-image:url(spritesmith-main-3.png);background-position:-1003px -637px;width:90px;height:90px}.customize-option.skin_rainbow_sleep{background-image:url(spritesmith-main-3.png);background-position:-1028px -652px;width:60px;height:60px}.skin_reptile{background-image:url(spritesmith-main-3.png);background-position:-1003px -728px;width:90px;height:90px}.customize-option.skin_reptile{background-image:url(spritesmith-main-3.png);background-position:-1028px -743px;width:60px;height:60px}.skin_reptile_sleep{background-image:url(spritesmith-main-3.png);background-position:-1003px -819px;width:90px;height:90px}.customize-option.skin_reptile_sleep{background-image:url(spritesmith-main-3.png);background-position:-1028px -834px;width:60px;height:60px}.skin_shadow{background-image:url(spritesmith-main-3.png);background-position:-1003px -910px;width:90px;height:90px}.customize-option.skin_shadow{background-image:url(spritesmith-main-3.png);background-position:-1028px -925px;width:60px;height:60px}.skin_shadow2{background-image:url(spritesmith-main-3.png);background-position:0 -1001px;width:90px;height:90px}.customize-option.skin_shadow2{background-image:url(spritesmith-main-3.png);background-position:-25px -1016px;width:60px;height:60px}.skin_shadow2_sleep{background-image:url(spritesmith-main-3.png);background-position:-91px -1001px;width:90px;height:90px}.customize-option.skin_shadow2_sleep{background-image:url(spritesmith-main-3.png);background-position:-116px -1016px;width:60px;height:60px}.skin_shadow_sleep{background-image:url(spritesmith-main-3.png);background-position:-182px -1001px;width:90px;height:90px}.customize-option.skin_shadow_sleep{background-image:url(spritesmith-main-3.png);background-position:-207px -1016px;width:60px;height:60px}.skin_shark{background-image:url(spritesmith-main-3.png);background-position:-273px -1001px;width:90px;height:90px}.customize-option.skin_shark{background-image:url(spritesmith-main-3.png);background-position:-298px -1016px;width:60px;height:60px}.skin_shark_sleep{background-image:url(spritesmith-main-3.png);background-position:-364px -1001px;width:90px;height:90px}.customize-option.skin_shark_sleep{background-image:url(spritesmith-main-3.png);background-position:-389px -1016px;width:60px;height:60px}.skin_skeleton{background-image:url(spritesmith-main-3.png);background-position:-455px -1001px;width:90px;height:90px}.customize-option.skin_skeleton{background-image:url(spritesmith-main-3.png);background-position:-480px -1016px;width:60px;height:60px}.skin_skeleton2{background-image:url(spritesmith-main-3.png);background-position:-546px -1001px;width:90px;height:90px}.customize-option.skin_skeleton2{background-image:url(spritesmith-main-3.png);background-position:-571px -1016px;width:60px;height:60px}.skin_skeleton2_sleep{background-image:url(spritesmith-main-3.png);background-position:-637px -1001px;width:90px;height:90px}.customize-option.skin_skeleton2_sleep{background-image:url(spritesmith-main-3.png);background-position:-662px -1016px;width:60px;height:60px}.skin_skeleton_sleep{background-image:url(spritesmith-main-3.png);background-position:-728px -1001px;width:90px;height:90px}.customize-option.skin_skeleton_sleep{background-image:url(spritesmith-main-3.png);background-position:-753px -1016px;width:60px;height:60px}.skin_tiger{background-image:url(spritesmith-main-3.png);background-position:-819px -1001px;width:90px;height:90px}.customize-option.skin_tiger{background-image:url(spritesmith-main-3.png);background-position:-844px -1016px;width:60px;height:60px}.skin_tiger_sleep{background-image:url(spritesmith-main-3.png);background-position:-910px -1001px;width:90px;height:90px}.customize-option.skin_tiger_sleep{background-image:url(spritesmith-main-3.png);background-position:-935px -1016px;width:60px;height:60px}.skin_transparent{background-image:url(spritesmith-main-3.png);background-position:-1001px -1001px;width:90px;height:90px}.customize-option.skin_transparent{background-image:url(spritesmith-main-3.png);background-position:-1026px -1016px;width:60px;height:60px}.skin_transparent_sleep{background-image:url(spritesmith-main-3.png);background-position:-1094px 0;width:90px;height:90px}.customize-option.skin_transparent_sleep{background-image:url(spritesmith-main-3.png);background-position:-1119px -15px;width:60px;height:60px}.skin_tropicalwater{background-image:url(spritesmith-main-3.png);background-position:-1094px -91px;width:90px;height:90px}.customize-option.skin_tropicalwater{background-image:url(spritesmith-main-3.png);background-position:-1119px -106px;width:60px;height:60px}.skin_tropicalwater_sleep{background-image:url(spritesmith-main-3.png);background-position:-1094px -182px;width:90px;height:90px}.customize-option.skin_tropicalwater_sleep{background-image:url(spritesmith-main-3.png);background-position:-1119px -197px;width:60px;height:60px}.skin_wolf{background-image:url(spritesmith-main-3.png);background-position:-1094px -273px;width:90px;height:90px}.customize-option.skin_wolf{background-image:url(spritesmith-main-3.png);background-position:-1119px -288px;width:60px;height:60px}.skin_wolf_sleep{background-image:url(spritesmith-main-3.png);background-position:-1094px -364px;width:90px;height:90px}.customize-option.skin_wolf_sleep{background-image:url(spritesmith-main-3.png);background-position:-1119px -379px;width:60px;height:60px}.skin_zombie{background-image:url(spritesmith-main-3.png);background-position:-1094px -455px;width:90px;height:90px}.customize-option.skin_zombie{background-image:url(spritesmith-main-3.png);background-position:-1119px -470px;width:60px;height:60px}.skin_zombie2{background-image:url(spritesmith-main-3.png);background-position:-1094px -546px;width:90px;height:90px}.customize-option.skin_zombie2{background-image:url(spritesmith-main-3.png);background-position:-1119px -561px;width:60px;height:60px}.skin_zombie2_sleep{background-image:url(spritesmith-main-3.png);background-position:-1094px -637px;width:90px;height:90px}.customize-option.skin_zombie2_sleep{background-image:url(spritesmith-main-3.png);background-position:-1119px -652px;width:60px;height:60px}.skin_zombie_sleep{background-image:url(spritesmith-main-3.png);background-position:-1094px -728px;width:90px;height:90px}.customize-option.skin_zombie_sleep{background-image:url(spritesmith-main-3.png);background-position:-1119px -743px;width:60px;height:60px}.broad_armor_armoire_gladiatorArmor{background-image:url(spritesmith-main-3.png);background-position:-1094px -819px;width:90px;height:90px}.broad_armor_armoire_goldenToga{background-image:url(spritesmith-main-3.png);background-position:-1094px -910px;width:90px;height:90px}.broad_armor_armoire_hornedIronArmor{background-image:url(spritesmith-main-3.png);background-position:-1094px -1001px;width:90px;height:90px}.broad_armor_armoire_lunarArmor{background-image:url(spritesmith-main-3.png);background-position:0 -1092px;width:90px;height:90px}.broad_armor_armoire_plagueDoctorOvercoat{background-image:url(spritesmith-main-3.png);background-position:-91px -1092px;width:90px;height:90px}.broad_armor_armoire_rancherRobes{background-image:url(spritesmith-main-3.png);background-position:-182px -1092px;width:90px;height:90px}.eyewear_armoire_plagueDoctorMask{background-image:url(spritesmith-main-3.png);background-position:-273px -1092px;width:90px;height:90px}.head_armoire_blackCat{background-image:url(spritesmith-main-3.png);background-position:-364px -1092px;width:90px;height:90px}.head_armoire_blueHairbow{background-image:url(spritesmith-main-3.png);background-position:-455px -1092px;width:90px;height:90px}.head_armoire_gladiatorHelm{background-image:url(spritesmith-main-3.png);background-position:-546px -1092px;width:90px;height:90px}.head_armoire_goldenLaurels{background-image:url(spritesmith-main-3.png);background-position:-637px -1092px;width:90px;height:90px}.head_armoire_hornedIronHelm{background-image:url(spritesmith-main-3.png);background-position:-728px -1092px;width:90px;height:90px}.head_armoire_lunarCrown{background-image:url(spritesmith-main-3.png);background-position:-819px -1092px;width:90px;height:90px}.head_armoire_orangeCat{background-image:url(spritesmith-main-3.png);background-position:-910px -1092px;width:90px;height:90px}.head_armoire_plagueDoctorHat{background-image:url(spritesmith-main-3.png);background-position:-1001px -1092px;width:90px;height:90px}.head_armoire_rancherHat{background-image:url(spritesmith-main-3.png);background-position:-1092px -1092px;width:90px;height:90px}.head_armoire_redFloppyHat{background-image:url(spritesmith-main-3.png);background-position:-1185px 0;width:90px;height:90px}.head_armoire_redHairbow{background-image:url(spritesmith-main-3.png);background-position:-1185px -91px;width:90px;height:90px}.head_armoire_royalCrown{background-image:url(spritesmith-main-3.png);background-position:-1185px -182px;width:90px;height:90px}.head_armoire_violetFloppyHat{background-image:url(spritesmith-main-3.png);background-position:-1185px -273px;width:90px;height:90px}.head_armoire_yellowHairbow{background-image:url(spritesmith-main-3.png);background-position:-1185px -364px;width:90px;height:90px}.shield_armoire_gladiatorShield{background-image:url(spritesmith-main-3.png);background-position:-1185px -455px;width:90px;height:90px}.shield_armoire_midnightShield{background-image:url(spritesmith-main-3.png);background-position:-1185px -546px;width:90px;height:90px}.shop_armor_armoire_gladiatorArmor{background-image:url(spritesmith-main-3.png);background-position:-1640px -820px;width:40px;height:40px}.shop_armor_armoire_goldenToga{background-image:url(spritesmith-main-3.png);background-position:-1640px -779px;width:40px;height:40px}.shop_armor_armoire_hornedIronArmor{background-image:url(spritesmith-main-3.png);background-position:-1640px -656px;width:40px;height:40px}.shop_armor_armoire_lunarArmor{background-image:url(spritesmith-main-3.png);background-position:-1640px -615px;width:40px;height:40px}.shop_armor_armoire_plagueDoctorOvercoat{background-image:url(spritesmith-main-3.png);background-position:-1640px -574px;width:40px;height:40px}.shop_armor_armoire_rancherRobes{background-image:url(spritesmith-main-3.png);background-position:-1640px -451px;width:40px;height:40px}.shop_eyewear_armoire_plagueDoctorMask{background-image:url(spritesmith-main-3.png);background-position:-1640px -410px;width:40px;height:40px}.shop_head_armoire_blackCat{background-image:url(spritesmith-main-3.png);background-position:-1640px -369px;width:40px;height:40px}.shop_head_armoire_blueHairbow{background-image:url(spritesmith-main-3.png);background-position:-1640px -246px;width:40px;height:40px}.shop_head_armoire_gladiatorHelm{background-image:url(spritesmith-main-3.png);background-position:-1640px -205px;width:40px;height:40px}.shop_head_armoire_goldenLaurels{background-image:url(spritesmith-main-3.png);background-position:-1640px -164px;width:40px;height:40px}.shop_head_armoire_hornedIronHelm{background-image:url(spritesmith-main-3.png);background-position:-1640px -41px;width:40px;height:40px}.shop_head_armoire_lunarCrown{background-image:url(spritesmith-main-3.png);background-position:-1640px 0;width:40px;height:40px}.shop_head_armoire_orangeCat{background-image:url(spritesmith-main-3.png);background-position:-1599px -1588px;width:40px;height:40px}.shop_head_armoire_plagueDoctorHat{background-image:url(spritesmith-main-3.png);background-position:-1476px -1588px;width:40px;height:40px}.shop_head_armoire_rancherHat{background-image:url(spritesmith-main-3.png);background-position:-1435px -1588px;width:40px;height:40px}.shop_head_armoire_redFloppyHat{background-image:url(spritesmith-main-3.png);background-position:-1394px -1588px;width:40px;height:40px}.shop_head_armoire_redHairbow{background-image:url(spritesmith-main-3.png);background-position:-1271px -1588px;width:40px;height:40px}.shop_head_armoire_royalCrown{background-image:url(spritesmith-main-3.png);background-position:-1230px -1588px;width:40px;height:40px}.shop_head_armoire_violetFloppyHat{background-image:url(spritesmith-main-3.png);background-position:-1107px -1588px;width:40px;height:40px}.shop_head_armoire_yellowHairbow{background-image:url(spritesmith-main-3.png);background-position:-1066px -1588px;width:40px;height:40px}.shop_shield_armoire_gladiatorShield{background-image:url(spritesmith-main-3.png);background-position:-1025px -1588px;width:40px;height:40px}.shop_shield_armoire_midnightShield{background-image:url(spritesmith-main-3.png);background-position:-902px -1588px;width:40px;height:40px}.shop_weapon_armoire_basicCrossbow{background-image:url(spritesmith-main-3.png);background-position:-861px -1588px;width:40px;height:40px}.shop_weapon_armoire_batWand{background-image:url(spritesmith-main-3.png);background-position:-820px -1588px;width:40px;height:40px}.shop_weapon_armoire_goldWingStaff{background-image:url(spritesmith-main-3.png);background-position:-656px -1588px;width:40px;height:40px}.shop_weapon_armoire_ironCrook{background-image:url(spritesmith-main-3.png);background-position:-615px -1588px;width:40px;height:40px}.shop_weapon_armoire_lunarSceptre{background-image:url(spritesmith-main-3.png);background-position:-574px -1588px;width:40px;height:40px}.shop_weapon_armoire_mythmakerSword{background-image:url(spritesmith-main-3.png);background-position:-533px -1588px;width:40px;height:40px}.shop_weapon_armoire_rancherLasso{background-image:url(spritesmith-main-3.png);background-position:-410px -1588px;width:40px;height:40px}.slim_armor_armoire_gladiatorArmor{background-image:url(spritesmith-main-3.png);background-position:-1276px -910px;width:90px;height:90px}.slim_armor_armoire_goldenToga{background-image:url(spritesmith-main-3.png);background-position:-1276px -1001px;width:90px;height:90px}.slim_armor_armoire_hornedIronArmor{background-image:url(spritesmith-main-3.png);background-position:-1276px -1092px;width:90px;height:90px}.slim_armor_armoire_lunarArmor{background-image:url(spritesmith-main-3.png);background-position:-1276px -1183px;width:90px;height:90px}.slim_armor_armoire_plagueDoctorOvercoat{background-image:url(spritesmith-main-3.png);background-position:-545px -91px;width:90px;height:90px}.slim_armor_armoire_rancherRobes{background-image:url(spritesmith-main-3.png);background-position:-91px -1274px;width:90px;height:90px}.weapon_armoire_basicCrossbow{background-image:url(spritesmith-main-3.png);background-position:-182px -1274px;width:90px;height:90px}.weapon_armoire_batWand{background-image:url(spritesmith-main-3.png);background-position:-273px -1274px;width:90px;height:90px}.weapon_armoire_goldWingStaff{background-image:url(spritesmith-main-3.png);background-position:-364px -1274px;width:90px;height:90px}.weapon_armoire_ironCrook{background-image:url(spritesmith-main-3.png);background-position:-455px -1274px;width:90px;height:90px}.weapon_armoire_lunarSceptre{background-image:url(spritesmith-main-3.png);background-position:-546px -1274px;width:90px;height:90px}.weapon_armoire_mythmakerSword{background-image:url(spritesmith-main-3.png);background-position:-637px -1274px;width:90px;height:90px}.weapon_armoire_rancherLasso{background-image:url(spritesmith-main-3.png);background-position:-728px -1274px;width:90px;height:90px}.broad_armor_healer_1{background-image:url(spritesmith-main-3.png);background-position:-819px -1274px;width:90px;height:90px}.broad_armor_healer_2{background-image:url(spritesmith-main-3.png);background-position:-910px -1274px;width:90px;height:90px}.broad_armor_healer_3{background-image:url(spritesmith-main-3.png);background-position:-1001px -1274px;width:90px;height:90px}.broad_armor_healer_4{background-image:url(spritesmith-main-3.png);background-position:-1092px -1274px;width:90px;height:90px}.broad_armor_healer_5{background-image:url(spritesmith-main-3.png);background-position:-1183px -1274px;width:90px;height:90px}.broad_armor_rogue_1{background-image:url(spritesmith-main-3.png);background-position:-1274px -1274px;width:90px;height:90px}.broad_armor_rogue_2{background-image:url(spritesmith-main-3.png);background-position:-1367px 0;width:90px;height:90px}.broad_armor_rogue_3{background-image:url(spritesmith-main-3.png);background-position:-1367px -91px;width:90px;height:90px}.broad_armor_rogue_4{background-image:url(spritesmith-main-3.png);background-position:-1367px -182px;width:90px;height:90px}.broad_armor_rogue_5{background-image:url(spritesmith-main-3.png);background-position:-1367px -273px;width:90px;height:90px}.broad_armor_special_2{background-image:url(spritesmith-main-3.png);background-position:-1367px -364px;width:90px;height:90px}.broad_armor_special_finnedOceanicArmor{background-image:url(spritesmith-main-3.png);background-position:-1367px -455px;width:90px;height:90px}.broad_armor_warrior_1{background-image:url(spritesmith-main-3.png);background-position:-1367px -546px;width:90px;height:90px}.broad_armor_warrior_2{background-image:url(spritesmith-main-3.png);background-position:-1367px -637px;width:90px;height:90px}.broad_armor_warrior_3{background-image:url(spritesmith-main-3.png);background-position:-1367px -728px;width:90px;height:90px}.broad_armor_warrior_4{background-image:url(spritesmith-main-3.png);background-position:-1367px -819px;width:90px;height:90px}.broad_armor_warrior_5{background-image:url(spritesmith-main-3.png);background-position:-1367px -910px;width:90px;height:90px}.broad_armor_wizard_1{background-image:url(spritesmith-main-3.png);background-position:-1367px -1001px;width:90px;height:90px}.broad_armor_wizard_2{background-image:url(spritesmith-main-3.png);background-position:-1367px -1092px;width:90px;height:90px}.broad_armor_wizard_3{background-image:url(spritesmith-main-3.png);background-position:-1367px -1183px;width:90px;height:90px}.broad_armor_wizard_4{background-image:url(spritesmith-main-3.png);background-position:-1367px -1274px;width:90px;height:90px}.broad_armor_wizard_5{background-image:url(spritesmith-main-3.png);background-position:0 -1365px;width:90px;height:90px}.shop_armor_healer_1{background-image:url(spritesmith-main-3.png);background-position:-369px -1588px;width:40px;height:40px}.shop_armor_healer_2{background-image:url(spritesmith-main-3.png);background-position:-454px -291px;width:40px;height:40px}.shop_armor_healer_3{background-image:url(spritesmith-main-3.png);background-position:-287px -1588px;width:40px;height:40px}.shop_armor_healer_4{background-image:url(spritesmith-main-3.png);background-position:-246px -1588px;width:40px;height:40px}.shop_armor_healer_5{background-image:url(spritesmith-main-3.png);background-position:-205px -1588px;width:40px;height:40px}.shop_armor_rogue_1{background-image:url(spritesmith-main-3.png);background-position:-164px -1588px;width:40px;height:40px}.shop_armor_rogue_2{background-image:url(spritesmith-main-3.png);background-position:-123px -1588px;width:40px;height:40px}.shop_armor_rogue_3{background-image:url(spritesmith-main-3.png);background-position:-82px -1588px;width:40px;height:40px}.shop_armor_rogue_4{background-image:url(spritesmith-main-3.png);background-position:-41px -1588px;width:40px;height:40px}.shop_armor_rogue_5{background-image:url(spritesmith-main-3.png);background-position:0 -1588px;width:40px;height:40px}.shop_armor_special_0{background-image:url(spritesmith-main-3.png);background-position:-1599px -1547px;width:40px;height:40px}.shop_armor_special_1{background-image:url(spritesmith-main-3.png);background-position:-1558px -1547px;width:40px;height:40px}.shop_armor_special_2{background-image:url(spritesmith-main-3.png);background-position:-1517px -1547px;width:40px;height:40px}.shop_armor_special_finnedOceanicArmor{background-image:url(spritesmith-main-3.png);background-position:-1476px -1547px;width:40px;height:40px}.shop_armor_warrior_1{background-image:url(spritesmith-main-3.png);background-position:-1435px -1547px;width:40px;height:40px}.shop_armor_warrior_2{background-image:url(spritesmith-main-3.png);background-position:-1394px -1547px;width:40px;height:40px}.shop_armor_warrior_3{background-image:url(spritesmith-main-3.png);background-position:-1353px -1547px;width:40px;height:40px}.shop_armor_warrior_4{background-image:url(spritesmith-main-3.png);background-position:-82px -1547px;width:40px;height:40px}.shop_armor_warrior_5{background-image:url(spritesmith-main-3.png);background-position:-41px -1547px;width:40px;height:40px}.shop_armor_wizard_1{background-image:url(spritesmith-main-3.png);background-position:0 -1547px;width:40px;height:40px}.shop_armor_wizard_2{background-image:url(spritesmith-main-3.png);background-position:-470px -405px;width:40px;height:40px}.shop_armor_wizard_3{background-image:url(spritesmith-main-3.png);background-position:-470px -364px;width:40px;height:40px}.shop_armor_wizard_4{background-image:url(spritesmith-main-3.png);background-position:-400px -314px;width:40px;height:40px}.shop_armor_wizard_5{background-image:url(spritesmith-main-3.png);background-position:-400px -273px;width:40px;height:40px}.slim_armor_healer_1{background-image:url(spritesmith-main-3.png);background-position:-1458px -819px;width:90px;height:90px}.slim_armor_healer_2{background-image:url(spritesmith-main-3.png);background-position:-1458px -910px;width:90px;height:90px}.slim_armor_healer_3{background-image:url(spritesmith-main-3.png);background-position:-1458px -1001px;width:90px;height:90px}.slim_armor_healer_4{background-image:url(spritesmith-main-3.png);background-position:-1458px -1092px;width:90px;height:90px}.slim_armor_healer_5{background-image:url(spritesmith-main-3.png);background-position:-1458px -1183px;width:90px;height:90px}.slim_armor_rogue_1{background-image:url(spritesmith-main-3.png);background-position:-1458px -1274px;width:90px;height:90px}.slim_armor_rogue_2{background-image:url(spritesmith-main-3.png);background-position:-1458px -1365px;width:90px;height:90px}.slim_armor_rogue_3{background-image:url(spritesmith-main-3.png);background-position:0 -1456px;width:90px;height:90px}.slim_armor_rogue_4{background-image:url(spritesmith-main-3.png);background-position:-91px -1456px;width:90px;height:90px}.slim_armor_rogue_5{background-image:url(spritesmith-main-3.png);background-position:-182px -1456px;width:90px;height:90px}.slim_armor_special_2{background-image:url(spritesmith-main-3.png);background-position:-273px -1456px;width:90px;height:90px}.slim_armor_special_finnedOceanicArmor{background-image:url(spritesmith-main-3.png);background-position:-364px -1456px;width:90px;height:90px}.slim_armor_warrior_1{background-image:url(spritesmith-main-3.png);background-position:-455px -1456px;width:90px;height:90px}.slim_armor_warrior_2{background-image:url(spritesmith-main-3.png);background-position:-546px -1456px;width:90px;height:90px}.slim_armor_warrior_3{background-image:url(spritesmith-main-3.png);background-position:-637px -1456px;width:90px;height:90px}.slim_armor_warrior_4{background-image:url(spritesmith-main-3.png);background-position:-728px -1456px;width:90px;height:90px}.slim_armor_warrior_5{background-image:url(spritesmith-main-3.png);background-position:-819px -1456px;width:90px;height:90px}.slim_armor_wizard_1{background-image:url(spritesmith-main-3.png);background-position:-910px -1456px;width:90px;height:90px}.slim_armor_wizard_2{background-image:url(spritesmith-main-3.png);background-position:-1001px -1456px;width:90px;height:90px}.slim_armor_wizard_3{background-image:url(spritesmith-main-3.png);background-position:-1092px -1456px;width:90px;height:90px}.slim_armor_wizard_4{background-image:url(spritesmith-main-3.png);background-position:-1183px -1456px;width:90px;height:90px}.slim_armor_wizard_5{background-image:url(spritesmith-main-3.png);background-position:-1274px -1456px;width:90px;height:90px}.broad_armor_special_birthday{background-image:url(spritesmith-main-3.png);background-position:-1365px -1456px;width:90px;height:90px}.broad_armor_special_birthday2015{background-image:url(spritesmith-main-3.png);background-position:-1456px -1456px;width:90px;height:90px}.shop_armor_special_birthday{background-image:url(spritesmith-main-3.png);background-position:-328px -1588px;width:40px;height:40px}.shop_armor_special_birthday2015{background-image:url(spritesmith-main-3.png);background-position:-495px -291px;width:40px;height:40px}.slim_armor_special_birthday{background-image:url(spritesmith-main-3.png);background-position:-1549px -182px;width:90px;height:90px}.slim_armor_special_birthday2015{background-image:url(spritesmith-main-3.png);background-position:-1549px -273px;width:90px;height:90px}.broad_armor_special_fall2015Healer{background-image:url(spritesmith-main-3.png);background-position:-212px -273px;width:93px;height:90px}.broad_armor_special_fall2015Mage{background-image:url(spritesmith-main-3.png);background-position:0 -273px;width:105px;height:90px}.broad_armor_special_fall2015Rogue{background-image:url(spritesmith-main-3.png);background-position:-1549px -546px;width:90px;height:90px}.broad_armor_special_fall2015Warrior{background-image:url(spritesmith-main-3.png);background-position:-1549px -637px;width:90px;height:90px}.broad_armor_special_fallHealer{background-image:url(spritesmith-main-3.png);background-position:-1549px -728px;width:90px;height:90px}.broad_armor_special_fallMage{background-image:url(spritesmith-main-3.png);background-position:0 0;width:120px;height:90px}.broad_armor_special_fallRogue{background-image:url(spritesmith-main-3.png);background-position:-242px -91px;width:105px;height:90px}.broad_armor_special_fallWarrior{background-image:url(spritesmith-main-3.png);background-position:-1549px -1001px;width:90px;height:90px}.head_special_fall2015Healer{background-image:url(spritesmith-main-3.png);background-position:-545px 0;width:93px;height:90px}.head_special_fall2015Mage{background-image:url(spritesmith-main-3.png);background-position:-212px -182px;width:105px;height:90px}.head_special_fall2015Rogue{background-image:url(spritesmith-main-3.png);background-position:-1549px -1274px;width:90px;height:90px}.head_special_fall2015Warrior{background-image:url(spritesmith-main-3.png);background-position:-1549px -1365px;width:90px;height:90px}.head_special_fallHealer{background-image:url(spritesmith-main-3.png);background-position:-1549px -1456px;width:90px;height:90px}.head_special_fallMage{background-image:url(spritesmith-main-3.png);background-position:-121px 0;width:120px;height:90px}.head_special_fallRogue{background-image:url(spritesmith-main-3.png);background-position:0 -182px;width:105px;height:90px}.head_special_fallWarrior{background-image:url(spritesmith-main-3.png);background-position:-1458px -728px;width:90px;height:90px}.shield_special_fall2015Healer{background-image:url(spritesmith-main-3.png);background-position:-188px -364px;width:93px;height:90px}.shield_special_fall2015Rogue{background-image:url(spritesmith-main-3.png);background-position:-348px -91px;width:105px;height:90px}.shield_special_fall2015Warrior{background-image:url(spritesmith-main-3.png);background-position:-1458px -455px;width:90px;height:90px}.shield_special_fallHealer{background-image:url(spritesmith-main-3.png);background-position:-1458px -364px;width:90px;height:90px}.shield_special_fallRogue{background-image:url(spritesmith-main-3.png);background-position:-106px -273px;width:105px;height:90px}.shield_special_fallWarrior{background-image:url(spritesmith-main-3.png);background-position:-1458px -182px;width:90px;height:90px}.shop_armor_special_fall2015Healer{background-image:url(spritesmith-main-3.png);background-position:-123px -1547px;width:40px;height:40px}.shop_armor_special_fall2015Mage{background-image:url(spritesmith-main-3.png);background-position:-164px -1547px;width:40px;height:40px}.shop_armor_special_fall2015Rogue{background-image:url(spritesmith-main-3.png);background-position:-205px -1547px;width:40px;height:40px}.shop_armor_special_fall2015Warrior{background-image:url(spritesmith-main-3.png);background-position:-246px -1547px;width:40px;height:40px}.shop_armor_special_fallHealer{background-image:url(spritesmith-main-3.png);background-position:-287px -1547px;width:40px;height:40px}.shop_armor_special_fallMage{background-image:url(spritesmith-main-3.png);background-position:-328px -1547px;width:40px;height:40px}.shop_armor_special_fallRogue{background-image:url(spritesmith-main-3.png);background-position:-369px -1547px;width:40px;height:40px}.shop_armor_special_fallWarrior{background-image:url(spritesmith-main-3.png);background-position:-410px -1547px;width:40px;height:40px}.shop_head_special_fall2015Healer{background-image:url(spritesmith-main-3.png);background-position:-451px -1547px;width:40px;height:40px}.shop_head_special_fall2015Mage{background-image:url(spritesmith-main-3.png);background-position:-492px -1547px;width:40px;height:40px}.shop_head_special_fall2015Rogue{background-image:url(spritesmith-main-3.png);background-position:-533px -1547px;width:40px;height:40px}.shop_head_special_fall2015Warrior{background-image:url(spritesmith-main-3.png);background-position:-574px -1547px;width:40px;height:40px}.shop_head_special_fallHealer{background-image:url(spritesmith-main-3.png);background-position:-615px -1547px;width:40px;height:40px}.shop_head_special_fallMage{background-image:url(spritesmith-main-3.png);background-position:-656px -1547px;width:40px;height:40px}.shop_head_special_fallRogue{background-image:url(spritesmith-main-3.png);background-position:-697px -1547px;width:40px;height:40px}.shop_head_special_fallWarrior{background-image:url(spritesmith-main-3.png);background-position:-738px -1547px;width:40px;height:40px}.shop_shield_special_fall2015Healer{background-image:url(spritesmith-main-3.png);background-position:-779px -1547px;width:40px;height:40px}.shop_shield_special_fall2015Rogue{background-image:url(spritesmith-main-3.png);background-position:-820px -1547px;width:40px;height:40px}.shop_shield_special_fall2015Warrior{background-image:url(spritesmith-main-3.png);background-position:-861px -1547px;width:40px;height:40px}.shop_shield_special_fallHealer{background-image:url(spritesmith-main-3.png);background-position:-902px -1547px;width:40px;height:40px}.shop_shield_special_fallRogue{background-image:url(spritesmith-main-3.png);background-position:-943px -1547px;width:40px;height:40px}.shop_shield_special_fallWarrior{background-image:url(spritesmith-main-3.png);background-position:-984px -1547px;width:40px;height:40px}.shop_weapon_special_fall2015Healer{background-image:url(spritesmith-main-3.png);background-position:-1025px -1547px;width:40px;height:40px}.shop_weapon_special_fall2015Mage{background-image:url(spritesmith-main-3.png);background-position:-1066px -1547px;width:40px;height:40px}.shop_weapon_special_fall2015Rogue{background-image:url(spritesmith-main-3.png);background-position:-1107px -1547px;width:40px;height:40px}.shop_weapon_special_fall2015Warrior{background-image:url(spritesmith-main-3.png);background-position:-1148px -1547px;width:40px;height:40px}.shop_weapon_special_fallHealer{background-image:url(spritesmith-main-3.png);background-position:-1189px -1547px;width:40px;height:40px}.shop_weapon_special_fallMage{background-image:url(spritesmith-main-3.png);background-position:-1230px -1547px;width:40px;height:40px}.shop_weapon_special_fallRogue{background-image:url(spritesmith-main-3.png);background-position:-1271px -1547px;width:40px;height:40px}.shop_weapon_special_fallWarrior{background-image:url(spritesmith-main-3.png);background-position:-1312px -1547px;width:40px;height:40px}.slim_armor_special_fall2015Healer{background-image:url(spritesmith-main-3.png);background-position:-306px -273px;width:93px;height:90px}.slim_armor_special_fall2015Mage{background-image:url(spritesmith-main-3.png);background-position:-242px 0;width:105px;height:90px}.slim_armor_special_fall2015Rogue{background-image:url(spritesmith-main-3.png);background-position:-1365px -1365px;width:90px;height:90px}.slim_armor_special_fall2015Warrior{background-image:url(spritesmith-main-3.png);background-position:-1274px -1365px;width:90px;height:90px}.slim_armor_special_fallHealer{background-image:url(spritesmith-main-3.png);background-position:-1183px -1365px;width:90px;height:90px}.slim_armor_special_fallMage{background-image:url(spritesmith-main-3.png);background-position:-121px -91px;width:120px;height:90px}.slim_armor_special_fallRogue{background-image:url(spritesmith-main-3.png);background-position:-348px -182px;width:105px;height:90px}.slim_armor_special_fallWarrior{background-image:url(spritesmith-main-3.png);background-position:-910px -1365px;width:90px;height:90px}.weapon_special_fall2015Healer{background-image:url(spritesmith-main-3.png);background-position:0 -364px;width:93px;height:90px}.weapon_special_fall2015Mage{background-image:url(spritesmith-main-3.png);background-position:-348px 0;width:105px;height:90px}.weapon_special_fall2015Rogue{background-image:url(spritesmith-main-3.png);background-position:-637px -1365px;width:90px;height:90px}.weapon_special_fall2015Warrior{background-image:url(spritesmith-main-3.png);background-position:-546px -1365px;width:90px;height:90px}.weapon_special_fallHealer{background-image:url(spritesmith-main-3.png);background-position:-455px -1365px;width:90px;height:90px}.weapon_special_fallMage{background-image:url(spritesmith-main-3.png);background-position:0 -91px;width:120px;height:90px}.weapon_special_fallRogue{background-image:url(spritesmith-main-3.png);background-position:-106px -182px;width:105px;height:90px}.weapon_special_fallWarrior{background-image:url(spritesmith-main-3.png);background-position:-182px -1365px;width:90px;height:90px}.broad_armor_special_gaymerx{background-image:url(spritesmith-main-3.png);background-position:-91px -1365px;width:90px;height:90px}.head_special_gaymerx{background-image:url(spritesmith-main-3.png);background-position:-1276px -819px;width:90px;height:90px}.shop_armor_special_gaymerx{background-image:url(spritesmith-main-3.png);background-position:-451px -1588px;width:40px;height:40px}.shop_head_special_gaymerx{background-image:url(spritesmith-main-3.png);background-position:-492px -1588px;width:40px;height:40px}.slim_armor_special_gaymerx{background-image:url(spritesmith-main-3.png);background-position:-1276px -728px;width:90px;height:90px}.back_mystery_201402{background-image:url(spritesmith-main-3.png);background-position:-1276px -637px;width:90px;height:90px}.broad_armor_mystery_201402{background-image:url(spritesmith-main-3.png);background-position:-1276px -546px;width:90px;height:90px}.head_mystery_201402{background-image:url(spritesmith-main-3.png);background-position:-1276px -455px;width:90px;height:90px}.shop_armor_mystery_201402{background-image:url(spritesmith-main-3.png);background-position:-697px -1588px;width:40px;height:40px}.shop_back_mystery_201402{background-image:url(spritesmith-main-3.png);background-position:-738px -1588px;width:40px;height:40px}.shop_head_mystery_201402{background-image:url(spritesmith-main-3.png);background-position:-779px -1588px;width:40px;height:40px}.slim_armor_mystery_201402{background-image:url(spritesmith-main-3.png);background-position:-1276px -364px;width:90px;height:90px}.broad_armor_mystery_201403{background-image:url(spritesmith-main-3.png);background-position:-1276px -273px;width:90px;height:90px}.headAccessory_mystery_201403{background-image:url(spritesmith-main-3.png);background-position:-1276px -182px;width:90px;height:90px}.shop_armor_mystery_201403{background-image:url(spritesmith-main-3.png);background-position:-943px -1588px;width:40px;height:40px}.shop_headAccessory_mystery_201403{background-image:url(spritesmith-main-3.png);background-position:-984px -1588px;width:40px;height:40px}.slim_armor_mystery_201403{background-image:url(spritesmith-main-3.png);background-position:-1276px -91px;width:90px;height:90px}.back_mystery_201404{background-image:url(spritesmith-main-3.png);background-position:-1276px 0;width:90px;height:90px}.headAccessory_mystery_201404{background-image:url(spritesmith-main-3.png);background-position:-1183px -1183px;width:90px;height:90px}.shop_back_mystery_201404{background-image:url(spritesmith-main-3.png);background-position:-1148px -1588px;width:40px;height:40px}.shop_headAccessory_mystery_201404{background-image:url(spritesmith-main-3.png);background-position:-1189px -1588px;width:40px;height:40px}.broad_armor_mystery_201405{background-image:url(spritesmith-main-3.png);background-position:-1092px -1183px;width:90px;height:90px}.head_mystery_201405{background-image:url(spritesmith-main-3.png);background-position:-1001px -1183px;width:90px;height:90px}.shop_armor_mystery_201405{background-image:url(spritesmith-main-3.png);background-position:-1312px -1588px;width:40px;height:40px}.shop_head_mystery_201405{background-image:url(spritesmith-main-3.png);background-position:-1353px -1588px;width:40px;height:40px}.slim_armor_mystery_201405{background-image:url(spritesmith-main-3.png);background-position:-910px -1183px;width:90px;height:90px}.broad_armor_mystery_201406{background-image:url(spritesmith-main-3.png);background-position:-454px 0;width:90px;height:96px}.head_mystery_201406{background-image:url(spritesmith-main-3.png);background-position:-454px -97px;width:90px;height:96px}.shop_armor_mystery_201406{background-image:url(spritesmith-main-3.png);background-position:-1517px -1588px;width:40px;height:40px}.shop_head_mystery_201406{background-image:url(spritesmith-main-3.png);background-position:-1558px -1588px;width:40px;height:40px}.slim_armor_mystery_201406{background-image:url(spritesmith-main-3.png);background-position:-454px -194px;width:90px;height:96px}.broad_armor_mystery_201407{background-image:url(spritesmith-main-3.png);background-position:-546px -1183px;width:90px;height:90px}.head_mystery_201407{background-image:url(spritesmith-main-3.png);background-position:-455px -1183px;width:90px;height:90px}.shop_armor_mystery_201407{background-image:url(spritesmith-main-3.png);background-position:-1640px -82px;width:40px;height:40px}.shop_head_mystery_201407{background-image:url(spritesmith-main-3.png);background-position:-1640px -123px;width:40px;height:40px}.slim_armor_mystery_201407{background-image:url(spritesmith-main-3.png);background-position:-364px -1183px;width:90px;height:90px}.broad_armor_mystery_201408{background-image:url(spritesmith-main-3.png);background-position:-273px -1183px;width:90px;height:90px}.head_mystery_201408{background-image:url(spritesmith-main-3.png);background-position:-182px -1183px;width:90px;height:90px}.shop_armor_mystery_201408{background-image:url(spritesmith-main-3.png);background-position:-1640px -287px;width:40px;height:40px}.shop_head_mystery_201408{background-image:url(spritesmith-main-3.png);background-position:-1640px -328px;width:40px;height:40px}.slim_armor_mystery_201408{background-image:url(spritesmith-main-3.png);background-position:-91px -1183px;width:90px;height:90px}.broad_armor_mystery_201409{background-image:url(spritesmith-main-3.png);background-position:0 -1183px;width:90px;height:90px}.headAccessory_mystery_201409{background-image:url(spritesmith-main-3.png);background-position:-1185px -1092px;width:90px;height:90px}.shop_armor_mystery_201409{background-image:url(spritesmith-main-3.png);background-position:-1640px -492px;width:40px;height:40px}.shop_headAccessory_mystery_201409{background-image:url(spritesmith-main-3.png);background-position:-1640px -533px;width:40px;height:40px}.slim_armor_mystery_201409{background-image:url(spritesmith-main-3.png);background-position:-1185px -1001px;width:90px;height:90px}.back_mystery_201410{background-image:url(spritesmith-main-3.png);background-position:-282px -364px;width:93px;height:90px}.broad_armor_mystery_201410{background-image:url(spritesmith-main-3.png);background-position:-376px -364px;width:93px;height:90px}.shop_armor_mystery_201410{background-image:url(spritesmith-main-3.png);background-position:-1640px -697px;width:40px;height:40px}.shop_back_mystery_201410{background-image:url(spritesmith-main-3.png);background-position:-1640px -738px;width:40px;height:40px}.slim_armor_mystery_201410{background-image:url(spritesmith-main-3.png);background-position:-94px -364px;width:93px;height:90px}.head_mystery_201411{background-image:url(spritesmith-main-3.png);background-position:-1185px -637px;width:90px;height:90px}.shop_head_mystery_201411{background-image:url(spritesmith-main-3.png);background-position:-1640px -861px;width:40px;height:40px}.shop_weapon_mystery_201411{background-image:url(spritesmith-main-3.png);background-position:-1640px -902px;width:40px;height:40px}.weapon_mystery_201411{background-image:url(spritesmith-main-4.png);background-position:-819px -1152px;width:90px;height:90px}.broad_armor_mystery_201412{background-image:url(spritesmith-main-4.png);background-position:-455px -1425px;width:90px;height:90px}.head_mystery_201412{background-image:url(spritesmith-main-4.png);background-position:-910px -1152px;width:90px;height:90px}.shop_armor_mystery_201412{background-image:url(spritesmith-main-4.png);background-position:-1655px -820px;width:40px;height:40px}.shop_head_mystery_201412{background-image:url(spritesmith-main-4.png);background-position:-1655px -779px;width:40px;height:40px}.slim_armor_mystery_201412{background-image:url(spritesmith-main-4.png);background-position:-1291px -91px;width:90px;height:90px}.broad_armor_mystery_201501{background-image:url(spritesmith-main-4.png);background-position:-1291px -364px;width:90px;height:90px}.head_mystery_201501{background-image:url(spritesmith-main-4.png);background-position:-1291px -546px;width:90px;height:90px}.shop_armor_mystery_201501{background-image:url(spritesmith-main-4.png);background-position:-1655px -738px;width:40px;height:40px}.shop_head_mystery_201501{background-image:url(spritesmith-main-4.png);background-position:-1655px -697px;width:40px;height:40px}.slim_armor_mystery_201501{background-image:url(spritesmith-main-4.png);background-position:-1018px -455px;width:90px;height:90px}.headAccessory_mystery_201502{background-image:url(spritesmith-main-4.png);background-position:-1018px -637px;width:90px;height:90px}.shop_headAccessory_mystery_201502{background-image:url(spritesmith-main-4.png);background-position:-1655px -656px;width:40px;height:40px}.shop_weapon_mystery_201502{background-image:url(spritesmith-main-4.png);background-position:-1655px -615px;width:40px;height:40px}.weapon_mystery_201502{background-image:url(spritesmith-main-4.png);background-position:0 -970px;width:90px;height:90px}.broad_armor_mystery_201503{background-image:url(spritesmith-main-4.png);background-position:-91px -970px;width:90px;height:90px}.eyewear_mystery_201503{background-image:url(spritesmith-main-4.png);background-position:-182px -970px;width:90px;height:90px}.shop_armor_mystery_201503{background-image:url(spritesmith-main-4.png);background-position:-1655px -574px;width:40px;height:40px}.shop_eyewear_mystery_201503{background-image:url(spritesmith-main-4.png);background-position:-1655px -533px;width:40px;height:40px}.slim_armor_mystery_201503{background-image:url(spritesmith-main-4.png);background-position:-1200px -637px;width:90px;height:90px}.back_mystery_201504{background-image:url(spritesmith-main-4.png);background-position:-1200px -728px;width:90px;height:90px}.broad_armor_mystery_201504{background-image:url(spritesmith-main-4.png);background-position:-1200px -1001px;width:90px;height:90px}.shop_armor_mystery_201504{background-image:url(spritesmith-main-4.png);background-position:-1655px -492px;width:40px;height:40px}.shop_back_mystery_201504{background-image:url(spritesmith-main-4.png);background-position:-1655px -451px;width:40px;height:40px}.slim_armor_mystery_201504{background-image:url(spritesmith-main-4.png);background-position:-182px -1152px;width:90px;height:90px}.head_mystery_201505{background-image:url(spritesmith-main-4.png);background-position:-273px -1152px;width:90px;height:90px}.shop_head_mystery_201505{background-image:url(spritesmith-main-4.png);background-position:-1655px -410px;width:40px;height:40px}.shop_weapon_mystery_201505{background-image:url(spritesmith-main-4.png);background-position:-1655px -369px;width:40px;height:40px}.weapon_mystery_201505{background-image:url(spritesmith-main-4.png);background-position:-546px -1152px;width:90px;height:90px}.broad_armor_mystery_201506{background-image:url(spritesmith-main-4.png);background-position:-91px -485px;width:90px;height:105px}.eyewear_mystery_201506{background-image:url(spritesmith-main-4.png);background-position:0 -485px;width:90px;height:105px}.shop_armor_mystery_201506{background-image:url(spritesmith-main-4.png);background-position:-1655px -328px;width:40px;height:40px}.shop_eyewear_mystery_201506{background-image:url(spritesmith-main-4.png);background-position:-1655px -287px;width:40px;height:40px}.slim_armor_mystery_201506{background-image:url(spritesmith-main-4.png);background-position:-648px -212px;width:90px;height:105px}.back_mystery_201507{background-image:url(spritesmith-main-4.png);background-position:-546px -591px;width:90px;height:105px}.eyewear_mystery_201507{background-image:url(spritesmith-main-4.png);background-position:-637px -591px;width:90px;height:105px}.shop_back_mystery_201507{background-image:url(spritesmith-main-4.png);background-position:-1655px -246px;width:40px;height:40px}.shop_eyewear_mystery_201507{background-image:url(spritesmith-main-4.png);background-position:-1655px -205px;width:40px;height:40px}.broad_armor_mystery_201508{background-image:url(spritesmith-main-4.png);background-position:-830px -273px;width:93px;height:90px}.head_mystery_201508{background-image:url(spritesmith-main-4.png);background-position:-830px -182px;width:93px;height:90px}.shop_armor_mystery_201508{background-image:url(spritesmith-main-4.png);background-position:-1655px -164px;width:40px;height:40px}.shop_head_mystery_201508{background-image:url(spritesmith-main-4.png);background-position:-1655px -123px;width:40px;height:40px}.slim_armor_mystery_201508{background-image:url(spritesmith-main-4.png);background-position:-830px -91px;width:93px;height:90px}.broad_armor_mystery_201509{background-image:url(spritesmith-main-4.png);background-position:-1291px -910px;width:90px;height:90px}.head_mystery_201509{background-image:url(spritesmith-main-4.png);background-position:-1382px -819px;width:90px;height:90px}.shop_armor_mystery_201509{background-image:url(spritesmith-main-4.png);background-position:-1655px -82px;width:40px;height:40px}.shop_head_mystery_201509{background-image:url(spritesmith-main-4.png);background-position:-1655px -41px;width:40px;height:40px}.slim_armor_mystery_201509{background-image:url(spritesmith-main-4.png);background-position:-910px -1334px;width:90px;height:90px}.broad_armor_mystery_301404{background-image:url(spritesmith-main-4.png);background-position:-1001px -1334px;width:90px;height:90px}.eyewear_mystery_301404{background-image:url(spritesmith-main-4.png);background-position:-1092px -1334px;width:90px;height:90px}.head_mystery_301404{background-image:url(spritesmith-main-4.png);background-position:-1183px -1334px;width:90px;height:90px}.shop_armor_mystery_301404{background-image:url(spritesmith-main-4.png);background-position:-1655px 0;width:40px;height:40px}.shop_eyewear_mystery_301404{background-image:url(spritesmith-main-4.png);background-position:-1599px -1598px;width:40px;height:40px}.shop_head_mystery_301404{background-image:url(spritesmith-main-4.png);background-position:-1558px -1598px;width:40px;height:40px}.shop_weapon_mystery_301404{background-image:url(spritesmith-main-4.png);background-position:-1517px -1598px;width:40px;height:40px}.slim_armor_mystery_301404{background-image:url(spritesmith-main-4.png);background-position:-1473px -364px;width:90px;height:90px}.weapon_mystery_301404{background-image:url(spritesmith-main-4.png);background-position:-1473px -455px;width:90px;height:90px}.eyewear_mystery_301405{background-image:url(spritesmith-main-4.png);background-position:-1473px -546px;width:90px;height:90px}.headAccessory_mystery_301405{background-image:url(spritesmith-main-4.png);background-position:-1473px -1092px;width:90px;height:90px}.head_mystery_301405{background-image:url(spritesmith-main-4.png);background-position:-637px -1425px;width:90px;height:90px}.shield_mystery_301405{background-image:url(spritesmith-main-4.png);background-position:-910px -1425px;width:90px;height:90px}.shop_eyewear_mystery_301405{background-image:url(spritesmith-main-4.png);background-position:-1476px -1598px;width:40px;height:40px}.shop_headAccessory_mystery_301405{background-image:url(spritesmith-main-4.png);background-position:-1435px -1598px;width:40px;height:40px}.shop_head_mystery_301405{background-image:url(spritesmith-main-4.png);background-position:-1394px -1598px;width:40px;height:40px}.shop_shield_mystery_301405{background-image:url(spritesmith-main-4.png);background-position:-1353px -1598px;width:40px;height:40px}.broad_armor_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:-739px -212px;width:90px;height:90px}.broad_armor_special_spring2015Mage{background-image:url(spritesmith-main-4.png);background-position:-739px -303px;width:90px;height:90px}.broad_armor_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-739px -394px;width:90px;height:90px}.broad_armor_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-739px -485px;width:90px;height:90px}.broad_armor_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-739px -576px;width:90px;height:90px}.broad_armor_special_springMage{background-image:url(spritesmith-main-4.png);background-position:0 -788px;width:90px;height:90px}.broad_armor_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-91px -788px;width:90px;height:90px}.broad_armor_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-182px -788px;width:90px;height:90px}.headAccessory_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:-273px -788px;width:90px;height:90px}.headAccessory_special_spring2015Mage{background-image:url(spritesmith-main-4.png);background-position:-364px -788px;width:90px;height:90px}.headAccessory_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-455px -788px;width:90px;height:90px}.headAccessory_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-546px -788px;width:90px;height:90px}.headAccessory_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-637px -788px;width:90px;height:90px}.headAccessory_special_springMage{background-image:url(spritesmith-main-4.png);background-position:-728px -788px;width:90px;height:90px}.headAccessory_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-819px -788px;width:90px;height:90px}.headAccessory_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-927px 0;width:90px;height:90px}.head_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:-927px -91px;width:90px;height:90px}.head_special_spring2015Mage{background-image:url(spritesmith-main-4.png);background-position:-927px -182px;width:90px;height:90px}.head_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-927px -273px;width:90px;height:90px}.head_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-927px -364px;width:90px;height:90px}.head_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-927px -455px;width:90px;height:90px}.head_special_springMage{background-image:url(spritesmith-main-4.png);background-position:-927px -546px;width:90px;height:90px}.head_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-927px -637px;width:90px;height:90px}.head_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-927px -728px;width:90px;height:90px}.shield_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:0 -879px;width:90px;height:90px}.shield_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-91px -879px;width:90px;height:90px}.shield_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-182px -879px;width:90px;height:90px}.shield_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-273px -879px;width:90px;height:90px}.shield_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-364px -879px;width:90px;height:90px}.shield_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-455px -879px;width:90px;height:90px}.shop_armor_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1312px -1598px;width:40px;height:40px}.shop_armor_special_spring2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1271px -1598px;width:40px;height:40px}.shop_armor_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1230px -1598px;width:40px;height:40px}.shop_armor_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1189px -1598px;width:40px;height:40px}.shop_armor_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-533px -1557px;width:40px;height:40px}.shop_armor_special_springMage{background-image:url(spritesmith-main-4.png);background-position:-492px -1557px;width:40px;height:40px}.shop_armor_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-451px -1557px;width:40px;height:40px}.shop_armor_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-410px -1557px;width:40px;height:40px}.shop_headAccessory_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:-369px -1557px;width:40px;height:40px}.shop_headAccessory_special_spring2015Mage{background-image:url(spritesmith-main-4.png);background-position:-328px -1557px;width:40px;height:40px}.shop_headAccessory_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-287px -1557px;width:40px;height:40px}.shop_headAccessory_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-246px -1557px;width:40px;height:40px}.shop_headAccessory_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-205px -1557px;width:40px;height:40px}.shop_headAccessory_special_springMage{background-image:url(spritesmith-main-4.png);background-position:-164px -1557px;width:40px;height:40px}.shop_headAccessory_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-123px -1557px;width:40px;height:40px}.shop_headAccessory_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-82px -1557px;width:40px;height:40px}.shop_head_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:-41px -1557px;width:40px;height:40px}.shop_head_special_spring2015Mage{background-image:url(spritesmith-main-4.png);background-position:0 -1557px;width:40px;height:40px}.shop_head_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1599px -1516px;width:40px;height:40px}.shop_head_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1558px -1516px;width:40px;height:40px}.shop_head_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-1517px -1516px;width:40px;height:40px}.shop_head_special_springMage{background-image:url(spritesmith-main-4.png);background-position:-1476px -1516px;width:40px;height:40px}.shop_head_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-1435px -1516px;width:40px;height:40px}.shop_head_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-1394px -1516px;width:40px;height:40px}.shop_shield_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1025px -1516px;width:40px;height:40px}.shop_shield_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-984px -1516px;width:40px;height:40px}.shop_shield_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-943px -1516px;width:40px;height:40px}.shop_shield_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-902px -1516px;width:40px;height:40px}.shop_shield_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-861px -1516px;width:40px;height:40px}.shop_shield_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-820px -1516px;width:40px;height:40px}.shop_weapon_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:-779px -1516px;width:40px;height:40px}.shop_weapon_special_spring2015Mage{background-image:url(spritesmith-main-4.png);background-position:-738px -1516px;width:40px;height:40px}.shop_weapon_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-377px -303px;width:40px;height:40px}.shop_weapon_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-336px -303px;width:40px;height:40px}.shop_weapon_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-230px -253px;width:40px;height:40px}.shop_weapon_special_springMage{background-image:url(spritesmith-main-4.png);background-position:-230px -212px;width:40px;height:40px}.shop_weapon_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-689px -530px;width:40px;height:40px}.shop_weapon_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-648px -530px;width:40px;height:40px}.slim_armor_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:0 -1061px;width:90px;height:90px}.slim_armor_special_spring2015Mage{background-image:url(spritesmith-main-4.png);background-position:-91px -1061px;width:90px;height:90px}.slim_armor_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-182px -1061px;width:90px;height:90px}.slim_armor_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-273px -1061px;width:90px;height:90px}.slim_armor_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-364px -1061px;width:90px;height:90px}.slim_armor_special_springMage{background-image:url(spritesmith-main-4.png);background-position:-455px -1061px;width:90px;height:90px}.slim_armor_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-546px -1061px;width:90px;height:90px}.slim_armor_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-637px -1061px;width:90px;height:90px}.weapon_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:-728px -1061px;width:90px;height:90px}.weapon_special_spring2015Mage{background-image:url(spritesmith-main-4.png);background-position:-819px -1061px;width:90px;height:90px}.weapon_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-910px -1061px;width:90px;height:90px}.weapon_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1001px -1061px;width:90px;height:90px}.weapon_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-1092px -1061px;width:90px;height:90px}.weapon_special_springMage{background-image:url(spritesmith-main-4.png);background-position:-1200px 0;width:90px;height:90px}.weapon_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-1200px -91px;width:90px;height:90px}.weapon_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-1200px -182px;width:90px;height:90px}.body_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1200px -273px;width:90px;height:90px}.body_special_summer2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1200px -364px;width:90px;height:90px}.body_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-206px -106px;width:102px;height:105px}.body_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-364px -485px;width:90px;height:105px}.body_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-648px 0;width:90px;height:105px}.body_special_summerMage{background-image:url(spritesmith-main-4.png);background-position:-648px -106px;width:90px;height:105px}.broad_armor_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1200px -819px;width:90px;height:90px}.broad_armor_special_summer2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1200px -910px;width:90px;height:90px}.broad_armor_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-103px -106px;width:102px;height:105px}.broad_armor_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:0 -591px;width:90px;height:105px}.broad_armor_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-91px -591px;width:90px;height:105px}.broad_armor_special_summerMage{background-image:url(spritesmith-main-4.png);background-position:-182px -591px;width:90px;height:105px}.broad_armor_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-424px -273px;width:111px;height:90px}.broad_armor_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:-309px -91px;width:111px;height:90px}.eyewear_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-309px -182px;width:111px;height:90px}.eyewear_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:0 -303px;width:111px;height:90px}.head_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-637px -1152px;width:90px;height:90px}.head_special_summer2015Mage{background-image:url(spritesmith-main-4.png);background-position:-728px -1152px;width:90px;height:90px}.head_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:0 0;width:102px;height:105px}.head_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-739px -106px;width:90px;height:105px}.head_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-739px 0;width:90px;height:105px}.head_special_summerMage{background-image:url(spritesmith-main-4.png);background-position:-182px -485px;width:90px;height:105px}.head_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-224px -303px;width:111px;height:90px}.head_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:-424px 0;width:111px;height:90px}.Healer_Summer{background-image:url(spritesmith-main-4.png);background-position:-455px -485px;width:90px;height:105px}.Mage_Summer{background-image:url(spritesmith-main-4.png);background-position:-546px -485px;width:90px;height:105px}.SummerRogue14{background-image:url(spritesmith-main-4.png);background-position:-536px -91px;width:111px;height:90px}.SummerWarrior14{background-image:url(spritesmith-main-4.png);background-position:-424px -182px;width:111px;height:90px}.shield_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1291px -455px;width:90px;height:90px}.shield_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:0 -106px;width:102px;height:105px}.shield_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-648px -318px;width:90px;height:105px}.shield_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-648px -424px;width:90px;height:105px}.shield_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:0 -394px;width:111px;height:90px}.shield_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:-112px -394px;width:111px;height:90px}.shop_armor_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-871px -728px;width:40px;height:40px}.shop_armor_special_summer2015Mage{background-image:url(spritesmith-main-4.png);background-position:-830px -728px;width:40px;height:40px}.shop_armor_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-968px -819px;width:40px;height:40px}.shop_armor_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-927px -819px;width:40px;height:40px}.shop_armor_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-1059px -910px;width:40px;height:40px}.shop_armor_special_summerMage{background-image:url(spritesmith-main-4.png);background-position:-1018px -910px;width:40px;height:40px}.shop_armor_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-1150px -1001px;width:40px;height:40px}.shop_armor_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:-1109px -1001px;width:40px;height:40px}.shop_body_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1241px -1092px;width:40px;height:40px}.shop_body_special_summer2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1200px -1092px;width:40px;height:40px}.shop_body_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1332px -1183px;width:40px;height:40px}.shop_body_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1291px -1183px;width:40px;height:40px}.shop_body_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-1423px -1274px;width:40px;height:40px}.shop_body_special_summerMage{background-image:url(spritesmith-main-4.png);background-position:-1382px -1274px;width:40px;height:40px}.shop_eyewear_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-1514px -1365px;width:40px;height:40px}.shop_eyewear_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:-1473px -1365px;width:40px;height:40px}.shop_head_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1605px -1461px;width:40px;height:40px}.shop_head_special_summer2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1605px -1297px;width:40px;height:40px}.shop_head_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1564px -1297px;width:40px;height:40px}.shop_head_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1605px -1256px;width:40px;height:40px}.shop_head_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-1564px -1256px;width:40px;height:40px}.shop_head_special_summerMage{background-image:url(spritesmith-main-4.png);background-position:-1605px -1215px;width:40px;height:40px}.shop_head_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-1564px -1215px;width:40px;height:40px}.shop_head_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:-1605px -1174px;width:40px;height:40px}.shop_shield_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1564px -1174px;width:40px;height:40px}.shop_shield_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1605px -1133px;width:40px;height:40px}.shop_shield_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1564px -1133px;width:40px;height:40px}.shop_shield_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-1605px -1092px;width:40px;height:40px}.shop_shield_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-1564px -1092px;width:40px;height:40px}.shop_shield_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:-1605px -1051px;width:40px;height:40px}.shop_weapon_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1564px -1051px;width:40px;height:40px}.shop_weapon_special_summer2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1605px -1010px;width:40px;height:40px}.shop_weapon_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1564px -1010px;width:40px;height:40px}.shop_weapon_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1605px -969px;width:40px;height:40px}.shop_weapon_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-1564px -969px;width:40px;height:40px}.shop_weapon_special_summerMage{background-image:url(spritesmith-main-4.png);background-position:-1605px -928px;width:40px;height:40px}.shop_weapon_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-1564px -928px;width:40px;height:40px}.shop_weapon_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:-1605px -887px;width:40px;height:40px}.slim_armor_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-637px -1334px;width:90px;height:90px}.slim_armor_special_summer2015Mage{background-image:url(spritesmith-main-4.png);background-position:-728px -1334px;width:90px;height:90px}.slim_armor_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-206px 0;width:102px;height:105px}.slim_armor_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-273px -591px;width:90px;height:105px}.slim_armor_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-364px -591px;width:90px;height:105px}.slim_armor_special_summerMage{background-image:url(spritesmith-main-4.png);background-position:-455px -591px;width:90px;height:105px}.slim_armor_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-336px -394px;width:111px;height:90px}.slim_armor_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:-536px 0;width:111px;height:90px}.weapon_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1365px -1334px;width:90px;height:90px}.weapon_special_summer2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1473px 0;width:90px;height:90px}.weapon_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-103px 0;width:102px;height:105px}.weapon_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-536px -288px;width:90px;height:105px}.weapon_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-536px -182px;width:90px;height:105px}.weapon_special_summerMage{background-image:url(spritesmith-main-4.png);background-position:-273px -485px;width:90px;height:105px}.weapon_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-112px -303px;width:111px;height:90px}.weapon_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:-424px -91px;width:111px;height:90px}.broad_armor_special_candycane{background-image:url(spritesmith-main-4.png);background-position:-1473px -637px;width:90px;height:90px}.broad_armor_special_ski{background-image:url(spritesmith-main-4.png);background-position:-1473px -728px;width:90px;height:90px}.broad_armor_special_snowflake{background-image:url(spritesmith-main-4.png);background-position:-1473px -819px;width:90px;height:90px}.broad_armor_special_winter2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1473px -910px;width:90px;height:90px}.broad_armor_special_winter2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1473px -1001px;width:90px;height:90px}.broad_armor_special_winter2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-311px -697px;width:96px;height:90px}.broad_armor_special_winter2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1473px -1183px;width:90px;height:90px}.broad_armor_special_yeti{background-image:url(spritesmith-main-4.png);background-position:-1473px -1274px;width:90px;height:90px}.head_special_candycane{background-image:url(spritesmith-main-4.png);background-position:0 -1425px;width:90px;height:90px}.head_special_nye{background-image:url(spritesmith-main-4.png);background-position:-91px -1425px;width:90px;height:90px}.head_special_nye2014{background-image:url(spritesmith-main-4.png);background-position:-182px -1425px;width:90px;height:90px}.head_special_ski{background-image:url(spritesmith-main-4.png);background-position:-273px -1425px;width:90px;height:90px}.head_special_snowflake{background-image:url(spritesmith-main-4.png);background-position:-364px -1425px;width:90px;height:90px}.head_special_winter2015Healer{background-image:url(spritesmith-main-4.png);background-position:-830px -364px;width:90px;height:90px}.head_special_winter2015Mage{background-image:url(spritesmith-main-4.png);background-position:-546px -1425px;width:90px;height:90px}.head_special_winter2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-505px -697px;width:96px;height:90px}.head_special_winter2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-728px -1425px;width:90px;height:90px}.head_special_yeti{background-image:url(spritesmith-main-4.png);background-position:-819px -1425px;width:90px;height:90px}.shield_special_ski{background-image:url(spritesmith-main-4.png);background-position:-536px -394px;width:104px;height:90px}.shield_special_snowflake{background-image:url(spritesmith-main-4.png);background-position:-1001px -1425px;width:90px;height:90px}.shield_special_winter2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1092px -1425px;width:90px;height:90px}.shield_special_winter2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-602px -697px;width:96px;height:90px}.shield_special_winter2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1274px -1425px;width:90px;height:90px}.shield_special_yeti{background-image:url(spritesmith-main-4.png);background-position:-1365px -1425px;width:90px;height:90px}.shop_armor_special_candycane{background-image:url(spritesmith-main-4.png);background-position:-1564px -887px;width:40px;height:40px}.shop_armor_special_ski{background-image:url(spritesmith-main-4.png);background-position:-1605px -846px;width:40px;height:40px}.shop_armor_special_snowflake{background-image:url(spritesmith-main-4.png);background-position:-1655px -861px;width:40px;height:40px}.shop_armor_special_winter2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1189px -1516px;width:40px;height:40px}.shop_armor_special_winter2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1655px -902px;width:40px;height:40px}.shop_armor_special_winter2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1655px -943px;width:40px;height:40px}.shop_armor_special_winter2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1655px -984px;width:40px;height:40px}.shop_armor_special_yeti{background-image:url(spritesmith-main-4.png);background-position:-1564px -354px;width:40px;height:40px}.shop_head_special_candycane{background-image:url(spritesmith-main-4.png);background-position:-1605px -354px;width:40px;height:40px}.shop_head_special_nye{background-image:url(spritesmith-main-4.png);background-position:-1564px -395px;width:40px;height:40px}.shop_head_special_nye2014{background-image:url(spritesmith-main-4.png);background-position:-1605px -395px;width:40px;height:40px}.shop_head_special_ski{background-image:url(spritesmith-main-4.png);background-position:-1564px -436px;width:40px;height:40px}.shop_head_special_snowflake{background-image:url(spritesmith-main-4.png);background-position:-1605px -436px;width:40px;height:40px}.shop_head_special_winter2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1564px -477px;width:40px;height:40px}.shop_head_special_winter2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1605px -477px;width:40px;height:40px}.shop_head_special_winter2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1564px -518px;width:40px;height:40px}.shop_head_special_winter2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1605px -518px;width:40px;height:40px}.shop_head_special_yeti{background-image:url(spritesmith-main-4.png);background-position:-1564px -559px;width:40px;height:40px}.shop_shield_special_ski{background-image:url(spritesmith-main-4.png);background-position:-1605px -559px;width:40px;height:40px}.shop_shield_special_snowflake{background-image:url(spritesmith-main-4.png);background-position:-1564px -600px;width:40px;height:40px}.shop_shield_special_winter2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1605px -600px;width:40px;height:40px}.shop_shield_special_winter2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1564px -641px;width:40px;height:40px}.shop_shield_special_winter2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1605px -641px;width:40px;height:40px}.shop_shield_special_yeti{background-image:url(spritesmith-main-4.png);background-position:-1564px -682px;width:40px;height:40px}.shop_weapon_special_candycane{background-image:url(spritesmith-main-4.png);background-position:-1605px -682px;width:40px;height:40px}.shop_weapon_special_ski{background-image:url(spritesmith-main-4.png);background-position:-1564px -723px;width:40px;height:40px}.shop_weapon_special_snowflake{background-image:url(spritesmith-main-4.png);background-position:-1605px -723px;width:40px;height:40px}.shop_weapon_special_winter2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1564px -764px;width:40px;height:40px}.shop_weapon_special_winter2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1605px -764px;width:40px;height:40px}.shop_weapon_special_winter2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1564px -805px;width:40px;height:40px}.shop_weapon_special_winter2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1605px -805px;width:40px;height:40px}.shop_weapon_special_yeti{background-image:url(spritesmith-main-4.png);background-position:-1564px -846px;width:40px;height:40px}.slim_armor_special_candycane{background-image:url(spritesmith-main-4.png);background-position:-1564px 0;width:90px;height:90px}.slim_armor_special_ski{background-image:url(spritesmith-main-4.png);background-position:-1456px -1425px;width:90px;height:90px}.slim_armor_special_snowflake{background-image:url(spritesmith-main-4.png);background-position:-546px -1334px;width:90px;height:90px}.slim_armor_special_winter2015Healer{background-image:url(spritesmith-main-4.png);background-position:-455px -1334px;width:90px;height:90px}.slim_armor_special_winter2015Mage{background-image:url(spritesmith-main-4.png);background-position:-364px -1334px;width:90px;height:90px}.slim_armor_special_winter2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-830px 0;width:96px;height:90px}.slim_armor_special_winter2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-182px -1334px;width:90px;height:90px}.slim_armor_special_yeti{background-image:url(spritesmith-main-4.png);background-position:-91px -1334px;width:90px;height:90px}.weapon_special_candycane{background-image:url(spritesmith-main-4.png);background-position:0 -1334px;width:90px;height:90px}.weapon_special_ski{background-image:url(spritesmith-main-4.png);background-position:-1382px -1183px;width:90px;height:90px}.weapon_special_snowflake{background-image:url(spritesmith-main-4.png);background-position:-1382px -1092px;width:90px;height:90px}.weapon_special_winter2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1382px -1001px;width:90px;height:90px}.weapon_special_winter2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1382px -910px;width:90px;height:90px}.weapon_special_winter2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-699px -697px;width:96px;height:90px}.weapon_special_winter2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1382px -728px;width:90px;height:90px}.weapon_special_yeti{background-image:url(spritesmith-main-4.png);background-position:-1382px -637px;width:90px;height:90px}.back_special_wondercon_black{background-image:url(spritesmith-main-4.png);background-position:-1382px -546px;width:90px;height:90px}.back_special_wondercon_red{background-image:url(spritesmith-main-4.png);background-position:-1382px -455px;width:90px;height:90px}.body_special_wondercon_black{background-image:url(spritesmith-main-4.png);background-position:-1382px -364px;width:90px;height:90px}.body_special_wondercon_gold{background-image:url(spritesmith-main-4.png);background-position:-1382px -273px;width:90px;height:90px}.body_special_wondercon_red{background-image:url(spritesmith-main-4.png);background-position:-1382px -182px;width:90px;height:90px}.eyewear_special_wondercon_black{background-image:url(spritesmith-main-4.png);background-position:-1382px -91px;width:90px;height:90px}.eyewear_special_wondercon_red{background-image:url(spritesmith-main-4.png);background-position:-1382px 0;width:90px;height:90px}.shop_back_special_wondercon_black{background-image:url(spritesmith-main-4.png);background-position:-1564px -1338px;width:40px;height:40px}.shop_back_special_wondercon_red{background-image:url(spritesmith-main-4.png);background-position:-1605px -1338px;width:40px;height:40px}.shop_body_special_wondercon_black{background-image:url(spritesmith-main-4.png);background-position:-1564px -1379px;width:40px;height:40px}.shop_body_special_wondercon_gold{background-image:url(spritesmith-main-4.png);background-position:-1605px -1379px;width:40px;height:40px}.shop_body_special_wondercon_red{background-image:url(spritesmith-main-4.png);background-position:-1564px -1420px;width:40px;height:40px}.shop_eyewear_special_wondercon_black{background-image:url(spritesmith-main-4.png);background-position:-1605px -1420px;width:40px;height:40px}.shop_eyewear_special_wondercon_red{background-image:url(spritesmith-main-4.png);background-position:-1564px -1461px;width:40px;height:40px}.head_0{background-image:url(spritesmith-main-4.png);background-position:-1274px -1243px;width:90px;height:90px}.customize-option.head_0{background-image:url(spritesmith-main-4.png);background-position:-1299px -1258px;width:60px;height:60px}.head_healer_1{background-image:url(spritesmith-main-4.png);background-position:-1183px -1243px;width:90px;height:90px}.head_healer_2{background-image:url(spritesmith-main-4.png);background-position:-1092px -1243px;width:90px;height:90px}.head_healer_3{background-image:url(spritesmith-main-4.png);background-position:-1001px -1243px;width:90px;height:90px}.head_healer_4{background-image:url(spritesmith-main-4.png);background-position:-910px -1243px;width:90px;height:90px}.head_healer_5{background-image:url(spritesmith-main-4.png);background-position:-819px -1243px;width:90px;height:90px}.head_rogue_1{background-image:url(spritesmith-main-4.png);background-position:-728px -1243px;width:90px;height:90px}.head_rogue_2{background-image:url(spritesmith-main-4.png);background-position:-637px -1243px;width:90px;height:90px}.head_rogue_3{background-image:url(spritesmith-main-4.png);background-position:-546px -1243px;width:90px;height:90px}.head_rogue_4{background-image:url(spritesmith-main-4.png);background-position:-455px -1243px;width:90px;height:90px}.head_rogue_5{background-image:url(spritesmith-main-4.png);background-position:-364px -1243px;width:90px;height:90px}.head_special_2{background-image:url(spritesmith-main-4.png);background-position:-273px -1243px;width:90px;height:90px}.head_special_fireCoralCirclet{background-image:url(spritesmith-main-4.png);background-position:-182px -1243px;width:90px;height:90px}.head_warrior_1{background-image:url(spritesmith-main-4.png);background-position:-91px -1243px;width:90px;height:90px}.head_warrior_2{background-image:url(spritesmith-main-4.png);background-position:0 -1243px;width:90px;height:90px}.head_warrior_3{background-image:url(spritesmith-main-4.png);background-position:-1291px -1092px;width:90px;height:90px}.head_warrior_4{background-image:url(spritesmith-main-4.png);background-position:-1291px -1001px;width:90px;height:90px}.head_warrior_5{background-image:url(spritesmith-main-4.png);background-position:-1109px -910px;width:90px;height:90px}.head_wizard_1{background-image:url(spritesmith-main-4.png);background-position:-1109px -819px;width:90px;height:90px}.head_wizard_2{background-image:url(spritesmith-main-4.png);background-position:-1109px -728px;width:90px;height:90px}.head_wizard_3{background-image:url(spritesmith-main-4.png);background-position:-1109px -637px;width:90px;height:90px}.head_wizard_4{background-image:url(spritesmith-main-4.png);background-position:-1109px -546px;width:90px;height:90px}.head_wizard_5{background-image:url(spritesmith-main-4.png);background-position:-1109px -455px;width:90px;height:90px}.shop_head_healer_1{background-image:url(spritesmith-main-4.png);background-position:-336px -344px;width:40px;height:40px}.shop_head_healer_2{background-image:url(spritesmith-main-4.png);background-position:-377px -344px;width:40px;height:40px}.shop_head_healer_3{background-image:url(spritesmith-main-4.png);background-position:-448px -394px;width:40px;height:40px}.shop_head_healer_4{background-image:url(spritesmith-main-4.png);background-position:-489px -394px;width:40px;height:40px}.shop_head_healer_5{background-image:url(spritesmith-main-4.png);background-position:-448px -435px;width:40px;height:40px}.shop_head_rogue_1{background-image:url(spritesmith-main-4.png);background-position:-489px -435px;width:40px;height:40px}.shop_head_rogue_2{background-image:url(spritesmith-main-4.png);background-position:0 -1516px;width:40px;height:40px}.shop_head_rogue_3{background-image:url(spritesmith-main-4.png);background-position:-41px -1516px;width:40px;height:40px}.shop_head_rogue_4{background-image:url(spritesmith-main-4.png);background-position:-82px -1516px;width:40px;height:40px}.shop_head_rogue_5{background-image:url(spritesmith-main-4.png);background-position:-123px -1516px;width:40px;height:40px}.shop_head_special_0{background-image:url(spritesmith-main-4.png);background-position:-164px -1516px;width:40px;height:40px}.shop_head_special_1{background-image:url(spritesmith-main-4.png);background-position:-205px -1516px;width:40px;height:40px}.shop_head_special_2{background-image:url(spritesmith-main-4.png);background-position:-246px -1516px;width:40px;height:40px}.shop_head_special_fireCoralCirclet{background-image:url(spritesmith-main-4.png);background-position:-287px -1516px;width:40px;height:40px}.shop_head_warrior_1{background-image:url(spritesmith-main-4.png);background-position:-328px -1516px;width:40px;height:40px}.shop_head_warrior_2{background-image:url(spritesmith-main-4.png);background-position:-369px -1516px;width:40px;height:40px}.shop_head_warrior_3{background-image:url(spritesmith-main-4.png);background-position:-410px -1516px;width:40px;height:40px}.shop_head_warrior_4{background-image:url(spritesmith-main-4.png);background-position:-451px -1516px;width:40px;height:40px}.shop_head_warrior_5{background-image:url(spritesmith-main-4.png);background-position:-492px -1516px;width:40px;height:40px}.shop_head_wizard_1{background-image:url(spritesmith-main-4.png);background-position:-533px -1516px;width:40px;height:40px}.shop_head_wizard_2{background-image:url(spritesmith-main-4.png);background-position:-574px -1516px;width:40px;height:40px}.shop_head_wizard_3{background-image:url(spritesmith-main-4.png);background-position:-615px -1516px;width:40px;height:40px}.shop_head_wizard_4{background-image:url(spritesmith-main-4.png);background-position:-656px -1516px;width:40px;height:40px}.shop_head_wizard_5{background-image:url(spritesmith-main-4.png);background-position:-697px -1516px;width:40px;height:40px}.headAccessory_special_bearEars{background-image:url(spritesmith-main-4.png);background-position:-1109px -364px;width:90px;height:90px}.customize-option.headAccessory_special_bearEars{background-image:url(spritesmith-main-4.png);background-position:-1134px -379px;width:60px;height:60px}.headAccessory_special_cactusEars{background-image:url(spritesmith-main-4.png);background-position:-1109px -273px;width:90px;height:90px}.customize-option.headAccessory_special_cactusEars{background-image:url(spritesmith-main-4.png);background-position:-1134px -288px;width:60px;height:60px}.headAccessory_special_foxEars{background-image:url(spritesmith-main-4.png);background-position:-1109px -182px;width:90px;height:90px}.customize-option.headAccessory_special_foxEars{background-image:url(spritesmith-main-4.png);background-position:-1134px -197px;width:60px;height:60px}.headAccessory_special_lionEars{background-image:url(spritesmith-main-4.png);background-position:-1109px -91px;width:90px;height:90px}.customize-option.headAccessory_special_lionEars{background-image:url(spritesmith-main-4.png);background-position:-1134px -106px;width:60px;height:60px}.headAccessory_special_pandaEars{background-image:url(spritesmith-main-4.png);background-position:-1109px 0;width:90px;height:90px}.customize-option.headAccessory_special_pandaEars{background-image:url(spritesmith-main-4.png);background-position:-1134px -15px;width:60px;height:60px}.headAccessory_special_pigEars{background-image:url(spritesmith-main-4.png);background-position:-1001px -970px;width:90px;height:90px}.customize-option.headAccessory_special_pigEars{background-image:url(spritesmith-main-4.png);background-position:-1026px -985px;width:60px;height:60px}.headAccessory_special_tigerEars{background-image:url(spritesmith-main-4.png);background-position:-910px -970px;width:90px;height:90px}.customize-option.headAccessory_special_tigerEars{background-image:url(spritesmith-main-4.png);background-position:-935px -985px;width:60px;height:60px}.headAccessory_special_wolfEars{background-image:url(spritesmith-main-4.png);background-position:-819px -970px;width:90px;height:90px}.customize-option.headAccessory_special_wolfEars{background-image:url(spritesmith-main-4.png);background-position:-844px -985px;width:60px;height:60px}.shop_headAccessory_special_bearEars{background-image:url(spritesmith-main-4.png);background-position:-1066px -1516px;width:40px;height:40px}.shop_headAccessory_special_cactusEars{background-image:url(spritesmith-main-4.png);background-position:-1107px -1516px;width:40px;height:40px}.shop_headAccessory_special_foxEars{background-image:url(spritesmith-main-4.png);background-position:-1148px -1516px;width:40px;height:40px}.shop_headAccessory_special_lionEars{background-image:url(spritesmith-main-4.png);background-position:-1655px -1025px;width:40px;height:40px}.shop_headAccessory_special_pandaEars{background-image:url(spritesmith-main-4.png);background-position:-1230px -1516px;width:40px;height:40px}.shop_headAccessory_special_pigEars{background-image:url(spritesmith-main-4.png);background-position:-1271px -1516px;width:40px;height:40px}.shop_headAccessory_special_tigerEars{background-image:url(spritesmith-main-4.png);background-position:-1312px -1516px;width:40px;height:40px}.shop_headAccessory_special_wolfEars{background-image:url(spritesmith-main-4.png);background-position:-1353px -1516px;width:40px;height:40px}.shield_healer_1{background-image:url(spritesmith-main-4.png);background-position:-728px -970px;width:90px;height:90px}.shield_healer_2{background-image:url(spritesmith-main-4.png);background-position:-637px -970px;width:90px;height:90px}.shield_healer_3{background-image:url(spritesmith-main-4.png);background-position:-546px -970px;width:90px;height:90px}.shield_healer_4{background-image:url(spritesmith-main-4.png);background-position:-455px -970px;width:90px;height:90px}.shield_healer_5{background-image:url(spritesmith-main-4.png);background-position:-364px -970px;width:90px;height:90px}.shield_rogue_0{background-image:url(spritesmith-main-4.png);background-position:-273px -970px;width:90px;height:90px}.shield_rogue_1{background-image:url(spritesmith-main-4.png);background-position:0 -697px;width:103px;height:90px}.shield_rogue_2{background-image:url(spritesmith-main-4.png);background-position:-104px -697px;width:103px;height:90px}.shield_rogue_3{background-image:url(spritesmith-main-4.png);background-position:0 -212px;width:114px;height:90px}.shield_rogue_4{background-image:url(spritesmith-main-4.png);background-position:-408px -697px;width:96px;height:90px}.shield_rogue_5{background-image:url(spritesmith-main-4.png);background-position:-115px -212px;width:114px;height:90px}.shield_rogue_6{background-image:url(spritesmith-main-4.png);background-position:-309px 0;width:114px;height:90px}.shield_special_1{background-image:url(spritesmith-main-4.png);background-position:-1018px -546px;width:90px;height:90px}.shield_special_goldenknight{background-image:url(spritesmith-main-4.png);background-position:-224px -394px;width:111px;height:90px}.shield_special_moonpearlShield{background-image:url(spritesmith-main-4.png);background-position:-1018px -364px;width:90px;height:90px}.shield_warrior_1{background-image:url(spritesmith-main-4.png);background-position:-1018px -273px;width:90px;height:90px}.shield_warrior_2{background-image:url(spritesmith-main-4.png);background-position:-1018px -182px;width:90px;height:90px}.shield_warrior_3{background-image:url(spritesmith-main-4.png);background-position:-1018px -91px;width:90px;height:90px}.shield_warrior_4{background-image:url(spritesmith-main-4.png);background-position:-1018px 0;width:90px;height:90px}.shield_warrior_5{background-image:url(spritesmith-main-4.png);background-position:-910px -879px;width:90px;height:90px}.shop_shield_healer_1{background-image:url(spritesmith-main-4.png);background-position:-574px -1557px;width:40px;height:40px}.shop_shield_healer_2{background-image:url(spritesmith-main-4.png);background-position:-615px -1557px;width:40px;height:40px}.shop_shield_healer_3{background-image:url(spritesmith-main-4.png);background-position:-656px -1557px;width:40px;height:40px}.shop_shield_healer_4{background-image:url(spritesmith-main-4.png);background-position:-697px -1557px;width:40px;height:40px}.shop_shield_healer_5{background-image:url(spritesmith-main-4.png);background-position:-738px -1557px;width:40px;height:40px}.shop_shield_rogue_0{background-image:url(spritesmith-main-4.png);background-position:-779px -1557px;width:40px;height:40px}.shop_shield_rogue_1{background-image:url(spritesmith-main-4.png);background-position:-820px -1557px;width:40px;height:40px}.shop_shield_rogue_2{background-image:url(spritesmith-main-4.png);background-position:-861px -1557px;width:40px;height:40px}.shop_shield_rogue_3{background-image:url(spritesmith-main-4.png);background-position:-902px -1557px;width:40px;height:40px}.shop_shield_rogue_4{background-image:url(spritesmith-main-4.png);background-position:-943px -1557px;width:40px;height:40px}.shop_shield_rogue_5{background-image:url(spritesmith-main-4.png);background-position:-984px -1557px;width:40px;height:40px}.shop_shield_rogue_6{background-image:url(spritesmith-main-4.png);background-position:-1025px -1557px;width:40px;height:40px}.shop_shield_special_0{background-image:url(spritesmith-main-4.png);background-position:-1066px -1557px;width:40px;height:40px}.shop_shield_special_1{background-image:url(spritesmith-main-4.png);background-position:-1107px -1557px;width:40px;height:40px}.shop_shield_special_goldenknight{background-image:url(spritesmith-main-4.png);background-position:-1148px -1557px;width:40px;height:40px}.shop_shield_special_moonpearlShield{background-image:url(spritesmith-main-4.png);background-position:-1189px -1557px;width:40px;height:40px}.shop_shield_warrior_1{background-image:url(spritesmith-main-4.png);background-position:-1230px -1557px;width:40px;height:40px}.shop_shield_warrior_2{background-image:url(spritesmith-main-4.png);background-position:-1271px -1557px;width:40px;height:40px}.shop_shield_warrior_3{background-image:url(spritesmith-main-4.png);background-position:-1312px -1557px;width:40px;height:40px}.shop_shield_warrior_4{background-image:url(spritesmith-main-4.png);background-position:-1353px -1557px;width:40px;height:40px}.shop_shield_warrior_5{background-image:url(spritesmith-main-4.png);background-position:-1394px -1557px;width:40px;height:40px}.shop_weapon_healer_0{background-image:url(spritesmith-main-4.png);background-position:-1435px -1557px;width:40px;height:40px}.shop_weapon_healer_1{background-image:url(spritesmith-main-4.png);background-position:-1476px -1557px;width:40px;height:40px}.shop_weapon_healer_2{background-image:url(spritesmith-main-4.png);background-position:-1517px -1557px;width:40px;height:40px}.shop_weapon_healer_3{background-image:url(spritesmith-main-4.png);background-position:-1558px -1557px;width:40px;height:40px}.shop_weapon_healer_4{background-image:url(spritesmith-main-4.png);background-position:-1599px -1557px;width:40px;height:40px}.shop_weapon_healer_5{background-image:url(spritesmith-main-4.png);background-position:0 -1598px;width:40px;height:40px}.shop_weapon_healer_6{background-image:url(spritesmith-main-4.png);background-position:-41px -1598px;width:40px;height:40px}.shop_weapon_rogue_0{background-image:url(spritesmith-main-4.png);background-position:-82px -1598px;width:40px;height:40px}.shop_weapon_rogue_1{background-image:url(spritesmith-main-4.png);background-position:-123px -1598px;width:40px;height:40px}.shop_weapon_rogue_2{background-image:url(spritesmith-main-4.png);background-position:-164px -1598px;width:40px;height:40px}.shop_weapon_rogue_3{background-image:url(spritesmith-main-4.png);background-position:-205px -1598px;width:40px;height:40px}.shop_weapon_rogue_4{background-image:url(spritesmith-main-4.png);background-position:-246px -1598px;width:40px;height:40px}.shop_weapon_rogue_5{background-image:url(spritesmith-main-4.png);background-position:-287px -1598px;width:40px;height:40px}.shop_weapon_rogue_6{background-image:url(spritesmith-main-4.png);background-position:-328px -1598px;width:40px;height:40px}.shop_weapon_special_0{background-image:url(spritesmith-main-4.png);background-position:-369px -1598px;width:40px;height:40px}.shop_weapon_special_1{background-image:url(spritesmith-main-4.png);background-position:-410px -1598px;width:40px;height:40px}.shop_weapon_special_2{background-image:url(spritesmith-main-4.png);background-position:-451px -1598px;width:40px;height:40px}.shop_weapon_special_3{background-image:url(spritesmith-main-4.png);background-position:-492px -1598px;width:40px;height:40px}.shop_weapon_special_critical{background-image:url(spritesmith-main-4.png);background-position:-533px -1598px;width:40px;height:40px}.shop_weapon_special_tridentOfCrashingTides{background-image:url(spritesmith-main-4.png);background-position:-574px -1598px;width:40px;height:40px}.shop_weapon_warrior_0{background-image:url(spritesmith-main-4.png);background-position:-615px -1598px;width:40px;height:40px}.shop_weapon_warrior_1{background-image:url(spritesmith-main-4.png);background-position:-656px -1598px;width:40px;height:40px}.shop_weapon_warrior_2{background-image:url(spritesmith-main-4.png);background-position:-697px -1598px;width:40px;height:40px}.shop_weapon_warrior_3{background-image:url(spritesmith-main-4.png);background-position:-738px -1598px;width:40px;height:40px}.shop_weapon_warrior_4{background-image:url(spritesmith-main-4.png);background-position:-779px -1598px;width:40px;height:40px}.shop_weapon_warrior_5{background-image:url(spritesmith-main-4.png);background-position:-820px -1598px;width:40px;height:40px}.shop_weapon_warrior_6{background-image:url(spritesmith-main-4.png);background-position:-861px -1598px;width:40px;height:40px}.shop_weapon_wizard_0{background-image:url(spritesmith-main-4.png);background-position:-902px -1598px;width:40px;height:40px}.shop_weapon_wizard_1{background-image:url(spritesmith-main-4.png);background-position:-943px -1598px;width:40px;height:40px}.shop_weapon_wizard_2{background-image:url(spritesmith-main-4.png);background-position:-984px -1598px;width:40px;height:40px}.shop_weapon_wizard_3{background-image:url(spritesmith-main-4.png);background-position:-1025px -1598px;width:40px;height:40px}.shop_weapon_wizard_4{background-image:url(spritesmith-main-4.png);background-position:-1066px -1598px;width:40px;height:40px}.shop_weapon_wizard_5{background-image:url(spritesmith-main-4.png);background-position:-1107px -1598px;width:40px;height:40px}.shop_weapon_wizard_6{background-image:url(spritesmith-main-4.png);background-position:-1148px -1598px;width:40px;height:40px}.weapon_healer_0{background-image:url(spritesmith-main-4.png);background-position:-819px -879px;width:90px;height:90px}.weapon_healer_1{background-image:url(spritesmith-main-4.png);background-position:-728px -879px;width:90px;height:90px}.weapon_healer_2{background-image:url(spritesmith-main-4.png);background-position:-637px -879px;width:90px;height:90px}.weapon_healer_3{background-image:url(spritesmith-main-4.png);background-position:-546px -879px;width:90px;height:90px}.weapon_healer_4{background-image:url(spritesmith-main-4.png);background-position:-830px -637px;width:90px;height:90px}.weapon_healer_5{background-image:url(spritesmith-main-4.png);background-position:-830px -546px;width:90px;height:90px}.weapon_healer_6{background-image:url(spritesmith-main-4.png);background-position:-830px -455px;width:90px;height:90px}.weapon_rogue_0{background-image:url(spritesmith-main-4.png);background-position:-1183px -1425px;width:90px;height:90px}.weapon_rogue_1{background-image:url(spritesmith-main-4.png);background-position:-1473px -273px;width:90px;height:90px}.weapon_rogue_2{background-image:url(spritesmith-main-4.png);background-position:-1473px -182px;width:90px;height:90px}.weapon_rogue_3{background-image:url(spritesmith-main-4.png);background-position:-1473px -91px;width:90px;height:90px}.weapon_rogue_4{background-image:url(spritesmith-main-4.png);background-position:-1274px -1334px;width:90px;height:90px}.weapon_rogue_5{background-image:url(spritesmith-main-4.png);background-position:-819px -1334px;width:90px;height:90px}.weapon_rogue_6{background-image:url(spritesmith-main-4.png);background-position:-273px -1334px;width:90px;height:90px}.weapon_special_1{background-image:url(spritesmith-main-4.png);background-position:-208px -697px;width:102px;height:90px}.weapon_special_2{background-image:url(spritesmith-main-4.png);background-position:-1291px -637px;width:90px;height:90px}.weapon_special_3{background-image:url(spritesmith-main-4.png);background-position:-1291px -273px;width:90px;height:90px}.weapon_special_tridentOfCrashingTides{background-image:url(spritesmith-main-4.png);background-position:-1291px -182px;width:90px;height:90px}.weapon_warrior_0{background-image:url(spritesmith-main-4.png);background-position:-1092px -1152px;width:90px;height:90px}.weapon_warrior_1{background-image:url(spritesmith-main-4.png);background-position:-1001px -1152px;width:90px;height:90px}.weapon_warrior_2{background-image:url(spritesmith-main-4.png);background-position:-455px -1152px;width:90px;height:90px}.weapon_warrior_3{background-image:url(spritesmith-main-4.png);background-position:-364px -1152px;width:90px;height:90px}.weapon_warrior_4{background-image:url(spritesmith-main-4.png);background-position:-91px -1152px;width:90px;height:90px}.weapon_warrior_5{background-image:url(spritesmith-main-4.png);background-position:0 -1152px;width:90px;height:90px}.weapon_warrior_6{background-image:url(spritesmith-main-4.png);background-position:-1200px -546px;width:90px;height:90px}.weapon_wizard_0{background-image:url(spritesmith-main-4.png);background-position:-1200px -455px;width:90px;height:90px}.weapon_wizard_1{background-image:url(spritesmith-main-4.png);background-position:-1018px -819px;width:90px;height:90px}.weapon_wizard_2{background-image:url(spritesmith-main-4.png);background-position:-1018px -728px;width:90px;height:90px}.weapon_wizard_3{background-image:url(spritesmith-main-4.png);background-position:-1291px -819px;width:90px;height:90px}.weapon_wizard_4{background-image:url(spritesmith-main-4.png);background-position:-1291px -728px;width:90px;height:90px}.weapon_wizard_5{background-image:url(spritesmith-main-4.png);background-position:-1291px 0;width:90px;height:90px}.weapon_wizard_6{background-image:url(spritesmith-main-4.png);background-position:-1183px -1152px;width:90px;height:90px}.GrimReaper{background-image:url(spritesmith-main-4.png);background-position:-1564px -91px;width:57px;height:66px}.Pet_Currency_Gem{background-image:url(spritesmith-main-4.png);background-position:-1564px -314px;width:45px;height:39px}.Pet_Currency_Gem1x{background-image:url(spritesmith-main-4.png);background-position:-1655px -1093px;width:15px;height:13px}.Pet_Currency_Gem2x{background-image:url(spritesmith-main-4.png);background-position:-1655px -1066px;width:30px;height:26px}.PixelPaw-Gold{background-image:url(spritesmith-main-4.png);background-position:-1564px -262px;width:51px;height:51px}.PixelPaw{background-image:url(spritesmith-main-4.png);background-position:-1564px -210px;width:51px;height:51px}.PixelPaw002{background-image:url(spritesmith-main-4.png);background-position:-1564px -158px;width:51px;height:51px}.avatar_floral_healer{background-image:url(spritesmith-main-5.png);background-position:-200px -1487px;width:99px;height:99px}.avatar_floral_rogue{background-image:url(spritesmith-main-5.png);background-position:-100px -1487px;width:99px;height:99px}.avatar_floral_warrior{background-image:url(spritesmith-main-5.png);background-position:0 -1487px;width:99px;height:99px}.avatar_floral_wizard{background-image:url(spritesmith-main-5.png);background-position:-300px -1487px;width:99px;height:99px}.inventory_present{background-image:url(spritesmith-main-5.png);background-position:-1225px -1635px;width:48px;height:51px}.inventory_present_01{background-image:url(spritesmith-main-5.png);background-position:-1274px -1635px;width:48px;height:51px}.inventory_present_02{background-image:url(spritesmith-main-5.png);background-position:-1470px -1635px;width:48px;height:51px}.inventory_present_03{background-image:url(spritesmith-main-5.png);background-position:-1519px -1635px;width:48px;height:51px}.inventory_present_04{background-image:url(spritesmith-main-5.png);background-position:-1617px -1635px;width:48px;height:51px}.inventory_present_05{background-image:url(spritesmith-main-5.png);background-position:-1666px -1635px;width:48px;height:51px}.inventory_present_06{background-image:url(spritesmith-main-5.png);background-position:-1728px 0;width:48px;height:51px}.inventory_present_07{background-image:url(spritesmith-main-5.png);background-position:-1728px -52px;width:48px;height:51px}.inventory_present_08{background-image:url(spritesmith-main-5.png);background-position:-1728px -104px;width:48px;height:51px}.inventory_present_09{background-image:url(spritesmith-main-5.png);background-position:-1728px -156px;width:48px;height:51px}.inventory_present_10{background-image:url(spritesmith-main-5.png);background-position:-1728px -208px;width:48px;height:51px}.inventory_present_11{background-image:url(spritesmith-main-5.png);background-position:-1728px -260px;width:48px;height:51px}.inventory_present_12{background-image:url(spritesmith-main-5.png);background-position:-1728px -312px;width:48px;height:51px}.inventory_quest_scroll{background-image:url(spritesmith-main-5.png);background-position:-1728px -364px;width:48px;height:51px}.inventory_quest_scroll_locked{background-image:url(spritesmith-main-5.png);background-position:-1728px -416px;width:48px;height:51px}.inventory_special_fortify{background-image:url(spritesmith-main-5.png);background-position:-1637px -657px;width:57px;height:54px}.inventory_special_greeting{background-image:url(spritesmith-main-5.png);background-position:-1637px -492px;width:57px;height:54px}.inventory_special_nye{background-image:url(spritesmith-main-5.png);background-position:-1637px -712px;width:57px;height:54px}.inventory_special_opaquePotion{background-image:url(spritesmith-main-5.png);background-position:-1777px -815px;width:40px;height:40px}.inventory_special_seafoam{background-image:url(spritesmith-main-5.png);background-position:-1637px -547px;width:57px;height:54px}.inventory_special_shinySeed{background-image:url(spritesmith-main-5.png);background-position:-1637px -602px;width:57px;height:54px}.inventory_special_snowball{background-image:url(spritesmith-main-5.png);background-position:-1637px -987px;width:57px;height:54px}.inventory_special_spookDust{background-image:url(spritesmith-main-5.png);background-position:-1637px -437px;width:57px;height:54px}.inventory_special_thankyou{background-image:url(spritesmith-main-5.png);background-position:-1637px -767px;width:57px;height:54px}.inventory_special_trinket{background-image:url(spritesmith-main-5.png);background-position:-784px -1687px;width:48px;height:51px}.inventory_special_valentine{background-image:url(spritesmith-main-5.png);background-position:-1637px -822px;width:57px;height:54px}.knockout{background-image:url(spritesmith-main-5.png);background-position:0 -1587px;width:120px;height:47px}.pet_key{background-image:url(spritesmith-main-5.png);background-position:-1637px -932px;width:57px;height:54px}.rebirth_orb{background-image:url(spritesmith-main-5.png);background-position:-1637px -877px;width:57px;height:54px}.seafoam_star{background-image:url(spritesmith-main-5.png);background-position:-1637px 0;width:90px;height:90px}.shop_armoire{background-image:url(spritesmith-main-5.png);background-position:-1777px -1102px;width:40px;height:40px}.snowman{background-image:url(spritesmith-main-5.png);background-position:-1637px -182px;width:90px;height:90px}.spookman{background-image:url(spritesmith-main-5.png);background-position:-1637px -91px;width:90px;height:90px}.zzz{background-image:url(spritesmith-main-5.png);background-position:-1777px -1061px;width:40px;height:40px}.zzz_light{background-image:url(spritesmith-main-5.png);background-position:-1777px -979px;width:40px;height:40px}.npc_alex{background-image:url(spritesmith-main-5.png);background-position:-314px -1230px;width:162px;height:138px}.npc_bailey{background-image:url(spritesmith-main-5.png);background-position:-1637px -364px;width:60px;height:72px}.npc_daniel{background-image:url(spritesmith-main-5.png);background-position:-1317px -1093px;width:135px;height:123px}.npc_daniel_broken{background-image:url(spritesmith-main-5.png);background-position:-1100px -763px;width:135px;height:123px}.npc_ian{background-image:url(spritesmith-main-5.png);background-position:-1531px -1060px;width:75px;height:135px}.npc_ian_broken{background-image:url(spritesmith-main-5.png);background-position:-1531px -1196px;width:75px;height:135px}.npc_justin{background-image:url(spritesmith-main-5.png);background-position:-1531px -1332px;width:84px;height:120px}.npc_justin_head{background-image:url(spritesmith-main-5.png);background-position:-1777px -1184px;width:36px;height:39px}.npc_matt{background-image:url(spritesmith-main-5.png);background-position:-1317px -676px;width:195px;height:138px}.npc_timetravelers{background-image:url(spritesmith-main-5.png);background-position:-1317px -815px;width:195px;height:138px}.npc_timetravelers_active{background-image:url(spritesmith-main-5.png);background-position:-1317px -954px;width:195px;height:138px}.npc_tyler{background-image:url(spritesmith-main-5.png);background-position:-1637px -273px;width:90px;height:90px}.seasonalshop_broken{background-image:url(spritesmith-main-5.png);background-position:-1106px -1079px;width:162px;height:138px}.seasonalshop_closed{background-image:url(spritesmith-main-5.png);background-position:-151px -1230px;width:162px;height:138px}.seasonalshop_open{background-image:url(spritesmith-main-5.png);background-position:-943px -1079px;width:162px;height:138px}.inventory_quest_scroll_atom1{background-image:url(spritesmith-main-5.png);background-position:-882px -1635px;width:48px;height:51px}.inventory_quest_scroll_atom1_locked{background-image:url(spritesmith-main-5.png);background-position:-833px -1635px;width:48px;height:51px}.inventory_quest_scroll_atom2{background-image:url(spritesmith-main-5.png);background-position:-784px -1635px;width:48px;height:51px}.inventory_quest_scroll_atom2_locked{background-image:url(spritesmith-main-5.png);background-position:-735px -1635px;width:48px;height:51px}.inventory_quest_scroll_atom3{background-image:url(spritesmith-main-5.png);background-position:-686px -1635px;width:48px;height:51px}.inventory_quest_scroll_atom3_locked{background-image:url(spritesmith-main-5.png);background-position:-637px -1635px;width:48px;height:51px}.inventory_quest_scroll_basilist{background-image:url(spritesmith-main-5.png);background-position:-588px -1635px;width:48px;height:51px}.inventory_quest_scroll_bunny{background-image:url(spritesmith-main-5.png);background-position:-539px -1635px;width:48px;height:51px}.inventory_quest_scroll_cheetah{background-image:url(spritesmith-main-5.png);background-position:-392px -1635px;width:48px;height:51px}.inventory_quest_scroll_dilatoryDistress1{background-image:url(spritesmith-main-5.png);background-position:-343px -1635px;width:48px;height:51px}.inventory_quest_scroll_dilatoryDistress2{background-image:url(spritesmith-main-5.png);background-position:-294px -1635px;width:48px;height:51px}.inventory_quest_scroll_dilatoryDistress2_locked{background-image:url(spritesmith-main-5.png);background-position:-196px -1635px;width:48px;height:51px}.inventory_quest_scroll_dilatoryDistress3{background-image:url(spritesmith-main-5.png);background-position:-147px -1635px;width:48px;height:51px}.inventory_quest_scroll_dilatoryDistress3_locked{background-image:url(spritesmith-main-5.png);background-position:-98px -1635px;width:48px;height:51px}.inventory_quest_scroll_dilatory_derby{background-image:url(spritesmith-main-5.png);background-position:-1444px -1282px;width:48px;height:51px}.inventory_quest_scroll_egg{background-image:url(spritesmith-main-5.png);background-position:-1444px -1230px;width:48px;height:51px}.inventory_quest_scroll_evilsanta{background-image:url(spritesmith-main-5.png);background-position:-1236px -815px;width:48px;height:51px}.inventory_quest_scroll_evilsanta2{background-image:url(spritesmith-main-5.png);background-position:-1453px -1093px;width:48px;height:51px}.inventory_quest_scroll_ghost_stag{background-image:url(spritesmith-main-5.png);background-position:-1637px -1507px;width:48px;height:51px}.inventory_quest_scroll_goldenknight1{background-image:url(spritesmith-main-5.png);background-position:-1637px -1455px;width:48px;height:51px}.inventory_quest_scroll_goldenknight1_locked{background-image:url(spritesmith-main-5.png);background-position:-1637px -1250px;width:48px;height:51px}.inventory_quest_scroll_goldenknight2{background-image:url(spritesmith-main-5.png);background-position:-1637px -1198px;width:48px;height:51px}.inventory_quest_scroll_goldenknight2_locked{background-image:url(spritesmith-main-5.png);background-position:-1637px -1146px;width:48px;height:51px}.inventory_quest_scroll_goldenknight3{background-image:url(spritesmith-main-5.png);background-position:-1637px -1094px;width:48px;height:51px}.inventory_quest_scroll_goldenknight3_locked{background-image:url(spritesmith-main-5.png);background-position:-1637px -1042px;width:48px;height:51px}.inventory_quest_scroll_gryphon{background-image:url(spritesmith-main-5.png);background-position:-1777px -260px;width:48px;height:51px}.inventory_quest_scroll_harpy{background-image:url(spritesmith-main-5.png);background-position:-1777px -208px;width:48px;height:51px}.inventory_quest_scroll_hedgehog{background-image:url(spritesmith-main-5.png);background-position:-1777px -156px;width:48px;height:51px}.inventory_quest_scroll_horse{background-image:url(spritesmith-main-5.png);background-position:-1728px -572px;width:48px;height:51px}.inventory_quest_scroll_kraken{background-image:url(spritesmith-main-5.png);background-position:-1637px -1302px;width:48px;height:51px}.inventory_quest_scroll_moonstone1{background-image:url(spritesmith-main-5.png);background-position:-1453px -1145px;width:48px;height:51px}.inventory_quest_scroll_moonstone1_locked{background-image:url(spritesmith-main-5.png);background-position:0 -1635px;width:48px;height:51px}.inventory_quest_scroll_moonstone2{background-image:url(spritesmith-main-5.png);background-position:-245px -1635px;width:48px;height:51px}.inventory_quest_scroll_moonstone2_locked{background-image:url(spritesmith-main-5.png);background-position:-441px -1635px;width:48px;height:51px}.inventory_quest_scroll_moonstone3{background-image:url(spritesmith-main-5.png);background-position:-490px -1635px;width:48px;height:51px}.inventory_quest_scroll_moonstone3_locked{background-image:url(spritesmith-main-5.png);background-position:-931px -1635px;width:48px;height:51px}.inventory_quest_scroll_octopus{background-image:url(spritesmith-main-5.png);background-position:-980px -1635px;width:48px;height:51px}.inventory_quest_scroll_owl{background-image:url(spritesmith-main-5.png);background-position:-1029px -1635px;width:48px;height:51px}.inventory_quest_scroll_penguin{background-image:url(spritesmith-main-5.png);background-position:-1078px -1635px;width:48px;height:51px}.inventory_quest_scroll_rat{background-image:url(spritesmith-main-5.png);background-position:-1127px -1635px;width:48px;height:51px}.inventory_quest_scroll_rock{background-image:url(spritesmith-main-5.png);background-position:-1176px -1635px;width:48px;height:51px}.inventory_quest_scroll_rooster{background-image:url(spritesmith-main-5.png);background-position:-1323px -1635px;width:48px;height:51px}.inventory_quest_scroll_sheep{background-image:url(spritesmith-main-5.png);background-position:-1372px -1635px;width:48px;height:51px}.inventory_quest_scroll_slime{background-image:url(spritesmith-main-5.png);background-position:-1421px -1635px;width:48px;height:51px}.inventory_quest_scroll_spider{background-image:url(spritesmith-main-5.png);background-position:-1568px -1635px;width:48px;height:51px}.inventory_quest_scroll_trex{background-image:url(spritesmith-main-5.png);background-position:-392px -1687px;width:48px;height:51px}.inventory_quest_scroll_trex_undead{background-image:url(spritesmith-main-5.png);background-position:-441px -1687px;width:48px;height:51px}.inventory_quest_scroll_vice1{background-image:url(spritesmith-main-5.png);background-position:-490px -1687px;width:48px;height:51px}.inventory_quest_scroll_vice1_locked{background-image:url(spritesmith-main-5.png);background-position:-539px -1687px;width:48px;height:51px}.inventory_quest_scroll_vice2{background-image:url(spritesmith-main-5.png);background-position:-588px -1687px;width:48px;height:51px}.inventory_quest_scroll_vice2_locked{background-image:url(spritesmith-main-5.png);background-position:-637px -1687px;width:48px;height:51px}.inventory_quest_scroll_vice3{background-image:url(spritesmith-main-5.png);background-position:-686px -1687px;width:48px;height:51px}.inventory_quest_scroll_vice3_locked{background-image:url(spritesmith-main-5.png);background-position:-735px -1687px;width:48px;height:51px}.inventory_quest_scroll_whale{background-image:url(spritesmith-main-5.png);background-position:-833px -1687px;width:48px;height:51px}.quest_TEMPLATE_FOR_MISSING_IMAGE{background-image:url(spritesmith-main-5.png);background-position:-1288px -1487px;width:221px;height:39px}.quest_atom1{background-image:url(spritesmith-main-5.png);background-position:0 -1079px;width:250px;height:150px}.quest_atom2{background-image:url(spritesmith-main-5.png);background-position:-1317px -537px;width:207px;height:138px}.quest_atom3{background-image:url(spritesmith-main-5.png);background-position:-1100px -404px;width:216px;height:180px}.quest_basilist{background-image:url(spritesmith-main-5.png);background-position:-753px -1079px;width:189px;height:141px}.quest_bunny{background-image:url(spritesmith-main-5.png);background-position:-1100px -217px;width:210px;height:186px}.quest_cheetah{background-image:url(spritesmith-main-5.png);background-position:-440px 0;width:219px;height:219px}.quest_dilatory{background-image:url(spritesmith-main-5.png);background-position:0 -232px;width:219px;height:219px}.quest_dilatoryDistress1{background-image:url(spritesmith-main-5.png);background-position:-400px -1487px;width:221px;height:39px}.quest_dilatoryDistress1_blueFins{background-image:url(spritesmith-main-5.png);background-position:-1637px -1354px;width:51px;height:48px}.quest_dilatoryDistress1_fireCoral{background-image:url(spritesmith-main-5.png);background-position:-1637px -1403px;width:48px;height:51px}.quest_dilatoryDistress2{background-image:url(spritesmith-main-5.png);background-position:0 -1230px;width:150px;height:150px}.quest_dilatoryDistress3{background-image:url(spritesmith-main-5.png);background-position:-220px -232px;width:219px;height:219px}.quest_dilatory_derby{background-image:url(spritesmith-main-5.png);background-position:-440px -232px;width:219px;height:219px}.quest_egg{background-image:url(spritesmith-main-5.png);background-position:-1066px -1487px;width:221px;height:39px}.quest_egg_plainEgg{background-image:url(spritesmith-main-5.png);background-position:-1236px -763px;width:48px;height:51px}.quest_evilsanta{background-image:url(spritesmith-main-5.png);background-position:-477px -1230px;width:118px;height:131px}.quest_evilsanta2{background-image:url(spritesmith-main-5.png);background-position:-660px -220px;width:219px;height:219px}.quest_ghost_stag{background-image:url(spritesmith-main-5.png);background-position:-220px -452px;width:219px;height:219px}.quest_goldenknight1{background-image:url(spritesmith-main-5.png);background-position:-844px -1487px;width:221px;height:39px}.quest_goldenknight1_testimony{background-image:url(spritesmith-main-5.png);background-position:-49px -1635px;width:48px;height:51px}.quest_goldenknight2{background-image:url(spritesmith-main-5.png);background-position:-502px -1079px;width:250px;height:150px}.quest_goldenknight3{background-image:url(spritesmith-main-5.png);background-position:0 0;width:219px;height:231px}.quest_gryphon{background-image:url(spritesmith-main-5.png);background-position:-1100px -585px;width:216px;height:177px}.quest_harpy{background-image:url(spritesmith-main-5.png);background-position:-440px -452px;width:219px;height:219px}.quest_hedgehog{background-image:url(spritesmith-main-5.png);background-position:0 -892px;width:219px;height:186px}.quest_horse{background-image:url(spritesmith-main-5.png);background-position:-880px -220px;width:219px;height:219px}.quest_kraken{background-image:url(spritesmith-main-5.png);background-position:-1094px -892px;width:216px;height:177px}.quest_moonstone1{background-image:url(spritesmith-main-5.png);background-position:-622px -1487px;width:221px;height:39px}.quest_moonstone1_moonstone{background-image:url(spritesmith-main-5.png);background-position:-1777px -1356px;width:30px;height:30px}.quest_moonstone2{background-image:url(spritesmith-main-5.png);background-position:0 -672px;width:219px;height:219px}.quest_moonstone3{background-image:url(spritesmith-main-5.png);background-position:-220px -672px;width:219px;height:219px}.quest_octopus{background-image:url(spritesmith-main-5.png);background-position:-220px -892px;width:222px;height:177px}.quest_owl{background-image:url(spritesmith-main-5.png);background-position:-440px -672px;width:219px;height:219px}.quest_penguin{background-image:url(spritesmith-main-5.png);background-position:-1317px -353px;width:190px;height:183px}.quest_rat{background-image:url(spritesmith-main-5.png);background-position:-220px 0;width:219px;height:219px}.quest_rock{background-image:url(spritesmith-main-5.png);background-position:-1100px 0;width:216px;height:216px}.quest_rooster{background-image:url(spritesmith-main-5.png);background-position:-1317px 0;width:213px;height:174px}.quest_sheep{background-image:url(spritesmith-main-5.png);background-position:-660px -672px;width:219px;height:219px}.quest_slime{background-image:url(spritesmith-main-5.png);background-position:-880px -440px;width:219px;height:219px}.quest_spider{background-image:url(spritesmith-main-5.png);background-position:-251px -1079px;width:250px;height:150px}.quest_stressbeast{background-image:url(spritesmith-main-5.png);background-position:-880px 0;width:219px;height:219px}.quest_stressbeast_bailey{background-image:url(spritesmith-main-5.png);background-position:-660px -452px;width:219px;height:219px}.quest_stressbeast_guide{background-image:url(spritesmith-main-5.png);background-position:0 -452px;width:219px;height:219px}.quest_stressbeast_stables{background-image:url(spritesmith-main-5.png);background-position:-660px 0;width:219px;height:219px}.quest_trex{background-image:url(spritesmith-main-5.png);background-position:-1317px -175px;width:204px;height:177px}.quest_trex_undead{background-image:url(spritesmith-main-5.png);background-position:-877px -892px;width:216px;height:177px}.quest_vice1{background-image:url(spritesmith-main-5.png);background-position:-660px -892px;width:216px;height:177px}.quest_vice2{background-image:url(spritesmith-main-5.png);background-position:-400px -1527px;width:221px;height:39px}.quest_vice2_lightCrystal{background-image:url(spritesmith-main-5.png);background-position:-1777px -1143px;width:40px;height:40px}.quest_vice3{background-image:url(spritesmith-main-5.png);background-position:-443px -892px;width:216px;height:177px}.quest_whale{background-image:url(spritesmith-main-5.png);background-position:-880px -672px;width:219px;height:219px}.shop_copper{background-image:url(spritesmith-main-5.png);background-position:-1777px -1387px;width:32px;height:22px}.shop_eyes{background-image:url(spritesmith-main-5.png);background-position:-1777px -1020px;width:40px;height:40px}.shop_gold{background-image:url(spritesmith-main-5.png);background-position:-1777px -1410px;width:32px;height:22px}.shop_opaquePotion{background-image:url(spritesmith-main-5.png);background-position:-1777px -938px;width:40px;height:40px}.shop_potion{background-image:url(spritesmith-main-5.png);background-position:-1777px -897px;width:40px;height:40px}.shop_reroll{background-image:url(spritesmith-main-5.png);background-position:-1777px -856px;width:40px;height:40px}.shop_seafoam{background-image:url(spritesmith-main-5.png);background-position:-1777px -1323px;width:32px;height:32px}.shop_shinySeed{background-image:url(spritesmith-main-5.png);background-position:-1777px -1257px;width:32px;height:32px}.shop_silver{background-image:url(spritesmith-main-5.png);background-position:-1777px -1433px;width:32px;height:22px}.shop_snowball{background-image:url(spritesmith-main-5.png);background-position:-1777px -1224px;width:32px;height:32px}.shop_spookDust{background-image:url(spritesmith-main-5.png);background-position:-1777px -1290px;width:32px;height:32px}.Pet_Egg_BearCub{background-image:url(spritesmith-main-5.png);background-position:-1728px -468px;width:48px;height:51px}.Pet_Egg_Bunny{background-image:url(spritesmith-main-5.png);background-position:-1728px -520px;width:48px;height:51px}.Pet_Egg_Cactus{background-image:url(spritesmith-main-5.png);background-position:-1777px -312px;width:48px;height:51px}.Pet_Egg_Cheetah{background-image:url(spritesmith-main-5.png);background-position:-1728px -624px;width:48px;height:51px}.Pet_Egg_Cuttlefish{background-image:url(spritesmith-main-5.png);background-position:-1728px -676px;width:48px;height:51px}.Pet_Egg_Deer{background-image:url(spritesmith-main-5.png);background-position:-1728px -728px;width:48px;height:51px}.Pet_Egg_Dragon{background-image:url(spritesmith-main-5.png);background-position:-1728px -780px;width:48px;height:51px}.Pet_Egg_Egg{background-image:url(spritesmith-main-5.png);background-position:-1728px -832px;width:48px;height:51px}.Pet_Egg_FlyingPig{background-image:url(spritesmith-main-5.png);background-position:-1728px -884px;width:48px;height:51px}.Pet_Egg_Fox{background-image:url(spritesmith-main-5.png);background-position:-1728px -936px;width:48px;height:51px}.Pet_Egg_Gryphon{background-image:url(spritesmith-main-5.png);background-position:-1728px -988px;width:48px;height:51px}.Pet_Egg_Hedgehog{background-image:url(spritesmith-main-5.png);background-position:-1728px -1040px;width:48px;height:51px}.Pet_Egg_Horse{background-image:url(spritesmith-main-5.png);background-position:-1728px -1092px;width:48px;height:51px}.Pet_Egg_LionCub{background-image:url(spritesmith-main-5.png);background-position:-1728px -1144px;width:48px;height:51px}.Pet_Egg_Octopus{background-image:url(spritesmith-main-5.png);background-position:-1728px -1196px;width:48px;height:51px}.Pet_Egg_Owl{background-image:url(spritesmith-main-5.png);background-position:-1728px -1248px;width:48px;height:51px}.Pet_Egg_PandaCub{background-image:url(spritesmith-main-5.png);background-position:-1728px -1300px;width:48px;height:51px}.Pet_Egg_Parrot{background-image:url(spritesmith-main-5.png);background-position:-1728px -1352px;width:48px;height:51px}.Pet_Egg_Penguin{background-image:url(spritesmith-main-5.png);background-position:-1728px -1404px;width:48px;height:51px}.Pet_Egg_PolarBear{background-image:url(spritesmith-main-5.png);background-position:-1728px -1456px;width:48px;height:51px}.Pet_Egg_Rat{background-image:url(spritesmith-main-5.png);background-position:-1728px -1508px;width:48px;height:51px}.Pet_Egg_Rock{background-image:url(spritesmith-main-5.png);background-position:-1728px -1560px;width:48px;height:51px}.Pet_Egg_Rooster{background-image:url(spritesmith-main-5.png);background-position:-1728px -1612px;width:48px;height:51px}.Pet_Egg_Seahorse{background-image:url(spritesmith-main-5.png);background-position:0 -1687px;width:48px;height:51px}.Pet_Egg_Sheep{background-image:url(spritesmith-main-5.png);background-position:-49px -1687px;width:48px;height:51px}.Pet_Egg_Slime{background-image:url(spritesmith-main-5.png);background-position:-98px -1687px;width:48px;height:51px}.Pet_Egg_Spider{background-image:url(spritesmith-main-5.png);background-position:-147px -1687px;width:48px;height:51px}.Pet_Egg_TRex{background-image:url(spritesmith-main-5.png);background-position:-196px -1687px;width:48px;height:51px}.Pet_Egg_TigerCub{background-image:url(spritesmith-main-5.png);background-position:-245px -1687px;width:48px;height:51px}.Pet_Egg_Whale{background-image:url(spritesmith-main-5.png);background-position:-294px -1687px;width:48px;height:51px}.Pet_Egg_Wolf{background-image:url(spritesmith-main-5.png);background-position:-343px -1687px;width:48px;height:51px}.Pet_Food_Cake_Base{background-image:url(spritesmith-main-5.png);background-position:-1777px -683px;width:43px;height:43px}.Pet_Food_Cake_CottonCandyBlue{background-image:url(spritesmith-main-5.png);background-position:-1777px -727px;width:42px;height:44px}.Pet_Food_Cake_CottonCandyPink{background-image:url(spritesmith-main-5.png);background-position:-1777px -502px;width:43px;height:45px}.Pet_Food_Cake_Desert{background-image:url(spritesmith-main-5.png);background-position:-1777px -593px;width:43px;height:44px}.Pet_Food_Cake_Golden{background-image:url(spritesmith-main-5.png);background-position:-1777px -772px;width:43px;height:42px}.Pet_Food_Cake_Red{background-image:url(spritesmith-main-5.png);background-position:-1777px -638px;width:43px;height:44px}.Pet_Food_Cake_Shade{background-image:url(spritesmith-main-5.png);background-position:-1777px -548px;width:43px;height:44px}.Pet_Food_Cake_Skeleton{background-image:url(spritesmith-main-5.png);background-position:-1777px -409px;width:42px;height:47px}.Pet_Food_Cake_White{background-image:url(spritesmith-main-5.png);background-position:-1777px -457px;width:44px;height:44px}.Pet_Food_Cake_Zombie{background-image:url(spritesmith-main-5.png);background-position:-1777px -364px;width:45px;height:44px}.Pet_Food_Candy_Base{background-image:url(spritesmith-main-5.png);background-position:-882px -1687px;width:48px;height:51px}.Pet_Food_Candy_CottonCandyBlue{background-image:url(spritesmith-main-5.png);background-position:-931px -1687px;width:48px;height:51px}.Pet_Food_Candy_CottonCandyPink{background-image:url(spritesmith-main-5.png);background-position:-980px -1687px;width:48px;height:51px}.Pet_Food_Candy_Desert{background-image:url(spritesmith-main-5.png);background-position:-1029px -1687px;width:48px;height:51px}.Pet_Food_Candy_Golden{background-image:url(spritesmith-main-5.png);background-position:-1078px -1687px;width:48px;height:51px}.Pet_Food_Candy_Red{background-image:url(spritesmith-main-5.png);background-position:-1127px -1687px;width:48px;height:51px}.Pet_Food_Candy_Shade{background-image:url(spritesmith-main-5.png);background-position:-1176px -1687px;width:48px;height:51px}.Pet_Food_Candy_Skeleton{background-image:url(spritesmith-main-5.png);background-position:-1225px -1687px;width:48px;height:51px}.Pet_Food_Candy_White{background-image:url(spritesmith-main-5.png);background-position:-1274px -1687px;width:48px;height:51px}.Pet_Food_Candy_Zombie{background-image:url(spritesmith-main-5.png);background-position:-1323px -1687px;width:48px;height:51px}.Pet_Food_Chocolate{background-image:url(spritesmith-main-5.png);background-position:-1372px -1687px;width:48px;height:51px}.Pet_Food_CottonCandyBlue{background-image:url(spritesmith-main-5.png);background-position:-1421px -1687px;width:48px;height:51px}.Pet_Food_CottonCandyPink{background-image:url(spritesmith-main-5.png);background-position:-1470px -1687px;width:48px;height:51px}.Pet_Food_Fish{background-image:url(spritesmith-main-5.png);background-position:-1519px -1687px;width:48px;height:51px}.Pet_Food_Honey{background-image:url(spritesmith-main-5.png);background-position:-1568px -1687px;width:48px;height:51px}.Pet_Food_Meat{background-image:url(spritesmith-main-5.png);background-position:-1617px -1687px;width:48px;height:51px}.Pet_Food_Milk{background-image:url(spritesmith-main-5.png);background-position:-1666px -1687px;width:48px;height:51px}.Pet_Food_Potatoe{background-image:url(spritesmith-main-5.png);background-position:-1715px -1687px;width:48px;height:51px}.Pet_Food_RottenMeat{background-image:url(spritesmith-main-5.png);background-position:-1777px 0;width:48px;height:51px}.Pet_Food_Saddle{background-image:url(spritesmith-main-5.png);background-position:-1777px -52px;width:48px;height:51px}.Pet_Food_Strawberry{background-image:url(spritesmith-main-5.png);background-position:-1777px -104px;width:48px;height:51px}.Mount_Body_BearCub-Base{background-image:url(spritesmith-main-5.png);background-position:-742px -1381px;width:105px;height:105px}.Mount_Body_BearCub-CottonCandyBlue{background-image:url(spritesmith-main-5.png);background-position:-636px -1381px;width:105px;height:105px}.Mount_Body_BearCub-CottonCandyPink{background-image:url(spritesmith-main-5.png);background-position:-530px -1381px;width:105px;height:105px}.Mount_Body_BearCub-Desert{background-image:url(spritesmith-main-5.png);background-position:-424px -1381px;width:105px;height:105px}.Mount_Body_BearCub-Golden{background-image:url(spritesmith-main-5.png);background-position:-318px -1381px;width:105px;height:105px}.Mount_Body_BearCub-Polar{background-image:url(spritesmith-main-5.png);background-position:-212px -1381px;width:105px;height:105px}.Mount_Body_BearCub-Red{background-image:url(spritesmith-main-5.png);background-position:-106px -1381px;width:105px;height:105px}.Mount_Body_BearCub-Shade{background-image:url(spritesmith-main-5.png);background-position:0 -1381px;width:105px;height:105px}.Mount_Body_BearCub-Skeleton{background-image:url(spritesmith-main-5.png);background-position:-1338px -1230px;width:105px;height:105px}.Mount_Body_BearCub-Spooky{background-image:url(spritesmith-main-5.png);background-position:-1232px -1230px;width:105px;height:105px}.Mount_Body_BearCub-White{background-image:url(spritesmith-main-5.png);background-position:-1126px -1230px;width:105px;height:105px}.Mount_Body_BearCub-Zombie{background-image:url(spritesmith-main-5.png);background-position:-1020px -1230px;width:105px;height:105px}.Mount_Body_Bunny-Base{background-image:url(spritesmith-main-5.png);background-position:-914px -1230px;width:105px;height:105px}.Mount_Body_Bunny-CottonCandyBlue{background-image:url(spritesmith-main-5.png);background-position:-808px -1230px;width:105px;height:105px}.Mount_Body_Bunny-CottonCandyPink{background-image:url(spritesmith-main-5.png);background-position:-702px -1230px;width:105px;height:105px}.Mount_Body_Bunny-Desert{background-image:url(spritesmith-main-5.png);background-position:-596px -1230px;width:105px;height:105px}.Mount_Body_Bunny-Golden{background-image:url(spritesmith-main-5.png);background-position:-1531px -954px;width:105px;height:105px}.Mount_Body_Bunny-Red{background-image:url(spritesmith-main-5.png);background-position:-1531px -848px;width:105px;height:105px}.Mount_Body_Bunny-Shade{background-image:url(spritesmith-main-5.png);background-position:-1531px -742px;width:105px;height:105px}.Mount_Body_Bunny-Skeleton{background-image:url(spritesmith-main-5.png);background-position:-1531px -636px;width:105px;height:105px}.Mount_Body_Bunny-White{background-image:url(spritesmith-main-5.png);background-position:-1531px -530px;width:105px;height:105px}.Mount_Body_Bunny-Zombie{background-image:url(spritesmith-main-5.png);background-position:-1531px -424px;width:105px;height:105px}.Mount_Body_Cactus-Base{background-image:url(spritesmith-main-5.png);background-position:-1531px -318px;width:105px;height:105px}.Mount_Body_Cactus-CottonCandyBlue{background-image:url(spritesmith-main-5.png);background-position:-1531px -212px;width:105px;height:105px}.Mount_Body_Cactus-CottonCandyPink{background-image:url(spritesmith-main-5.png);background-position:-1531px -106px;width:105px;height:105px}.Mount_Body_Cactus-Desert{background-image:url(spritesmith-main-5.png);background-position:-1531px 0;width:105px;height:105px}.Mount_Body_Cactus-Golden{background-image:url(spritesmith-main-5.png);background-position:-1378px -1381px;width:105px;height:105px}.Mount_Body_Cactus-Red{background-image:url(spritesmith-main-5.png);background-position:-1272px -1381px;width:105px;height:105px}.Mount_Body_Cactus-Shade{background-image:url(spritesmith-main-5.png);background-position:-1166px -1381px;width:105px;height:105px}.Mount_Body_Cactus-Skeleton{background-image:url(spritesmith-main-5.png);background-position:-1060px -1381px;width:105px;height:105px}.Mount_Body_Cactus-Spooky{background-image:url(spritesmith-main-5.png);background-position:-954px -1381px;width:105px;height:105px}.Mount_Body_Cactus-White{background-image:url(spritesmith-main-5.png);background-position:-848px -1381px;width:105px;height:105px}.Mount_Body_Cactus-Zombie{background-image:url(spritesmith-main-6.png);background-position:-1202px -424px;width:105px;height:105px}.Mount_Body_Cheetah-Base{background-image:url(spritesmith-main-6.png);background-position:-212px -1108px;width:105px;height:105px}.Mount_Body_Cheetah-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-1202px -848px;width:105px;height:105px}.Mount_Body_Cheetah-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-1202px -954px;width:105px;height:105px}.Mount_Body_Cheetah-Desert{background-image:url(spritesmith-main-6.png);background-position:-454px -212px;width:105px;height:105px}.Mount_Body_Cheetah-Golden{background-image:url(spritesmith-main-6.png);background-position:0 -366px;width:105px;height:105px}.Mount_Body_Cheetah-Red{background-image:url(spritesmith-main-6.png);background-position:-106px -366px;width:105px;height:105px}.Mount_Body_Cheetah-Shade{background-image:url(spritesmith-main-6.png);background-position:-212px -366px;width:105px;height:105px}.Mount_Body_Cheetah-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-318px -366px;width:105px;height:105px}.Mount_Body_Cheetah-White{background-image:url(spritesmith-main-6.png);background-position:-424px -366px;width:105px;height:105px}.Mount_Body_Cheetah-Zombie{background-image:url(spritesmith-main-6.png);background-position:-566px 0;width:105px;height:105px}.Mount_Body_Cuttlefish-Base{background-image:url(spritesmith-main-6.png);background-position:-348px -115px;width:105px;height:114px}.Mount_Body_Cuttlefish-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-242px 0;width:105px;height:114px}.Mount_Body_Cuttlefish-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:0 -136px;width:105px;height:114px}.Mount_Body_Cuttlefish-Desert{background-image:url(spritesmith-main-6.png);background-position:-106px -136px;width:105px;height:114px}.Mount_Body_Cuttlefish-Golden{background-image:url(spritesmith-main-6.png);background-position:-212px -136px;width:105px;height:114px}.Mount_Body_Cuttlefish-Red{background-image:url(spritesmith-main-6.png);background-position:-348px 0;width:105px;height:114px}.Mount_Body_Cuttlefish-Shade{background-image:url(spritesmith-main-6.png);background-position:-318px -251px;width:105px;height:114px}.Mount_Body_Cuttlefish-Skeleton{background-image:url(spritesmith-main-6.png);background-position:0 -251px;width:105px;height:114px}.Mount_Body_Cuttlefish-White{background-image:url(spritesmith-main-6.png);background-position:-106px -251px;width:105px;height:114px}.Mount_Body_Cuttlefish-Zombie{background-image:url(spritesmith-main-6.png);background-position:-212px -251px;width:105px;height:114px}.Mount_Body_Deer-Base{background-image:url(spritesmith-main-6.png);background-position:-566px -106px;width:105px;height:105px}.Mount_Body_Deer-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-566px -212px;width:105px;height:105px}.Mount_Body_Deer-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-566px -318px;width:105px;height:105px}.Mount_Body_Deer-Desert{background-image:url(spritesmith-main-6.png);background-position:0 -472px;width:105px;height:105px}.Mount_Body_Deer-Golden{background-image:url(spritesmith-main-6.png);background-position:-106px -472px;width:105px;height:105px}.Mount_Body_Deer-Red{background-image:url(spritesmith-main-6.png);background-position:-212px -472px;width:105px;height:105px}.Mount_Body_Deer-Shade{background-image:url(spritesmith-main-6.png);background-position:-318px -472px;width:105px;height:105px}.Mount_Body_Deer-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-424px -472px;width:105px;height:105px}.Mount_Body_Deer-White{background-image:url(spritesmith-main-6.png);background-position:-530px -472px;width:105px;height:105px}.Mount_Body_Deer-Zombie{background-image:url(spritesmith-main-6.png);background-position:-672px 0;width:105px;height:105px}.Mount_Body_Dragon-Base{background-image:url(spritesmith-main-6.png);background-position:-672px -106px;width:105px;height:105px}.Mount_Body_Dragon-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-672px -212px;width:105px;height:105px}.Mount_Body_Dragon-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-672px -318px;width:105px;height:105px}.Mount_Body_Dragon-Desert{background-image:url(spritesmith-main-6.png);background-position:-672px -424px;width:105px;height:105px}.Mount_Body_Dragon-Golden{background-image:url(spritesmith-main-6.png);background-position:0 -578px;width:105px;height:105px}.Mount_Body_Dragon-Red{background-image:url(spritesmith-main-6.png);background-position:-106px -578px;width:105px;height:105px}.Mount_Body_Dragon-Shade{background-image:url(spritesmith-main-6.png);background-position:-212px -578px;width:105px;height:105px}.Mount_Body_Dragon-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-318px -578px;width:105px;height:105px}.Mount_Body_Dragon-Spooky{background-image:url(spritesmith-main-6.png);background-position:-424px -578px;width:105px;height:105px}.Mount_Body_Dragon-White{background-image:url(spritesmith-main-6.png);background-position:-530px -578px;width:105px;height:105px}.Mount_Body_Dragon-Zombie{background-image:url(spritesmith-main-6.png);background-position:-636px -578px;width:105px;height:105px}.Mount_Body_Egg-Base{background-image:url(spritesmith-main-6.png);background-position:-778px 0;width:105px;height:105px}.Mount_Body_Egg-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-778px -106px;width:105px;height:105px}.Mount_Body_Egg-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-778px -212px;width:105px;height:105px}.Mount_Body_Egg-Desert{background-image:url(spritesmith-main-6.png);background-position:-778px -318px;width:105px;height:105px}.Mount_Body_Egg-Golden{background-image:url(spritesmith-main-6.png);background-position:-778px -424px;width:105px;height:105px}.Mount_Body_Egg-Red{background-image:url(spritesmith-main-6.png);background-position:-778px -530px;width:105px;height:105px}.Mount_Body_Egg-Shade{background-image:url(spritesmith-main-6.png);background-position:0 -684px;width:105px;height:105px}.Mount_Body_Egg-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-106px -684px;width:105px;height:105px}.Mount_Body_Egg-White{background-image:url(spritesmith-main-6.png);background-position:-212px -684px;width:105px;height:105px}.Mount_Body_Egg-Zombie{background-image:url(spritesmith-main-6.png);background-position:-318px -684px;width:105px;height:105px}.Mount_Body_FlyingPig-Base{background-image:url(spritesmith-main-6.png);background-position:-424px -684px;width:105px;height:105px}.Mount_Body_FlyingPig-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-530px -684px;width:105px;height:105px}.Mount_Body_FlyingPig-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-636px -684px;width:105px;height:105px}.Mount_Body_FlyingPig-Desert{background-image:url(spritesmith-main-6.png);background-position:-742px -684px;width:105px;height:105px}.Mount_Body_FlyingPig-Golden{background-image:url(spritesmith-main-6.png);background-position:-884px 0;width:105px;height:105px}.Mount_Body_FlyingPig-Red{background-image:url(spritesmith-main-6.png);background-position:-884px -106px;width:105px;height:105px}.Mount_Body_FlyingPig-Shade{background-image:url(spritesmith-main-6.png);background-position:-884px -212px;width:105px;height:105px}.Mount_Body_FlyingPig-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-884px -318px;width:105px;height:105px}.Mount_Body_FlyingPig-Spooky{background-image:url(spritesmith-main-6.png);background-position:-884px -424px;width:105px;height:105px}.Mount_Body_FlyingPig-White{background-image:url(spritesmith-main-6.png);background-position:-884px -530px;width:105px;height:105px}.Mount_Body_FlyingPig-Zombie{background-image:url(spritesmith-main-6.png);background-position:-884px -636px;width:105px;height:105px}.Mount_Body_Fox-Base{background-image:url(spritesmith-main-6.png);background-position:0 -790px;width:105px;height:105px}.Mount_Body_Fox-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-106px -790px;width:105px;height:105px}.Mount_Body_Fox-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-212px -790px;width:105px;height:105px}.Mount_Body_Fox-Desert{background-image:url(spritesmith-main-6.png);background-position:-318px -790px;width:105px;height:105px}.Mount_Body_Fox-Golden{background-image:url(spritesmith-main-6.png);background-position:-424px -790px;width:105px;height:105px}.Mount_Body_Fox-Red{background-image:url(spritesmith-main-6.png);background-position:-530px -790px;width:105px;height:105px}.Mount_Body_Fox-Shade{background-image:url(spritesmith-main-6.png);background-position:-636px -790px;width:105px;height:105px}.Mount_Body_Fox-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-742px -790px;width:105px;height:105px}.Mount_Body_Fox-Spooky{background-image:url(spritesmith-main-6.png);background-position:-848px -790px;width:105px;height:105px}.Mount_Body_Fox-White{background-image:url(spritesmith-main-6.png);background-position:-990px 0;width:105px;height:105px}.Mount_Body_Fox-Zombie{background-image:url(spritesmith-main-6.png);background-position:-990px -106px;width:105px;height:105px}.Mount_Body_Gryphon-Base{background-image:url(spritesmith-main-6.png);background-position:-990px -212px;width:105px;height:105px}.Mount_Body_Gryphon-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-990px -318px;width:105px;height:105px}.Mount_Body_Gryphon-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-990px -424px;width:105px;height:105px}.Mount_Body_Gryphon-Desert{background-image:url(spritesmith-main-6.png);background-position:-990px -530px;width:105px;height:105px}.Mount_Body_Gryphon-Golden{background-image:url(spritesmith-main-6.png);background-position:-990px -636px;width:105px;height:105px}.Mount_Body_Gryphon-Red{background-image:url(spritesmith-main-6.png);background-position:-990px -742px;width:105px;height:105px}.Mount_Body_Gryphon-RoyalPurple{background-image:url(spritesmith-main-6.png);background-position:0 -896px;width:105px;height:105px}.Mount_Body_Gryphon-Shade{background-image:url(spritesmith-main-6.png);background-position:-106px -896px;width:105px;height:105px}.Mount_Body_Gryphon-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-212px -896px;width:105px;height:105px}.Mount_Body_Gryphon-White{background-image:url(spritesmith-main-6.png);background-position:-318px -896px;width:105px;height:105px}.Mount_Body_Gryphon-Zombie{background-image:url(spritesmith-main-6.png);background-position:-424px -896px;width:105px;height:105px}.Mount_Body_Hedgehog-Base{background-image:url(spritesmith-main-6.png);background-position:-530px -896px;width:105px;height:105px}.Mount_Body_Hedgehog-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-636px -896px;width:105px;height:105px}.Mount_Body_Hedgehog-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-742px -896px;width:105px;height:105px}.Mount_Body_Hedgehog-Desert{background-image:url(spritesmith-main-6.png);background-position:-848px -896px;width:105px;height:105px}.Mount_Body_Hedgehog-Golden{background-image:url(spritesmith-main-6.png);background-position:-954px -896px;width:105px;height:105px}.Mount_Body_Hedgehog-Red{background-image:url(spritesmith-main-6.png);background-position:-1096px 0;width:105px;height:105px}.Mount_Body_Hedgehog-Shade{background-image:url(spritesmith-main-6.png);background-position:-1096px -106px;width:105px;height:105px}.Mount_Body_Hedgehog-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-1096px -212px;width:105px;height:105px}.Mount_Body_Hedgehog-White{background-image:url(spritesmith-main-6.png);background-position:-1096px -318px;width:105px;height:105px}.Mount_Body_Hedgehog-Zombie{background-image:url(spritesmith-main-6.png);background-position:-1096px -424px;width:105px;height:105px}.Mount_Body_Horse-Base{background-image:url(spritesmith-main-6.png);background-position:-1096px -530px;width:105px;height:105px}.Mount_Body_Horse-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-1096px -636px;width:105px;height:105px}.Mount_Body_Horse-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-1096px -742px;width:105px;height:105px}.Mount_Body_Horse-Desert{background-image:url(spritesmith-main-6.png);background-position:-1096px -848px;width:105px;height:105px}.Mount_Body_Horse-Golden{background-image:url(spritesmith-main-6.png);background-position:0 -1002px;width:105px;height:105px}.Mount_Body_Horse-Red{background-image:url(spritesmith-main-6.png);background-position:-106px -1002px;width:105px;height:105px}.Mount_Body_Horse-Shade{background-image:url(spritesmith-main-6.png);background-position:-212px -1002px;width:105px;height:105px}.Mount_Body_Horse-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-318px -1002px;width:105px;height:105px}.Mount_Body_Horse-White{background-image:url(spritesmith-main-6.png);background-position:-424px -1002px;width:105px;height:105px}.Mount_Body_Horse-Zombie{background-image:url(spritesmith-main-6.png);background-position:-530px -1002px;width:105px;height:105px}.Mount_Body_JackOLantern-Base{background-image:url(spritesmith-main-6.png);background-position:-1732px -318px;width:90px;height:105px}.Mount_Body_LionCub-Base{background-image:url(spritesmith-main-6.png);background-position:-742px -1002px;width:105px;height:105px}.Mount_Body_LionCub-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-848px -1002px;width:105px;height:105px}.Mount_Body_LionCub-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-954px -1002px;width:105px;height:105px}.Mount_Body_LionCub-Desert{background-image:url(spritesmith-main-6.png);background-position:-1060px -1002px;width:105px;height:105px}.Mount_Body_LionCub-Ethereal{background-image:url(spritesmith-main-6.png);background-position:-1202px 0;width:105px;height:105px}.Mount_Body_LionCub-Golden{background-image:url(spritesmith-main-6.png);background-position:-1202px -106px;width:105px;height:105px}.Mount_Body_LionCub-Red{background-image:url(spritesmith-main-6.png);background-position:-1202px -212px;width:105px;height:105px}.Mount_Body_LionCub-Shade{background-image:url(spritesmith-main-6.png);background-position:-1202px -318px;width:105px;height:105px}.Mount_Body_LionCub-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-454px 0;width:111px;height:105px}.Mount_Body_LionCub-Spooky{background-image:url(spritesmith-main-6.png);background-position:-1202px -530px;width:105px;height:105px}.Mount_Body_LionCub-White{background-image:url(spritesmith-main-6.png);background-position:-1202px -636px;width:105px;height:105px}.Mount_Body_LionCub-Zombie{background-image:url(spritesmith-main-6.png);background-position:-1202px -742px;width:105px;height:105px}.Mount_Body_Mammoth-Base{background-image:url(spritesmith-main-6.png);background-position:-136px 0;width:105px;height:123px}.Mount_Body_MantisShrimp-Base{background-image:url(spritesmith-main-6.png);background-position:-454px -106px;width:108px;height:105px}.Mount_Body_Octopus-Base{background-image:url(spritesmith-main-6.png);background-position:0 -1108px;width:105px;height:105px}.Mount_Body_Octopus-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-106px -1108px;width:105px;height:105px}.Mount_Body_Octopus-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-1732px -212px;width:105px;height:105px}.Mount_Body_Octopus-Desert{background-image:url(spritesmith-main-6.png);background-position:-318px -1108px;width:105px;height:105px}.Mount_Body_Octopus-Golden{background-image:url(spritesmith-main-6.png);background-position:-424px -1108px;width:105px;height:105px}.Mount_Body_Octopus-Red{background-image:url(spritesmith-main-6.png);background-position:-530px -1108px;width:105px;height:105px}.Mount_Body_Octopus-Shade{background-image:url(spritesmith-main-6.png);background-position:-636px -1108px;width:105px;height:105px}.Mount_Body_Octopus-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-742px -1108px;width:105px;height:105px}.Mount_Body_Octopus-White{background-image:url(spritesmith-main-6.png);background-position:-848px -1108px;width:105px;height:105px}.Mount_Body_Octopus-Zombie{background-image:url(spritesmith-main-6.png);background-position:-954px -1108px;width:105px;height:105px}.Mount_Body_Orca-Base{background-image:url(spritesmith-main-6.png);background-position:-1060px -1108px;width:105px;height:105px}.Mount_Body_Owl-Base{background-image:url(spritesmith-main-6.png);background-position:-1166px -1108px;width:105px;height:105px}.Mount_Body_Owl-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-1308px 0;width:105px;height:105px}.Mount_Body_Owl-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-1308px -106px;width:105px;height:105px}.Mount_Body_Owl-Desert{background-image:url(spritesmith-main-6.png);background-position:-1308px -212px;width:105px;height:105px}.Mount_Body_Owl-Golden{background-image:url(spritesmith-main-6.png);background-position:-1308px -318px;width:105px;height:105px}.Mount_Body_Owl-Red{background-image:url(spritesmith-main-6.png);background-position:-1308px -424px;width:105px;height:105px}.Mount_Body_Owl-Shade{background-image:url(spritesmith-main-6.png);background-position:-1308px -530px;width:105px;height:105px}.Mount_Body_Owl-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-1308px -636px;width:105px;height:105px}.Mount_Body_Owl-White{background-image:url(spritesmith-main-6.png);background-position:-1308px -742px;width:105px;height:105px}.Mount_Body_Owl-Zombie{background-image:url(spritesmith-main-6.png);background-position:-1308px -848px;width:105px;height:105px}.Mount_Body_PandaCub-Base{background-image:url(spritesmith-main-6.png);background-position:-1308px -954px;width:105px;height:105px}.Mount_Body_PandaCub-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-1308px -1060px;width:105px;height:105px}.Mount_Body_PandaCub-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:0 -1214px;width:105px;height:105px}.Mount_Body_PandaCub-Desert{background-image:url(spritesmith-main-6.png);background-position:-106px -1214px;width:105px;height:105px}.Mount_Body_PandaCub-Golden{background-image:url(spritesmith-main-6.png);background-position:-212px -1214px;width:105px;height:105px}.Mount_Body_PandaCub-Red{background-image:url(spritesmith-main-6.png);background-position:-318px -1214px;width:105px;height:105px}.Mount_Body_PandaCub-Shade{background-image:url(spritesmith-main-6.png);background-position:-424px -1214px;width:105px;height:105px}.Mount_Body_PandaCub-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-530px -1214px;width:105px;height:105px}.Mount_Body_PandaCub-Spooky{background-image:url(spritesmith-main-6.png);background-position:-636px -1214px;width:105px;height:105px}.Mount_Body_PandaCub-White{background-image:url(spritesmith-main-6.png);background-position:-742px -1214px;width:105px;height:105px}.Mount_Body_PandaCub-Zombie{background-image:url(spritesmith-main-6.png);background-position:-848px -1214px;width:105px;height:105px}.Mount_Body_Parrot-Base{background-image:url(spritesmith-main-6.png);background-position:-954px -1214px;width:105px;height:105px}.Mount_Body_Parrot-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-1060px -1214px;width:105px;height:105px}.Mount_Body_Parrot-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-1166px -1214px;width:105px;height:105px}.Mount_Body_Parrot-Desert{background-image:url(spritesmith-main-6.png);background-position:-1272px -1214px;width:105px;height:105px}.Mount_Body_Parrot-Golden{background-image:url(spritesmith-main-6.png);background-position:-1414px 0;width:105px;height:105px}.Mount_Body_Parrot-Red{background-image:url(spritesmith-main-6.png);background-position:-1414px -106px;width:105px;height:105px}.Mount_Body_Parrot-Shade{background-image:url(spritesmith-main-6.png);background-position:-1414px -212px;width:105px;height:105px}.Mount_Body_Parrot-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-1414px -318px;width:105px;height:105px}.Mount_Body_Parrot-White{background-image:url(spritesmith-main-6.png);background-position:-1414px -424px;width:105px;height:105px}.Mount_Body_Parrot-Zombie{background-image:url(spritesmith-main-6.png);background-position:-1414px -530px;width:105px;height:105px}.Mount_Body_Penguin-Base{background-image:url(spritesmith-main-6.png);background-position:-1414px -636px;width:105px;height:105px}.Mount_Body_Penguin-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-1414px -742px;width:105px;height:105px}.Mount_Body_Penguin-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-1414px -848px;width:105px;height:105px}.Mount_Body_Penguin-Desert{background-image:url(spritesmith-main-6.png);background-position:-1414px -954px;width:105px;height:105px}.Mount_Body_Penguin-Golden{background-image:url(spritesmith-main-6.png);background-position:-1414px -1060px;width:105px;height:105px}.Mount_Body_Penguin-Red{background-image:url(spritesmith-main-6.png);background-position:-1414px -1166px;width:105px;height:105px}.Mount_Body_Penguin-Shade{background-image:url(spritesmith-main-6.png);background-position:0 -1320px;width:105px;height:105px}.Mount_Body_Penguin-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-106px -1320px;width:105px;height:105px}.Mount_Body_Penguin-White{background-image:url(spritesmith-main-6.png);background-position:-212px -1320px;width:105px;height:105px}.Mount_Body_Penguin-Zombie{background-image:url(spritesmith-main-6.png);background-position:-318px -1320px;width:105px;height:105px}.Mount_Body_Phoenix-Base{background-image:url(spritesmith-main-6.png);background-position:-424px -1320px;width:105px;height:105px}.Mount_Body_Rat-Base{background-image:url(spritesmith-main-6.png);background-position:-530px -1320px;width:105px;height:105px}.Mount_Body_Rat-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-636px -1320px;width:105px;height:105px}.Mount_Body_Rat-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-742px -1320px;width:105px;height:105px}.Mount_Body_Rat-Desert{background-image:url(spritesmith-main-6.png);background-position:-848px -1320px;width:105px;height:105px}.Mount_Body_Rat-Golden{background-image:url(spritesmith-main-6.png);background-position:-954px -1320px;width:105px;height:105px}.Mount_Body_Rat-Red{background-image:url(spritesmith-main-6.png);background-position:-1060px -1320px;width:105px;height:105px}.Mount_Body_Rat-Shade{background-image:url(spritesmith-main-6.png);background-position:-1166px -1320px;width:105px;height:105px}.Mount_Body_Rat-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-1272px -1320px;width:105px;height:105px}.Mount_Body_Rat-White{background-image:url(spritesmith-main-6.png);background-position:-1378px -1320px;width:105px;height:105px}.Mount_Body_Rat-Zombie{background-image:url(spritesmith-main-6.png);background-position:-1520px 0;width:105px;height:105px}.Mount_Body_Rock-Base{background-image:url(spritesmith-main-6.png);background-position:-1520px -106px;width:105px;height:105px}.Mount_Body_Rock-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-1520px -212px;width:105px;height:105px}.Mount_Body_Rock-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-1520px -318px;width:105px;height:105px}.Mount_Body_Rock-Desert{background-image:url(spritesmith-main-6.png);background-position:-1520px -424px;width:105px;height:105px}.Mount_Body_Rock-Golden{background-image:url(spritesmith-main-6.png);background-position:-1520px -530px;width:105px;height:105px}.Mount_Body_Rock-Red{background-image:url(spritesmith-main-6.png);background-position:-1520px -636px;width:105px;height:105px}.Mount_Body_Rock-Shade{background-image:url(spritesmith-main-6.png);background-position:-1520px -742px;width:105px;height:105px}.Mount_Body_Rock-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-1520px -848px;width:105px;height:105px}.Mount_Body_Rock-White{background-image:url(spritesmith-main-6.png);background-position:-1520px -954px;width:105px;height:105px}.Mount_Body_Rock-Zombie{background-image:url(spritesmith-main-6.png);background-position:-1520px -1060px;width:105px;height:105px}.Mount_Body_Rooster-Base{background-image:url(spritesmith-main-6.png);background-position:-1520px -1166px;width:105px;height:105px}.Mount_Body_Rooster-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-1520px -1272px;width:105px;height:105px}.Mount_Body_Rooster-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:0 -1426px;width:105px;height:105px}.Mount_Body_Rooster-Desert{background-image:url(spritesmith-main-6.png);background-position:-106px -1426px;width:105px;height:105px}.Mount_Body_Rooster-Golden{background-image:url(spritesmith-main-6.png);background-position:-212px -1426px;width:105px;height:105px}.Mount_Body_Rooster-Red{background-image:url(spritesmith-main-6.png);background-position:-318px -1426px;width:105px;height:105px}.Mount_Body_Rooster-Shade{background-image:url(spritesmith-main-6.png);background-position:-424px -1426px;width:105px;height:105px}.Mount_Body_Rooster-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-530px -1426px;width:105px;height:105px}.Mount_Body_Rooster-White{background-image:url(spritesmith-main-6.png);background-position:-636px -1426px;width:105px;height:105px}.Mount_Body_Rooster-Zombie{background-image:url(spritesmith-main-6.png);background-position:-742px -1426px;width:105px;height:105px}.Mount_Body_Seahorse-Base{background-image:url(spritesmith-main-6.png);background-position:-848px -1426px;width:105px;height:105px}.Mount_Body_Seahorse-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-954px -1426px;width:105px;height:105px}.Mount_Body_Seahorse-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-1060px -1426px;width:105px;height:105px}.Mount_Body_Seahorse-Desert{background-image:url(spritesmith-main-6.png);background-position:-1166px -1426px;width:105px;height:105px}.Mount_Body_Seahorse-Golden{background-image:url(spritesmith-main-6.png);background-position:-1272px -1426px;width:105px;height:105px}.Mount_Body_Seahorse-Red{background-image:url(spritesmith-main-6.png);background-position:-1378px -1426px;width:105px;height:105px}.Mount_Body_Seahorse-Shade{background-image:url(spritesmith-main-6.png);background-position:-1484px -1426px;width:105px;height:105px}.Mount_Body_Seahorse-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-1626px 0;width:105px;height:105px}.Mount_Body_Seahorse-White{background-image:url(spritesmith-main-6.png);background-position:-1626px -106px;width:105px;height:105px}.Mount_Body_Seahorse-Zombie{background-image:url(spritesmith-main-6.png);background-position:-1626px -212px;width:105px;height:105px}.Mount_Body_Sheep-Base{background-image:url(spritesmith-main-6.png);background-position:-1626px -318px;width:105px;height:105px}.Mount_Body_Sheep-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-1626px -424px;width:105px;height:105px}.Mount_Body_Sheep-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-1626px -530px;width:105px;height:105px}.Mount_Body_Sheep-Desert{background-image:url(spritesmith-main-6.png);background-position:-1626px -636px;width:105px;height:105px}.Mount_Body_Sheep-Golden{background-image:url(spritesmith-main-6.png);background-position:-1626px -742px;width:105px;height:105px}.Mount_Body_Sheep-Red{background-image:url(spritesmith-main-6.png);background-position:-1626px -848px;width:105px;height:105px}.Mount_Body_Sheep-Shade{background-image:url(spritesmith-main-6.png);background-position:-1626px -954px;width:105px;height:105px}.Mount_Body_Sheep-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-1626px -1060px;width:105px;height:105px}.Mount_Body_Sheep-White{background-image:url(spritesmith-main-6.png);background-position:-1626px -1166px;width:105px;height:105px}.Mount_Body_Sheep-Zombie{background-image:url(spritesmith-main-6.png);background-position:-1626px -1272px;width:105px;height:105px}.Mount_Body_Slime-Base{background-image:url(spritesmith-main-6.png);background-position:-1626px -1378px;width:105px;height:105px}.Mount_Body_Slime-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:0 -1532px;width:105px;height:105px}.Mount_Body_Slime-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-106px -1532px;width:105px;height:105px}.Mount_Body_Slime-Desert{background-image:url(spritesmith-main-6.png);background-position:-212px -1532px;width:105px;height:105px}.Mount_Body_Slime-Golden{background-image:url(spritesmith-main-6.png);background-position:-318px -1532px;width:105px;height:105px}.Mount_Body_Slime-Red{background-image:url(spritesmith-main-6.png);background-position:-424px -1532px;width:105px;height:105px}.Mount_Body_Slime-Shade{background-image:url(spritesmith-main-6.png);background-position:-530px -1532px;width:105px;height:105px}.Mount_Body_Slime-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-636px -1532px;width:105px;height:105px}.Mount_Body_Slime-White{background-image:url(spritesmith-main-6.png);background-position:-742px -1532px;width:105px;height:105px}.Mount_Body_Slime-Zombie{background-image:url(spritesmith-main-6.png);background-position:-848px -1532px;width:105px;height:105px}.Mount_Body_Spider-Base{background-image:url(spritesmith-main-6.png);background-position:-954px -1532px;width:105px;height:105px}.Mount_Body_Spider-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-1060px -1532px;width:105px;height:105px}.Mount_Body_Spider-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-1166px -1532px;width:105px;height:105px}.Mount_Body_Spider-Desert{background-image:url(spritesmith-main-6.png);background-position:-1272px -1532px;width:105px;height:105px}.Mount_Body_Spider-Golden{background-image:url(spritesmith-main-6.png);background-position:-1378px -1532px;width:105px;height:105px}.Mount_Body_Spider-Red{background-image:url(spritesmith-main-6.png);background-position:-1484px -1532px;width:105px;height:105px}.Mount_Body_Spider-Shade{background-image:url(spritesmith-main-6.png);background-position:-1590px -1532px;width:105px;height:105px}.Mount_Body_Spider-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-1732px 0;width:105px;height:105px}.Mount_Body_Spider-White{background-image:url(spritesmith-main-6.png);background-position:-1732px -106px;width:105px;height:105px}.Mount_Body_Spider-Zombie{background-image:url(spritesmith-main-6.png);background-position:-636px -1002px;width:105px;height:105px}.Mount_Body_TRex-Base{background-image:url(spritesmith-main-6.png);background-position:0 0;width:135px;height:135px}.Mount_Body_TRex-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-136px 0;width:135px;height:135px}.Mount_Body_TRex-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-544px -408px;width:135px;height:135px}.Mount_Body_TRex-Desert{background-image:url(spritesmith-main-7.png);background-position:-544px 0;width:135px;height:135px}.Mount_Body_TRex-Golden{background-image:url(spritesmith-main-7.png);background-position:0 -136px;width:135px;height:135px}.Mount_Body_TRex-Red{background-image:url(spritesmith-main-7.png);background-position:-136px -136px;width:135px;height:135px}.Mount_Body_TRex-Shade{background-image:url(spritesmith-main-7.png);background-position:-272px 0;width:135px;height:135px}.Mount_Body_TRex-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-272px -136px;width:135px;height:135px}.Mount_Body_TRex-White{background-image:url(spritesmith-main-7.png);background-position:0 -272px;width:135px;height:135px}.Mount_Body_TRex-Zombie{background-image:url(spritesmith-main-7.png);background-position:-136px -272px;width:135px;height:135px}.Mount_Body_TigerCub-Base{background-image:url(spritesmith-main-7.png);background-position:-1528px -848px;width:105px;height:105px}.Mount_Body_TigerCub-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-215px -668px;width:105px;height:105px}.Mount_Body_TigerCub-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-321px -668px;width:105px;height:105px}.Mount_Body_TigerCub-Desert{background-image:url(spritesmith-main-7.png);background-position:-427px -668px;width:105px;height:105px}.Mount_Body_TigerCub-Golden{background-image:url(spritesmith-main-7.png);background-position:-533px -668px;width:105px;height:105px}.Mount_Body_TigerCub-Red{background-image:url(spritesmith-main-7.png);background-position:-639px -668px;width:105px;height:105px}.Mount_Body_TigerCub-Shade{background-image:url(spritesmith-main-7.png);background-position:-786px 0;width:105px;height:105px}.Mount_Body_TigerCub-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-786px -106px;width:105px;height:105px}.Mount_Body_TigerCub-Spooky{background-image:url(spritesmith-main-7.png);background-position:-786px -212px;width:105px;height:105px}.Mount_Body_TigerCub-White{background-image:url(spritesmith-main-7.png);background-position:-786px -318px;width:105px;height:105px}.Mount_Body_TigerCub-Zombie{background-image:url(spritesmith-main-7.png);background-position:-636px -991px;width:105px;height:105px}.Mount_Body_Turkey-Base{background-image:url(spritesmith-main-7.png);background-position:-742px -991px;width:105px;height:105px}.Mount_Body_Whale-Base{background-image:url(spritesmith-main-7.png);background-position:-848px -991px;width:105px;height:105px}.Mount_Body_Whale-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-954px -991px;width:105px;height:105px}.Mount_Body_Whale-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-1104px 0;width:105px;height:105px}.Mount_Body_Whale-Desert{background-image:url(spritesmith-main-7.png);background-position:-1104px -106px;width:105px;height:105px}.Mount_Body_Whale-Golden{background-image:url(spritesmith-main-7.png);background-position:-1104px -212px;width:105px;height:105px}.Mount_Body_Whale-Red{background-image:url(spritesmith-main-7.png);background-position:-1104px -318px;width:105px;height:105px}.Mount_Body_Whale-Shade{background-image:url(spritesmith-main-7.png);background-position:-1104px -424px;width:105px;height:105px}.Mount_Body_Whale-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-1104px -530px;width:105px;height:105px}.Mount_Body_Whale-White{background-image:url(spritesmith-main-7.png);background-position:-1210px -742px;width:105px;height:105px}.Mount_Body_Whale-Zombie{background-image:url(spritesmith-main-7.png);background-position:-1528px -318px;width:105px;height:105px}.Mount_Body_Wolf-Base{background-image:url(spritesmith-main-7.png);background-position:-272px -272px;width:135px;height:135px}.Mount_Body_Wolf-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-408px 0;width:135px;height:135px}.Mount_Body_Wolf-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-408px -136px;width:135px;height:135px}.Mount_Body_Wolf-Desert{background-image:url(spritesmith-main-7.png);background-position:-408px -272px;width:135px;height:135px}.Mount_Body_Wolf-Golden{background-image:url(spritesmith-main-7.png);background-position:0 -408px;width:135px;height:135px}.Mount_Body_Wolf-Red{background-image:url(spritesmith-main-7.png);background-position:-136px -408px;width:135px;height:135px}.Mount_Body_Wolf-Shade{background-image:url(spritesmith-main-7.png);background-position:-272px -408px;width:135px;height:135px}.Mount_Body_Wolf-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-408px -408px;width:135px;height:135px}.Mount_Body_Wolf-Spooky{background-image:url(spritesmith-main-7.png);background-position:0 0;width:135px;height:135px}.Mount_Body_Wolf-White{background-image:url(spritesmith-main-7.png);background-position:-544px -136px;width:135px;height:135px}.Mount_Body_Wolf-Zombie{background-image:url(spritesmith-main-7.png);background-position:-544px -272px;width:135px;height:135px}.Mount_Head_BearCub-Base{background-image:url(spritesmith-main-7.png);background-position:-786px -424px;width:105px;height:105px}.Mount_Head_BearCub-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-786px -530px;width:105px;height:105px}.Mount_Head_BearCub-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-786px -636px;width:105px;height:105px}.Mount_Head_BearCub-Desert{background-image:url(spritesmith-main-7.png);background-position:0 -779px;width:105px;height:105px}.Mount_Head_BearCub-Golden{background-image:url(spritesmith-main-7.png);background-position:-106px -779px;width:105px;height:105px}.Mount_Head_BearCub-Polar{background-image:url(spritesmith-main-7.png);background-position:-212px -779px;width:105px;height:105px}.Mount_Head_BearCub-Red{background-image:url(spritesmith-main-7.png);background-position:-318px -779px;width:105px;height:105px}.Mount_Head_BearCub-Shade{background-image:url(spritesmith-main-7.png);background-position:-424px -779px;width:105px;height:105px}.Mount_Head_BearCub-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-530px -779px;width:105px;height:105px}.Mount_Head_BearCub-Spooky{background-image:url(spritesmith-main-7.png);background-position:-636px -779px;width:105px;height:105px}.Mount_Head_BearCub-White{background-image:url(spritesmith-main-7.png);background-position:-742px -779px;width:105px;height:105px}.Mount_Head_BearCub-Zombie{background-image:url(spritesmith-main-7.png);background-position:-892px 0;width:105px;height:105px}.Mount_Head_Bunny-Base{background-image:url(spritesmith-main-7.png);background-position:-892px -106px;width:105px;height:105px}.Mount_Head_Bunny-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-892px -212px;width:105px;height:105px}.Mount_Head_Bunny-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-892px -318px;width:105px;height:105px}.Mount_Head_Bunny-Desert{background-image:url(spritesmith-main-7.png);background-position:-892px -424px;width:105px;height:105px}.Mount_Head_Bunny-Golden{background-image:url(spritesmith-main-7.png);background-position:-892px -530px;width:105px;height:105px}.Mount_Head_Bunny-Red{background-image:url(spritesmith-main-7.png);background-position:-892px -636px;width:105px;height:105px}.Mount_Head_Bunny-Shade{background-image:url(spritesmith-main-7.png);background-position:-892px -742px;width:105px;height:105px}.Mount_Head_Bunny-Skeleton{background-image:url(spritesmith-main-7.png);background-position:0 -885px;width:105px;height:105px}.Mount_Head_Bunny-White{background-image:url(spritesmith-main-7.png);background-position:-106px -885px;width:105px;height:105px}.Mount_Head_Bunny-Zombie{background-image:url(spritesmith-main-7.png);background-position:-212px -885px;width:105px;height:105px}.Mount_Head_Cactus-Base{background-image:url(spritesmith-main-7.png);background-position:-318px -885px;width:105px;height:105px}.Mount_Head_Cactus-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-424px -885px;width:105px;height:105px}.Mount_Head_Cactus-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-530px -885px;width:105px;height:105px}.Mount_Head_Cactus-Desert{background-image:url(spritesmith-main-7.png);background-position:-636px -885px;width:105px;height:105px}.Mount_Head_Cactus-Golden{background-image:url(spritesmith-main-7.png);background-position:-742px -885px;width:105px;height:105px}.Mount_Head_Cactus-Red{background-image:url(spritesmith-main-7.png);background-position:-848px -885px;width:105px;height:105px}.Mount_Head_Cactus-Shade{background-image:url(spritesmith-main-7.png);background-position:-998px 0;width:105px;height:105px}.Mount_Head_Cactus-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-998px -106px;width:105px;height:105px}.Mount_Head_Cactus-Spooky{background-image:url(spritesmith-main-7.png);background-position:-998px -212px;width:105px;height:105px}.Mount_Head_Cactus-White{background-image:url(spritesmith-main-7.png);background-position:-998px -318px;width:105px;height:105px}.Mount_Head_Cactus-Zombie{background-image:url(spritesmith-main-7.png);background-position:-998px -424px;width:105px;height:105px}.Mount_Head_Cheetah-Base{background-image:url(spritesmith-main-7.png);background-position:-998px -530px;width:105px;height:105px}.Mount_Head_Cheetah-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-998px -636px;width:105px;height:105px}.Mount_Head_Cheetah-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-998px -742px;width:105px;height:105px}.Mount_Head_Cheetah-Desert{background-image:url(spritesmith-main-7.png);background-position:-998px -848px;width:105px;height:105px}.Mount_Head_Cheetah-Golden{background-image:url(spritesmith-main-7.png);background-position:0 -991px;width:105px;height:105px}.Mount_Head_Cheetah-Red{background-image:url(spritesmith-main-7.png);background-position:-106px -991px;width:105px;height:105px}.Mount_Head_Cheetah-Shade{background-image:url(spritesmith-main-7.png);background-position:-212px -991px;width:105px;height:105px}.Mount_Head_Cheetah-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-318px -991px;width:105px;height:105px}.Mount_Head_Cheetah-White{background-image:url(spritesmith-main-7.png);background-position:-424px -991px;width:105px;height:105px}.Mount_Head_Cheetah-Zombie{background-image:url(spritesmith-main-7.png);background-position:-530px -991px;width:105px;height:105px}.Mount_Head_Cuttlefish-Base{background-image:url(spritesmith-main-7.png);background-position:-680px -345px;width:105px;height:114px}.Mount_Head_Cuttlefish-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-680px -460px;width:105px;height:114px}.Mount_Head_Cuttlefish-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-680px 0;width:105px;height:114px}.Mount_Head_Cuttlefish-Desert{background-image:url(spritesmith-main-7.png);background-position:-212px -544px;width:105px;height:114px}.Mount_Head_Cuttlefish-Golden{background-image:url(spritesmith-main-7.png);background-position:-318px -544px;width:105px;height:114px}.Mount_Head_Cuttlefish-Red{background-image:url(spritesmith-main-7.png);background-position:-424px -544px;width:105px;height:114px}.Mount_Head_Cuttlefish-Shade{background-image:url(spritesmith-main-7.png);background-position:-530px -544px;width:105px;height:114px}.Mount_Head_Cuttlefish-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-106px -544px;width:105px;height:114px}.Mount_Head_Cuttlefish-White{background-image:url(spritesmith-main-7.png);background-position:-680px -115px;width:105px;height:114px}.Mount_Head_Cuttlefish-Zombie{background-image:url(spritesmith-main-7.png);background-position:-680px -230px;width:105px;height:114px}.Mount_Head_Deer-Base{background-image:url(spritesmith-main-7.png);background-position:-1104px -636px;width:105px;height:105px}.Mount_Head_Deer-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-1104px -742px;width:105px;height:105px}.Mount_Head_Deer-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-1104px -848px;width:105px;height:105px}.Mount_Head_Deer-Desert{background-image:url(spritesmith-main-7.png);background-position:-1104px -954px;width:105px;height:105px}.Mount_Head_Deer-Golden{background-image:url(spritesmith-main-7.png);background-position:0 -1097px;width:105px;height:105px}.Mount_Head_Deer-Red{background-image:url(spritesmith-main-7.png);background-position:-106px -1097px;width:105px;height:105px}.Mount_Head_Deer-Shade{background-image:url(spritesmith-main-7.png);background-position:-212px -1097px;width:105px;height:105px}.Mount_Head_Deer-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-318px -1097px;width:105px;height:105px}.Mount_Head_Deer-White{background-image:url(spritesmith-main-7.png);background-position:-424px -1097px;width:105px;height:105px}.Mount_Head_Deer-Zombie{background-image:url(spritesmith-main-7.png);background-position:-530px -1097px;width:105px;height:105px}.Mount_Head_Dragon-Base{background-image:url(spritesmith-main-7.png);background-position:-636px -1097px;width:105px;height:105px}.Mount_Head_Dragon-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-742px -1097px;width:105px;height:105px}.Mount_Head_Dragon-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-848px -1097px;width:105px;height:105px}.Mount_Head_Dragon-Desert{background-image:url(spritesmith-main-7.png);background-position:-954px -1097px;width:105px;height:105px}.Mount_Head_Dragon-Golden{background-image:url(spritesmith-main-7.png);background-position:-1060px -1097px;width:105px;height:105px}.Mount_Head_Dragon-Red{background-image:url(spritesmith-main-7.png);background-position:-1210px 0;width:105px;height:105px}.Mount_Head_Dragon-Shade{background-image:url(spritesmith-main-7.png);background-position:-1210px -106px;width:105px;height:105px}.Mount_Head_Dragon-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-1210px -212px;width:105px;height:105px}.Mount_Head_Dragon-Spooky{background-image:url(spritesmith-main-7.png);background-position:-1210px -318px;width:105px;height:105px}.Mount_Head_Dragon-White{background-image:url(spritesmith-main-7.png);background-position:-1210px -424px;width:105px;height:105px}.Mount_Head_Dragon-Zombie{background-image:url(spritesmith-main-7.png);background-position:-1210px -530px;width:105px;height:105px}.Mount_Head_Egg-Base{background-image:url(spritesmith-main-7.png);background-position:-1210px -636px;width:105px;height:105px}.Mount_Head_Egg-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-424px -1627px;width:105px;height:105px}.Mount_Head_Egg-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-1210px -848px;width:105px;height:105px}.Mount_Head_Egg-Desert{background-image:url(spritesmith-main-7.png);background-position:-1210px -954px;width:105px;height:105px}.Mount_Head_Egg-Golden{background-image:url(spritesmith-main-7.png);background-position:-1210px -1060px;width:105px;height:105px}.Mount_Head_Egg-Red{background-image:url(spritesmith-main-7.png);background-position:0 -1203px;width:105px;height:105px}.Mount_Head_Egg-Shade{background-image:url(spritesmith-main-7.png);background-position:-106px -1203px;width:105px;height:105px}.Mount_Head_Egg-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-212px -1203px;width:105px;height:105px}.Mount_Head_Egg-White{background-image:url(spritesmith-main-7.png);background-position:-318px -1203px;width:105px;height:105px}.Mount_Head_Egg-Zombie{background-image:url(spritesmith-main-7.png);background-position:-424px -1203px;width:105px;height:105px}.Mount_Head_FlyingPig-Base{background-image:url(spritesmith-main-7.png);background-position:-530px -1203px;width:105px;height:105px}.Mount_Head_FlyingPig-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-636px -1203px;width:105px;height:105px}.Mount_Head_FlyingPig-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-742px -1203px;width:105px;height:105px}.Mount_Head_FlyingPig-Desert{background-image:url(spritesmith-main-7.png);background-position:-848px -1203px;width:105px;height:105px}.Mount_Head_FlyingPig-Golden{background-image:url(spritesmith-main-7.png);background-position:-954px -1203px;width:105px;height:105px}.Mount_Head_FlyingPig-Red{background-image:url(spritesmith-main-7.png);background-position:-1060px -1203px;width:105px;height:105px}.Mount_Head_FlyingPig-Shade{background-image:url(spritesmith-main-7.png);background-position:-1166px -1203px;width:105px;height:105px}.Mount_Head_FlyingPig-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-1316px 0;width:105px;height:105px}.Mount_Head_FlyingPig-Spooky{background-image:url(spritesmith-main-7.png);background-position:-1316px -106px;width:105px;height:105px}.Mount_Head_FlyingPig-White{background-image:url(spritesmith-main-7.png);background-position:-1316px -212px;width:105px;height:105px}.Mount_Head_FlyingPig-Zombie{background-image:url(spritesmith-main-7.png);background-position:-1316px -318px;width:105px;height:105px}.Mount_Head_Fox-Base{background-image:url(spritesmith-main-7.png);background-position:-1316px -424px;width:105px;height:105px}.Mount_Head_Fox-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-1316px -530px;width:105px;height:105px}.Mount_Head_Fox-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-1316px -636px;width:105px;height:105px}.Mount_Head_Fox-Desert{background-image:url(spritesmith-main-7.png);background-position:-1316px -742px;width:105px;height:105px}.Mount_Head_Fox-Golden{background-image:url(spritesmith-main-7.png);background-position:-1316px -848px;width:105px;height:105px}.Mount_Head_Fox-Red{background-image:url(spritesmith-main-7.png);background-position:-1316px -954px;width:105px;height:105px}.Mount_Head_Fox-Shade{background-image:url(spritesmith-main-7.png);background-position:-1316px -1060px;width:105px;height:105px}.Mount_Head_Fox-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-1316px -1166px;width:105px;height:105px}.Mount_Head_Fox-Spooky{background-image:url(spritesmith-main-7.png);background-position:0 -1309px;width:105px;height:105px}.Mount_Head_Fox-White{background-image:url(spritesmith-main-7.png);background-position:-106px -1309px;width:105px;height:105px}.Mount_Head_Fox-Zombie{background-image:url(spritesmith-main-7.png);background-position:-212px -1309px;width:105px;height:105px}.Mount_Head_Gryphon-Base{background-image:url(spritesmith-main-7.png);background-position:-318px -1309px;width:105px;height:105px}.Mount_Head_Gryphon-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-424px -1309px;width:105px;height:105px}.Mount_Head_Gryphon-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-530px -1309px;width:105px;height:105px}.Mount_Head_Gryphon-Desert{background-image:url(spritesmith-main-7.png);background-position:-636px -1309px;width:105px;height:105px}.Mount_Head_Gryphon-Golden{background-image:url(spritesmith-main-7.png);background-position:-742px -1309px;width:105px;height:105px}.Mount_Head_Gryphon-Red{background-image:url(spritesmith-main-7.png);background-position:-848px -1309px;width:105px;height:105px}.Mount_Head_Gryphon-RoyalPurple{background-image:url(spritesmith-main-7.png);background-position:-954px -1309px;width:105px;height:105px}.Mount_Head_Gryphon-Shade{background-image:url(spritesmith-main-7.png);background-position:-1060px -1309px;width:105px;height:105px}.Mount_Head_Gryphon-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-1166px -1309px;width:105px;height:105px}.Mount_Head_Gryphon-White{background-image:url(spritesmith-main-7.png);background-position:-1272px -1309px;width:105px;height:105px}.Mount_Head_Gryphon-Zombie{background-image:url(spritesmith-main-7.png);background-position:-1422px 0;width:105px;height:105px}.Mount_Head_Hedgehog-Base{background-image:url(spritesmith-main-7.png);background-position:-1422px -106px;width:105px;height:105px}.Mount_Head_Hedgehog-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-1422px -212px;width:105px;height:105px}.Mount_Head_Hedgehog-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-1422px -318px;width:105px;height:105px}.Mount_Head_Hedgehog-Desert{background-image:url(spritesmith-main-7.png);background-position:-1422px -424px;width:105px;height:105px}.Mount_Head_Hedgehog-Golden{background-image:url(spritesmith-main-7.png);background-position:-1422px -530px;width:105px;height:105px}.Mount_Head_Hedgehog-Red{background-image:url(spritesmith-main-7.png);background-position:-1422px -636px;width:105px;height:105px}.Mount_Head_Hedgehog-Shade{background-image:url(spritesmith-main-7.png);background-position:-1422px -742px;width:105px;height:105px}.Mount_Head_Hedgehog-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-1422px -848px;width:105px;height:105px}.Mount_Head_Hedgehog-White{background-image:url(spritesmith-main-7.png);background-position:-1422px -954px;width:105px;height:105px}.Mount_Head_Hedgehog-Zombie{background-image:url(spritesmith-main-7.png);background-position:-1422px -1060px;width:105px;height:105px}.Mount_Head_Horse-Base{background-image:url(spritesmith-main-7.png);background-position:-1422px -1166px;width:105px;height:105px}.Mount_Head_Horse-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-1422px -1272px;width:105px;height:105px}.Mount_Head_Horse-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:0 -1415px;width:105px;height:105px}.Mount_Head_Horse-Desert{background-image:url(spritesmith-main-7.png);background-position:-106px -1415px;width:105px;height:105px}.Mount_Head_Horse-Golden{background-image:url(spritesmith-main-7.png);background-position:-212px -1415px;width:105px;height:105px}.Mount_Head_Horse-Red{background-image:url(spritesmith-main-7.png);background-position:-318px -1415px;width:105px;height:105px}.Mount_Head_Horse-Shade{background-image:url(spritesmith-main-7.png);background-position:-424px -1415px;width:105px;height:105px}.Mount_Head_Horse-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-530px -1415px;width:105px;height:105px}.Mount_Head_Horse-White{background-image:url(spritesmith-main-7.png);background-position:-636px -1415px;width:105px;height:105px}.Mount_Head_Horse-Zombie{background-image:url(spritesmith-main-7.png);background-position:-742px -1415px;width:105px;height:105px}.Mount_Head_JackOLantern-Base{background-image:url(spritesmith-main-7.png);background-position:-530px -1627px;width:90px;height:105px}.Mount_Head_LionCub-Base{background-image:url(spritesmith-main-7.png);background-position:-954px -1415px;width:105px;height:105px}.Mount_Head_LionCub-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-1060px -1415px;width:105px;height:105px}.Mount_Head_LionCub-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-1166px -1415px;width:105px;height:105px}.Mount_Head_LionCub-Desert{background-image:url(spritesmith-main-7.png);background-position:-1272px -1415px;width:105px;height:105px}.Mount_Head_LionCub-Ethereal{background-image:url(spritesmith-main-7.png);background-position:-1378px -1415px;width:105px;height:105px}.Mount_Head_LionCub-Golden{background-image:url(spritesmith-main-7.png);background-position:-1528px 0;width:105px;height:105px}.Mount_Head_LionCub-Red{background-image:url(spritesmith-main-7.png);background-position:-1528px -106px;width:105px;height:105px}.Mount_Head_LionCub-Shade{background-image:url(spritesmith-main-7.png);background-position:-1528px -212px;width:105px;height:105px}.Mount_Head_LionCub-Skeleton{background-image:url(spritesmith-main-7.png);background-position:0 -668px;width:105px;height:110px}.Mount_Head_LionCub-Spooky{background-image:url(spritesmith-main-7.png);background-position:-1528px -424px;width:105px;height:105px}.Mount_Head_LionCub-White{background-image:url(spritesmith-main-7.png);background-position:-1528px -530px;width:105px;height:105px}.Mount_Head_LionCub-Zombie{background-image:url(spritesmith-main-7.png);background-position:-1528px -636px;width:105px;height:105px}.Mount_Head_Mammoth-Base{background-image:url(spritesmith-main-7.png);background-position:0 -544px;width:105px;height:123px}.Mount_Head_MantisShrimp-Base{background-image:url(spritesmith-main-7.png);background-position:-106px -668px;width:108px;height:105px}.Mount_Head_Octopus-Base{background-image:url(spritesmith-main-7.png);background-position:-1528px -954px;width:105px;height:105px}.Mount_Head_Octopus-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-1528px -1060px;width:105px;height:105px}.Mount_Head_Octopus-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-1528px -1166px;width:105px;height:105px}.Mount_Head_Octopus-Desert{background-image:url(spritesmith-main-7.png);background-position:-1528px -1272px;width:105px;height:105px}.Mount_Head_Octopus-Golden{background-image:url(spritesmith-main-7.png);background-position:-1528px -1378px;width:105px;height:105px}.Mount_Head_Octopus-Red{background-image:url(spritesmith-main-7.png);background-position:0 -1521px;width:105px;height:105px}.Mount_Head_Octopus-Shade{background-image:url(spritesmith-main-7.png);background-position:-106px -1521px;width:105px;height:105px}.Mount_Head_Octopus-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-212px -1521px;width:105px;height:105px}.Mount_Head_Octopus-White{background-image:url(spritesmith-main-7.png);background-position:-318px -1521px;width:105px;height:105px}.Mount_Head_Octopus-Zombie{background-image:url(spritesmith-main-7.png);background-position:-424px -1521px;width:105px;height:105px}.Mount_Head_Orca-Base{background-image:url(spritesmith-main-7.png);background-position:-530px -1521px;width:105px;height:105px}.Mount_Head_Owl-Base{background-image:url(spritesmith-main-7.png);background-position:-636px -1521px;width:105px;height:105px}.Mount_Head_Owl-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-742px -1521px;width:105px;height:105px}.Mount_Head_Owl-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-848px -1521px;width:105px;height:105px}.Mount_Head_Owl-Desert{background-image:url(spritesmith-main-7.png);background-position:-954px -1521px;width:105px;height:105px}.Mount_Head_Owl-Golden{background-image:url(spritesmith-main-7.png);background-position:-1060px -1521px;width:105px;height:105px}.Mount_Head_Owl-Red{background-image:url(spritesmith-main-7.png);background-position:-1166px -1521px;width:105px;height:105px}.Mount_Head_Owl-Shade{background-image:url(spritesmith-main-7.png);background-position:-1272px -1521px;width:105px;height:105px}.Mount_Head_Owl-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-1378px -1521px;width:105px;height:105px}.Mount_Head_Owl-White{background-image:url(spritesmith-main-7.png);background-position:-1484px -1521px;width:105px;height:105px}.Mount_Head_Owl-Zombie{background-image:url(spritesmith-main-7.png);background-position:-1634px 0;width:105px;height:105px}.Mount_Head_PandaCub-Base{background-image:url(spritesmith-main-7.png);background-position:-1634px -106px;width:105px;height:105px}.Mount_Head_PandaCub-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-1634px -212px;width:105px;height:105px}.Mount_Head_PandaCub-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-1634px -318px;width:105px;height:105px}.Mount_Head_PandaCub-Desert{background-image:url(spritesmith-main-7.png);background-position:-1634px -424px;width:105px;height:105px}.Mount_Head_PandaCub-Golden{background-image:url(spritesmith-main-7.png);background-position:-1634px -530px;width:105px;height:105px}.Mount_Head_PandaCub-Red{background-image:url(spritesmith-main-7.png);background-position:-1634px -636px;width:105px;height:105px}.Mount_Head_PandaCub-Shade{background-image:url(spritesmith-main-7.png);background-position:-1634px -742px;width:105px;height:105px}.Mount_Head_PandaCub-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-1634px -848px;width:105px;height:105px}.Mount_Head_PandaCub-Spooky{background-image:url(spritesmith-main-7.png);background-position:-1634px -954px;width:105px;height:105px}.Mount_Head_PandaCub-White{background-image:url(spritesmith-main-7.png);background-position:-1634px -1060px;width:105px;height:105px}.Mount_Head_PandaCub-Zombie{background-image:url(spritesmith-main-7.png);background-position:-1634px -1166px;width:105px;height:105px}.Mount_Head_Parrot-Base{background-image:url(spritesmith-main-7.png);background-position:-1634px -1272px;width:105px;height:105px}.Mount_Head_Parrot-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-1634px -1378px;width:105px;height:105px}.Mount_Head_Parrot-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-1634px -1484px;width:105px;height:105px}.Mount_Head_Parrot-Desert{background-image:url(spritesmith-main-7.png);background-position:0 -1627px;width:105px;height:105px}.Mount_Head_Parrot-Golden{background-image:url(spritesmith-main-7.png);background-position:-106px -1627px;width:105px;height:105px}.Mount_Head_Parrot-Red{background-image:url(spritesmith-main-7.png);background-position:-212px -1627px;width:105px;height:105px}.Mount_Head_Parrot-Shade{background-image:url(spritesmith-main-7.png);background-position:-318px -1627px;width:105px;height:105px}.Mount_Head_Parrot-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-848px -1415px;width:105px;height:105px}.Mount_Head_Parrot-White{background-image:url(spritesmith-main-7.png);background-position:-1528px -742px;width:105px;height:105px}.Mount_Head_Parrot-Zombie{background-image:url(spritesmith-main-8.png);background-position:-106px -998px;width:105px;height:105px}.Mount_Head_Penguin-Base{background-image:url(spritesmith-main-8.png);background-position:-212px -1210px;width:105px;height:105px}.Mount_Head_Penguin-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:0 -892px;width:105px;height:105px}.Mount_Head_Penguin-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-212px -998px;width:105px;height:105px}.Mount_Head_Penguin-Desert{background-image:url(spritesmith-main-8.png);background-position:-318px -998px;width:105px;height:105px}.Mount_Head_Penguin-Golden{background-image:url(spritesmith-main-8.png);background-position:-424px -998px;width:105px;height:105px}.Mount_Head_Penguin-Red{background-image:url(spritesmith-main-8.png);background-position:-530px -998px;width:105px;height:105px}.Mount_Head_Penguin-Shade{background-image:url(spritesmith-main-8.png);background-position:-636px -998px;width:105px;height:105px}.Mount_Head_Penguin-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-742px -998px;width:105px;height:105px}.Mount_Head_Penguin-White{background-image:url(spritesmith-main-8.png);background-position:-848px -998px;width:105px;height:105px}.Mount_Head_Penguin-Zombie{background-image:url(spritesmith-main-8.png);background-position:-954px -998px;width:105px;height:105px}.Mount_Head_Phoenix-Base{background-image:url(spritesmith-main-8.png);background-position:-1104px 0;width:105px;height:105px}.Mount_Head_Rat-Base{background-image:url(spritesmith-main-8.png);background-position:-1210px -212px;width:105px;height:105px}.Mount_Head_Rat-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1210px -318px;width:105px;height:105px}.Mount_Head_Rat-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-1210px -424px;width:105px;height:105px}.Mount_Head_Rat-Desert{background-image:url(spritesmith-main-8.png);background-position:-1210px -530px;width:105px;height:105px}.Mount_Head_Rat-Golden{background-image:url(spritesmith-main-8.png);background-position:-1210px -636px;width:105px;height:105px}.Mount_Head_Rat-Red{background-image:url(spritesmith-main-8.png);background-position:-1210px -742px;width:105px;height:105px}.Mount_Head_Rat-Shade{background-image:url(spritesmith-main-8.png);background-position:-1210px -848px;width:105px;height:105px}.Mount_Head_Rat-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-1210px -954px;width:105px;height:105px}.Mount_Head_Rat-White{background-image:url(spritesmith-main-8.png);background-position:-1210px -1060px;width:105px;height:105px}.Mount_Head_Rat-Zombie{background-image:url(spritesmith-main-8.png);background-position:0 -1210px;width:105px;height:105px}.Mount_Head_Rock-Base{background-image:url(spritesmith-main-8.png);background-position:-106px -1210px;width:105px;height:105px}.Mount_Head_Rock-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-242px -544px;width:105px;height:105px}.Mount_Head_Rock-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-348px -544px;width:105px;height:105px}.Mount_Head_Rock-Desert{background-image:url(spritesmith-main-8.png);background-position:-454px -544px;width:105px;height:105px}.Mount_Head_Rock-Golden{background-image:url(spritesmith-main-8.png);background-position:-560px -544px;width:105px;height:105px}.Mount_Head_Rock-Red{background-image:url(spritesmith-main-8.png);background-position:-680px 0;width:105px;height:105px}.Mount_Head_Rock-Shade{background-image:url(spritesmith-main-8.png);background-position:-680px -106px;width:105px;height:105px}.Mount_Head_Rock-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-680px -212px;width:105px;height:105px}.Mount_Head_Rock-White{background-image:url(spritesmith-main-8.png);background-position:-680px -318px;width:105px;height:105px}.Mount_Head_Rock-Zombie{background-image:url(spritesmith-main-8.png);background-position:-680px -424px;width:105px;height:105px}.Mount_Head_Rooster-Base{background-image:url(spritesmith-main-8.png);background-position:-680px -530px;width:105px;height:105px}.Mount_Head_Rooster-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:0 -680px;width:105px;height:105px}.Mount_Head_Rooster-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-106px -680px;width:105px;height:105px}.Mount_Head_Rooster-Desert{background-image:url(spritesmith-main-8.png);background-position:-212px -680px;width:105px;height:105px}.Mount_Head_Rooster-Golden{background-image:url(spritesmith-main-8.png);background-position:-318px -680px;width:105px;height:105px}.Mount_Head_Rooster-Red{background-image:url(spritesmith-main-8.png);background-position:-424px -680px;width:105px;height:105px}.Mount_Head_Rooster-Shade{background-image:url(spritesmith-main-8.png);background-position:-530px -680px;width:105px;height:105px}.Mount_Head_Rooster-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-636px -680px;width:105px;height:105px}.Mount_Head_Rooster-White{background-image:url(spritesmith-main-8.png);background-position:-786px 0;width:105px;height:105px}.Mount_Head_Rooster-Zombie{background-image:url(spritesmith-main-8.png);background-position:-786px -106px;width:105px;height:105px}.Mount_Head_Seahorse-Base{background-image:url(spritesmith-main-8.png);background-position:-786px -212px;width:105px;height:105px}.Mount_Head_Seahorse-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-786px -318px;width:105px;height:105px}.Mount_Head_Seahorse-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-786px -424px;width:105px;height:105px}.Mount_Head_Seahorse-Desert{background-image:url(spritesmith-main-8.png);background-position:-786px -530px;width:105px;height:105px}.Mount_Head_Seahorse-Golden{background-image:url(spritesmith-main-8.png);background-position:-786px -636px;width:105px;height:105px}.Mount_Head_Seahorse-Red{background-image:url(spritesmith-main-8.png);background-position:0 -786px;width:105px;height:105px}.Mount_Head_Seahorse-Shade{background-image:url(spritesmith-main-8.png);background-position:-106px -786px;width:105px;height:105px}.Mount_Head_Seahorse-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-212px -786px;width:105px;height:105px}.Mount_Head_Seahorse-White{background-image:url(spritesmith-main-8.png);background-position:-318px -786px;width:105px;height:105px}.Mount_Head_Seahorse-Zombie{background-image:url(spritesmith-main-8.png);background-position:-424px -786px;width:105px;height:105px}.Mount_Head_Sheep-Base{background-image:url(spritesmith-main-8.png);background-position:-530px -786px;width:105px;height:105px}.Mount_Head_Sheep-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-636px -786px;width:105px;height:105px}.Mount_Head_Sheep-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-742px -786px;width:105px;height:105px}.Mount_Head_Sheep-Desert{background-image:url(spritesmith-main-8.png);background-position:-892px 0;width:105px;height:105px}.Mount_Head_Sheep-Golden{background-image:url(spritesmith-main-8.png);background-position:-892px -106px;width:105px;height:105px}.Mount_Head_Sheep-Red{background-image:url(spritesmith-main-8.png);background-position:-892px -212px;width:105px;height:105px}.Mount_Head_Sheep-Shade{background-image:url(spritesmith-main-8.png);background-position:-892px -318px;width:105px;height:105px}.Mount_Head_Sheep-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-892px -424px;width:105px;height:105px}.Mount_Head_Sheep-White{background-image:url(spritesmith-main-8.png);background-position:-892px -530px;width:105px;height:105px}.Mount_Head_Sheep-Zombie{background-image:url(spritesmith-main-8.png);background-position:-892px -636px;width:105px;height:105px}.Mount_Head_Slime-Base{background-image:url(spritesmith-main-8.png);background-position:-892px -742px;width:105px;height:105px}.Mount_Head_Slime-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-136px -544px;width:105px;height:105px}.Mount_Head_Slime-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-106px -892px;width:105px;height:105px}.Mount_Head_Slime-Desert{background-image:url(spritesmith-main-8.png);background-position:-212px -892px;width:105px;height:105px}.Mount_Head_Slime-Golden{background-image:url(spritesmith-main-8.png);background-position:-318px -892px;width:105px;height:105px}.Mount_Head_Slime-Red{background-image:url(spritesmith-main-8.png);background-position:-424px -892px;width:105px;height:105px}.Mount_Head_Slime-Shade{background-image:url(spritesmith-main-8.png);background-position:-530px -892px;width:105px;height:105px}.Mount_Head_Slime-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-636px -892px;width:105px;height:105px}.Mount_Head_Slime-White{background-image:url(spritesmith-main-8.png);background-position:-742px -892px;width:105px;height:105px}.Mount_Head_Slime-Zombie{background-image:url(spritesmith-main-8.png);background-position:-848px -892px;width:105px;height:105px}.Mount_Head_Spider-Base{background-image:url(spritesmith-main-8.png);background-position:-998px 0;width:105px;height:105px}.Mount_Head_Spider-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-998px -106px;width:105px;height:105px}.Mount_Head_Spider-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-998px -212px;width:105px;height:105px}.Mount_Head_Spider-Desert{background-image:url(spritesmith-main-8.png);background-position:-998px -318px;width:105px;height:105px}.Mount_Head_Spider-Golden{background-image:url(spritesmith-main-8.png);background-position:-998px -424px;width:105px;height:105px}.Mount_Head_Spider-Red{background-image:url(spritesmith-main-8.png);background-position:-998px -530px;width:105px;height:105px}.Mount_Head_Spider-Shade{background-image:url(spritesmith-main-8.png);background-position:-998px -636px;width:105px;height:105px}.Mount_Head_Spider-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-998px -742px;width:105px;height:105px}.Mount_Head_Spider-White{background-image:url(spritesmith-main-8.png);background-position:-998px -848px;width:105px;height:105px}.Mount_Head_Spider-Zombie{background-image:url(spritesmith-main-8.png);background-position:0 -998px;width:105px;height:105px}.Mount_Head_TRex-Base{background-image:url(spritesmith-main-8.png);background-position:-408px -272px;width:135px;height:135px}.Mount_Head_TRex-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:0 -136px;width:135px;height:135px}.Mount_Head_TRex-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-136px -136px;width:135px;height:135px}.Mount_Head_TRex-Desert{background-image:url(spritesmith-main-8.png);background-position:-272px 0;width:135px;height:135px}.Mount_Head_TRex-Golden{background-image:url(spritesmith-main-8.png);background-position:-272px -136px;width:135px;height:135px}.Mount_Head_TRex-Red{background-image:url(spritesmith-main-8.png);background-position:0 -272px;width:135px;height:135px}.Mount_Head_TRex-Shade{background-image:url(spritesmith-main-8.png);background-position:-136px -272px;width:135px;height:135px}.Mount_Head_TRex-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-272px -272px;width:135px;height:135px}.Mount_Head_TRex-White{background-image:url(spritesmith-main-8.png);background-position:-408px 0;width:135px;height:135px}.Mount_Head_TRex-Zombie{background-image:url(spritesmith-main-8.png);background-position:-408px -136px;width:135px;height:135px}.Mount_Head_TigerCub-Base{background-image:url(spritesmith-main-8.png);background-position:-1104px -106px;width:105px;height:105px}.Mount_Head_TigerCub-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1104px -212px;width:105px;height:105px}.Mount_Head_TigerCub-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-1104px -318px;width:105px;height:105px}.Mount_Head_TigerCub-Desert{background-image:url(spritesmith-main-8.png);background-position:-1104px -424px;width:105px;height:105px}.Mount_Head_TigerCub-Golden{background-image:url(spritesmith-main-8.png);background-position:-1104px -530px;width:105px;height:105px}.Mount_Head_TigerCub-Red{background-image:url(spritesmith-main-8.png);background-position:-1104px -636px;width:105px;height:105px}.Mount_Head_TigerCub-Shade{background-image:url(spritesmith-main-8.png);background-position:-1104px -742px;width:105px;height:105px}.Mount_Head_TigerCub-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-1104px -848px;width:105px;height:105px}.Mount_Head_TigerCub-Spooky{background-image:url(spritesmith-main-8.png);background-position:-1104px -954px;width:105px;height:105px}.Mount_Head_TigerCub-White{background-image:url(spritesmith-main-8.png);background-position:0 -1104px;width:105px;height:105px}.Mount_Head_TigerCub-Zombie{background-image:url(spritesmith-main-8.png);background-position:-106px -1104px;width:105px;height:105px}.Mount_Head_Turkey-Base{background-image:url(spritesmith-main-8.png);background-position:-212px -1104px;width:105px;height:105px}.Mount_Head_Whale-Base{background-image:url(spritesmith-main-8.png);background-position:-318px -1104px;width:105px;height:105px}.Mount_Head_Whale-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-424px -1104px;width:105px;height:105px}.Mount_Head_Whale-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-530px -1104px;width:105px;height:105px}.Mount_Head_Whale-Desert{background-image:url(spritesmith-main-8.png);background-position:-636px -1104px;width:105px;height:105px}.Mount_Head_Whale-Golden{background-image:url(spritesmith-main-8.png);background-position:-742px -1104px;width:105px;height:105px}.Mount_Head_Whale-Red{background-image:url(spritesmith-main-8.png);background-position:-848px -1104px;width:105px;height:105px}.Mount_Head_Whale-Shade{background-image:url(spritesmith-main-8.png);background-position:-954px -1104px;width:105px;height:105px}.Mount_Head_Whale-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-1060px -1104px;width:105px;height:105px}.Mount_Head_Whale-White{background-image:url(spritesmith-main-8.png);background-position:-1210px 0;width:105px;height:105px}.Mount_Head_Whale-Zombie{background-image:url(spritesmith-main-8.png);background-position:-1210px -106px;width:105px;height:105px}.Mount_Head_Wolf-Base{background-image:url(spritesmith-main-8.png);background-position:0 0;width:135px;height:135px}.Mount_Head_Wolf-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:0 -408px;width:135px;height:135px}.Mount_Head_Wolf-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-136px -408px;width:135px;height:135px}.Mount_Head_Wolf-Desert{background-image:url(spritesmith-main-8.png);background-position:-272px -408px;width:135px;height:135px}.Mount_Head_Wolf-Golden{background-image:url(spritesmith-main-8.png);background-position:-408px -408px;width:135px;height:135px}.Mount_Head_Wolf-Red{background-image:url(spritesmith-main-8.png);background-position:-544px 0;width:135px;height:135px}.Mount_Head_Wolf-Shade{background-image:url(spritesmith-main-8.png);background-position:-544px -136px;width:135px;height:135px}.Mount_Head_Wolf-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-544px -272px;width:135px;height:135px}.Mount_Head_Wolf-Spooky{background-image:url(spritesmith-main-8.png);background-position:-544px -408px;width:135px;height:135px}.Mount_Head_Wolf-White{background-image:url(spritesmith-main-8.png);background-position:0 -544px;width:135px;height:135px}.Mount_Head_Wolf-Zombie{background-image:url(spritesmith-main-8.png);background-position:-136px 0;width:135px;height:135px}.Pet-BearCub-Base{background-image:url(spritesmith-main-8.png);background-position:-318px -1210px;width:81px;height:99px}.Pet-BearCub-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-400px -1210px;width:81px;height:99px}.Pet-BearCub-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-482px -1210px;width:81px;height:99px}.Pet-BearCub-Desert{background-image:url(spritesmith-main-8.png);background-position:-564px -1210px;width:81px;height:99px}.Pet-BearCub-Golden{background-image:url(spritesmith-main-8.png);background-position:-646px -1210px;width:81px;height:99px}.Pet-BearCub-Polar{background-image:url(spritesmith-main-8.png);background-position:-728px -1210px;width:81px;height:99px}.Pet-BearCub-Red{background-image:url(spritesmith-main-8.png);background-position:-810px -1210px;width:81px;height:99px}.Pet-BearCub-Shade{background-image:url(spritesmith-main-8.png);background-position:-892px -1210px;width:81px;height:99px}.Pet-BearCub-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-974px -1210px;width:81px;height:99px}.Pet-BearCub-Spooky{background-image:url(spritesmith-main-8.png);background-position:-1056px -1210px;width:81px;height:99px}.Pet-BearCub-White{background-image:url(spritesmith-main-8.png);background-position:-1138px -1210px;width:81px;height:99px}.Pet-BearCub-Zombie{background-image:url(spritesmith-main-8.png);background-position:-492px -1616px;width:81px;height:99px}.Pet-Bunny-Base{background-image:url(spritesmith-main-8.png);background-position:-1316px 0;width:81px;height:99px}.Pet-Bunny-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1316px -100px;width:81px;height:99px}.Pet-Bunny-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-1316px -200px;width:81px;height:99px}.Pet-Bunny-Desert{background-image:url(spritesmith-main-8.png);background-position:-1316px -300px;width:81px;height:99px}.Pet-Bunny-Golden{background-image:url(spritesmith-main-8.png);background-position:-1316px -400px;width:81px;height:99px}.Pet-Bunny-Red{background-image:url(spritesmith-main-8.png);background-position:-1316px -500px;width:81px;height:99px}.Pet-Bunny-Shade{background-image:url(spritesmith-main-8.png);background-position:-1316px -600px;width:81px;height:99px}.Pet-Bunny-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-1316px -700px;width:81px;height:99px}.Pet-Bunny-White{background-image:url(spritesmith-main-8.png);background-position:-1316px -800px;width:81px;height:99px}.Pet-Bunny-Zombie{background-image:url(spritesmith-main-8.png);background-position:-1316px -900px;width:81px;height:99px}.Pet-Cactus-Base{background-image:url(spritesmith-main-8.png);background-position:-1316px -1000px;width:81px;height:99px}.Pet-Cactus-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1316px -1100px;width:81px;height:99px}.Pet-Cactus-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-1316px -1200px;width:81px;height:99px}.Pet-Cactus-Desert{background-image:url(spritesmith-main-8.png);background-position:-1398px 0;width:81px;height:99px}.Pet-Cactus-Golden{background-image:url(spritesmith-main-8.png);background-position:-1398px -100px;width:81px;height:99px}.Pet-Cactus-Red{background-image:url(spritesmith-main-8.png);background-position:-1398px -200px;width:81px;height:99px}.Pet-Cactus-Shade{background-image:url(spritesmith-main-8.png);background-position:-1398px -300px;width:81px;height:99px}.Pet-Cactus-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-1398px -400px;width:81px;height:99px}.Pet-Cactus-Spooky{background-image:url(spritesmith-main-8.png);background-position:-1398px -500px;width:81px;height:99px}.Pet-Cactus-White{background-image:url(spritesmith-main-8.png);background-position:-1398px -600px;width:81px;height:99px}.Pet-Cactus-Zombie{background-image:url(spritesmith-main-8.png);background-position:-1398px -700px;width:81px;height:99px}.Pet-Cheetah-Base{background-image:url(spritesmith-main-8.png);background-position:-1398px -800px;width:81px;height:99px}.Pet-Cheetah-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1398px -900px;width:81px;height:99px}.Pet-Cheetah-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-1398px -1000px;width:81px;height:99px}.Pet-Cheetah-Desert{background-image:url(spritesmith-main-8.png);background-position:-1398px -1100px;width:81px;height:99px}.Pet-Cheetah-Golden{background-image:url(spritesmith-main-8.png);background-position:-1398px -1200px;width:81px;height:99px}.Pet-Cheetah-Red{background-image:url(spritesmith-main-8.png);background-position:0 -1316px;width:81px;height:99px}.Pet-Cheetah-Shade{background-image:url(spritesmith-main-8.png);background-position:-82px -1316px;width:81px;height:99px}.Pet-Cheetah-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-164px -1316px;width:81px;height:99px}.Pet-Cheetah-White{background-image:url(spritesmith-main-8.png);background-position:-246px -1316px;width:81px;height:99px}.Pet-Cheetah-Zombie{background-image:url(spritesmith-main-8.png);background-position:-328px -1316px;width:81px;height:99px}.Pet-Cuttlefish-Base{background-image:url(spritesmith-main-8.png);background-position:-410px -1316px;width:81px;height:99px}.Pet-Cuttlefish-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-492px -1316px;width:81px;height:99px}.Pet-Cuttlefish-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-574px -1316px;width:81px;height:99px}.Pet-Cuttlefish-Desert{background-image:url(spritesmith-main-8.png);background-position:-656px -1316px;width:81px;height:99px}.Pet-Cuttlefish-Golden{background-image:url(spritesmith-main-8.png);background-position:-738px -1316px;width:81px;height:99px}.Pet-Cuttlefish-Red{background-image:url(spritesmith-main-8.png);background-position:-820px -1316px;width:81px;height:99px}.Pet-Cuttlefish-Shade{background-image:url(spritesmith-main-8.png);background-position:-902px -1316px;width:81px;height:99px}.Pet-Cuttlefish-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-984px -1316px;width:81px;height:99px}.Pet-Cuttlefish-White{background-image:url(spritesmith-main-8.png);background-position:-1066px -1316px;width:81px;height:99px}.Pet-Cuttlefish-Zombie{background-image:url(spritesmith-main-8.png);background-position:-1148px -1316px;width:81px;height:99px}.Pet-Deer-Base{background-image:url(spritesmith-main-8.png);background-position:-1230px -1316px;width:81px;height:99px}.Pet-Deer-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1312px -1316px;width:81px;height:99px}.Pet-Deer-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-1394px -1316px;width:81px;height:99px}.Pet-Deer-Desert{background-image:url(spritesmith-main-8.png);background-position:-1480px 0;width:81px;height:99px}.Pet-Deer-Golden{background-image:url(spritesmith-main-8.png);background-position:-1480px -100px;width:81px;height:99px}.Pet-Deer-Red{background-image:url(spritesmith-main-8.png);background-position:-1480px -200px;width:81px;height:99px}.Pet-Deer-Shade{background-image:url(spritesmith-main-8.png);background-position:-1480px -300px;width:81px;height:99px}.Pet-Deer-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-1480px -400px;width:81px;height:99px}.Pet-Deer-White{background-image:url(spritesmith-main-8.png);background-position:-1480px -500px;width:81px;height:99px}.Pet-Deer-Zombie{background-image:url(spritesmith-main-8.png);background-position:-1480px -600px;width:81px;height:99px}.Pet-Dragon-Base{background-image:url(spritesmith-main-8.png);background-position:-1480px -700px;width:81px;height:99px}.Pet-Dragon-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1480px -800px;width:81px;height:99px}.Pet-Dragon-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-1480px -900px;width:81px;height:99px}.Pet-Dragon-Desert{background-image:url(spritesmith-main-8.png);background-position:-1480px -1000px;width:81px;height:99px}.Pet-Dragon-Golden{background-image:url(spritesmith-main-8.png);background-position:-1480px -1100px;width:81px;height:99px}.Pet-Dragon-Hydra{background-image:url(spritesmith-main-8.png);background-position:-1480px -1200px;width:81px;height:99px}.Pet-Dragon-Red{background-image:url(spritesmith-main-8.png);background-position:-1480px -1300px;width:81px;height:99px}.Pet-Dragon-Shade{background-image:url(spritesmith-main-8.png);background-position:0 -1416px;width:81px;height:99px}.Pet-Dragon-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-82px -1416px;width:81px;height:99px}.Pet-Dragon-Spooky{background-image:url(spritesmith-main-8.png);background-position:-164px -1416px;width:81px;height:99px}.Pet-Dragon-White{background-image:url(spritesmith-main-8.png);background-position:-246px -1416px;width:81px;height:99px}.Pet-Dragon-Zombie{background-image:url(spritesmith-main-8.png);background-position:-328px -1416px;width:81px;height:99px}.Pet-Egg-Base{background-image:url(spritesmith-main-8.png);background-position:-410px -1416px;width:81px;height:99px}.Pet-Egg-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-492px -1416px;width:81px;height:99px}.Pet-Egg-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-574px -1416px;width:81px;height:99px}.Pet-Egg-Desert{background-image:url(spritesmith-main-8.png);background-position:-656px -1416px;width:81px;height:99px}.Pet-Egg-Golden{background-image:url(spritesmith-main-8.png);background-position:-738px -1416px;width:81px;height:99px}.Pet-Egg-Red{background-image:url(spritesmith-main-8.png);background-position:-820px -1416px;width:81px;height:99px}.Pet-Egg-Shade{background-image:url(spritesmith-main-8.png);background-position:-902px -1416px;width:81px;height:99px}.Pet-Egg-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-984px -1416px;width:81px;height:99px}.Pet-Egg-White{background-image:url(spritesmith-main-8.png);background-position:-1066px -1416px;width:81px;height:99px}.Pet-Egg-Zombie{background-image:url(spritesmith-main-8.png);background-position:-1148px -1416px;width:81px;height:99px}.Pet-FlyingPig-Base{background-image:url(spritesmith-main-8.png);background-position:-1230px -1416px;width:81px;height:99px}.Pet-FlyingPig-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1312px -1416px;width:81px;height:99px}.Pet-FlyingPig-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-1394px -1416px;width:81px;height:99px}.Pet-FlyingPig-Desert{background-image:url(spritesmith-main-8.png);background-position:-1476px -1416px;width:81px;height:99px}.Pet-FlyingPig-Golden{background-image:url(spritesmith-main-8.png);background-position:-1562px 0;width:81px;height:99px}.Pet-FlyingPig-Red{background-image:url(spritesmith-main-8.png);background-position:-1562px -100px;width:81px;height:99px}.Pet-FlyingPig-Shade{background-image:url(spritesmith-main-8.png);background-position:-1562px -200px;width:81px;height:99px}.Pet-FlyingPig-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-1562px -300px;width:81px;height:99px}.Pet-FlyingPig-Spooky{background-image:url(spritesmith-main-8.png);background-position:-1562px -400px;width:81px;height:99px}.Pet-FlyingPig-White{background-image:url(spritesmith-main-8.png);background-position:-1562px -500px;width:81px;height:99px}.Pet-FlyingPig-Zombie{background-image:url(spritesmith-main-8.png);background-position:-1562px -600px;width:81px;height:99px}.Pet-Fox-Base{background-image:url(spritesmith-main-8.png);background-position:-1562px -700px;width:81px;height:99px}.Pet-Fox-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1562px -800px;width:81px;height:99px}.Pet-Fox-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-1562px -900px;width:81px;height:99px}.Pet-Fox-Desert{background-image:url(spritesmith-main-8.png);background-position:-1562px -1000px;width:81px;height:99px}.Pet-Fox-Golden{background-image:url(spritesmith-main-8.png);background-position:-1562px -1100px;width:81px;height:99px}.Pet-Fox-Red{background-image:url(spritesmith-main-8.png);background-position:-1562px -1200px;width:81px;height:99px}.Pet-Fox-Shade{background-image:url(spritesmith-main-8.png);background-position:-1562px -1300px;width:81px;height:99px}.Pet-Fox-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-1562px -1400px;width:81px;height:99px}.Pet-Fox-Spooky{background-image:url(spritesmith-main-8.png);background-position:0 -1516px;width:81px;height:99px}.Pet-Fox-White{background-image:url(spritesmith-main-8.png);background-position:-82px -1516px;width:81px;height:99px}.Pet-Fox-Zombie{background-image:url(spritesmith-main-8.png);background-position:-164px -1516px;width:81px;height:99px}.Pet-Gryphon-Base{background-image:url(spritesmith-main-8.png);background-position:-246px -1516px;width:81px;height:99px}.Pet-Gryphon-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-328px -1516px;width:81px;height:99px}.Pet-Gryphon-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-410px -1516px;width:81px;height:99px}.Pet-Gryphon-Desert{background-image:url(spritesmith-main-8.png);background-position:-492px -1516px;width:81px;height:99px}.Pet-Gryphon-Golden{background-image:url(spritesmith-main-8.png);background-position:-574px -1516px;width:81px;height:99px}.Pet-Gryphon-Red{background-image:url(spritesmith-main-8.png);background-position:-656px -1516px;width:81px;height:99px}.Pet-Gryphon-Shade{background-image:url(spritesmith-main-8.png);background-position:-738px -1516px;width:81px;height:99px}.Pet-Gryphon-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-820px -1516px;width:81px;height:99px}.Pet-Gryphon-White{background-image:url(spritesmith-main-8.png);background-position:-902px -1516px;width:81px;height:99px}.Pet-Gryphon-Zombie{background-image:url(spritesmith-main-8.png);background-position:-984px -1516px;width:81px;height:99px}.Pet-Hedgehog-Base{background-image:url(spritesmith-main-8.png);background-position:-1066px -1516px;width:81px;height:99px}.Pet-Hedgehog-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1148px -1516px;width:81px;height:99px}.Pet-Hedgehog-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-1230px -1516px;width:81px;height:99px}.Pet-Hedgehog-Desert{background-image:url(spritesmith-main-8.png);background-position:-1312px -1516px;width:81px;height:99px}.Pet-Hedgehog-Golden{background-image:url(spritesmith-main-8.png);background-position:-1394px -1516px;width:81px;height:99px}.Pet-Hedgehog-Red{background-image:url(spritesmith-main-8.png);background-position:-1476px -1516px;width:81px;height:99px}.Pet-Hedgehog-Shade{background-image:url(spritesmith-main-8.png);background-position:-1558px -1516px;width:81px;height:99px}.Pet-Hedgehog-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-1644px 0;width:81px;height:99px}.Pet-Hedgehog-White{background-image:url(spritesmith-main-8.png);background-position:-1644px -100px;width:81px;height:99px}.Pet-Hedgehog-Zombie{background-image:url(spritesmith-main-8.png);background-position:-1644px -200px;width:81px;height:99px}.Pet-Horse-Base{background-image:url(spritesmith-main-8.png);background-position:-1644px -300px;width:81px;height:99px}.Pet-Horse-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1644px -400px;width:81px;height:99px}.Pet-Horse-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-1644px -500px;width:81px;height:99px}.Pet-Horse-Desert{background-image:url(spritesmith-main-8.png);background-position:-1644px -600px;width:81px;height:99px}.Pet-Horse-Golden{background-image:url(spritesmith-main-8.png);background-position:-1644px -700px;width:81px;height:99px}.Pet-Horse-Red{background-image:url(spritesmith-main-8.png);background-position:-1644px -800px;width:81px;height:99px}.Pet-Horse-Shade{background-image:url(spritesmith-main-8.png);background-position:-1644px -900px;width:81px;height:99px}.Pet-Horse-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-1644px -1000px;width:81px;height:99px}.Pet-Horse-White{background-image:url(spritesmith-main-8.png);background-position:-1644px -1100px;width:81px;height:99px}.Pet-Horse-Zombie{background-image:url(spritesmith-main-8.png);background-position:-1644px -1200px;width:81px;height:99px}.Pet-JackOLantern-Base{background-image:url(spritesmith-main-8.png);background-position:-1644px -1300px;width:81px;height:99px}.Pet-LionCub-Base{background-image:url(spritesmith-main-8.png);background-position:-1644px -1400px;width:81px;height:99px}.Pet-LionCub-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1644px -1500px;width:81px;height:99px}.Pet-LionCub-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:0 -1616px;width:81px;height:99px}.Pet-LionCub-Desert{background-image:url(spritesmith-main-8.png);background-position:-82px -1616px;width:81px;height:99px}.Pet-LionCub-Golden{background-image:url(spritesmith-main-8.png);background-position:-164px -1616px;width:81px;height:99px}.Pet-LionCub-Red{background-image:url(spritesmith-main-8.png);background-position:-246px -1616px;width:81px;height:99px}.Pet-LionCub-Shade{background-image:url(spritesmith-main-8.png);background-position:-328px -1616px;width:81px;height:99px}.Pet-LionCub-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-410px -1616px;width:81px;height:99px}.Pet-LionCub-Spooky{background-image:url(spritesmith-main-8.png);background-position:-1220px -1210px;width:81px;height:99px}.Pet-LionCub-White{background-image:url(spritesmith-main-9.png);background-position:-82px 0;width:81px;height:99px}.Pet-LionCub-Zombie{background-image:url(spritesmith-main-9.png);background-position:-246px -800px;width:81px;height:99px}.Pet-Mammoth-Base{background-image:url(spritesmith-main-9.png);background-position:-164px 0;width:81px;height:99px}.Pet-MantisShrimp-Base{background-image:url(spritesmith-main-9.png);background-position:0 -100px;width:81px;height:99px}.Pet-Octopus-Base{background-image:url(spritesmith-main-9.png);background-position:-82px -100px;width:81px;height:99px}.Pet-Octopus-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-164px -100px;width:81px;height:99px}.Pet-Octopus-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-246px 0;width:81px;height:99px}.Pet-Octopus-Desert{background-image:url(spritesmith-main-9.png);background-position:-246px -100px;width:81px;height:99px}.Pet-Octopus-Golden{background-image:url(spritesmith-main-9.png);background-position:0 -200px;width:81px;height:99px}.Pet-Octopus-Red{background-image:url(spritesmith-main-9.png);background-position:-82px -200px;width:81px;height:99px}.Pet-Octopus-Shade{background-image:url(spritesmith-main-9.png);background-position:-164px -200px;width:81px;height:99px}.Pet-Octopus-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-246px -200px;width:81px;height:99px}.Pet-Octopus-White{background-image:url(spritesmith-main-9.png);background-position:-328px 0;width:81px;height:99px}.Pet-Octopus-Zombie{background-image:url(spritesmith-main-9.png);background-position:-328px -100px;width:81px;height:99px}.Pet-Owl-Base{background-image:url(spritesmith-main-9.png);background-position:-328px -200px;width:81px;height:99px}.Pet-Owl-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:0 -300px;width:81px;height:99px}.Pet-Owl-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-82px -300px;width:81px;height:99px}.Pet-Owl-Desert{background-image:url(spritesmith-main-9.png);background-position:-164px -300px;width:81px;height:99px}.Pet-Owl-Golden{background-image:url(spritesmith-main-9.png);background-position:-246px -300px;width:81px;height:99px}.Pet-Owl-Red{background-image:url(spritesmith-main-9.png);background-position:-328px -300px;width:81px;height:99px}.Pet-Owl-Shade{background-image:url(spritesmith-main-9.png);background-position:-410px 0;width:81px;height:99px}.Pet-Owl-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-410px -100px;width:81px;height:99px}.Pet-Owl-White{background-image:url(spritesmith-main-9.png);background-position:-410px -200px;width:81px;height:99px}.Pet-Owl-Zombie{background-image:url(spritesmith-main-9.png);background-position:-410px -300px;width:81px;height:99px}.Pet-PandaCub-Base{background-image:url(spritesmith-main-9.png);background-position:-492px 0;width:81px;height:99px}.Pet-PandaCub-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-492px -100px;width:81px;height:99px}.Pet-PandaCub-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-492px -200px;width:81px;height:99px}.Pet-PandaCub-Desert{background-image:url(spritesmith-main-9.png);background-position:-492px -300px;width:81px;height:99px}.Pet-PandaCub-Golden{background-image:url(spritesmith-main-9.png);background-position:0 -400px;width:81px;height:99px}.Pet-PandaCub-Red{background-image:url(spritesmith-main-9.png);background-position:-82px -400px;width:81px;height:99px}.Pet-PandaCub-Shade{background-image:url(spritesmith-main-9.png);background-position:-164px -400px;width:81px;height:99px}.Pet-PandaCub-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-246px -400px;width:81px;height:99px}.Pet-PandaCub-Spooky{background-image:url(spritesmith-main-9.png);background-position:-328px -400px;width:81px;height:99px}.Pet-PandaCub-White{background-image:url(spritesmith-main-9.png);background-position:-410px -400px;width:81px;height:99px}.Pet-PandaCub-Zombie{background-image:url(spritesmith-main-9.png);background-position:-492px -400px;width:81px;height:99px}.Pet-Parrot-Base{background-image:url(spritesmith-main-9.png);background-position:-574px 0;width:81px;height:99px}.Pet-Parrot-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-574px -100px;width:81px;height:99px}.Pet-Parrot-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-574px -200px;width:81px;height:99px}.Pet-Parrot-Desert{background-image:url(spritesmith-main-9.png);background-position:-574px -300px;width:81px;height:99px}.Pet-Parrot-Golden{background-image:url(spritesmith-main-9.png);background-position:-574px -400px;width:81px;height:99px}.Pet-Parrot-Red{background-image:url(spritesmith-main-9.png);background-position:0 -500px;width:81px;height:99px}.Pet-Parrot-Shade{background-image:url(spritesmith-main-9.png);background-position:-82px -500px;width:81px;height:99px}.Pet-Parrot-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-164px -500px;width:81px;height:99px}.Pet-Parrot-White{background-image:url(spritesmith-main-9.png);background-position:-246px -500px;width:81px;height:99px}.Pet-Parrot-Zombie{background-image:url(spritesmith-main-9.png);background-position:-328px -500px;width:81px;height:99px}.Pet-Penguin-Base{background-image:url(spritesmith-main-9.png);background-position:-410px -500px;width:81px;height:99px}.Pet-Penguin-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-492px -500px;width:81px;height:99px}.Pet-Penguin-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-574px -500px;width:81px;height:99px}.Pet-Penguin-Desert{background-image:url(spritesmith-main-9.png);background-position:-656px 0;width:81px;height:99px}.Pet-Penguin-Golden{background-image:url(spritesmith-main-9.png);background-position:-656px -100px;width:81px;height:99px}.Pet-Penguin-Red{background-image:url(spritesmith-main-9.png);background-position:-656px -200px;width:81px;height:99px}.Pet-Penguin-Shade{background-image:url(spritesmith-main-9.png);background-position:-656px -300px;width:81px;height:99px}.Pet-Penguin-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-656px -400px;width:81px;height:99px}.Pet-Penguin-White{background-image:url(spritesmith-main-9.png);background-position:-656px -500px;width:81px;height:99px}.Pet-Penguin-Zombie{background-image:url(spritesmith-main-9.png);background-position:0 -600px;width:81px;height:99px}.Pet-Phoenix-Base{background-image:url(spritesmith-main-9.png);background-position:-82px -600px;width:81px;height:99px}.Pet-Rat-Base{background-image:url(spritesmith-main-9.png);background-position:-164px -600px;width:81px;height:99px}.Pet-Rat-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-246px -600px;width:81px;height:99px}.Pet-Rat-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-328px -600px;width:81px;height:99px}.Pet-Rat-Desert{background-image:url(spritesmith-main-9.png);background-position:-410px -600px;width:81px;height:99px}.Pet-Rat-Golden{background-image:url(spritesmith-main-9.png);background-position:-492px -600px;width:81px;height:99px}.Pet-Rat-Red{background-image:url(spritesmith-main-9.png);background-position:-574px -600px;width:81px;height:99px}.Pet-Rat-Shade{background-image:url(spritesmith-main-9.png);background-position:-656px -600px;width:81px;height:99px}.Pet-Rat-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-738px 0;width:81px;height:99px}.Pet-Rat-White{background-image:url(spritesmith-main-9.png);background-position:-738px -100px;width:81px;height:99px}.Pet-Rat-Zombie{background-image:url(spritesmith-main-9.png);background-position:-738px -200px;width:81px;height:99px}.Pet-Rock-Base{background-image:url(spritesmith-main-9.png);background-position:-738px -300px;width:81px;height:99px}.Pet-Rock-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-738px -400px;width:81px;height:99px}.Pet-Rock-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-738px -500px;width:81px;height:99px}.Pet-Rock-Desert{background-image:url(spritesmith-main-9.png);background-position:-738px -600px;width:81px;height:99px}.Pet-Rock-Golden{background-image:url(spritesmith-main-9.png);background-position:0 -700px;width:81px;height:99px}.Pet-Rock-Red{background-image:url(spritesmith-main-9.png);background-position:-82px -700px;width:81px;height:99px}.Pet-Rock-Shade{background-image:url(spritesmith-main-9.png);background-position:-164px -700px;width:81px;height:99px}.Pet-Rock-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-246px -700px;width:81px;height:99px}.Pet-Rock-White{background-image:url(spritesmith-main-9.png);background-position:-328px -700px;width:81px;height:99px}.Pet-Rock-Zombie{background-image:url(spritesmith-main-9.png);background-position:-410px -700px;width:81px;height:99px}.Pet-Rooster-Base{background-image:url(spritesmith-main-9.png);background-position:-492px -700px;width:81px;height:99px}.Pet-Rooster-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-574px -700px;width:81px;height:99px}.Pet-Rooster-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-656px -700px;width:81px;height:99px}.Pet-Rooster-Desert{background-image:url(spritesmith-main-9.png);background-position:-738px -700px;width:81px;height:99px}.Pet-Rooster-Golden{background-image:url(spritesmith-main-9.png);background-position:-820px 0;width:81px;height:99px}.Pet-Rooster-Red{background-image:url(spritesmith-main-9.png);background-position:-820px -100px;width:81px;height:99px}.Pet-Rooster-Shade{background-image:url(spritesmith-main-9.png);background-position:-820px -200px;width:81px;height:99px}.Pet-Rooster-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-820px -300px;width:81px;height:99px}.Pet-Rooster-White{background-image:url(spritesmith-main-9.png);background-position:-820px -400px;width:81px;height:99px}.Pet-Rooster-Zombie{background-image:url(spritesmith-main-9.png);background-position:-820px -500px;width:81px;height:99px}.Pet-Seahorse-Base{background-image:url(spritesmith-main-9.png);background-position:-820px -600px;width:81px;height:99px}.Pet-Seahorse-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-820px -700px;width:81px;height:99px}.Pet-Seahorse-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:0 -800px;width:81px;height:99px}.Pet-Seahorse-Desert{background-image:url(spritesmith-main-9.png);background-position:-82px -800px;width:81px;height:99px}.Pet-Seahorse-Golden{background-image:url(spritesmith-main-9.png);background-position:-164px -800px;width:81px;height:99px}.Pet-Seahorse-Red{background-image:url(spritesmith-main-9.png);background-position:0 0;width:81px;height:99px}.Pet-Seahorse-Shade{background-image:url(spritesmith-main-9.png);background-position:-328px -800px;width:81px;height:99px}.Pet-Seahorse-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-410px -800px;width:81px;height:99px}.Pet-Seahorse-White{background-image:url(spritesmith-main-9.png);background-position:-492px -800px;width:81px;height:99px}.Pet-Seahorse-Zombie{background-image:url(spritesmith-main-9.png);background-position:-574px -800px;width:81px;height:99px}.Pet-Sheep-Base{background-image:url(spritesmith-main-9.png);background-position:-656px -800px;width:81px;height:99px}.Pet-Sheep-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-738px -800px;width:81px;height:99px}.Pet-Sheep-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-820px -800px;width:81px;height:99px}.Pet-Sheep-Desert{background-image:url(spritesmith-main-9.png);background-position:-902px 0;width:81px;height:99px}.Pet-Sheep-Golden{background-image:url(spritesmith-main-9.png);background-position:-902px -100px;width:81px;height:99px}.Pet-Sheep-Red{background-image:url(spritesmith-main-9.png);background-position:-902px -200px;width:81px;height:99px}.Pet-Sheep-Shade{background-image:url(spritesmith-main-9.png);background-position:-902px -300px;width:81px;height:99px}.Pet-Sheep-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-902px -400px;width:81px;height:99px}.Pet-Sheep-White{background-image:url(spritesmith-main-9.png);background-position:-902px -500px;width:81px;height:99px}.Pet-Sheep-Zombie{background-image:url(spritesmith-main-9.png);background-position:-902px -600px;width:81px;height:99px}.Pet-Slime-Base{background-image:url(spritesmith-main-9.png);background-position:-902px -700px;width:81px;height:99px}.Pet-Slime-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-902px -800px;width:81px;height:99px}.Pet-Slime-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-984px 0;width:81px;height:99px}.Pet-Slime-Desert{background-image:url(spritesmith-main-9.png);background-position:-984px -100px;width:81px;height:99px}.Pet-Slime-Golden{background-image:url(spritesmith-main-9.png);background-position:-984px -200px;width:81px;height:99px}.Pet-Slime-Red{background-image:url(spritesmith-main-9.png);background-position:-984px -300px;width:81px;height:99px}.Pet-Slime-Shade{background-image:url(spritesmith-main-9.png);background-position:-984px -400px;width:81px;height:99px}.Pet-Slime-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-984px -500px;width:81px;height:99px}.Pet-Slime-White{background-image:url(spritesmith-main-9.png);background-position:-984px -600px;width:81px;height:99px}.Pet-Slime-Zombie{background-image:url(spritesmith-main-9.png);background-position:-984px -700px;width:81px;height:99px}.Pet-Spider-Base{background-image:url(spritesmith-main-9.png);background-position:-984px -800px;width:81px;height:99px}.Pet-Spider-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:0 -900px;width:81px;height:99px}.Pet-Spider-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-82px -900px;width:81px;height:99px}.Pet-Spider-Desert{background-image:url(spritesmith-main-9.png);background-position:-164px -900px;width:81px;height:99px}.Pet-Spider-Golden{background-image:url(spritesmith-main-9.png);background-position:-246px -900px;width:81px;height:99px}.Pet-Spider-Red{background-image:url(spritesmith-main-9.png);background-position:-328px -900px;width:81px;height:99px}.Pet-Spider-Shade{background-image:url(spritesmith-main-9.png);background-position:-410px -900px;width:81px;height:99px}.Pet-Spider-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-492px -900px;width:81px;height:99px}.Pet-Spider-White{background-image:url(spritesmith-main-9.png);background-position:-574px -900px;width:81px;height:99px}.Pet-Spider-Zombie{background-image:url(spritesmith-main-9.png);background-position:-656px -900px;width:81px;height:99px}.Pet-TRex-Base{background-image:url(spritesmith-main-9.png);background-position:-738px -900px;width:81px;height:99px}.Pet-TRex-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-820px -900px;width:81px;height:99px}.Pet-TRex-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-902px -900px;width:81px;height:99px}.Pet-TRex-Desert{background-image:url(spritesmith-main-9.png);background-position:-984px -900px;width:81px;height:99px}.Pet-TRex-Golden{background-image:url(spritesmith-main-9.png);background-position:-1066px 0;width:81px;height:99px}.Pet-TRex-Red{background-image:url(spritesmith-main-9.png);background-position:-1066px -100px;width:81px;height:99px}.Pet-TRex-Shade{background-image:url(spritesmith-main-9.png);background-position:-1066px -200px;width:81px;height:99px}.Pet-TRex-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-1066px -300px;width:81px;height:99px}.Pet-TRex-White{background-image:url(spritesmith-main-9.png);background-position:-1066px -400px;width:81px;height:99px}.Pet-TRex-Zombie{background-image:url(spritesmith-main-9.png);background-position:-1066px -500px;width:81px;height:99px}.Pet-Tiger-Veteran{background-image:url(spritesmith-main-9.png);background-position:-1066px -600px;width:81px;height:99px}.Pet-TigerCub-Base{background-image:url(spritesmith-main-9.png);background-position:-1066px -700px;width:81px;height:99px}.Pet-TigerCub-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-1066px -800px;width:81px;height:99px}.Pet-TigerCub-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-1066px -900px;width:81px;height:99px}.Pet-TigerCub-Desert{background-image:url(spritesmith-main-9.png);background-position:0 -1000px;width:81px;height:99px}.Pet-TigerCub-Golden{background-image:url(spritesmith-main-9.png);background-position:-82px -1000px;width:81px;height:99px}.Pet-TigerCub-Red{background-image:url(spritesmith-main-9.png);background-position:-164px -1000px;width:81px;height:99px}.Pet-TigerCub-Shade{background-image:url(spritesmith-main-9.png);background-position:-246px -1000px;width:81px;height:99px}.Pet-TigerCub-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-328px -1000px;width:81px;height:99px}.Pet-TigerCub-Spooky{background-image:url(spritesmith-main-9.png);background-position:-410px -1000px;width:81px;height:99px}.Pet-TigerCub-White{background-image:url(spritesmith-main-9.png);background-position:-492px -1000px;width:81px;height:99px}.Pet-TigerCub-Zombie{background-image:url(spritesmith-main-9.png);background-position:-574px -1000px;width:81px;height:99px}.Pet-Turkey-Base{background-image:url(spritesmith-main-9.png);background-position:-656px -1000px;width:81px;height:99px}.Pet-Whale-Base{background-image:url(spritesmith-main-9.png);background-position:-738px -1000px;width:81px;height:99px}.Pet-Whale-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-820px -1000px;width:81px;height:99px}.Pet-Whale-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-902px -1000px;width:81px;height:99px}.Pet-Whale-Desert{background-image:url(spritesmith-main-9.png);background-position:-984px -1000px;width:81px;height:99px}.Pet-Whale-Golden{background-image:url(spritesmith-main-9.png);background-position:-1066px -1000px;width:81px;height:99px}.Pet-Whale-Red{background-image:url(spritesmith-main-9.png);background-position:-1148px 0;width:81px;height:99px}.Pet-Whale-Shade{background-image:url(spritesmith-main-9.png);background-position:-1148px -100px;width:81px;height:99px}.Pet-Whale-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-1148px -200px;width:81px;height:99px}.Pet-Whale-White{background-image:url(spritesmith-main-9.png);background-position:-1148px -300px;width:81px;height:99px}.Pet-Whale-Zombie{background-image:url(spritesmith-main-9.png);background-position:-1148px -400px;width:81px;height:99px}.Pet-Wolf-Base{background-image:url(spritesmith-main-9.png);background-position:-1148px -500px;width:81px;height:99px}.Pet-Wolf-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-1148px -600px;width:81px;height:99px}.Pet-Wolf-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-1148px -700px;width:81px;height:99px}.Pet-Wolf-Desert{background-image:url(spritesmith-main-9.png);background-position:-1148px -800px;width:81px;height:99px}.Pet-Wolf-Golden{background-image:url(spritesmith-main-9.png);background-position:-1148px -900px;width:81px;height:99px}.Pet-Wolf-Red{background-image:url(spritesmith-main-9.png);background-position:-1148px -1000px;width:81px;height:99px}.Pet-Wolf-Shade{background-image:url(spritesmith-main-9.png);background-position:0 -1100px;width:81px;height:99px}.Pet-Wolf-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-82px -1100px;width:81px;height:99px}.Pet-Wolf-Spooky{background-image:url(spritesmith-main-9.png);background-position:-164px -1100px;width:81px;height:99px}.Pet-Wolf-Veteran{background-image:url(spritesmith-main-9.png);background-position:-246px -1100px;width:81px;height:99px}.Pet-Wolf-White{background-image:url(spritesmith-main-9.png);background-position:-328px -1100px;width:81px;height:99px}.Pet-Wolf-Zombie{background-image:url(spritesmith-main-9.png);background-position:-410px -1100px;width:81px;height:99px}.Pet_HatchingPotion_Base{background-image:url(spritesmith-main-9.png);background-position:-541px -1100px;width:48px;height:51px}.Pet_HatchingPotion_CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-737px -1100px;width:48px;height:51px}.Pet_HatchingPotion_CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-590px -1100px;width:48px;height:51px}.Pet_HatchingPotion_Desert{background-image:url(spritesmith-main-9.png);background-position:-639px -1100px;width:48px;height:51px}.Pet_HatchingPotion_Golden{background-image:url(spritesmith-main-9.png);background-position:-688px -1100px;width:48px;height:51px}.Pet_HatchingPotion_Red{background-image:url(spritesmith-main-9.png);background-position:-492px -1100px;width:48px;height:51px}.Pet_HatchingPotion_Shade{background-image:url(spritesmith-main-9.png);background-position:-786px -1100px;width:48px;height:51px}.Pet_HatchingPotion_Skeleton{background-image:url(spritesmith-main-9.png);background-position:-835px -1100px;width:48px;height:51px}.Pet_HatchingPotion_Spooky{background-image:url(spritesmith-main-9.png);background-position:-884px -1100px;width:48px;height:51px}.Pet_HatchingPotion_White{background-image:url(spritesmith-main-9.png);background-position:-933px -1100px;width:48px;height:51px}.Pet_HatchingPotion_Zombie{background-image:url(spritesmith-main-9.png);background-position:-982px -1100px;width:48px;height:51px}.head_special_0,.weapon_special_0{width:105px;height:105px;margin-left:-3px;margin-top:-18px}.broad_armor_special_0,.shield_special_0,.slim_armor_special_0{width:90px;height:90px}.weapon_special_critical{background:url(/common/img/sprites/backer-only/weapon_special_critical.gif) no-repeat;width:90px;height:90px;margin-left:-12px;margin-top:12px}.weapon_special_1{margin-left:-12px}.broad_armor_special_1,.head_special_1,.slim_armor_special_1{width:90px;height:90px}.head_special_0{background:url(/common/img/sprites/backer-only/BackerOnly-Equip-ShadeHelmet.gif) no-repeat}.head_special_1{background:url(/common/img/sprites/backer-only/ContributorOnly-Equip-CrystalHelmet.gif) no-repeat;margin-top:3px}.broad_armor_special_0,.slim_armor_special_0{background:url(/common/img/sprites/backer-only/BackerOnly-Equip-ShadeArmor.gif) no-repeat}.broad_armor_special_1,.slim_armor_special_1{background:url(/common/img/sprites/backer-only/ContributorOnly-Equip-CrystalArmor.gif) no-repeat}.shield_special_0{background:url(/common/img/sprites/backer-only/BackerOnly-Shield-TormentedSkull.gif) no-repeat}.weapon_special_0{background:url(/common/img/sprites/backer-only/BackerOnly-Weapon-DarkSoulsBlade.gif) no-repeat}.Pet-Wolf-Cerberus{width:105px;height:72px;background:url(/common/img/sprites/backer-only/BackerOnly-Pet-CerberusPup.gif) no-repeat}.quest_burnout{background:url(/common/img/sprites/quest_burnout.gif) no-repeat;width:219px;height:249px}.Gems{display:inline-block;margin-right:5px;border-style:none;margin-left:0;margin-top:2px}.inline-gems{vertical-align:middle;margin-left:0;display:inline-block}.customize-menu .locked{background-color:#727272}.achievement{float:left;clear:right;margin-right:10px}.multi-achievement{margin:auto;padding-left:.5em;padding-right:.5em}[class*=Mount_Body_],[class*=Mount_Head_]{margin-top:18px}.Pet_Currency_Gem{margin-top:5px;margin-bottom:5px} \ No newline at end of file +.2014_Fall_HealerPROMO2{background-image:url(spritesmith-largeSprites-0.png);background-position:-943px -616px;width:90px;height:90px}.2014_Fall_Mage_PROMO9{background-image:url(spritesmith-largeSprites-0.png);background-position:-943px -252px;width:120px;height:90px}.2014_Fall_RoguePROMO3{background-image:url(spritesmith-largeSprites-0.png);background-position:-943px -343px;width:105px;height:90px}.2014_Fall_Warrior_PROMO{background-image:url(spritesmith-largeSprites-0.png);background-position:-306px -402px;width:90px;height:90px}.promo_android{background-image:url(spritesmith-largeSprites-0.png);background-position:-943px 0;width:175px;height:175px}.promo_backtoschool{background-image:url(spritesmith-largeSprites-0.png);background-position:-1119px -251px;width:150px;height:150px}.promo_burnout{background-image:url(spritesmith-largeSprites-0.png);background-position:-452px 0;width:219px;height:240px}.promo_classes_fall_2014{background-image:url(spritesmith-largeSprites-0.png);background-position:-326px -724px;width:321px;height:100px}.promo_classes_fall_2015{background-image:url(spritesmith-largeSprites-0.png);background-position:-430px -621px;width:377px;height:99px}.promo_dilatoryDistress{background-image:url(spritesmith-largeSprites-0.png);background-position:-452px -417px;width:90px;height:90px}.promo_enchanted_armoire{background-image:url(spritesmith-largeSprites-0.png);background-position:-499px -525px;width:374px;height:76px}.promo_enchanted_armoire_201507{background-image:url(spritesmith-largeSprites-0.png);background-position:-1119px -550px;width:217px;height:90px}.promo_enchanted_armoire_201508{background-image:url(spritesmith-largeSprites-0.png);background-position:-1119px -824px;width:180px;height:90px}.promo_enchanted_armoire_201509{background-image:url(spritesmith-largeSprites-0.png);background-position:-543px -417px;width:90px;height:90px}.promo_enchanted_armoire_201511{background-image:url(spritesmith-largeSprites-0.png);background-position:-1225px -991px;width:122px;height:90px}.promo_habitica{background-image:url(spritesmith-largeSprites-0.png);background-position:-452px -241px;width:175px;height:175px}.promo_habitica_sticker{background-image:url(spritesmith-largeSprites-0.png);background-position:0 -220px;width:305px;height:304px}.promo_haunted_hair{background-image:url(spritesmith-largeSprites-0.png);background-position:-1260px -402px;width:100px;height:137px}.customize-option.promo_haunted_hair{background-image:url(spritesmith-largeSprites-0.png);background-position:-1285px -417px;width:60px;height:60px}.promo_item_notif{background-image:url(spritesmith-largeSprites-0.png);background-position:-1119px 0;width:249px;height:102px}.promo_mystery_201405{background-image:url(spritesmith-largeSprites-0.png);background-position:-380px -1008px;width:90px;height:90px}.promo_mystery_201406{background-image:url(spritesmith-largeSprites-0.png);background-position:-1270px -251px;width:90px;height:96px}.promo_mystery_201407{background-image:url(spritesmith-largeSprites-0.png);background-position:-1037px -525px;width:42px;height:62px}.promo_mystery_201408{background-image:url(spritesmith-largeSprites-0.png);background-position:-1300px -824px;width:60px;height:71px}.promo_mystery_201409{background-image:url(spritesmith-largeSprites-0.png);background-position:-306px -311px;width:90px;height:90px}.promo_mystery_201410{background-image:url(spritesmith-largeSprites-0.png);background-position:-1272px -915px;width:72px;height:63px}.promo_mystery_201411{background-image:url(spritesmith-largeSprites-0.png);background-position:-808px -621px;width:90px;height:90px}.promo_mystery_201412{background-image:url(spritesmith-largeSprites-0.png);background-position:-1037px -434px;width:42px;height:66px}.promo_mystery_201501{background-image:url(spritesmith-largeSprites-0.png);background-position:-1318px -732px;width:48px;height:63px}.promo_mystery_201502{background-image:url(spritesmith-largeSprites-0.png);background-position:-943px -707px;width:90px;height:90px}.promo_mystery_201503{background-image:url(spritesmith-largeSprites-0.png);background-position:-562px -1008px;width:90px;height:90px}.promo_mystery_201504{background-image:url(spritesmith-largeSprites-0.png);background-position:-1049px -343px;width:60px;height:69px}.promo_mystery_201505{background-image:url(spritesmith-largeSprites-0.png);background-position:-306px -220px;width:90px;height:90px}.promo_mystery_201506{background-image:url(spritesmith-largeSprites-0.png);background-position:-1064px -252px;width:42px;height:69px}.promo_mystery_201507{background-image:url(spritesmith-largeSprites-0.png);background-position:-1276px -103px;width:90px;height:105px}.promo_mystery_201508{background-image:url(spritesmith-largeSprites-0.png);background-position:-943px -525px;width:93px;height:90px}.promo_mystery_201509{background-image:url(spritesmith-largeSprites-0.png);background-position:-289px -1008px;width:90px;height:90px}.promo_mystery_201510{background-image:url(spritesmith-largeSprites-0.png);background-position:-943px -434px;width:93px;height:90px}.promo_mystery_201511{background-image:url(spritesmith-largeSprites-0.png);background-position:-471px -1008px;width:90px;height:90px}.promo_mystery_3014{background-image:url(spritesmith-largeSprites-0.png);background-position:-1119px -641px;width:217px;height:90px}.promo_orca{background-image:url(spritesmith-largeSprites-0.png);background-position:-1119px -991px;width:105px;height:105px}.promo_partyhats{background-image:url(spritesmith-largeSprites-0.png);background-position:-662px -835px;width:115px;height:47px}.promo_pastel_skin{background-image:url(spritesmith-largeSprites-0.png);background-position:0 -835px;width:330px;height:83px}.customize-option.promo_pastel_skin{background-image:url(spritesmith-largeSprites-0.png);background-position:-25px -850px;width:60px;height:60px}.promo_pet_skins{background-image:url(spritesmith-largeSprites-0.png);background-position:-1119px -402px;width:140px;height:147px}.customize-option.promo_pet_skins{background-image:url(spritesmith-largeSprites-0.png);background-position:-1144px -417px;width:60px;height:60px}.promo_shimmer_hair{background-image:url(spritesmith-largeSprites-0.png);background-position:-331px -835px;width:330px;height:83px}.customize-option.promo_shimmer_hair{background-image:url(spritesmith-largeSprites-0.png);background-position:-356px -850px;width:60px;height:60px}.promo_splashyskins{background-image:url(spritesmith-largeSprites-0.png);background-position:-1119px -732px;width:198px;height:91px}.customize-option.promo_splashyskins{background-image:url(spritesmith-largeSprites-0.png);background-position:-1144px -747px;width:60px;height:60px}.promo_springclasses2014{background-image:url(spritesmith-largeSprites-0.png);background-position:-648px -724px;width:288px;height:90px}.promo_springclasses2015{background-image:url(spritesmith-largeSprites-0.png);background-position:0 -1008px;width:288px;height:90px}.promo_summer_classes_2014{background-image:url(spritesmith-largeSprites-0.png);background-position:0 -621px;width:429px;height:102px}.promo_summer_classes_2015{background-image:url(spritesmith-largeSprites-0.png);background-position:0 -919px;width:300px;height:88px}.promo_updos{background-image:url(spritesmith-largeSprites-0.png);background-position:-1119px -103px;width:156px;height:147px}.promo_veteran_pets{background-image:url(spritesmith-largeSprites-0.png);background-position:-943px -176px;width:146px;height:75px}.promo_winterclasses2015{background-image:url(spritesmith-largeSprites-0.png);background-position:0 -724px;width:325px;height:110px}.promo_winteryhair{background-image:url(spritesmith-largeSprites-0.png);background-position:-1119px -915px;width:152px;height:75px}.customize-option.promo_winteryhair{background-image:url(spritesmith-largeSprites-0.png);background-position:-1144px -930px;width:60px;height:60px}.avatar_variety{background-image:url(spritesmith-largeSprites-0.png);background-position:0 -525px;width:498px;height:95px}.party_preview{background-image:url(spritesmith-largeSprites-0.png);background-position:0 0;width:451px;height:219px}.welcome_basic_avatars{background-image:url(spritesmith-largeSprites-0.png);background-position:-672px -347px;width:246px;height:165px}.welcome_promo_party{background-image:url(spritesmith-largeSprites-0.png);background-position:-672px 0;width:270px;height:180px}.welcome_sample_tasks{background-image:url(spritesmith-largeSprites-0.png);background-position:-672px -181px;width:246px;height:165px}.achievement-alien{background-image:url(spritesmith-main-0.png);background-position:-1208px -1180px;width:24px;height:26px}.achievement-alien2x{background-image:url(spritesmith-main-0.png);background-position:-1223px -239px;width:48px;height:52px}.achievement-alpha{background-image:url(spritesmith-main-0.png);background-position:-1183px -1180px;width:24px;height:26px}.achievement-armor{background-image:url(spritesmith-main-0.png);background-position:-1232px -1127px;width:24px;height:26px}.achievement-armor2x{background-image:url(spritesmith-main-0.png);background-position:-1223px -330px;width:48px;height:52px}.achievement-boot{background-image:url(spritesmith-main-0.png);background-position:-1208px -1089px;width:24px;height:26px}.achievement-boot2x{background-image:url(spritesmith-main-0.png);background-position:-1223px -512px;width:48px;height:52px}.achievement-bow{background-image:url(spritesmith-main-0.png);background-position:-1232px -1036px;width:24px;height:26px}.achievement-bow2x{background-image:url(spritesmith-main-0.png);background-position:-1223px -694px;width:48px;height:52px}.achievement-burnout{background-image:url(spritesmith-main-0.png);background-position:-1248px -929px;width:24px;height:26px}.achievement-burnout2x{background-image:url(spritesmith-main-0.png);background-position:-1223px -876px;width:48px;height:52px}.achievement-cactus{background-image:url(spritesmith-main-0.png);background-position:-1248px -838px;width:24px;height:26px}.achievement-cactus2x{background-image:url(spritesmith-main-0.png);background-position:-1181px -967px;width:48px;height:52px}.achievement-cake{background-image:url(spritesmith-main-0.png);background-position:-1248px -747px;width:24px;height:26px}.achievement-cake2x{background-image:url(spritesmith-main-0.png);background-position:-1183px -1127px;width:48px;height:52px}.achievement-cave{background-image:url(spritesmith-main-0.png);background-position:-1248px -656px;width:24px;height:26px}.achievement-cave2x{background-image:url(spritesmith-main-0.png);background-position:-1365px -1309px;width:48px;height:52px}.achievement-coffin{background-image:url(spritesmith-main-0.png);background-position:-1248px -565px;width:24px;height:26px}.achievement-comment{background-image:url(spritesmith-main-0.png);background-position:-1223px -565px;width:24px;height:26px}.achievement-comment2x{background-image:url(spritesmith-main-0.png);background-position:-1547px -1491px;width:48px;height:52px}.achievement-costumeContest{background-image:url(spritesmith-main-0.png);background-position:-1223px -474px;width:24px;height:26px}.achievement-costumeContest2x{background-image:url(spritesmith-main-0.png);background-position:-322px -1582px;width:48px;height:52px}.achievement-dilatory{background-image:url(spritesmith-main-0.png);background-position:-1223px -383px;width:24px;height:26px}.achievement-firefox{background-image:url(spritesmith-main-0.png);background-position:-1248px -292px;width:24px;height:26px}.achievement-greeting{background-image:url(spritesmith-main-0.png);background-position:-1223px -292px;width:24px;height:26px}.achievement-greeting2x{background-image:url(spritesmith-main-0.png);background-position:-420px -1582px;width:48px;height:52px}.achievement-habitBirthday{background-image:url(spritesmith-main-0.png);background-position:-1223px -201px;width:24px;height:26px}.achievement-habitBirthday2x{background-image:url(spritesmith-main-0.png);background-position:-518px -1582px;width:48px;height:52px}.achievement-habiticaDay{background-image:url(spritesmith-main-0.png);background-position:-1298px -1183px;width:24px;height:26px}.achievement-habiticaDay2x{background-image:url(spritesmith-main-0.png);background-position:-616px -1582px;width:48px;height:52px}.achievement-heart{background-image:url(spritesmith-main-0.png);background-position:-1414px -1274px;width:24px;height:26px}.achievement-heart2x{background-image:url(spritesmith-main-0.png);background-position:-665px -1582px;width:48px;height:52px}.achievement-karaoke-2x{background-image:url(spritesmith-main-0.png);background-position:-763px -1582px;width:48px;height:52px}.achievement-karaoke{background-image:url(spritesmith-main-0.png);background-position:-1505px -1365px;width:24px;height:26px}.achievement-ninja{background-image:url(spritesmith-main-0.png);background-position:-1480px -1365px;width:24px;height:26px}.achievement-ninja2x{background-image:url(spritesmith-main-0.png);background-position:-861px -1582px;width:48px;height:52px}.achievement-nye{background-image:url(spritesmith-main-0.png);background-position:-1596px -1456px;width:24px;height:26px}.achievement-nye2x{background-image:url(spritesmith-main-0.png);background-position:-959px -1582px;width:48px;height:52px}.achievement-perfect{background-image:url(spritesmith-main-0.png);background-position:-1546px -1456px;width:24px;height:26px}.achievement-perfect2x{background-image:url(spritesmith-main-0.png);background-position:-1223px -148px;width:48px;height:52px}.achievement-rat{background-image:url(spritesmith-main-0.png);background-position:-1248px -383px;width:24px;height:26px}.achievement-rat2x{background-image:url(spritesmith-main-0.png);background-position:-1155px -1582px;width:48px;height:52px}.achievement-seafoam{background-image:url(spritesmith-main-0.png);background-position:-1662px -1547px;width:24px;height:26px}.achievement-seafoam2x{background-image:url(spritesmith-main-0.png);background-position:-1106px -1582px;width:48px;height:52px}.achievement-shield{background-image:url(spritesmith-main-0.png);background-position:-1687px -1547px;width:24px;height:26px}.achievement-shield2x{background-image:url(spritesmith-main-0.png);background-position:-1008px -1582px;width:48px;height:52px}.achievement-shinySeed{background-image:url(spritesmith-main-0.png);background-position:-1571px -1456px;width:24px;height:26px}.achievement-shinySeed2x{background-image:url(spritesmith-main-0.png);background-position:-910px -1582px;width:48px;height:52px}.achievement-snowball{background-image:url(spritesmith-main-0.png);background-position:-1455px -1365px;width:24px;height:26px}.achievement-snowball2x{background-image:url(spritesmith-main-0.png);background-position:-812px -1582px;width:48px;height:52px}.achievement-spookDust{background-image:url(spritesmith-main-0.png);background-position:-1364px -1274px;width:24px;height:26px}.achievement-spookDust2x{background-image:url(spritesmith-main-0.png);background-position:-714px -1582px;width:48px;height:52px}.achievement-stoikalm{background-image:url(spritesmith-main-0.png);background-position:-1389px -1274px;width:24px;height:26px}.achievement-sun{background-image:url(spritesmith-main-0.png);background-position:-1273px -1183px;width:24px;height:26px}.achievement-sun2x{background-image:url(spritesmith-main-0.png);background-position:-567px -1582px;width:48px;height:52px}.achievement-sword{background-image:url(spritesmith-main-0.png);background-position:-1323px -1183px;width:24px;height:26px}.achievement-sword2x{background-image:url(spritesmith-main-0.png);background-position:-469px -1582px;width:48px;height:52px}.achievement-thankyou{background-image:url(spritesmith-main-0.png);background-position:-1248px -201px;width:24px;height:26px}.achievement-thankyou2x{background-image:url(spritesmith-main-0.png);background-position:-371px -1582px;width:48px;height:52px}.achievement-thermometer{background-image:url(spritesmith-main-0.png);background-position:-1637px -1547px;width:24px;height:26px}.achievement-thermometer2x{background-image:url(spritesmith-main-0.png);background-position:-273px -1582px;width:48px;height:52px}.achievement-tree{background-image:url(spritesmith-main-0.png);background-position:-1248px -474px;width:24px;height:26px}.achievement-tree2x{background-image:url(spritesmith-main-0.png);background-position:-1456px -1400px;width:48px;height:52px}.achievement-triadbingo{background-image:url(spritesmith-main-0.png);background-position:-1223px -656px;width:24px;height:26px}.achievement-triadbingo2x{background-image:url(spritesmith-main-0.png);background-position:-1274px -1218px;width:48px;height:52px}.achievement-ultimate-healer{background-image:url(spritesmith-main-0.png);background-position:-1223px -747px;width:24px;height:26px}.achievement-ultimate-healer2x{background-image:url(spritesmith-main-0.png);background-position:-1183px -1036px;width:48px;height:52px}.achievement-ultimate-mage{background-image:url(spritesmith-main-0.png);background-position:-1223px -838px;width:24px;height:26px}.achievement-ultimate-mage2x{background-image:url(spritesmith-main-0.png);background-position:-1132px -967px;width:48px;height:52px}.achievement-ultimate-rogue{background-image:url(spritesmith-main-0.png);background-position:-1223px -929px;width:24px;height:26px}.achievement-ultimate-rogue2x{background-image:url(spritesmith-main-0.png);background-position:-1223px -785px;width:48px;height:52px}.achievement-ultimate-warrior{background-image:url(spritesmith-main-0.png);background-position:-1230px -967px;width:24px;height:26px}.achievement-ultimate-warrior2x{background-image:url(spritesmith-main-0.png);background-position:-1223px -603px;width:48px;height:52px}.achievement-valentine{background-image:url(spritesmith-main-0.png);background-position:-1183px -1089px;width:24px;height:26px}.achievement-valentine2x{background-image:url(spritesmith-main-0.png);background-position:-1223px -421px;width:48px;height:52px}.achievement-wolf{background-image:url(spritesmith-main-0.png);background-position:-1233px -1089px;width:24px;height:26px}.achievement-wolf2x{background-image:url(spritesmith-main-0.png);background-position:-1057px -1582px;width:48px;height:52px}.background_alpine_slopes{background-image:url(spritesmith-main-0.png);background-position:-705px -592px;width:140px;height:147px}.background_autumn_forest{background-image:url(spritesmith-main-0.png);background-position:-423px -444px;width:140px;height:147px}.background_beach{background-image:url(spritesmith-main-0.png);background-position:-426px 0;width:141px;height:147px}.background_blacksmithy{background-image:url(spritesmith-main-0.png);background-position:-709px -444px;width:140px;height:147px}.background_cherry_trees{background-image:url(spritesmith-main-0.png);background-position:-141px -592px;width:140px;height:147px}.background_clouds{background-image:url(spritesmith-main-0.png);background-position:-564px -592px;width:140px;height:147px}.background_coral_reef{background-image:url(spritesmith-main-0.png);background-position:-850px -296px;width:140px;height:147px}.background_crystal_cave{background-image:url(spritesmith-main-0.png);background-position:0 -740px;width:140px;height:147px}.background_dilatory_ruins{background-image:url(spritesmith-main-0.png);background-position:-141px -740px;width:140px;height:147px}.background_distant_castle{background-image:url(spritesmith-main-0.png);background-position:-705px -888px;width:140px;height:147px}.background_drifting_raft{background-image:url(spritesmith-main-0.png);background-position:-846px -888px;width:140px;height:147px}.background_dusty_canyons{background-image:url(spritesmith-main-0.png);background-position:-987px -888px;width:140px;height:147px}.background_fairy_ring{background-image:url(spritesmith-main-0.png);background-position:-568px -148px;width:140px;height:147px}.background_floating_islands{background-image:url(spritesmith-main-0.png);background-position:-568px -296px;width:140px;height:147px}.background_floral_meadow{background-image:url(spritesmith-main-0.png);background-position:0 -444px;width:140px;height:147px}.background_forest{background-image:url(spritesmith-main-0.png);background-position:-141px -444px;width:140px;height:147px}.background_frigid_peak{background-image:url(spritesmith-main-0.png);background-position:-282px -444px;width:140px;height:147px}.background_giant_wave{background-image:url(spritesmith-main-0.png);background-position:-284px 0;width:141px;height:147px}.background_graveyard{background-image:url(spritesmith-main-0.png);background-position:-564px -444px;width:140px;height:147px}.background_gumdrop_land{background-image:url(spritesmith-main-0.png);background-position:-709px 0;width:140px;height:147px}.background_harvest_feast{background-image:url(spritesmith-main-0.png);background-position:-709px -148px;width:140px;height:147px}.background_harvest_fields{background-image:url(spritesmith-main-0.png);background-position:0 -148px;width:141px;height:147px}.background_harvest_moon{background-image:url(spritesmith-main-0.png);background-position:-142px -148px;width:141px;height:147px}.background_haunted_house{background-image:url(spritesmith-main-0.png);background-position:0 -592px;width:140px;height:147px}.background_ice_cave{background-image:url(spritesmith-main-0.png);background-position:-284px -148px;width:141px;height:147px}.background_iceberg{background-image:url(spritesmith-main-0.png);background-position:-282px -592px;width:140px;height:147px}.background_island_waterfalls{background-image:url(spritesmith-main-0.png);background-position:-423px -592px;width:140px;height:147px}.background_marble_temple{background-image:url(spritesmith-main-0.png);background-position:0 0;width:141px;height:147px}.background_market{background-image:url(spritesmith-main-0.png);background-position:-568px 0;width:140px;height:147px}.background_mountain_lake{background-image:url(spritesmith-main-0.png);background-position:-850px 0;width:140px;height:147px}.background_night_dunes{background-image:url(spritesmith-main-0.png);background-position:-850px -148px;width:140px;height:147px}.background_open_waters{background-image:url(spritesmith-main-0.png);background-position:-426px -148px;width:141px;height:147px}.background_pagodas{background-image:url(spritesmith-main-0.png);background-position:-850px -444px;width:140px;height:147px}.background_pumpkin_patch{background-image:url(spritesmith-main-0.png);background-position:-850px -592px;width:140px;height:147px}.background_pyramids{background-image:url(spritesmith-main-0.png);background-position:0 -296px;width:141px;height:147px}.background_rolling_hills{background-image:url(spritesmith-main-0.png);background-position:-142px -296px;width:141px;height:147px}.background_seafarer_ship{background-image:url(spritesmith-main-0.png);background-position:-282px -740px;width:140px;height:147px}.background_shimmery_bubbles{background-image:url(spritesmith-main-0.png);background-position:-423px -740px;width:140px;height:147px}.background_slimy_swamp{background-image:url(spritesmith-main-0.png);background-position:-564px -740px;width:140px;height:147px}.background_snowy_pines{background-image:url(spritesmith-main-0.png);background-position:-705px -740px;width:140px;height:147px}.background_snowy_sunrise{background-image:url(spritesmith-main-0.png);background-position:-846px -740px;width:140px;height:147px}.background_south_pole{background-image:url(spritesmith-main-0.png);background-position:-991px 0;width:140px;height:147px}.background_spring_rain{background-image:url(spritesmith-main-0.png);background-position:-991px -148px;width:140px;height:147px}.background_stable{background-image:url(spritesmith-main-0.png);background-position:-991px -296px;width:140px;height:147px}.background_stained_glass{background-image:url(spritesmith-main-0.png);background-position:-991px -444px;width:140px;height:147px}.background_starry_skies{background-image:url(spritesmith-main-0.png);background-position:-991px -592px;width:140px;height:147px}.background_sunken_ship{background-image:url(spritesmith-main-0.png);background-position:-991px -740px;width:140px;height:147px}.background_sunset_meadow{background-image:url(spritesmith-main-0.png);background-position:0 -888px;width:140px;height:147px}.background_sunset_oasis{background-image:url(spritesmith-main-0.png);background-position:-141px -888px;width:140px;height:147px}.background_sunset_savannah{background-image:url(spritesmith-main-0.png);background-position:-282px -888px;width:140px;height:147px}.background_swarming_darkness{background-image:url(spritesmith-main-0.png);background-position:-423px -888px;width:140px;height:147px}.background_tavern{background-image:url(spritesmith-main-0.png);background-position:-564px -888px;width:140px;height:147px}.background_thunderstorm{background-image:url(spritesmith-main-0.png);background-position:-284px -296px;width:141px;height:147px}.background_twinkly_lights{background-image:url(spritesmith-main-0.png);background-position:-426px -296px;width:141px;height:147px}.background_twinkly_party_lights{background-image:url(spritesmith-main-0.png);background-position:-142px 0;width:141px;height:147px}.background_volcano{background-image:url(spritesmith-main-0.png);background-position:-1132px 0;width:140px;height:147px}.background_winter_town{background-image:url(spritesmith-main-0.png);background-position:-709px -296px;width:140px;height:147px}.hair_beard_1_TRUred{background-image:url(spritesmith-main-0.png);background-position:-91px -1309px;width:90px;height:90px}.customize-option.hair_beard_1_TRUred{background-image:url(spritesmith-main-0.png);background-position:-116px -1324px;width:60px;height:60px}.hair_beard_1_aurora{background-image:url(spritesmith-main-0.png);background-position:-182px -1309px;width:90px;height:90px}.customize-option.hair_beard_1_aurora{background-image:url(spritesmith-main-0.png);background-position:-207px -1324px;width:60px;height:60px}.hair_beard_1_black{background-image:url(spritesmith-main-0.png);background-position:-273px -1309px;width:90px;height:90px}.customize-option.hair_beard_1_black{background-image:url(spritesmith-main-0.png);background-position:-298px -1324px;width:60px;height:60px}.hair_beard_1_blond{background-image:url(spritesmith-main-0.png);background-position:-364px -1309px;width:90px;height:90px}.customize-option.hair_beard_1_blond{background-image:url(spritesmith-main-0.png);background-position:-389px -1324px;width:60px;height:60px}.hair_beard_1_blue{background-image:url(spritesmith-main-0.png);background-position:-455px -1309px;width:90px;height:90px}.customize-option.hair_beard_1_blue{background-image:url(spritesmith-main-0.png);background-position:-480px -1324px;width:60px;height:60px}.hair_beard_1_brown{background-image:url(spritesmith-main-0.png);background-position:-546px -1309px;width:90px;height:90px}.customize-option.hair_beard_1_brown{background-image:url(spritesmith-main-0.png);background-position:-571px -1324px;width:60px;height:60px}.hair_beard_1_candycane{background-image:url(spritesmith-main-0.png);background-position:-637px -1309px;width:90px;height:90px}.customize-option.hair_beard_1_candycane{background-image:url(spritesmith-main-0.png);background-position:-662px -1324px;width:60px;height:60px}.hair_beard_1_candycorn{background-image:url(spritesmith-main-0.png);background-position:-728px -1309px;width:90px;height:90px}.customize-option.hair_beard_1_candycorn{background-image:url(spritesmith-main-0.png);background-position:-753px -1324px;width:60px;height:60px}.hair_beard_1_festive{background-image:url(spritesmith-main-0.png);background-position:-819px -1309px;width:90px;height:90px}.customize-option.hair_beard_1_festive{background-image:url(spritesmith-main-0.png);background-position:-844px -1324px;width:60px;height:60px}.hair_beard_1_frost{background-image:url(spritesmith-main-0.png);background-position:-910px -1309px;width:90px;height:90px}.customize-option.hair_beard_1_frost{background-image:url(spritesmith-main-0.png);background-position:-935px -1324px;width:60px;height:60px}.hair_beard_1_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-1001px -1309px;width:90px;height:90px}.customize-option.hair_beard_1_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-1026px -1324px;width:60px;height:60px}.hair_beard_1_green{background-image:url(spritesmith-main-0.png);background-position:-1092px -1309px;width:90px;height:90px}.customize-option.hair_beard_1_green{background-image:url(spritesmith-main-0.png);background-position:-1117px -1324px;width:60px;height:60px}.hair_beard_1_halloween{background-image:url(spritesmith-main-0.png);background-position:-1183px -1309px;width:90px;height:90px}.customize-option.hair_beard_1_halloween{background-image:url(spritesmith-main-0.png);background-position:-1208px -1324px;width:60px;height:60px}.hair_beard_1_holly{background-image:url(spritesmith-main-0.png);background-position:-1274px -1309px;width:90px;height:90px}.customize-option.hair_beard_1_holly{background-image:url(spritesmith-main-0.png);background-position:-1299px -1324px;width:60px;height:60px}.hair_beard_1_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-1455px 0;width:90px;height:90px}.customize-option.hair_beard_1_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-1480px -15px;width:60px;height:60px}.hair_beard_1_midnight{background-image:url(spritesmith-main-0.png);background-position:-1455px -91px;width:90px;height:90px}.customize-option.hair_beard_1_midnight{background-image:url(spritesmith-main-0.png);background-position:-1480px -106px;width:60px;height:60px}.hair_beard_1_pblue{background-image:url(spritesmith-main-0.png);background-position:-1455px -182px;width:90px;height:90px}.customize-option.hair_beard_1_pblue{background-image:url(spritesmith-main-0.png);background-position:-1480px -197px;width:60px;height:60px}.hair_beard_1_peppermint{background-image:url(spritesmith-main-0.png);background-position:-1455px -273px;width:90px;height:90px}.customize-option.hair_beard_1_peppermint{background-image:url(spritesmith-main-0.png);background-position:-1480px -288px;width:60px;height:60px}.hair_beard_1_pgreen{background-image:url(spritesmith-main-0.png);background-position:-1455px -364px;width:90px;height:90px}.customize-option.hair_beard_1_pgreen{background-image:url(spritesmith-main-0.png);background-position:-1480px -379px;width:60px;height:60px}.hair_beard_1_porange{background-image:url(spritesmith-main-0.png);background-position:-1455px -455px;width:90px;height:90px}.customize-option.hair_beard_1_porange{background-image:url(spritesmith-main-0.png);background-position:-1480px -470px;width:60px;height:60px}.hair_beard_1_ppink{background-image:url(spritesmith-main-0.png);background-position:-1132px -148px;width:90px;height:90px}.customize-option.hair_beard_1_ppink{background-image:url(spritesmith-main-0.png);background-position:-1157px -163px;width:60px;height:60px}.hair_beard_1_ppurple{background-image:url(spritesmith-main-0.png);background-position:-1455px -637px;width:90px;height:90px}.customize-option.hair_beard_1_ppurple{background-image:url(spritesmith-main-0.png);background-position:-1480px -652px;width:60px;height:60px}.hair_beard_1_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-1455px -728px;width:90px;height:90px}.customize-option.hair_beard_1_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-1480px -743px;width:60px;height:60px}.hair_beard_1_purple{background-image:url(spritesmith-main-0.png);background-position:-1455px -819px;width:90px;height:90px}.customize-option.hair_beard_1_purple{background-image:url(spritesmith-main-0.png);background-position:-1480px -834px;width:60px;height:60px}.hair_beard_1_pyellow{background-image:url(spritesmith-main-0.png);background-position:-1455px -910px;width:90px;height:90px}.customize-option.hair_beard_1_pyellow{background-image:url(spritesmith-main-0.png);background-position:-1480px -925px;width:60px;height:60px}.hair_beard_1_rainbow{background-image:url(spritesmith-main-0.png);background-position:-1455px -1001px;width:90px;height:90px}.customize-option.hair_beard_1_rainbow{background-image:url(spritesmith-main-0.png);background-position:-1480px -1016px;width:60px;height:60px}.hair_beard_1_red{background-image:url(spritesmith-main-0.png);background-position:-1455px -1092px;width:90px;height:90px}.customize-option.hair_beard_1_red{background-image:url(spritesmith-main-0.png);background-position:-1480px -1107px;width:60px;height:60px}.hair_beard_1_snowy{background-image:url(spritesmith-main-0.png);background-position:-1455px -1183px;width:90px;height:90px}.customize-option.hair_beard_1_snowy{background-image:url(spritesmith-main-0.png);background-position:-1480px -1198px;width:60px;height:60px}.hair_beard_1_white{background-image:url(spritesmith-main-0.png);background-position:-1455px -1274px;width:90px;height:90px}.customize-option.hair_beard_1_white{background-image:url(spritesmith-main-0.png);background-position:-1480px -1289px;width:60px;height:60px}.hair_beard_1_winternight{background-image:url(spritesmith-main-0.png);background-position:0 -1400px;width:90px;height:90px}.customize-option.hair_beard_1_winternight{background-image:url(spritesmith-main-0.png);background-position:-25px -1415px;width:60px;height:60px}.hair_beard_1_winterstar{background-image:url(spritesmith-main-0.png);background-position:-91px -1400px;width:90px;height:90px}.customize-option.hair_beard_1_winterstar{background-image:url(spritesmith-main-0.png);background-position:-116px -1415px;width:60px;height:60px}.hair_beard_1_yellow{background-image:url(spritesmith-main-0.png);background-position:-182px -1400px;width:90px;height:90px}.customize-option.hair_beard_1_yellow{background-image:url(spritesmith-main-0.png);background-position:-207px -1415px;width:60px;height:60px}.hair_beard_1_zombie{background-image:url(spritesmith-main-0.png);background-position:-273px -1400px;width:90px;height:90px}.customize-option.hair_beard_1_zombie{background-image:url(spritesmith-main-0.png);background-position:-298px -1415px;width:60px;height:60px}.hair_beard_2_TRUred{background-image:url(spritesmith-main-0.png);background-position:-364px -1400px;width:90px;height:90px}.customize-option.hair_beard_2_TRUred{background-image:url(spritesmith-main-0.png);background-position:-389px -1415px;width:60px;height:60px}.hair_beard_2_aurora{background-image:url(spritesmith-main-0.png);background-position:-455px -1400px;width:90px;height:90px}.customize-option.hair_beard_2_aurora{background-image:url(spritesmith-main-0.png);background-position:-480px -1415px;width:60px;height:60px}.hair_beard_2_black{background-image:url(spritesmith-main-0.png);background-position:-546px -1400px;width:90px;height:90px}.customize-option.hair_beard_2_black{background-image:url(spritesmith-main-0.png);background-position:-571px -1415px;width:60px;height:60px}.hair_beard_2_blond{background-image:url(spritesmith-main-0.png);background-position:-637px -1400px;width:90px;height:90px}.customize-option.hair_beard_2_blond{background-image:url(spritesmith-main-0.png);background-position:-662px -1415px;width:60px;height:60px}.hair_beard_2_blue{background-image:url(spritesmith-main-0.png);background-position:-728px -1400px;width:90px;height:90px}.customize-option.hair_beard_2_blue{background-image:url(spritesmith-main-0.png);background-position:-753px -1415px;width:60px;height:60px}.hair_beard_2_brown{background-image:url(spritesmith-main-0.png);background-position:-819px -1400px;width:90px;height:90px}.customize-option.hair_beard_2_brown{background-image:url(spritesmith-main-0.png);background-position:-844px -1415px;width:60px;height:60px}.hair_beard_2_candycane{background-image:url(spritesmith-main-0.png);background-position:-910px -1400px;width:90px;height:90px}.customize-option.hair_beard_2_candycane{background-image:url(spritesmith-main-0.png);background-position:-935px -1415px;width:60px;height:60px}.hair_beard_2_candycorn{background-image:url(spritesmith-main-0.png);background-position:-1001px -1400px;width:90px;height:90px}.customize-option.hair_beard_2_candycorn{background-image:url(spritesmith-main-0.png);background-position:-1026px -1415px;width:60px;height:60px}.hair_beard_2_festive{background-image:url(spritesmith-main-0.png);background-position:-1092px -1400px;width:90px;height:90px}.customize-option.hair_beard_2_festive{background-image:url(spritesmith-main-0.png);background-position:-1117px -1415px;width:60px;height:60px}.hair_beard_2_frost{background-image:url(spritesmith-main-0.png);background-position:-1183px -1400px;width:90px;height:90px}.customize-option.hair_beard_2_frost{background-image:url(spritesmith-main-0.png);background-position:-1208px -1415px;width:60px;height:60px}.hair_beard_2_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-1274px -1400px;width:90px;height:90px}.customize-option.hair_beard_2_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-1299px -1415px;width:60px;height:60px}.hair_beard_2_green{background-image:url(spritesmith-main-0.png);background-position:-1365px -1400px;width:90px;height:90px}.customize-option.hair_beard_2_green{background-image:url(spritesmith-main-0.png);background-position:-1390px -1415px;width:60px;height:60px}.hair_beard_2_halloween{background-image:url(spritesmith-main-0.png);background-position:-1546px 0;width:90px;height:90px}.customize-option.hair_beard_2_halloween{background-image:url(spritesmith-main-0.png);background-position:-1571px -15px;width:60px;height:60px}.hair_beard_2_holly{background-image:url(spritesmith-main-0.png);background-position:-1546px -91px;width:90px;height:90px}.customize-option.hair_beard_2_holly{background-image:url(spritesmith-main-0.png);background-position:-1571px -106px;width:60px;height:60px}.hair_beard_2_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-1546px -182px;width:90px;height:90px}.customize-option.hair_beard_2_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-1571px -197px;width:60px;height:60px}.hair_beard_2_midnight{background-image:url(spritesmith-main-0.png);background-position:-1546px -273px;width:90px;height:90px}.customize-option.hair_beard_2_midnight{background-image:url(spritesmith-main-0.png);background-position:-1571px -288px;width:60px;height:60px}.hair_beard_2_pblue{background-image:url(spritesmith-main-0.png);background-position:-1546px -364px;width:90px;height:90px}.customize-option.hair_beard_2_pblue{background-image:url(spritesmith-main-0.png);background-position:-1571px -379px;width:60px;height:60px}.hair_beard_2_peppermint{background-image:url(spritesmith-main-0.png);background-position:-1546px -455px;width:90px;height:90px}.customize-option.hair_beard_2_peppermint{background-image:url(spritesmith-main-0.png);background-position:-1571px -470px;width:60px;height:60px}.hair_beard_2_pgreen{background-image:url(spritesmith-main-0.png);background-position:-1546px -546px;width:90px;height:90px}.customize-option.hair_beard_2_pgreen{background-image:url(spritesmith-main-0.png);background-position:-1571px -561px;width:60px;height:60px}.hair_beard_2_porange{background-image:url(spritesmith-main-0.png);background-position:-1546px -637px;width:90px;height:90px}.customize-option.hair_beard_2_porange{background-image:url(spritesmith-main-0.png);background-position:-1571px -652px;width:60px;height:60px}.hair_beard_2_ppink{background-image:url(spritesmith-main-0.png);background-position:-1546px -728px;width:90px;height:90px}.customize-option.hair_beard_2_ppink{background-image:url(spritesmith-main-0.png);background-position:-1571px -743px;width:60px;height:60px}.hair_beard_2_ppurple{background-image:url(spritesmith-main-0.png);background-position:-1546px -819px;width:90px;height:90px}.customize-option.hair_beard_2_ppurple{background-image:url(spritesmith-main-0.png);background-position:-1571px -834px;width:60px;height:60px}.hair_beard_2_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-1546px -910px;width:90px;height:90px}.customize-option.hair_beard_2_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-1571px -925px;width:60px;height:60px}.hair_beard_2_purple{background-image:url(spritesmith-main-0.png);background-position:-1546px -1001px;width:90px;height:90px}.customize-option.hair_beard_2_purple{background-image:url(spritesmith-main-0.png);background-position:-1571px -1016px;width:60px;height:60px}.hair_beard_2_pyellow{background-image:url(spritesmith-main-0.png);background-position:-1546px -1092px;width:90px;height:90px}.customize-option.hair_beard_2_pyellow{background-image:url(spritesmith-main-0.png);background-position:-1571px -1107px;width:60px;height:60px}.hair_beard_2_rainbow{background-image:url(spritesmith-main-0.png);background-position:-1546px -1183px;width:90px;height:90px}.customize-option.hair_beard_2_rainbow{background-image:url(spritesmith-main-0.png);background-position:-1571px -1198px;width:60px;height:60px}.hair_beard_2_red{background-image:url(spritesmith-main-0.png);background-position:-1546px -1274px;width:90px;height:90px}.customize-option.hair_beard_2_red{background-image:url(spritesmith-main-0.png);background-position:-1571px -1289px;width:60px;height:60px}.hair_beard_2_snowy{background-image:url(spritesmith-main-0.png);background-position:-1546px -1365px;width:90px;height:90px}.customize-option.hair_beard_2_snowy{background-image:url(spritesmith-main-0.png);background-position:-1571px -1380px;width:60px;height:60px}.hair_beard_2_white{background-image:url(spritesmith-main-0.png);background-position:0 -1491px;width:90px;height:90px}.customize-option.hair_beard_2_white{background-image:url(spritesmith-main-0.png);background-position:-25px -1506px;width:60px;height:60px}.hair_beard_2_winternight{background-image:url(spritesmith-main-0.png);background-position:-91px -1491px;width:90px;height:90px}.customize-option.hair_beard_2_winternight{background-image:url(spritesmith-main-0.png);background-position:-116px -1506px;width:60px;height:60px}.hair_beard_2_winterstar{background-image:url(spritesmith-main-0.png);background-position:-182px -1491px;width:90px;height:90px}.customize-option.hair_beard_2_winterstar{background-image:url(spritesmith-main-0.png);background-position:-207px -1506px;width:60px;height:60px}.hair_beard_2_yellow{background-image:url(spritesmith-main-0.png);background-position:-273px -1491px;width:90px;height:90px}.customize-option.hair_beard_2_yellow{background-image:url(spritesmith-main-0.png);background-position:-298px -1506px;width:60px;height:60px}.hair_beard_2_zombie{background-image:url(spritesmith-main-0.png);background-position:-364px -1491px;width:90px;height:90px}.customize-option.hair_beard_2_zombie{background-image:url(spritesmith-main-0.png);background-position:-389px -1506px;width:60px;height:60px}.hair_beard_3_TRUred{background-image:url(spritesmith-main-0.png);background-position:-455px -1491px;width:90px;height:90px}.customize-option.hair_beard_3_TRUred{background-image:url(spritesmith-main-0.png);background-position:-480px -1506px;width:60px;height:60px}.hair_beard_3_aurora{background-image:url(spritesmith-main-0.png);background-position:-546px -1491px;width:90px;height:90px}.customize-option.hair_beard_3_aurora{background-image:url(spritesmith-main-0.png);background-position:-571px -1506px;width:60px;height:60px}.hair_beard_3_black{background-image:url(spritesmith-main-0.png);background-position:-637px -1491px;width:90px;height:90px}.customize-option.hair_beard_3_black{background-image:url(spritesmith-main-0.png);background-position:-662px -1506px;width:60px;height:60px}.hair_beard_3_blond{background-image:url(spritesmith-main-0.png);background-position:-728px -1491px;width:90px;height:90px}.customize-option.hair_beard_3_blond{background-image:url(spritesmith-main-0.png);background-position:-753px -1506px;width:60px;height:60px}.hair_beard_3_blue{background-image:url(spritesmith-main-0.png);background-position:-819px -1491px;width:90px;height:90px}.customize-option.hair_beard_3_blue{background-image:url(spritesmith-main-0.png);background-position:-844px -1506px;width:60px;height:60px}.hair_beard_3_brown{background-image:url(spritesmith-main-0.png);background-position:-910px -1491px;width:90px;height:90px}.customize-option.hair_beard_3_brown{background-image:url(spritesmith-main-0.png);background-position:-935px -1506px;width:60px;height:60px}.hair_beard_3_candycane{background-image:url(spritesmith-main-0.png);background-position:-1001px -1491px;width:90px;height:90px}.customize-option.hair_beard_3_candycane{background-image:url(spritesmith-main-0.png);background-position:-1026px -1506px;width:60px;height:60px}.hair_beard_3_candycorn{background-image:url(spritesmith-main-0.png);background-position:-1092px -1491px;width:90px;height:90px}.customize-option.hair_beard_3_candycorn{background-image:url(spritesmith-main-0.png);background-position:-1117px -1506px;width:60px;height:60px}.hair_beard_3_festive{background-image:url(spritesmith-main-0.png);background-position:-1183px -1491px;width:90px;height:90px}.customize-option.hair_beard_3_festive{background-image:url(spritesmith-main-0.png);background-position:-1208px -1506px;width:60px;height:60px}.hair_beard_3_frost{background-image:url(spritesmith-main-0.png);background-position:-1274px -1491px;width:90px;height:90px}.customize-option.hair_beard_3_frost{background-image:url(spritesmith-main-0.png);background-position:-1299px -1506px;width:60px;height:60px}.hair_beard_3_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-1365px -1491px;width:90px;height:90px}.customize-option.hair_beard_3_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-1390px -1506px;width:60px;height:60px}.hair_beard_3_green{background-image:url(spritesmith-main-0.png);background-position:-1456px -1491px;width:90px;height:90px}.customize-option.hair_beard_3_green{background-image:url(spritesmith-main-0.png);background-position:-1481px -1506px;width:60px;height:60px}.hair_beard_3_halloween{background-image:url(spritesmith-main-0.png);background-position:-1637px 0;width:90px;height:90px}.customize-option.hair_beard_3_halloween{background-image:url(spritesmith-main-0.png);background-position:-1662px -15px;width:60px;height:60px}.hair_beard_3_holly{background-image:url(spritesmith-main-0.png);background-position:-1637px -91px;width:90px;height:90px}.customize-option.hair_beard_3_holly{background-image:url(spritesmith-main-0.png);background-position:-1662px -106px;width:60px;height:60px}.hair_beard_3_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-1637px -182px;width:90px;height:90px}.customize-option.hair_beard_3_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-1662px -197px;width:60px;height:60px}.hair_beard_3_midnight{background-image:url(spritesmith-main-0.png);background-position:-1637px -273px;width:90px;height:90px}.customize-option.hair_beard_3_midnight{background-image:url(spritesmith-main-0.png);background-position:-1662px -288px;width:60px;height:60px}.hair_beard_3_pblue{background-image:url(spritesmith-main-0.png);background-position:-1637px -364px;width:90px;height:90px}.customize-option.hair_beard_3_pblue{background-image:url(spritesmith-main-0.png);background-position:-1662px -379px;width:60px;height:60px}.hair_beard_3_peppermint{background-image:url(spritesmith-main-0.png);background-position:-1637px -455px;width:90px;height:90px}.customize-option.hair_beard_3_peppermint{background-image:url(spritesmith-main-0.png);background-position:-1662px -470px;width:60px;height:60px}.hair_beard_3_pgreen{background-image:url(spritesmith-main-0.png);background-position:-1637px -546px;width:90px;height:90px}.customize-option.hair_beard_3_pgreen{background-image:url(spritesmith-main-0.png);background-position:-1662px -561px;width:60px;height:60px}.hair_beard_3_porange{background-image:url(spritesmith-main-0.png);background-position:-1637px -637px;width:90px;height:90px}.customize-option.hair_beard_3_porange{background-image:url(spritesmith-main-0.png);background-position:-1662px -652px;width:60px;height:60px}.hair_beard_3_ppink{background-image:url(spritesmith-main-0.png);background-position:-1637px -728px;width:90px;height:90px}.customize-option.hair_beard_3_ppink{background-image:url(spritesmith-main-0.png);background-position:-1662px -743px;width:60px;height:60px}.hair_beard_3_ppurple{background-image:url(spritesmith-main-0.png);background-position:-1637px -819px;width:90px;height:90px}.customize-option.hair_beard_3_ppurple{background-image:url(spritesmith-main-0.png);background-position:-1662px -834px;width:60px;height:60px}.hair_beard_3_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-1637px -910px;width:90px;height:90px}.customize-option.hair_beard_3_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-1662px -925px;width:60px;height:60px}.hair_beard_3_purple{background-image:url(spritesmith-main-0.png);background-position:-1637px -1001px;width:90px;height:90px}.customize-option.hair_beard_3_purple{background-image:url(spritesmith-main-0.png);background-position:-1662px -1016px;width:60px;height:60px}.hair_beard_3_pyellow{background-image:url(spritesmith-main-0.png);background-position:-1637px -1092px;width:90px;height:90px}.customize-option.hair_beard_3_pyellow{background-image:url(spritesmith-main-0.png);background-position:-1662px -1107px;width:60px;height:60px}.hair_beard_3_rainbow{background-image:url(spritesmith-main-0.png);background-position:-1637px -1183px;width:90px;height:90px}.customize-option.hair_beard_3_rainbow{background-image:url(spritesmith-main-0.png);background-position:-1662px -1198px;width:60px;height:60px}.hair_beard_3_red{background-image:url(spritesmith-main-0.png);background-position:-1637px -1274px;width:90px;height:90px}.customize-option.hair_beard_3_red{background-image:url(spritesmith-main-0.png);background-position:-1662px -1289px;width:60px;height:60px}.hair_beard_3_snowy{background-image:url(spritesmith-main-0.png);background-position:-1637px -1365px;width:90px;height:90px}.customize-option.hair_beard_3_snowy{background-image:url(spritesmith-main-0.png);background-position:-1662px -1380px;width:60px;height:60px}.hair_beard_3_white{background-image:url(spritesmith-main-0.png);background-position:-1637px -1456px;width:90px;height:90px}.customize-option.hair_beard_3_white{background-image:url(spritesmith-main-0.png);background-position:-1662px -1471px;width:60px;height:60px}.hair_beard_3_winternight{background-image:url(spritesmith-main-0.png);background-position:0 -1582px;width:90px;height:90px}.customize-option.hair_beard_3_winternight{background-image:url(spritesmith-main-0.png);background-position:-25px -1597px;width:60px;height:60px}.hair_beard_3_winterstar{background-image:url(spritesmith-main-0.png);background-position:-91px -1582px;width:90px;height:90px}.customize-option.hair_beard_3_winterstar{background-image:url(spritesmith-main-0.png);background-position:-116px -1597px;width:60px;height:60px}.hair_beard_3_yellow{background-image:url(spritesmith-main-0.png);background-position:-182px -1582px;width:90px;height:90px}.customize-option.hair_beard_3_yellow{background-image:url(spritesmith-main-0.png);background-position:-207px -1597px;width:60px;height:60px}.hair_beard_3_zombie{background-image:url(spritesmith-main-0.png);background-position:-1455px -546px;width:90px;height:90px}.customize-option.hair_beard_3_zombie{background-image:url(spritesmith-main-0.png);background-position:-1480px -561px;width:60px;height:60px}.hair_mustache_1_TRUred{background-image:url(spritesmith-main-0.png);background-position:-910px -1036px;width:90px;height:90px}.customize-option.hair_mustache_1_TRUred{background-image:url(spritesmith-main-0.png);background-position:-935px -1051px;width:60px;height:60px}.hair_mustache_1_aurora{background-image:url(spritesmith-main-0.png);background-position:-819px -1036px;width:90px;height:90px}.customize-option.hair_mustache_1_aurora{background-image:url(spritesmith-main-0.png);background-position:-844px -1051px;width:60px;height:60px}.hair_mustache_1_black{background-image:url(spritesmith-main-0.png);background-position:-728px -1036px;width:90px;height:90px}.customize-option.hair_mustache_1_black{background-image:url(spritesmith-main-0.png);background-position:-753px -1051px;width:60px;height:60px}.hair_mustache_1_blond{background-image:url(spritesmith-main-0.png);background-position:-637px -1036px;width:90px;height:90px}.customize-option.hair_mustache_1_blond{background-image:url(spritesmith-main-0.png);background-position:-662px -1051px;width:60px;height:60px}.hair_mustache_1_blue{background-image:url(spritesmith-main-0.png);background-position:-546px -1036px;width:90px;height:90px}.customize-option.hair_mustache_1_blue{background-image:url(spritesmith-main-0.png);background-position:-571px -1051px;width:60px;height:60px}.hair_mustache_1_brown{background-image:url(spritesmith-main-0.png);background-position:-455px -1036px;width:90px;height:90px}.customize-option.hair_mustache_1_brown{background-image:url(spritesmith-main-0.png);background-position:-480px -1051px;width:60px;height:60px}.hair_mustache_1_candycane{background-image:url(spritesmith-main-0.png);background-position:-364px -1036px;width:90px;height:90px}.customize-option.hair_mustache_1_candycane{background-image:url(spritesmith-main-0.png);background-position:-389px -1051px;width:60px;height:60px}.hair_mustache_1_candycorn{background-image:url(spritesmith-main-0.png);background-position:-273px -1036px;width:90px;height:90px}.customize-option.hair_mustache_1_candycorn{background-image:url(spritesmith-main-0.png);background-position:-298px -1051px;width:60px;height:60px}.hair_mustache_1_festive{background-image:url(spritesmith-main-0.png);background-position:-182px -1036px;width:90px;height:90px}.customize-option.hair_mustache_1_festive{background-image:url(spritesmith-main-0.png);background-position:-207px -1051px;width:60px;height:60px}.hair_mustache_1_frost{background-image:url(spritesmith-main-0.png);background-position:-91px -1036px;width:90px;height:90px}.customize-option.hair_mustache_1_frost{background-image:url(spritesmith-main-0.png);background-position:-116px -1051px;width:60px;height:60px}.hair_mustache_1_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:0 -1036px;width:90px;height:90px}.customize-option.hair_mustache_1_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-25px -1051px;width:60px;height:60px}.hair_mustache_1_green{background-image:url(spritesmith-main-0.png);background-position:-1132px -876px;width:90px;height:90px}.customize-option.hair_mustache_1_green{background-image:url(spritesmith-main-0.png);background-position:-1157px -891px;width:60px;height:60px}.hair_mustache_1_halloween{background-image:url(spritesmith-main-0.png);background-position:-1132px -785px;width:90px;height:90px}.customize-option.hair_mustache_1_halloween{background-image:url(spritesmith-main-0.png);background-position:-1157px -800px;width:60px;height:60px}.hair_mustache_1_holly{background-image:url(spritesmith-main-0.png);background-position:-1132px -694px;width:90px;height:90px}.customize-option.hair_mustache_1_holly{background-image:url(spritesmith-main-0.png);background-position:-1157px -709px;width:60px;height:60px}.hair_mustache_1_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-1132px -603px;width:90px;height:90px}.customize-option.hair_mustache_1_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-1157px -618px;width:60px;height:60px}.hair_mustache_1_midnight{background-image:url(spritesmith-main-0.png);background-position:-1132px -512px;width:90px;height:90px}.customize-option.hair_mustache_1_midnight{background-image:url(spritesmith-main-0.png);background-position:-1157px -527px;width:60px;height:60px}.hair_mustache_1_pblue{background-image:url(spritesmith-main-0.png);background-position:-1132px -421px;width:90px;height:90px}.customize-option.hair_mustache_1_pblue{background-image:url(spritesmith-main-0.png);background-position:-1157px -436px;width:60px;height:60px}.hair_mustache_1_peppermint{background-image:url(spritesmith-main-0.png);background-position:-1132px -330px;width:90px;height:90px}.customize-option.hair_mustache_1_peppermint{background-image:url(spritesmith-main-0.png);background-position:-1157px -345px;width:60px;height:60px}.hair_mustache_1_pgreen{background-image:url(spritesmith-main-0.png);background-position:-1132px -239px;width:90px;height:90px}.customize-option.hair_mustache_1_pgreen{background-image:url(spritesmith-main-0.png);background-position:-1157px -254px;width:60px;height:60px}.hair_mustache_1_porange{background-image:url(spritesmith-main-0.png);background-position:0 -1309px;width:90px;height:90px}.customize-option.hair_mustache_1_porange{background-image:url(spritesmith-main-0.png);background-position:-25px -1324px;width:60px;height:60px}.hair_mustache_1_ppink{background-image:url(spritesmith-main-0.png);background-position:-1364px -1183px;width:90px;height:90px}.customize-option.hair_mustache_1_ppink{background-image:url(spritesmith-main-0.png);background-position:-1389px -1198px;width:60px;height:60px}.hair_mustache_1_ppurple{background-image:url(spritesmith-main-0.png);background-position:-1364px -1092px;width:90px;height:90px}.customize-option.hair_mustache_1_ppurple{background-image:url(spritesmith-main-0.png);background-position:-1389px -1107px;width:60px;height:60px}.hair_mustache_1_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-1364px -1001px;width:90px;height:90px}.customize-option.hair_mustache_1_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-1389px -1016px;width:60px;height:60px}.hair_mustache_1_purple{background-image:url(spritesmith-main-0.png);background-position:-1364px -910px;width:90px;height:90px}.customize-option.hair_mustache_1_purple{background-image:url(spritesmith-main-0.png);background-position:-1389px -925px;width:60px;height:60px}.hair_mustache_1_pyellow{background-image:url(spritesmith-main-0.png);background-position:-1364px -819px;width:90px;height:90px}.customize-option.hair_mustache_1_pyellow{background-image:url(spritesmith-main-0.png);background-position:-1389px -834px;width:60px;height:60px}.hair_mustache_1_rainbow{background-image:url(spritesmith-main-0.png);background-position:-1364px -728px;width:90px;height:90px}.customize-option.hair_mustache_1_rainbow{background-image:url(spritesmith-main-0.png);background-position:-1389px -743px;width:60px;height:60px}.hair_mustache_1_red{background-image:url(spritesmith-main-0.png);background-position:-1364px -637px;width:90px;height:90px}.customize-option.hair_mustache_1_red{background-image:url(spritesmith-main-0.png);background-position:-1389px -652px;width:60px;height:60px}.hair_mustache_1_snowy{background-image:url(spritesmith-main-0.png);background-position:-1364px -546px;width:90px;height:90px}.customize-option.hair_mustache_1_snowy{background-image:url(spritesmith-main-0.png);background-position:-1389px -561px;width:60px;height:60px}.hair_mustache_1_white{background-image:url(spritesmith-main-0.png);background-position:-1364px -455px;width:90px;height:90px}.customize-option.hair_mustache_1_white{background-image:url(spritesmith-main-0.png);background-position:-1389px -470px;width:60px;height:60px}.hair_mustache_1_winternight{background-image:url(spritesmith-main-0.png);background-position:-1364px -364px;width:90px;height:90px}.customize-option.hair_mustache_1_winternight{background-image:url(spritesmith-main-0.png);background-position:-1389px -379px;width:60px;height:60px}.hair_mustache_1_winterstar{background-image:url(spritesmith-main-0.png);background-position:-1364px -273px;width:90px;height:90px}.customize-option.hair_mustache_1_winterstar{background-image:url(spritesmith-main-0.png);background-position:-1389px -288px;width:60px;height:60px}.hair_mustache_1_yellow{background-image:url(spritesmith-main-0.png);background-position:-1364px -182px;width:90px;height:90px}.customize-option.hair_mustache_1_yellow{background-image:url(spritesmith-main-0.png);background-position:-1389px -197px;width:60px;height:60px}.hair_mustache_1_zombie{background-image:url(spritesmith-main-0.png);background-position:-1364px -91px;width:90px;height:90px}.customize-option.hair_mustache_1_zombie{background-image:url(spritesmith-main-0.png);background-position:-1389px -106px;width:60px;height:60px}.hair_mustache_2_TRUred{background-image:url(spritesmith-main-0.png);background-position:-1364px 0;width:90px;height:90px}.customize-option.hair_mustache_2_TRUred{background-image:url(spritesmith-main-0.png);background-position:-1389px -15px;width:60px;height:60px}.hair_mustache_2_aurora{background-image:url(spritesmith-main-0.png);background-position:-1183px -1218px;width:90px;height:90px}.customize-option.hair_mustache_2_aurora{background-image:url(spritesmith-main-0.png);background-position:-1208px -1233px;width:60px;height:60px}.hair_mustache_2_black{background-image:url(spritesmith-main-0.png);background-position:-1092px -1218px;width:90px;height:90px}.customize-option.hair_mustache_2_black{background-image:url(spritesmith-main-0.png);background-position:-1117px -1233px;width:60px;height:60px}.hair_mustache_2_blond{background-image:url(spritesmith-main-0.png);background-position:-1001px -1218px;width:90px;height:90px}.customize-option.hair_mustache_2_blond{background-image:url(spritesmith-main-0.png);background-position:-1026px -1233px;width:60px;height:60px}.hair_mustache_2_blue{background-image:url(spritesmith-main-0.png);background-position:-910px -1218px;width:90px;height:90px}.customize-option.hair_mustache_2_blue{background-image:url(spritesmith-main-0.png);background-position:-935px -1233px;width:60px;height:60px}.hair_mustache_2_brown{background-image:url(spritesmith-main-0.png);background-position:-819px -1218px;width:90px;height:90px}.customize-option.hair_mustache_2_brown{background-image:url(spritesmith-main-0.png);background-position:-844px -1233px;width:60px;height:60px}.hair_mustache_2_candycane{background-image:url(spritesmith-main-0.png);background-position:-728px -1218px;width:90px;height:90px}.customize-option.hair_mustache_2_candycane{background-image:url(spritesmith-main-0.png);background-position:-753px -1233px;width:60px;height:60px}.hair_mustache_2_candycorn{background-image:url(spritesmith-main-0.png);background-position:-637px -1218px;width:90px;height:90px}.customize-option.hair_mustache_2_candycorn{background-image:url(spritesmith-main-0.png);background-position:-662px -1233px;width:60px;height:60px}.hair_mustache_2_festive{background-image:url(spritesmith-main-0.png);background-position:-546px -1218px;width:90px;height:90px}.customize-option.hair_mustache_2_festive{background-image:url(spritesmith-main-0.png);background-position:-571px -1233px;width:60px;height:60px}.hair_mustache_2_frost{background-image:url(spritesmith-main-0.png);background-position:-455px -1218px;width:90px;height:90px}.customize-option.hair_mustache_2_frost{background-image:url(spritesmith-main-0.png);background-position:-480px -1233px;width:60px;height:60px}.hair_mustache_2_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-364px -1218px;width:90px;height:90px}.customize-option.hair_mustache_2_ghostwhite{background-image:url(spritesmith-main-0.png);background-position:-389px -1233px;width:60px;height:60px}.hair_mustache_2_green{background-image:url(spritesmith-main-0.png);background-position:-273px -1218px;width:90px;height:90px}.customize-option.hair_mustache_2_green{background-image:url(spritesmith-main-0.png);background-position:-298px -1233px;width:60px;height:60px}.hair_mustache_2_halloween{background-image:url(spritesmith-main-0.png);background-position:-182px -1218px;width:90px;height:90px}.customize-option.hair_mustache_2_halloween{background-image:url(spritesmith-main-0.png);background-position:-207px -1233px;width:60px;height:60px}.hair_mustache_2_holly{background-image:url(spritesmith-main-0.png);background-position:-91px -1218px;width:90px;height:90px}.customize-option.hair_mustache_2_holly{background-image:url(spritesmith-main-0.png);background-position:-116px -1233px;width:60px;height:60px}.hair_mustache_2_hollygreen{background-image:url(spritesmith-main-0.png);background-position:0 -1218px;width:90px;height:90px}.customize-option.hair_mustache_2_hollygreen{background-image:url(spritesmith-main-0.png);background-position:-25px -1233px;width:60px;height:60px}.hair_mustache_2_midnight{background-image:url(spritesmith-main-0.png);background-position:-1273px -1092px;width:90px;height:90px}.customize-option.hair_mustache_2_midnight{background-image:url(spritesmith-main-0.png);background-position:-1298px -1107px;width:60px;height:60px}.hair_mustache_2_pblue{background-image:url(spritesmith-main-0.png);background-position:-1273px -1001px;width:90px;height:90px}.customize-option.hair_mustache_2_pblue{background-image:url(spritesmith-main-0.png);background-position:-1298px -1016px;width:60px;height:60px}.hair_mustache_2_peppermint{background-image:url(spritesmith-main-0.png);background-position:-1273px -910px;width:90px;height:90px}.customize-option.hair_mustache_2_peppermint{background-image:url(spritesmith-main-0.png);background-position:-1298px -925px;width:60px;height:60px}.hair_mustache_2_pgreen{background-image:url(spritesmith-main-0.png);background-position:-1273px -819px;width:90px;height:90px}.customize-option.hair_mustache_2_pgreen{background-image:url(spritesmith-main-0.png);background-position:-1298px -834px;width:60px;height:60px}.hair_mustache_2_porange{background-image:url(spritesmith-main-0.png);background-position:-1273px -728px;width:90px;height:90px}.customize-option.hair_mustache_2_porange{background-image:url(spritesmith-main-0.png);background-position:-1298px -743px;width:60px;height:60px}.hair_mustache_2_ppink{background-image:url(spritesmith-main-0.png);background-position:-1273px -637px;width:90px;height:90px}.customize-option.hair_mustache_2_ppink{background-image:url(spritesmith-main-0.png);background-position:-1298px -652px;width:60px;height:60px}.hair_mustache_2_ppurple{background-image:url(spritesmith-main-0.png);background-position:-1273px -546px;width:90px;height:90px}.customize-option.hair_mustache_2_ppurple{background-image:url(spritesmith-main-0.png);background-position:-1298px -561px;width:60px;height:60px}.hair_mustache_2_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-1273px -455px;width:90px;height:90px}.customize-option.hair_mustache_2_pumpkin{background-image:url(spritesmith-main-0.png);background-position:-1298px -470px;width:60px;height:60px}.hair_mustache_2_purple{background-image:url(spritesmith-main-0.png);background-position:-1273px -364px;width:90px;height:90px}.customize-option.hair_mustache_2_purple{background-image:url(spritesmith-main-0.png);background-position:-1298px -379px;width:60px;height:60px}.hair_mustache_2_pyellow{background-image:url(spritesmith-main-0.png);background-position:-1273px -273px;width:90px;height:90px}.customize-option.hair_mustache_2_pyellow{background-image:url(spritesmith-main-0.png);background-position:-1298px -288px;width:60px;height:60px}.hair_mustache_2_rainbow{background-image:url(spritesmith-main-0.png);background-position:-1273px -182px;width:90px;height:90px}.customize-option.hair_mustache_2_rainbow{background-image:url(spritesmith-main-0.png);background-position:-1298px -197px;width:60px;height:60px}.hair_mustache_2_red{background-image:url(spritesmith-main-0.png);background-position:-1273px -91px;width:90px;height:90px}.customize-option.hair_mustache_2_red{background-image:url(spritesmith-main-0.png);background-position:-1298px -106px;width:60px;height:60px}.hair_mustache_2_snowy{background-image:url(spritesmith-main-0.png);background-position:-1273px 0;width:90px;height:90px}.customize-option.hair_mustache_2_snowy{background-image:url(spritesmith-main-0.png);background-position:-1298px -15px;width:60px;height:60px}.hair_mustache_2_white{background-image:url(spritesmith-main-0.png);background-position:-1092px -1127px;width:90px;height:90px}.customize-option.hair_mustache_2_white{background-image:url(spritesmith-main-0.png);background-position:-1117px -1142px;width:60px;height:60px}.hair_mustache_2_winternight{background-image:url(spritesmith-main-0.png);background-position:-1001px -1127px;width:90px;height:90px}.customize-option.hair_mustache_2_winternight{background-image:url(spritesmith-main-0.png);background-position:-1026px -1142px;width:60px;height:60px}.hair_mustache_2_winterstar{background-image:url(spritesmith-main-0.png);background-position:-910px -1127px;width:90px;height:90px}.customize-option.hair_mustache_2_winterstar{background-image:url(spritesmith-main-0.png);background-position:-935px -1142px;width:60px;height:60px}.hair_mustache_2_yellow{background-image:url(spritesmith-main-0.png);background-position:-819px -1127px;width:90px;height:90px}.customize-option.hair_mustache_2_yellow{background-image:url(spritesmith-main-0.png);background-position:-844px -1142px;width:60px;height:60px}.hair_mustache_2_zombie{background-image:url(spritesmith-main-0.png);background-position:-728px -1127px;width:90px;height:90px}.customize-option.hair_mustache_2_zombie{background-image:url(spritesmith-main-0.png);background-position:-753px -1142px;width:60px;height:60px}.hair_flower_1{background-image:url(spritesmith-main-0.png);background-position:-637px -1127px;width:90px;height:90px}.customize-option.hair_flower_1{background-image:url(spritesmith-main-0.png);background-position:-662px -1142px;width:60px;height:60px}.hair_flower_2{background-image:url(spritesmith-main-0.png);background-position:-546px -1127px;width:90px;height:90px}.customize-option.hair_flower_2{background-image:url(spritesmith-main-0.png);background-position:-571px -1142px;width:60px;height:60px}.hair_flower_3{background-image:url(spritesmith-main-0.png);background-position:-455px -1127px;width:90px;height:90px}.customize-option.hair_flower_3{background-image:url(spritesmith-main-0.png);background-position:-480px -1142px;width:60px;height:60px}.hair_flower_4{background-image:url(spritesmith-main-0.png);background-position:-364px -1127px;width:90px;height:90px}.customize-option.hair_flower_4{background-image:url(spritesmith-main-0.png);background-position:-389px -1142px;width:60px;height:60px}.hair_flower_5{background-image:url(spritesmith-main-0.png);background-position:-273px -1127px;width:90px;height:90px}.customize-option.hair_flower_5{background-image:url(spritesmith-main-0.png);background-position:-298px -1142px;width:60px;height:60px}.hair_flower_6{background-image:url(spritesmith-main-0.png);background-position:-182px -1127px;width:90px;height:90px}.customize-option.hair_flower_6{background-image:url(spritesmith-main-0.png);background-position:-207px -1142px;width:60px;height:60px}.hair_bangs_1_TRUred{background-image:url(spritesmith-main-0.png);background-position:-91px -1127px;width:90px;height:90px}.customize-option.hair_bangs_1_TRUred{background-image:url(spritesmith-main-0.png);background-position:-116px -1142px;width:60px;height:60px}.hair_bangs_1_aurora{background-image:url(spritesmith-main-0.png);background-position:0 -1127px;width:90px;height:90px}.customize-option.hair_bangs_1_aurora{background-image:url(spritesmith-main-0.png);background-position:-25px -1142px;width:60px;height:60px}.hair_bangs_1_black{background-image:url(spritesmith-main-0.png);background-position:-1092px -1036px;width:90px;height:90px}.customize-option.hair_bangs_1_black{background-image:url(spritesmith-main-0.png);background-position:-1117px -1051px;width:60px;height:60px}.hair_bangs_1_blond{background-image:url(spritesmith-main-0.png);background-position:-1001px -1036px;width:90px;height:90px}.customize-option.hair_bangs_1_blond{background-image:url(spritesmith-main-0.png);background-position:-1026px -1051px;width:60px;height:60px}.hair_bangs_1_blue{background-image:url(spritesmith-main-1.png);background-position:-91px 0;width:90px;height:90px}.customize-option.hair_bangs_1_blue{background-image:url(spritesmith-main-1.png);background-position:-116px -15px;width:60px;height:60px}.hair_bangs_1_brown{background-image:url(spritesmith-main-1.png);background-position:-728px -1092px;width:90px;height:90px}.customize-option.hair_bangs_1_brown{background-image:url(spritesmith-main-1.png);background-position:-753px -1107px;width:60px;height:60px}.hair_bangs_1_candycane{background-image:url(spritesmith-main-1.png);background-position:0 -91px;width:90px;height:90px}.customize-option.hair_bangs_1_candycane{background-image:url(spritesmith-main-1.png);background-position:-25px -106px;width:60px;height:60px}.hair_bangs_1_candycorn{background-image:url(spritesmith-main-1.png);background-position:-91px -91px;width:90px;height:90px}.customize-option.hair_bangs_1_candycorn{background-image:url(spritesmith-main-1.png);background-position:-116px -106px;width:60px;height:60px}.hair_bangs_1_festive{background-image:url(spritesmith-main-1.png);background-position:-182px 0;width:90px;height:90px}.customize-option.hair_bangs_1_festive{background-image:url(spritesmith-main-1.png);background-position:-207px -15px;width:60px;height:60px}.hair_bangs_1_frost{background-image:url(spritesmith-main-1.png);background-position:-182px -91px;width:90px;height:90px}.customize-option.hair_bangs_1_frost{background-image:url(spritesmith-main-1.png);background-position:-207px -106px;width:60px;height:60px}.hair_bangs_1_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:0 -182px;width:90px;height:90px}.customize-option.hair_bangs_1_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-25px -197px;width:60px;height:60px}.hair_bangs_1_green{background-image:url(spritesmith-main-1.png);background-position:-91px -182px;width:90px;height:90px}.customize-option.hair_bangs_1_green{background-image:url(spritesmith-main-1.png);background-position:-116px -197px;width:60px;height:60px}.hair_bangs_1_halloween{background-image:url(spritesmith-main-1.png);background-position:-182px -182px;width:90px;height:90px}.customize-option.hair_bangs_1_halloween{background-image:url(spritesmith-main-1.png);background-position:-207px -197px;width:60px;height:60px}.hair_bangs_1_holly{background-image:url(spritesmith-main-1.png);background-position:-273px 0;width:90px;height:90px}.customize-option.hair_bangs_1_holly{background-image:url(spritesmith-main-1.png);background-position:-298px -15px;width:60px;height:60px}.hair_bangs_1_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-273px -91px;width:90px;height:90px}.customize-option.hair_bangs_1_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-298px -106px;width:60px;height:60px}.hair_bangs_1_midnight{background-image:url(spritesmith-main-1.png);background-position:-273px -182px;width:90px;height:90px}.customize-option.hair_bangs_1_midnight{background-image:url(spritesmith-main-1.png);background-position:-298px -197px;width:60px;height:60px}.hair_bangs_1_pblue{background-image:url(spritesmith-main-1.png);background-position:0 -273px;width:90px;height:90px}.customize-option.hair_bangs_1_pblue{background-image:url(spritesmith-main-1.png);background-position:-25px -288px;width:60px;height:60px}.hair_bangs_1_pblue2{background-image:url(spritesmith-main-1.png);background-position:-91px -273px;width:90px;height:90px}.customize-option.hair_bangs_1_pblue2{background-image:url(spritesmith-main-1.png);background-position:-116px -288px;width:60px;height:60px}.hair_bangs_1_peppermint{background-image:url(spritesmith-main-1.png);background-position:-182px -273px;width:90px;height:90px}.customize-option.hair_bangs_1_peppermint{background-image:url(spritesmith-main-1.png);background-position:-207px -288px;width:60px;height:60px}.hair_bangs_1_pgreen{background-image:url(spritesmith-main-1.png);background-position:-273px -273px;width:90px;height:90px}.customize-option.hair_bangs_1_pgreen{background-image:url(spritesmith-main-1.png);background-position:-298px -288px;width:60px;height:60px}.hair_bangs_1_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-364px 0;width:90px;height:90px}.customize-option.hair_bangs_1_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-389px -15px;width:60px;height:60px}.hair_bangs_1_porange{background-image:url(spritesmith-main-1.png);background-position:-364px -91px;width:90px;height:90px}.customize-option.hair_bangs_1_porange{background-image:url(spritesmith-main-1.png);background-position:-389px -106px;width:60px;height:60px}.hair_bangs_1_porange2{background-image:url(spritesmith-main-1.png);background-position:-364px -182px;width:90px;height:90px}.customize-option.hair_bangs_1_porange2{background-image:url(spritesmith-main-1.png);background-position:-389px -197px;width:60px;height:60px}.hair_bangs_1_ppink{background-image:url(spritesmith-main-1.png);background-position:-364px -273px;width:90px;height:90px}.customize-option.hair_bangs_1_ppink{background-image:url(spritesmith-main-1.png);background-position:-389px -288px;width:60px;height:60px}.hair_bangs_1_ppink2{background-image:url(spritesmith-main-1.png);background-position:0 -364px;width:90px;height:90px}.customize-option.hair_bangs_1_ppink2{background-image:url(spritesmith-main-1.png);background-position:-25px -379px;width:60px;height:60px}.hair_bangs_1_ppurple{background-image:url(spritesmith-main-1.png);background-position:-91px -364px;width:90px;height:90px}.customize-option.hair_bangs_1_ppurple{background-image:url(spritesmith-main-1.png);background-position:-116px -379px;width:60px;height:60px}.hair_bangs_1_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-182px -364px;width:90px;height:90px}.customize-option.hair_bangs_1_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-207px -379px;width:60px;height:60px}.hair_bangs_1_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-273px -364px;width:90px;height:90px}.customize-option.hair_bangs_1_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-298px -379px;width:60px;height:60px}.hair_bangs_1_purple{background-image:url(spritesmith-main-1.png);background-position:-364px -364px;width:90px;height:90px}.customize-option.hair_bangs_1_purple{background-image:url(spritesmith-main-1.png);background-position:-389px -379px;width:60px;height:60px}.hair_bangs_1_pyellow{background-image:url(spritesmith-main-1.png);background-position:-455px 0;width:90px;height:90px}.customize-option.hair_bangs_1_pyellow{background-image:url(spritesmith-main-1.png);background-position:-480px -15px;width:60px;height:60px}.hair_bangs_1_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-455px -91px;width:90px;height:90px}.customize-option.hair_bangs_1_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-480px -106px;width:60px;height:60px}.hair_bangs_1_rainbow{background-image:url(spritesmith-main-1.png);background-position:-455px -182px;width:90px;height:90px}.customize-option.hair_bangs_1_rainbow{background-image:url(spritesmith-main-1.png);background-position:-480px -197px;width:60px;height:60px}.hair_bangs_1_red{background-image:url(spritesmith-main-1.png);background-position:-455px -273px;width:90px;height:90px}.customize-option.hair_bangs_1_red{background-image:url(spritesmith-main-1.png);background-position:-480px -288px;width:60px;height:60px}.hair_bangs_1_snowy{background-image:url(spritesmith-main-1.png);background-position:-455px -364px;width:90px;height:90px}.customize-option.hair_bangs_1_snowy{background-image:url(spritesmith-main-1.png);background-position:-480px -379px;width:60px;height:60px}.hair_bangs_1_white{background-image:url(spritesmith-main-1.png);background-position:0 -455px;width:90px;height:90px}.customize-option.hair_bangs_1_white{background-image:url(spritesmith-main-1.png);background-position:-25px -470px;width:60px;height:60px}.hair_bangs_1_winternight{background-image:url(spritesmith-main-1.png);background-position:-91px -455px;width:90px;height:90px}.customize-option.hair_bangs_1_winternight{background-image:url(spritesmith-main-1.png);background-position:-116px -470px;width:60px;height:60px}.hair_bangs_1_winterstar{background-image:url(spritesmith-main-1.png);background-position:-182px -455px;width:90px;height:90px}.customize-option.hair_bangs_1_winterstar{background-image:url(spritesmith-main-1.png);background-position:-207px -470px;width:60px;height:60px}.hair_bangs_1_yellow{background-image:url(spritesmith-main-1.png);background-position:-273px -455px;width:90px;height:90px}.customize-option.hair_bangs_1_yellow{background-image:url(spritesmith-main-1.png);background-position:-298px -470px;width:60px;height:60px}.hair_bangs_1_zombie{background-image:url(spritesmith-main-1.png);background-position:-364px -455px;width:90px;height:90px}.customize-option.hair_bangs_1_zombie{background-image:url(spritesmith-main-1.png);background-position:-389px -470px;width:60px;height:60px}.hair_bangs_2_TRUred{background-image:url(spritesmith-main-1.png);background-position:-455px -455px;width:90px;height:90px}.customize-option.hair_bangs_2_TRUred{background-image:url(spritesmith-main-1.png);background-position:-480px -470px;width:60px;height:60px}.hair_bangs_2_aurora{background-image:url(spritesmith-main-1.png);background-position:-546px 0;width:90px;height:90px}.customize-option.hair_bangs_2_aurora{background-image:url(spritesmith-main-1.png);background-position:-571px -15px;width:60px;height:60px}.hair_bangs_2_black{background-image:url(spritesmith-main-1.png);background-position:-546px -91px;width:90px;height:90px}.customize-option.hair_bangs_2_black{background-image:url(spritesmith-main-1.png);background-position:-571px -106px;width:60px;height:60px}.hair_bangs_2_blond{background-image:url(spritesmith-main-1.png);background-position:-546px -182px;width:90px;height:90px}.customize-option.hair_bangs_2_blond{background-image:url(spritesmith-main-1.png);background-position:-571px -197px;width:60px;height:60px}.hair_bangs_2_blue{background-image:url(spritesmith-main-1.png);background-position:-546px -273px;width:90px;height:90px}.customize-option.hair_bangs_2_blue{background-image:url(spritesmith-main-1.png);background-position:-571px -288px;width:60px;height:60px}.hair_bangs_2_brown{background-image:url(spritesmith-main-1.png);background-position:-546px -364px;width:90px;height:90px}.customize-option.hair_bangs_2_brown{background-image:url(spritesmith-main-1.png);background-position:-571px -379px;width:60px;height:60px}.hair_bangs_2_candycane{background-image:url(spritesmith-main-1.png);background-position:-546px -455px;width:90px;height:90px}.customize-option.hair_bangs_2_candycane{background-image:url(spritesmith-main-1.png);background-position:-571px -470px;width:60px;height:60px}.hair_bangs_2_candycorn{background-image:url(spritesmith-main-1.png);background-position:0 -546px;width:90px;height:90px}.customize-option.hair_bangs_2_candycorn{background-image:url(spritesmith-main-1.png);background-position:-25px -561px;width:60px;height:60px}.hair_bangs_2_festive{background-image:url(spritesmith-main-1.png);background-position:-91px -546px;width:90px;height:90px}.customize-option.hair_bangs_2_festive{background-image:url(spritesmith-main-1.png);background-position:-116px -561px;width:60px;height:60px}.hair_bangs_2_frost{background-image:url(spritesmith-main-1.png);background-position:-182px -546px;width:90px;height:90px}.customize-option.hair_bangs_2_frost{background-image:url(spritesmith-main-1.png);background-position:-207px -561px;width:60px;height:60px}.hair_bangs_2_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-273px -546px;width:90px;height:90px}.customize-option.hair_bangs_2_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-298px -561px;width:60px;height:60px}.hair_bangs_2_green{background-image:url(spritesmith-main-1.png);background-position:-364px -546px;width:90px;height:90px}.customize-option.hair_bangs_2_green{background-image:url(spritesmith-main-1.png);background-position:-389px -561px;width:60px;height:60px}.hair_bangs_2_halloween{background-image:url(spritesmith-main-1.png);background-position:-455px -546px;width:90px;height:90px}.customize-option.hair_bangs_2_halloween{background-image:url(spritesmith-main-1.png);background-position:-480px -561px;width:60px;height:60px}.hair_bangs_2_holly{background-image:url(spritesmith-main-1.png);background-position:-546px -546px;width:90px;height:90px}.customize-option.hair_bangs_2_holly{background-image:url(spritesmith-main-1.png);background-position:-571px -561px;width:60px;height:60px}.hair_bangs_2_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-637px 0;width:90px;height:90px}.customize-option.hair_bangs_2_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-662px -15px;width:60px;height:60px}.hair_bangs_2_midnight{background-image:url(spritesmith-main-1.png);background-position:-637px -91px;width:90px;height:90px}.customize-option.hair_bangs_2_midnight{background-image:url(spritesmith-main-1.png);background-position:-662px -106px;width:60px;height:60px}.hair_bangs_2_pblue{background-image:url(spritesmith-main-1.png);background-position:-637px -182px;width:90px;height:90px}.customize-option.hair_bangs_2_pblue{background-image:url(spritesmith-main-1.png);background-position:-662px -197px;width:60px;height:60px}.hair_bangs_2_pblue2{background-image:url(spritesmith-main-1.png);background-position:-637px -273px;width:90px;height:90px}.customize-option.hair_bangs_2_pblue2{background-image:url(spritesmith-main-1.png);background-position:-662px -288px;width:60px;height:60px}.hair_bangs_2_peppermint{background-image:url(spritesmith-main-1.png);background-position:-637px -364px;width:90px;height:90px}.customize-option.hair_bangs_2_peppermint{background-image:url(spritesmith-main-1.png);background-position:-662px -379px;width:60px;height:60px}.hair_bangs_2_pgreen{background-image:url(spritesmith-main-1.png);background-position:-637px -455px;width:90px;height:90px}.customize-option.hair_bangs_2_pgreen{background-image:url(spritesmith-main-1.png);background-position:-662px -470px;width:60px;height:60px}.hair_bangs_2_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-637px -546px;width:90px;height:90px}.customize-option.hair_bangs_2_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-662px -561px;width:60px;height:60px}.hair_bangs_2_porange{background-image:url(spritesmith-main-1.png);background-position:0 -637px;width:90px;height:90px}.customize-option.hair_bangs_2_porange{background-image:url(spritesmith-main-1.png);background-position:-25px -652px;width:60px;height:60px}.hair_bangs_2_porange2{background-image:url(spritesmith-main-1.png);background-position:-91px -637px;width:90px;height:90px}.customize-option.hair_bangs_2_porange2{background-image:url(spritesmith-main-1.png);background-position:-116px -652px;width:60px;height:60px}.hair_bangs_2_ppink{background-image:url(spritesmith-main-1.png);background-position:-182px -637px;width:90px;height:90px}.customize-option.hair_bangs_2_ppink{background-image:url(spritesmith-main-1.png);background-position:-207px -652px;width:60px;height:60px}.hair_bangs_2_ppink2{background-image:url(spritesmith-main-1.png);background-position:-273px -637px;width:90px;height:90px}.customize-option.hair_bangs_2_ppink2{background-image:url(spritesmith-main-1.png);background-position:-298px -652px;width:60px;height:60px}.hair_bangs_2_ppurple{background-image:url(spritesmith-main-1.png);background-position:-364px -637px;width:90px;height:90px}.customize-option.hair_bangs_2_ppurple{background-image:url(spritesmith-main-1.png);background-position:-389px -652px;width:60px;height:60px}.hair_bangs_2_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-455px -637px;width:90px;height:90px}.customize-option.hair_bangs_2_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-480px -652px;width:60px;height:60px}.hair_bangs_2_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-546px -637px;width:90px;height:90px}.customize-option.hair_bangs_2_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-571px -652px;width:60px;height:60px}.hair_bangs_2_purple{background-image:url(spritesmith-main-1.png);background-position:-637px -637px;width:90px;height:90px}.customize-option.hair_bangs_2_purple{background-image:url(spritesmith-main-1.png);background-position:-662px -652px;width:60px;height:60px}.hair_bangs_2_pyellow{background-image:url(spritesmith-main-1.png);background-position:-728px 0;width:90px;height:90px}.customize-option.hair_bangs_2_pyellow{background-image:url(spritesmith-main-1.png);background-position:-753px -15px;width:60px;height:60px}.hair_bangs_2_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-728px -91px;width:90px;height:90px}.customize-option.hair_bangs_2_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-753px -106px;width:60px;height:60px}.hair_bangs_2_rainbow{background-image:url(spritesmith-main-1.png);background-position:-728px -182px;width:90px;height:90px}.customize-option.hair_bangs_2_rainbow{background-image:url(spritesmith-main-1.png);background-position:-753px -197px;width:60px;height:60px}.hair_bangs_2_red{background-image:url(spritesmith-main-1.png);background-position:-728px -273px;width:90px;height:90px}.customize-option.hair_bangs_2_red{background-image:url(spritesmith-main-1.png);background-position:-753px -288px;width:60px;height:60px}.hair_bangs_2_snowy{background-image:url(spritesmith-main-1.png);background-position:-728px -364px;width:90px;height:90px}.customize-option.hair_bangs_2_snowy{background-image:url(spritesmith-main-1.png);background-position:-753px -379px;width:60px;height:60px}.hair_bangs_2_white{background-image:url(spritesmith-main-1.png);background-position:-728px -455px;width:90px;height:90px}.customize-option.hair_bangs_2_white{background-image:url(spritesmith-main-1.png);background-position:-753px -470px;width:60px;height:60px}.hair_bangs_2_winternight{background-image:url(spritesmith-main-1.png);background-position:-728px -546px;width:90px;height:90px}.customize-option.hair_bangs_2_winternight{background-image:url(spritesmith-main-1.png);background-position:-753px -561px;width:60px;height:60px}.hair_bangs_2_winterstar{background-image:url(spritesmith-main-1.png);background-position:-728px -637px;width:90px;height:90px}.customize-option.hair_bangs_2_winterstar{background-image:url(spritesmith-main-1.png);background-position:-753px -652px;width:60px;height:60px}.hair_bangs_2_yellow{background-image:url(spritesmith-main-1.png);background-position:0 -728px;width:90px;height:90px}.customize-option.hair_bangs_2_yellow{background-image:url(spritesmith-main-1.png);background-position:-25px -743px;width:60px;height:60px}.hair_bangs_2_zombie{background-image:url(spritesmith-main-1.png);background-position:-91px -728px;width:90px;height:90px}.customize-option.hair_bangs_2_zombie{background-image:url(spritesmith-main-1.png);background-position:-116px -743px;width:60px;height:60px}.hair_bangs_3_TRUred{background-image:url(spritesmith-main-1.png);background-position:-182px -728px;width:90px;height:90px}.customize-option.hair_bangs_3_TRUred{background-image:url(spritesmith-main-1.png);background-position:-207px -743px;width:60px;height:60px}.hair_bangs_3_aurora{background-image:url(spritesmith-main-1.png);background-position:-273px -728px;width:90px;height:90px}.customize-option.hair_bangs_3_aurora{background-image:url(spritesmith-main-1.png);background-position:-298px -743px;width:60px;height:60px}.hair_bangs_3_black{background-image:url(spritesmith-main-1.png);background-position:-364px -728px;width:90px;height:90px}.customize-option.hair_bangs_3_black{background-image:url(spritesmith-main-1.png);background-position:-389px -743px;width:60px;height:60px}.hair_bangs_3_blond{background-image:url(spritesmith-main-1.png);background-position:-455px -728px;width:90px;height:90px}.customize-option.hair_bangs_3_blond{background-image:url(spritesmith-main-1.png);background-position:-480px -743px;width:60px;height:60px}.hair_bangs_3_blue{background-image:url(spritesmith-main-1.png);background-position:-546px -728px;width:90px;height:90px}.customize-option.hair_bangs_3_blue{background-image:url(spritesmith-main-1.png);background-position:-571px -743px;width:60px;height:60px}.hair_bangs_3_brown{background-image:url(spritesmith-main-1.png);background-position:-637px -728px;width:90px;height:90px}.customize-option.hair_bangs_3_brown{background-image:url(spritesmith-main-1.png);background-position:-662px -743px;width:60px;height:60px}.hair_bangs_3_candycane{background-image:url(spritesmith-main-1.png);background-position:-728px -728px;width:90px;height:90px}.customize-option.hair_bangs_3_candycane{background-image:url(spritesmith-main-1.png);background-position:-753px -743px;width:60px;height:60px}.hair_bangs_3_candycorn{background-image:url(spritesmith-main-1.png);background-position:-819px 0;width:90px;height:90px}.customize-option.hair_bangs_3_candycorn{background-image:url(spritesmith-main-1.png);background-position:-844px -15px;width:60px;height:60px}.hair_bangs_3_festive{background-image:url(spritesmith-main-1.png);background-position:-819px -91px;width:90px;height:90px}.customize-option.hair_bangs_3_festive{background-image:url(spritesmith-main-1.png);background-position:-844px -106px;width:60px;height:60px}.hair_bangs_3_frost{background-image:url(spritesmith-main-1.png);background-position:-819px -182px;width:90px;height:90px}.customize-option.hair_bangs_3_frost{background-image:url(spritesmith-main-1.png);background-position:-844px -197px;width:60px;height:60px}.hair_bangs_3_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-819px -273px;width:90px;height:90px}.customize-option.hair_bangs_3_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-844px -288px;width:60px;height:60px}.hair_bangs_3_green{background-image:url(spritesmith-main-1.png);background-position:-819px -364px;width:90px;height:90px}.customize-option.hair_bangs_3_green{background-image:url(spritesmith-main-1.png);background-position:-844px -379px;width:60px;height:60px}.hair_bangs_3_halloween{background-image:url(spritesmith-main-1.png);background-position:-819px -455px;width:90px;height:90px}.customize-option.hair_bangs_3_halloween{background-image:url(spritesmith-main-1.png);background-position:-844px -470px;width:60px;height:60px}.hair_bangs_3_holly{background-image:url(spritesmith-main-1.png);background-position:-819px -546px;width:90px;height:90px}.customize-option.hair_bangs_3_holly{background-image:url(spritesmith-main-1.png);background-position:-844px -561px;width:60px;height:60px}.hair_bangs_3_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-819px -637px;width:90px;height:90px}.customize-option.hair_bangs_3_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-844px -652px;width:60px;height:60px}.hair_bangs_3_midnight{background-image:url(spritesmith-main-1.png);background-position:-819px -728px;width:90px;height:90px}.customize-option.hair_bangs_3_midnight{background-image:url(spritesmith-main-1.png);background-position:-844px -743px;width:60px;height:60px}.hair_bangs_3_pblue{background-image:url(spritesmith-main-1.png);background-position:0 -819px;width:90px;height:90px}.customize-option.hair_bangs_3_pblue{background-image:url(spritesmith-main-1.png);background-position:-25px -834px;width:60px;height:60px}.hair_bangs_3_pblue2{background-image:url(spritesmith-main-1.png);background-position:-91px -819px;width:90px;height:90px}.customize-option.hair_bangs_3_pblue2{background-image:url(spritesmith-main-1.png);background-position:-116px -834px;width:60px;height:60px}.hair_bangs_3_peppermint{background-image:url(spritesmith-main-1.png);background-position:-182px -819px;width:90px;height:90px}.customize-option.hair_bangs_3_peppermint{background-image:url(spritesmith-main-1.png);background-position:-207px -834px;width:60px;height:60px}.hair_bangs_3_pgreen{background-image:url(spritesmith-main-1.png);background-position:-273px -819px;width:90px;height:90px}.customize-option.hair_bangs_3_pgreen{background-image:url(spritesmith-main-1.png);background-position:-298px -834px;width:60px;height:60px}.hair_bangs_3_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-364px -819px;width:90px;height:90px}.customize-option.hair_bangs_3_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-389px -834px;width:60px;height:60px}.hair_bangs_3_porange{background-image:url(spritesmith-main-1.png);background-position:-455px -819px;width:90px;height:90px}.customize-option.hair_bangs_3_porange{background-image:url(spritesmith-main-1.png);background-position:-480px -834px;width:60px;height:60px}.hair_bangs_3_porange2{background-image:url(spritesmith-main-1.png);background-position:-546px -819px;width:90px;height:90px}.customize-option.hair_bangs_3_porange2{background-image:url(spritesmith-main-1.png);background-position:-571px -834px;width:60px;height:60px}.hair_bangs_3_ppink{background-image:url(spritesmith-main-1.png);background-position:-637px -819px;width:90px;height:90px}.customize-option.hair_bangs_3_ppink{background-image:url(spritesmith-main-1.png);background-position:-662px -834px;width:60px;height:60px}.hair_bangs_3_ppink2{background-image:url(spritesmith-main-1.png);background-position:-728px -819px;width:90px;height:90px}.customize-option.hair_bangs_3_ppink2{background-image:url(spritesmith-main-1.png);background-position:-753px -834px;width:60px;height:60px}.hair_bangs_3_ppurple{background-image:url(spritesmith-main-1.png);background-position:-819px -819px;width:90px;height:90px}.customize-option.hair_bangs_3_ppurple{background-image:url(spritesmith-main-1.png);background-position:-844px -834px;width:60px;height:60px}.hair_bangs_3_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-910px 0;width:90px;height:90px}.customize-option.hair_bangs_3_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-935px -15px;width:60px;height:60px}.hair_bangs_3_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-910px -91px;width:90px;height:90px}.customize-option.hair_bangs_3_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-935px -106px;width:60px;height:60px}.hair_bangs_3_purple{background-image:url(spritesmith-main-1.png);background-position:-910px -182px;width:90px;height:90px}.customize-option.hair_bangs_3_purple{background-image:url(spritesmith-main-1.png);background-position:-935px -197px;width:60px;height:60px}.hair_bangs_3_pyellow{background-image:url(spritesmith-main-1.png);background-position:-910px -273px;width:90px;height:90px}.customize-option.hair_bangs_3_pyellow{background-image:url(spritesmith-main-1.png);background-position:-935px -288px;width:60px;height:60px}.hair_bangs_3_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-910px -364px;width:90px;height:90px}.customize-option.hair_bangs_3_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-935px -379px;width:60px;height:60px}.hair_bangs_3_rainbow{background-image:url(spritesmith-main-1.png);background-position:-910px -455px;width:90px;height:90px}.customize-option.hair_bangs_3_rainbow{background-image:url(spritesmith-main-1.png);background-position:-935px -470px;width:60px;height:60px}.hair_bangs_3_red{background-image:url(spritesmith-main-1.png);background-position:-910px -546px;width:90px;height:90px}.customize-option.hair_bangs_3_red{background-image:url(spritesmith-main-1.png);background-position:-935px -561px;width:60px;height:60px}.hair_bangs_3_snowy{background-image:url(spritesmith-main-1.png);background-position:-910px -637px;width:90px;height:90px}.customize-option.hair_bangs_3_snowy{background-image:url(spritesmith-main-1.png);background-position:-935px -652px;width:60px;height:60px}.hair_bangs_3_white{background-image:url(spritesmith-main-1.png);background-position:-910px -728px;width:90px;height:90px}.customize-option.hair_bangs_3_white{background-image:url(spritesmith-main-1.png);background-position:-935px -743px;width:60px;height:60px}.hair_bangs_3_winternight{background-image:url(spritesmith-main-1.png);background-position:-910px -819px;width:90px;height:90px}.customize-option.hair_bangs_3_winternight{background-image:url(spritesmith-main-1.png);background-position:-935px -834px;width:60px;height:60px}.hair_bangs_3_winterstar{background-image:url(spritesmith-main-1.png);background-position:0 -910px;width:90px;height:90px}.customize-option.hair_bangs_3_winterstar{background-image:url(spritesmith-main-1.png);background-position:-25px -925px;width:60px;height:60px}.hair_bangs_3_yellow{background-image:url(spritesmith-main-1.png);background-position:-91px -910px;width:90px;height:90px}.customize-option.hair_bangs_3_yellow{background-image:url(spritesmith-main-1.png);background-position:-116px -925px;width:60px;height:60px}.hair_bangs_3_zombie{background-image:url(spritesmith-main-1.png);background-position:-182px -910px;width:90px;height:90px}.customize-option.hair_bangs_3_zombie{background-image:url(spritesmith-main-1.png);background-position:-207px -925px;width:60px;height:60px}.hair_base_10_TRUred{background-image:url(spritesmith-main-1.png);background-position:-273px -910px;width:90px;height:90px}.customize-option.hair_base_10_TRUred{background-image:url(spritesmith-main-1.png);background-position:-298px -925px;width:60px;height:60px}.hair_base_10_aurora{background-image:url(spritesmith-main-1.png);background-position:-364px -910px;width:90px;height:90px}.customize-option.hair_base_10_aurora{background-image:url(spritesmith-main-1.png);background-position:-389px -925px;width:60px;height:60px}.hair_base_10_black{background-image:url(spritesmith-main-1.png);background-position:-455px -910px;width:90px;height:90px}.customize-option.hair_base_10_black{background-image:url(spritesmith-main-1.png);background-position:-480px -925px;width:60px;height:60px}.hair_base_10_blond{background-image:url(spritesmith-main-1.png);background-position:-546px -910px;width:90px;height:90px}.customize-option.hair_base_10_blond{background-image:url(spritesmith-main-1.png);background-position:-571px -925px;width:60px;height:60px}.hair_base_10_blue{background-image:url(spritesmith-main-1.png);background-position:-637px -910px;width:90px;height:90px}.customize-option.hair_base_10_blue{background-image:url(spritesmith-main-1.png);background-position:-662px -925px;width:60px;height:60px}.hair_base_10_brown{background-image:url(spritesmith-main-1.png);background-position:-728px -910px;width:90px;height:90px}.customize-option.hair_base_10_brown{background-image:url(spritesmith-main-1.png);background-position:-753px -925px;width:60px;height:60px}.hair_base_10_candycane{background-image:url(spritesmith-main-1.png);background-position:-819px -910px;width:90px;height:90px}.customize-option.hair_base_10_candycane{background-image:url(spritesmith-main-1.png);background-position:-844px -925px;width:60px;height:60px}.hair_base_10_candycorn{background-image:url(spritesmith-main-1.png);background-position:-910px -910px;width:90px;height:90px}.customize-option.hair_base_10_candycorn{background-image:url(spritesmith-main-1.png);background-position:-935px -925px;width:60px;height:60px}.hair_base_10_festive{background-image:url(spritesmith-main-1.png);background-position:-1001px 0;width:90px;height:90px}.customize-option.hair_base_10_festive{background-image:url(spritesmith-main-1.png);background-position:-1026px -15px;width:60px;height:60px}.hair_base_10_frost{background-image:url(spritesmith-main-1.png);background-position:-1001px -91px;width:90px;height:90px}.customize-option.hair_base_10_frost{background-image:url(spritesmith-main-1.png);background-position:-1026px -106px;width:60px;height:60px}.hair_base_10_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-1001px -182px;width:90px;height:90px}.customize-option.hair_base_10_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-1026px -197px;width:60px;height:60px}.hair_base_10_green{background-image:url(spritesmith-main-1.png);background-position:-1001px -273px;width:90px;height:90px}.customize-option.hair_base_10_green{background-image:url(spritesmith-main-1.png);background-position:-1026px -288px;width:60px;height:60px}.hair_base_10_halloween{background-image:url(spritesmith-main-1.png);background-position:-1001px -364px;width:90px;height:90px}.customize-option.hair_base_10_halloween{background-image:url(spritesmith-main-1.png);background-position:-1026px -379px;width:60px;height:60px}.hair_base_10_holly{background-image:url(spritesmith-main-1.png);background-position:-1001px -455px;width:90px;height:90px}.customize-option.hair_base_10_holly{background-image:url(spritesmith-main-1.png);background-position:-1026px -470px;width:60px;height:60px}.hair_base_10_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-1001px -546px;width:90px;height:90px}.customize-option.hair_base_10_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-1026px -561px;width:60px;height:60px}.hair_base_10_midnight{background-image:url(spritesmith-main-1.png);background-position:-1001px -637px;width:90px;height:90px}.customize-option.hair_base_10_midnight{background-image:url(spritesmith-main-1.png);background-position:-1026px -652px;width:60px;height:60px}.hair_base_10_pblue{background-image:url(spritesmith-main-1.png);background-position:-1001px -728px;width:90px;height:90px}.customize-option.hair_base_10_pblue{background-image:url(spritesmith-main-1.png);background-position:-1026px -743px;width:60px;height:60px}.hair_base_10_pblue2{background-image:url(spritesmith-main-1.png);background-position:-1001px -819px;width:90px;height:90px}.customize-option.hair_base_10_pblue2{background-image:url(spritesmith-main-1.png);background-position:-1026px -834px;width:60px;height:60px}.hair_base_10_peppermint{background-image:url(spritesmith-main-1.png);background-position:-1001px -910px;width:90px;height:90px}.customize-option.hair_base_10_peppermint{background-image:url(spritesmith-main-1.png);background-position:-1026px -925px;width:60px;height:60px}.hair_base_10_pgreen{background-image:url(spritesmith-main-1.png);background-position:0 -1001px;width:90px;height:90px}.customize-option.hair_base_10_pgreen{background-image:url(spritesmith-main-1.png);background-position:-25px -1016px;width:60px;height:60px}.hair_base_10_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-91px -1001px;width:90px;height:90px}.customize-option.hair_base_10_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-116px -1016px;width:60px;height:60px}.hair_base_10_porange{background-image:url(spritesmith-main-1.png);background-position:-182px -1001px;width:90px;height:90px}.customize-option.hair_base_10_porange{background-image:url(spritesmith-main-1.png);background-position:-207px -1016px;width:60px;height:60px}.hair_base_10_porange2{background-image:url(spritesmith-main-1.png);background-position:-273px -1001px;width:90px;height:90px}.customize-option.hair_base_10_porange2{background-image:url(spritesmith-main-1.png);background-position:-298px -1016px;width:60px;height:60px}.hair_base_10_ppink{background-image:url(spritesmith-main-1.png);background-position:-364px -1001px;width:90px;height:90px}.customize-option.hair_base_10_ppink{background-image:url(spritesmith-main-1.png);background-position:-389px -1016px;width:60px;height:60px}.hair_base_10_ppink2{background-image:url(spritesmith-main-1.png);background-position:-455px -1001px;width:90px;height:90px}.customize-option.hair_base_10_ppink2{background-image:url(spritesmith-main-1.png);background-position:-480px -1016px;width:60px;height:60px}.hair_base_10_ppurple{background-image:url(spritesmith-main-1.png);background-position:-546px -1001px;width:90px;height:90px}.customize-option.hair_base_10_ppurple{background-image:url(spritesmith-main-1.png);background-position:-571px -1016px;width:60px;height:60px}.hair_base_10_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-637px -1001px;width:90px;height:90px}.customize-option.hair_base_10_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-662px -1016px;width:60px;height:60px}.hair_base_10_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-728px -1001px;width:90px;height:90px}.customize-option.hair_base_10_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-753px -1016px;width:60px;height:60px}.hair_base_10_purple{background-image:url(spritesmith-main-1.png);background-position:-819px -1001px;width:90px;height:90px}.customize-option.hair_base_10_purple{background-image:url(spritesmith-main-1.png);background-position:-844px -1016px;width:60px;height:60px}.hair_base_10_pyellow{background-image:url(spritesmith-main-1.png);background-position:-910px -1001px;width:90px;height:90px}.customize-option.hair_base_10_pyellow{background-image:url(spritesmith-main-1.png);background-position:-935px -1016px;width:60px;height:60px}.hair_base_10_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-1001px -1001px;width:90px;height:90px}.customize-option.hair_base_10_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-1026px -1016px;width:60px;height:60px}.hair_base_10_rainbow{background-image:url(spritesmith-main-1.png);background-position:-1092px 0;width:90px;height:90px}.customize-option.hair_base_10_rainbow{background-image:url(spritesmith-main-1.png);background-position:-1117px -15px;width:60px;height:60px}.hair_base_10_red{background-image:url(spritesmith-main-1.png);background-position:-1092px -91px;width:90px;height:90px}.customize-option.hair_base_10_red{background-image:url(spritesmith-main-1.png);background-position:-1117px -106px;width:60px;height:60px}.hair_base_10_snowy{background-image:url(spritesmith-main-1.png);background-position:-1092px -182px;width:90px;height:90px}.customize-option.hair_base_10_snowy{background-image:url(spritesmith-main-1.png);background-position:-1117px -197px;width:60px;height:60px}.hair_base_10_white{background-image:url(spritesmith-main-1.png);background-position:-1092px -273px;width:90px;height:90px}.customize-option.hair_base_10_white{background-image:url(spritesmith-main-1.png);background-position:-1117px -288px;width:60px;height:60px}.hair_base_10_winternight{background-image:url(spritesmith-main-1.png);background-position:-1092px -364px;width:90px;height:90px}.customize-option.hair_base_10_winternight{background-image:url(spritesmith-main-1.png);background-position:-1117px -379px;width:60px;height:60px}.hair_base_10_winterstar{background-image:url(spritesmith-main-1.png);background-position:-1092px -455px;width:90px;height:90px}.customize-option.hair_base_10_winterstar{background-image:url(spritesmith-main-1.png);background-position:-1117px -470px;width:60px;height:60px}.hair_base_10_yellow{background-image:url(spritesmith-main-1.png);background-position:-1092px -546px;width:90px;height:90px}.customize-option.hair_base_10_yellow{background-image:url(spritesmith-main-1.png);background-position:-1117px -561px;width:60px;height:60px}.hair_base_10_zombie{background-image:url(spritesmith-main-1.png);background-position:-1092px -637px;width:90px;height:90px}.customize-option.hair_base_10_zombie{background-image:url(spritesmith-main-1.png);background-position:-1117px -652px;width:60px;height:60px}.hair_base_11_TRUred{background-image:url(spritesmith-main-1.png);background-position:-1092px -728px;width:90px;height:90px}.customize-option.hair_base_11_TRUred{background-image:url(spritesmith-main-1.png);background-position:-1117px -743px;width:60px;height:60px}.hair_base_11_aurora{background-image:url(spritesmith-main-1.png);background-position:-1092px -819px;width:90px;height:90px}.customize-option.hair_base_11_aurora{background-image:url(spritesmith-main-1.png);background-position:-1117px -834px;width:60px;height:60px}.hair_base_11_black{background-image:url(spritesmith-main-1.png);background-position:-1092px -910px;width:90px;height:90px}.customize-option.hair_base_11_black{background-image:url(spritesmith-main-1.png);background-position:-1117px -925px;width:60px;height:60px}.hair_base_11_blond{background-image:url(spritesmith-main-1.png);background-position:-1092px -1001px;width:90px;height:90px}.customize-option.hair_base_11_blond{background-image:url(spritesmith-main-1.png);background-position:-1117px -1016px;width:60px;height:60px}.hair_base_11_blue{background-image:url(spritesmith-main-1.png);background-position:0 -1092px;width:90px;height:90px}.customize-option.hair_base_11_blue{background-image:url(spritesmith-main-1.png);background-position:-25px -1107px;width:60px;height:60px}.hair_base_11_brown{background-image:url(spritesmith-main-1.png);background-position:-91px -1092px;width:90px;height:90px}.customize-option.hair_base_11_brown{background-image:url(spritesmith-main-1.png);background-position:-116px -1107px;width:60px;height:60px}.hair_base_11_candycane{background-image:url(spritesmith-main-1.png);background-position:-182px -1092px;width:90px;height:90px}.customize-option.hair_base_11_candycane{background-image:url(spritesmith-main-1.png);background-position:-207px -1107px;width:60px;height:60px}.hair_base_11_candycorn{background-image:url(spritesmith-main-1.png);background-position:-273px -1092px;width:90px;height:90px}.customize-option.hair_base_11_candycorn{background-image:url(spritesmith-main-1.png);background-position:-298px -1107px;width:60px;height:60px}.hair_base_11_festive{background-image:url(spritesmith-main-1.png);background-position:-364px -1092px;width:90px;height:90px}.customize-option.hair_base_11_festive{background-image:url(spritesmith-main-1.png);background-position:-389px -1107px;width:60px;height:60px}.hair_base_11_frost{background-image:url(spritesmith-main-1.png);background-position:-455px -1092px;width:90px;height:90px}.customize-option.hair_base_11_frost{background-image:url(spritesmith-main-1.png);background-position:-480px -1107px;width:60px;height:60px}.hair_base_11_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-546px -1092px;width:90px;height:90px}.customize-option.hair_base_11_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-571px -1107px;width:60px;height:60px}.hair_base_11_green{background-image:url(spritesmith-main-1.png);background-position:-637px -1092px;width:90px;height:90px}.customize-option.hair_base_11_green{background-image:url(spritesmith-main-1.png);background-position:-662px -1107px;width:60px;height:60px}.hair_base_11_halloween{background-image:url(spritesmith-main-1.png);background-position:0 0;width:90px;height:90px}.customize-option.hair_base_11_halloween{background-image:url(spritesmith-main-1.png);background-position:-25px -15px;width:60px;height:60px}.hair_base_11_holly{background-image:url(spritesmith-main-1.png);background-position:-819px -1092px;width:90px;height:90px}.customize-option.hair_base_11_holly{background-image:url(spritesmith-main-1.png);background-position:-844px -1107px;width:60px;height:60px}.hair_base_11_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-910px -1092px;width:90px;height:90px}.customize-option.hair_base_11_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-935px -1107px;width:60px;height:60px}.hair_base_11_midnight{background-image:url(spritesmith-main-1.png);background-position:-1001px -1092px;width:90px;height:90px}.customize-option.hair_base_11_midnight{background-image:url(spritesmith-main-1.png);background-position:-1026px -1107px;width:60px;height:60px}.hair_base_11_pblue{background-image:url(spritesmith-main-1.png);background-position:-1092px -1092px;width:90px;height:90px}.customize-option.hair_base_11_pblue{background-image:url(spritesmith-main-1.png);background-position:-1117px -1107px;width:60px;height:60px}.hair_base_11_pblue2{background-image:url(spritesmith-main-1.png);background-position:-1183px 0;width:90px;height:90px}.customize-option.hair_base_11_pblue2{background-image:url(spritesmith-main-1.png);background-position:-1208px -15px;width:60px;height:60px}.hair_base_11_peppermint{background-image:url(spritesmith-main-1.png);background-position:-1183px -91px;width:90px;height:90px}.customize-option.hair_base_11_peppermint{background-image:url(spritesmith-main-1.png);background-position:-1208px -106px;width:60px;height:60px}.hair_base_11_pgreen{background-image:url(spritesmith-main-1.png);background-position:-1183px -182px;width:90px;height:90px}.customize-option.hair_base_11_pgreen{background-image:url(spritesmith-main-1.png);background-position:-1208px -197px;width:60px;height:60px}.hair_base_11_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-1183px -273px;width:90px;height:90px}.customize-option.hair_base_11_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-1208px -288px;width:60px;height:60px}.hair_base_11_porange{background-image:url(spritesmith-main-1.png);background-position:-1183px -364px;width:90px;height:90px}.customize-option.hair_base_11_porange{background-image:url(spritesmith-main-1.png);background-position:-1208px -379px;width:60px;height:60px}.hair_base_11_porange2{background-image:url(spritesmith-main-1.png);background-position:-1183px -455px;width:90px;height:90px}.customize-option.hair_base_11_porange2{background-image:url(spritesmith-main-1.png);background-position:-1208px -470px;width:60px;height:60px}.hair_base_11_ppink{background-image:url(spritesmith-main-1.png);background-position:-1183px -546px;width:90px;height:90px}.customize-option.hair_base_11_ppink{background-image:url(spritesmith-main-1.png);background-position:-1208px -561px;width:60px;height:60px}.hair_base_11_ppink2{background-image:url(spritesmith-main-1.png);background-position:-1183px -637px;width:90px;height:90px}.customize-option.hair_base_11_ppink2{background-image:url(spritesmith-main-1.png);background-position:-1208px -652px;width:60px;height:60px}.hair_base_11_ppurple{background-image:url(spritesmith-main-1.png);background-position:-1183px -728px;width:90px;height:90px}.customize-option.hair_base_11_ppurple{background-image:url(spritesmith-main-1.png);background-position:-1208px -743px;width:60px;height:60px}.hair_base_11_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-1183px -819px;width:90px;height:90px}.customize-option.hair_base_11_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-1208px -834px;width:60px;height:60px}.hair_base_11_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-1183px -910px;width:90px;height:90px}.customize-option.hair_base_11_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-1208px -925px;width:60px;height:60px}.hair_base_11_purple{background-image:url(spritesmith-main-1.png);background-position:-1183px -1001px;width:90px;height:90px}.customize-option.hair_base_11_purple{background-image:url(spritesmith-main-1.png);background-position:-1208px -1016px;width:60px;height:60px}.hair_base_11_pyellow{background-image:url(spritesmith-main-1.png);background-position:-1183px -1092px;width:90px;height:90px}.customize-option.hair_base_11_pyellow{background-image:url(spritesmith-main-1.png);background-position:-1208px -1107px;width:60px;height:60px}.hair_base_11_pyellow2{background-image:url(spritesmith-main-1.png);background-position:0 -1183px;width:90px;height:90px}.customize-option.hair_base_11_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-25px -1198px;width:60px;height:60px}.hair_base_11_rainbow{background-image:url(spritesmith-main-1.png);background-position:-91px -1183px;width:90px;height:90px}.customize-option.hair_base_11_rainbow{background-image:url(spritesmith-main-1.png);background-position:-116px -1198px;width:60px;height:60px}.hair_base_11_red{background-image:url(spritesmith-main-1.png);background-position:-182px -1183px;width:90px;height:90px}.customize-option.hair_base_11_red{background-image:url(spritesmith-main-1.png);background-position:-207px -1198px;width:60px;height:60px}.hair_base_11_snowy{background-image:url(spritesmith-main-1.png);background-position:-273px -1183px;width:90px;height:90px}.customize-option.hair_base_11_snowy{background-image:url(spritesmith-main-1.png);background-position:-298px -1198px;width:60px;height:60px}.hair_base_11_white{background-image:url(spritesmith-main-1.png);background-position:-364px -1183px;width:90px;height:90px}.customize-option.hair_base_11_white{background-image:url(spritesmith-main-1.png);background-position:-389px -1198px;width:60px;height:60px}.hair_base_11_winternight{background-image:url(spritesmith-main-1.png);background-position:-455px -1183px;width:90px;height:90px}.customize-option.hair_base_11_winternight{background-image:url(spritesmith-main-1.png);background-position:-480px -1198px;width:60px;height:60px}.hair_base_11_winterstar{background-image:url(spritesmith-main-1.png);background-position:-546px -1183px;width:90px;height:90px}.customize-option.hair_base_11_winterstar{background-image:url(spritesmith-main-1.png);background-position:-571px -1198px;width:60px;height:60px}.hair_base_11_yellow{background-image:url(spritesmith-main-1.png);background-position:-637px -1183px;width:90px;height:90px}.customize-option.hair_base_11_yellow{background-image:url(spritesmith-main-1.png);background-position:-662px -1198px;width:60px;height:60px}.hair_base_11_zombie{background-image:url(spritesmith-main-1.png);background-position:-728px -1183px;width:90px;height:90px}.customize-option.hair_base_11_zombie{background-image:url(spritesmith-main-1.png);background-position:-753px -1198px;width:60px;height:60px}.hair_base_12_TRUred{background-image:url(spritesmith-main-1.png);background-position:-819px -1183px;width:90px;height:90px}.customize-option.hair_base_12_TRUred{background-image:url(spritesmith-main-1.png);background-position:-844px -1198px;width:60px;height:60px}.hair_base_12_aurora{background-image:url(spritesmith-main-1.png);background-position:-910px -1183px;width:90px;height:90px}.customize-option.hair_base_12_aurora{background-image:url(spritesmith-main-1.png);background-position:-935px -1198px;width:60px;height:60px}.hair_base_12_black{background-image:url(spritesmith-main-1.png);background-position:-1001px -1183px;width:90px;height:90px}.customize-option.hair_base_12_black{background-image:url(spritesmith-main-1.png);background-position:-1026px -1198px;width:60px;height:60px}.hair_base_12_blond{background-image:url(spritesmith-main-1.png);background-position:-1092px -1183px;width:90px;height:90px}.customize-option.hair_base_12_blond{background-image:url(spritesmith-main-1.png);background-position:-1117px -1198px;width:60px;height:60px}.hair_base_12_blue{background-image:url(spritesmith-main-1.png);background-position:-1183px -1183px;width:90px;height:90px}.customize-option.hair_base_12_blue{background-image:url(spritesmith-main-1.png);background-position:-1208px -1198px;width:60px;height:60px}.hair_base_12_brown{background-image:url(spritesmith-main-1.png);background-position:-1274px 0;width:90px;height:90px}.customize-option.hair_base_12_brown{background-image:url(spritesmith-main-1.png);background-position:-1299px -15px;width:60px;height:60px}.hair_base_12_candycane{background-image:url(spritesmith-main-1.png);background-position:-1274px -91px;width:90px;height:90px}.customize-option.hair_base_12_candycane{background-image:url(spritesmith-main-1.png);background-position:-1299px -106px;width:60px;height:60px}.hair_base_12_candycorn{background-image:url(spritesmith-main-1.png);background-position:-1274px -182px;width:90px;height:90px}.customize-option.hair_base_12_candycorn{background-image:url(spritesmith-main-1.png);background-position:-1299px -197px;width:60px;height:60px}.hair_base_12_festive{background-image:url(spritesmith-main-1.png);background-position:-1274px -273px;width:90px;height:90px}.customize-option.hair_base_12_festive{background-image:url(spritesmith-main-1.png);background-position:-1299px -288px;width:60px;height:60px}.hair_base_12_frost{background-image:url(spritesmith-main-1.png);background-position:-1274px -364px;width:90px;height:90px}.customize-option.hair_base_12_frost{background-image:url(spritesmith-main-1.png);background-position:-1299px -379px;width:60px;height:60px}.hair_base_12_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-1274px -455px;width:90px;height:90px}.customize-option.hair_base_12_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-1299px -470px;width:60px;height:60px}.hair_base_12_green{background-image:url(spritesmith-main-1.png);background-position:-1274px -546px;width:90px;height:90px}.customize-option.hair_base_12_green{background-image:url(spritesmith-main-1.png);background-position:-1299px -561px;width:60px;height:60px}.hair_base_12_halloween{background-image:url(spritesmith-main-1.png);background-position:-1274px -637px;width:90px;height:90px}.customize-option.hair_base_12_halloween{background-image:url(spritesmith-main-1.png);background-position:-1299px -652px;width:60px;height:60px}.hair_base_12_holly{background-image:url(spritesmith-main-1.png);background-position:-1274px -728px;width:90px;height:90px}.customize-option.hair_base_12_holly{background-image:url(spritesmith-main-1.png);background-position:-1299px -743px;width:60px;height:60px}.hair_base_12_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-1274px -819px;width:90px;height:90px}.customize-option.hair_base_12_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-1299px -834px;width:60px;height:60px}.hair_base_12_midnight{background-image:url(spritesmith-main-1.png);background-position:-1274px -910px;width:90px;height:90px}.customize-option.hair_base_12_midnight{background-image:url(spritesmith-main-1.png);background-position:-1299px -925px;width:60px;height:60px}.hair_base_12_pblue{background-image:url(spritesmith-main-1.png);background-position:-1274px -1001px;width:90px;height:90px}.customize-option.hair_base_12_pblue{background-image:url(spritesmith-main-1.png);background-position:-1299px -1016px;width:60px;height:60px}.hair_base_12_pblue2{background-image:url(spritesmith-main-1.png);background-position:-1274px -1092px;width:90px;height:90px}.customize-option.hair_base_12_pblue2{background-image:url(spritesmith-main-1.png);background-position:-1299px -1107px;width:60px;height:60px}.hair_base_12_peppermint{background-image:url(spritesmith-main-1.png);background-position:-1274px -1183px;width:90px;height:90px}.customize-option.hair_base_12_peppermint{background-image:url(spritesmith-main-1.png);background-position:-1299px -1198px;width:60px;height:60px}.hair_base_12_pgreen{background-image:url(spritesmith-main-1.png);background-position:0 -1274px;width:90px;height:90px}.customize-option.hair_base_12_pgreen{background-image:url(spritesmith-main-1.png);background-position:-25px -1289px;width:60px;height:60px}.hair_base_12_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-91px -1274px;width:90px;height:90px}.customize-option.hair_base_12_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-116px -1289px;width:60px;height:60px}.hair_base_12_porange{background-image:url(spritesmith-main-1.png);background-position:-182px -1274px;width:90px;height:90px}.customize-option.hair_base_12_porange{background-image:url(spritesmith-main-1.png);background-position:-207px -1289px;width:60px;height:60px}.hair_base_12_porange2{background-image:url(spritesmith-main-1.png);background-position:-273px -1274px;width:90px;height:90px}.customize-option.hair_base_12_porange2{background-image:url(spritesmith-main-1.png);background-position:-298px -1289px;width:60px;height:60px}.hair_base_12_ppink{background-image:url(spritesmith-main-1.png);background-position:-364px -1274px;width:90px;height:90px}.customize-option.hair_base_12_ppink{background-image:url(spritesmith-main-1.png);background-position:-389px -1289px;width:60px;height:60px}.hair_base_12_ppink2{background-image:url(spritesmith-main-1.png);background-position:-455px -1274px;width:90px;height:90px}.customize-option.hair_base_12_ppink2{background-image:url(spritesmith-main-1.png);background-position:-480px -1289px;width:60px;height:60px}.hair_base_12_ppurple{background-image:url(spritesmith-main-1.png);background-position:-546px -1274px;width:90px;height:90px}.customize-option.hair_base_12_ppurple{background-image:url(spritesmith-main-1.png);background-position:-571px -1289px;width:60px;height:60px}.hair_base_12_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-637px -1274px;width:90px;height:90px}.customize-option.hair_base_12_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-662px -1289px;width:60px;height:60px}.hair_base_12_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-728px -1274px;width:90px;height:90px}.customize-option.hair_base_12_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-753px -1289px;width:60px;height:60px}.hair_base_12_purple{background-image:url(spritesmith-main-1.png);background-position:-819px -1274px;width:90px;height:90px}.customize-option.hair_base_12_purple{background-image:url(spritesmith-main-1.png);background-position:-844px -1289px;width:60px;height:60px}.hair_base_12_pyellow{background-image:url(spritesmith-main-1.png);background-position:-910px -1274px;width:90px;height:90px}.customize-option.hair_base_12_pyellow{background-image:url(spritesmith-main-1.png);background-position:-935px -1289px;width:60px;height:60px}.hair_base_12_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-1001px -1274px;width:90px;height:90px}.customize-option.hair_base_12_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-1026px -1289px;width:60px;height:60px}.hair_base_12_rainbow{background-image:url(spritesmith-main-1.png);background-position:-1092px -1274px;width:90px;height:90px}.customize-option.hair_base_12_rainbow{background-image:url(spritesmith-main-1.png);background-position:-1117px -1289px;width:60px;height:60px}.hair_base_12_red{background-image:url(spritesmith-main-1.png);background-position:-1183px -1274px;width:90px;height:90px}.customize-option.hair_base_12_red{background-image:url(spritesmith-main-1.png);background-position:-1208px -1289px;width:60px;height:60px}.hair_base_12_snowy{background-image:url(spritesmith-main-1.png);background-position:-1274px -1274px;width:90px;height:90px}.customize-option.hair_base_12_snowy{background-image:url(spritesmith-main-1.png);background-position:-1299px -1289px;width:60px;height:60px}.hair_base_12_white{background-image:url(spritesmith-main-1.png);background-position:-1365px 0;width:90px;height:90px}.customize-option.hair_base_12_white{background-image:url(spritesmith-main-1.png);background-position:-1390px -15px;width:60px;height:60px}.hair_base_12_winternight{background-image:url(spritesmith-main-1.png);background-position:-1365px -91px;width:90px;height:90px}.customize-option.hair_base_12_winternight{background-image:url(spritesmith-main-1.png);background-position:-1390px -106px;width:60px;height:60px}.hair_base_12_winterstar{background-image:url(spritesmith-main-1.png);background-position:-1365px -182px;width:90px;height:90px}.customize-option.hair_base_12_winterstar{background-image:url(spritesmith-main-1.png);background-position:-1390px -197px;width:60px;height:60px}.hair_base_12_yellow{background-image:url(spritesmith-main-1.png);background-position:-1365px -273px;width:90px;height:90px}.customize-option.hair_base_12_yellow{background-image:url(spritesmith-main-1.png);background-position:-1390px -288px;width:60px;height:60px}.hair_base_12_zombie{background-image:url(spritesmith-main-1.png);background-position:-1365px -364px;width:90px;height:90px}.customize-option.hair_base_12_zombie{background-image:url(spritesmith-main-1.png);background-position:-1390px -379px;width:60px;height:60px}.hair_base_13_TRUred{background-image:url(spritesmith-main-1.png);background-position:-1365px -455px;width:90px;height:90px}.customize-option.hair_base_13_TRUred{background-image:url(spritesmith-main-1.png);background-position:-1390px -470px;width:60px;height:60px}.hair_base_13_aurora{background-image:url(spritesmith-main-1.png);background-position:-1365px -546px;width:90px;height:90px}.customize-option.hair_base_13_aurora{background-image:url(spritesmith-main-1.png);background-position:-1390px -561px;width:60px;height:60px}.hair_base_13_black{background-image:url(spritesmith-main-1.png);background-position:-1365px -637px;width:90px;height:90px}.customize-option.hair_base_13_black{background-image:url(spritesmith-main-1.png);background-position:-1390px -652px;width:60px;height:60px}.hair_base_13_blond{background-image:url(spritesmith-main-1.png);background-position:-1365px -728px;width:90px;height:90px}.customize-option.hair_base_13_blond{background-image:url(spritesmith-main-1.png);background-position:-1390px -743px;width:60px;height:60px}.hair_base_13_blue{background-image:url(spritesmith-main-1.png);background-position:-1365px -819px;width:90px;height:90px}.customize-option.hair_base_13_blue{background-image:url(spritesmith-main-1.png);background-position:-1390px -834px;width:60px;height:60px}.hair_base_13_brown{background-image:url(spritesmith-main-1.png);background-position:-1365px -910px;width:90px;height:90px}.customize-option.hair_base_13_brown{background-image:url(spritesmith-main-1.png);background-position:-1390px -925px;width:60px;height:60px}.hair_base_13_candycane{background-image:url(spritesmith-main-1.png);background-position:-1365px -1001px;width:90px;height:90px}.customize-option.hair_base_13_candycane{background-image:url(spritesmith-main-1.png);background-position:-1390px -1016px;width:60px;height:60px}.hair_base_13_candycorn{background-image:url(spritesmith-main-1.png);background-position:-1365px -1092px;width:90px;height:90px}.customize-option.hair_base_13_candycorn{background-image:url(spritesmith-main-1.png);background-position:-1390px -1107px;width:60px;height:60px}.hair_base_13_festive{background-image:url(spritesmith-main-1.png);background-position:-1365px -1183px;width:90px;height:90px}.customize-option.hair_base_13_festive{background-image:url(spritesmith-main-1.png);background-position:-1390px -1198px;width:60px;height:60px}.hair_base_13_frost{background-image:url(spritesmith-main-1.png);background-position:-1365px -1274px;width:90px;height:90px}.customize-option.hair_base_13_frost{background-image:url(spritesmith-main-1.png);background-position:-1390px -1289px;width:60px;height:60px}.hair_base_13_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:0 -1365px;width:90px;height:90px}.customize-option.hair_base_13_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-25px -1380px;width:60px;height:60px}.hair_base_13_green{background-image:url(spritesmith-main-1.png);background-position:-91px -1365px;width:90px;height:90px}.customize-option.hair_base_13_green{background-image:url(spritesmith-main-1.png);background-position:-116px -1380px;width:60px;height:60px}.hair_base_13_halloween{background-image:url(spritesmith-main-1.png);background-position:-182px -1365px;width:90px;height:90px}.customize-option.hair_base_13_halloween{background-image:url(spritesmith-main-1.png);background-position:-207px -1380px;width:60px;height:60px}.hair_base_13_holly{background-image:url(spritesmith-main-1.png);background-position:-273px -1365px;width:90px;height:90px}.customize-option.hair_base_13_holly{background-image:url(spritesmith-main-1.png);background-position:-298px -1380px;width:60px;height:60px}.hair_base_13_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-364px -1365px;width:90px;height:90px}.customize-option.hair_base_13_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-389px -1380px;width:60px;height:60px}.hair_base_13_midnight{background-image:url(spritesmith-main-1.png);background-position:-455px -1365px;width:90px;height:90px}.customize-option.hair_base_13_midnight{background-image:url(spritesmith-main-1.png);background-position:-480px -1380px;width:60px;height:60px}.hair_base_13_pblue{background-image:url(spritesmith-main-1.png);background-position:-546px -1365px;width:90px;height:90px}.customize-option.hair_base_13_pblue{background-image:url(spritesmith-main-1.png);background-position:-571px -1380px;width:60px;height:60px}.hair_base_13_pblue2{background-image:url(spritesmith-main-1.png);background-position:-637px -1365px;width:90px;height:90px}.customize-option.hair_base_13_pblue2{background-image:url(spritesmith-main-1.png);background-position:-662px -1380px;width:60px;height:60px}.hair_base_13_peppermint{background-image:url(spritesmith-main-1.png);background-position:-728px -1365px;width:90px;height:90px}.customize-option.hair_base_13_peppermint{background-image:url(spritesmith-main-1.png);background-position:-753px -1380px;width:60px;height:60px}.hair_base_13_pgreen{background-image:url(spritesmith-main-1.png);background-position:-819px -1365px;width:90px;height:90px}.customize-option.hair_base_13_pgreen{background-image:url(spritesmith-main-1.png);background-position:-844px -1380px;width:60px;height:60px}.hair_base_13_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-910px -1365px;width:90px;height:90px}.customize-option.hair_base_13_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-935px -1380px;width:60px;height:60px}.hair_base_13_porange{background-image:url(spritesmith-main-1.png);background-position:-1001px -1365px;width:90px;height:90px}.customize-option.hair_base_13_porange{background-image:url(spritesmith-main-1.png);background-position:-1026px -1380px;width:60px;height:60px}.hair_base_13_porange2{background-image:url(spritesmith-main-1.png);background-position:-1092px -1365px;width:90px;height:90px}.customize-option.hair_base_13_porange2{background-image:url(spritesmith-main-1.png);background-position:-1117px -1380px;width:60px;height:60px}.hair_base_13_ppink{background-image:url(spritesmith-main-1.png);background-position:-1183px -1365px;width:90px;height:90px}.customize-option.hair_base_13_ppink{background-image:url(spritesmith-main-1.png);background-position:-1208px -1380px;width:60px;height:60px}.hair_base_13_ppink2{background-image:url(spritesmith-main-1.png);background-position:-1274px -1365px;width:90px;height:90px}.customize-option.hair_base_13_ppink2{background-image:url(spritesmith-main-1.png);background-position:-1299px -1380px;width:60px;height:60px}.hair_base_13_ppurple{background-image:url(spritesmith-main-1.png);background-position:-1365px -1365px;width:90px;height:90px}.customize-option.hair_base_13_ppurple{background-image:url(spritesmith-main-1.png);background-position:-1390px -1380px;width:60px;height:60px}.hair_base_13_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-1456px 0;width:90px;height:90px}.customize-option.hair_base_13_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-1481px -15px;width:60px;height:60px}.hair_base_13_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-1456px -91px;width:90px;height:90px}.customize-option.hair_base_13_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-1481px -106px;width:60px;height:60px}.hair_base_13_purple{background-image:url(spritesmith-main-1.png);background-position:-1456px -182px;width:90px;height:90px}.customize-option.hair_base_13_purple{background-image:url(spritesmith-main-1.png);background-position:-1481px -197px;width:60px;height:60px}.hair_base_13_pyellow{background-image:url(spritesmith-main-1.png);background-position:-1456px -273px;width:90px;height:90px}.customize-option.hair_base_13_pyellow{background-image:url(spritesmith-main-1.png);background-position:-1481px -288px;width:60px;height:60px}.hair_base_13_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-1456px -364px;width:90px;height:90px}.customize-option.hair_base_13_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-1481px -379px;width:60px;height:60px}.hair_base_13_rainbow{background-image:url(spritesmith-main-1.png);background-position:-1456px -455px;width:90px;height:90px}.customize-option.hair_base_13_rainbow{background-image:url(spritesmith-main-1.png);background-position:-1481px -470px;width:60px;height:60px}.hair_base_13_red{background-image:url(spritesmith-main-1.png);background-position:-1456px -546px;width:90px;height:90px}.customize-option.hair_base_13_red{background-image:url(spritesmith-main-1.png);background-position:-1481px -561px;width:60px;height:60px}.hair_base_13_snowy{background-image:url(spritesmith-main-1.png);background-position:-1456px -637px;width:90px;height:90px}.customize-option.hair_base_13_snowy{background-image:url(spritesmith-main-1.png);background-position:-1481px -652px;width:60px;height:60px}.hair_base_13_white{background-image:url(spritesmith-main-1.png);background-position:-1456px -728px;width:90px;height:90px}.customize-option.hair_base_13_white{background-image:url(spritesmith-main-1.png);background-position:-1481px -743px;width:60px;height:60px}.hair_base_13_winternight{background-image:url(spritesmith-main-1.png);background-position:-1456px -819px;width:90px;height:90px}.customize-option.hair_base_13_winternight{background-image:url(spritesmith-main-1.png);background-position:-1481px -834px;width:60px;height:60px}.hair_base_13_winterstar{background-image:url(spritesmith-main-1.png);background-position:-1456px -910px;width:90px;height:90px}.customize-option.hair_base_13_winterstar{background-image:url(spritesmith-main-1.png);background-position:-1481px -925px;width:60px;height:60px}.hair_base_13_yellow{background-image:url(spritesmith-main-1.png);background-position:-1456px -1001px;width:90px;height:90px}.customize-option.hair_base_13_yellow{background-image:url(spritesmith-main-1.png);background-position:-1481px -1016px;width:60px;height:60px}.hair_base_13_zombie{background-image:url(spritesmith-main-1.png);background-position:-1456px -1092px;width:90px;height:90px}.customize-option.hair_base_13_zombie{background-image:url(spritesmith-main-1.png);background-position:-1481px -1107px;width:60px;height:60px}.hair_base_14_TRUred{background-image:url(spritesmith-main-1.png);background-position:-1456px -1183px;width:90px;height:90px}.customize-option.hair_base_14_TRUred{background-image:url(spritesmith-main-1.png);background-position:-1481px -1198px;width:60px;height:60px}.hair_base_14_aurora{background-image:url(spritesmith-main-1.png);background-position:-1456px -1274px;width:90px;height:90px}.customize-option.hair_base_14_aurora{background-image:url(spritesmith-main-1.png);background-position:-1481px -1289px;width:60px;height:60px}.hair_base_14_black{background-image:url(spritesmith-main-1.png);background-position:-1456px -1365px;width:90px;height:90px}.customize-option.hair_base_14_black{background-image:url(spritesmith-main-1.png);background-position:-1481px -1380px;width:60px;height:60px}.hair_base_14_blond{background-image:url(spritesmith-main-1.png);background-position:0 -1456px;width:90px;height:90px}.customize-option.hair_base_14_blond{background-image:url(spritesmith-main-1.png);background-position:-25px -1471px;width:60px;height:60px}.hair_base_14_blue{background-image:url(spritesmith-main-1.png);background-position:-91px -1456px;width:90px;height:90px}.customize-option.hair_base_14_blue{background-image:url(spritesmith-main-1.png);background-position:-116px -1471px;width:60px;height:60px}.hair_base_14_brown{background-image:url(spritesmith-main-1.png);background-position:-182px -1456px;width:90px;height:90px}.customize-option.hair_base_14_brown{background-image:url(spritesmith-main-1.png);background-position:-207px -1471px;width:60px;height:60px}.hair_base_14_candycane{background-image:url(spritesmith-main-1.png);background-position:-273px -1456px;width:90px;height:90px}.customize-option.hair_base_14_candycane{background-image:url(spritesmith-main-1.png);background-position:-298px -1471px;width:60px;height:60px}.hair_base_14_candycorn{background-image:url(spritesmith-main-1.png);background-position:-364px -1456px;width:90px;height:90px}.customize-option.hair_base_14_candycorn{background-image:url(spritesmith-main-1.png);background-position:-389px -1471px;width:60px;height:60px}.hair_base_14_festive{background-image:url(spritesmith-main-1.png);background-position:-455px -1456px;width:90px;height:90px}.customize-option.hair_base_14_festive{background-image:url(spritesmith-main-1.png);background-position:-480px -1471px;width:60px;height:60px}.hair_base_14_frost{background-image:url(spritesmith-main-1.png);background-position:-546px -1456px;width:90px;height:90px}.customize-option.hair_base_14_frost{background-image:url(spritesmith-main-1.png);background-position:-571px -1471px;width:60px;height:60px}.hair_base_14_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-637px -1456px;width:90px;height:90px}.customize-option.hair_base_14_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-662px -1471px;width:60px;height:60px}.hair_base_14_green{background-image:url(spritesmith-main-1.png);background-position:-728px -1456px;width:90px;height:90px}.customize-option.hair_base_14_green{background-image:url(spritesmith-main-1.png);background-position:-753px -1471px;width:60px;height:60px}.hair_base_14_halloween{background-image:url(spritesmith-main-1.png);background-position:-819px -1456px;width:90px;height:90px}.customize-option.hair_base_14_halloween{background-image:url(spritesmith-main-1.png);background-position:-844px -1471px;width:60px;height:60px}.hair_base_14_holly{background-image:url(spritesmith-main-1.png);background-position:-910px -1456px;width:90px;height:90px}.customize-option.hair_base_14_holly{background-image:url(spritesmith-main-1.png);background-position:-935px -1471px;width:60px;height:60px}.hair_base_14_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-1001px -1456px;width:90px;height:90px}.customize-option.hair_base_14_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-1026px -1471px;width:60px;height:60px}.hair_base_14_midnight{background-image:url(spritesmith-main-1.png);background-position:-1092px -1456px;width:90px;height:90px}.customize-option.hair_base_14_midnight{background-image:url(spritesmith-main-1.png);background-position:-1117px -1471px;width:60px;height:60px}.hair_base_14_pblue{background-image:url(spritesmith-main-1.png);background-position:-1183px -1456px;width:90px;height:90px}.customize-option.hair_base_14_pblue{background-image:url(spritesmith-main-1.png);background-position:-1208px -1471px;width:60px;height:60px}.hair_base_14_pblue2{background-image:url(spritesmith-main-1.png);background-position:-1274px -1456px;width:90px;height:90px}.customize-option.hair_base_14_pblue2{background-image:url(spritesmith-main-1.png);background-position:-1299px -1471px;width:60px;height:60px}.hair_base_14_peppermint{background-image:url(spritesmith-main-1.png);background-position:-1365px -1456px;width:90px;height:90px}.customize-option.hair_base_14_peppermint{background-image:url(spritesmith-main-1.png);background-position:-1390px -1471px;width:60px;height:60px}.hair_base_14_pgreen{background-image:url(spritesmith-main-1.png);background-position:-1456px -1456px;width:90px;height:90px}.customize-option.hair_base_14_pgreen{background-image:url(spritesmith-main-1.png);background-position:-1481px -1471px;width:60px;height:60px}.hair_base_14_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-1547px 0;width:90px;height:90px}.customize-option.hair_base_14_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-1572px -15px;width:60px;height:60px}.hair_base_14_porange{background-image:url(spritesmith-main-1.png);background-position:-1547px -91px;width:90px;height:90px}.customize-option.hair_base_14_porange{background-image:url(spritesmith-main-1.png);background-position:-1572px -106px;width:60px;height:60px}.hair_base_14_porange2{background-image:url(spritesmith-main-1.png);background-position:-1547px -182px;width:90px;height:90px}.customize-option.hair_base_14_porange2{background-image:url(spritesmith-main-1.png);background-position:-1572px -197px;width:60px;height:60px}.hair_base_14_ppink{background-image:url(spritesmith-main-1.png);background-position:-1547px -273px;width:90px;height:90px}.customize-option.hair_base_14_ppink{background-image:url(spritesmith-main-1.png);background-position:-1572px -288px;width:60px;height:60px}.hair_base_14_ppink2{background-image:url(spritesmith-main-1.png);background-position:-1547px -364px;width:90px;height:90px}.customize-option.hair_base_14_ppink2{background-image:url(spritesmith-main-1.png);background-position:-1572px -379px;width:60px;height:60px}.hair_base_14_ppurple{background-image:url(spritesmith-main-1.png);background-position:-1547px -455px;width:90px;height:90px}.customize-option.hair_base_14_ppurple{background-image:url(spritesmith-main-1.png);background-position:-1572px -470px;width:60px;height:60px}.hair_base_14_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-1547px -546px;width:90px;height:90px}.customize-option.hair_base_14_ppurple2{background-image:url(spritesmith-main-1.png);background-position:-1572px -561px;width:60px;height:60px}.hair_base_14_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-1547px -637px;width:90px;height:90px}.customize-option.hair_base_14_pumpkin{background-image:url(spritesmith-main-1.png);background-position:-1572px -652px;width:60px;height:60px}.hair_base_14_purple{background-image:url(spritesmith-main-1.png);background-position:-1547px -728px;width:90px;height:90px}.customize-option.hair_base_14_purple{background-image:url(spritesmith-main-1.png);background-position:-1572px -743px;width:60px;height:60px}.hair_base_14_pyellow{background-image:url(spritesmith-main-1.png);background-position:-1547px -819px;width:90px;height:90px}.customize-option.hair_base_14_pyellow{background-image:url(spritesmith-main-1.png);background-position:-1572px -834px;width:60px;height:60px}.hair_base_14_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-1547px -910px;width:90px;height:90px}.customize-option.hair_base_14_pyellow2{background-image:url(spritesmith-main-1.png);background-position:-1572px -925px;width:60px;height:60px}.hair_base_14_rainbow{background-image:url(spritesmith-main-1.png);background-position:-1547px -1001px;width:90px;height:90px}.customize-option.hair_base_14_rainbow{background-image:url(spritesmith-main-1.png);background-position:-1572px -1016px;width:60px;height:60px}.hair_base_14_red{background-image:url(spritesmith-main-1.png);background-position:-1547px -1092px;width:90px;height:90px}.customize-option.hair_base_14_red{background-image:url(spritesmith-main-1.png);background-position:-1572px -1107px;width:60px;height:60px}.hair_base_14_snowy{background-image:url(spritesmith-main-1.png);background-position:-1547px -1183px;width:90px;height:90px}.customize-option.hair_base_14_snowy{background-image:url(spritesmith-main-1.png);background-position:-1572px -1198px;width:60px;height:60px}.hair_base_14_white{background-image:url(spritesmith-main-1.png);background-position:-1547px -1274px;width:90px;height:90px}.customize-option.hair_base_14_white{background-image:url(spritesmith-main-1.png);background-position:-1572px -1289px;width:60px;height:60px}.hair_base_14_winternight{background-image:url(spritesmith-main-1.png);background-position:-1547px -1365px;width:90px;height:90px}.customize-option.hair_base_14_winternight{background-image:url(spritesmith-main-1.png);background-position:-1572px -1380px;width:60px;height:60px}.hair_base_14_winterstar{background-image:url(spritesmith-main-1.png);background-position:-1547px -1456px;width:90px;height:90px}.customize-option.hair_base_14_winterstar{background-image:url(spritesmith-main-1.png);background-position:-1572px -1471px;width:60px;height:60px}.hair_base_14_yellow{background-image:url(spritesmith-main-1.png);background-position:0 -1547px;width:90px;height:90px}.customize-option.hair_base_14_yellow{background-image:url(spritesmith-main-1.png);background-position:-25px -1562px;width:60px;height:60px}.hair_base_14_zombie{background-image:url(spritesmith-main-1.png);background-position:-91px -1547px;width:90px;height:90px}.customize-option.hair_base_14_zombie{background-image:url(spritesmith-main-1.png);background-position:-116px -1562px;width:60px;height:60px}.hair_base_1_TRUred{background-image:url(spritesmith-main-1.png);background-position:-182px -1547px;width:90px;height:90px}.customize-option.hair_base_1_TRUred{background-image:url(spritesmith-main-1.png);background-position:-207px -1562px;width:60px;height:60px}.hair_base_1_aurora{background-image:url(spritesmith-main-1.png);background-position:-273px -1547px;width:90px;height:90px}.customize-option.hair_base_1_aurora{background-image:url(spritesmith-main-1.png);background-position:-298px -1562px;width:60px;height:60px}.hair_base_1_black{background-image:url(spritesmith-main-1.png);background-position:-364px -1547px;width:90px;height:90px}.customize-option.hair_base_1_black{background-image:url(spritesmith-main-1.png);background-position:-389px -1562px;width:60px;height:60px}.hair_base_1_blond{background-image:url(spritesmith-main-1.png);background-position:-455px -1547px;width:90px;height:90px}.customize-option.hair_base_1_blond{background-image:url(spritesmith-main-1.png);background-position:-480px -1562px;width:60px;height:60px}.hair_base_1_blue{background-image:url(spritesmith-main-1.png);background-position:-546px -1547px;width:90px;height:90px}.customize-option.hair_base_1_blue{background-image:url(spritesmith-main-1.png);background-position:-571px -1562px;width:60px;height:60px}.hair_base_1_brown{background-image:url(spritesmith-main-1.png);background-position:-637px -1547px;width:90px;height:90px}.customize-option.hair_base_1_brown{background-image:url(spritesmith-main-1.png);background-position:-662px -1562px;width:60px;height:60px}.hair_base_1_candycane{background-image:url(spritesmith-main-1.png);background-position:-728px -1547px;width:90px;height:90px}.customize-option.hair_base_1_candycane{background-image:url(spritesmith-main-1.png);background-position:-753px -1562px;width:60px;height:60px}.hair_base_1_candycorn{background-image:url(spritesmith-main-1.png);background-position:-819px -1547px;width:90px;height:90px}.customize-option.hair_base_1_candycorn{background-image:url(spritesmith-main-1.png);background-position:-844px -1562px;width:60px;height:60px}.hair_base_1_festive{background-image:url(spritesmith-main-1.png);background-position:-910px -1547px;width:90px;height:90px}.customize-option.hair_base_1_festive{background-image:url(spritesmith-main-1.png);background-position:-935px -1562px;width:60px;height:60px}.hair_base_1_frost{background-image:url(spritesmith-main-1.png);background-position:-1001px -1547px;width:90px;height:90px}.customize-option.hair_base_1_frost{background-image:url(spritesmith-main-1.png);background-position:-1026px -1562px;width:60px;height:60px}.hair_base_1_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-1092px -1547px;width:90px;height:90px}.customize-option.hair_base_1_ghostwhite{background-image:url(spritesmith-main-1.png);background-position:-1117px -1562px;width:60px;height:60px}.hair_base_1_green{background-image:url(spritesmith-main-1.png);background-position:-1183px -1547px;width:90px;height:90px}.customize-option.hair_base_1_green{background-image:url(spritesmith-main-1.png);background-position:-1208px -1562px;width:60px;height:60px}.hair_base_1_halloween{background-image:url(spritesmith-main-1.png);background-position:-1274px -1547px;width:90px;height:90px}.customize-option.hair_base_1_halloween{background-image:url(spritesmith-main-1.png);background-position:-1299px -1562px;width:60px;height:60px}.hair_base_1_holly{background-image:url(spritesmith-main-1.png);background-position:-1365px -1547px;width:90px;height:90px}.customize-option.hair_base_1_holly{background-image:url(spritesmith-main-1.png);background-position:-1390px -1562px;width:60px;height:60px}.hair_base_1_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-1456px -1547px;width:90px;height:90px}.customize-option.hair_base_1_hollygreen{background-image:url(spritesmith-main-1.png);background-position:-1481px -1562px;width:60px;height:60px}.hair_base_1_midnight{background-image:url(spritesmith-main-1.png);background-position:-1547px -1547px;width:90px;height:90px}.customize-option.hair_base_1_midnight{background-image:url(spritesmith-main-1.png);background-position:-1572px -1562px;width:60px;height:60px}.hair_base_1_pblue{background-image:url(spritesmith-main-1.png);background-position:-1638px 0;width:90px;height:90px}.customize-option.hair_base_1_pblue{background-image:url(spritesmith-main-1.png);background-position:-1663px -15px;width:60px;height:60px}.hair_base_1_pblue2{background-image:url(spritesmith-main-1.png);background-position:-1638px -91px;width:90px;height:90px}.customize-option.hair_base_1_pblue2{background-image:url(spritesmith-main-1.png);background-position:-1663px -106px;width:60px;height:60px}.hair_base_1_peppermint{background-image:url(spritesmith-main-1.png);background-position:-1638px -182px;width:90px;height:90px}.customize-option.hair_base_1_peppermint{background-image:url(spritesmith-main-1.png);background-position:-1663px -197px;width:60px;height:60px}.hair_base_1_pgreen{background-image:url(spritesmith-main-1.png);background-position:-1638px -273px;width:90px;height:90px}.customize-option.hair_base_1_pgreen{background-image:url(spritesmith-main-1.png);background-position:-1663px -288px;width:60px;height:60px}.hair_base_1_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-1638px -364px;width:90px;height:90px}.customize-option.hair_base_1_pgreen2{background-image:url(spritesmith-main-1.png);background-position:-1663px -379px;width:60px;height:60px}.Mount_Icon_Wolf-Red{background-image:url(spritesmith-main-10.png);background-position:-82px 0;width:81px;height:99px}.Mount_Icon_Wolf-Shade{background-image:url(spritesmith-main-10.png);background-position:-82px -1100px;width:81px;height:99px}.Mount_Icon_Wolf-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-164px 0;width:81px;height:99px}.Mount_Icon_Wolf-Spooky{background-image:url(spritesmith-main-10.png);background-position:0 -100px;width:81px;height:99px}.Mount_Icon_Wolf-White{background-image:url(spritesmith-main-10.png);background-position:-82px -100px;width:81px;height:99px}.Mount_Icon_Wolf-Zombie{background-image:url(spritesmith-main-10.png);background-position:-164px -100px;width:81px;height:99px}.Pet-BearCub-Base{background-image:url(spritesmith-main-10.png);background-position:-246px 0;width:81px;height:99px}.Pet-BearCub-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-246px -100px;width:81px;height:99px}.Pet-BearCub-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:0 -200px;width:81px;height:99px}.Pet-BearCub-Desert{background-image:url(spritesmith-main-10.png);background-position:-82px -200px;width:81px;height:99px}.Pet-BearCub-Golden{background-image:url(spritesmith-main-10.png);background-position:-164px -200px;width:81px;height:99px}.Pet-BearCub-Peppermint{background-image:url(spritesmith-main-10.png);background-position:-246px -200px;width:81px;height:99px}.Pet-BearCub-Polar{background-image:url(spritesmith-main-10.png);background-position:-328px 0;width:81px;height:99px}.Pet-BearCub-Red{background-image:url(spritesmith-main-10.png);background-position:-328px -100px;width:81px;height:99px}.Pet-BearCub-Shade{background-image:url(spritesmith-main-10.png);background-position:-328px -200px;width:81px;height:99px}.Pet-BearCub-Skeleton{background-image:url(spritesmith-main-10.png);background-position:0 -300px;width:81px;height:99px}.Pet-BearCub-Spooky{background-image:url(spritesmith-main-10.png);background-position:-82px -300px;width:81px;height:99px}.Pet-BearCub-White{background-image:url(spritesmith-main-10.png);background-position:-164px -300px;width:81px;height:99px}.Pet-BearCub-Zombie{background-image:url(spritesmith-main-10.png);background-position:-246px -300px;width:81px;height:99px}.Pet-Bunny-Base{background-image:url(spritesmith-main-10.png);background-position:-328px -300px;width:81px;height:99px}.Pet-Bunny-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-410px 0;width:81px;height:99px}.Pet-Bunny-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-410px -100px;width:81px;height:99px}.Pet-Bunny-Desert{background-image:url(spritesmith-main-10.png);background-position:-410px -200px;width:81px;height:99px}.Pet-Bunny-Golden{background-image:url(spritesmith-main-10.png);background-position:-410px -300px;width:81px;height:99px}.Pet-Bunny-Red{background-image:url(spritesmith-main-10.png);background-position:-492px 0;width:81px;height:99px}.Pet-Bunny-Shade{background-image:url(spritesmith-main-10.png);background-position:-492px -100px;width:81px;height:99px}.Pet-Bunny-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-492px -200px;width:81px;height:99px}.Pet-Bunny-White{background-image:url(spritesmith-main-10.png);background-position:-492px -300px;width:81px;height:99px}.Pet-Bunny-Zombie{background-image:url(spritesmith-main-10.png);background-position:0 -400px;width:81px;height:99px}.Pet-Cactus-Base{background-image:url(spritesmith-main-10.png);background-position:-82px -400px;width:81px;height:99px}.Pet-Cactus-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-164px -400px;width:81px;height:99px}.Pet-Cactus-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-246px -400px;width:81px;height:99px}.Pet-Cactus-Desert{background-image:url(spritesmith-main-10.png);background-position:-328px -400px;width:81px;height:99px}.Pet-Cactus-Golden{background-image:url(spritesmith-main-10.png);background-position:-410px -400px;width:81px;height:99px}.Pet-Cactus-Peppermint{background-image:url(spritesmith-main-10.png);background-position:-492px -400px;width:81px;height:99px}.Pet-Cactus-Red{background-image:url(spritesmith-main-10.png);background-position:-574px 0;width:81px;height:99px}.Pet-Cactus-Shade{background-image:url(spritesmith-main-10.png);background-position:-574px -100px;width:81px;height:99px}.Pet-Cactus-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-574px -200px;width:81px;height:99px}.Pet-Cactus-Spooky{background-image:url(spritesmith-main-10.png);background-position:-574px -300px;width:81px;height:99px}.Pet-Cactus-White{background-image:url(spritesmith-main-10.png);background-position:-574px -400px;width:81px;height:99px}.Pet-Cactus-Zombie{background-image:url(spritesmith-main-10.png);background-position:0 -500px;width:81px;height:99px}.Pet-Cheetah-Base{background-image:url(spritesmith-main-10.png);background-position:-82px -500px;width:81px;height:99px}.Pet-Cheetah-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-164px -500px;width:81px;height:99px}.Pet-Cheetah-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-246px -500px;width:81px;height:99px}.Pet-Cheetah-Desert{background-image:url(spritesmith-main-10.png);background-position:-328px -500px;width:81px;height:99px}.Pet-Cheetah-Golden{background-image:url(spritesmith-main-10.png);background-position:-410px -500px;width:81px;height:99px}.Pet-Cheetah-Red{background-image:url(spritesmith-main-10.png);background-position:-492px -500px;width:81px;height:99px}.Pet-Cheetah-Shade{background-image:url(spritesmith-main-10.png);background-position:-574px -500px;width:81px;height:99px}.Pet-Cheetah-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-656px 0;width:81px;height:99px}.Pet-Cheetah-White{background-image:url(spritesmith-main-10.png);background-position:-656px -100px;width:81px;height:99px}.Pet-Cheetah-Zombie{background-image:url(spritesmith-main-10.png);background-position:-656px -200px;width:81px;height:99px}.Pet-Cuttlefish-Base{background-image:url(spritesmith-main-10.png);background-position:-656px -300px;width:81px;height:99px}.Pet-Cuttlefish-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-656px -400px;width:81px;height:99px}.Pet-Cuttlefish-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-656px -500px;width:81px;height:99px}.Pet-Cuttlefish-Desert{background-image:url(spritesmith-main-10.png);background-position:0 -600px;width:81px;height:99px}.Pet-Cuttlefish-Golden{background-image:url(spritesmith-main-10.png);background-position:-82px -600px;width:81px;height:99px}.Pet-Cuttlefish-Red{background-image:url(spritesmith-main-10.png);background-position:-164px -600px;width:81px;height:99px}.Pet-Cuttlefish-Shade{background-image:url(spritesmith-main-10.png);background-position:-246px -600px;width:81px;height:99px}.Pet-Cuttlefish-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-328px -600px;width:81px;height:99px}.Pet-Cuttlefish-White{background-image:url(spritesmith-main-10.png);background-position:-410px -600px;width:81px;height:99px}.Pet-Cuttlefish-Zombie{background-image:url(spritesmith-main-10.png);background-position:-492px -600px;width:81px;height:99px}.Pet-Deer-Base{background-image:url(spritesmith-main-10.png);background-position:-574px -600px;width:81px;height:99px}.Pet-Deer-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-656px -600px;width:81px;height:99px}.Pet-Deer-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-738px 0;width:81px;height:99px}.Pet-Deer-Desert{background-image:url(spritesmith-main-10.png);background-position:-738px -100px;width:81px;height:99px}.Pet-Deer-Golden{background-image:url(spritesmith-main-10.png);background-position:-738px -200px;width:81px;height:99px}.Pet-Deer-Red{background-image:url(spritesmith-main-10.png);background-position:-738px -300px;width:81px;height:99px}.Pet-Deer-Shade{background-image:url(spritesmith-main-10.png);background-position:-738px -400px;width:81px;height:99px}.Pet-Deer-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-738px -500px;width:81px;height:99px}.Pet-Deer-White{background-image:url(spritesmith-main-10.png);background-position:-738px -600px;width:81px;height:99px}.Pet-Deer-Zombie{background-image:url(spritesmith-main-10.png);background-position:0 -700px;width:81px;height:99px}.Pet-Dragon-Base{background-image:url(spritesmith-main-10.png);background-position:-82px -700px;width:81px;height:99px}.Pet-Dragon-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-164px -700px;width:81px;height:99px}.Pet-Dragon-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-246px -700px;width:81px;height:99px}.Pet-Dragon-Desert{background-image:url(spritesmith-main-10.png);background-position:-328px -700px;width:81px;height:99px}.Pet-Dragon-Golden{background-image:url(spritesmith-main-10.png);background-position:-410px -700px;width:81px;height:99px}.Pet-Dragon-Hydra{background-image:url(spritesmith-main-10.png);background-position:-492px -700px;width:81px;height:99px}.Pet-Dragon-Peppermint{background-image:url(spritesmith-main-10.png);background-position:-574px -700px;width:81px;height:99px}.Pet-Dragon-Red{background-image:url(spritesmith-main-10.png);background-position:-656px -700px;width:81px;height:99px}.Pet-Dragon-Shade{background-image:url(spritesmith-main-10.png);background-position:-738px -700px;width:81px;height:99px}.Pet-Dragon-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-820px 0;width:81px;height:99px}.Pet-Dragon-Spooky{background-image:url(spritesmith-main-10.png);background-position:-820px -100px;width:81px;height:99px}.Pet-Dragon-White{background-image:url(spritesmith-main-10.png);background-position:-820px -200px;width:81px;height:99px}.Pet-Dragon-Zombie{background-image:url(spritesmith-main-10.png);background-position:-820px -300px;width:81px;height:99px}.Pet-Egg-Base{background-image:url(spritesmith-main-10.png);background-position:-820px -400px;width:81px;height:99px}.Pet-Egg-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-820px -500px;width:81px;height:99px}.Pet-Egg-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-820px -600px;width:81px;height:99px}.Pet-Egg-Desert{background-image:url(spritesmith-main-10.png);background-position:-820px -700px;width:81px;height:99px}.Pet-Egg-Golden{background-image:url(spritesmith-main-10.png);background-position:0 -800px;width:81px;height:99px}.Pet-Egg-Red{background-image:url(spritesmith-main-10.png);background-position:-82px -800px;width:81px;height:99px}.Pet-Egg-Shade{background-image:url(spritesmith-main-10.png);background-position:-164px -800px;width:81px;height:99px}.Pet-Egg-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-246px -800px;width:81px;height:99px}.Pet-Egg-White{background-image:url(spritesmith-main-10.png);background-position:-328px -800px;width:81px;height:99px}.Pet-Egg-Zombie{background-image:url(spritesmith-main-10.png);background-position:-410px -800px;width:81px;height:99px}.Pet-FlyingPig-Base{background-image:url(spritesmith-main-10.png);background-position:-492px -800px;width:81px;height:99px}.Pet-FlyingPig-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-574px -800px;width:81px;height:99px}.Pet-FlyingPig-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-656px -800px;width:81px;height:99px}.Pet-FlyingPig-Desert{background-image:url(spritesmith-main-10.png);background-position:-738px -800px;width:81px;height:99px}.Pet-FlyingPig-Golden{background-image:url(spritesmith-main-10.png);background-position:-820px -800px;width:81px;height:99px}.Pet-FlyingPig-Peppermint{background-image:url(spritesmith-main-10.png);background-position:-902px 0;width:81px;height:99px}.Pet-FlyingPig-Red{background-image:url(spritesmith-main-10.png);background-position:-902px -100px;width:81px;height:99px}.Pet-FlyingPig-Shade{background-image:url(spritesmith-main-10.png);background-position:-902px -200px;width:81px;height:99px}.Pet-FlyingPig-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-902px -300px;width:81px;height:99px}.Pet-FlyingPig-Spooky{background-image:url(spritesmith-main-10.png);background-position:-902px -400px;width:81px;height:99px}.Pet-FlyingPig-White{background-image:url(spritesmith-main-10.png);background-position:-902px -500px;width:81px;height:99px}.Pet-FlyingPig-Zombie{background-image:url(spritesmith-main-10.png);background-position:-902px -600px;width:81px;height:99px}.Pet-Fox-Base{background-image:url(spritesmith-main-10.png);background-position:-902px -700px;width:81px;height:99px}.Pet-Fox-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-902px -800px;width:81px;height:99px}.Pet-Fox-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-984px 0;width:81px;height:99px}.Pet-Fox-Desert{background-image:url(spritesmith-main-10.png);background-position:-984px -100px;width:81px;height:99px}.Pet-Fox-Golden{background-image:url(spritesmith-main-10.png);background-position:-984px -200px;width:81px;height:99px}.Pet-Fox-Peppermint{background-image:url(spritesmith-main-10.png);background-position:-984px -300px;width:81px;height:99px}.Pet-Fox-Red{background-image:url(spritesmith-main-10.png);background-position:-984px -400px;width:81px;height:99px}.Pet-Fox-Shade{background-image:url(spritesmith-main-10.png);background-position:-984px -500px;width:81px;height:99px}.Pet-Fox-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-984px -600px;width:81px;height:99px}.Pet-Fox-Spooky{background-image:url(spritesmith-main-10.png);background-position:-984px -700px;width:81px;height:99px}.Pet-Fox-White{background-image:url(spritesmith-main-10.png);background-position:-984px -800px;width:81px;height:99px}.Pet-Fox-Zombie{background-image:url(spritesmith-main-10.png);background-position:0 -900px;width:81px;height:99px}.Pet-Frog-Base{background-image:url(spritesmith-main-10.png);background-position:-82px -900px;width:81px;height:99px}.Pet-Frog-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-164px -900px;width:81px;height:99px}.Pet-Frog-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-246px -900px;width:81px;height:99px}.Pet-Frog-Desert{background-image:url(spritesmith-main-10.png);background-position:-328px -900px;width:81px;height:99px}.Pet-Frog-Golden{background-image:url(spritesmith-main-10.png);background-position:-410px -900px;width:81px;height:99px}.Pet-Frog-Red{background-image:url(spritesmith-main-10.png);background-position:-492px -900px;width:81px;height:99px}.Pet-Frog-Shade{background-image:url(spritesmith-main-10.png);background-position:-574px -900px;width:81px;height:99px}.Pet-Frog-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-656px -900px;width:81px;height:99px}.Pet-Frog-White{background-image:url(spritesmith-main-10.png);background-position:-738px -900px;width:81px;height:99px}.Pet-Frog-Zombie{background-image:url(spritesmith-main-10.png);background-position:-820px -900px;width:81px;height:99px}.Pet-Gryphon-Base{background-image:url(spritesmith-main-10.png);background-position:-902px -900px;width:81px;height:99px}.Pet-Gryphon-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-984px -900px;width:81px;height:99px}.Pet-Gryphon-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-1066px 0;width:81px;height:99px}.Pet-Gryphon-Desert{background-image:url(spritesmith-main-10.png);background-position:-1066px -100px;width:81px;height:99px}.Pet-Gryphon-Golden{background-image:url(spritesmith-main-10.png);background-position:-1066px -200px;width:81px;height:99px}.Pet-Gryphon-Red{background-image:url(spritesmith-main-10.png);background-position:-1066px -300px;width:81px;height:99px}.Pet-Gryphon-Shade{background-image:url(spritesmith-main-10.png);background-position:-1066px -400px;width:81px;height:99px}.Pet-Gryphon-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-1066px -500px;width:81px;height:99px}.Pet-Gryphon-White{background-image:url(spritesmith-main-10.png);background-position:-1066px -600px;width:81px;height:99px}.Pet-Gryphon-Zombie{background-image:url(spritesmith-main-10.png);background-position:-1066px -700px;width:81px;height:99px}.Pet-Hedgehog-Base{background-image:url(spritesmith-main-10.png);background-position:-1066px -800px;width:81px;height:99px}.Pet-Hedgehog-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-1066px -900px;width:81px;height:99px}.Pet-Hedgehog-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:0 -1000px;width:81px;height:99px}.Pet-Hedgehog-Desert{background-image:url(spritesmith-main-10.png);background-position:-82px -1000px;width:81px;height:99px}.Pet-Hedgehog-Golden{background-image:url(spritesmith-main-10.png);background-position:-164px -1000px;width:81px;height:99px}.Pet-Hedgehog-Red{background-image:url(spritesmith-main-10.png);background-position:-246px -1000px;width:81px;height:99px}.Pet-Hedgehog-Shade{background-image:url(spritesmith-main-10.png);background-position:-328px -1000px;width:81px;height:99px}.Pet-Hedgehog-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-410px -1000px;width:81px;height:99px}.Pet-Hedgehog-White{background-image:url(spritesmith-main-10.png);background-position:-492px -1000px;width:81px;height:99px}.Pet-Hedgehog-Zombie{background-image:url(spritesmith-main-10.png);background-position:-574px -1000px;width:81px;height:99px}.Pet-Horse-Base{background-image:url(spritesmith-main-10.png);background-position:-656px -1000px;width:81px;height:99px}.Pet-Horse-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-738px -1000px;width:81px;height:99px}.Pet-Horse-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-820px -1000px;width:81px;height:99px}.Pet-Horse-Desert{background-image:url(spritesmith-main-10.png);background-position:-902px -1000px;width:81px;height:99px}.Pet-Horse-Golden{background-image:url(spritesmith-main-10.png);background-position:-984px -1000px;width:81px;height:99px}.Pet-Horse-Red{background-image:url(spritesmith-main-10.png);background-position:-1066px -1000px;width:81px;height:99px}.Pet-Horse-Shade{background-image:url(spritesmith-main-10.png);background-position:-1148px 0;width:81px;height:99px}.Pet-Horse-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-1148px -100px;width:81px;height:99px}.Pet-Horse-White{background-image:url(spritesmith-main-10.png);background-position:-1148px -200px;width:81px;height:99px}.Pet-Horse-Zombie{background-image:url(spritesmith-main-10.png);background-position:-1148px -300px;width:81px;height:99px}.Pet-JackOLantern-Base{background-image:url(spritesmith-main-10.png);background-position:-1148px -400px;width:81px;height:99px}.Pet-LionCub-Base{background-image:url(spritesmith-main-10.png);background-position:-1148px -500px;width:81px;height:99px}.Pet-LionCub-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-1148px -600px;width:81px;height:99px}.Pet-LionCub-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-1148px -700px;width:81px;height:99px}.Pet-LionCub-Desert{background-image:url(spritesmith-main-10.png);background-position:-1148px -800px;width:81px;height:99px}.Pet-LionCub-Golden{background-image:url(spritesmith-main-10.png);background-position:-1148px -900px;width:81px;height:99px}.Pet-LionCub-Peppermint{background-image:url(spritesmith-main-10.png);background-position:-1148px -1000px;width:81px;height:99px}.Pet-LionCub-Red{background-image:url(spritesmith-main-10.png);background-position:0 -1100px;width:81px;height:99px}.Pet-LionCub-Shade{background-image:url(spritesmith-main-10.png);background-position:0 0;width:81px;height:99px}.Pet-LionCub-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-164px -1100px;width:81px;height:99px}.Pet-LionCub-Spooky{background-image:url(spritesmith-main-10.png);background-position:-246px -1100px;width:81px;height:99px}.Pet-LionCub-White{background-image:url(spritesmith-main-10.png);background-position:-328px -1100px;width:81px;height:99px}.Pet-LionCub-Zombie{background-image:url(spritesmith-main-10.png);background-position:-410px -1100px;width:81px;height:99px}.Pet-Mammoth-Base{background-image:url(spritesmith-main-10.png);background-position:-492px -1100px;width:81px;height:99px}.Pet-MantisShrimp-Base{background-image:url(spritesmith-main-10.png);background-position:-574px -1100px;width:81px;height:99px}.Pet-Octopus-Base{background-image:url(spritesmith-main-10.png);background-position:-656px -1100px;width:81px;height:99px}.Pet-Octopus-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-738px -1100px;width:81px;height:99px}.Pet-Octopus-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-820px -1100px;width:81px;height:99px}.Pet-Octopus-Desert{background-image:url(spritesmith-main-10.png);background-position:-902px -1100px;width:81px;height:99px}.Pet-Octopus-Golden{background-image:url(spritesmith-main-10.png);background-position:-984px -1100px;width:81px;height:99px}.Pet-Octopus-Red{background-image:url(spritesmith-main-10.png);background-position:-1066px -1100px;width:81px;height:99px}.Pet-Octopus-Shade{background-image:url(spritesmith-main-10.png);background-position:-1148px -1100px;width:81px;height:99px}.Pet-Octopus-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-1230px 0;width:81px;height:99px}.Pet-Octopus-White{background-image:url(spritesmith-main-10.png);background-position:-1230px -100px;width:81px;height:99px}.Pet-Octopus-Zombie{background-image:url(spritesmith-main-10.png);background-position:-1230px -200px;width:81px;height:99px}.Pet-Owl-Base{background-image:url(spritesmith-main-10.png);background-position:-1230px -300px;width:81px;height:99px}.Pet-Owl-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-1230px -400px;width:81px;height:99px}.Pet-Owl-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-1230px -500px;width:81px;height:99px}.Pet-Owl-Desert{background-image:url(spritesmith-main-10.png);background-position:-1230px -600px;width:81px;height:99px}.Pet-Owl-Golden{background-image:url(spritesmith-main-10.png);background-position:-1230px -700px;width:81px;height:99px}.Pet-Owl-Red{background-image:url(spritesmith-main-10.png);background-position:-1230px -800px;width:81px;height:99px}.Pet-Owl-Shade{background-image:url(spritesmith-main-10.png);background-position:-1230px -900px;width:81px;height:99px}.Pet-Owl-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-1230px -1000px;width:81px;height:99px}.Pet-Owl-White{background-image:url(spritesmith-main-10.png);background-position:-1230px -1100px;width:81px;height:99px}.Pet-Owl-Zombie{background-image:url(spritesmith-main-10.png);background-position:0 -1200px;width:81px;height:99px}.Pet-PandaCub-Base{background-image:url(spritesmith-main-10.png);background-position:-82px -1200px;width:81px;height:99px}.Pet-PandaCub-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-164px -1200px;width:81px;height:99px}.Pet-PandaCub-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-246px -1200px;width:81px;height:99px}.Pet-PandaCub-Desert{background-image:url(spritesmith-main-10.png);background-position:-328px -1200px;width:81px;height:99px}.Pet-PandaCub-Golden{background-image:url(spritesmith-main-10.png);background-position:-410px -1200px;width:81px;height:99px}.Pet-PandaCub-Peppermint{background-image:url(spritesmith-main-10.png);background-position:-492px -1200px;width:81px;height:99px}.Pet-PandaCub-Red{background-image:url(spritesmith-main-10.png);background-position:-574px -1200px;width:81px;height:99px}.Pet-PandaCub-Shade{background-image:url(spritesmith-main-10.png);background-position:-656px -1200px;width:81px;height:99px}.Pet-PandaCub-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-738px -1200px;width:81px;height:99px}.Pet-PandaCub-Spooky{background-image:url(spritesmith-main-10.png);background-position:-820px -1200px;width:81px;height:99px}.Pet-PandaCub-White{background-image:url(spritesmith-main-10.png);background-position:-902px -1200px;width:81px;height:99px}.Pet-PandaCub-Zombie{background-image:url(spritesmith-main-10.png);background-position:-984px -1200px;width:81px;height:99px}.Pet-Parrot-Base{background-image:url(spritesmith-main-10.png);background-position:-1066px -1200px;width:81px;height:99px}.Pet-Parrot-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-1148px -1200px;width:81px;height:99px}.Pet-Parrot-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-1230px -1200px;width:81px;height:99px}.Pet-Parrot-Desert{background-image:url(spritesmith-main-10.png);background-position:-1312px 0;width:81px;height:99px}.Pet-Parrot-Golden{background-image:url(spritesmith-main-10.png);background-position:-1312px -100px;width:81px;height:99px}.Pet-Parrot-Red{background-image:url(spritesmith-main-10.png);background-position:-1312px -200px;width:81px;height:99px}.Pet-Parrot-Shade{background-image:url(spritesmith-main-10.png);background-position:-1312px -300px;width:81px;height:99px}.Pet-Parrot-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-1312px -400px;width:81px;height:99px}.Pet-Parrot-White{background-image:url(spritesmith-main-10.png);background-position:-1312px -500px;width:81px;height:99px}.Pet-Parrot-Zombie{background-image:url(spritesmith-main-10.png);background-position:-1312px -600px;width:81px;height:99px}.Pet-Penguin-Base{background-image:url(spritesmith-main-10.png);background-position:-1312px -700px;width:81px;height:99px}.Pet-Penguin-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-1312px -800px;width:81px;height:99px}.Pet-Penguin-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-1312px -900px;width:81px;height:99px}.Pet-Penguin-Desert{background-image:url(spritesmith-main-10.png);background-position:-1312px -1000px;width:81px;height:99px}.Pet-Penguin-Golden{background-image:url(spritesmith-main-10.png);background-position:-1312px -1100px;width:81px;height:99px}.Pet-Penguin-Red{background-image:url(spritesmith-main-10.png);background-position:-1312px -1200px;width:81px;height:99px}.Pet-Penguin-Shade{background-image:url(spritesmith-main-10.png);background-position:-1394px 0;width:81px;height:99px}.Pet-Penguin-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-1394px -100px;width:81px;height:99px}.Pet-Penguin-White{background-image:url(spritesmith-main-10.png);background-position:-1394px -200px;width:81px;height:99px}.Pet-Penguin-Zombie{background-image:url(spritesmith-main-10.png);background-position:-1394px -300px;width:81px;height:99px}.Pet-Phoenix-Base{background-image:url(spritesmith-main-10.png);background-position:-1394px -400px;width:81px;height:99px}.Pet-Rat-Base{background-image:url(spritesmith-main-10.png);background-position:-1394px -500px;width:81px;height:99px}.Pet-Rat-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-1394px -600px;width:81px;height:99px}.Pet-Rat-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-1394px -700px;width:81px;height:99px}.Pet-Rat-Desert{background-image:url(spritesmith-main-10.png);background-position:-1394px -800px;width:81px;height:99px}.Pet-Rat-Golden{background-image:url(spritesmith-main-10.png);background-position:-1394px -900px;width:81px;height:99px}.Pet-Rat-Red{background-image:url(spritesmith-main-10.png);background-position:-1394px -1000px;width:81px;height:99px}.Pet-Rat-Shade{background-image:url(spritesmith-main-10.png);background-position:-1394px -1100px;width:81px;height:99px}.Pet-Rat-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-1394px -1200px;width:81px;height:99px}.Pet-Rat-White{background-image:url(spritesmith-main-10.png);background-position:0 -1300px;width:81px;height:99px}.Pet-Rat-Zombie{background-image:url(spritesmith-main-10.png);background-position:-82px -1300px;width:81px;height:99px}.Pet-Rock-Base{background-image:url(spritesmith-main-10.png);background-position:-164px -1300px;width:81px;height:99px}.Pet-Rock-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-246px -1300px;width:81px;height:99px}.Pet-Rock-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-328px -1300px;width:81px;height:99px}.Pet-Rock-Desert{background-image:url(spritesmith-main-10.png);background-position:-410px -1300px;width:81px;height:99px}.Pet-Rock-Golden{background-image:url(spritesmith-main-10.png);background-position:-492px -1300px;width:81px;height:99px}.Pet-Rock-Red{background-image:url(spritesmith-main-10.png);background-position:-574px -1300px;width:81px;height:99px}.Pet-Rock-Shade{background-image:url(spritesmith-main-10.png);background-position:-656px -1300px;width:81px;height:99px}.Pet-Rock-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-738px -1300px;width:81px;height:99px}.Pet-Rock-White{background-image:url(spritesmith-main-10.png);background-position:-820px -1300px;width:81px;height:99px}.Pet-Rock-Zombie{background-image:url(spritesmith-main-10.png);background-position:-902px -1300px;width:81px;height:99px}.Pet-Rooster-Base{background-image:url(spritesmith-main-10.png);background-position:-984px -1300px;width:81px;height:99px}.Pet-Rooster-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-1066px -1300px;width:81px;height:99px}.Pet-Rooster-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-1148px -1300px;width:81px;height:99px}.Pet-Rooster-Desert{background-image:url(spritesmith-main-10.png);background-position:-1230px -1300px;width:81px;height:99px}.Pet-Rooster-Golden{background-image:url(spritesmith-main-10.png);background-position:-1312px -1300px;width:81px;height:99px}.Pet-Rooster-Red{background-image:url(spritesmith-main-10.png);background-position:-1394px -1300px;width:81px;height:99px}.Pet-Rooster-Shade{background-image:url(spritesmith-main-10.png);background-position:-1476px 0;width:81px;height:99px}.Pet-Rooster-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-1476px -100px;width:81px;height:99px}.Pet-Rooster-White{background-image:url(spritesmith-main-10.png);background-position:-1476px -200px;width:81px;height:99px}.Pet-Rooster-Zombie{background-image:url(spritesmith-main-10.png);background-position:-1476px -300px;width:81px;height:99px}.Pet-Seahorse-Base{background-image:url(spritesmith-main-10.png);background-position:-1476px -400px;width:81px;height:99px}.Pet-Seahorse-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-1476px -500px;width:81px;height:99px}.Pet-Seahorse-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-1476px -600px;width:81px;height:99px}.Pet-Seahorse-Desert{background-image:url(spritesmith-main-10.png);background-position:-1476px -700px;width:81px;height:99px}.Pet-Seahorse-Golden{background-image:url(spritesmith-main-10.png);background-position:-1476px -800px;width:81px;height:99px}.Pet-Seahorse-Red{background-image:url(spritesmith-main-10.png);background-position:-1476px -900px;width:81px;height:99px}.Pet-Seahorse-Shade{background-image:url(spritesmith-main-10.png);background-position:-1476px -1000px;width:81px;height:99px}.Pet-Seahorse-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-1476px -1100px;width:81px;height:99px}.Pet-Seahorse-White{background-image:url(spritesmith-main-10.png);background-position:-1476px -1200px;width:81px;height:99px}.Pet-Seahorse-Zombie{background-image:url(spritesmith-main-10.png);background-position:-1476px -1300px;width:81px;height:99px}.Pet-Sheep-Base{background-image:url(spritesmith-main-10.png);background-position:0 -1400px;width:81px;height:99px}.Pet-Sheep-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-82px -1400px;width:81px;height:99px}.Pet-Sheep-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-164px -1400px;width:81px;height:99px}.Pet-Sheep-Desert{background-image:url(spritesmith-main-10.png);background-position:-246px -1400px;width:81px;height:99px}.Pet-Sheep-Golden{background-image:url(spritesmith-main-10.png);background-position:-328px -1400px;width:81px;height:99px}.Pet-Sheep-Red{background-image:url(spritesmith-main-10.png);background-position:-410px -1400px;width:81px;height:99px}.Pet-Sheep-Shade{background-image:url(spritesmith-main-10.png);background-position:-492px -1400px;width:81px;height:99px}.Pet-Sheep-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-574px -1400px;width:81px;height:99px}.Pet-Sheep-White{background-image:url(spritesmith-main-10.png);background-position:-656px -1400px;width:81px;height:99px}.Pet-Sheep-Zombie{background-image:url(spritesmith-main-10.png);background-position:-738px -1400px;width:81px;height:99px}.Pet-Slime-Base{background-image:url(spritesmith-main-10.png);background-position:-820px -1400px;width:81px;height:99px}.Pet-Slime-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-902px -1400px;width:81px;height:99px}.Pet-Slime-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-984px -1400px;width:81px;height:99px}.Pet-Slime-Desert{background-image:url(spritesmith-main-10.png);background-position:-1066px -1400px;width:81px;height:99px}.Pet-Slime-Golden{background-image:url(spritesmith-main-10.png);background-position:-1148px -1400px;width:81px;height:99px}.Pet-Slime-Red{background-image:url(spritesmith-main-10.png);background-position:-1230px -1400px;width:81px;height:99px}.Pet-Slime-Shade{background-image:url(spritesmith-main-10.png);background-position:-1312px -1400px;width:81px;height:99px}.Pet-Slime-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-1394px -1400px;width:81px;height:99px}.Pet-Slime-White{background-image:url(spritesmith-main-10.png);background-position:-1476px -1400px;width:81px;height:99px}.Pet-Slime-Zombie{background-image:url(spritesmith-main-10.png);background-position:-1558px 0;width:81px;height:99px}.Pet-Snake-Base{background-image:url(spritesmith-main-10.png);background-position:-1558px -100px;width:81px;height:99px}.Pet-Snake-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-1558px -200px;width:81px;height:99px}.Pet-Snake-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-1558px -300px;width:81px;height:99px}.Pet-Snake-Desert{background-image:url(spritesmith-main-10.png);background-position:-1558px -400px;width:81px;height:99px}.Pet-Snake-Golden{background-image:url(spritesmith-main-10.png);background-position:-1558px -500px;width:81px;height:99px}.Pet-Snake-Red{background-image:url(spritesmith-main-10.png);background-position:-1558px -600px;width:81px;height:99px}.Pet-Snake-Shade{background-image:url(spritesmith-main-10.png);background-position:-1558px -700px;width:81px;height:99px}.Pet-Snake-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-1558px -800px;width:81px;height:99px}.Pet-Snake-White{background-image:url(spritesmith-main-10.png);background-position:-1558px -900px;width:81px;height:99px}.Pet-Snake-Zombie{background-image:url(spritesmith-main-10.png);background-position:-1558px -1000px;width:81px;height:99px}.Pet-Spider-Base{background-image:url(spritesmith-main-10.png);background-position:-1558px -1100px;width:81px;height:99px}.Pet-Spider-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-1558px -1200px;width:81px;height:99px}.Pet-Spider-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-1558px -1300px;width:81px;height:99px}.Pet-Spider-Desert{background-image:url(spritesmith-main-10.png);background-position:-1558px -1400px;width:81px;height:99px}.Pet-Spider-Golden{background-image:url(spritesmith-main-10.png);background-position:0 -1500px;width:81px;height:99px}.Pet-Spider-Red{background-image:url(spritesmith-main-10.png);background-position:-82px -1500px;width:81px;height:99px}.Pet-Spider-Shade{background-image:url(spritesmith-main-10.png);background-position:-164px -1500px;width:81px;height:99px}.Pet-Spider-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-246px -1500px;width:81px;height:99px}.Pet-Spider-White{background-image:url(spritesmith-main-10.png);background-position:-328px -1500px;width:81px;height:99px}.Pet-Spider-Zombie{background-image:url(spritesmith-main-10.png);background-position:-410px -1500px;width:81px;height:99px}.Pet-TRex-Base{background-image:url(spritesmith-main-10.png);background-position:-492px -1500px;width:81px;height:99px}.Pet-TRex-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-574px -1500px;width:81px;height:99px}.Pet-TRex-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-656px -1500px;width:81px;height:99px}.Pet-TRex-Desert{background-image:url(spritesmith-main-10.png);background-position:-738px -1500px;width:81px;height:99px}.Pet-TRex-Golden{background-image:url(spritesmith-main-10.png);background-position:-820px -1500px;width:81px;height:99px}.Pet-TRex-Red{background-image:url(spritesmith-main-10.png);background-position:-902px -1500px;width:81px;height:99px}.Pet-TRex-Shade{background-image:url(spritesmith-main-10.png);background-position:-984px -1500px;width:81px;height:99px}.Pet-TRex-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-1066px -1500px;width:81px;height:99px}.Pet-TRex-White{background-image:url(spritesmith-main-10.png);background-position:-1148px -1500px;width:81px;height:99px}.Pet-TRex-Zombie{background-image:url(spritesmith-main-10.png);background-position:-1230px -1500px;width:81px;height:99px}.Pet-Tiger-Veteran{background-image:url(spritesmith-main-10.png);background-position:-1312px -1500px;width:81px;height:99px}.Pet-TigerCub-Base{background-image:url(spritesmith-main-10.png);background-position:-1394px -1500px;width:81px;height:99px}.Pet-TigerCub-CottonCandyBlue{background-image:url(spritesmith-main-10.png);background-position:-1476px -1500px;width:81px;height:99px}.Pet-TigerCub-CottonCandyPink{background-image:url(spritesmith-main-10.png);background-position:-1558px -1500px;width:81px;height:99px}.Pet-TigerCub-Desert{background-image:url(spritesmith-main-10.png);background-position:-1640px 0;width:81px;height:99px}.Pet-TigerCub-Golden{background-image:url(spritesmith-main-10.png);background-position:-1640px -100px;width:81px;height:99px}.Pet-TigerCub-Peppermint{background-image:url(spritesmith-main-10.png);background-position:-1640px -200px;width:81px;height:99px}.Pet-TigerCub-Red{background-image:url(spritesmith-main-10.png);background-position:-1640px -300px;width:81px;height:99px}.Pet-TigerCub-Shade{background-image:url(spritesmith-main-10.png);background-position:-1640px -400px;width:81px;height:99px}.Pet-TigerCub-Skeleton{background-image:url(spritesmith-main-10.png);background-position:-1640px -500px;width:81px;height:99px}.Pet-TigerCub-Spooky{background-image:url(spritesmith-main-10.png);background-position:-1640px -600px;width:81px;height:99px}.Pet-TigerCub-White{background-image:url(spritesmith-main-10.png);background-position:-1640px -700px;width:81px;height:99px}.Pet-TigerCub-Zombie{background-image:url(spritesmith-main-10.png);background-position:-1640px -800px;width:81px;height:99px}.Pet-Turkey-Base{background-image:url(spritesmith-main-10.png);background-position:-1640px -900px;width:81px;height:99px}.Pet-Turkey-Gilded{background-image:url(spritesmith-main-10.png);background-position:-1640px -1000px;width:81px;height:99px}.Pet-Whale-Base{background-image:url(spritesmith-main-10.png);background-position:-1640px -1100px;width:81px;height:99px}.Pet-Whale-CottonCandyBlue{background-image:url(spritesmith-main-11.png);background-position:-82px 0;width:81px;height:99px}.Pet-Whale-CottonCandyPink{background-image:url(spritesmith-main-11.png);background-position:-164px -300px;width:81px;height:99px}.Pet-Whale-Desert{background-image:url(spritesmith-main-11.png);background-position:-164px 0;width:81px;height:99px}.Pet-Whale-Golden{background-image:url(spritesmith-main-11.png);background-position:0 -100px;width:81px;height:99px}.Pet-Whale-Red{background-image:url(spritesmith-main-11.png);background-position:-82px -100px;width:81px;height:99px}.Pet-Whale-Shade{background-image:url(spritesmith-main-11.png);background-position:-164px -100px;width:81px;height:99px}.Pet-Whale-Skeleton{background-image:url(spritesmith-main-11.png);background-position:-246px 0;width:81px;height:99px}.Pet-Whale-White{background-image:url(spritesmith-main-11.png);background-position:-246px -100px;width:81px;height:99px}.Pet-Whale-Zombie{background-image:url(spritesmith-main-11.png);background-position:0 -200px;width:81px;height:99px}.Pet-Wolf-Base{background-image:url(spritesmith-main-11.png);background-position:-82px -200px;width:81px;height:99px}.Pet-Wolf-CottonCandyBlue{background-image:url(spritesmith-main-11.png);background-position:-164px -200px;width:81px;height:99px}.Pet-Wolf-CottonCandyPink{background-image:url(spritesmith-main-11.png);background-position:-246px -200px;width:81px;height:99px}.Pet-Wolf-Desert{background-image:url(spritesmith-main-11.png);background-position:-328px 0;width:81px;height:99px}.Pet-Wolf-Golden{background-image:url(spritesmith-main-11.png);background-position:-328px -100px;width:81px;height:99px}.Pet-Wolf-Peppermint{background-image:url(spritesmith-main-11.png);background-position:-328px -200px;width:81px;height:99px}.Pet-Wolf-Red{background-image:url(spritesmith-main-11.png);background-position:0 -300px;width:81px;height:99px}.Pet-Wolf-Shade{background-image:url(spritesmith-main-11.png);background-position:-82px -300px;width:81px;height:99px}.Pet-Wolf-Skeleton{background-image:url(spritesmith-main-11.png);background-position:0 0;width:81px;height:99px}.Pet-Wolf-Spooky{background-image:url(spritesmith-main-11.png);background-position:-246px -300px;width:81px;height:99px}.Pet-Wolf-Veteran{background-image:url(spritesmith-main-11.png);background-position:-328px -300px;width:81px;height:99px}.Pet-Wolf-White{background-image:url(spritesmith-main-11.png);background-position:-410px 0;width:81px;height:99px}.Pet-Wolf-Zombie{background-image:url(spritesmith-main-11.png);background-position:-410px -100px;width:81px;height:99px}.Pet_HatchingPotion_Base{background-image:url(spritesmith-main-11.png);background-position:-410px -252px;width:48px;height:51px}.Pet_HatchingPotion_CottonCandyBlue{background-image:url(spritesmith-main-11.png);background-position:-147px -400px;width:48px;height:51px}.Pet_HatchingPotion_CottonCandyPink{background-image:url(spritesmith-main-11.png);background-position:-410px -304px;width:48px;height:51px}.Pet_HatchingPotion_Desert{background-image:url(spritesmith-main-11.png);background-position:0 -400px;width:48px;height:51px}.Pet_HatchingPotion_Golden{background-image:url(spritesmith-main-11.png);background-position:-49px -400px;width:48px;height:51px}.Pet_HatchingPotion_Peppermint{background-image:url(spritesmith-main-11.png);background-position:-98px -400px;width:48px;height:51px}.Pet_HatchingPotion_Red{background-image:url(spritesmith-main-11.png);background-position:-410px -200px;width:48px;height:51px}.Pet_HatchingPotion_Shade{background-image:url(spritesmith-main-11.png);background-position:-196px -400px;width:48px;height:51px}.Pet_HatchingPotion_Skeleton{background-image:url(spritesmith-main-11.png);background-position:-245px -400px;width:48px;height:51px}.Pet_HatchingPotion_Spooky{background-image:url(spritesmith-main-11.png);background-position:-294px -400px;width:48px;height:51px}.Pet_HatchingPotion_White{background-image:url(spritesmith-main-11.png);background-position:-343px -400px;width:48px;height:51px}.Pet_HatchingPotion_Zombie{background-image:url(spritesmith-main-11.png);background-position:-392px -400px;width:48px;height:51px}.hair_base_1_porange{background-image:url(spritesmith-main-2.png);background-position:-91px 0;width:90px;height:90px}.customize-option.hair_base_1_porange{background-image:url(spritesmith-main-2.png);background-position:-116px -15px;width:60px;height:60px}.hair_base_1_porange2{background-image:url(spritesmith-main-2.png);background-position:-728px -1092px;width:90px;height:90px}.customize-option.hair_base_1_porange2{background-image:url(spritesmith-main-2.png);background-position:-753px -1107px;width:60px;height:60px}.hair_base_1_ppink{background-image:url(spritesmith-main-2.png);background-position:0 -91px;width:90px;height:90px}.customize-option.hair_base_1_ppink{background-image:url(spritesmith-main-2.png);background-position:-25px -106px;width:60px;height:60px}.hair_base_1_ppink2{background-image:url(spritesmith-main-2.png);background-position:-91px -91px;width:90px;height:90px}.customize-option.hair_base_1_ppink2{background-image:url(spritesmith-main-2.png);background-position:-116px -106px;width:60px;height:60px}.hair_base_1_ppurple{background-image:url(spritesmith-main-2.png);background-position:-182px 0;width:90px;height:90px}.customize-option.hair_base_1_ppurple{background-image:url(spritesmith-main-2.png);background-position:-207px -15px;width:60px;height:60px}.hair_base_1_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-182px -91px;width:90px;height:90px}.customize-option.hair_base_1_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-207px -106px;width:60px;height:60px}.hair_base_1_pumpkin{background-image:url(spritesmith-main-2.png);background-position:0 -182px;width:90px;height:90px}.customize-option.hair_base_1_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-25px -197px;width:60px;height:60px}.hair_base_1_purple{background-image:url(spritesmith-main-2.png);background-position:-91px -182px;width:90px;height:90px}.customize-option.hair_base_1_purple{background-image:url(spritesmith-main-2.png);background-position:-116px -197px;width:60px;height:60px}.hair_base_1_pyellow{background-image:url(spritesmith-main-2.png);background-position:-182px -182px;width:90px;height:90px}.customize-option.hair_base_1_pyellow{background-image:url(spritesmith-main-2.png);background-position:-207px -197px;width:60px;height:60px}.hair_base_1_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-273px 0;width:90px;height:90px}.customize-option.hair_base_1_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-298px -15px;width:60px;height:60px}.hair_base_1_rainbow{background-image:url(spritesmith-main-2.png);background-position:-273px -91px;width:90px;height:90px}.customize-option.hair_base_1_rainbow{background-image:url(spritesmith-main-2.png);background-position:-298px -106px;width:60px;height:60px}.hair_base_1_red{background-image:url(spritesmith-main-2.png);background-position:-273px -182px;width:90px;height:90px}.customize-option.hair_base_1_red{background-image:url(spritesmith-main-2.png);background-position:-298px -197px;width:60px;height:60px}.hair_base_1_snowy{background-image:url(spritesmith-main-2.png);background-position:0 -273px;width:90px;height:90px}.customize-option.hair_base_1_snowy{background-image:url(spritesmith-main-2.png);background-position:-25px -288px;width:60px;height:60px}.hair_base_1_white{background-image:url(spritesmith-main-2.png);background-position:-91px -273px;width:90px;height:90px}.customize-option.hair_base_1_white{background-image:url(spritesmith-main-2.png);background-position:-116px -288px;width:60px;height:60px}.hair_base_1_winternight{background-image:url(spritesmith-main-2.png);background-position:-182px -273px;width:90px;height:90px}.customize-option.hair_base_1_winternight{background-image:url(spritesmith-main-2.png);background-position:-207px -288px;width:60px;height:60px}.hair_base_1_winterstar{background-image:url(spritesmith-main-2.png);background-position:-273px -273px;width:90px;height:90px}.customize-option.hair_base_1_winterstar{background-image:url(spritesmith-main-2.png);background-position:-298px -288px;width:60px;height:60px}.hair_base_1_yellow{background-image:url(spritesmith-main-2.png);background-position:-364px 0;width:90px;height:90px}.customize-option.hair_base_1_yellow{background-image:url(spritesmith-main-2.png);background-position:-389px -15px;width:60px;height:60px}.hair_base_1_zombie{background-image:url(spritesmith-main-2.png);background-position:-364px -91px;width:90px;height:90px}.customize-option.hair_base_1_zombie{background-image:url(spritesmith-main-2.png);background-position:-389px -106px;width:60px;height:60px}.hair_base_2_TRUred{background-image:url(spritesmith-main-2.png);background-position:-364px -182px;width:90px;height:90px}.customize-option.hair_base_2_TRUred{background-image:url(spritesmith-main-2.png);background-position:-389px -197px;width:60px;height:60px}.hair_base_2_aurora{background-image:url(spritesmith-main-2.png);background-position:-364px -273px;width:90px;height:90px}.customize-option.hair_base_2_aurora{background-image:url(spritesmith-main-2.png);background-position:-389px -288px;width:60px;height:60px}.hair_base_2_black{background-image:url(spritesmith-main-2.png);background-position:0 -364px;width:90px;height:90px}.customize-option.hair_base_2_black{background-image:url(spritesmith-main-2.png);background-position:-25px -379px;width:60px;height:60px}.hair_base_2_blond{background-image:url(spritesmith-main-2.png);background-position:-91px -364px;width:90px;height:90px}.customize-option.hair_base_2_blond{background-image:url(spritesmith-main-2.png);background-position:-116px -379px;width:60px;height:60px}.hair_base_2_blue{background-image:url(spritesmith-main-2.png);background-position:-182px -364px;width:90px;height:90px}.customize-option.hair_base_2_blue{background-image:url(spritesmith-main-2.png);background-position:-207px -379px;width:60px;height:60px}.hair_base_2_brown{background-image:url(spritesmith-main-2.png);background-position:-273px -364px;width:90px;height:90px}.customize-option.hair_base_2_brown{background-image:url(spritesmith-main-2.png);background-position:-298px -379px;width:60px;height:60px}.hair_base_2_candycane{background-image:url(spritesmith-main-2.png);background-position:-364px -364px;width:90px;height:90px}.customize-option.hair_base_2_candycane{background-image:url(spritesmith-main-2.png);background-position:-389px -379px;width:60px;height:60px}.hair_base_2_candycorn{background-image:url(spritesmith-main-2.png);background-position:-455px 0;width:90px;height:90px}.customize-option.hair_base_2_candycorn{background-image:url(spritesmith-main-2.png);background-position:-480px -15px;width:60px;height:60px}.hair_base_2_festive{background-image:url(spritesmith-main-2.png);background-position:-455px -91px;width:90px;height:90px}.customize-option.hair_base_2_festive{background-image:url(spritesmith-main-2.png);background-position:-480px -106px;width:60px;height:60px}.hair_base_2_frost{background-image:url(spritesmith-main-2.png);background-position:-455px -182px;width:90px;height:90px}.customize-option.hair_base_2_frost{background-image:url(spritesmith-main-2.png);background-position:-480px -197px;width:60px;height:60px}.hair_base_2_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-455px -273px;width:90px;height:90px}.customize-option.hair_base_2_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-480px -288px;width:60px;height:60px}.hair_base_2_green{background-image:url(spritesmith-main-2.png);background-position:-455px -364px;width:90px;height:90px}.customize-option.hair_base_2_green{background-image:url(spritesmith-main-2.png);background-position:-480px -379px;width:60px;height:60px}.hair_base_2_halloween{background-image:url(spritesmith-main-2.png);background-position:0 -455px;width:90px;height:90px}.customize-option.hair_base_2_halloween{background-image:url(spritesmith-main-2.png);background-position:-25px -470px;width:60px;height:60px}.hair_base_2_holly{background-image:url(spritesmith-main-2.png);background-position:-91px -455px;width:90px;height:90px}.customize-option.hair_base_2_holly{background-image:url(spritesmith-main-2.png);background-position:-116px -470px;width:60px;height:60px}.hair_base_2_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-182px -455px;width:90px;height:90px}.customize-option.hair_base_2_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-207px -470px;width:60px;height:60px}.hair_base_2_midnight{background-image:url(spritesmith-main-2.png);background-position:-273px -455px;width:90px;height:90px}.customize-option.hair_base_2_midnight{background-image:url(spritesmith-main-2.png);background-position:-298px -470px;width:60px;height:60px}.hair_base_2_pblue{background-image:url(spritesmith-main-2.png);background-position:-364px -455px;width:90px;height:90px}.customize-option.hair_base_2_pblue{background-image:url(spritesmith-main-2.png);background-position:-389px -470px;width:60px;height:60px}.hair_base_2_pblue2{background-image:url(spritesmith-main-2.png);background-position:-455px -455px;width:90px;height:90px}.customize-option.hair_base_2_pblue2{background-image:url(spritesmith-main-2.png);background-position:-480px -470px;width:60px;height:60px}.hair_base_2_peppermint{background-image:url(spritesmith-main-2.png);background-position:-546px 0;width:90px;height:90px}.customize-option.hair_base_2_peppermint{background-image:url(spritesmith-main-2.png);background-position:-571px -15px;width:60px;height:60px}.hair_base_2_pgreen{background-image:url(spritesmith-main-2.png);background-position:-546px -91px;width:90px;height:90px}.customize-option.hair_base_2_pgreen{background-image:url(spritesmith-main-2.png);background-position:-571px -106px;width:60px;height:60px}.hair_base_2_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-546px -182px;width:90px;height:90px}.customize-option.hair_base_2_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-571px -197px;width:60px;height:60px}.hair_base_2_porange{background-image:url(spritesmith-main-2.png);background-position:-546px -273px;width:90px;height:90px}.customize-option.hair_base_2_porange{background-image:url(spritesmith-main-2.png);background-position:-571px -288px;width:60px;height:60px}.hair_base_2_porange2{background-image:url(spritesmith-main-2.png);background-position:-546px -364px;width:90px;height:90px}.customize-option.hair_base_2_porange2{background-image:url(spritesmith-main-2.png);background-position:-571px -379px;width:60px;height:60px}.hair_base_2_ppink{background-image:url(spritesmith-main-2.png);background-position:-546px -455px;width:90px;height:90px}.customize-option.hair_base_2_ppink{background-image:url(spritesmith-main-2.png);background-position:-571px -470px;width:60px;height:60px}.hair_base_2_ppink2{background-image:url(spritesmith-main-2.png);background-position:0 -546px;width:90px;height:90px}.customize-option.hair_base_2_ppink2{background-image:url(spritesmith-main-2.png);background-position:-25px -561px;width:60px;height:60px}.hair_base_2_ppurple{background-image:url(spritesmith-main-2.png);background-position:-91px -546px;width:90px;height:90px}.customize-option.hair_base_2_ppurple{background-image:url(spritesmith-main-2.png);background-position:-116px -561px;width:60px;height:60px}.hair_base_2_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-182px -546px;width:90px;height:90px}.customize-option.hair_base_2_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-207px -561px;width:60px;height:60px}.hair_base_2_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-273px -546px;width:90px;height:90px}.customize-option.hair_base_2_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-298px -561px;width:60px;height:60px}.hair_base_2_purple{background-image:url(spritesmith-main-2.png);background-position:-364px -546px;width:90px;height:90px}.customize-option.hair_base_2_purple{background-image:url(spritesmith-main-2.png);background-position:-389px -561px;width:60px;height:60px}.hair_base_2_pyellow{background-image:url(spritesmith-main-2.png);background-position:-455px -546px;width:90px;height:90px}.customize-option.hair_base_2_pyellow{background-image:url(spritesmith-main-2.png);background-position:-480px -561px;width:60px;height:60px}.hair_base_2_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-546px -546px;width:90px;height:90px}.customize-option.hair_base_2_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-571px -561px;width:60px;height:60px}.hair_base_2_rainbow{background-image:url(spritesmith-main-2.png);background-position:-637px 0;width:90px;height:90px}.customize-option.hair_base_2_rainbow{background-image:url(spritesmith-main-2.png);background-position:-662px -15px;width:60px;height:60px}.hair_base_2_red{background-image:url(spritesmith-main-2.png);background-position:-637px -91px;width:90px;height:90px}.customize-option.hair_base_2_red{background-image:url(spritesmith-main-2.png);background-position:-662px -106px;width:60px;height:60px}.hair_base_2_snowy{background-image:url(spritesmith-main-2.png);background-position:-637px -182px;width:90px;height:90px}.customize-option.hair_base_2_snowy{background-image:url(spritesmith-main-2.png);background-position:-662px -197px;width:60px;height:60px}.hair_base_2_white{background-image:url(spritesmith-main-2.png);background-position:-637px -273px;width:90px;height:90px}.customize-option.hair_base_2_white{background-image:url(spritesmith-main-2.png);background-position:-662px -288px;width:60px;height:60px}.hair_base_2_winternight{background-image:url(spritesmith-main-2.png);background-position:-637px -364px;width:90px;height:90px}.customize-option.hair_base_2_winternight{background-image:url(spritesmith-main-2.png);background-position:-662px -379px;width:60px;height:60px}.hair_base_2_winterstar{background-image:url(spritesmith-main-2.png);background-position:-637px -455px;width:90px;height:90px}.customize-option.hair_base_2_winterstar{background-image:url(spritesmith-main-2.png);background-position:-662px -470px;width:60px;height:60px}.hair_base_2_yellow{background-image:url(spritesmith-main-2.png);background-position:-637px -546px;width:90px;height:90px}.customize-option.hair_base_2_yellow{background-image:url(spritesmith-main-2.png);background-position:-662px -561px;width:60px;height:60px}.hair_base_2_zombie{background-image:url(spritesmith-main-2.png);background-position:0 -637px;width:90px;height:90px}.customize-option.hair_base_2_zombie{background-image:url(spritesmith-main-2.png);background-position:-25px -652px;width:60px;height:60px}.hair_base_3_TRUred{background-image:url(spritesmith-main-2.png);background-position:-91px -637px;width:90px;height:90px}.customize-option.hair_base_3_TRUred{background-image:url(spritesmith-main-2.png);background-position:-116px -652px;width:60px;height:60px}.hair_base_3_aurora{background-image:url(spritesmith-main-2.png);background-position:-182px -637px;width:90px;height:90px}.customize-option.hair_base_3_aurora{background-image:url(spritesmith-main-2.png);background-position:-207px -652px;width:60px;height:60px}.hair_base_3_black{background-image:url(spritesmith-main-2.png);background-position:-273px -637px;width:90px;height:90px}.customize-option.hair_base_3_black{background-image:url(spritesmith-main-2.png);background-position:-298px -652px;width:60px;height:60px}.hair_base_3_blond{background-image:url(spritesmith-main-2.png);background-position:-364px -637px;width:90px;height:90px}.customize-option.hair_base_3_blond{background-image:url(spritesmith-main-2.png);background-position:-389px -652px;width:60px;height:60px}.hair_base_3_blue{background-image:url(spritesmith-main-2.png);background-position:-455px -637px;width:90px;height:90px}.customize-option.hair_base_3_blue{background-image:url(spritesmith-main-2.png);background-position:-480px -652px;width:60px;height:60px}.hair_base_3_brown{background-image:url(spritesmith-main-2.png);background-position:-546px -637px;width:90px;height:90px}.customize-option.hair_base_3_brown{background-image:url(spritesmith-main-2.png);background-position:-571px -652px;width:60px;height:60px}.hair_base_3_candycane{background-image:url(spritesmith-main-2.png);background-position:-637px -637px;width:90px;height:90px}.customize-option.hair_base_3_candycane{background-image:url(spritesmith-main-2.png);background-position:-662px -652px;width:60px;height:60px}.hair_base_3_candycorn{background-image:url(spritesmith-main-2.png);background-position:-728px 0;width:90px;height:90px}.customize-option.hair_base_3_candycorn{background-image:url(spritesmith-main-2.png);background-position:-753px -15px;width:60px;height:60px}.hair_base_3_festive{background-image:url(spritesmith-main-2.png);background-position:-728px -91px;width:90px;height:90px}.customize-option.hair_base_3_festive{background-image:url(spritesmith-main-2.png);background-position:-753px -106px;width:60px;height:60px}.hair_base_3_frost{background-image:url(spritesmith-main-2.png);background-position:-728px -182px;width:90px;height:90px}.customize-option.hair_base_3_frost{background-image:url(spritesmith-main-2.png);background-position:-753px -197px;width:60px;height:60px}.hair_base_3_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-728px -273px;width:90px;height:90px}.customize-option.hair_base_3_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-753px -288px;width:60px;height:60px}.hair_base_3_green{background-image:url(spritesmith-main-2.png);background-position:-728px -364px;width:90px;height:90px}.customize-option.hair_base_3_green{background-image:url(spritesmith-main-2.png);background-position:-753px -379px;width:60px;height:60px}.hair_base_3_halloween{background-image:url(spritesmith-main-2.png);background-position:-728px -455px;width:90px;height:90px}.customize-option.hair_base_3_halloween{background-image:url(spritesmith-main-2.png);background-position:-753px -470px;width:60px;height:60px}.hair_base_3_holly{background-image:url(spritesmith-main-2.png);background-position:-728px -546px;width:90px;height:90px}.customize-option.hair_base_3_holly{background-image:url(spritesmith-main-2.png);background-position:-753px -561px;width:60px;height:60px}.hair_base_3_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-728px -637px;width:90px;height:90px}.customize-option.hair_base_3_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-753px -652px;width:60px;height:60px}.hair_base_3_midnight{background-image:url(spritesmith-main-2.png);background-position:0 -728px;width:90px;height:90px}.customize-option.hair_base_3_midnight{background-image:url(spritesmith-main-2.png);background-position:-25px -743px;width:60px;height:60px}.hair_base_3_pblue{background-image:url(spritesmith-main-2.png);background-position:-91px -728px;width:90px;height:90px}.customize-option.hair_base_3_pblue{background-image:url(spritesmith-main-2.png);background-position:-116px -743px;width:60px;height:60px}.hair_base_3_pblue2{background-image:url(spritesmith-main-2.png);background-position:-182px -728px;width:90px;height:90px}.customize-option.hair_base_3_pblue2{background-image:url(spritesmith-main-2.png);background-position:-207px -743px;width:60px;height:60px}.hair_base_3_peppermint{background-image:url(spritesmith-main-2.png);background-position:-273px -728px;width:90px;height:90px}.customize-option.hair_base_3_peppermint{background-image:url(spritesmith-main-2.png);background-position:-298px -743px;width:60px;height:60px}.hair_base_3_pgreen{background-image:url(spritesmith-main-2.png);background-position:-364px -728px;width:90px;height:90px}.customize-option.hair_base_3_pgreen{background-image:url(spritesmith-main-2.png);background-position:-389px -743px;width:60px;height:60px}.hair_base_3_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-455px -728px;width:90px;height:90px}.customize-option.hair_base_3_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-480px -743px;width:60px;height:60px}.hair_base_3_porange{background-image:url(spritesmith-main-2.png);background-position:-546px -728px;width:90px;height:90px}.customize-option.hair_base_3_porange{background-image:url(spritesmith-main-2.png);background-position:-571px -743px;width:60px;height:60px}.hair_base_3_porange2{background-image:url(spritesmith-main-2.png);background-position:-637px -728px;width:90px;height:90px}.customize-option.hair_base_3_porange2{background-image:url(spritesmith-main-2.png);background-position:-662px -743px;width:60px;height:60px}.hair_base_3_ppink{background-image:url(spritesmith-main-2.png);background-position:-728px -728px;width:90px;height:90px}.customize-option.hair_base_3_ppink{background-image:url(spritesmith-main-2.png);background-position:-753px -743px;width:60px;height:60px}.hair_base_3_ppink2{background-image:url(spritesmith-main-2.png);background-position:-819px 0;width:90px;height:90px}.customize-option.hair_base_3_ppink2{background-image:url(spritesmith-main-2.png);background-position:-844px -15px;width:60px;height:60px}.hair_base_3_ppurple{background-image:url(spritesmith-main-2.png);background-position:-819px -91px;width:90px;height:90px}.customize-option.hair_base_3_ppurple{background-image:url(spritesmith-main-2.png);background-position:-844px -106px;width:60px;height:60px}.hair_base_3_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-819px -182px;width:90px;height:90px}.customize-option.hair_base_3_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-844px -197px;width:60px;height:60px}.hair_base_3_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-819px -273px;width:90px;height:90px}.customize-option.hair_base_3_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-844px -288px;width:60px;height:60px}.hair_base_3_purple{background-image:url(spritesmith-main-2.png);background-position:-819px -364px;width:90px;height:90px}.customize-option.hair_base_3_purple{background-image:url(spritesmith-main-2.png);background-position:-844px -379px;width:60px;height:60px}.hair_base_3_pyellow{background-image:url(spritesmith-main-2.png);background-position:-819px -455px;width:90px;height:90px}.customize-option.hair_base_3_pyellow{background-image:url(spritesmith-main-2.png);background-position:-844px -470px;width:60px;height:60px}.hair_base_3_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-819px -546px;width:90px;height:90px}.customize-option.hair_base_3_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-844px -561px;width:60px;height:60px}.hair_base_3_rainbow{background-image:url(spritesmith-main-2.png);background-position:-819px -637px;width:90px;height:90px}.customize-option.hair_base_3_rainbow{background-image:url(spritesmith-main-2.png);background-position:-844px -652px;width:60px;height:60px}.hair_base_3_red{background-image:url(spritesmith-main-2.png);background-position:-819px -728px;width:90px;height:90px}.customize-option.hair_base_3_red{background-image:url(spritesmith-main-2.png);background-position:-844px -743px;width:60px;height:60px}.hair_base_3_snowy{background-image:url(spritesmith-main-2.png);background-position:0 -819px;width:90px;height:90px}.customize-option.hair_base_3_snowy{background-image:url(spritesmith-main-2.png);background-position:-25px -834px;width:60px;height:60px}.hair_base_3_white{background-image:url(spritesmith-main-2.png);background-position:-91px -819px;width:90px;height:90px}.customize-option.hair_base_3_white{background-image:url(spritesmith-main-2.png);background-position:-116px -834px;width:60px;height:60px}.hair_base_3_winternight{background-image:url(spritesmith-main-2.png);background-position:-182px -819px;width:90px;height:90px}.customize-option.hair_base_3_winternight{background-image:url(spritesmith-main-2.png);background-position:-207px -834px;width:60px;height:60px}.hair_base_3_winterstar{background-image:url(spritesmith-main-2.png);background-position:-273px -819px;width:90px;height:90px}.customize-option.hair_base_3_winterstar{background-image:url(spritesmith-main-2.png);background-position:-298px -834px;width:60px;height:60px}.hair_base_3_yellow{background-image:url(spritesmith-main-2.png);background-position:-364px -819px;width:90px;height:90px}.customize-option.hair_base_3_yellow{background-image:url(spritesmith-main-2.png);background-position:-389px -834px;width:60px;height:60px}.hair_base_3_zombie{background-image:url(spritesmith-main-2.png);background-position:-455px -819px;width:90px;height:90px}.customize-option.hair_base_3_zombie{background-image:url(spritesmith-main-2.png);background-position:-480px -834px;width:60px;height:60px}.hair_base_4_TRUred{background-image:url(spritesmith-main-2.png);background-position:-546px -819px;width:90px;height:90px}.customize-option.hair_base_4_TRUred{background-image:url(spritesmith-main-2.png);background-position:-571px -834px;width:60px;height:60px}.hair_base_4_aurora{background-image:url(spritesmith-main-2.png);background-position:-637px -819px;width:90px;height:90px}.customize-option.hair_base_4_aurora{background-image:url(spritesmith-main-2.png);background-position:-662px -834px;width:60px;height:60px}.hair_base_4_black{background-image:url(spritesmith-main-2.png);background-position:-728px -819px;width:90px;height:90px}.customize-option.hair_base_4_black{background-image:url(spritesmith-main-2.png);background-position:-753px -834px;width:60px;height:60px}.hair_base_4_blond{background-image:url(spritesmith-main-2.png);background-position:-819px -819px;width:90px;height:90px}.customize-option.hair_base_4_blond{background-image:url(spritesmith-main-2.png);background-position:-844px -834px;width:60px;height:60px}.hair_base_4_blue{background-image:url(spritesmith-main-2.png);background-position:-910px 0;width:90px;height:90px}.customize-option.hair_base_4_blue{background-image:url(spritesmith-main-2.png);background-position:-935px -15px;width:60px;height:60px}.hair_base_4_brown{background-image:url(spritesmith-main-2.png);background-position:-910px -91px;width:90px;height:90px}.customize-option.hair_base_4_brown{background-image:url(spritesmith-main-2.png);background-position:-935px -106px;width:60px;height:60px}.hair_base_4_candycane{background-image:url(spritesmith-main-2.png);background-position:-910px -182px;width:90px;height:90px}.customize-option.hair_base_4_candycane{background-image:url(spritesmith-main-2.png);background-position:-935px -197px;width:60px;height:60px}.hair_base_4_candycorn{background-image:url(spritesmith-main-2.png);background-position:-910px -273px;width:90px;height:90px}.customize-option.hair_base_4_candycorn{background-image:url(spritesmith-main-2.png);background-position:-935px -288px;width:60px;height:60px}.hair_base_4_festive{background-image:url(spritesmith-main-2.png);background-position:-910px -364px;width:90px;height:90px}.customize-option.hair_base_4_festive{background-image:url(spritesmith-main-2.png);background-position:-935px -379px;width:60px;height:60px}.hair_base_4_frost{background-image:url(spritesmith-main-2.png);background-position:-910px -455px;width:90px;height:90px}.customize-option.hair_base_4_frost{background-image:url(spritesmith-main-2.png);background-position:-935px -470px;width:60px;height:60px}.hair_base_4_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-910px -546px;width:90px;height:90px}.customize-option.hair_base_4_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-935px -561px;width:60px;height:60px}.hair_base_4_green{background-image:url(spritesmith-main-2.png);background-position:-910px -637px;width:90px;height:90px}.customize-option.hair_base_4_green{background-image:url(spritesmith-main-2.png);background-position:-935px -652px;width:60px;height:60px}.hair_base_4_halloween{background-image:url(spritesmith-main-2.png);background-position:-910px -728px;width:90px;height:90px}.customize-option.hair_base_4_halloween{background-image:url(spritesmith-main-2.png);background-position:-935px -743px;width:60px;height:60px}.hair_base_4_holly{background-image:url(spritesmith-main-2.png);background-position:-910px -819px;width:90px;height:90px}.customize-option.hair_base_4_holly{background-image:url(spritesmith-main-2.png);background-position:-935px -834px;width:60px;height:60px}.hair_base_4_hollygreen{background-image:url(spritesmith-main-2.png);background-position:0 -910px;width:90px;height:90px}.customize-option.hair_base_4_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-25px -925px;width:60px;height:60px}.hair_base_4_midnight{background-image:url(spritesmith-main-2.png);background-position:-91px -910px;width:90px;height:90px}.customize-option.hair_base_4_midnight{background-image:url(spritesmith-main-2.png);background-position:-116px -925px;width:60px;height:60px}.hair_base_4_pblue{background-image:url(spritesmith-main-2.png);background-position:-182px -910px;width:90px;height:90px}.customize-option.hair_base_4_pblue{background-image:url(spritesmith-main-2.png);background-position:-207px -925px;width:60px;height:60px}.hair_base_4_pblue2{background-image:url(spritesmith-main-2.png);background-position:-273px -910px;width:90px;height:90px}.customize-option.hair_base_4_pblue2{background-image:url(spritesmith-main-2.png);background-position:-298px -925px;width:60px;height:60px}.hair_base_4_peppermint{background-image:url(spritesmith-main-2.png);background-position:-364px -910px;width:90px;height:90px}.customize-option.hair_base_4_peppermint{background-image:url(spritesmith-main-2.png);background-position:-389px -925px;width:60px;height:60px}.hair_base_4_pgreen{background-image:url(spritesmith-main-2.png);background-position:-455px -910px;width:90px;height:90px}.customize-option.hair_base_4_pgreen{background-image:url(spritesmith-main-2.png);background-position:-480px -925px;width:60px;height:60px}.hair_base_4_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-546px -910px;width:90px;height:90px}.customize-option.hair_base_4_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-571px -925px;width:60px;height:60px}.hair_base_4_porange{background-image:url(spritesmith-main-2.png);background-position:-637px -910px;width:90px;height:90px}.customize-option.hair_base_4_porange{background-image:url(spritesmith-main-2.png);background-position:-662px -925px;width:60px;height:60px}.hair_base_4_porange2{background-image:url(spritesmith-main-2.png);background-position:-728px -910px;width:90px;height:90px}.customize-option.hair_base_4_porange2{background-image:url(spritesmith-main-2.png);background-position:-753px -925px;width:60px;height:60px}.hair_base_4_ppink{background-image:url(spritesmith-main-2.png);background-position:-819px -910px;width:90px;height:90px}.customize-option.hair_base_4_ppink{background-image:url(spritesmith-main-2.png);background-position:-844px -925px;width:60px;height:60px}.hair_base_4_ppink2{background-image:url(spritesmith-main-2.png);background-position:-910px -910px;width:90px;height:90px}.customize-option.hair_base_4_ppink2{background-image:url(spritesmith-main-2.png);background-position:-935px -925px;width:60px;height:60px}.hair_base_4_ppurple{background-image:url(spritesmith-main-2.png);background-position:-1001px 0;width:90px;height:90px}.customize-option.hair_base_4_ppurple{background-image:url(spritesmith-main-2.png);background-position:-1026px -15px;width:60px;height:60px}.hair_base_4_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-1001px -91px;width:90px;height:90px}.customize-option.hair_base_4_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-1026px -106px;width:60px;height:60px}.hair_base_4_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-1001px -182px;width:90px;height:90px}.customize-option.hair_base_4_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-1026px -197px;width:60px;height:60px}.hair_base_4_purple{background-image:url(spritesmith-main-2.png);background-position:-1001px -273px;width:90px;height:90px}.customize-option.hair_base_4_purple{background-image:url(spritesmith-main-2.png);background-position:-1026px -288px;width:60px;height:60px}.hair_base_4_pyellow{background-image:url(spritesmith-main-2.png);background-position:-1001px -364px;width:90px;height:90px}.customize-option.hair_base_4_pyellow{background-image:url(spritesmith-main-2.png);background-position:-1026px -379px;width:60px;height:60px}.hair_base_4_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-1001px -455px;width:90px;height:90px}.customize-option.hair_base_4_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-1026px -470px;width:60px;height:60px}.hair_base_4_rainbow{background-image:url(spritesmith-main-2.png);background-position:-1001px -546px;width:90px;height:90px}.customize-option.hair_base_4_rainbow{background-image:url(spritesmith-main-2.png);background-position:-1026px -561px;width:60px;height:60px}.hair_base_4_red{background-image:url(spritesmith-main-2.png);background-position:-1001px -637px;width:90px;height:90px}.customize-option.hair_base_4_red{background-image:url(spritesmith-main-2.png);background-position:-1026px -652px;width:60px;height:60px}.hair_base_4_snowy{background-image:url(spritesmith-main-2.png);background-position:-1001px -728px;width:90px;height:90px}.customize-option.hair_base_4_snowy{background-image:url(spritesmith-main-2.png);background-position:-1026px -743px;width:60px;height:60px}.hair_base_4_white{background-image:url(spritesmith-main-2.png);background-position:-1001px -819px;width:90px;height:90px}.customize-option.hair_base_4_white{background-image:url(spritesmith-main-2.png);background-position:-1026px -834px;width:60px;height:60px}.hair_base_4_winternight{background-image:url(spritesmith-main-2.png);background-position:-1001px -910px;width:90px;height:90px}.customize-option.hair_base_4_winternight{background-image:url(spritesmith-main-2.png);background-position:-1026px -925px;width:60px;height:60px}.hair_base_4_winterstar{background-image:url(spritesmith-main-2.png);background-position:0 -1001px;width:90px;height:90px}.customize-option.hair_base_4_winterstar{background-image:url(spritesmith-main-2.png);background-position:-25px -1016px;width:60px;height:60px}.hair_base_4_yellow{background-image:url(spritesmith-main-2.png);background-position:-91px -1001px;width:90px;height:90px}.customize-option.hair_base_4_yellow{background-image:url(spritesmith-main-2.png);background-position:-116px -1016px;width:60px;height:60px}.hair_base_4_zombie{background-image:url(spritesmith-main-2.png);background-position:-182px -1001px;width:90px;height:90px}.customize-option.hair_base_4_zombie{background-image:url(spritesmith-main-2.png);background-position:-207px -1016px;width:60px;height:60px}.hair_base_5_TRUred{background-image:url(spritesmith-main-2.png);background-position:-273px -1001px;width:90px;height:90px}.customize-option.hair_base_5_TRUred{background-image:url(spritesmith-main-2.png);background-position:-298px -1016px;width:60px;height:60px}.hair_base_5_aurora{background-image:url(spritesmith-main-2.png);background-position:-364px -1001px;width:90px;height:90px}.customize-option.hair_base_5_aurora{background-image:url(spritesmith-main-2.png);background-position:-389px -1016px;width:60px;height:60px}.hair_base_5_black{background-image:url(spritesmith-main-2.png);background-position:-455px -1001px;width:90px;height:90px}.customize-option.hair_base_5_black{background-image:url(spritesmith-main-2.png);background-position:-480px -1016px;width:60px;height:60px}.hair_base_5_blond{background-image:url(spritesmith-main-2.png);background-position:-546px -1001px;width:90px;height:90px}.customize-option.hair_base_5_blond{background-image:url(spritesmith-main-2.png);background-position:-571px -1016px;width:60px;height:60px}.hair_base_5_blue{background-image:url(spritesmith-main-2.png);background-position:-637px -1001px;width:90px;height:90px}.customize-option.hair_base_5_blue{background-image:url(spritesmith-main-2.png);background-position:-662px -1016px;width:60px;height:60px}.hair_base_5_brown{background-image:url(spritesmith-main-2.png);background-position:-728px -1001px;width:90px;height:90px}.customize-option.hair_base_5_brown{background-image:url(spritesmith-main-2.png);background-position:-753px -1016px;width:60px;height:60px}.hair_base_5_candycane{background-image:url(spritesmith-main-2.png);background-position:-819px -1001px;width:90px;height:90px}.customize-option.hair_base_5_candycane{background-image:url(spritesmith-main-2.png);background-position:-844px -1016px;width:60px;height:60px}.hair_base_5_candycorn{background-image:url(spritesmith-main-2.png);background-position:-910px -1001px;width:90px;height:90px}.customize-option.hair_base_5_candycorn{background-image:url(spritesmith-main-2.png);background-position:-935px -1016px;width:60px;height:60px}.hair_base_5_festive{background-image:url(spritesmith-main-2.png);background-position:-1001px -1001px;width:90px;height:90px}.customize-option.hair_base_5_festive{background-image:url(spritesmith-main-2.png);background-position:-1026px -1016px;width:60px;height:60px}.hair_base_5_frost{background-image:url(spritesmith-main-2.png);background-position:-1092px 0;width:90px;height:90px}.customize-option.hair_base_5_frost{background-image:url(spritesmith-main-2.png);background-position:-1117px -15px;width:60px;height:60px}.hair_base_5_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-1092px -91px;width:90px;height:90px}.customize-option.hair_base_5_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-1117px -106px;width:60px;height:60px}.hair_base_5_green{background-image:url(spritesmith-main-2.png);background-position:-1092px -182px;width:90px;height:90px}.customize-option.hair_base_5_green{background-image:url(spritesmith-main-2.png);background-position:-1117px -197px;width:60px;height:60px}.hair_base_5_halloween{background-image:url(spritesmith-main-2.png);background-position:-1092px -273px;width:90px;height:90px}.customize-option.hair_base_5_halloween{background-image:url(spritesmith-main-2.png);background-position:-1117px -288px;width:60px;height:60px}.hair_base_5_holly{background-image:url(spritesmith-main-2.png);background-position:-1092px -364px;width:90px;height:90px}.customize-option.hair_base_5_holly{background-image:url(spritesmith-main-2.png);background-position:-1117px -379px;width:60px;height:60px}.hair_base_5_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-1092px -455px;width:90px;height:90px}.customize-option.hair_base_5_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-1117px -470px;width:60px;height:60px}.hair_base_5_midnight{background-image:url(spritesmith-main-2.png);background-position:-1092px -546px;width:90px;height:90px}.customize-option.hair_base_5_midnight{background-image:url(spritesmith-main-2.png);background-position:-1117px -561px;width:60px;height:60px}.hair_base_5_pblue{background-image:url(spritesmith-main-2.png);background-position:-1092px -637px;width:90px;height:90px}.customize-option.hair_base_5_pblue{background-image:url(spritesmith-main-2.png);background-position:-1117px -652px;width:60px;height:60px}.hair_base_5_pblue2{background-image:url(spritesmith-main-2.png);background-position:-1092px -728px;width:90px;height:90px}.customize-option.hair_base_5_pblue2{background-image:url(spritesmith-main-2.png);background-position:-1117px -743px;width:60px;height:60px}.hair_base_5_peppermint{background-image:url(spritesmith-main-2.png);background-position:-1092px -819px;width:90px;height:90px}.customize-option.hair_base_5_peppermint{background-image:url(spritesmith-main-2.png);background-position:-1117px -834px;width:60px;height:60px}.hair_base_5_pgreen{background-image:url(spritesmith-main-2.png);background-position:-1092px -910px;width:90px;height:90px}.customize-option.hair_base_5_pgreen{background-image:url(spritesmith-main-2.png);background-position:-1117px -925px;width:60px;height:60px}.hair_base_5_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-1092px -1001px;width:90px;height:90px}.customize-option.hair_base_5_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-1117px -1016px;width:60px;height:60px}.hair_base_5_porange{background-image:url(spritesmith-main-2.png);background-position:0 -1092px;width:90px;height:90px}.customize-option.hair_base_5_porange{background-image:url(spritesmith-main-2.png);background-position:-25px -1107px;width:60px;height:60px}.hair_base_5_porange2{background-image:url(spritesmith-main-2.png);background-position:-91px -1092px;width:90px;height:90px}.customize-option.hair_base_5_porange2{background-image:url(spritesmith-main-2.png);background-position:-116px -1107px;width:60px;height:60px}.hair_base_5_ppink{background-image:url(spritesmith-main-2.png);background-position:-182px -1092px;width:90px;height:90px}.customize-option.hair_base_5_ppink{background-image:url(spritesmith-main-2.png);background-position:-207px -1107px;width:60px;height:60px}.hair_base_5_ppink2{background-image:url(spritesmith-main-2.png);background-position:-273px -1092px;width:90px;height:90px}.customize-option.hair_base_5_ppink2{background-image:url(spritesmith-main-2.png);background-position:-298px -1107px;width:60px;height:60px}.hair_base_5_ppurple{background-image:url(spritesmith-main-2.png);background-position:-364px -1092px;width:90px;height:90px}.customize-option.hair_base_5_ppurple{background-image:url(spritesmith-main-2.png);background-position:-389px -1107px;width:60px;height:60px}.hair_base_5_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-455px -1092px;width:90px;height:90px}.customize-option.hair_base_5_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-480px -1107px;width:60px;height:60px}.hair_base_5_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-546px -1092px;width:90px;height:90px}.customize-option.hair_base_5_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-571px -1107px;width:60px;height:60px}.hair_base_5_purple{background-image:url(spritesmith-main-2.png);background-position:-637px -1092px;width:90px;height:90px}.customize-option.hair_base_5_purple{background-image:url(spritesmith-main-2.png);background-position:-662px -1107px;width:60px;height:60px}.hair_base_5_pyellow{background-image:url(spritesmith-main-2.png);background-position:0 0;width:90px;height:90px}.customize-option.hair_base_5_pyellow{background-image:url(spritesmith-main-2.png);background-position:-25px -15px;width:60px;height:60px}.hair_base_5_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-819px -1092px;width:90px;height:90px}.customize-option.hair_base_5_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-844px -1107px;width:60px;height:60px}.hair_base_5_rainbow{background-image:url(spritesmith-main-2.png);background-position:-910px -1092px;width:90px;height:90px}.customize-option.hair_base_5_rainbow{background-image:url(spritesmith-main-2.png);background-position:-935px -1107px;width:60px;height:60px}.hair_base_5_red{background-image:url(spritesmith-main-2.png);background-position:-1001px -1092px;width:90px;height:90px}.customize-option.hair_base_5_red{background-image:url(spritesmith-main-2.png);background-position:-1026px -1107px;width:60px;height:60px}.hair_base_5_snowy{background-image:url(spritesmith-main-2.png);background-position:-1092px -1092px;width:90px;height:90px}.customize-option.hair_base_5_snowy{background-image:url(spritesmith-main-2.png);background-position:-1117px -1107px;width:60px;height:60px}.hair_base_5_white{background-image:url(spritesmith-main-2.png);background-position:-1183px 0;width:90px;height:90px}.customize-option.hair_base_5_white{background-image:url(spritesmith-main-2.png);background-position:-1208px -15px;width:60px;height:60px}.hair_base_5_winternight{background-image:url(spritesmith-main-2.png);background-position:-1183px -91px;width:90px;height:90px}.customize-option.hair_base_5_winternight{background-image:url(spritesmith-main-2.png);background-position:-1208px -106px;width:60px;height:60px}.hair_base_5_winterstar{background-image:url(spritesmith-main-2.png);background-position:-1183px -182px;width:90px;height:90px}.customize-option.hair_base_5_winterstar{background-image:url(spritesmith-main-2.png);background-position:-1208px -197px;width:60px;height:60px}.hair_base_5_yellow{background-image:url(spritesmith-main-2.png);background-position:-1183px -273px;width:90px;height:90px}.customize-option.hair_base_5_yellow{background-image:url(spritesmith-main-2.png);background-position:-1208px -288px;width:60px;height:60px}.hair_base_5_zombie{background-image:url(spritesmith-main-2.png);background-position:-1183px -364px;width:90px;height:90px}.customize-option.hair_base_5_zombie{background-image:url(spritesmith-main-2.png);background-position:-1208px -379px;width:60px;height:60px}.hair_base_6_TRUred{background-image:url(spritesmith-main-2.png);background-position:-1183px -455px;width:90px;height:90px}.customize-option.hair_base_6_TRUred{background-image:url(spritesmith-main-2.png);background-position:-1208px -470px;width:60px;height:60px}.hair_base_6_aurora{background-image:url(spritesmith-main-2.png);background-position:-1183px -546px;width:90px;height:90px}.customize-option.hair_base_6_aurora{background-image:url(spritesmith-main-2.png);background-position:-1208px -561px;width:60px;height:60px}.hair_base_6_black{background-image:url(spritesmith-main-2.png);background-position:-1183px -637px;width:90px;height:90px}.customize-option.hair_base_6_black{background-image:url(spritesmith-main-2.png);background-position:-1208px -652px;width:60px;height:60px}.hair_base_6_blond{background-image:url(spritesmith-main-2.png);background-position:-1183px -728px;width:90px;height:90px}.customize-option.hair_base_6_blond{background-image:url(spritesmith-main-2.png);background-position:-1208px -743px;width:60px;height:60px}.hair_base_6_blue{background-image:url(spritesmith-main-2.png);background-position:-1183px -819px;width:90px;height:90px}.customize-option.hair_base_6_blue{background-image:url(spritesmith-main-2.png);background-position:-1208px -834px;width:60px;height:60px}.hair_base_6_brown{background-image:url(spritesmith-main-2.png);background-position:-1183px -910px;width:90px;height:90px}.customize-option.hair_base_6_brown{background-image:url(spritesmith-main-2.png);background-position:-1208px -925px;width:60px;height:60px}.hair_base_6_candycane{background-image:url(spritesmith-main-2.png);background-position:-1183px -1001px;width:90px;height:90px}.customize-option.hair_base_6_candycane{background-image:url(spritesmith-main-2.png);background-position:-1208px -1016px;width:60px;height:60px}.hair_base_6_candycorn{background-image:url(spritesmith-main-2.png);background-position:-1183px -1092px;width:90px;height:90px}.customize-option.hair_base_6_candycorn{background-image:url(spritesmith-main-2.png);background-position:-1208px -1107px;width:60px;height:60px}.hair_base_6_festive{background-image:url(spritesmith-main-2.png);background-position:0 -1183px;width:90px;height:90px}.customize-option.hair_base_6_festive{background-image:url(spritesmith-main-2.png);background-position:-25px -1198px;width:60px;height:60px}.hair_base_6_frost{background-image:url(spritesmith-main-2.png);background-position:-91px -1183px;width:90px;height:90px}.customize-option.hair_base_6_frost{background-image:url(spritesmith-main-2.png);background-position:-116px -1198px;width:60px;height:60px}.hair_base_6_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-182px -1183px;width:90px;height:90px}.customize-option.hair_base_6_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-207px -1198px;width:60px;height:60px}.hair_base_6_green{background-image:url(spritesmith-main-2.png);background-position:-273px -1183px;width:90px;height:90px}.customize-option.hair_base_6_green{background-image:url(spritesmith-main-2.png);background-position:-298px -1198px;width:60px;height:60px}.hair_base_6_halloween{background-image:url(spritesmith-main-2.png);background-position:-364px -1183px;width:90px;height:90px}.customize-option.hair_base_6_halloween{background-image:url(spritesmith-main-2.png);background-position:-389px -1198px;width:60px;height:60px}.hair_base_6_holly{background-image:url(spritesmith-main-2.png);background-position:-455px -1183px;width:90px;height:90px}.customize-option.hair_base_6_holly{background-image:url(spritesmith-main-2.png);background-position:-480px -1198px;width:60px;height:60px}.hair_base_6_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-546px -1183px;width:90px;height:90px}.customize-option.hair_base_6_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-571px -1198px;width:60px;height:60px}.hair_base_6_midnight{background-image:url(spritesmith-main-2.png);background-position:-637px -1183px;width:90px;height:90px}.customize-option.hair_base_6_midnight{background-image:url(spritesmith-main-2.png);background-position:-662px -1198px;width:60px;height:60px}.hair_base_6_pblue{background-image:url(spritesmith-main-2.png);background-position:-728px -1183px;width:90px;height:90px}.customize-option.hair_base_6_pblue{background-image:url(spritesmith-main-2.png);background-position:-753px -1198px;width:60px;height:60px}.hair_base_6_pblue2{background-image:url(spritesmith-main-2.png);background-position:-819px -1183px;width:90px;height:90px}.customize-option.hair_base_6_pblue2{background-image:url(spritesmith-main-2.png);background-position:-844px -1198px;width:60px;height:60px}.hair_base_6_peppermint{background-image:url(spritesmith-main-2.png);background-position:-910px -1183px;width:90px;height:90px}.customize-option.hair_base_6_peppermint{background-image:url(spritesmith-main-2.png);background-position:-935px -1198px;width:60px;height:60px}.hair_base_6_pgreen{background-image:url(spritesmith-main-2.png);background-position:-1001px -1183px;width:90px;height:90px}.customize-option.hair_base_6_pgreen{background-image:url(spritesmith-main-2.png);background-position:-1026px -1198px;width:60px;height:60px}.hair_base_6_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-1092px -1183px;width:90px;height:90px}.customize-option.hair_base_6_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-1117px -1198px;width:60px;height:60px}.hair_base_6_porange{background-image:url(spritesmith-main-2.png);background-position:-1183px -1183px;width:90px;height:90px}.customize-option.hair_base_6_porange{background-image:url(spritesmith-main-2.png);background-position:-1208px -1198px;width:60px;height:60px}.hair_base_6_porange2{background-image:url(spritesmith-main-2.png);background-position:-1274px 0;width:90px;height:90px}.customize-option.hair_base_6_porange2{background-image:url(spritesmith-main-2.png);background-position:-1299px -15px;width:60px;height:60px}.hair_base_6_ppink{background-image:url(spritesmith-main-2.png);background-position:-1274px -91px;width:90px;height:90px}.customize-option.hair_base_6_ppink{background-image:url(spritesmith-main-2.png);background-position:-1299px -106px;width:60px;height:60px}.hair_base_6_ppink2{background-image:url(spritesmith-main-2.png);background-position:-1274px -182px;width:90px;height:90px}.customize-option.hair_base_6_ppink2{background-image:url(spritesmith-main-2.png);background-position:-1299px -197px;width:60px;height:60px}.hair_base_6_ppurple{background-image:url(spritesmith-main-2.png);background-position:-1274px -273px;width:90px;height:90px}.customize-option.hair_base_6_ppurple{background-image:url(spritesmith-main-2.png);background-position:-1299px -288px;width:60px;height:60px}.hair_base_6_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-1274px -364px;width:90px;height:90px}.customize-option.hair_base_6_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-1299px -379px;width:60px;height:60px}.hair_base_6_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-1274px -455px;width:90px;height:90px}.customize-option.hair_base_6_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-1299px -470px;width:60px;height:60px}.hair_base_6_purple{background-image:url(spritesmith-main-2.png);background-position:-1274px -546px;width:90px;height:90px}.customize-option.hair_base_6_purple{background-image:url(spritesmith-main-2.png);background-position:-1299px -561px;width:60px;height:60px}.hair_base_6_pyellow{background-image:url(spritesmith-main-2.png);background-position:-1274px -637px;width:90px;height:90px}.customize-option.hair_base_6_pyellow{background-image:url(spritesmith-main-2.png);background-position:-1299px -652px;width:60px;height:60px}.hair_base_6_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-1274px -728px;width:90px;height:90px}.customize-option.hair_base_6_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-1299px -743px;width:60px;height:60px}.hair_base_6_rainbow{background-image:url(spritesmith-main-2.png);background-position:-1274px -819px;width:90px;height:90px}.customize-option.hair_base_6_rainbow{background-image:url(spritesmith-main-2.png);background-position:-1299px -834px;width:60px;height:60px}.hair_base_6_red{background-image:url(spritesmith-main-2.png);background-position:-1274px -910px;width:90px;height:90px}.customize-option.hair_base_6_red{background-image:url(spritesmith-main-2.png);background-position:-1299px -925px;width:60px;height:60px}.hair_base_6_snowy{background-image:url(spritesmith-main-2.png);background-position:-1274px -1001px;width:90px;height:90px}.customize-option.hair_base_6_snowy{background-image:url(spritesmith-main-2.png);background-position:-1299px -1016px;width:60px;height:60px}.hair_base_6_white{background-image:url(spritesmith-main-2.png);background-position:-1274px -1092px;width:90px;height:90px}.customize-option.hair_base_6_white{background-image:url(spritesmith-main-2.png);background-position:-1299px -1107px;width:60px;height:60px}.hair_base_6_winternight{background-image:url(spritesmith-main-2.png);background-position:-1274px -1183px;width:90px;height:90px}.customize-option.hair_base_6_winternight{background-image:url(spritesmith-main-2.png);background-position:-1299px -1198px;width:60px;height:60px}.hair_base_6_winterstar{background-image:url(spritesmith-main-2.png);background-position:0 -1274px;width:90px;height:90px}.customize-option.hair_base_6_winterstar{background-image:url(spritesmith-main-2.png);background-position:-25px -1289px;width:60px;height:60px}.hair_base_6_yellow{background-image:url(spritesmith-main-2.png);background-position:-91px -1274px;width:90px;height:90px}.customize-option.hair_base_6_yellow{background-image:url(spritesmith-main-2.png);background-position:-116px -1289px;width:60px;height:60px}.hair_base_6_zombie{background-image:url(spritesmith-main-2.png);background-position:-182px -1274px;width:90px;height:90px}.customize-option.hair_base_6_zombie{background-image:url(spritesmith-main-2.png);background-position:-207px -1289px;width:60px;height:60px}.hair_base_7_TRUred{background-image:url(spritesmith-main-2.png);background-position:-273px -1274px;width:90px;height:90px}.customize-option.hair_base_7_TRUred{background-image:url(spritesmith-main-2.png);background-position:-298px -1289px;width:60px;height:60px}.hair_base_7_aurora{background-image:url(spritesmith-main-2.png);background-position:-364px -1274px;width:90px;height:90px}.customize-option.hair_base_7_aurora{background-image:url(spritesmith-main-2.png);background-position:-389px -1289px;width:60px;height:60px}.hair_base_7_black{background-image:url(spritesmith-main-2.png);background-position:-455px -1274px;width:90px;height:90px}.customize-option.hair_base_7_black{background-image:url(spritesmith-main-2.png);background-position:-480px -1289px;width:60px;height:60px}.hair_base_7_blond{background-image:url(spritesmith-main-2.png);background-position:-546px -1274px;width:90px;height:90px}.customize-option.hair_base_7_blond{background-image:url(spritesmith-main-2.png);background-position:-571px -1289px;width:60px;height:60px}.hair_base_7_blue{background-image:url(spritesmith-main-2.png);background-position:-637px -1274px;width:90px;height:90px}.customize-option.hair_base_7_blue{background-image:url(spritesmith-main-2.png);background-position:-662px -1289px;width:60px;height:60px}.hair_base_7_brown{background-image:url(spritesmith-main-2.png);background-position:-728px -1274px;width:90px;height:90px}.customize-option.hair_base_7_brown{background-image:url(spritesmith-main-2.png);background-position:-753px -1289px;width:60px;height:60px}.hair_base_7_candycane{background-image:url(spritesmith-main-2.png);background-position:-819px -1274px;width:90px;height:90px}.customize-option.hair_base_7_candycane{background-image:url(spritesmith-main-2.png);background-position:-844px -1289px;width:60px;height:60px}.hair_base_7_candycorn{background-image:url(spritesmith-main-2.png);background-position:-910px -1274px;width:90px;height:90px}.customize-option.hair_base_7_candycorn{background-image:url(spritesmith-main-2.png);background-position:-935px -1289px;width:60px;height:60px}.hair_base_7_festive{background-image:url(spritesmith-main-2.png);background-position:-1001px -1274px;width:90px;height:90px}.customize-option.hair_base_7_festive{background-image:url(spritesmith-main-2.png);background-position:-1026px -1289px;width:60px;height:60px}.hair_base_7_frost{background-image:url(spritesmith-main-2.png);background-position:-1092px -1274px;width:90px;height:90px}.customize-option.hair_base_7_frost{background-image:url(spritesmith-main-2.png);background-position:-1117px -1289px;width:60px;height:60px}.hair_base_7_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-1183px -1274px;width:90px;height:90px}.customize-option.hair_base_7_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-1208px -1289px;width:60px;height:60px}.hair_base_7_green{background-image:url(spritesmith-main-2.png);background-position:-1274px -1274px;width:90px;height:90px}.customize-option.hair_base_7_green{background-image:url(spritesmith-main-2.png);background-position:-1299px -1289px;width:60px;height:60px}.hair_base_7_halloween{background-image:url(spritesmith-main-2.png);background-position:-1365px 0;width:90px;height:90px}.customize-option.hair_base_7_halloween{background-image:url(spritesmith-main-2.png);background-position:-1390px -15px;width:60px;height:60px}.hair_base_7_holly{background-image:url(spritesmith-main-2.png);background-position:-1365px -91px;width:90px;height:90px}.customize-option.hair_base_7_holly{background-image:url(spritesmith-main-2.png);background-position:-1390px -106px;width:60px;height:60px}.hair_base_7_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-1365px -182px;width:90px;height:90px}.customize-option.hair_base_7_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-1390px -197px;width:60px;height:60px}.hair_base_7_midnight{background-image:url(spritesmith-main-2.png);background-position:-1365px -273px;width:90px;height:90px}.customize-option.hair_base_7_midnight{background-image:url(spritesmith-main-2.png);background-position:-1390px -288px;width:60px;height:60px}.hair_base_7_pblue{background-image:url(spritesmith-main-2.png);background-position:-1365px -364px;width:90px;height:90px}.customize-option.hair_base_7_pblue{background-image:url(spritesmith-main-2.png);background-position:-1390px -379px;width:60px;height:60px}.hair_base_7_pblue2{background-image:url(spritesmith-main-2.png);background-position:-1365px -455px;width:90px;height:90px}.customize-option.hair_base_7_pblue2{background-image:url(spritesmith-main-2.png);background-position:-1390px -470px;width:60px;height:60px}.hair_base_7_peppermint{background-image:url(spritesmith-main-2.png);background-position:-1365px -546px;width:90px;height:90px}.customize-option.hair_base_7_peppermint{background-image:url(spritesmith-main-2.png);background-position:-1390px -561px;width:60px;height:60px}.hair_base_7_pgreen{background-image:url(spritesmith-main-2.png);background-position:-1365px -637px;width:90px;height:90px}.customize-option.hair_base_7_pgreen{background-image:url(spritesmith-main-2.png);background-position:-1390px -652px;width:60px;height:60px}.hair_base_7_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-1365px -728px;width:90px;height:90px}.customize-option.hair_base_7_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-1390px -743px;width:60px;height:60px}.hair_base_7_porange{background-image:url(spritesmith-main-2.png);background-position:-1365px -819px;width:90px;height:90px}.customize-option.hair_base_7_porange{background-image:url(spritesmith-main-2.png);background-position:-1390px -834px;width:60px;height:60px}.hair_base_7_porange2{background-image:url(spritesmith-main-2.png);background-position:-1365px -910px;width:90px;height:90px}.customize-option.hair_base_7_porange2{background-image:url(spritesmith-main-2.png);background-position:-1390px -925px;width:60px;height:60px}.hair_base_7_ppink{background-image:url(spritesmith-main-2.png);background-position:-1365px -1001px;width:90px;height:90px}.customize-option.hair_base_7_ppink{background-image:url(spritesmith-main-2.png);background-position:-1390px -1016px;width:60px;height:60px}.hair_base_7_ppink2{background-image:url(spritesmith-main-2.png);background-position:-1365px -1092px;width:90px;height:90px}.customize-option.hair_base_7_ppink2{background-image:url(spritesmith-main-2.png);background-position:-1390px -1107px;width:60px;height:60px}.hair_base_7_ppurple{background-image:url(spritesmith-main-2.png);background-position:-1365px -1183px;width:90px;height:90px}.customize-option.hair_base_7_ppurple{background-image:url(spritesmith-main-2.png);background-position:-1390px -1198px;width:60px;height:60px}.hair_base_7_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-1365px -1274px;width:90px;height:90px}.customize-option.hair_base_7_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-1390px -1289px;width:60px;height:60px}.hair_base_7_pumpkin{background-image:url(spritesmith-main-2.png);background-position:0 -1365px;width:90px;height:90px}.customize-option.hair_base_7_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-25px -1380px;width:60px;height:60px}.hair_base_7_purple{background-image:url(spritesmith-main-2.png);background-position:-91px -1365px;width:90px;height:90px}.customize-option.hair_base_7_purple{background-image:url(spritesmith-main-2.png);background-position:-116px -1380px;width:60px;height:60px}.hair_base_7_pyellow{background-image:url(spritesmith-main-2.png);background-position:-182px -1365px;width:90px;height:90px}.customize-option.hair_base_7_pyellow{background-image:url(spritesmith-main-2.png);background-position:-207px -1380px;width:60px;height:60px}.hair_base_7_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-273px -1365px;width:90px;height:90px}.customize-option.hair_base_7_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-298px -1380px;width:60px;height:60px}.hair_base_7_rainbow{background-image:url(spritesmith-main-2.png);background-position:-364px -1365px;width:90px;height:90px}.customize-option.hair_base_7_rainbow{background-image:url(spritesmith-main-2.png);background-position:-389px -1380px;width:60px;height:60px}.hair_base_7_red{background-image:url(spritesmith-main-2.png);background-position:-455px -1365px;width:90px;height:90px}.customize-option.hair_base_7_red{background-image:url(spritesmith-main-2.png);background-position:-480px -1380px;width:60px;height:60px}.hair_base_7_snowy{background-image:url(spritesmith-main-2.png);background-position:-546px -1365px;width:90px;height:90px}.customize-option.hair_base_7_snowy{background-image:url(spritesmith-main-2.png);background-position:-571px -1380px;width:60px;height:60px}.hair_base_7_white{background-image:url(spritesmith-main-2.png);background-position:-637px -1365px;width:90px;height:90px}.customize-option.hair_base_7_white{background-image:url(spritesmith-main-2.png);background-position:-662px -1380px;width:60px;height:60px}.hair_base_7_winternight{background-image:url(spritesmith-main-2.png);background-position:-728px -1365px;width:90px;height:90px}.customize-option.hair_base_7_winternight{background-image:url(spritesmith-main-2.png);background-position:-753px -1380px;width:60px;height:60px}.hair_base_7_winterstar{background-image:url(spritesmith-main-2.png);background-position:-819px -1365px;width:90px;height:90px}.customize-option.hair_base_7_winterstar{background-image:url(spritesmith-main-2.png);background-position:-844px -1380px;width:60px;height:60px}.hair_base_7_yellow{background-image:url(spritesmith-main-2.png);background-position:-910px -1365px;width:90px;height:90px}.customize-option.hair_base_7_yellow{background-image:url(spritesmith-main-2.png);background-position:-935px -1380px;width:60px;height:60px}.hair_base_7_zombie{background-image:url(spritesmith-main-2.png);background-position:-1001px -1365px;width:90px;height:90px}.customize-option.hair_base_7_zombie{background-image:url(spritesmith-main-2.png);background-position:-1026px -1380px;width:60px;height:60px}.hair_base_8_TRUred{background-image:url(spritesmith-main-2.png);background-position:-1092px -1365px;width:90px;height:90px}.customize-option.hair_base_8_TRUred{background-image:url(spritesmith-main-2.png);background-position:-1117px -1380px;width:60px;height:60px}.hair_base_8_aurora{background-image:url(spritesmith-main-2.png);background-position:-1183px -1365px;width:90px;height:90px}.customize-option.hair_base_8_aurora{background-image:url(spritesmith-main-2.png);background-position:-1208px -1380px;width:60px;height:60px}.hair_base_8_black{background-image:url(spritesmith-main-2.png);background-position:-1274px -1365px;width:90px;height:90px}.customize-option.hair_base_8_black{background-image:url(spritesmith-main-2.png);background-position:-1299px -1380px;width:60px;height:60px}.hair_base_8_blond{background-image:url(spritesmith-main-2.png);background-position:-1365px -1365px;width:90px;height:90px}.customize-option.hair_base_8_blond{background-image:url(spritesmith-main-2.png);background-position:-1390px -1380px;width:60px;height:60px}.hair_base_8_blue{background-image:url(spritesmith-main-2.png);background-position:-1456px 0;width:90px;height:90px}.customize-option.hair_base_8_blue{background-image:url(spritesmith-main-2.png);background-position:-1481px -15px;width:60px;height:60px}.hair_base_8_brown{background-image:url(spritesmith-main-2.png);background-position:-1456px -91px;width:90px;height:90px}.customize-option.hair_base_8_brown{background-image:url(spritesmith-main-2.png);background-position:-1481px -106px;width:60px;height:60px}.hair_base_8_candycane{background-image:url(spritesmith-main-2.png);background-position:-1456px -182px;width:90px;height:90px}.customize-option.hair_base_8_candycane{background-image:url(spritesmith-main-2.png);background-position:-1481px -197px;width:60px;height:60px}.hair_base_8_candycorn{background-image:url(spritesmith-main-2.png);background-position:-1456px -273px;width:90px;height:90px}.customize-option.hair_base_8_candycorn{background-image:url(spritesmith-main-2.png);background-position:-1481px -288px;width:60px;height:60px}.hair_base_8_festive{background-image:url(spritesmith-main-2.png);background-position:-1456px -364px;width:90px;height:90px}.customize-option.hair_base_8_festive{background-image:url(spritesmith-main-2.png);background-position:-1481px -379px;width:60px;height:60px}.hair_base_8_frost{background-image:url(spritesmith-main-2.png);background-position:-1456px -455px;width:90px;height:90px}.customize-option.hair_base_8_frost{background-image:url(spritesmith-main-2.png);background-position:-1481px -470px;width:60px;height:60px}.hair_base_8_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-1456px -546px;width:90px;height:90px}.customize-option.hair_base_8_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-1481px -561px;width:60px;height:60px}.hair_base_8_green{background-image:url(spritesmith-main-2.png);background-position:-1456px -637px;width:90px;height:90px}.customize-option.hair_base_8_green{background-image:url(spritesmith-main-2.png);background-position:-1481px -652px;width:60px;height:60px}.hair_base_8_halloween{background-image:url(spritesmith-main-2.png);background-position:-1456px -728px;width:90px;height:90px}.customize-option.hair_base_8_halloween{background-image:url(spritesmith-main-2.png);background-position:-1481px -743px;width:60px;height:60px}.hair_base_8_holly{background-image:url(spritesmith-main-2.png);background-position:-1456px -819px;width:90px;height:90px}.customize-option.hair_base_8_holly{background-image:url(spritesmith-main-2.png);background-position:-1481px -834px;width:60px;height:60px}.hair_base_8_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-1456px -910px;width:90px;height:90px}.customize-option.hair_base_8_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-1481px -925px;width:60px;height:60px}.hair_base_8_midnight{background-image:url(spritesmith-main-2.png);background-position:-1456px -1001px;width:90px;height:90px}.customize-option.hair_base_8_midnight{background-image:url(spritesmith-main-2.png);background-position:-1481px -1016px;width:60px;height:60px}.hair_base_8_pblue{background-image:url(spritesmith-main-2.png);background-position:-1456px -1092px;width:90px;height:90px}.customize-option.hair_base_8_pblue{background-image:url(spritesmith-main-2.png);background-position:-1481px -1107px;width:60px;height:60px}.hair_base_8_pblue2{background-image:url(spritesmith-main-2.png);background-position:-1456px -1183px;width:90px;height:90px}.customize-option.hair_base_8_pblue2{background-image:url(spritesmith-main-2.png);background-position:-1481px -1198px;width:60px;height:60px}.hair_base_8_peppermint{background-image:url(spritesmith-main-2.png);background-position:-1456px -1274px;width:90px;height:90px}.customize-option.hair_base_8_peppermint{background-image:url(spritesmith-main-2.png);background-position:-1481px -1289px;width:60px;height:60px}.hair_base_8_pgreen{background-image:url(spritesmith-main-2.png);background-position:-1456px -1365px;width:90px;height:90px}.customize-option.hair_base_8_pgreen{background-image:url(spritesmith-main-2.png);background-position:-1481px -1380px;width:60px;height:60px}.hair_base_8_pgreen2{background-image:url(spritesmith-main-2.png);background-position:0 -1456px;width:90px;height:90px}.customize-option.hair_base_8_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-25px -1471px;width:60px;height:60px}.hair_base_8_porange{background-image:url(spritesmith-main-2.png);background-position:-91px -1456px;width:90px;height:90px}.customize-option.hair_base_8_porange{background-image:url(spritesmith-main-2.png);background-position:-116px -1471px;width:60px;height:60px}.hair_base_8_porange2{background-image:url(spritesmith-main-2.png);background-position:-182px -1456px;width:90px;height:90px}.customize-option.hair_base_8_porange2{background-image:url(spritesmith-main-2.png);background-position:-207px -1471px;width:60px;height:60px}.hair_base_8_ppink{background-image:url(spritesmith-main-2.png);background-position:-273px -1456px;width:90px;height:90px}.customize-option.hair_base_8_ppink{background-image:url(spritesmith-main-2.png);background-position:-298px -1471px;width:60px;height:60px}.hair_base_8_ppink2{background-image:url(spritesmith-main-2.png);background-position:-364px -1456px;width:90px;height:90px}.customize-option.hair_base_8_ppink2{background-image:url(spritesmith-main-2.png);background-position:-389px -1471px;width:60px;height:60px}.hair_base_8_ppurple{background-image:url(spritesmith-main-2.png);background-position:-455px -1456px;width:90px;height:90px}.customize-option.hair_base_8_ppurple{background-image:url(spritesmith-main-2.png);background-position:-480px -1471px;width:60px;height:60px}.hair_base_8_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-546px -1456px;width:90px;height:90px}.customize-option.hair_base_8_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-571px -1471px;width:60px;height:60px}.hair_base_8_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-637px -1456px;width:90px;height:90px}.customize-option.hair_base_8_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-662px -1471px;width:60px;height:60px}.hair_base_8_purple{background-image:url(spritesmith-main-2.png);background-position:-728px -1456px;width:90px;height:90px}.customize-option.hair_base_8_purple{background-image:url(spritesmith-main-2.png);background-position:-753px -1471px;width:60px;height:60px}.hair_base_8_pyellow{background-image:url(spritesmith-main-2.png);background-position:-819px -1456px;width:90px;height:90px}.customize-option.hair_base_8_pyellow{background-image:url(spritesmith-main-2.png);background-position:-844px -1471px;width:60px;height:60px}.hair_base_8_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-910px -1456px;width:90px;height:90px}.customize-option.hair_base_8_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-935px -1471px;width:60px;height:60px}.hair_base_8_rainbow{background-image:url(spritesmith-main-2.png);background-position:-1001px -1456px;width:90px;height:90px}.customize-option.hair_base_8_rainbow{background-image:url(spritesmith-main-2.png);background-position:-1026px -1471px;width:60px;height:60px}.hair_base_8_red{background-image:url(spritesmith-main-2.png);background-position:-1092px -1456px;width:90px;height:90px}.customize-option.hair_base_8_red{background-image:url(spritesmith-main-2.png);background-position:-1117px -1471px;width:60px;height:60px}.hair_base_8_snowy{background-image:url(spritesmith-main-2.png);background-position:-1183px -1456px;width:90px;height:90px}.customize-option.hair_base_8_snowy{background-image:url(spritesmith-main-2.png);background-position:-1208px -1471px;width:60px;height:60px}.hair_base_8_white{background-image:url(spritesmith-main-2.png);background-position:-1274px -1456px;width:90px;height:90px}.customize-option.hair_base_8_white{background-image:url(spritesmith-main-2.png);background-position:-1299px -1471px;width:60px;height:60px}.hair_base_8_winternight{background-image:url(spritesmith-main-2.png);background-position:-1365px -1456px;width:90px;height:90px}.customize-option.hair_base_8_winternight{background-image:url(spritesmith-main-2.png);background-position:-1390px -1471px;width:60px;height:60px}.hair_base_8_winterstar{background-image:url(spritesmith-main-2.png);background-position:-1456px -1456px;width:90px;height:90px}.customize-option.hair_base_8_winterstar{background-image:url(spritesmith-main-2.png);background-position:-1481px -1471px;width:60px;height:60px}.hair_base_8_yellow{background-image:url(spritesmith-main-2.png);background-position:-1547px 0;width:90px;height:90px}.customize-option.hair_base_8_yellow{background-image:url(spritesmith-main-2.png);background-position:-1572px -15px;width:60px;height:60px}.hair_base_8_zombie{background-image:url(spritesmith-main-2.png);background-position:-1547px -91px;width:90px;height:90px}.customize-option.hair_base_8_zombie{background-image:url(spritesmith-main-2.png);background-position:-1572px -106px;width:60px;height:60px}.hair_base_9_TRUred{background-image:url(spritesmith-main-2.png);background-position:-1547px -182px;width:90px;height:90px}.customize-option.hair_base_9_TRUred{background-image:url(spritesmith-main-2.png);background-position:-1572px -197px;width:60px;height:60px}.hair_base_9_aurora{background-image:url(spritesmith-main-2.png);background-position:-1547px -273px;width:90px;height:90px}.customize-option.hair_base_9_aurora{background-image:url(spritesmith-main-2.png);background-position:-1572px -288px;width:60px;height:60px}.hair_base_9_black{background-image:url(spritesmith-main-2.png);background-position:-1547px -364px;width:90px;height:90px}.customize-option.hair_base_9_black{background-image:url(spritesmith-main-2.png);background-position:-1572px -379px;width:60px;height:60px}.hair_base_9_blond{background-image:url(spritesmith-main-2.png);background-position:-1547px -455px;width:90px;height:90px}.customize-option.hair_base_9_blond{background-image:url(spritesmith-main-2.png);background-position:-1572px -470px;width:60px;height:60px}.hair_base_9_blue{background-image:url(spritesmith-main-2.png);background-position:-1547px -546px;width:90px;height:90px}.customize-option.hair_base_9_blue{background-image:url(spritesmith-main-2.png);background-position:-1572px -561px;width:60px;height:60px}.hair_base_9_brown{background-image:url(spritesmith-main-2.png);background-position:-1547px -637px;width:90px;height:90px}.customize-option.hair_base_9_brown{background-image:url(spritesmith-main-2.png);background-position:-1572px -652px;width:60px;height:60px}.hair_base_9_candycane{background-image:url(spritesmith-main-2.png);background-position:-1547px -728px;width:90px;height:90px}.customize-option.hair_base_9_candycane{background-image:url(spritesmith-main-2.png);background-position:-1572px -743px;width:60px;height:60px}.hair_base_9_candycorn{background-image:url(spritesmith-main-2.png);background-position:-1547px -819px;width:90px;height:90px}.customize-option.hair_base_9_candycorn{background-image:url(spritesmith-main-2.png);background-position:-1572px -834px;width:60px;height:60px}.hair_base_9_festive{background-image:url(spritesmith-main-2.png);background-position:-1547px -910px;width:90px;height:90px}.customize-option.hair_base_9_festive{background-image:url(spritesmith-main-2.png);background-position:-1572px -925px;width:60px;height:60px}.hair_base_9_frost{background-image:url(spritesmith-main-2.png);background-position:-1547px -1001px;width:90px;height:90px}.customize-option.hair_base_9_frost{background-image:url(spritesmith-main-2.png);background-position:-1572px -1016px;width:60px;height:60px}.hair_base_9_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-1547px -1092px;width:90px;height:90px}.customize-option.hair_base_9_ghostwhite{background-image:url(spritesmith-main-2.png);background-position:-1572px -1107px;width:60px;height:60px}.hair_base_9_green{background-image:url(spritesmith-main-2.png);background-position:-1547px -1183px;width:90px;height:90px}.customize-option.hair_base_9_green{background-image:url(spritesmith-main-2.png);background-position:-1572px -1198px;width:60px;height:60px}.hair_base_9_halloween{background-image:url(spritesmith-main-2.png);background-position:-1547px -1274px;width:90px;height:90px}.customize-option.hair_base_9_halloween{background-image:url(spritesmith-main-2.png);background-position:-1572px -1289px;width:60px;height:60px}.hair_base_9_holly{background-image:url(spritesmith-main-2.png);background-position:-1547px -1365px;width:90px;height:90px}.customize-option.hair_base_9_holly{background-image:url(spritesmith-main-2.png);background-position:-1572px -1380px;width:60px;height:60px}.hair_base_9_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-1547px -1456px;width:90px;height:90px}.customize-option.hair_base_9_hollygreen{background-image:url(spritesmith-main-2.png);background-position:-1572px -1471px;width:60px;height:60px}.hair_base_9_midnight{background-image:url(spritesmith-main-2.png);background-position:0 -1547px;width:90px;height:90px}.customize-option.hair_base_9_midnight{background-image:url(spritesmith-main-2.png);background-position:-25px -1562px;width:60px;height:60px}.hair_base_9_pblue{background-image:url(spritesmith-main-2.png);background-position:-91px -1547px;width:90px;height:90px}.customize-option.hair_base_9_pblue{background-image:url(spritesmith-main-2.png);background-position:-116px -1562px;width:60px;height:60px}.hair_base_9_pblue2{background-image:url(spritesmith-main-2.png);background-position:-182px -1547px;width:90px;height:90px}.customize-option.hair_base_9_pblue2{background-image:url(spritesmith-main-2.png);background-position:-207px -1562px;width:60px;height:60px}.hair_base_9_peppermint{background-image:url(spritesmith-main-2.png);background-position:-273px -1547px;width:90px;height:90px}.customize-option.hair_base_9_peppermint{background-image:url(spritesmith-main-2.png);background-position:-298px -1562px;width:60px;height:60px}.hair_base_9_pgreen{background-image:url(spritesmith-main-2.png);background-position:-364px -1547px;width:90px;height:90px}.customize-option.hair_base_9_pgreen{background-image:url(spritesmith-main-2.png);background-position:-389px -1562px;width:60px;height:60px}.hair_base_9_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-455px -1547px;width:90px;height:90px}.customize-option.hair_base_9_pgreen2{background-image:url(spritesmith-main-2.png);background-position:-480px -1562px;width:60px;height:60px}.hair_base_9_porange{background-image:url(spritesmith-main-2.png);background-position:-546px -1547px;width:90px;height:90px}.customize-option.hair_base_9_porange{background-image:url(spritesmith-main-2.png);background-position:-571px -1562px;width:60px;height:60px}.hair_base_9_porange2{background-image:url(spritesmith-main-2.png);background-position:-637px -1547px;width:90px;height:90px}.customize-option.hair_base_9_porange2{background-image:url(spritesmith-main-2.png);background-position:-662px -1562px;width:60px;height:60px}.hair_base_9_ppink{background-image:url(spritesmith-main-2.png);background-position:-728px -1547px;width:90px;height:90px}.customize-option.hair_base_9_ppink{background-image:url(spritesmith-main-2.png);background-position:-753px -1562px;width:60px;height:60px}.hair_base_9_ppink2{background-image:url(spritesmith-main-2.png);background-position:-819px -1547px;width:90px;height:90px}.customize-option.hair_base_9_ppink2{background-image:url(spritesmith-main-2.png);background-position:-844px -1562px;width:60px;height:60px}.hair_base_9_ppurple{background-image:url(spritesmith-main-2.png);background-position:-910px -1547px;width:90px;height:90px}.customize-option.hair_base_9_ppurple{background-image:url(spritesmith-main-2.png);background-position:-935px -1562px;width:60px;height:60px}.hair_base_9_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-1001px -1547px;width:90px;height:90px}.customize-option.hair_base_9_ppurple2{background-image:url(spritesmith-main-2.png);background-position:-1026px -1562px;width:60px;height:60px}.hair_base_9_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-1092px -1547px;width:90px;height:90px}.customize-option.hair_base_9_pumpkin{background-image:url(spritesmith-main-2.png);background-position:-1117px -1562px;width:60px;height:60px}.hair_base_9_purple{background-image:url(spritesmith-main-2.png);background-position:-1183px -1547px;width:90px;height:90px}.customize-option.hair_base_9_purple{background-image:url(spritesmith-main-2.png);background-position:-1208px -1562px;width:60px;height:60px}.hair_base_9_pyellow{background-image:url(spritesmith-main-2.png);background-position:-1274px -1547px;width:90px;height:90px}.customize-option.hair_base_9_pyellow{background-image:url(spritesmith-main-2.png);background-position:-1299px -1562px;width:60px;height:60px}.hair_base_9_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-1365px -1547px;width:90px;height:90px}.customize-option.hair_base_9_pyellow2{background-image:url(spritesmith-main-2.png);background-position:-1390px -1562px;width:60px;height:60px}.hair_base_9_rainbow{background-image:url(spritesmith-main-2.png);background-position:-1456px -1547px;width:90px;height:90px}.customize-option.hair_base_9_rainbow{background-image:url(spritesmith-main-2.png);background-position:-1481px -1562px;width:60px;height:60px}.hair_base_9_red{background-image:url(spritesmith-main-2.png);background-position:-1547px -1547px;width:90px;height:90px}.customize-option.hair_base_9_red{background-image:url(spritesmith-main-2.png);background-position:-1572px -1562px;width:60px;height:60px}.hair_base_9_snowy{background-image:url(spritesmith-main-2.png);background-position:-1638px 0;width:90px;height:90px}.customize-option.hair_base_9_snowy{background-image:url(spritesmith-main-2.png);background-position:-1663px -15px;width:60px;height:60px}.hair_base_9_white{background-image:url(spritesmith-main-2.png);background-position:-1638px -91px;width:90px;height:90px}.customize-option.hair_base_9_white{background-image:url(spritesmith-main-2.png);background-position:-1663px -106px;width:60px;height:60px}.hair_base_9_winternight{background-image:url(spritesmith-main-2.png);background-position:-1638px -182px;width:90px;height:90px}.customize-option.hair_base_9_winternight{background-image:url(spritesmith-main-2.png);background-position:-1663px -197px;width:60px;height:60px}.hair_base_9_winterstar{background-image:url(spritesmith-main-2.png);background-position:-1638px -273px;width:90px;height:90px}.customize-option.hair_base_9_winterstar{background-image:url(spritesmith-main-2.png);background-position:-1663px -288px;width:60px;height:60px}.hair_base_9_yellow{background-image:url(spritesmith-main-2.png);background-position:-1638px -364px;width:90px;height:90px}.customize-option.hair_base_9_yellow{background-image:url(spritesmith-main-2.png);background-position:-1663px -379px;width:60px;height:60px}.hair_base_9_zombie{background-image:url(spritesmith-main-3.png);background-position:-1276px -1092px;width:90px;height:90px}.customize-option.hair_base_9_zombie{background-image:url(spritesmith-main-3.png);background-position:-1301px -1107px;width:60px;height:60px}.hair_beard_1_pblue2{background-image:url(spritesmith-main-3.png);background-position:-1276px -728px;width:90px;height:90px}.customize-option.hair_beard_1_pblue2{background-image:url(spritesmith-main-3.png);background-position:-1301px -743px;width:60px;height:60px}.hair_beard_1_pgreen2{background-image:url(spritesmith-main-3.png);background-position:-1276px -1183px;width:90px;height:90px}.customize-option.hair_beard_1_pgreen2{background-image:url(spritesmith-main-3.png);background-position:-1301px -1198px;width:60px;height:60px}.hair_beard_1_porange2{background-image:url(spritesmith-main-3.png);background-position:-91px -1274px;width:90px;height:90px}.customize-option.hair_beard_1_porange2{background-image:url(spritesmith-main-3.png);background-position:-116px -1289px;width:60px;height:60px}.hair_beard_1_ppink2{background-image:url(spritesmith-main-3.png);background-position:-182px -1274px;width:90px;height:90px}.customize-option.hair_beard_1_ppink2{background-image:url(spritesmith-main-3.png);background-position:-207px -1289px;width:60px;height:60px}.hair_beard_1_ppurple2{background-image:url(spritesmith-main-3.png);background-position:-546px -1274px;width:90px;height:90px}.customize-option.hair_beard_1_ppurple2{background-image:url(spritesmith-main-3.png);background-position:-571px -1289px;width:60px;height:60px}.hair_beard_1_pyellow2{background-image:url(spritesmith-main-3.png);background-position:-637px -1274px;width:90px;height:90px}.customize-option.hair_beard_1_pyellow2{background-image:url(spritesmith-main-3.png);background-position:-662px -1289px;width:60px;height:60px}.hair_beard_2_pblue2{background-image:url(spritesmith-main-3.png);background-position:-819px -1274px;width:90px;height:90px}.customize-option.hair_beard_2_pblue2{background-image:url(spritesmith-main-3.png);background-position:-844px -1289px;width:60px;height:60px}.hair_beard_2_pgreen2{background-image:url(spritesmith-main-3.png);background-position:-1092px -1274px;width:90px;height:90px}.customize-option.hair_beard_2_pgreen2{background-image:url(spritesmith-main-3.png);background-position:-1117px -1289px;width:60px;height:60px}.hair_beard_2_porange2{background-image:url(spritesmith-main-3.png);background-position:-1183px -1274px;width:90px;height:90px}.customize-option.hair_beard_2_porange2{background-image:url(spritesmith-main-3.png);background-position:-1208px -1289px;width:60px;height:60px}.hair_beard_2_ppink2{background-image:url(spritesmith-main-3.png);background-position:-1367px 0;width:90px;height:90px}.customize-option.hair_beard_2_ppink2{background-image:url(spritesmith-main-3.png);background-position:-1392px -15px;width:60px;height:60px}.hair_beard_2_ppurple2{background-image:url(spritesmith-main-3.png);background-position:-1367px -91px;width:90px;height:90px}.customize-option.hair_beard_2_ppurple2{background-image:url(spritesmith-main-3.png);background-position:-1392px -106px;width:60px;height:60px}.hair_beard_2_pyellow2{background-image:url(spritesmith-main-3.png);background-position:-1367px -455px;width:90px;height:90px}.customize-option.hair_beard_2_pyellow2{background-image:url(spritesmith-main-3.png);background-position:-1392px -470px;width:60px;height:60px}.hair_beard_3_pblue2{background-image:url(spritesmith-main-3.png);background-position:-1367px -546px;width:90px;height:90px}.customize-option.hair_beard_3_pblue2{background-image:url(spritesmith-main-3.png);background-position:-1392px -561px;width:60px;height:60px}.hair_beard_3_pgreen2{background-image:url(spritesmith-main-3.png);background-position:-1367px -728px;width:90px;height:90px}.customize-option.hair_beard_3_pgreen2{background-image:url(spritesmith-main-3.png);background-position:-1392px -743px;width:60px;height:60px}.hair_beard_3_porange2{background-image:url(spritesmith-main-3.png);background-position:-1367px -819px;width:90px;height:90px}.customize-option.hair_beard_3_porange2{background-image:url(spritesmith-main-3.png);background-position:-1392px -834px;width:60px;height:60px}.hair_beard_3_ppink2{background-image:url(spritesmith-main-3.png);background-position:-1367px -1183px;width:90px;height:90px}.customize-option.hair_beard_3_ppink2{background-image:url(spritesmith-main-3.png);background-position:-1392px -1198px;width:60px;height:60px}.hair_beard_3_ppurple2{background-image:url(spritesmith-main-3.png);background-position:-1367px -1274px;width:90px;height:90px}.customize-option.hair_beard_3_ppurple2{background-image:url(spritesmith-main-3.png);background-position:-1392px -1289px;width:60px;height:60px}.hair_beard_3_pyellow2{background-image:url(spritesmith-main-3.png);background-position:-454px -182px;width:90px;height:90px}.customize-option.hair_beard_3_pyellow2{background-image:url(spritesmith-main-3.png);background-position:-479px -197px;width:60px;height:60px}.hair_mustache_1_pblue2{background-image:url(spritesmith-main-3.png);background-position:-454px -273px;width:90px;height:90px}.customize-option.hair_mustache_1_pblue2{background-image:url(spritesmith-main-3.png);background-position:-479px -288px;width:60px;height:60px}.hair_mustache_1_pgreen2{background-image:url(spritesmith-main-3.png);background-position:0 -364px;width:90px;height:90px}.customize-option.hair_mustache_1_pgreen2{background-image:url(spritesmith-main-3.png);background-position:-25px -379px;width:60px;height:60px}.hair_mustache_1_porange2{background-image:url(spritesmith-main-3.png);background-position:-91px -364px;width:90px;height:90px}.customize-option.hair_mustache_1_porange2{background-image:url(spritesmith-main-3.png);background-position:-116px -379px;width:60px;height:60px}.hair_mustache_1_ppink2{background-image:url(spritesmith-main-3.png);background-position:-182px -364px;width:90px;height:90px}.customize-option.hair_mustache_1_ppink2{background-image:url(spritesmith-main-3.png);background-position:-207px -379px;width:60px;height:60px}.hair_mustache_1_ppurple2{background-image:url(spritesmith-main-3.png);background-position:-273px -364px;width:90px;height:90px}.customize-option.hair_mustache_1_ppurple2{background-image:url(spritesmith-main-3.png);background-position:-298px -379px;width:60px;height:60px}.hair_mustache_1_pyellow2{background-image:url(spritesmith-main-3.png);background-position:-364px -364px;width:90px;height:90px}.customize-option.hair_mustache_1_pyellow2{background-image:url(spritesmith-main-3.png);background-position:-389px -379px;width:60px;height:60px}.hair_mustache_2_pblue2{background-image:url(spritesmith-main-3.png);background-position:-455px -364px;width:90px;height:90px}.customize-option.hair_mustache_2_pblue2{background-image:url(spritesmith-main-3.png);background-position:-480px -379px;width:60px;height:60px}.hair_mustache_2_pgreen2{background-image:url(spritesmith-main-3.png);background-position:0 -455px;width:90px;height:90px}.customize-option.hair_mustache_2_pgreen2{background-image:url(spritesmith-main-3.png);background-position:-25px -470px;width:60px;height:60px}.hair_mustache_2_porange2{background-image:url(spritesmith-main-3.png);background-position:-91px -455px;width:90px;height:90px}.customize-option.hair_mustache_2_porange2{background-image:url(spritesmith-main-3.png);background-position:-116px -470px;width:60px;height:60px}.hair_mustache_2_ppink2{background-image:url(spritesmith-main-3.png);background-position:-182px -455px;width:90px;height:90px}.customize-option.hair_mustache_2_ppink2{background-image:url(spritesmith-main-3.png);background-position:-207px -470px;width:60px;height:60px}.hair_mustache_2_ppurple2{background-image:url(spritesmith-main-3.png);background-position:-273px -455px;width:90px;height:90px}.customize-option.hair_mustache_2_ppurple2{background-image:url(spritesmith-main-3.png);background-position:-298px -470px;width:60px;height:60px}.hair_mustache_2_pyellow2{background-image:url(spritesmith-main-3.png);background-position:-364px -455px;width:90px;height:90px}.customize-option.hair_mustache_2_pyellow2{background-image:url(spritesmith-main-3.png);background-position:-389px -470px;width:60px;height:60px}.broad_shirt_black{background-image:url(spritesmith-main-3.png);background-position:-455px -455px;width:90px;height:90px}.customize-option.broad_shirt_black{background-image:url(spritesmith-main-3.png);background-position:-480px -485px;width:60px;height:60px}.broad_shirt_blue{background-image:url(spritesmith-main-3.png);background-position:-548px 0;width:90px;height:90px}.customize-option.broad_shirt_blue{background-image:url(spritesmith-main-3.png);background-position:-573px -30px;width:60px;height:60px}.broad_shirt_convict{background-image:url(spritesmith-main-3.png);background-position:-548px -91px;width:90px;height:90px}.customize-option.broad_shirt_convict{background-image:url(spritesmith-main-3.png);background-position:-573px -121px;width:60px;height:60px}.broad_shirt_cross{background-image:url(spritesmith-main-3.png);background-position:-548px -182px;width:90px;height:90px}.customize-option.broad_shirt_cross{background-image:url(spritesmith-main-3.png);background-position:-573px -212px;width:60px;height:60px}.broad_shirt_fire{background-image:url(spritesmith-main-3.png);background-position:-548px -273px;width:90px;height:90px}.customize-option.broad_shirt_fire{background-image:url(spritesmith-main-3.png);background-position:-573px -303px;width:60px;height:60px}.broad_shirt_green{background-image:url(spritesmith-main-3.png);background-position:-548px -364px;width:90px;height:90px}.customize-option.broad_shirt_green{background-image:url(spritesmith-main-3.png);background-position:-573px -394px;width:60px;height:60px}.broad_shirt_horizon{background-image:url(spritesmith-main-3.png);background-position:-548px -455px;width:90px;height:90px}.customize-option.broad_shirt_horizon{background-image:url(spritesmith-main-3.png);background-position:-573px -485px;width:60px;height:60px}.broad_shirt_ocean{background-image:url(spritesmith-main-3.png);background-position:0 -546px;width:90px;height:90px}.customize-option.broad_shirt_ocean{background-image:url(spritesmith-main-3.png);background-position:-25px -576px;width:60px;height:60px}.broad_shirt_pink{background-image:url(spritesmith-main-3.png);background-position:-91px -546px;width:90px;height:90px}.customize-option.broad_shirt_pink{background-image:url(spritesmith-main-3.png);background-position:-116px -576px;width:60px;height:60px}.broad_shirt_purple{background-image:url(spritesmith-main-3.png);background-position:-182px -546px;width:90px;height:90px}.customize-option.broad_shirt_purple{background-image:url(spritesmith-main-3.png);background-position:-207px -576px;width:60px;height:60px}.broad_shirt_rainbow{background-image:url(spritesmith-main-3.png);background-position:-273px -546px;width:90px;height:90px}.customize-option.broad_shirt_rainbow{background-image:url(spritesmith-main-3.png);background-position:-298px -576px;width:60px;height:60px}.broad_shirt_redblue{background-image:url(spritesmith-main-3.png);background-position:-364px -546px;width:90px;height:90px}.customize-option.broad_shirt_redblue{background-image:url(spritesmith-main-3.png);background-position:-389px -576px;width:60px;height:60px}.broad_shirt_thunder{background-image:url(spritesmith-main-3.png);background-position:-455px -546px;width:90px;height:90px}.customize-option.broad_shirt_thunder{background-image:url(spritesmith-main-3.png);background-position:-480px -576px;width:60px;height:60px}.broad_shirt_tropical{background-image:url(spritesmith-main-3.png);background-position:-546px -546px;width:90px;height:90px}.customize-option.broad_shirt_tropical{background-image:url(spritesmith-main-3.png);background-position:-571px -576px;width:60px;height:60px}.broad_shirt_white{background-image:url(spritesmith-main-3.png);background-position:-639px 0;width:90px;height:90px}.customize-option.broad_shirt_white{background-image:url(spritesmith-main-3.png);background-position:-664px -30px;width:60px;height:60px}.broad_shirt_yellow{background-image:url(spritesmith-main-3.png);background-position:-639px -91px;width:90px;height:90px}.customize-option.broad_shirt_yellow{background-image:url(spritesmith-main-3.png);background-position:-664px -121px;width:60px;height:60px}.broad_shirt_zombie{background-image:url(spritesmith-main-3.png);background-position:-639px -182px;width:90px;height:90px}.customize-option.broad_shirt_zombie{background-image:url(spritesmith-main-3.png);background-position:-664px -212px;width:60px;height:60px}.slim_shirt_black{background-image:url(spritesmith-main-3.png);background-position:-639px -273px;width:90px;height:90px}.customize-option.slim_shirt_black{background-image:url(spritesmith-main-3.png);background-position:-664px -303px;width:60px;height:60px}.slim_shirt_blue{background-image:url(spritesmith-main-3.png);background-position:-639px -364px;width:90px;height:90px}.customize-option.slim_shirt_blue{background-image:url(spritesmith-main-3.png);background-position:-664px -394px;width:60px;height:60px}.slim_shirt_convict{background-image:url(spritesmith-main-3.png);background-position:-639px -455px;width:90px;height:90px}.customize-option.slim_shirt_convict{background-image:url(spritesmith-main-3.png);background-position:-664px -485px;width:60px;height:60px}.slim_shirt_cross{background-image:url(spritesmith-main-3.png);background-position:-639px -546px;width:90px;height:90px}.customize-option.slim_shirt_cross{background-image:url(spritesmith-main-3.png);background-position:-664px -576px;width:60px;height:60px}.slim_shirt_fire{background-image:url(spritesmith-main-3.png);background-position:0 -637px;width:90px;height:90px}.customize-option.slim_shirt_fire{background-image:url(spritesmith-main-3.png);background-position:-25px -667px;width:60px;height:60px}.slim_shirt_green{background-image:url(spritesmith-main-3.png);background-position:-91px -637px;width:90px;height:90px}.customize-option.slim_shirt_green{background-image:url(spritesmith-main-3.png);background-position:-116px -667px;width:60px;height:60px}.slim_shirt_horizon{background-image:url(spritesmith-main-3.png);background-position:-182px -637px;width:90px;height:90px}.customize-option.slim_shirt_horizon{background-image:url(spritesmith-main-3.png);background-position:-207px -667px;width:60px;height:60px}.slim_shirt_ocean{background-image:url(spritesmith-main-3.png);background-position:-273px -637px;width:90px;height:90px}.customize-option.slim_shirt_ocean{background-image:url(spritesmith-main-3.png);background-position:-298px -667px;width:60px;height:60px}.slim_shirt_pink{background-image:url(spritesmith-main-3.png);background-position:-364px -637px;width:90px;height:90px}.customize-option.slim_shirt_pink{background-image:url(spritesmith-main-3.png);background-position:-389px -667px;width:60px;height:60px}.slim_shirt_purple{background-image:url(spritesmith-main-3.png);background-position:-455px -637px;width:90px;height:90px}.customize-option.slim_shirt_purple{background-image:url(spritesmith-main-3.png);background-position:-480px -667px;width:60px;height:60px}.slim_shirt_rainbow{background-image:url(spritesmith-main-3.png);background-position:-546px -637px;width:90px;height:90px}.customize-option.slim_shirt_rainbow{background-image:url(spritesmith-main-3.png);background-position:-571px -667px;width:60px;height:60px}.slim_shirt_redblue{background-image:url(spritesmith-main-3.png);background-position:-637px -637px;width:90px;height:90px}.customize-option.slim_shirt_redblue{background-image:url(spritesmith-main-3.png);background-position:-662px -667px;width:60px;height:60px}.slim_shirt_thunder{background-image:url(spritesmith-main-3.png);background-position:-730px 0;width:90px;height:90px}.customize-option.slim_shirt_thunder{background-image:url(spritesmith-main-3.png);background-position:-755px -30px;width:60px;height:60px}.slim_shirt_tropical{background-image:url(spritesmith-main-3.png);background-position:-730px -91px;width:90px;height:90px}.customize-option.slim_shirt_tropical{background-image:url(spritesmith-main-3.png);background-position:-755px -121px;width:60px;height:60px}.slim_shirt_white{background-image:url(spritesmith-main-3.png);background-position:-730px -182px;width:90px;height:90px}.customize-option.slim_shirt_white{background-image:url(spritesmith-main-3.png);background-position:-755px -212px;width:60px;height:60px}.slim_shirt_yellow{background-image:url(spritesmith-main-3.png);background-position:-730px -273px;width:90px;height:90px}.customize-option.slim_shirt_yellow{background-image:url(spritesmith-main-3.png);background-position:-755px -303px;width:60px;height:60px}.slim_shirt_zombie{background-image:url(spritesmith-main-3.png);background-position:-730px -364px;width:90px;height:90px}.customize-option.slim_shirt_zombie{background-image:url(spritesmith-main-3.png);background-position:-755px -394px;width:60px;height:60px}.skin_0ff591{background-image:url(spritesmith-main-3.png);background-position:-730px -455px;width:90px;height:90px}.customize-option.skin_0ff591{background-image:url(spritesmith-main-3.png);background-position:-755px -470px;width:60px;height:60px}.skin_0ff591_sleep{background-image:url(spritesmith-main-3.png);background-position:-730px -546px;width:90px;height:90px}.customize-option.skin_0ff591_sleep{background-image:url(spritesmith-main-3.png);background-position:-755px -561px;width:60px;height:60px}.skin_2b43f6{background-image:url(spritesmith-main-3.png);background-position:-730px -637px;width:90px;height:90px}.customize-option.skin_2b43f6{background-image:url(spritesmith-main-3.png);background-position:-755px -652px;width:60px;height:60px}.skin_2b43f6_sleep{background-image:url(spritesmith-main-3.png);background-position:0 -728px;width:90px;height:90px}.customize-option.skin_2b43f6_sleep{background-image:url(spritesmith-main-3.png);background-position:-25px -743px;width:60px;height:60px}.skin_6bd049{background-image:url(spritesmith-main-3.png);background-position:-91px -728px;width:90px;height:90px}.customize-option.skin_6bd049{background-image:url(spritesmith-main-3.png);background-position:-116px -743px;width:60px;height:60px}.skin_6bd049_sleep{background-image:url(spritesmith-main-3.png);background-position:-182px -728px;width:90px;height:90px}.customize-option.skin_6bd049_sleep{background-image:url(spritesmith-main-3.png);background-position:-207px -743px;width:60px;height:60px}.skin_800ed0{background-image:url(spritesmith-main-3.png);background-position:-273px -728px;width:90px;height:90px}.customize-option.skin_800ed0{background-image:url(spritesmith-main-3.png);background-position:-298px -743px;width:60px;height:60px}.skin_800ed0_sleep{background-image:url(spritesmith-main-3.png);background-position:-364px -728px;width:90px;height:90px}.customize-option.skin_800ed0_sleep{background-image:url(spritesmith-main-3.png);background-position:-389px -743px;width:60px;height:60px}.skin_915533{background-image:url(spritesmith-main-3.png);background-position:-455px -728px;width:90px;height:90px}.customize-option.skin_915533{background-image:url(spritesmith-main-3.png);background-position:-480px -743px;width:60px;height:60px}.skin_915533_sleep{background-image:url(spritesmith-main-3.png);background-position:-546px -728px;width:90px;height:90px}.customize-option.skin_915533_sleep{background-image:url(spritesmith-main-3.png);background-position:-571px -743px;width:60px;height:60px}.skin_98461a{background-image:url(spritesmith-main-3.png);background-position:-637px -728px;width:90px;height:90px}.customize-option.skin_98461a{background-image:url(spritesmith-main-3.png);background-position:-662px -743px;width:60px;height:60px}.skin_98461a_sleep{background-image:url(spritesmith-main-3.png);background-position:-728px -728px;width:90px;height:90px}.customize-option.skin_98461a_sleep{background-image:url(spritesmith-main-3.png);background-position:-753px -743px;width:60px;height:60px}.skin_bear{background-image:url(spritesmith-main-3.png);background-position:-821px 0;width:90px;height:90px}.customize-option.skin_bear{background-image:url(spritesmith-main-3.png);background-position:-846px -15px;width:60px;height:60px}.skin_bear_sleep{background-image:url(spritesmith-main-3.png);background-position:-821px -91px;width:90px;height:90px}.customize-option.skin_bear_sleep{background-image:url(spritesmith-main-3.png);background-position:-846px -106px;width:60px;height:60px}.skin_c06534{background-image:url(spritesmith-main-3.png);background-position:-821px -182px;width:90px;height:90px}.customize-option.skin_c06534{background-image:url(spritesmith-main-3.png);background-position:-846px -197px;width:60px;height:60px}.skin_c06534_sleep{background-image:url(spritesmith-main-3.png);background-position:-821px -273px;width:90px;height:90px}.customize-option.skin_c06534_sleep{background-image:url(spritesmith-main-3.png);background-position:-846px -288px;width:60px;height:60px}.skin_c3e1dc{background-image:url(spritesmith-main-3.png);background-position:-821px -364px;width:90px;height:90px}.customize-option.skin_c3e1dc{background-image:url(spritesmith-main-3.png);background-position:-846px -379px;width:60px;height:60px}.skin_c3e1dc_sleep{background-image:url(spritesmith-main-3.png);background-position:-821px -455px;width:90px;height:90px}.customize-option.skin_c3e1dc_sleep{background-image:url(spritesmith-main-3.png);background-position:-846px -470px;width:60px;height:60px}.skin_cactus{background-image:url(spritesmith-main-3.png);background-position:-821px -546px;width:90px;height:90px}.customize-option.skin_cactus{background-image:url(spritesmith-main-3.png);background-position:-846px -561px;width:60px;height:60px}.skin_cactus_sleep{background-image:url(spritesmith-main-3.png);background-position:-821px -637px;width:90px;height:90px}.customize-option.skin_cactus_sleep{background-image:url(spritesmith-main-3.png);background-position:-846px -652px;width:60px;height:60px}.skin_candycorn{background-image:url(spritesmith-main-3.png);background-position:-821px -728px;width:90px;height:90px}.customize-option.skin_candycorn{background-image:url(spritesmith-main-3.png);background-position:-846px -743px;width:60px;height:60px}.skin_candycorn_sleep{background-image:url(spritesmith-main-3.png);background-position:0 -819px;width:90px;height:90px}.customize-option.skin_candycorn_sleep{background-image:url(spritesmith-main-3.png);background-position:-25px -834px;width:60px;height:60px}.skin_clownfish{background-image:url(spritesmith-main-3.png);background-position:-91px -819px;width:90px;height:90px}.customize-option.skin_clownfish{background-image:url(spritesmith-main-3.png);background-position:-116px -834px;width:60px;height:60px}.skin_clownfish_sleep{background-image:url(spritesmith-main-3.png);background-position:-182px -819px;width:90px;height:90px}.customize-option.skin_clownfish_sleep{background-image:url(spritesmith-main-3.png);background-position:-207px -834px;width:60px;height:60px}.skin_d7a9f7{background-image:url(spritesmith-main-3.png);background-position:-273px -819px;width:90px;height:90px}.customize-option.skin_d7a9f7{background-image:url(spritesmith-main-3.png);background-position:-298px -834px;width:60px;height:60px}.skin_d7a9f7_sleep{background-image:url(spritesmith-main-3.png);background-position:-364px -819px;width:90px;height:90px}.customize-option.skin_d7a9f7_sleep{background-image:url(spritesmith-main-3.png);background-position:-389px -834px;width:60px;height:60px}.skin_ddc994{background-image:url(spritesmith-main-3.png);background-position:-455px -819px;width:90px;height:90px}.customize-option.skin_ddc994{background-image:url(spritesmith-main-3.png);background-position:-480px -834px;width:60px;height:60px}.skin_ddc994_sleep{background-image:url(spritesmith-main-3.png);background-position:-546px -819px;width:90px;height:90px}.customize-option.skin_ddc994_sleep{background-image:url(spritesmith-main-3.png);background-position:-571px -834px;width:60px;height:60px}.skin_deepocean{background-image:url(spritesmith-main-3.png);background-position:-637px -819px;width:90px;height:90px}.customize-option.skin_deepocean{background-image:url(spritesmith-main-3.png);background-position:-662px -834px;width:60px;height:60px}.skin_deepocean_sleep{background-image:url(spritesmith-main-3.png);background-position:-728px -819px;width:90px;height:90px}.customize-option.skin_deepocean_sleep{background-image:url(spritesmith-main-3.png);background-position:-753px -834px;width:60px;height:60px}.skin_ea8349{background-image:url(spritesmith-main-3.png);background-position:-819px -819px;width:90px;height:90px}.customize-option.skin_ea8349{background-image:url(spritesmith-main-3.png);background-position:-844px -834px;width:60px;height:60px}.skin_ea8349_sleep{background-image:url(spritesmith-main-3.png);background-position:-912px 0;width:90px;height:90px}.customize-option.skin_ea8349_sleep{background-image:url(spritesmith-main-3.png);background-position:-937px -15px;width:60px;height:60px}.skin_eb052b{background-image:url(spritesmith-main-3.png);background-position:-912px -91px;width:90px;height:90px}.customize-option.skin_eb052b{background-image:url(spritesmith-main-3.png);background-position:-937px -106px;width:60px;height:60px}.skin_eb052b_sleep{background-image:url(spritesmith-main-3.png);background-position:-912px -182px;width:90px;height:90px}.customize-option.skin_eb052b_sleep{background-image:url(spritesmith-main-3.png);background-position:-937px -197px;width:60px;height:60px}.skin_f5a76e{background-image:url(spritesmith-main-3.png);background-position:-912px -273px;width:90px;height:90px}.customize-option.skin_f5a76e{background-image:url(spritesmith-main-3.png);background-position:-937px -288px;width:60px;height:60px}.skin_f5a76e_sleep{background-image:url(spritesmith-main-3.png);background-position:-912px -364px;width:90px;height:90px}.customize-option.skin_f5a76e_sleep{background-image:url(spritesmith-main-3.png);background-position:-937px -379px;width:60px;height:60px}.skin_f5d70f{background-image:url(spritesmith-main-3.png);background-position:-912px -455px;width:90px;height:90px}.customize-option.skin_f5d70f{background-image:url(spritesmith-main-3.png);background-position:-937px -470px;width:60px;height:60px}.skin_f5d70f_sleep{background-image:url(spritesmith-main-3.png);background-position:-912px -546px;width:90px;height:90px}.customize-option.skin_f5d70f_sleep{background-image:url(spritesmith-main-3.png);background-position:-937px -561px;width:60px;height:60px}.skin_f69922{background-image:url(spritesmith-main-3.png);background-position:-912px -637px;width:90px;height:90px}.customize-option.skin_f69922{background-image:url(spritesmith-main-3.png);background-position:-937px -652px;width:60px;height:60px}.skin_f69922_sleep{background-image:url(spritesmith-main-3.png);background-position:-912px -728px;width:90px;height:90px}.customize-option.skin_f69922_sleep{background-image:url(spritesmith-main-3.png);background-position:-937px -743px;width:60px;height:60px}.skin_fox{background-image:url(spritesmith-main-3.png);background-position:-912px -819px;width:90px;height:90px}.customize-option.skin_fox{background-image:url(spritesmith-main-3.png);background-position:-937px -834px;width:60px;height:60px}.skin_fox_sleep{background-image:url(spritesmith-main-3.png);background-position:0 -910px;width:90px;height:90px}.customize-option.skin_fox_sleep{background-image:url(spritesmith-main-3.png);background-position:-25px -925px;width:60px;height:60px}.skin_ghost{background-image:url(spritesmith-main-3.png);background-position:-91px -910px;width:90px;height:90px}.customize-option.skin_ghost{background-image:url(spritesmith-main-3.png);background-position:-116px -925px;width:60px;height:60px}.skin_ghost_sleep{background-image:url(spritesmith-main-3.png);background-position:-182px -910px;width:90px;height:90px}.customize-option.skin_ghost_sleep{background-image:url(spritesmith-main-3.png);background-position:-207px -925px;width:60px;height:60px}.skin_lion{background-image:url(spritesmith-main-3.png);background-position:-273px -910px;width:90px;height:90px}.customize-option.skin_lion{background-image:url(spritesmith-main-3.png);background-position:-298px -925px;width:60px;height:60px}.skin_lion_sleep{background-image:url(spritesmith-main-3.png);background-position:-364px -910px;width:90px;height:90px}.customize-option.skin_lion_sleep{background-image:url(spritesmith-main-3.png);background-position:-389px -925px;width:60px;height:60px}.skin_merblue{background-image:url(spritesmith-main-3.png);background-position:-455px -910px;width:90px;height:90px}.customize-option.skin_merblue{background-image:url(spritesmith-main-3.png);background-position:-480px -925px;width:60px;height:60px}.skin_merblue_sleep{background-image:url(spritesmith-main-3.png);background-position:-546px -910px;width:90px;height:90px}.customize-option.skin_merblue_sleep{background-image:url(spritesmith-main-3.png);background-position:-571px -925px;width:60px;height:60px}.skin_mergold{background-image:url(spritesmith-main-3.png);background-position:-637px -910px;width:90px;height:90px}.customize-option.skin_mergold{background-image:url(spritesmith-main-3.png);background-position:-662px -925px;width:60px;height:60px}.skin_mergold_sleep{background-image:url(spritesmith-main-3.png);background-position:-728px -910px;width:90px;height:90px}.customize-option.skin_mergold_sleep{background-image:url(spritesmith-main-3.png);background-position:-753px -925px;width:60px;height:60px}.skin_mergreen{background-image:url(spritesmith-main-3.png);background-position:-819px -910px;width:90px;height:90px}.customize-option.skin_mergreen{background-image:url(spritesmith-main-3.png);background-position:-844px -925px;width:60px;height:60px}.skin_mergreen_sleep{background-image:url(spritesmith-main-3.png);background-position:-910px -910px;width:90px;height:90px}.customize-option.skin_mergreen_sleep{background-image:url(spritesmith-main-3.png);background-position:-935px -925px;width:60px;height:60px}.skin_merruby{background-image:url(spritesmith-main-3.png);background-position:-1003px 0;width:90px;height:90px}.customize-option.skin_merruby{background-image:url(spritesmith-main-3.png);background-position:-1028px -15px;width:60px;height:60px}.skin_merruby_sleep{background-image:url(spritesmith-main-3.png);background-position:-1003px -91px;width:90px;height:90px}.customize-option.skin_merruby_sleep{background-image:url(spritesmith-main-3.png);background-position:-1028px -106px;width:60px;height:60px}.skin_monster{background-image:url(spritesmith-main-3.png);background-position:-1003px -182px;width:90px;height:90px}.customize-option.skin_monster{background-image:url(spritesmith-main-3.png);background-position:-1028px -197px;width:60px;height:60px}.skin_monster_sleep{background-image:url(spritesmith-main-3.png);background-position:-1003px -273px;width:90px;height:90px}.customize-option.skin_monster_sleep{background-image:url(spritesmith-main-3.png);background-position:-1028px -288px;width:60px;height:60px}.skin_ogre{background-image:url(spritesmith-main-3.png);background-position:-1003px -364px;width:90px;height:90px}.customize-option.skin_ogre{background-image:url(spritesmith-main-3.png);background-position:-1028px -379px;width:60px;height:60px}.skin_ogre_sleep{background-image:url(spritesmith-main-3.png);background-position:-1003px -455px;width:90px;height:90px}.customize-option.skin_ogre_sleep{background-image:url(spritesmith-main-3.png);background-position:-1028px -470px;width:60px;height:60px}.skin_panda{background-image:url(spritesmith-main-3.png);background-position:-1003px -546px;width:90px;height:90px}.customize-option.skin_panda{background-image:url(spritesmith-main-3.png);background-position:-1028px -561px;width:60px;height:60px}.skin_panda_sleep{background-image:url(spritesmith-main-3.png);background-position:-1003px -637px;width:90px;height:90px}.customize-option.skin_panda_sleep{background-image:url(spritesmith-main-3.png);background-position:-1028px -652px;width:60px;height:60px}.skin_pastelBlue{background-image:url(spritesmith-main-3.png);background-position:-1003px -728px;width:90px;height:90px}.customize-option.skin_pastelBlue{background-image:url(spritesmith-main-3.png);background-position:-1028px -743px;width:60px;height:60px}.skin_pastelBlue_sleep{background-image:url(spritesmith-main-3.png);background-position:-1003px -819px;width:90px;height:90px}.customize-option.skin_pastelBlue_sleep{background-image:url(spritesmith-main-3.png);background-position:-1028px -834px;width:60px;height:60px}.skin_pastelGreen{background-image:url(spritesmith-main-3.png);background-position:-1003px -910px;width:90px;height:90px}.customize-option.skin_pastelGreen{background-image:url(spritesmith-main-3.png);background-position:-1028px -925px;width:60px;height:60px}.skin_pastelGreen_sleep{background-image:url(spritesmith-main-3.png);background-position:0 -1001px;width:90px;height:90px}.customize-option.skin_pastelGreen_sleep{background-image:url(spritesmith-main-3.png);background-position:-25px -1016px;width:60px;height:60px}.skin_pastelOrange{background-image:url(spritesmith-main-3.png);background-position:-91px -1001px;width:90px;height:90px}.customize-option.skin_pastelOrange{background-image:url(spritesmith-main-3.png);background-position:-116px -1016px;width:60px;height:60px}.skin_pastelOrange_sleep{background-image:url(spritesmith-main-3.png);background-position:-182px -1001px;width:90px;height:90px}.customize-option.skin_pastelOrange_sleep{background-image:url(spritesmith-main-3.png);background-position:-207px -1016px;width:60px;height:60px}.skin_pastelPink{background-image:url(spritesmith-main-3.png);background-position:-273px -1001px;width:90px;height:90px}.customize-option.skin_pastelPink{background-image:url(spritesmith-main-3.png);background-position:-298px -1016px;width:60px;height:60px}.skin_pastelPink_sleep{background-image:url(spritesmith-main-3.png);background-position:-364px -1001px;width:90px;height:90px}.customize-option.skin_pastelPink_sleep{background-image:url(spritesmith-main-3.png);background-position:-389px -1016px;width:60px;height:60px}.skin_pastelPurple{background-image:url(spritesmith-main-3.png);background-position:-455px -1001px;width:90px;height:90px}.customize-option.skin_pastelPurple{background-image:url(spritesmith-main-3.png);background-position:-480px -1016px;width:60px;height:60px}.skin_pastelPurple_sleep{background-image:url(spritesmith-main-3.png);background-position:-546px -1001px;width:90px;height:90px}.customize-option.skin_pastelPurple_sleep{background-image:url(spritesmith-main-3.png);background-position:-571px -1016px;width:60px;height:60px}.skin_pastelRainbowChevron{background-image:url(spritesmith-main-3.png);background-position:-637px -1001px;width:90px;height:90px}.customize-option.skin_pastelRainbowChevron{background-image:url(spritesmith-main-3.png);background-position:-662px -1016px;width:60px;height:60px}.skin_pastelRainbowChevron_sleep{background-image:url(spritesmith-main-3.png);background-position:-728px -1001px;width:90px;height:90px}.customize-option.skin_pastelRainbowChevron_sleep{background-image:url(spritesmith-main-3.png);background-position:-753px -1016px;width:60px;height:60px}.skin_pastelRainbowDiagonal{background-image:url(spritesmith-main-3.png);background-position:-819px -1001px;width:90px;height:90px}.customize-option.skin_pastelRainbowDiagonal{background-image:url(spritesmith-main-3.png);background-position:-844px -1016px;width:60px;height:60px}.skin_pastelRainbowDiagonal_sleep{background-image:url(spritesmith-main-3.png);background-position:-910px -1001px;width:90px;height:90px}.customize-option.skin_pastelRainbowDiagonal_sleep{background-image:url(spritesmith-main-3.png);background-position:-935px -1016px;width:60px;height:60px}.skin_pastelYellow{background-image:url(spritesmith-main-3.png);background-position:-1001px -1001px;width:90px;height:90px}.customize-option.skin_pastelYellow{background-image:url(spritesmith-main-3.png);background-position:-1026px -1016px;width:60px;height:60px}.skin_pastelYellow_sleep{background-image:url(spritesmith-main-3.png);background-position:-1094px 0;width:90px;height:90px}.customize-option.skin_pastelYellow_sleep{background-image:url(spritesmith-main-3.png);background-position:-1119px -15px;width:60px;height:60px}.skin_pig{background-image:url(spritesmith-main-3.png);background-position:-1094px -91px;width:90px;height:90px}.customize-option.skin_pig{background-image:url(spritesmith-main-3.png);background-position:-1119px -106px;width:60px;height:60px}.skin_pig_sleep{background-image:url(spritesmith-main-3.png);background-position:-1094px -182px;width:90px;height:90px}.customize-option.skin_pig_sleep{background-image:url(spritesmith-main-3.png);background-position:-1119px -197px;width:60px;height:60px}.skin_pumpkin{background-image:url(spritesmith-main-3.png);background-position:-1094px -273px;width:90px;height:90px}.customize-option.skin_pumpkin{background-image:url(spritesmith-main-3.png);background-position:-1119px -288px;width:60px;height:60px}.skin_pumpkin2{background-image:url(spritesmith-main-3.png);background-position:-1094px -364px;width:90px;height:90px}.customize-option.skin_pumpkin2{background-image:url(spritesmith-main-3.png);background-position:-1119px -379px;width:60px;height:60px}.skin_pumpkin2_sleep{background-image:url(spritesmith-main-3.png);background-position:-1094px -455px;width:90px;height:90px}.customize-option.skin_pumpkin2_sleep{background-image:url(spritesmith-main-3.png);background-position:-1119px -470px;width:60px;height:60px}.skin_pumpkin_sleep{background-image:url(spritesmith-main-3.png);background-position:-1094px -546px;width:90px;height:90px}.customize-option.skin_pumpkin_sleep{background-image:url(spritesmith-main-3.png);background-position:-1119px -561px;width:60px;height:60px}.skin_rainbow{background-image:url(spritesmith-main-3.png);background-position:-1094px -637px;width:90px;height:90px}.customize-option.skin_rainbow{background-image:url(spritesmith-main-3.png);background-position:-1119px -652px;width:60px;height:60px}.skin_rainbow_sleep{background-image:url(spritesmith-main-3.png);background-position:-1094px -728px;width:90px;height:90px}.customize-option.skin_rainbow_sleep{background-image:url(spritesmith-main-3.png);background-position:-1119px -743px;width:60px;height:60px}.skin_reptile{background-image:url(spritesmith-main-3.png);background-position:-1094px -819px;width:90px;height:90px}.customize-option.skin_reptile{background-image:url(spritesmith-main-3.png);background-position:-1119px -834px;width:60px;height:60px}.skin_reptile_sleep{background-image:url(spritesmith-main-3.png);background-position:-1094px -910px;width:90px;height:90px}.customize-option.skin_reptile_sleep{background-image:url(spritesmith-main-3.png);background-position:-1119px -925px;width:60px;height:60px}.skin_shadow{background-image:url(spritesmith-main-3.png);background-position:-1094px -1001px;width:90px;height:90px}.customize-option.skin_shadow{background-image:url(spritesmith-main-3.png);background-position:-1119px -1016px;width:60px;height:60px}.skin_shadow2{background-image:url(spritesmith-main-3.png);background-position:0 -1092px;width:90px;height:90px}.customize-option.skin_shadow2{background-image:url(spritesmith-main-3.png);background-position:-25px -1107px;width:60px;height:60px}.skin_shadow2_sleep{background-image:url(spritesmith-main-3.png);background-position:-91px -1092px;width:90px;height:90px}.customize-option.skin_shadow2_sleep{background-image:url(spritesmith-main-3.png);background-position:-116px -1107px;width:60px;height:60px}.skin_shadow_sleep{background-image:url(spritesmith-main-3.png);background-position:-182px -1092px;width:90px;height:90px}.customize-option.skin_shadow_sleep{background-image:url(spritesmith-main-3.png);background-position:-207px -1107px;width:60px;height:60px}.skin_shark{background-image:url(spritesmith-main-3.png);background-position:-273px -1092px;width:90px;height:90px}.customize-option.skin_shark{background-image:url(spritesmith-main-3.png);background-position:-298px -1107px;width:60px;height:60px}.skin_shark_sleep{background-image:url(spritesmith-main-3.png);background-position:-364px -1092px;width:90px;height:90px}.customize-option.skin_shark_sleep{background-image:url(spritesmith-main-3.png);background-position:-389px -1107px;width:60px;height:60px}.skin_skeleton{background-image:url(spritesmith-main-3.png);background-position:-455px -1092px;width:90px;height:90px}.customize-option.skin_skeleton{background-image:url(spritesmith-main-3.png);background-position:-480px -1107px;width:60px;height:60px}.skin_skeleton2{background-image:url(spritesmith-main-3.png);background-position:-546px -1092px;width:90px;height:90px}.customize-option.skin_skeleton2{background-image:url(spritesmith-main-3.png);background-position:-571px -1107px;width:60px;height:60px}.skin_skeleton2_sleep{background-image:url(spritesmith-main-3.png);background-position:-637px -1092px;width:90px;height:90px}.customize-option.skin_skeleton2_sleep{background-image:url(spritesmith-main-3.png);background-position:-662px -1107px;width:60px;height:60px}.skin_skeleton_sleep{background-image:url(spritesmith-main-3.png);background-position:-728px -1092px;width:90px;height:90px}.customize-option.skin_skeleton_sleep{background-image:url(spritesmith-main-3.png);background-position:-753px -1107px;width:60px;height:60px}.skin_tiger{background-image:url(spritesmith-main-3.png);background-position:-819px -1092px;width:90px;height:90px}.customize-option.skin_tiger{background-image:url(spritesmith-main-3.png);background-position:-844px -1107px;width:60px;height:60px}.skin_tiger_sleep{background-image:url(spritesmith-main-3.png);background-position:-910px -1092px;width:90px;height:90px}.customize-option.skin_tiger_sleep{background-image:url(spritesmith-main-3.png);background-position:-935px -1107px;width:60px;height:60px}.skin_transparent{background-image:url(spritesmith-main-3.png);background-position:-1001px -1092px;width:90px;height:90px}.customize-option.skin_transparent{background-image:url(spritesmith-main-3.png);background-position:-1026px -1107px;width:60px;height:60px}.skin_transparent_sleep{background-image:url(spritesmith-main-3.png);background-position:-1092px -1092px;width:90px;height:90px}.customize-option.skin_transparent_sleep{background-image:url(spritesmith-main-3.png);background-position:-1117px -1107px;width:60px;height:60px}.skin_tropicalwater{background-image:url(spritesmith-main-3.png);background-position:-1185px 0;width:90px;height:90px}.customize-option.skin_tropicalwater{background-image:url(spritesmith-main-3.png);background-position:-1210px -15px;width:60px;height:60px}.skin_tropicalwater_sleep{background-image:url(spritesmith-main-3.png);background-position:-1185px -91px;width:90px;height:90px}.customize-option.skin_tropicalwater_sleep{background-image:url(spritesmith-main-3.png);background-position:-1210px -106px;width:60px;height:60px}.skin_wolf{background-image:url(spritesmith-main-3.png);background-position:-1185px -182px;width:90px;height:90px}.customize-option.skin_wolf{background-image:url(spritesmith-main-3.png);background-position:-1210px -197px;width:60px;height:60px}.skin_wolf_sleep{background-image:url(spritesmith-main-3.png);background-position:-1185px -273px;width:90px;height:90px}.customize-option.skin_wolf_sleep{background-image:url(spritesmith-main-3.png);background-position:-1210px -288px;width:60px;height:60px}.skin_zombie{background-image:url(spritesmith-main-3.png);background-position:-1185px -364px;width:90px;height:90px}.customize-option.skin_zombie{background-image:url(spritesmith-main-3.png);background-position:-1210px -379px;width:60px;height:60px}.skin_zombie2{background-image:url(spritesmith-main-3.png);background-position:-1185px -455px;width:90px;height:90px}.customize-option.skin_zombie2{background-image:url(spritesmith-main-3.png);background-position:-1210px -470px;width:60px;height:60px}.skin_zombie2_sleep{background-image:url(spritesmith-main-3.png);background-position:-1185px -546px;width:90px;height:90px}.customize-option.skin_zombie2_sleep{background-image:url(spritesmith-main-3.png);background-position:-1210px -561px;width:60px;height:60px}.skin_zombie_sleep{background-image:url(spritesmith-main-3.png);background-position:-1185px -637px;width:90px;height:90px}.customize-option.skin_zombie_sleep{background-image:url(spritesmith-main-3.png);background-position:-1210px -652px;width:60px;height:60px}.broad_armor_armoire_crystalCrescentRobes{background-image:url(spritesmith-main-3.png);background-position:-1185px -728px;width:90px;height:90px}.broad_armor_armoire_gladiatorArmor{background-image:url(spritesmith-main-3.png);background-position:-1185px -819px;width:90px;height:90px}.broad_armor_armoire_goldenToga{background-image:url(spritesmith-main-3.png);background-position:-1185px -910px;width:90px;height:90px}.broad_armor_armoire_hornedIronArmor{background-image:url(spritesmith-main-3.png);background-position:-1185px -1001px;width:90px;height:90px}.broad_armor_armoire_lunarArmor{background-image:url(spritesmith-main-3.png);background-position:-1185px -1092px;width:90px;height:90px}.broad_armor_armoire_plagueDoctorOvercoat{background-image:url(spritesmith-main-3.png);background-position:0 -1183px;width:90px;height:90px}.broad_armor_armoire_rancherRobes{background-image:url(spritesmith-main-3.png);background-position:-91px -1183px;width:90px;height:90px}.broad_armor_armoire_royalRobes{background-image:url(spritesmith-main-3.png);background-position:-182px -1183px;width:90px;height:90px}.broad_armor_armoire_shepherdRobes{background-image:url(spritesmith-main-3.png);background-position:-273px -1183px;width:90px;height:90px}.eyewear_armoire_plagueDoctorMask{background-image:url(spritesmith-main-3.png);background-position:-364px -1183px;width:90px;height:90px}.head_armoire_blackCat{background-image:url(spritesmith-main-3.png);background-position:-455px -1183px;width:90px;height:90px}.head_armoire_blueFloppyHat{background-image:url(spritesmith-main-3.png);background-position:-546px -1183px;width:90px;height:90px}.head_armoire_blueHairbow{background-image:url(spritesmith-main-3.png);background-position:-637px -1183px;width:90px;height:90px}.head_armoire_crystalCrescentHat{background-image:url(spritesmith-main-3.png);background-position:-728px -1183px;width:90px;height:90px}.head_armoire_gladiatorHelm{background-image:url(spritesmith-main-3.png);background-position:-819px -1183px;width:90px;height:90px}.head_armoire_goldenLaurels{background-image:url(spritesmith-main-3.png);background-position:-910px -1183px;width:90px;height:90px}.head_armoire_hornedIronHelm{background-image:url(spritesmith-main-3.png);background-position:-1001px -1183px;width:90px;height:90px}.head_armoire_lunarCrown{background-image:url(spritesmith-main-3.png);background-position:-1092px -1183px;width:90px;height:90px}.head_armoire_orangeCat{background-image:url(spritesmith-main-3.png);background-position:-1183px -1183px;width:90px;height:90px}.head_armoire_plagueDoctorHat{background-image:url(spritesmith-main-3.png);background-position:-1276px 0;width:90px;height:90px}.head_armoire_rancherHat{background-image:url(spritesmith-main-3.png);background-position:-1276px -91px;width:90px;height:90px}.head_armoire_redFloppyHat{background-image:url(spritesmith-main-3.png);background-position:-1276px -182px;width:90px;height:90px}.head_armoire_redHairbow{background-image:url(spritesmith-main-3.png);background-position:-1276px -273px;width:90px;height:90px}.head_armoire_royalCrown{background-image:url(spritesmith-main-3.png);background-position:-1276px -364px;width:90px;height:90px}.head_armoire_shepherdHeaddress{background-image:url(spritesmith-main-3.png);background-position:-1276px -455px;width:90px;height:90px}.head_armoire_violetFloppyHat{background-image:url(spritesmith-main-3.png);background-position:-1276px -546px;width:90px;height:90px}.head_armoire_yellowHairbow{background-image:url(spritesmith-main-3.png);background-position:-1276px -637px;width:90px;height:90px}.shield_armoire_gladiatorShield{background-image:url(spritesmith-main-3.png);background-position:-454px -91px;width:90px;height:90px}.shield_armoire_midnightShield{background-image:url(spritesmith-main-3.png);background-position:-1276px -819px;width:90px;height:90px}.shield_armoire_royalCane{background-image:url(spritesmith-main-3.png);background-position:-1276px -910px;width:90px;height:90px}.shop_armor_armoire_crystalCrescentRobes{background-image:url(spritesmith-main-3.png);background-position:-1640px -902px;width:40px;height:40px}.shop_armor_armoire_gladiatorArmor{background-image:url(spritesmith-main-3.png);background-position:-1640px -861px;width:40px;height:40px}.shop_armor_armoire_goldenToga{background-image:url(spritesmith-main-3.png);background-position:-1640px -820px;width:40px;height:40px}.shop_armor_armoire_hornedIronArmor{background-image:url(spritesmith-main-3.png);background-position:-1640px -779px;width:40px;height:40px}.shop_armor_armoire_lunarArmor{background-image:url(spritesmith-main-3.png);background-position:-1640px -738px;width:40px;height:40px}.shop_armor_armoire_plagueDoctorOvercoat{background-image:url(spritesmith-main-3.png);background-position:-1640px -697px;width:40px;height:40px}.shop_armor_armoire_rancherRobes{background-image:url(spritesmith-main-3.png);background-position:-1640px -656px;width:40px;height:40px}.shop_armor_armoire_royalRobes{background-image:url(spritesmith-main-3.png);background-position:-1640px -615px;width:40px;height:40px}.shop_armor_armoire_shepherdRobes{background-image:url(spritesmith-main-3.png);background-position:-1640px -574px;width:40px;height:40px}.shop_eyewear_armoire_plagueDoctorMask{background-image:url(spritesmith-main-3.png);background-position:-1640px -533px;width:40px;height:40px}.shop_head_armoire_blackCat{background-image:url(spritesmith-main-3.png);background-position:-1640px -492px;width:40px;height:40px}.shop_head_armoire_blueFloppyHat{background-image:url(spritesmith-main-3.png);background-position:-838px -1588px;width:40px;height:40px}.shop_head_armoire_blueHairbow{background-image:url(spritesmith-main-3.png);background-position:-797px -1588px;width:40px;height:40px}.shop_head_armoire_crystalCrescentHat{background-image:url(spritesmith-main-3.png);background-position:-756px -1588px;width:40px;height:40px}.shop_head_armoire_gladiatorHelm{background-image:url(spritesmith-main-3.png);background-position:-715px -1588px;width:40px;height:40px}.shop_head_armoire_goldenLaurels{background-image:url(spritesmith-main-3.png);background-position:-674px -1588px;width:40px;height:40px}.shop_head_armoire_hornedIronHelm{background-image:url(spritesmith-main-3.png);background-position:-633px -1588px;width:40px;height:40px}.shop_head_armoire_lunarCrown{background-image:url(spritesmith-main-3.png);background-position:-1640px -943px;width:40px;height:40px}.shop_head_armoire_orangeCat{background-image:url(spritesmith-main-3.png);background-position:-551px -1588px;width:40px;height:40px}.shop_head_armoire_plagueDoctorHat{background-image:url(spritesmith-main-3.png);background-position:-510px -1588px;width:40px;height:40px}.shop_head_armoire_rancherHat{background-image:url(spritesmith-main-3.png);background-position:-469px -1588px;width:40px;height:40px}.shop_head_armoire_redFloppyHat{background-image:url(spritesmith-main-3.png);background-position:-428px -1588px;width:40px;height:40px}.shop_head_armoire_redHairbow{background-image:url(spritesmith-main-3.png);background-position:-387px -1588px;width:40px;height:40px}.shop_head_armoire_royalCrown{background-image:url(spritesmith-main-3.png);background-position:-346px -1588px;width:40px;height:40px}.shop_head_armoire_shepherdHeaddress{background-image:url(spritesmith-main-3.png);background-position:-305px -1588px;width:40px;height:40px}.shop_head_armoire_violetFloppyHat{background-image:url(spritesmith-main-3.png);background-position:-264px -1588px;width:40px;height:40px}.shop_head_armoire_yellowHairbow{background-image:url(spritesmith-main-3.png);background-position:-223px -1588px;width:40px;height:40px}.shop_shield_armoire_gladiatorShield{background-image:url(spritesmith-main-3.png);background-position:-182px -1588px;width:40px;height:40px}.shop_shield_armoire_midnightShield{background-image:url(spritesmith-main-3.png);background-position:-1576px -1547px;width:40px;height:40px}.shop_shield_armoire_royalCane{background-image:url(spritesmith-main-3.png);background-position:-1535px -1547px;width:40px;height:40px}.shop_weapon_armoire_basicCrossbow{background-image:url(spritesmith-main-3.png);background-position:-1494px -1547px;width:40px;height:40px}.shop_weapon_armoire_batWand{background-image:url(spritesmith-main-3.png);background-position:-1453px -1547px;width:40px;height:40px}.shop_weapon_armoire_blueLongbow{background-image:url(spritesmith-main-3.png);background-position:-1412px -1547px;width:40px;height:40px}.shop_weapon_armoire_crystalCrescentStaff{background-image:url(spritesmith-main-3.png);background-position:-1371px -1547px;width:40px;height:40px}.shop_weapon_armoire_goldWingStaff{background-image:url(spritesmith-main-3.png);background-position:-1330px -1547px;width:40px;height:40px}.shop_weapon_armoire_ironCrook{background-image:url(spritesmith-main-3.png);background-position:-1207px -1547px;width:40px;height:40px}.shop_weapon_armoire_lunarSceptre{background-image:url(spritesmith-main-3.png);background-position:-1166px -1547px;width:40px;height:40px}.shop_weapon_armoire_mythmakerSword{background-image:url(spritesmith-main-3.png);background-position:-1125px -1547px;width:40px;height:40px}.shop_weapon_armoire_rancherLasso{background-image:url(spritesmith-main-3.png);background-position:-1084px -1547px;width:40px;height:40px}.shop_weapon_armoire_shepherdsCrook{background-image:url(spritesmith-main-3.png);background-position:-1043px -1547px;width:40px;height:40px}.slim_armor_armoire_crystalCrescentRobes{background-image:url(spritesmith-main-3.png);background-position:-637px -1365px;width:90px;height:90px}.slim_armor_armoire_gladiatorArmor{background-image:url(spritesmith-main-3.png);background-position:-728px -1365px;width:90px;height:90px}.slim_armor_armoire_goldenToga{background-image:url(spritesmith-main-3.png);background-position:-819px -1365px;width:90px;height:90px}.slim_armor_armoire_hornedIronArmor{background-image:url(spritesmith-main-3.png);background-position:-910px -1365px;width:90px;height:90px}.slim_armor_armoire_lunarArmor{background-image:url(spritesmith-main-3.png);background-position:-1001px -1365px;width:90px;height:90px}.slim_armor_armoire_plagueDoctorOvercoat{background-image:url(spritesmith-main-3.png);background-position:-1092px -1365px;width:90px;height:90px}.slim_armor_armoire_rancherRobes{background-image:url(spritesmith-main-3.png);background-position:-1183px -1365px;width:90px;height:90px}.slim_armor_armoire_royalRobes{background-image:url(spritesmith-main-3.png);background-position:-1274px -1365px;width:90px;height:90px}.slim_armor_armoire_shepherdRobes{background-image:url(spritesmith-main-3.png);background-position:-1365px -1365px;width:90px;height:90px}.weapon_armoire_basicCrossbow{background-image:url(spritesmith-main-3.png);background-position:-1458px 0;width:90px;height:90px}.weapon_armoire_batWand{background-image:url(spritesmith-main-3.png);background-position:-1458px -91px;width:90px;height:90px}.weapon_armoire_blueLongbow{background-image:url(spritesmith-main-3.png);background-position:-1458px -182px;width:90px;height:90px}.weapon_armoire_crystalCrescentStaff{background-image:url(spritesmith-main-3.png);background-position:-1458px -273px;width:90px;height:90px}.weapon_armoire_goldWingStaff{background-image:url(spritesmith-main-3.png);background-position:-1458px -364px;width:90px;height:90px}.weapon_armoire_ironCrook{background-image:url(spritesmith-main-3.png);background-position:-1458px -455px;width:90px;height:90px}.weapon_armoire_lunarSceptre{background-image:url(spritesmith-main-3.png);background-position:-1458px -546px;width:90px;height:90px}.weapon_armoire_mythmakerSword{background-image:url(spritesmith-main-3.png);background-position:-1458px -637px;width:90px;height:90px}.weapon_armoire_rancherLasso{background-image:url(spritesmith-main-3.png);background-position:-1458px -728px;width:90px;height:90px}.weapon_armoire_shepherdsCrook{background-image:url(spritesmith-main-3.png);background-position:-1458px -819px;width:90px;height:90px}.broad_armor_healer_1{background-image:url(spritesmith-main-3.png);background-position:-1458px -910px;width:90px;height:90px}.broad_armor_healer_2{background-image:url(spritesmith-main-3.png);background-position:-1458px -1001px;width:90px;height:90px}.broad_armor_healer_3{background-image:url(spritesmith-main-3.png);background-position:-1458px -1092px;width:90px;height:90px}.broad_armor_healer_4{background-image:url(spritesmith-main-3.png);background-position:-1458px -1183px;width:90px;height:90px}.broad_armor_healer_5{background-image:url(spritesmith-main-3.png);background-position:-1458px -1274px;width:90px;height:90px}.broad_armor_rogue_1{background-image:url(spritesmith-main-3.png);background-position:-1458px -1365px;width:90px;height:90px}.broad_armor_rogue_2{background-image:url(spritesmith-main-3.png);background-position:0 -1456px;width:90px;height:90px}.broad_armor_rogue_3{background-image:url(spritesmith-main-3.png);background-position:-91px -1456px;width:90px;height:90px}.broad_armor_rogue_4{background-image:url(spritesmith-main-3.png);background-position:-182px -1456px;width:90px;height:90px}.broad_armor_rogue_5{background-image:url(spritesmith-main-3.png);background-position:-273px -1456px;width:90px;height:90px}.broad_armor_special_2{background-image:url(spritesmith-main-3.png);background-position:-364px -1456px;width:90px;height:90px}.broad_armor_special_finnedOceanicArmor{background-image:url(spritesmith-main-3.png);background-position:-455px -1456px;width:90px;height:90px}.broad_armor_warrior_1{background-image:url(spritesmith-main-3.png);background-position:-546px -1456px;width:90px;height:90px}.broad_armor_warrior_2{background-image:url(spritesmith-main-3.png);background-position:-637px -1456px;width:90px;height:90px}.broad_armor_warrior_3{background-image:url(spritesmith-main-3.png);background-position:-728px -1456px;width:90px;height:90px}.broad_armor_warrior_4{background-image:url(spritesmith-main-3.png);background-position:-819px -1456px;width:90px;height:90px}.broad_armor_warrior_5{background-image:url(spritesmith-main-3.png);background-position:-910px -1456px;width:90px;height:90px}.broad_armor_wizard_1{background-image:url(spritesmith-main-3.png);background-position:-1001px -1456px;width:90px;height:90px}.broad_armor_wizard_2{background-image:url(spritesmith-main-3.png);background-position:-1092px -1456px;width:90px;height:90px}.broad_armor_wizard_3{background-image:url(spritesmith-main-3.png);background-position:-1183px -1456px;width:90px;height:90px}.broad_armor_wizard_4{background-image:url(spritesmith-main-3.png);background-position:-1274px -1456px;width:90px;height:90px}.broad_armor_wizard_5{background-image:url(spritesmith-main-3.png);background-position:-1365px -1456px;width:90px;height:90px}.shop_armor_healer_1{background-image:url(spritesmith-main-3.png);background-position:-1002px -1547px;width:40px;height:40px}.shop_armor_healer_2{background-image:url(spritesmith-main-3.png);background-position:-961px -1547px;width:40px;height:40px}.shop_armor_healer_3{background-image:url(spritesmith-main-3.png);background-position:-920px -1547px;width:40px;height:40px}.shop_armor_healer_4{background-image:url(spritesmith-main-3.png);background-position:-879px -1547px;width:40px;height:40px}.shop_armor_healer_5{background-image:url(spritesmith-main-3.png);background-position:-838px -1547px;width:40px;height:40px}.shop_armor_rogue_1{background-image:url(spritesmith-main-3.png);background-position:-797px -1547px;width:40px;height:40px}.shop_armor_rogue_2{background-image:url(spritesmith-main-3.png);background-position:-756px -1547px;width:40px;height:40px}.shop_armor_rogue_3{background-image:url(spritesmith-main-3.png);background-position:-715px -1547px;width:40px;height:40px}.shop_armor_rogue_4{background-image:url(spritesmith-main-3.png);background-position:-674px -1547px;width:40px;height:40px}.shop_armor_rogue_5{background-image:url(spritesmith-main-3.png);background-position:-633px -1547px;width:40px;height:40px}.shop_armor_special_0{background-image:url(spritesmith-main-3.png);background-position:-592px -1547px;width:40px;height:40px}.shop_armor_special_1{background-image:url(spritesmith-main-3.png);background-position:-551px -1547px;width:40px;height:40px}.shop_armor_special_2{background-image:url(spritesmith-main-3.png);background-position:-510px -1547px;width:40px;height:40px}.shop_armor_special_finnedOceanicArmor{background-image:url(spritesmith-main-3.png);background-position:-469px -1547px;width:40px;height:40px}.shop_armor_warrior_1{background-image:url(spritesmith-main-3.png);background-position:-428px -1547px;width:40px;height:40px}.shop_armor_warrior_2{background-image:url(spritesmith-main-3.png);background-position:-387px -1547px;width:40px;height:40px}.shop_armor_warrior_3{background-image:url(spritesmith-main-3.png);background-position:-346px -1547px;width:40px;height:40px}.shop_armor_warrior_4{background-image:url(spritesmith-main-3.png);background-position:-305px -1547px;width:40px;height:40px}.shop_armor_warrior_5{background-image:url(spritesmith-main-3.png);background-position:-264px -1547px;width:40px;height:40px}.shop_armor_wizard_1{background-image:url(spritesmith-main-3.png);background-position:-376px -273px;width:40px;height:40px}.shop_armor_wizard_2{background-image:url(spritesmith-main-3.png);background-position:-592px -1588px;width:40px;height:40px}.shop_armor_wizard_3{background-image:url(spritesmith-main-3.png);background-position:-376px -314px;width:40px;height:40px}.shop_armor_wizard_4{background-image:url(spritesmith-main-3.png);background-position:-182px -1547px;width:40px;height:40px}.shop_armor_wizard_5{background-image:url(spritesmith-main-3.png);background-position:-223px -1547px;width:40px;height:40px}.slim_armor_healer_1{background-image:url(spritesmith-main-3.png);background-position:0 -1547px;width:90px;height:90px}.slim_armor_healer_2{background-image:url(spritesmith-main-3.png);background-position:-1549px -1456px;width:90px;height:90px}.slim_armor_healer_3{background-image:url(spritesmith-main-3.png);background-position:-1549px -1365px;width:90px;height:90px}.slim_armor_healer_4{background-image:url(spritesmith-main-3.png);background-position:-1549px -1274px;width:90px;height:90px}.slim_armor_healer_5{background-image:url(spritesmith-main-3.png);background-position:-1549px -1183px;width:90px;height:90px}.slim_armor_rogue_1{background-image:url(spritesmith-main-3.png);background-position:-1549px -1092px;width:90px;height:90px}.slim_armor_rogue_2{background-image:url(spritesmith-main-3.png);background-position:-1549px -1001px;width:90px;height:90px}.slim_armor_rogue_3{background-image:url(spritesmith-main-3.png);background-position:-1549px -910px;width:90px;height:90px}.slim_armor_rogue_4{background-image:url(spritesmith-main-3.png);background-position:-1549px -819px;width:90px;height:90px}.slim_armor_rogue_5{background-image:url(spritesmith-main-3.png);background-position:-1549px -728px;width:90px;height:90px}.slim_armor_special_2{background-image:url(spritesmith-main-3.png);background-position:-1549px -637px;width:90px;height:90px}.slim_armor_special_finnedOceanicArmor{background-image:url(spritesmith-main-3.png);background-position:-1549px -546px;width:90px;height:90px}.slim_armor_warrior_1{background-image:url(spritesmith-main-3.png);background-position:-1549px -455px;width:90px;height:90px}.slim_armor_warrior_2{background-image:url(spritesmith-main-3.png);background-position:-1549px -364px;width:90px;height:90px}.slim_armor_warrior_3{background-image:url(spritesmith-main-3.png);background-position:-1549px -273px;width:90px;height:90px}.slim_armor_warrior_4{background-image:url(spritesmith-main-3.png);background-position:-1549px -182px;width:90px;height:90px}.slim_armor_warrior_5{background-image:url(spritesmith-main-3.png);background-position:-1549px -91px;width:90px;height:90px}.slim_armor_wizard_1{background-image:url(spritesmith-main-3.png);background-position:-1549px 0;width:90px;height:90px}.slim_armor_wizard_2{background-image:url(spritesmith-main-3.png);background-position:-1456px -1456px;width:90px;height:90px}.slim_armor_wizard_3{background-image:url(spritesmith-main-3.png);background-position:-546px -1365px;width:90px;height:90px}.slim_armor_wizard_4{background-image:url(spritesmith-main-3.png);background-position:-455px -1365px;width:90px;height:90px}.slim_armor_wizard_5{background-image:url(spritesmith-main-3.png);background-position:-364px -1365px;width:90px;height:90px}.broad_armor_special_birthday{background-image:url(spritesmith-main-3.png);background-position:-273px -1365px;width:90px;height:90px}.broad_armor_special_birthday2015{background-image:url(spritesmith-main-3.png);background-position:-182px -1365px;width:90px;height:90px}.shop_armor_special_birthday{background-image:url(spritesmith-main-3.png);background-position:-1248px -1547px;width:40px;height:40px}.shop_armor_special_birthday2015{background-image:url(spritesmith-main-3.png);background-position:-1289px -1547px;width:40px;height:40px}.slim_armor_special_birthday{background-image:url(spritesmith-main-3.png);background-position:-91px -1365px;width:90px;height:90px}.slim_armor_special_birthday2015{background-image:url(spritesmith-main-3.png);background-position:0 -1365px;width:90px;height:90px}.broad_armor_special_fall2015Healer{background-image:url(spritesmith-main-3.png);background-position:-282px -273px;width:93px;height:90px}.broad_armor_special_fall2015Mage{background-image:url(spritesmith-main-3.png);background-position:-212px -182px;width:105px;height:90px}.broad_armor_special_fall2015Rogue{background-image:url(spritesmith-main-3.png);background-position:-1367px -1092px;width:90px;height:90px}.broad_armor_special_fall2015Warrior{background-image:url(spritesmith-main-3.png);background-position:-1367px -1001px;width:90px;height:90px}.broad_armor_special_fallHealer{background-image:url(spritesmith-main-3.png);background-position:-1367px -910px;width:90px;height:90px}.broad_armor_special_fallMage{background-image:url(spritesmith-main-3.png);background-position:0 -91px;width:120px;height:90px}.broad_armor_special_fallRogue{background-image:url(spritesmith-main-3.png);background-position:-348px -91px;width:105px;height:90px}.broad_armor_special_fallWarrior{background-image:url(spritesmith-main-3.png);background-position:-1367px -637px;width:90px;height:90px}.head_special_fall2015Healer{background-image:url(spritesmith-main-3.png);background-position:-94px -273px;width:93px;height:90px}.head_special_fall2015Mage{background-image:url(spritesmith-main-3.png);background-position:-348px 0;width:105px;height:90px}.head_special_fall2015Rogue{background-image:url(spritesmith-main-3.png);background-position:-1367px -364px;width:90px;height:90px}.head_special_fall2015Warrior{background-image:url(spritesmith-main-3.png);background-position:-1367px -273px;width:90px;height:90px}.head_special_fallHealer{background-image:url(spritesmith-main-3.png);background-position:-1367px -182px;width:90px;height:90px}.head_special_fallMage{background-image:url(spritesmith-main-3.png);background-position:-121px 0;width:120px;height:90px}.head_special_fallRogue{background-image:url(spritesmith-main-3.png);background-position:-106px -182px;width:105px;height:90px}.head_special_fallWarrior{background-image:url(spritesmith-main-3.png);background-position:-1274px -1274px;width:90px;height:90px}.shield_special_fall2015Healer{background-image:url(spritesmith-main-3.png);background-position:0 -273px;width:93px;height:90px}.shield_special_fall2015Rogue{background-image:url(spritesmith-main-3.png);background-position:-242px -91px;width:105px;height:90px}.shield_special_fall2015Warrior{background-image:url(spritesmith-main-3.png);background-position:-1001px -1274px;width:90px;height:90px}.shield_special_fallHealer{background-image:url(spritesmith-main-3.png);background-position:-910px -1274px;width:90px;height:90px}.shield_special_fallRogue{background-image:url(spritesmith-main-3.png);background-position:-242px 0;width:105px;height:90px}.shield_special_fallWarrior{background-image:url(spritesmith-main-3.png);background-position:-728px -1274px;width:90px;height:90px}.shop_armor_special_fall2015Healer{background-image:url(spritesmith-main-3.png);background-position:-879px -1588px;width:40px;height:40px}.shop_armor_special_fall2015Mage{background-image:url(spritesmith-main-3.png);background-position:-920px -1588px;width:40px;height:40px}.shop_armor_special_fall2015Rogue{background-image:url(spritesmith-main-3.png);background-position:-961px -1588px;width:40px;height:40px}.shop_armor_special_fall2015Warrior{background-image:url(spritesmith-main-3.png);background-position:-1002px -1588px;width:40px;height:40px}.shop_armor_special_fallHealer{background-image:url(spritesmith-main-3.png);background-position:-1043px -1588px;width:40px;height:40px}.shop_armor_special_fallMage{background-image:url(spritesmith-main-3.png);background-position:-1084px -1588px;width:40px;height:40px}.shop_armor_special_fallRogue{background-image:url(spritesmith-main-3.png);background-position:-1125px -1588px;width:40px;height:40px}.shop_armor_special_fallWarrior{background-image:url(spritesmith-main-3.png);background-position:-1166px -1588px;width:40px;height:40px}.shop_head_special_fall2015Healer{background-image:url(spritesmith-main-3.png);background-position:-1207px -1588px;width:40px;height:40px}.shop_head_special_fall2015Mage{background-image:url(spritesmith-main-3.png);background-position:-1248px -1588px;width:40px;height:40px}.shop_head_special_fall2015Rogue{background-image:url(spritesmith-main-3.png);background-position:-1289px -1588px;width:40px;height:40px}.shop_head_special_fall2015Warrior{background-image:url(spritesmith-main-3.png);background-position:-1330px -1588px;width:40px;height:40px}.shop_head_special_fallHealer{background-image:url(spritesmith-main-3.png);background-position:-1371px -1588px;width:40px;height:40px}.shop_head_special_fallMage{background-image:url(spritesmith-main-3.png);background-position:-1412px -1588px;width:40px;height:40px}.shop_head_special_fallRogue{background-image:url(spritesmith-main-3.png);background-position:-1453px -1588px;width:40px;height:40px}.shop_head_special_fallWarrior{background-image:url(spritesmith-main-3.png);background-position:-1494px -1588px;width:40px;height:40px}.shop_shield_special_fall2015Healer{background-image:url(spritesmith-main-3.png);background-position:-1535px -1588px;width:40px;height:40px}.shop_shield_special_fall2015Rogue{background-image:url(spritesmith-main-3.png);background-position:-1576px -1588px;width:40px;height:40px}.shop_shield_special_fall2015Warrior{background-image:url(spritesmith-main-3.png);background-position:-1640px 0;width:40px;height:40px}.shop_shield_special_fallHealer{background-image:url(spritesmith-main-3.png);background-position:-1640px -41px;width:40px;height:40px}.shop_shield_special_fallRogue{background-image:url(spritesmith-main-3.png);background-position:-1640px -82px;width:40px;height:40px}.shop_shield_special_fallWarrior{background-image:url(spritesmith-main-3.png);background-position:-1640px -123px;width:40px;height:40px}.shop_weapon_special_fall2015Healer{background-image:url(spritesmith-main-3.png);background-position:-1640px -164px;width:40px;height:40px}.shop_weapon_special_fall2015Mage{background-image:url(spritesmith-main-3.png);background-position:-1640px -205px;width:40px;height:40px}.shop_weapon_special_fall2015Rogue{background-image:url(spritesmith-main-3.png);background-position:-1640px -246px;width:40px;height:40px}.shop_weapon_special_fall2015Warrior{background-image:url(spritesmith-main-3.png);background-position:-1640px -287px;width:40px;height:40px}.shop_weapon_special_fallHealer{background-image:url(spritesmith-main-3.png);background-position:-1640px -328px;width:40px;height:40px}.shop_weapon_special_fallMage{background-image:url(spritesmith-main-3.png);background-position:-1640px -369px;width:40px;height:40px}.shop_weapon_special_fallRogue{background-image:url(spritesmith-main-3.png);background-position:-1640px -410px;width:40px;height:40px}.shop_weapon_special_fallWarrior{background-image:url(spritesmith-main-3.png);background-position:-1640px -451px;width:40px;height:40px}.slim_armor_special_fall2015Healer{background-image:url(spritesmith-main-3.png);background-position:-454px 0;width:93px;height:90px}.slim_armor_special_fall2015Mage{background-image:url(spritesmith-main-3.png);background-position:-348px -182px;width:105px;height:90px}.slim_armor_special_fall2015Rogue{background-image:url(spritesmith-main-3.png);background-position:-455px -1274px;width:90px;height:90px}.slim_armor_special_fall2015Warrior{background-image:url(spritesmith-main-3.png);background-position:-364px -1274px;width:90px;height:90px}.slim_armor_special_fallHealer{background-image:url(spritesmith-main-3.png);background-position:-273px -1274px;width:90px;height:90px}.slim_armor_special_fallMage{background-image:url(spritesmith-main-3.png);background-position:0 0;width:120px;height:90px}.slim_armor_special_fallRogue{background-image:url(spritesmith-main-3.png);background-position:0 -182px;width:105px;height:90px}.slim_armor_special_fallWarrior{background-image:url(spritesmith-main-3.png);background-position:0 -1274px;width:90px;height:90px}.weapon_special_fall2015Healer{background-image:url(spritesmith-main-3.png);background-position:-188px -273px;width:93px;height:90px}.weapon_special_fall2015Mage{background-image:url(spritesmith-main-3.png);background-position:-121px -91px;width:105px;height:90px}.weapon_special_fall2015Rogue{background-image:url(spritesmith-main-3.png);background-position:-1276px -1001px;width:90px;height:90px}.weapon_special_fall2015Warrior{background-image:url(spritesmith-main-3.png);background-position:-91px -1547px;width:90px;height:90px}.weapon_special_fallHealer{background-image:url(spritesmith-main-4.png);background-position:-182px -879px;width:90px;height:90px}.weapon_special_fallMage{background-image:url(spritesmith-main-4.png);background-position:0 0;width:120px;height:90px}.weapon_special_fallRogue{background-image:url(spritesmith-main-4.png);background-position:-336px -303px;width:105px;height:90px}.weapon_special_fallWarrior{background-image:url(spritesmith-main-4.png);background-position:-1033px -455px;width:90px;height:90px}.broad_armor_special_gaymerx{background-image:url(spritesmith-main-4.png);background-position:-1306px -819px;width:90px;height:90px}.head_special_gaymerx{background-image:url(spritesmith-main-4.png);background-position:-1306px -1092px;width:90px;height:90px}.shop_armor_special_gaymerx{background-image:url(spritesmith-main-4.png);background-position:-1670px -615px;width:40px;height:40px}.shop_head_special_gaymerx{background-image:url(spritesmith-main-4.png);background-position:-1670px -574px;width:40px;height:40px}.slim_armor_special_gaymerx{background-image:url(spritesmith-main-4.png);background-position:-273px -1334px;width:90px;height:90px}.back_mystery_201402{background-image:url(spritesmith-main-4.png);background-position:-364px -1334px;width:90px;height:90px}.broad_armor_mystery_201402{background-image:url(spritesmith-main-4.png);background-position:-455px -1334px;width:90px;height:90px}.head_mystery_201402{background-image:url(spritesmith-main-4.png);background-position:-910px -1334px;width:90px;height:90px}.shop_armor_mystery_201402{background-image:url(spritesmith-main-4.png);background-position:-1670px -533px;width:40px;height:40px}.shop_back_mystery_201402{background-image:url(spritesmith-main-4.png);background-position:-1670px -492px;width:40px;height:40px}.shop_head_mystery_201402{background-image:url(spritesmith-main-4.png);background-position:-1670px -451px;width:40px;height:40px}.slim_armor_mystery_201402{background-image:url(spritesmith-main-4.png);background-position:-942px -455px;width:90px;height:90px}.broad_armor_mystery_201403{background-image:url(spritesmith-main-4.png);background-position:-942px -546px;width:90px;height:90px}.headAccessory_mystery_201403{background-image:url(spritesmith-main-4.png);background-position:0 -879px;width:90px;height:90px}.shop_armor_mystery_201403{background-image:url(spritesmith-main-4.png);background-position:-1670px -410px;width:40px;height:40px}.shop_headAccessory_mystery_201403{background-image:url(spritesmith-main-4.png);background-position:-1670px -369px;width:40px;height:40px}.slim_armor_mystery_201403{background-image:url(spritesmith-main-4.png);background-position:-455px -879px;width:90px;height:90px}.back_mystery_201404{background-image:url(spritesmith-main-4.png);background-position:-546px -879px;width:90px;height:90px}.headAccessory_mystery_201404{background-image:url(spritesmith-main-4.png);background-position:-819px -879px;width:90px;height:90px}.shop_back_mystery_201404{background-image:url(spritesmith-main-4.png);background-position:-1670px -328px;width:40px;height:40px}.shop_headAccessory_mystery_201404{background-image:url(spritesmith-main-4.png);background-position:-1670px -287px;width:40px;height:40px}.broad_armor_mystery_201405{background-image:url(spritesmith-main-4.png);background-position:-637px -1152px;width:90px;height:90px}.head_mystery_201405{background-image:url(spritesmith-main-4.png);background-position:-1306px -91px;width:90px;height:90px}.shop_armor_mystery_201405{background-image:url(spritesmith-main-4.png);background-position:-1670px -246px;width:40px;height:40px}.shop_head_mystery_201405{background-image:url(spritesmith-main-4.png);background-position:-1670px -205px;width:40px;height:40px}.slim_armor_mystery_201405{background-image:url(spritesmith-main-4.png);background-position:-182px -1243px;width:90px;height:90px}.broad_armor_mystery_201406{background-image:url(spritesmith-main-4.png);background-position:-757px -415px;width:90px;height:96px}.head_mystery_201406{background-image:url(spritesmith-main-4.png);background-position:-757px -318px;width:90px;height:96px}.shop_armor_mystery_201406{background-image:url(spritesmith-main-4.png);background-position:-1670px -164px;width:40px;height:40px}.shop_head_mystery_201406{background-image:url(spritesmith-main-4.png);background-position:-1670px -123px;width:40px;height:40px}.slim_armor_mystery_201406{background-image:url(spritesmith-main-4.png);background-position:-757px -512px;width:90px;height:96px}.broad_armor_mystery_201407{background-image:url(spritesmith-main-4.png);background-position:-728px -1334px;width:90px;height:90px}.head_mystery_201407{background-image:url(spritesmith-main-4.png);background-position:-819px -1334px;width:90px;height:90px}.shop_armor_mystery_201407{background-image:url(spritesmith-main-4.png);background-position:-1670px -82px;width:40px;height:40px}.shop_head_mystery_201407{background-image:url(spritesmith-main-4.png);background-position:-1670px -41px;width:40px;height:40px}.slim_armor_mystery_201407{background-image:url(spritesmith-main-4.png);background-position:-1092px -1334px;width:90px;height:90px}.broad_armor_mystery_201408{background-image:url(spritesmith-main-4.png);background-position:-1183px -1334px;width:90px;height:90px}.head_mystery_201408{background-image:url(spritesmith-main-4.png);background-position:-1274px -1334px;width:90px;height:90px}.shop_armor_mystery_201408{background-image:url(spritesmith-main-4.png);background-position:-1670px 0;width:40px;height:40px}.shop_head_mystery_201408{background-image:url(spritesmith-main-4.png);background-position:-1599px -1598px;width:40px;height:40px}.slim_armor_mystery_201408{background-image:url(spritesmith-main-4.png);background-position:-1488px -273px;width:90px;height:90px}.broad_armor_mystery_201409{background-image:url(spritesmith-main-4.png);background-position:-1488px -364px;width:90px;height:90px}.headAccessory_mystery_201409{background-image:url(spritesmith-main-4.png);background-position:-1488px -455px;width:90px;height:90px}.shop_armor_mystery_201409{background-image:url(spritesmith-main-4.png);background-position:-1558px -1598px;width:40px;height:40px}.shop_headAccessory_mystery_201409{background-image:url(spritesmith-main-4.png);background-position:-1517px -1598px;width:40px;height:40px}.slim_armor_mystery_201409{background-image:url(spritesmith-main-4.png);background-position:-1488px -728px;width:90px;height:90px}.back_mystery_201410{background-image:url(spritesmith-main-4.png);background-position:-848px -91px;width:93px;height:90px}.broad_armor_mystery_201410{background-image:url(spritesmith-main-4.png);background-position:-848px 0;width:93px;height:90px}.shop_armor_mystery_201410{background-image:url(spritesmith-main-4.png);background-position:-1476px -1598px;width:40px;height:40px}.shop_back_mystery_201410{background-image:url(spritesmith-main-4.png);background-position:-1107px -1598px;width:40px;height:40px}.slim_armor_mystery_201410{background-image:url(spritesmith-main-4.png);background-position:-701px -697px;width:93px;height:90px}.head_mystery_201411{background-image:url(spritesmith-main-4.png);background-position:0 -1425px;width:90px;height:90px}.shop_head_mystery_201411{background-image:url(spritesmith-main-4.png);background-position:-1066px -1598px;width:40px;height:40px}.shop_weapon_mystery_201411{background-image:url(spritesmith-main-4.png);background-position:-1025px -1598px;width:40px;height:40px}.weapon_mystery_201411{background-image:url(spritesmith-main-4.png);background-position:-728px -1425px;width:90px;height:90px}.broad_armor_mystery_201412{background-image:url(spritesmith-main-4.png);background-position:-819px -1425px;width:90px;height:90px}.head_mystery_201412{background-image:url(spritesmith-main-4.png);background-position:-910px -1425px;width:90px;height:90px}.shop_armor_mystery_201412{background-image:url(spritesmith-main-4.png);background-position:-984px -1598px;width:40px;height:40px}.shop_head_mystery_201412{background-image:url(spritesmith-main-4.png);background-position:-943px -1598px;width:40px;height:40px}.slim_armor_mystery_201412{background-image:url(spritesmith-main-4.png);background-position:-1183px -1425px;width:90px;height:90px}.broad_armor_mystery_201501{background-image:url(spritesmith-main-4.png);background-position:-1456px -1425px;width:90px;height:90px}.head_mystery_201501{background-image:url(spritesmith-main-4.png);background-position:-1579px 0;width:90px;height:90px}.shop_armor_mystery_201501{background-image:url(spritesmith-main-4.png);background-position:-902px -1598px;width:40px;height:40px}.shop_head_mystery_201501{background-image:url(spritesmith-main-4.png);background-position:-861px -1598px;width:40px;height:40px}.slim_armor_mystery_201501{background-image:url(spritesmith-main-4.png);background-position:-1579px -273px;width:90px;height:90px}.headAccessory_mystery_201502{background-image:url(spritesmith-main-4.png);background-position:-1579px -364px;width:90px;height:90px}.shop_headAccessory_mystery_201502{background-image:url(spritesmith-main-4.png);background-position:-820px -1598px;width:40px;height:40px}.shop_weapon_mystery_201502{background-image:url(spritesmith-main-4.png);background-position:-1435px -1557px;width:40px;height:40px}.weapon_mystery_201502{background-image:url(spritesmith-main-4.png);background-position:0 -788px;width:90px;height:90px}.broad_armor_mystery_201503{background-image:url(spritesmith-main-4.png);background-position:-91px -788px;width:90px;height:90px}.eyewear_mystery_201503{background-image:url(spritesmith-main-4.png);background-position:-182px -788px;width:90px;height:90px}.shop_armor_mystery_201503{background-image:url(spritesmith-main-4.png);background-position:-1394px -1557px;width:40px;height:40px}.shop_eyewear_mystery_201503{background-image:url(spritesmith-main-4.png);background-position:-1353px -1557px;width:40px;height:40px}.slim_armor_mystery_201503{background-image:url(spritesmith-main-4.png);background-position:-455px -788px;width:90px;height:90px}.back_mystery_201504{background-image:url(spritesmith-main-4.png);background-position:-546px -788px;width:90px;height:90px}.broad_armor_mystery_201504{background-image:url(spritesmith-main-4.png);background-position:-637px -788px;width:90px;height:90px}.shop_armor_mystery_201504{background-image:url(spritesmith-main-4.png);background-position:-1312px -1557px;width:40px;height:40px}.shop_back_mystery_201504{background-image:url(spritesmith-main-4.png);background-position:-1271px -1557px;width:40px;height:40px}.slim_armor_mystery_201504{background-image:url(spritesmith-main-4.png);background-position:-942px 0;width:90px;height:90px}.head_mystery_201505{background-image:url(spritesmith-main-4.png);background-position:-942px -91px;width:90px;height:90px}.shop_head_mystery_201505{background-image:url(spritesmith-main-4.png);background-position:-1230px -1557px;width:40px;height:40px}.shop_weapon_mystery_201505{background-image:url(spritesmith-main-4.png);background-position:-1189px -1557px;width:40px;height:40px}.weapon_mystery_201505{background-image:url(spritesmith-main-4.png);background-position:-942px -364px;width:90px;height:90px}.broad_armor_mystery_201506{background-image:url(spritesmith-main-4.png);background-position:-364px -485px;width:90px;height:105px}.eyewear_mystery_201506{background-image:url(spritesmith-main-4.png);background-position:-455px -485px;width:90px;height:105px}.shop_armor_mystery_201506{background-image:url(spritesmith-main-4.png);background-position:-1148px -1557px;width:40px;height:40px}.shop_eyewear_mystery_201506{background-image:url(spritesmith-main-4.png);background-position:-1107px -1557px;width:40px;height:40px}.slim_armor_mystery_201506{background-image:url(spritesmith-main-4.png);background-position:-666px -424px;width:90px;height:105px}.back_mystery_201507{background-image:url(spritesmith-main-4.png);background-position:0 -591px;width:90px;height:105px}.eyewear_mystery_201507{background-image:url(spritesmith-main-4.png);background-position:-91px -591px;width:90px;height:105px}.shop_back_mystery_201507{background-image:url(spritesmith-main-4.png);background-position:-1066px -1557px;width:40px;height:40px}.shop_eyewear_mystery_201507{background-image:url(spritesmith-main-4.png);background-position:-1025px -1557px;width:40px;height:40px}.broad_armor_mystery_201508{background-image:url(spritesmith-main-4.png);background-position:-848px -182px;width:93px;height:90px}.head_mystery_201508{background-image:url(spritesmith-main-4.png);background-position:-848px -273px;width:93px;height:90px}.shop_armor_mystery_201508{background-image:url(spritesmith-main-4.png);background-position:-984px -1557px;width:40px;height:40px}.shop_head_mystery_201508{background-image:url(spritesmith-main-4.png);background-position:-943px -1557px;width:40px;height:40px}.slim_armor_mystery_201508{background-image:url(spritesmith-main-4.png);background-position:-848px -455px;width:93px;height:90px}.broad_armor_mystery_201509{background-image:url(spritesmith-main-4.png);background-position:-910px -879px;width:90px;height:90px}.head_mystery_201509{background-image:url(spritesmith-main-4.png);background-position:-1033px 0;width:90px;height:90px}.shop_armor_mystery_201509{background-image:url(spritesmith-main-4.png);background-position:-902px -1557px;width:40px;height:40px}.shop_head_mystery_201509{background-image:url(spritesmith-main-4.png);background-position:-861px -1557px;width:40px;height:40px}.slim_armor_mystery_201509{background-image:url(spritesmith-main-4.png);background-position:-1033px -273px;width:90px;height:90px}.back_mystery_201510{background-image:url(spritesmith-main-4.png);background-position:-448px -394px;width:105px;height:90px}.headAccessory_mystery_201510{background-image:url(spritesmith-main-4.png);background-position:-848px -364px;width:93px;height:90px}.shop_back_mystery_201510{background-image:url(spritesmith-main-4.png);background-position:-820px -1557px;width:40px;height:40px}.shop_headAccessory_mystery_201510{background-image:url(spritesmith-main-4.png);background-position:-779px -1557px;width:40px;height:40px}.broad_armor_mystery_201511{background-image:url(spritesmith-main-4.png);background-position:-1033px -728px;width:90px;height:90px}.head_mystery_201511{background-image:url(spritesmith-main-4.png);background-position:-1033px -819px;width:90px;height:90px}.shop_armor_mystery_201511{background-image:url(spritesmith-main-4.png);background-position:-1622px -637px;width:42px;height:42px}.shop_head_mystery_201511{background-image:url(spritesmith-main-4.png);background-position:-1579px -637px;width:42px;height:42px}.slim_armor_mystery_201511{background-image:url(spritesmith-main-4.png);background-position:-182px -970px;width:90px;height:90px}.broad_armor_mystery_301404{background-image:url(spritesmith-main-4.png);background-position:-273px -970px;width:90px;height:90px}.eyewear_mystery_301404{background-image:url(spritesmith-main-4.png);background-position:-364px -970px;width:90px;height:90px}.head_mystery_301404{background-image:url(spritesmith-main-4.png);background-position:-455px -970px;width:90px;height:90px}.shop_armor_mystery_301404{background-image:url(spritesmith-main-4.png);background-position:-656px -1557px;width:40px;height:40px}.shop_eyewear_mystery_301404{background-image:url(spritesmith-main-4.png);background-position:-615px -1557px;width:40px;height:40px}.shop_head_mystery_301404{background-image:url(spritesmith-main-4.png);background-position:-574px -1557px;width:40px;height:40px}.shop_weapon_mystery_301404{background-image:url(spritesmith-main-4.png);background-position:-533px -1557px;width:40px;height:40px}.slim_armor_mystery_301404{background-image:url(spritesmith-main-4.png);background-position:-910px -970px;width:90px;height:90px}.weapon_mystery_301404{background-image:url(spritesmith-main-4.png);background-position:-1001px -970px;width:90px;height:90px}.eyewear_mystery_301405{background-image:url(spritesmith-main-4.png);background-position:-1124px 0;width:90px;height:90px}.headAccessory_mystery_301405{background-image:url(spritesmith-main-4.png);background-position:-1124px -91px;width:90px;height:90px}.head_mystery_301405{background-image:url(spritesmith-main-4.png);background-position:-1124px -182px;width:90px;height:90px}.shield_mystery_301405{background-image:url(spritesmith-main-4.png);background-position:-1124px -273px;width:90px;height:90px}.shop_eyewear_mystery_301405{background-image:url(spritesmith-main-4.png);background-position:-205px -1557px;width:40px;height:40px}.shop_headAccessory_mystery_301405{background-image:url(spritesmith-main-4.png);background-position:-164px -1557px;width:40px;height:40px}.shop_head_mystery_301405{background-image:url(spritesmith-main-4.png);background-position:-123px -1557px;width:40px;height:40px}.shop_shield_mystery_301405{background-image:url(spritesmith-main-4.png);background-position:-82px -1557px;width:40px;height:40px}.broad_armor_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1124px -728px;width:90px;height:90px}.broad_armor_special_spring2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1124px -819px;width:90px;height:90px}.broad_armor_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1124px -910px;width:90px;height:90px}.broad_armor_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:0 -1061px;width:90px;height:90px}.broad_armor_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-91px -1061px;width:90px;height:90px}.broad_armor_special_springMage{background-image:url(spritesmith-main-4.png);background-position:-182px -1061px;width:90px;height:90px}.broad_armor_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-273px -1061px;width:90px;height:90px}.broad_armor_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-364px -1061px;width:90px;height:90px}.headAccessory_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:-455px -1061px;width:90px;height:90px}.headAccessory_special_spring2015Mage{background-image:url(spritesmith-main-4.png);background-position:-546px -1061px;width:90px;height:90px}.headAccessory_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-637px -1061px;width:90px;height:90px}.headAccessory_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-728px -1061px;width:90px;height:90px}.headAccessory_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-819px -1061px;width:90px;height:90px}.headAccessory_special_springMage{background-image:url(spritesmith-main-4.png);background-position:-910px -1061px;width:90px;height:90px}.headAccessory_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-1001px -1061px;width:90px;height:90px}.headAccessory_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-1092px -1061px;width:90px;height:90px}.head_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1215px 0;width:90px;height:90px}.head_special_spring2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1215px -91px;width:90px;height:90px}.head_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1215px -182px;width:90px;height:90px}.head_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1215px -273px;width:90px;height:90px}.head_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-1215px -364px;width:90px;height:90px}.head_special_springMage{background-image:url(spritesmith-main-4.png);background-position:-1215px -455px;width:90px;height:90px}.head_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-1215px -546px;width:90px;height:90px}.head_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-1215px -637px;width:90px;height:90px}.shield_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1215px -728px;width:90px;height:90px}.shield_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1215px -819px;width:90px;height:90px}.shield_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1215px -910px;width:90px;height:90px}.shield_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-1215px -1001px;width:90px;height:90px}.shield_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:0 -1152px;width:90px;height:90px}.shield_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-91px -1152px;width:90px;height:90px}.shop_armor_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:-41px -1557px;width:40px;height:40px}.shop_armor_special_spring2015Mage{background-image:url(spritesmith-main-4.png);background-position:0 -1557px;width:40px;height:40px}.shop_armor_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1599px -1516px;width:40px;height:40px}.shop_armor_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1558px -1516px;width:40px;height:40px}.shop_armor_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-1517px -1516px;width:40px;height:40px}.shop_armor_special_springMage{background-image:url(spritesmith-main-4.png);background-position:-1579px -680px;width:40px;height:40px}.shop_armor_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-1435px -1516px;width:40px;height:40px}.shop_armor_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-1394px -1516px;width:40px;height:40px}.shop_headAccessory_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1353px -1516px;width:40px;height:40px}.shop_headAccessory_special_spring2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1312px -1516px;width:40px;height:40px}.shop_headAccessory_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1271px -1516px;width:40px;height:40px}.shop_headAccessory_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1230px -1516px;width:40px;height:40px}.shop_headAccessory_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-1189px -1516px;width:40px;height:40px}.shop_headAccessory_special_springMage{background-image:url(spritesmith-main-4.png);background-position:-1148px -1516px;width:40px;height:40px}.shop_headAccessory_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-1107px -1516px;width:40px;height:40px}.shop_headAccessory_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-1066px -1516px;width:40px;height:40px}.shop_head_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1025px -1516px;width:40px;height:40px}.shop_head_special_spring2015Mage{background-image:url(spritesmith-main-4.png);background-position:-984px -1516px;width:40px;height:40px}.shop_head_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-943px -1516px;width:40px;height:40px}.shop_head_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-848px -728px;width:40px;height:40px}.shop_head_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-983px -819px;width:40px;height:40px}.shop_head_special_springMage{background-image:url(spritesmith-main-4.png);background-position:-942px -819px;width:40px;height:40px}.shop_head_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-1074px -910px;width:40px;height:40px}.shop_head_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-1033px -910px;width:40px;height:40px}.shop_shield_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1165px -1001px;width:40px;height:40px}.shop_shield_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1124px -1001px;width:40px;height:40px}.shop_shield_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1256px -1092px;width:40px;height:40px}.shop_shield_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-1215px -1092px;width:40px;height:40px}.shop_shield_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-1347px -1183px;width:40px;height:40px}.shop_shield_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-1306px -1183px;width:40px;height:40px}.shop_weapon_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1438px -1274px;width:40px;height:40px}.shop_weapon_special_spring2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1397px -1274px;width:40px;height:40px}.shop_weapon_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1529px -1365px;width:40px;height:40px}.shop_weapon_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1488px -1365px;width:40px;height:40px}.shop_weapon_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-1620px -1459px;width:40px;height:40px}.shop_weapon_special_springMage{background-image:url(spritesmith-main-4.png);background-position:-1579px -1459px;width:40px;height:40px}.shop_weapon_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-1620px -1418px;width:40px;height:40px}.shop_weapon_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-1579px -1418px;width:40px;height:40px}.slim_armor_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1183px -1243px;width:90px;height:90px}.slim_armor_special_spring2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1274px -1243px;width:90px;height:90px}.slim_armor_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1397px 0;width:90px;height:90px}.slim_armor_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1397px -91px;width:90px;height:90px}.slim_armor_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-1397px -182px;width:90px;height:90px}.slim_armor_special_springMage{background-image:url(spritesmith-main-4.png);background-position:-1397px -273px;width:90px;height:90px}.slim_armor_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-1397px -364px;width:90px;height:90px}.slim_armor_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-1397px -455px;width:90px;height:90px}.weapon_special_spring2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1397px -546px;width:90px;height:90px}.weapon_special_spring2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1397px -637px;width:90px;height:90px}.weapon_special_spring2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1397px -728px;width:90px;height:90px}.weapon_special_spring2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1397px -819px;width:90px;height:90px}.weapon_special_springHealer{background-image:url(spritesmith-main-4.png);background-position:-1397px -910px;width:90px;height:90px}.weapon_special_springMage{background-image:url(spritesmith-main-4.png);background-position:-1397px -1001px;width:90px;height:90px}.weapon_special_springRogue{background-image:url(spritesmith-main-4.png);background-position:-1397px -1092px;width:90px;height:90px}.weapon_special_springWarrior{background-image:url(spritesmith-main-4.png);background-position:-1397px -1183px;width:90px;height:90px}.body_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:0 -1334px;width:90px;height:90px}.body_special_summer2015Mage{background-image:url(spritesmith-main-4.png);background-position:-91px -1334px;width:90px;height:90px}.body_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-206px -197px;width:102px;height:105px}.body_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-546px -485px;width:90px;height:105px}.body_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-666px 0;width:90px;height:105px}.body_special_summerMage{background-image:url(spritesmith-main-4.png);background-position:-666px -106px;width:90px;height:105px}.broad_armor_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-546px -1334px;width:90px;height:90px}.broad_armor_special_summer2015Mage{background-image:url(spritesmith-main-4.png);background-position:-637px -1334px;width:90px;height:90px}.broad_armor_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:0 -91px;width:102px;height:105px}.broad_armor_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-666px -212px;width:90px;height:105px}.broad_armor_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-666px -318px;width:90px;height:105px}.broad_armor_special_summerMage{background-image:url(spritesmith-main-4.png);background-position:-554px -364px;width:90px;height:105px}.broad_armor_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-112px -394px;width:111px;height:90px}.broad_armor_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:-224px -394px;width:111px;height:90px}.eyewear_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-336px -394px;width:111px;height:90px}.eyewear_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:-554px 0;width:111px;height:90px}.head_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1488px 0;width:90px;height:90px}.head_special_summer2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1488px -91px;width:90px;height:90px}.head_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-103px -197px;width:102px;height:105px}.head_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-455px -591px;width:90px;height:105px}.head_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-546px -591px;width:90px;height:105px}.head_special_summerMage{background-image:url(spritesmith-main-4.png);background-position:-637px -591px;width:90px;height:105px}.head_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-442px -182px;width:111px;height:90px}.head_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:-554px -273px;width:111px;height:90px}.Healer_Summer{background-image:url(spritesmith-main-4.png);background-position:-757px -106px;width:90px;height:105px}.Mage_Summer{background-image:url(spritesmith-main-4.png);background-position:-757px -212px;width:90px;height:105px}.SummerRogue14{background-image:url(spritesmith-main-4.png);background-position:-554px -91px;width:111px;height:90px}.SummerWarrior14{background-image:url(spritesmith-main-4.png);background-position:0 -303px;width:111px;height:90px}.shield_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1488px -1092px;width:90px;height:90px}.shield_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-224px 0;width:102px;height:105px}.shield_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-273px -485px;width:90px;height:105px}.shield_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-182px -485px;width:90px;height:105px}.shield_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-442px -91px;width:111px;height:90px}.shield_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:-442px 0;width:111px;height:90px}.shop_armor_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1620px -1377px;width:40px;height:40px}.shop_armor_special_summer2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1579px -1377px;width:40px;height:40px}.shop_armor_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1620px -1336px;width:40px;height:40px}.shop_armor_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1579px -1336px;width:40px;height:40px}.shop_armor_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-1620px -1295px;width:40px;height:40px}.shop_armor_special_summerMage{background-image:url(spritesmith-main-4.png);background-position:-1579px -1295px;width:40px;height:40px}.shop_armor_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-1620px -1254px;width:40px;height:40px}.shop_armor_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:-1579px -1254px;width:40px;height:40px}.shop_body_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1620px -1213px;width:40px;height:40px}.shop_body_special_summer2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1579px -1213px;width:40px;height:40px}.shop_body_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1620px -1172px;width:40px;height:40px}.shop_body_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1579px -1172px;width:40px;height:40px}.shop_body_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-1620px -1131px;width:40px;height:40px}.shop_body_special_summerMage{background-image:url(spritesmith-main-4.png);background-position:-1579px -1131px;width:40px;height:40px}.shop_eyewear_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-1620px -1090px;width:40px;height:40px}.shop_eyewear_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:-1579px -1090px;width:40px;height:40px}.shop_head_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1620px -1049px;width:40px;height:40px}.shop_head_special_summer2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1579px -1049px;width:40px;height:40px}.shop_head_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1620px -1008px;width:40px;height:40px}.shop_head_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1579px -1008px;width:40px;height:40px}.shop_head_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-1620px -967px;width:40px;height:40px}.shop_head_special_summerMage{background-image:url(spritesmith-main-4.png);background-position:-697px -1557px;width:40px;height:40px}.shop_head_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-1476px -1516px;width:40px;height:40px}.shop_head_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:-738px -1557px;width:40px;height:40px}.shop_shield_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1620px -680px;width:40px;height:40px}.shop_shield_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1579px -721px;width:40px;height:40px}.shop_shield_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1620px -721px;width:40px;height:40px}.shop_shield_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-1579px -762px;width:40px;height:40px}.shop_shield_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-1620px -762px;width:40px;height:40px}.shop_shield_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:-1579px -803px;width:40px;height:40px}.shop_weapon_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1620px -803px;width:40px;height:40px}.shop_weapon_special_summer2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1579px -844px;width:40px;height:40px}.shop_weapon_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-1620px -844px;width:40px;height:40px}.shop_weapon_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1579px -885px;width:40px;height:40px}.shop_weapon_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-1620px -885px;width:40px;height:40px}.shop_weapon_special_summerMage{background-image:url(spritesmith-main-4.png);background-position:-1579px -926px;width:40px;height:40px}.shop_weapon_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-1620px -926px;width:40px;height:40px}.shop_weapon_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:-1579px -967px;width:40px;height:40px}.slim_armor_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1579px -546px;width:90px;height:90px}.slim_armor_special_summer2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1579px -455px;width:90px;height:90px}.slim_armor_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:0 -197px;width:102px;height:105px}.slim_armor_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:0 -485px;width:90px;height:105px}.slim_armor_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-91px -485px;width:90px;height:105px}.slim_armor_special_summerMage{background-image:url(spritesmith-main-4.png);background-position:-757px 0;width:90px;height:105px}.slim_armor_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-442px -273px;width:111px;height:90px}.slim_armor_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:0 -394px;width:111px;height:90px}.weapon_special_summer2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1365px -1425px;width:90px;height:90px}.weapon_special_summer2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1274px -1425px;width:90px;height:90px}.weapon_special_summer2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-121px 0;width:102px;height:105px}.weapon_special_summer2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-182px -591px;width:90px;height:105px}.weapon_special_summerHealer{background-image:url(spritesmith-main-4.png);background-position:-273px -591px;width:90px;height:105px}.weapon_special_summerMage{background-image:url(spritesmith-main-4.png);background-position:-364px -591px;width:90px;height:105px}.weapon_special_summerRogue{background-image:url(spritesmith-main-4.png);background-position:-112px -303px;width:111px;height:90px}.weapon_special_summerWarrior{background-image:url(spritesmith-main-4.png);background-position:-224px -303px;width:111px;height:90px}.broad_armor_special_candycane{background-image:url(spritesmith-main-4.png);background-position:-637px -1425px;width:90px;height:90px}.broad_armor_special_ski{background-image:url(spritesmith-main-4.png);background-position:-546px -1425px;width:90px;height:90px}.broad_armor_special_snowflake{background-image:url(spritesmith-main-4.png);background-position:-455px -1425px;width:90px;height:90px}.broad_armor_special_winter2015Healer{background-image:url(spritesmith-main-4.png);background-position:-364px -1425px;width:90px;height:90px}.broad_armor_special_winter2015Mage{background-image:url(spritesmith-main-4.png);background-position:-273px -1425px;width:90px;height:90px}.broad_armor_special_winter2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-507px -697px;width:96px;height:90px}.broad_armor_special_winter2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1001px -1243px;width:90px;height:90px}.broad_armor_special_yeti{background-image:url(spritesmith-main-4.png);background-position:-910px -1243px;width:90px;height:90px}.head_special_candycane{background-image:url(spritesmith-main-4.png);background-position:-819px -1243px;width:90px;height:90px}.head_special_nye{background-image:url(spritesmith-main-4.png);background-position:-728px -1243px;width:90px;height:90px}.head_special_nye2014{background-image:url(spritesmith-main-4.png);background-position:-637px -1243px;width:90px;height:90px}.head_special_ski{background-image:url(spritesmith-main-4.png);background-position:-546px -1243px;width:90px;height:90px}.head_special_snowflake{background-image:url(spritesmith-main-4.png);background-position:-455px -1243px;width:90px;height:90px}.head_special_winter2015Healer{background-image:url(spritesmith-main-4.png);background-position:-364px -1243px;width:90px;height:90px}.head_special_winter2015Mage{background-image:url(spritesmith-main-4.png);background-position:-273px -1243px;width:90px;height:90px}.head_special_winter2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-604px -697px;width:96px;height:90px}.head_special_winter2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-91px -1243px;width:90px;height:90px}.head_special_yeti{background-image:url(spritesmith-main-4.png);background-position:0 -1243px;width:90px;height:90px}.shield_special_ski{background-image:url(spritesmith-main-4.png);background-position:0 -697px;width:104px;height:90px}.shield_special_snowflake{background-image:url(spritesmith-main-4.png);background-position:-1306px -1001px;width:90px;height:90px}.shield_special_winter2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1306px -910px;width:90px;height:90px}.shield_special_winter2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-121px -106px;width:96px;height:90px}.shield_special_winter2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1306px -728px;width:90px;height:90px}.shield_special_yeti{background-image:url(spritesmith-main-4.png);background-position:-1306px -637px;width:90px;height:90px}.shop_armor_special_candycane{background-image:url(spritesmith-main-4.png);background-position:-889px -728px;width:40px;height:40px}.shop_armor_special_ski{background-image:url(spritesmith-main-4.png);background-position:-757px -609px;width:40px;height:40px}.shop_armor_special_snowflake{background-image:url(spritesmith-main-4.png);background-position:-798px -609px;width:40px;height:40px}.shop_armor_special_winter2015Healer{background-image:url(spritesmith-main-4.png);background-position:-757px -650px;width:40px;height:40px}.shop_armor_special_winter2015Mage{background-image:url(spritesmith-main-4.png);background-position:-798px -650px;width:40px;height:40px}.shop_armor_special_winter2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-666px -530px;width:40px;height:40px}.shop_armor_special_winter2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-707px -530px;width:40px;height:40px}.shop_armor_special_yeti{background-image:url(spritesmith-main-4.png);background-position:-795px -697px;width:40px;height:40px}.shop_head_special_candycane{background-image:url(spritesmith-main-4.png);background-position:-795px -738px;width:40px;height:40px}.shop_head_special_nye{background-image:url(spritesmith-main-4.png);background-position:0 -1516px;width:40px;height:40px}.shop_head_special_nye2014{background-image:url(spritesmith-main-4.png);background-position:-41px -1516px;width:40px;height:40px}.shop_head_special_ski{background-image:url(spritesmith-main-4.png);background-position:-82px -1516px;width:40px;height:40px}.shop_head_special_snowflake{background-image:url(spritesmith-main-4.png);background-position:-123px -1516px;width:40px;height:40px}.shop_head_special_winter2015Healer{background-image:url(spritesmith-main-4.png);background-position:-164px -1516px;width:40px;height:40px}.shop_head_special_winter2015Mage{background-image:url(spritesmith-main-4.png);background-position:-205px -1516px;width:40px;height:40px}.shop_head_special_winter2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-246px -1516px;width:40px;height:40px}.shop_head_special_winter2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-287px -1516px;width:40px;height:40px}.shop_head_special_yeti{background-image:url(spritesmith-main-4.png);background-position:-328px -1516px;width:40px;height:40px}.shop_shield_special_ski{background-image:url(spritesmith-main-4.png);background-position:-369px -1516px;width:40px;height:40px}.shop_shield_special_snowflake{background-image:url(spritesmith-main-4.png);background-position:-410px -1516px;width:40px;height:40px}.shop_shield_special_winter2015Healer{background-image:url(spritesmith-main-4.png);background-position:-451px -1516px;width:40px;height:40px}.shop_shield_special_winter2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-492px -1516px;width:40px;height:40px}.shop_shield_special_winter2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-533px -1516px;width:40px;height:40px}.shop_shield_special_yeti{background-image:url(spritesmith-main-4.png);background-position:-574px -1516px;width:40px;height:40px}.shop_weapon_special_candycane{background-image:url(spritesmith-main-4.png);background-position:-615px -1516px;width:40px;height:40px}.shop_weapon_special_ski{background-image:url(spritesmith-main-4.png);background-position:-656px -1516px;width:40px;height:40px}.shop_weapon_special_snowflake{background-image:url(spritesmith-main-4.png);background-position:-697px -1516px;width:40px;height:40px}.shop_weapon_special_winter2015Healer{background-image:url(spritesmith-main-4.png);background-position:-738px -1516px;width:40px;height:40px}.shop_weapon_special_winter2015Mage{background-image:url(spritesmith-main-4.png);background-position:-779px -1516px;width:40px;height:40px}.shop_weapon_special_winter2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-820px -1516px;width:40px;height:40px}.shop_weapon_special_winter2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-861px -1516px;width:40px;height:40px}.shop_weapon_special_yeti{background-image:url(spritesmith-main-4.png);background-position:-902px -1516px;width:40px;height:40px}.slim_armor_special_candycane{background-image:url(spritesmith-main-4.png);background-position:-1306px -546px;width:90px;height:90px}.slim_armor_special_ski{background-image:url(spritesmith-main-4.png);background-position:-1306px -455px;width:90px;height:90px}.slim_armor_special_snowflake{background-image:url(spritesmith-main-4.png);background-position:-1306px -364px;width:90px;height:90px}.slim_armor_special_winter2015Healer{background-image:url(spritesmith-main-4.png);background-position:-1306px -273px;width:90px;height:90px}.slim_armor_special_winter2015Mage{background-image:url(spritesmith-main-4.png);background-position:-1306px -182px;width:90px;height:90px}.slim_armor_special_winter2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-313px -697px;width:96px;height:90px}.slim_armor_special_winter2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-1306px 0;width:90px;height:90px}.slim_armor_special_yeti{background-image:url(spritesmith-main-4.png);background-position:-1183px -1152px;width:90px;height:90px}.weapon_special_candycane{background-image:url(spritesmith-main-4.png);background-position:-1092px -1152px;width:90px;height:90px}.weapon_special_ski{background-image:url(spritesmith-main-4.png);background-position:-1001px -1152px;width:90px;height:90px}.weapon_special_snowflake{background-image:url(spritesmith-main-4.png);background-position:-910px -1152px;width:90px;height:90px}.weapon_special_winter2015Healer{background-image:url(spritesmith-main-4.png);background-position:-819px -1152px;width:90px;height:90px}.weapon_special_winter2015Mage{background-image:url(spritesmith-main-4.png);background-position:-728px -1152px;width:90px;height:90px}.weapon_special_winter2015Rogue{background-image:url(spritesmith-main-4.png);background-position:-410px -697px;width:96px;height:90px}.weapon_special_winter2015Warrior{background-image:url(spritesmith-main-4.png);background-position:-546px -1152px;width:90px;height:90px}.weapon_special_yeti{background-image:url(spritesmith-main-4.png);background-position:-455px -1152px;width:90px;height:90px}.back_special_wondercon_black{background-image:url(spritesmith-main-4.png);background-position:-364px -1152px;width:90px;height:90px}.back_special_wondercon_red{background-image:url(spritesmith-main-4.png);background-position:-273px -1152px;width:90px;height:90px}.body_special_wondercon_black{background-image:url(spritesmith-main-4.png);background-position:-182px -1152px;width:90px;height:90px}.body_special_wondercon_gold{background-image:url(spritesmith-main-4.png);background-position:-1124px -637px;width:90px;height:90px}.body_special_wondercon_red{background-image:url(spritesmith-main-4.png);background-position:-1124px -546px;width:90px;height:90px}.eyewear_special_wondercon_black{background-image:url(spritesmith-main-4.png);background-position:-1124px -455px;width:90px;height:90px}.eyewear_special_wondercon_red{background-image:url(spritesmith-main-4.png);background-position:-1124px -364px;width:90px;height:90px}.shop_back_special_wondercon_black{background-image:url(spritesmith-main-4.png);background-position:-246px -1557px;width:40px;height:40px}.shop_back_special_wondercon_red{background-image:url(spritesmith-main-4.png);background-position:-287px -1557px;width:40px;height:40px}.shop_body_special_wondercon_black{background-image:url(spritesmith-main-4.png);background-position:-328px -1557px;width:40px;height:40px}.shop_body_special_wondercon_gold{background-image:url(spritesmith-main-4.png);background-position:-369px -1557px;width:40px;height:40px}.shop_body_special_wondercon_red{background-image:url(spritesmith-main-4.png);background-position:-410px -1557px;width:40px;height:40px}.shop_eyewear_special_wondercon_black{background-image:url(spritesmith-main-4.png);background-position:-451px -1557px;width:40px;height:40px}.shop_eyewear_special_wondercon_red{background-image:url(spritesmith-main-4.png);background-position:-492px -1557px;width:40px;height:40px}.head_0{background-image:url(spritesmith-main-4.png);background-position:-819px -970px;width:90px;height:90px}.customize-option.head_0{background-image:url(spritesmith-main-4.png);background-position:-844px -985px;width:60px;height:60px}.head_healer_1{background-image:url(spritesmith-main-4.png);background-position:-728px -970px;width:90px;height:90px}.head_healer_2{background-image:url(spritesmith-main-4.png);background-position:-637px -970px;width:90px;height:90px}.head_healer_3{background-image:url(spritesmith-main-4.png);background-position:-546px -970px;width:90px;height:90px}.head_healer_4{background-image:url(spritesmith-main-4.png);background-position:-91px -970px;width:90px;height:90px}.head_healer_5{background-image:url(spritesmith-main-4.png);background-position:0 -970px;width:90px;height:90px}.head_rogue_1{background-image:url(spritesmith-main-4.png);background-position:-1033px -637px;width:90px;height:90px}.head_rogue_2{background-image:url(spritesmith-main-4.png);background-position:-1033px -546px;width:90px;height:90px}.head_rogue_3{background-image:url(spritesmith-main-4.png);background-position:-1033px -182px;width:90px;height:90px}.head_rogue_4{background-image:url(spritesmith-main-4.png);background-position:-1033px -91px;width:90px;height:90px}.head_rogue_5{background-image:url(spritesmith-main-4.png);background-position:-728px -879px;width:90px;height:90px}.head_special_2{background-image:url(spritesmith-main-4.png);background-position:-637px -879px;width:90px;height:90px}.head_special_fireCoralCirclet{background-image:url(spritesmith-main-4.png);background-position:-364px -879px;width:90px;height:90px}.head_warrior_1{background-image:url(spritesmith-main-4.png);background-position:-273px -879px;width:90px;height:90px}.head_warrior_2{background-image:url(spritesmith-main-4.png);background-position:-942px -728px;width:90px;height:90px}.head_warrior_3{background-image:url(spritesmith-main-4.png);background-position:-942px -637px;width:90px;height:90px}.head_warrior_4{background-image:url(spritesmith-main-4.png);background-position:-942px -273px;width:90px;height:90px}.head_warrior_5{background-image:url(spritesmith-main-4.png);background-position:-942px -182px;width:90px;height:90px}.head_wizard_1{background-image:url(spritesmith-main-4.png);background-position:-819px -788px;width:90px;height:90px}.head_wizard_2{background-image:url(spritesmith-main-4.png);background-position:-728px -788px;width:90px;height:90px}.head_wizard_3{background-image:url(spritesmith-main-4.png);background-position:-364px -788px;width:90px;height:90px}.head_wizard_4{background-image:url(spritesmith-main-4.png);background-position:-273px -788px;width:90px;height:90px}.head_wizard_5{background-image:url(spritesmith-main-4.png);background-position:-848px -637px;width:90px;height:90px}.shop_head_healer_1{background-image:url(spritesmith-main-4.png);background-position:-1476px -1557px;width:40px;height:40px}.shop_head_healer_2{background-image:url(spritesmith-main-4.png);background-position:-1517px -1557px;width:40px;height:40px}.shop_head_healer_3{background-image:url(spritesmith-main-4.png);background-position:-1558px -1557px;width:40px;height:40px}.shop_head_healer_4{background-image:url(spritesmith-main-4.png);background-position:-1599px -1557px;width:40px;height:40px}.shop_head_healer_5{background-image:url(spritesmith-main-4.png);background-position:0 -1598px;width:40px;height:40px}.shop_head_rogue_1{background-image:url(spritesmith-main-4.png);background-position:-41px -1598px;width:40px;height:40px}.shop_head_rogue_2{background-image:url(spritesmith-main-4.png);background-position:-82px -1598px;width:40px;height:40px}.shop_head_rogue_3{background-image:url(spritesmith-main-4.png);background-position:-123px -1598px;width:40px;height:40px}.shop_head_rogue_4{background-image:url(spritesmith-main-4.png);background-position:-164px -1598px;width:40px;height:40px}.shop_head_rogue_5{background-image:url(spritesmith-main-4.png);background-position:-205px -1598px;width:40px;height:40px}.shop_head_special_0{background-image:url(spritesmith-main-4.png);background-position:-246px -1598px;width:40px;height:40px}.shop_head_special_1{background-image:url(spritesmith-main-4.png);background-position:-287px -1598px;width:40px;height:40px}.shop_head_special_2{background-image:url(spritesmith-main-4.png);background-position:-328px -1598px;width:40px;height:40px}.shop_head_special_fireCoralCirclet{background-image:url(spritesmith-main-4.png);background-position:-369px -1598px;width:40px;height:40px}.shop_head_warrior_1{background-image:url(spritesmith-main-4.png);background-position:-410px -1598px;width:40px;height:40px}.shop_head_warrior_2{background-image:url(spritesmith-main-4.png);background-position:-451px -1598px;width:40px;height:40px}.shop_head_warrior_3{background-image:url(spritesmith-main-4.png);background-position:-492px -1598px;width:40px;height:40px}.shop_head_warrior_4{background-image:url(spritesmith-main-4.png);background-position:-533px -1598px;width:40px;height:40px}.shop_head_warrior_5{background-image:url(spritesmith-main-4.png);background-position:-574px -1598px;width:40px;height:40px}.shop_head_wizard_1{background-image:url(spritesmith-main-4.png);background-position:-615px -1598px;width:40px;height:40px}.shop_head_wizard_2{background-image:url(spritesmith-main-4.png);background-position:-656px -1598px;width:40px;height:40px}.shop_head_wizard_3{background-image:url(spritesmith-main-4.png);background-position:-697px -1598px;width:40px;height:40px}.shop_head_wizard_4{background-image:url(spritesmith-main-4.png);background-position:-738px -1598px;width:40px;height:40px}.shop_head_wizard_5{background-image:url(spritesmith-main-4.png);background-position:-779px -1598px;width:40px;height:40px}.headAccessory_special_bearEars{background-image:url(spritesmith-main-4.png);background-position:-848px -546px;width:90px;height:90px}.customize-option.headAccessory_special_bearEars{background-image:url(spritesmith-main-4.png);background-position:-873px -561px;width:60px;height:60px}.headAccessory_special_cactusEars{background-image:url(spritesmith-main-4.png);background-position:-1579px -182px;width:90px;height:90px}.customize-option.headAccessory_special_cactusEars{background-image:url(spritesmith-main-4.png);background-position:-1604px -197px;width:60px;height:60px}.headAccessory_special_foxEars{background-image:url(spritesmith-main-4.png);background-position:-1579px -91px;width:90px;height:90px}.customize-option.headAccessory_special_foxEars{background-image:url(spritesmith-main-4.png);background-position:-1604px -106px;width:60px;height:60px}.headAccessory_special_lionEars{background-image:url(spritesmith-main-4.png);background-position:-1092px -1425px;width:90px;height:90px}.customize-option.headAccessory_special_lionEars{background-image:url(spritesmith-main-4.png);background-position:-1117px -1440px;width:60px;height:60px}.headAccessory_special_pandaEars{background-image:url(spritesmith-main-4.png);background-position:-1001px -1425px;width:90px;height:90px}.customize-option.headAccessory_special_pandaEars{background-image:url(spritesmith-main-4.png);background-position:-1026px -1440px;width:60px;height:60px}.headAccessory_special_pigEars{background-image:url(spritesmith-main-4.png);background-position:-182px -1425px;width:90px;height:90px}.customize-option.headAccessory_special_pigEars{background-image:url(spritesmith-main-4.png);background-position:-207px -1440px;width:60px;height:60px}.headAccessory_special_tigerEars{background-image:url(spritesmith-main-4.png);background-position:-91px -1425px;width:90px;height:90px}.customize-option.headAccessory_special_tigerEars{background-image:url(spritesmith-main-4.png);background-position:-116px -1440px;width:60px;height:60px}.headAccessory_special_wolfEars{background-image:url(spritesmith-main-4.png);background-position:-1488px -1183px;width:90px;height:90px}.customize-option.headAccessory_special_wolfEars{background-image:url(spritesmith-main-4.png);background-position:-1513px -1198px;width:60px;height:60px}.shop_headAccessory_special_bearEars{background-image:url(spritesmith-main-4.png);background-position:-1148px -1598px;width:40px;height:40px}.shop_headAccessory_special_cactusEars{background-image:url(spritesmith-main-4.png);background-position:-1189px -1598px;width:40px;height:40px}.shop_headAccessory_special_foxEars{background-image:url(spritesmith-main-4.png);background-position:-1230px -1598px;width:40px;height:40px}.shop_headAccessory_special_lionEars{background-image:url(spritesmith-main-4.png);background-position:-1271px -1598px;width:40px;height:40px}.shop_headAccessory_special_pandaEars{background-image:url(spritesmith-main-4.png);background-position:-1312px -1598px;width:40px;height:40px}.shop_headAccessory_special_pigEars{background-image:url(spritesmith-main-4.png);background-position:-1353px -1598px;width:40px;height:40px}.shop_headAccessory_special_tigerEars{background-image:url(spritesmith-main-4.png);background-position:-1394px -1598px;width:40px;height:40px}.shop_headAccessory_special_wolfEars{background-image:url(spritesmith-main-4.png);background-position:-1435px -1598px;width:40px;height:40px}.shield_healer_1{background-image:url(spritesmith-main-4.png);background-position:-1488px -1001px;width:90px;height:90px}.shield_healer_2{background-image:url(spritesmith-main-4.png);background-position:-1488px -637px;width:90px;height:90px}.shield_healer_3{background-image:url(spritesmith-main-4.png);background-position:-1488px -546px;width:90px;height:90px}.shield_healer_4{background-image:url(spritesmith-main-4.png);background-position:-1488px -182px;width:90px;height:90px}.shield_healer_5{background-image:url(spritesmith-main-4.png);background-position:-1365px -1334px;width:90px;height:90px}.shield_rogue_0{background-image:url(spritesmith-main-4.png);background-position:-1001px -1334px;width:90px;height:90px}.shield_rogue_1{background-image:url(spritesmith-main-4.png);background-position:-209px -697px;width:103px;height:90px}.shield_rogue_2{background-image:url(spritesmith-main-4.png);background-position:-105px -697px;width:103px;height:90px}.shield_rogue_3{background-image:url(spritesmith-main-4.png);background-position:-327px -91px;width:114px;height:90px}.shield_rogue_4{background-image:url(spritesmith-main-4.png);background-position:-224px -106px;width:96px;height:90px}.shield_rogue_5{background-image:url(spritesmith-main-4.png);background-position:-327px -182px;width:114px;height:90px}.shield_rogue_6{background-image:url(spritesmith-main-4.png);background-position:-327px 0;width:114px;height:90px}.shield_special_1{background-image:url(spritesmith-main-4.png);background-position:-1033px -364px;width:90px;height:90px}.shield_special_goldenknight{background-image:url(spritesmith-main-4.png);background-position:-554px -182px;width:111px;height:90px}.shield_special_moonpearlShield{background-image:url(spritesmith-main-4.png);background-position:-91px -879px;width:90px;height:90px}.shield_warrior_1{background-image:url(spritesmith-main-4.png);background-position:-1488px -1274px;width:90px;height:90px}.shield_warrior_2{background-image:url(spritesmith-main-4.png);background-position:-1488px -910px;width:90px;height:90px}.shield_warrior_3{background-image:url(spritesmith-main-4.png);background-position:-1488px -819px;width:90px;height:90px}.shield_warrior_4{background-image:url(spritesmith-main-4.png);background-position:-182px -1334px;width:90px;height:90px}.shield_warrior_5{background-image:url(spritesmith-main-4.png);background-position:-1092px -1243px;width:90px;height:90px}.shop_shield_healer_1{background-image:url(spritesmith-main-4.png);background-position:-1670px -656px;width:40px;height:40px}.shop_shield_healer_2{background-image:url(spritesmith-main-4.png);background-position:-1670px -697px;width:40px;height:40px}.shop_shield_healer_3{background-image:url(spritesmith-main-4.png);background-position:-1670px -738px;width:40px;height:40px}.shop_shield_healer_4{background-image:url(spritesmith-main-5.png);background-position:-1525px -367px;width:40px;height:40px}.shop_shield_healer_5{background-image:url(spritesmith-main-5.png);background-position:-1711px -1377px;width:40px;height:40px}.shop_shield_rogue_0{background-image:url(spritesmith-main-5.png);background-position:-1711px -1459px;width:40px;height:40px}.shop_shield_rogue_1{background-image:url(spritesmith-main-5.png);background-position:-1711px -1623px;width:40px;height:40px}.shop_shield_rogue_2{background-image:url(spritesmith-main-5.png);background-position:-1525px -326px;width:40px;height:40px}.shop_shield_rogue_3{background-image:url(spritesmith-main-5.png);background-position:-421px -1704px;width:40px;height:40px}.shop_shield_rogue_4{background-image:url(spritesmith-main-5.png);background-position:-503px -1704px;width:40px;height:40px}.shop_shield_rogue_5{background-image:url(spritesmith-main-5.png);background-position:-667px -1704px;width:40px;height:40px}.shop_shield_rogue_6{background-image:url(spritesmith-main-5.png);background-position:-708px -1704px;width:40px;height:40px}.shop_shield_special_0{background-image:url(spritesmith-main-5.png);background-position:-749px -1704px;width:40px;height:40px}.shop_shield_special_1{background-image:url(spritesmith-main-5.png);background-position:-790px -1704px;width:40px;height:40px}.shop_shield_special_goldenknight{background-image:url(spritesmith-main-5.png);background-position:-831px -1704px;width:40px;height:40px}.shop_shield_special_moonpearlShield{background-image:url(spritesmith-main-5.png);background-position:-1760px -82px;width:40px;height:40px}.shop_shield_warrior_1{background-image:url(spritesmith-main-5.png);background-position:-1760px -41px;width:40px;height:40px}.shop_shield_warrior_2{background-image:url(spritesmith-main-5.png);background-position:-1760px 0;width:40px;height:40px}.shop_shield_warrior_3{background-image:url(spritesmith-main-5.png);background-position:-1692px -1704px;width:40px;height:40px}.shop_shield_warrior_4{background-image:url(spritesmith-main-5.png);background-position:-1651px -1704px;width:40px;height:40px}.shop_shield_warrior_5{background-image:url(spritesmith-main-5.png);background-position:-1610px -1704px;width:40px;height:40px}.shop_weapon_healer_0{background-image:url(spritesmith-main-5.png);background-position:-1569px -1704px;width:40px;height:40px}.shop_weapon_healer_1{background-image:url(spritesmith-main-5.png);background-position:-1528px -1704px;width:40px;height:40px}.shop_weapon_healer_2{background-image:url(spritesmith-main-5.png);background-position:-1487px -1704px;width:40px;height:40px}.shop_weapon_healer_3{background-image:url(spritesmith-main-5.png);background-position:-1446px -1704px;width:40px;height:40px}.shop_weapon_healer_4{background-image:url(spritesmith-main-5.png);background-position:-1405px -1704px;width:40px;height:40px}.shop_weapon_healer_5{background-image:url(spritesmith-main-5.png);background-position:-1364px -1704px;width:40px;height:40px}.shop_weapon_healer_6{background-image:url(spritesmith-main-5.png);background-position:-1323px -1704px;width:40px;height:40px}.shop_weapon_rogue_0{background-image:url(spritesmith-main-5.png);background-position:-1282px -1704px;width:40px;height:40px}.shop_weapon_rogue_1{background-image:url(spritesmith-main-5.png);background-position:-1241px -1704px;width:40px;height:40px}.shop_weapon_rogue_2{background-image:url(spritesmith-main-5.png);background-position:-1200px -1704px;width:40px;height:40px}.shop_weapon_rogue_3{background-image:url(spritesmith-main-5.png);background-position:-1159px -1704px;width:40px;height:40px}.shop_weapon_rogue_4{background-image:url(spritesmith-main-5.png);background-position:-1118px -1704px;width:40px;height:40px}.shop_weapon_rogue_5{background-image:url(spritesmith-main-5.png);background-position:-1077px -1704px;width:40px;height:40px}.shop_weapon_rogue_6{background-image:url(spritesmith-main-5.png);background-position:-1036px -1704px;width:40px;height:40px}.shop_weapon_special_0{background-image:url(spritesmith-main-5.png);background-position:-995px -1704px;width:40px;height:40px}.shop_weapon_special_1{background-image:url(spritesmith-main-5.png);background-position:-954px -1704px;width:40px;height:40px}.shop_weapon_special_2{background-image:url(spritesmith-main-5.png);background-position:-913px -1704px;width:40px;height:40px}.shop_weapon_special_3{background-image:url(spritesmith-main-5.png);background-position:-872px -1704px;width:40px;height:40px}.shop_weapon_special_critical{background-image:url(spritesmith-main-5.png);background-position:-380px -1704px;width:40px;height:40px}.shop_weapon_special_tridentOfCrashingTides{background-image:url(spritesmith-main-5.png);background-position:-339px -1704px;width:40px;height:40px}.shop_weapon_warrior_0{background-image:url(spritesmith-main-5.png);background-position:-257px -1704px;width:40px;height:40px}.shop_weapon_warrior_1{background-image:url(spritesmith-main-5.png);background-position:-216px -1704px;width:40px;height:40px}.shop_weapon_warrior_2{background-image:url(spritesmith-main-5.png);background-position:-175px -1704px;width:40px;height:40px}.shop_weapon_warrior_3{background-image:url(spritesmith-main-5.png);background-position:-134px -1704px;width:40px;height:40px}.shop_weapon_warrior_4{background-image:url(spritesmith-main-5.png);background-position:-93px -1704px;width:40px;height:40px}.shop_weapon_warrior_5{background-image:url(spritesmith-main-5.png);background-position:-52px -1704px;width:40px;height:40px}.shop_weapon_warrior_6{background-image:url(spritesmith-main-5.png);background-position:-1666px -1652px;width:40px;height:40px}.shop_weapon_wizard_0{background-image:url(spritesmith-main-5.png);background-position:-1262px -811px;width:40px;height:40px}.shop_weapon_wizard_1{background-image:url(spritesmith-main-5.png);background-position:-1221px -811px;width:40px;height:40px}.shop_weapon_wizard_2{background-image:url(spritesmith-main-5.png);background-position:-1528px -770px;width:40px;height:40px}.shop_weapon_wizard_3{background-image:url(spritesmith-main-5.png);background-position:-1528px -729px;width:40px;height:40px}.shop_weapon_wizard_4{background-image:url(spritesmith-main-5.png);background-position:-1528px -688px;width:40px;height:40px}.shop_weapon_wizard_5{background-image:url(spritesmith-main-5.png);background-position:-1525px -449px;width:40px;height:40px}.shop_weapon_wizard_6{background-image:url(spritesmith-main-5.png);background-position:-1525px -408px;width:40px;height:40px}.weapon_healer_0{background-image:url(spritesmith-main-5.png);background-position:-1302px -1469px;width:90px;height:90px}.weapon_healer_1{background-image:url(spritesmith-main-5.png);background-position:-1571px -728px;width:90px;height:90px}.weapon_healer_2{background-image:url(spritesmith-main-5.png);background-position:-1571px -819px;width:90px;height:90px}.weapon_healer_3{background-image:url(spritesmith-main-5.png);background-position:-1571px -910px;width:90px;height:90px}.weapon_healer_4{background-image:url(spritesmith-main-5.png);background-position:-1571px -1001px;width:90px;height:90px}.weapon_healer_5{background-image:url(spritesmith-main-5.png);background-position:-1571px -1092px;width:90px;height:90px}.weapon_healer_6{background-image:url(spritesmith-main-5.png);background-position:-1571px -1274px;width:90px;height:90px}.weapon_rogue_0{background-image:url(spritesmith-main-5.png);background-position:-1571px -1365px;width:90px;height:90px}.weapon_rogue_1{background-image:url(spritesmith-main-5.png);background-position:-1571px -1456px;width:90px;height:90px}.weapon_rogue_2{background-image:url(spritesmith-main-5.png);background-position:0 -1561px;width:90px;height:90px}.weapon_rogue_3{background-image:url(spritesmith-main-5.png);background-position:-119px -1469px;width:90px;height:90px}.weapon_rogue_4{background-image:url(spritesmith-main-5.png);background-position:-483px -1469px;width:90px;height:90px}.weapon_rogue_5{background-image:url(spritesmith-main-5.png);background-position:-301px -1469px;width:90px;height:90px}.weapon_rogue_6{background-image:url(spritesmith-main-5.png);background-position:-392px -1469px;width:90px;height:90px}.weapon_special_1{background-image:url(spritesmith-main-5.png);background-position:-1137px -1287px;width:102px;height:90px}.weapon_special_2{background-image:url(spritesmith-main-5.png);background-position:-574px -1469px;width:90px;height:90px}.weapon_special_3{background-image:url(spritesmith-main-5.png);background-position:-665px -1469px;width:90px;height:90px}.weapon_special_tridentOfCrashingTides{background-image:url(spritesmith-main-5.png);background-position:-756px -1469px;width:90px;height:90px}.weapon_warrior_0{background-image:url(spritesmith-main-5.png);background-position:-847px -1469px;width:90px;height:90px}.weapon_warrior_1{background-image:url(spritesmith-main-5.png);background-position:-938px -1469px;width:90px;height:90px}.weapon_warrior_2{background-image:url(spritesmith-main-5.png);background-position:-1029px -1469px;width:90px;height:90px}.weapon_warrior_3{background-image:url(spritesmith-main-5.png);background-position:-1120px -1469px;width:90px;height:90px}.weapon_warrior_4{background-image:url(spritesmith-main-5.png);background-position:-1211px -1469px;width:90px;height:90px}.weapon_warrior_5{background-image:url(spritesmith-main-5.png);background-position:-182px -1561px;width:90px;height:90px}.weapon_warrior_6{background-image:url(spritesmith-main-5.png);background-position:-1393px -1469px;width:90px;height:90px}.weapon_wizard_0{background-image:url(spritesmith-main-5.png);background-position:-1571px 0;width:90px;height:90px}.weapon_wizard_1{background-image:url(spritesmith-main-5.png);background-position:-1571px -91px;width:90px;height:90px}.weapon_wizard_2{background-image:url(spritesmith-main-5.png);background-position:-1571px -182px;width:90px;height:90px}.weapon_wizard_3{background-image:url(spritesmith-main-5.png);background-position:-1571px -273px;width:90px;height:90px}.weapon_wizard_4{background-image:url(spritesmith-main-5.png);background-position:-1571px -364px;width:90px;height:90px}.weapon_wizard_5{background-image:url(spritesmith-main-5.png);background-position:-1571px -455px;width:90px;height:90px}.weapon_wizard_6{background-image:url(spritesmith-main-5.png);background-position:-1571px -546px;width:90px;height:90px}.GrimReaper{background-image:url(spritesmith-main-5.png);background-position:-1511px -504px;width:57px;height:66px}.Pet_Currency_Gem{background-image:url(spritesmith-main-5.png);background-position:-1711px -1337px;width:45px;height:39px}.Pet_Currency_Gem1x{background-image:url(spritesmith-main-5.png);background-position:-1760px -422px;width:15px;height:13px}.Pet_Currency_Gem2x{background-image:url(spritesmith-main-5.png);background-position:-1760px -326px;width:30px;height:26px}.PixelPaw-Gold{background-image:url(spritesmith-main-5.png);background-position:-1516px -966px;width:51px;height:51px}.PixelPaw{background-image:url(spritesmith-main-5.png);background-position:-1516px -879px;width:51px;height:51px}.PixelPaw002{background-image:url(spritesmith-main-5.png);background-position:-1516px -827px;width:51px;height:51px}.avatar_floral_healer{background-image:url(spritesmith-main-5.png);background-position:-837px -1287px;width:99px;height:99px}.avatar_floral_rogue{background-image:url(spritesmith-main-5.png);background-position:-937px -1287px;width:99px;height:99px}.avatar_floral_warrior{background-image:url(spritesmith-main-5.png);background-position:-1037px -1287px;width:99px;height:99px}.avatar_floral_wizard{background-image:url(spritesmith-main-5.png);background-position:-737px -1287px;width:99px;height:99px}.empty_bottles{background-image:url(spritesmith-main-5.png);background-position:-273px -1561px;width:64px;height:54px}.inventory_present{background-image:url(spritesmith-main-5.png);background-position:-1350px -1561px;width:48px;height:51px}.inventory_present_01{background-image:url(spritesmith-main-5.png);background-position:-1301px -1561px;width:48px;height:51px}.inventory_present_02{background-image:url(spritesmith-main-5.png);background-position:-1252px -1561px;width:48px;height:51px}.inventory_present_03{background-image:url(spritesmith-main-5.png);background-position:-1203px -1561px;width:48px;height:51px}.inventory_present_04{background-image:url(spritesmith-main-5.png);background-position:-1154px -1561px;width:48px;height:51px}.inventory_present_05{background-image:url(spritesmith-main-5.png);background-position:-1105px -1561px;width:48px;height:51px}.inventory_present_06{background-image:url(spritesmith-main-5.png);background-position:-1056px -1561px;width:48px;height:51px}.inventory_present_07{background-image:url(spritesmith-main-5.png);background-position:-958px -1561px;width:48px;height:51px}.inventory_present_08{background-image:url(spritesmith-main-5.png);background-position:-909px -1561px;width:48px;height:51px}.inventory_present_09{background-image:url(spritesmith-main-5.png);background-position:-860px -1561px;width:48px;height:51px}.inventory_present_10{background-image:url(spritesmith-main-5.png);background-position:-1516px -1157px;width:48px;height:51px}.inventory_present_11{background-image:url(spritesmith-main-5.png);background-position:-1516px -1105px;width:48px;height:51px}.inventory_present_12{background-image:url(spritesmith-main-5.png);background-position:-1497px -1561px;width:48px;height:51px}.inventory_quest_scroll{background-image:url(spritesmith-main-5.png);background-position:-1448px -1561px;width:48px;height:51px}.inventory_quest_scroll_locked{background-image:url(spritesmith-main-5.png);background-position:-1399px -1561px;width:48px;height:51px}.inventory_special_fortify{background-image:url(spritesmith-main-5.png);background-position:-802px -1561px;width:57px;height:54px}.inventory_special_greeting{background-image:url(spritesmith-main-5.png);background-position:-1511px -626px;width:57px;height:54px}.inventory_special_nye{background-image:url(spritesmith-main-5.png);background-position:-744px -1561px;width:57px;height:54px}.inventory_special_opaquePotion{background-image:url(spritesmith-main-5.png);background-position:-1711px -1582px;width:40px;height:40px}.inventory_special_seafoam{background-image:url(spritesmith-main-5.png);background-position:-628px -1561px;width:57px;height:54px}.inventory_special_shinySeed{background-image:url(spritesmith-main-5.png);background-position:-570px -1561px;width:57px;height:54px}.inventory_special_snowball{background-image:url(spritesmith-main-5.png);background-position:-512px -1561px;width:57px;height:54px}.inventory_special_spookDust{background-image:url(spritesmith-main-5.png);background-position:-454px -1561px;width:57px;height:54px}.inventory_special_thankyou{background-image:url(spritesmith-main-5.png);background-position:-396px -1561px;width:57px;height:54px}.inventory_special_trinket{background-image:url(spritesmith-main-5.png);background-position:-1007px -1561px;width:48px;height:51px}.inventory_special_valentine{background-image:url(spritesmith-main-5.png);background-position:-338px -1561px;width:57px;height:54px}.knockout{background-image:url(spritesmith-main-5.png);background-position:-1100px -811px;width:120px;height:47px}.pet_key{background-image:url(spritesmith-main-5.png);background-position:-1511px -571px;width:57px;height:54px}.rebirth_orb{background-image:url(spritesmith-main-5.png);background-position:-686px -1561px;width:57px;height:54px}.seafoam_star{background-image:url(spritesmith-main-5.png);background-position:-1571px -637px;width:90px;height:90px}.shop_armoire{background-image:url(spritesmith-main-5.png);background-position:-1711px -1541px;width:40px;height:40px}.snowman{background-image:url(spritesmith-main-5.png);background-position:-91px -1561px;width:90px;height:90px}.spookman{background-image:url(spritesmith-main-5.png);background-position:-1571px -1183px;width:90px;height:90px}.zzz{background-image:url(spritesmith-main-5.png);background-position:-1711px -1500px;width:40px;height:40px}.zzz_light{background-image:url(spritesmith-main-5.png);background-position:-1711px -1418px;width:40px;height:40px}.npc_alex{background-image:url(spritesmith-main-5.png);background-position:-190px -1287px;width:162px;height:138px}.npc_bailey{background-image:url(spritesmith-main-5.png);background-position:-1484px -1469px;width:60px;height:72px}.npc_daniel{background-image:url(spritesmith-main-5.png);background-position:-516px -1287px;width:135px;height:123px}.npc_justin{background-image:url(spritesmith-main-5.png);background-position:-652px -1287px;width:84px;height:120px}.npc_justin_head{background-image:url(spritesmith-main-5.png);background-position:-1760px -123px;width:36px;height:39px}.npc_matt{background-image:url(spritesmith-main-5.png);background-position:-1320px -966px;width:195px;height:138px}.npc_timetravelers{background-image:url(spritesmith-main-5.png);background-position:-1320px -1105px;width:195px;height:138px}.npc_timetravelers_active{background-image:url(spritesmith-main-5.png);background-position:-1320px -827px;width:195px;height:138px}.npc_tyler{background-image:url(spritesmith-main-5.png);background-position:-210px -1469px;width:90px;height:90px}.seasonalshop_closed{background-image:url(spritesmith-main-5.png);background-position:-353px -1287px;width:162px;height:138px}.inventory_quest_scroll_atom1{background-image:url(spritesmith-main-5.png);background-position:-1662px -416px;width:48px;height:51px}.inventory_quest_scroll_atom1_locked{background-image:url(spritesmith-main-5.png);background-position:-1662px -468px;width:48px;height:51px}.inventory_quest_scroll_atom2{background-image:url(spritesmith-main-5.png);background-position:-1662px -520px;width:48px;height:51px}.inventory_quest_scroll_atom2_locked{background-image:url(spritesmith-main-5.png);background-position:-1662px -572px;width:48px;height:51px}.inventory_quest_scroll_atom3{background-image:url(spritesmith-main-5.png);background-position:-1662px -624px;width:48px;height:51px}.inventory_quest_scroll_atom3_locked{background-image:url(spritesmith-main-5.png);background-position:-1662px -676px;width:48px;height:51px}.inventory_quest_scroll_basilist{background-image:url(spritesmith-main-5.png);background-position:-1662px -728px;width:48px;height:51px}.inventory_quest_scroll_bunny{background-image:url(spritesmith-main-5.png);background-position:-1711px -1196px;width:48px;height:51px}.inventory_quest_scroll_cheetah{background-image:url(spritesmith-main-5.png);background-position:-1662px -832px;width:48px;height:51px}.inventory_quest_scroll_dilatoryDistress1{background-image:url(spritesmith-main-5.png);background-position:-1662px -884px;width:48px;height:51px}.inventory_quest_scroll_dilatoryDistress2{background-image:url(spritesmith-main-5.png);background-position:-1662px -936px;width:48px;height:51px}.inventory_quest_scroll_dilatoryDistress2_locked{background-image:url(spritesmith-main-5.png);background-position:-1662px -988px;width:48px;height:51px}.inventory_quest_scroll_dilatoryDistress3{background-image:url(spritesmith-main-5.png);background-position:-1662px -1040px;width:48px;height:51px}.inventory_quest_scroll_dilatoryDistress3_locked{background-image:url(spritesmith-main-5.png);background-position:-1662px -1092px;width:48px;height:51px}.inventory_quest_scroll_dilatory_derby{background-image:url(spritesmith-main-5.png);background-position:-1662px -1144px;width:48px;height:51px}.inventory_quest_scroll_egg{background-image:url(spritesmith-main-5.png);background-position:-1662px -1196px;width:48px;height:51px}.inventory_quest_scroll_evilsanta{background-image:url(spritesmith-main-5.png);background-position:-1662px -1248px;width:48px;height:51px}.inventory_quest_scroll_evilsanta2{background-image:url(spritesmith-main-5.png);background-position:-1662px -1300px;width:48px;height:51px}.inventory_quest_scroll_frog{background-image:url(spritesmith-main-5.png);background-position:-1662px -1352px;width:48px;height:51px}.inventory_quest_scroll_ghost_stag{background-image:url(spritesmith-main-5.png);background-position:-1662px -1404px;width:48px;height:51px}.inventory_quest_scroll_goldenknight1{background-image:url(spritesmith-main-5.png);background-position:-1662px -1456px;width:48px;height:51px}.inventory_quest_scroll_goldenknight1_locked{background-image:url(spritesmith-main-5.png);background-position:-1662px -1508px;width:48px;height:51px}.inventory_quest_scroll_goldenknight2{background-image:url(spritesmith-main-5.png);background-position:-1662px -1560px;width:48px;height:51px}.inventory_quest_scroll_goldenknight2_locked{background-image:url(spritesmith-main-5.png);background-position:0 -1652px;width:48px;height:51px}.inventory_quest_scroll_goldenknight3{background-image:url(spritesmith-main-5.png);background-position:-49px -1652px;width:48px;height:51px}.inventory_quest_scroll_goldenknight3_locked{background-image:url(spritesmith-main-5.png);background-position:-98px -1652px;width:48px;height:51px}.inventory_quest_scroll_gryphon{background-image:url(spritesmith-main-5.png);background-position:-1516px -1018px;width:48px;height:51px}.inventory_quest_scroll_harpy{background-image:url(spritesmith-main-5.png);background-position:-196px -1652px;width:48px;height:51px}.inventory_quest_scroll_hedgehog{background-image:url(spritesmith-main-5.png);background-position:-245px -1652px;width:48px;height:51px}.inventory_quest_scroll_horse{background-image:url(spritesmith-main-5.png);background-position:-294px -1652px;width:48px;height:51px}.inventory_quest_scroll_kraken{background-image:url(spritesmith-main-5.png);background-position:-343px -1652px;width:48px;height:51px}.inventory_quest_scroll_moonstone1{background-image:url(spritesmith-main-5.png);background-position:-392px -1652px;width:48px;height:51px}.inventory_quest_scroll_moonstone1_locked{background-image:url(spritesmith-main-5.png);background-position:-441px -1652px;width:48px;height:51px}.inventory_quest_scroll_moonstone2{background-image:url(spritesmith-main-5.png);background-position:-490px -1652px;width:48px;height:51px}.inventory_quest_scroll_moonstone2_locked{background-image:url(spritesmith-main-5.png);background-position:-539px -1652px;width:48px;height:51px}.inventory_quest_scroll_moonstone3{background-image:url(spritesmith-main-5.png);background-position:-588px -1652px;width:48px;height:51px}.inventory_quest_scroll_moonstone3_locked{background-image:url(spritesmith-main-5.png);background-position:-637px -1652px;width:48px;height:51px}.inventory_quest_scroll_octopus{background-image:url(spritesmith-main-5.png);background-position:-686px -1652px;width:48px;height:51px}.inventory_quest_scroll_owl{background-image:url(spritesmith-main-5.png);background-position:-735px -1652px;width:48px;height:51px}.inventory_quest_scroll_penguin{background-image:url(spritesmith-main-5.png);background-position:-784px -1652px;width:48px;height:51px}.inventory_quest_scroll_rat{background-image:url(spritesmith-main-5.png);background-position:-833px -1652px;width:48px;height:51px}.inventory_quest_scroll_rock{background-image:url(spritesmith-main-5.png);background-position:-882px -1652px;width:48px;height:51px}.inventory_quest_scroll_rooster{background-image:url(spritesmith-main-5.png);background-position:-931px -1652px;width:48px;height:51px}.inventory_quest_scroll_sheep{background-image:url(spritesmith-main-5.png);background-position:-980px -1652px;width:48px;height:51px}.inventory_quest_scroll_slime{background-image:url(spritesmith-main-5.png);background-position:-1029px -1652px;width:48px;height:51px}.inventory_quest_scroll_snake{background-image:url(spritesmith-main-5.png);background-position:-1078px -1652px;width:48px;height:51px}.inventory_quest_scroll_spider{background-image:url(spritesmith-main-5.png);background-position:-1127px -1652px;width:48px;height:51px}.inventory_quest_scroll_trex{background-image:url(spritesmith-main-5.png);background-position:-1176px -1652px;width:48px;height:51px}.inventory_quest_scroll_trex_undead{background-image:url(spritesmith-main-5.png);background-position:-1225px -1652px;width:48px;height:51px}.inventory_quest_scroll_vice1{background-image:url(spritesmith-main-5.png);background-position:-1274px -1652px;width:48px;height:51px}.inventory_quest_scroll_vice1_locked{background-image:url(spritesmith-main-5.png);background-position:-1323px -1652px;width:48px;height:51px}.inventory_quest_scroll_vice2{background-image:url(spritesmith-main-5.png);background-position:-1372px -1652px;width:48px;height:51px}.inventory_quest_scroll_vice2_locked{background-image:url(spritesmith-main-5.png);background-position:-1421px -1652px;width:48px;height:51px}.inventory_quest_scroll_vice3{background-image:url(spritesmith-main-5.png);background-position:-1470px -1652px;width:48px;height:51px}.inventory_quest_scroll_vice3_locked{background-image:url(spritesmith-main-5.png);background-position:-1519px -1652px;width:48px;height:51px}.inventory_quest_scroll_whale{background-image:url(spritesmith-main-5.png);background-position:-1568px -1652px;width:48px;height:51px}.quest_TEMPLATE_FOR_MISSING_IMAGE{background-image:url(spritesmith-main-5.png);background-position:-1240px -1287px;width:221px;height:39px}.quest_atom1{background-image:url(spritesmith-main-5.png);background-position:-902px -1106px;width:250px;height:150px}.quest_atom2{background-image:url(spritesmith-main-5.png);background-position:-1320px -688px;width:207px;height:138px}.quest_atom3{background-image:url(spritesmith-main-5.png);background-position:0 -1106px;width:216px;height:180px}.quest_basilist{background-image:url(spritesmith-main-5.png);background-position:0 -1287px;width:189px;height:141px}.quest_bunny{background-image:url(spritesmith-main-5.png);background-position:-1100px -624px;width:210px;height:186px}.quest_cheetah{background-image:url(spritesmith-main-5.png);background-position:0 -672px;width:219px;height:219px}.quest_dilatory{background-image:url(spritesmith-main-5.png);background-position:-880px -440px;width:219px;height:219px}.quest_dilatoryDistress1{background-image:url(spritesmith-main-5.png);background-position:-1320px -1244px;width:221px;height:39px}.quest_dilatoryDistress1_blueFins{background-image:url(spritesmith-main-5.png);background-position:0 -1704px;width:51px;height:48px}.quest_dilatoryDistress1_fireCoral{background-image:url(spritesmith-main-5.png);background-position:-1711px -416px;width:48px;height:51px}.quest_dilatoryDistress2{background-image:url(spritesmith-main-5.png);background-position:-1153px -1106px;width:150px;height:150px}.quest_dilatoryDistress3{background-image:url(spritesmith-main-5.png);background-position:-220px 0;width:219px;height:219px}.quest_dilatory_derby{background-image:url(spritesmith-main-5.png);background-position:-440px -452px;width:219px;height:219px}.quest_egg{background-image:url(spritesmith-main-5.png);background-position:-1240px -1327px;width:221px;height:39px}.quest_egg_plainEgg{background-image:url(spritesmith-main-5.png);background-position:-1711px -676px;width:48px;height:51px}.quest_evilsanta{background-image:url(spritesmith-main-5.png);background-position:0 -1429px;width:118px;height:131px}.quest_evilsanta2{background-image:url(spritesmith-main-5.png);background-position:-660px -220px;width:219px;height:219px}.quest_frog{background-image:url(spritesmith-main-5.png);background-position:0 -892px;width:221px;height:213px}.quest_ghost_stag{background-image:url(spritesmith-main-5.png);background-position:-440px -232px;width:219px;height:219px}.quest_goldenknight1{background-image:url(spritesmith-main-5.png);background-position:-341px -1429px;width:221px;height:39px}.quest_goldenknight1_testimony{background-image:url(spritesmith-main-5.png);background-position:-1711px -988px;width:48px;height:51px}.quest_goldenknight2{background-image:url(spritesmith-main-5.png);background-position:-651px -1106px;width:250px;height:150px}.quest_goldenknight3{background-image:url(spritesmith-main-5.png);background-position:0 0;width:219px;height:231px}.quest_gryphon{background-image:url(spritesmith-main-5.png);background-position:-879px -892px;width:216px;height:177px}.quest_harpy{background-image:url(spritesmith-main-5.png);background-position:-220px -452px;width:219px;height:219px}.quest_hedgehog{background-image:url(spritesmith-main-5.png);background-position:-1100px -437px;width:219px;height:186px}.quest_horse{background-image:url(spritesmith-main-5.png);background-position:-440px 0;width:219px;height:219px}.quest_kraken{background-image:url(spritesmith-main-5.png);background-position:-662px -892px;width:216px;height:177px}.quest_moonstone1{background-image:url(spritesmith-main-5.png);background-position:-119px -1429px;width:221px;height:39px}.quest_moonstone1_moonstone{background-image:url(spritesmith-main-5.png);background-position:-1760px -295px;width:30px;height:30px}.quest_moonstone2{background-image:url(spritesmith-main-5.png);background-position:0 -232px;width:219px;height:219px}.quest_moonstone3{background-image:url(spritesmith-main-5.png);background-position:-660px -452px;width:219px;height:219px}.quest_octopus{background-image:url(spritesmith-main-5.png);background-position:-222px -892px;width:222px;height:177px}.quest_owl{background-image:url(spritesmith-main-5.png);background-position:-220px -232px;width:219px;height:219px}.quest_penguin{background-image:url(spritesmith-main-5.png);background-position:-1320px -504px;width:190px;height:183px}.quest_rat{background-image:url(spritesmith-main-5.png);background-position:0 -452px;width:219px;height:219px}.quest_rock{background-image:url(spritesmith-main-5.png);background-position:-1100px -220px;width:216px;height:216px}.quest_rooster{background-image:url(spritesmith-main-5.png);background-position:-1320px -151px;width:213px;height:174px}.quest_sheep{background-image:url(spritesmith-main-5.png);background-position:-880px 0;width:219px;height:219px}.quest_slime{background-image:url(spritesmith-main-5.png);background-position:-880px -220px;width:219px;height:219px}.quest_snake{background-image:url(spritesmith-main-5.png);background-position:-445px -892px;width:216px;height:177px}.quest_spider{background-image:url(spritesmith-main-5.png);background-position:-1320px 0;width:250px;height:150px}.quest_stressbeast{background-image:url(spritesmith-main-5.png);background-position:-220px -672px;width:219px;height:219px}.quest_stressbeast_bailey{background-image:url(spritesmith-main-5.png);background-position:-440px -672px;width:219px;height:219px}.quest_stressbeast_guide{background-image:url(spritesmith-main-5.png);background-position:-660px -672px;width:219px;height:219px}.quest_stressbeast_stables{background-image:url(spritesmith-main-5.png);background-position:-880px -672px;width:219px;height:219px}.quest_trex{background-image:url(spritesmith-main-5.png);background-position:-1320px -326px;width:204px;height:177px}.quest_trex_undead{background-image:url(spritesmith-main-5.png);background-position:-217px -1106px;width:216px;height:177px}.quest_vice1{background-image:url(spritesmith-main-5.png);background-position:-434px -1106px;width:216px;height:177px}.quest_vice2{background-image:url(spritesmith-main-5.png);background-position:-1100px 0;width:219px;height:219px}.quest_vice2_lightCrystal{background-image:url(spritesmith-main-5.png);background-position:-298px -1704px;width:40px;height:40px}.quest_vice3{background-image:url(spritesmith-main-5.png);background-position:-1096px -892px;width:216px;height:177px}.quest_whale{background-image:url(spritesmith-main-5.png);background-position:-660px 0;width:219px;height:219px}.shop_copper{background-image:url(spritesmith-main-5.png);background-position:-1760px -376px;width:32px;height:22px}.shop_eyes{background-image:url(spritesmith-main-5.png);background-position:-462px -1704px;width:40px;height:40px}.shop_gold{background-image:url(spritesmith-main-5.png);background-position:-1760px -399px;width:32px;height:22px}.shop_opaquePotion{background-image:url(spritesmith-main-5.png);background-position:-544px -1704px;width:40px;height:40px}.shop_potion{background-image:url(spritesmith-main-5.png);background-position:-585px -1704px;width:40px;height:40px}.shop_reroll{background-image:url(spritesmith-main-5.png);background-position:-626px -1704px;width:40px;height:40px}.shop_seafoam{background-image:url(spritesmith-main-5.png);background-position:-1760px -262px;width:32px;height:32px}.shop_shinySeed{background-image:url(spritesmith-main-5.png);background-position:-1760px -229px;width:32px;height:32px}.shop_silver{background-image:url(spritesmith-main-5.png);background-position:-1760px -353px;width:32px;height:22px}.shop_snowball{background-image:url(spritesmith-main-5.png);background-position:-1760px -196px;width:32px;height:32px}.shop_spookDust{background-image:url(spritesmith-main-5.png);background-position:-1760px -163px;width:32px;height:32px}.Pet_Egg_BearCub{background-image:url(spritesmith-main-5.png);background-position:-1546px -1561px;width:48px;height:51px}.Pet_Egg_Bunny{background-image:url(spritesmith-main-5.png);background-position:-1595px -1561px;width:48px;height:51px}.Pet_Egg_Cactus{background-image:url(spritesmith-main-5.png);background-position:-1662px 0;width:48px;height:51px}.Pet_Egg_Cheetah{background-image:url(spritesmith-main-5.png);background-position:-1662px -52px;width:48px;height:51px}.Pet_Egg_Cuttlefish{background-image:url(spritesmith-main-5.png);background-position:-1662px -104px;width:48px;height:51px}.Pet_Egg_Deer{background-image:url(spritesmith-main-5.png);background-position:-1662px -156px;width:48px;height:51px}.Pet_Egg_Dragon{background-image:url(spritesmith-main-5.png);background-position:-1662px -208px;width:48px;height:51px}.Pet_Egg_Egg{background-image:url(spritesmith-main-5.png);background-position:-1662px -260px;width:48px;height:51px}.Pet_Egg_FlyingPig{background-image:url(spritesmith-main-5.png);background-position:-1662px -312px;width:48px;height:51px}.Pet_Egg_Fox{background-image:url(spritesmith-main-5.png);background-position:-1662px -364px;width:48px;height:51px}.Pet_Egg_Frog{background-image:url(spritesmith-main-5.png);background-position:-1662px -780px;width:48px;height:51px}.Pet_Egg_Gryphon{background-image:url(spritesmith-main-5.png);background-position:-1617px -1652px;width:48px;height:51px}.Pet_Egg_Hedgehog{background-image:url(spritesmith-main-5.png);background-position:-1711px 0;width:48px;height:51px}.Pet_Egg_Horse{background-image:url(spritesmith-main-5.png);background-position:-1711px -52px;width:48px;height:51px}.Pet_Egg_LionCub{background-image:url(spritesmith-main-5.png);background-position:-1711px -104px;width:48px;height:51px}.Pet_Egg_Octopus{background-image:url(spritesmith-main-5.png);background-position:-1711px -156px;width:48px;height:51px}.Pet_Egg_Owl{background-image:url(spritesmith-main-5.png);background-position:-1711px -208px;width:48px;height:51px}.Pet_Egg_PandaCub{background-image:url(spritesmith-main-5.png);background-position:-1711px -260px;width:48px;height:51px}.Pet_Egg_Parrot{background-image:url(spritesmith-main-5.png);background-position:-1711px -312px;width:48px;height:51px}.Pet_Egg_Penguin{background-image:url(spritesmith-main-5.png);background-position:-1711px -364px;width:48px;height:51px}.Pet_Egg_PolarBear{background-image:url(spritesmith-main-5.png);background-position:-1711px -468px;width:48px;height:51px}.Pet_Egg_Rat{background-image:url(spritesmith-main-5.png);background-position:-1711px -520px;width:48px;height:51px}.Pet_Egg_Rock{background-image:url(spritesmith-main-5.png);background-position:-1711px -572px;width:48px;height:51px}.Pet_Egg_Rooster{background-image:url(spritesmith-main-5.png);background-position:-1711px -624px;width:48px;height:51px}.Pet_Egg_Seahorse{background-image:url(spritesmith-main-5.png);background-position:-1711px -728px;width:48px;height:51px}.Pet_Egg_Sheep{background-image:url(spritesmith-main-5.png);background-position:-1711px -780px;width:48px;height:51px}.Pet_Egg_Slime{background-image:url(spritesmith-main-5.png);background-position:-1711px -832px;width:48px;height:51px}.Pet_Egg_Snake{background-image:url(spritesmith-main-5.png);background-position:-1711px -884px;width:48px;height:51px}.Pet_Egg_Spider{background-image:url(spritesmith-main-5.png);background-position:-1711px -936px;width:48px;height:51px}.Pet_Egg_TRex{background-image:url(spritesmith-main-5.png);background-position:-1711px -1040px;width:48px;height:51px}.Pet_Egg_TigerCub{background-image:url(spritesmith-main-5.png);background-position:-1711px -1092px;width:48px;height:51px}.Pet_Egg_Whale{background-image:url(spritesmith-main-5.png);background-position:-1711px -1144px;width:48px;height:51px}.Pet_Egg_Wolf{background-image:url(spritesmith-main-5.png);background-position:-147px -1652px;width:48px;height:51px}.Pet_Food_Cake_Base{background-image:url(spritesmith-main-5.png);background-position:-1711px -1248px;width:43px;height:43px}.Pet_Food_Cake_CottonCandyBlue{background-image:url(spritesmith-main-5.png);background-position:-1711px -1292px;width:42px;height:44px}.Pet_Food_Cake_CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-680px -1635px;width:43px;height:45px}.Pet_Food_Cake_Desert{background-image:url(spritesmith-main-6.png);background-position:-1484px -1378px;width:43px;height:44px}.Pet_Food_Cake_Golden{background-image:url(spritesmith-main-6.png);background-position:-1422px -1272px;width:43px;height:42px}.Pet_Food_Cake_Red{background-image:url(spritesmith-main-6.png);background-position:-1378px -1272px;width:43px;height:44px}.Pet_Food_Cake_Shade{background-image:url(spritesmith-main-6.png);background-position:-1528px -1378px;width:43px;height:44px}.Pet_Food_Cake_Skeleton{background-image:url(spritesmith-main-6.png);background-position:-637px -1635px;width:42px;height:47px}.Pet_Food_Cake_White{background-image:url(spritesmith-main-6.png);background-position:-1636px -1484px;width:44px;height:44px}.Pet_Food_Cake_Zombie{background-image:url(spritesmith-main-6.png);background-position:-1590px -1484px;width:45px;height:44px}.Pet_Food_Candy_Base{background-image:url(spritesmith-main-6.png);background-position:-294px -1635px;width:48px;height:51px}.Pet_Food_Candy_CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-588px -1635px;width:48px;height:51px}.Pet_Food_Candy_CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-539px -1635px;width:48px;height:51px}.Pet_Food_Candy_Desert{background-image:url(spritesmith-main-6.png);background-position:-490px -1635px;width:48px;height:51px}.Pet_Food_Candy_Golden{background-image:url(spritesmith-main-6.png);background-position:-441px -1635px;width:48px;height:51px}.Pet_Food_Candy_Red{background-image:url(spritesmith-main-6.png);background-position:-392px -1635px;width:48px;height:51px}.Pet_Food_Candy_Shade{background-image:url(spritesmith-main-6.png);background-position:-343px -1635px;width:48px;height:51px}.Pet_Food_Candy_Skeleton{background-image:url(spritesmith-main-6.png);background-position:-1484px -1529px;width:48px;height:51px}.Pet_Food_Candy_White{background-image:url(spritesmith-main-6.png);background-position:-245px -1635px;width:48px;height:51px}.Pet_Food_Candy_Zombie{background-image:url(spritesmith-main-6.png);background-position:-196px -1635px;width:48px;height:51px}.Pet_Food_Chocolate{background-image:url(spritesmith-main-6.png);background-position:-147px -1635px;width:48px;height:51px}.Pet_Food_CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-98px -1635px;width:48px;height:51px}.Pet_Food_CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-49px -1635px;width:48px;height:51px}.Pet_Food_Fish{background-image:url(spritesmith-main-6.png);background-position:0 -1635px;width:48px;height:51px}.Pet_Food_Honey{background-image:url(spritesmith-main-6.png);background-position:-1631px -1581px;width:48px;height:51px}.Pet_Food_Meat{background-image:url(spritesmith-main-6.png);background-position:-1582px -1581px;width:48px;height:51px}.Pet_Food_Milk{background-image:url(spritesmith-main-6.png);background-position:-1533px -1581px;width:48px;height:51px}.Pet_Food_Potatoe{background-image:url(spritesmith-main-6.png);background-position:-1484px -1581px;width:48px;height:51px}.Pet_Food_RottenMeat{background-image:url(spritesmith-main-6.png);background-position:-1631px -1529px;width:48px;height:51px}.Pet_Food_Saddle{background-image:url(spritesmith-main-6.png);background-position:-1582px -1529px;width:48px;height:51px}.Pet_Food_Strawberry{background-image:url(spritesmith-main-6.png);background-position:-1533px -1529px;width:48px;height:51px}.Mount_Body_BearCub-Base{background-image:url(spritesmith-main-6.png);background-position:-636px 0;width:105px;height:105px}.Mount_Body_BearCub-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-636px -106px;width:105px;height:105px}.Mount_Body_BearCub-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-636px -212px;width:105px;height:105px}.Mount_Body_BearCub-Desert{background-image:url(spritesmith-main-6.png);background-position:-636px -318px;width:105px;height:105px}.Mount_Body_BearCub-Golden{background-image:url(spritesmith-main-6.png);background-position:-636px -424px;width:105px;height:105px}.Mount_Body_BearCub-Peppermint{background-image:url(spritesmith-main-6.png);background-position:0 -575px;width:105px;height:105px}.Mount_Body_BearCub-Polar{background-image:url(spritesmith-main-6.png);background-position:-106px -575px;width:105px;height:105px}.Mount_Body_BearCub-Red{background-image:url(spritesmith-main-6.png);background-position:-212px -575px;width:105px;height:105px}.Mount_Body_BearCub-Shade{background-image:url(spritesmith-main-6.png);background-position:-318px -575px;width:105px;height:105px}.Mount_Body_BearCub-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-424px -575px;width:105px;height:105px}.Mount_Body_BearCub-Spooky{background-image:url(spritesmith-main-6.png);background-position:-530px -575px;width:105px;height:105px}.Mount_Body_BearCub-White{background-image:url(spritesmith-main-6.png);background-position:-636px -575px;width:105px;height:105px}.Mount_Body_BearCub-Zombie{background-image:url(spritesmith-main-6.png);background-position:-742px 0;width:105px;height:105px}.Mount_Body_Bunny-Base{background-image:url(spritesmith-main-6.png);background-position:-742px -106px;width:105px;height:105px}.Mount_Body_Bunny-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-742px -212px;width:105px;height:105px}.Mount_Body_Bunny-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-742px -318px;width:105px;height:105px}.Mount_Body_Bunny-Desert{background-image:url(spritesmith-main-6.png);background-position:-742px -424px;width:105px;height:105px}.Mount_Body_Bunny-Golden{background-image:url(spritesmith-main-6.png);background-position:-742px -530px;width:105px;height:105px}.Mount_Body_Bunny-Red{background-image:url(spritesmith-main-6.png);background-position:0 -681px;width:105px;height:105px}.Mount_Body_Bunny-Shade{background-image:url(spritesmith-main-6.png);background-position:-106px -681px;width:105px;height:105px}.Mount_Body_Bunny-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-212px -681px;width:105px;height:105px}.Mount_Body_Bunny-White{background-image:url(spritesmith-main-6.png);background-position:-318px -681px;width:105px;height:105px}.Mount_Body_Bunny-Zombie{background-image:url(spritesmith-main-6.png);background-position:-424px -681px;width:105px;height:105px}.Mount_Body_Cactus-Base{background-image:url(spritesmith-main-6.png);background-position:-530px -681px;width:105px;height:105px}.Mount_Body_Cactus-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-636px -681px;width:105px;height:105px}.Mount_Body_Cactus-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-742px -681px;width:105px;height:105px}.Mount_Body_Cactus-Desert{background-image:url(spritesmith-main-6.png);background-position:-848px 0;width:105px;height:105px}.Mount_Body_Cactus-Golden{background-image:url(spritesmith-main-6.png);background-position:-848px -106px;width:105px;height:105px}.Mount_Body_Cactus-Peppermint{background-image:url(spritesmith-main-6.png);background-position:-848px -212px;width:105px;height:105px}.Mount_Body_Cactus-Red{background-image:url(spritesmith-main-6.png);background-position:-848px -318px;width:105px;height:105px}.Mount_Body_Cactus-Shade{background-image:url(spritesmith-main-6.png);background-position:-848px -424px;width:105px;height:105px}.Mount_Body_Cactus-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-848px -530px;width:105px;height:105px}.Mount_Body_Cactus-Spooky{background-image:url(spritesmith-main-6.png);background-position:-848px -636px;width:105px;height:105px}.Mount_Body_Cactus-White{background-image:url(spritesmith-main-6.png);background-position:0 -787px;width:105px;height:105px}.Mount_Body_Cactus-Zombie{background-image:url(spritesmith-main-6.png);background-position:-106px -787px;width:105px;height:105px}.Mount_Body_Cheetah-Base{background-image:url(spritesmith-main-6.png);background-position:-212px -787px;width:105px;height:105px}.Mount_Body_Cheetah-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-318px -787px;width:105px;height:105px}.Mount_Body_Cheetah-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-424px -787px;width:105px;height:105px}.Mount_Body_Cheetah-Desert{background-image:url(spritesmith-main-6.png);background-position:-530px -787px;width:105px;height:105px}.Mount_Body_Cheetah-Golden{background-image:url(spritesmith-main-6.png);background-position:-636px -787px;width:105px;height:105px}.Mount_Body_Cheetah-Red{background-image:url(spritesmith-main-6.png);background-position:-742px -787px;width:105px;height:105px}.Mount_Body_Cheetah-Shade{background-image:url(spritesmith-main-6.png);background-position:-848px -787px;width:105px;height:105px}.Mount_Body_Cheetah-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-954px 0;width:105px;height:105px}.Mount_Body_Cheetah-White{background-image:url(spritesmith-main-6.png);background-position:-954px -106px;width:105px;height:105px}.Mount_Body_Cheetah-Zombie{background-image:url(spritesmith-main-6.png);background-position:-954px -212px;width:105px;height:105px}.Mount_Body_Cuttlefish-Base{background-image:url(spritesmith-main-6.png);background-position:-530px 0;width:105px;height:114px}.Mount_Body_Cuttlefish-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-318px -239px;width:105px;height:114px}.Mount_Body_Cuttlefish-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-212px 0;width:105px;height:114px}.Mount_Body_Cuttlefish-Desert{background-image:url(spritesmith-main-6.png);background-position:0 -124px;width:105px;height:114px}.Mount_Body_Cuttlefish-Golden{background-image:url(spritesmith-main-6.png);background-position:-106px -124px;width:105px;height:114px}.Mount_Body_Cuttlefish-Red{background-image:url(spritesmith-main-6.png);background-position:-212px -124px;width:105px;height:114px}.Mount_Body_Cuttlefish-Shade{background-image:url(spritesmith-main-6.png);background-position:-318px 0;width:105px;height:114px}.Mount_Body_Cuttlefish-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-318px -115px;width:105px;height:114px}.Mount_Body_Cuttlefish-White{background-image:url(spritesmith-main-6.png);background-position:0 -239px;width:105px;height:114px}.Mount_Body_Cuttlefish-Zombie{background-image:url(spritesmith-main-6.png);background-position:-106px -239px;width:105px;height:114px}.Mount_Body_Deer-Base{background-image:url(spritesmith-main-6.png);background-position:-530px -893px;width:105px;height:105px}.Mount_Body_Deer-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-636px -893px;width:105px;height:105px}.Mount_Body_Deer-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-742px -893px;width:105px;height:105px}.Mount_Body_Deer-Desert{background-image:url(spritesmith-main-6.png);background-position:-848px -893px;width:105px;height:105px}.Mount_Body_Deer-Golden{background-image:url(spritesmith-main-6.png);background-position:-954px -893px;width:105px;height:105px}.Mount_Body_Deer-Red{background-image:url(spritesmith-main-6.png);background-position:-1060px 0;width:105px;height:105px}.Mount_Body_Deer-Shade{background-image:url(spritesmith-main-6.png);background-position:-1060px -106px;width:105px;height:105px}.Mount_Body_Deer-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-1060px -212px;width:105px;height:105px}.Mount_Body_Deer-White{background-image:url(spritesmith-main-6.png);background-position:-1060px -318px;width:105px;height:105px}.Mount_Body_Deer-Zombie{background-image:url(spritesmith-main-6.png);background-position:-1060px -424px;width:105px;height:105px}.Mount_Body_Dragon-Base{background-image:url(spritesmith-main-6.png);background-position:-1060px -530px;width:105px;height:105px}.Mount_Body_Dragon-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-1060px -636px;width:105px;height:105px}.Mount_Body_Dragon-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-1060px -742px;width:105px;height:105px}.Mount_Body_Dragon-Desert{background-image:url(spritesmith-main-6.png);background-position:-1060px -848px;width:105px;height:105px}.Mount_Body_Dragon-Golden{background-image:url(spritesmith-main-6.png);background-position:0 -999px;width:105px;height:105px}.Mount_Body_Dragon-Peppermint{background-image:url(spritesmith-main-6.png);background-position:-106px -999px;width:105px;height:105px}.Mount_Body_Dragon-Red{background-image:url(spritesmith-main-6.png);background-position:-212px -999px;width:105px;height:105px}.Mount_Body_Dragon-Shade{background-image:url(spritesmith-main-6.png);background-position:-318px -999px;width:105px;height:105px}.Mount_Body_Dragon-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-424px -999px;width:105px;height:105px}.Mount_Body_Dragon-Spooky{background-image:url(spritesmith-main-6.png);background-position:-530px -999px;width:105px;height:105px}.Mount_Body_Dragon-White{background-image:url(spritesmith-main-6.png);background-position:-636px -999px;width:105px;height:105px}.Mount_Body_Dragon-Zombie{background-image:url(spritesmith-main-6.png);background-position:-742px -999px;width:105px;height:105px}.Mount_Body_Egg-Base{background-image:url(spritesmith-main-6.png);background-position:-848px -999px;width:105px;height:105px}.Mount_Body_Egg-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-954px -999px;width:105px;height:105px}.Mount_Body_Egg-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-1060px -999px;width:105px;height:105px}.Mount_Body_Egg-Desert{background-image:url(spritesmith-main-6.png);background-position:-1166px 0;width:105px;height:105px}.Mount_Body_Egg-Golden{background-image:url(spritesmith-main-6.png);background-position:-1166px -106px;width:105px;height:105px}.Mount_Body_Egg-Red{background-image:url(spritesmith-main-6.png);background-position:-1166px -212px;width:105px;height:105px}.Mount_Body_Egg-Shade{background-image:url(spritesmith-main-6.png);background-position:-1166px -318px;width:105px;height:105px}.Mount_Body_Egg-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-1166px -424px;width:105px;height:105px}.Mount_Body_Egg-White{background-image:url(spritesmith-main-6.png);background-position:-1166px -530px;width:105px;height:105px}.Mount_Body_Egg-Zombie{background-image:url(spritesmith-main-6.png);background-position:-1166px -636px;width:105px;height:105px}.Mount_Body_FlyingPig-Base{background-image:url(spritesmith-main-6.png);background-position:-1166px -742px;width:105px;height:105px}.Mount_Body_FlyingPig-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-1166px -848px;width:105px;height:105px}.Mount_Body_FlyingPig-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-1166px -954px;width:105px;height:105px}.Mount_Body_FlyingPig-Desert{background-image:url(spritesmith-main-6.png);background-position:0 -1105px;width:105px;height:105px}.Mount_Body_FlyingPig-Golden{background-image:url(spritesmith-main-6.png);background-position:-106px -1105px;width:105px;height:105px}.Mount_Body_FlyingPig-Peppermint{background-image:url(spritesmith-main-6.png);background-position:-212px -1105px;width:105px;height:105px}.Mount_Body_FlyingPig-Red{background-image:url(spritesmith-main-6.png);background-position:-318px -1105px;width:105px;height:105px}.Mount_Body_FlyingPig-Shade{background-image:url(spritesmith-main-6.png);background-position:-424px -1105px;width:105px;height:105px}.Mount_Body_FlyingPig-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-530px -1105px;width:105px;height:105px}.Mount_Body_FlyingPig-Spooky{background-image:url(spritesmith-main-6.png);background-position:-636px -1105px;width:105px;height:105px}.Mount_Body_FlyingPig-White{background-image:url(spritesmith-main-6.png);background-position:-742px -1105px;width:105px;height:105px}.Mount_Body_FlyingPig-Zombie{background-image:url(spritesmith-main-6.png);background-position:-848px -1105px;width:105px;height:105px}.Mount_Body_Fox-Base{background-image:url(spritesmith-main-6.png);background-position:-954px -1105px;width:105px;height:105px}.Mount_Body_Fox-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-1060px -1105px;width:105px;height:105px}.Mount_Body_Fox-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-1166px -1105px;width:105px;height:105px}.Mount_Body_Fox-Desert{background-image:url(spritesmith-main-6.png);background-position:-1272px 0;width:105px;height:105px}.Mount_Body_Fox-Golden{background-image:url(spritesmith-main-6.png);background-position:-1272px -106px;width:105px;height:105px}.Mount_Body_Fox-Peppermint{background-image:url(spritesmith-main-6.png);background-position:-530px -115px;width:105px;height:105px}.Mount_Body_Fox-Red{background-image:url(spritesmith-main-6.png);background-position:-1272px -318px;width:105px;height:105px}.Mount_Body_Fox-Shade{background-image:url(spritesmith-main-6.png);background-position:-1272px -424px;width:105px;height:105px}.Mount_Body_Fox-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-1272px -530px;width:105px;height:105px}.Mount_Body_Fox-Spooky{background-image:url(spritesmith-main-6.png);background-position:-1272px -636px;width:105px;height:105px}.Mount_Body_Fox-White{background-image:url(spritesmith-main-6.png);background-position:-1272px -742px;width:105px;height:105px}.Mount_Body_Fox-Zombie{background-image:url(spritesmith-main-6.png);background-position:-1272px -848px;width:105px;height:105px}.Mount_Body_Frog-Base{background-image:url(spritesmith-main-6.png);background-position:-212px -239px;width:105px;height:114px}.Mount_Body_Frog-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-106px 0;width:105px;height:114px}.Mount_Body_Frog-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-424px 0;width:105px;height:114px}.Mount_Body_Frog-Desert{background-image:url(spritesmith-main-6.png);background-position:-424px -115px;width:105px;height:114px}.Mount_Body_Frog-Golden{background-image:url(spritesmith-main-6.png);background-position:-424px -230px;width:105px;height:114px}.Mount_Body_Frog-Red{background-image:url(spritesmith-main-6.png);background-position:0 -354px;width:105px;height:114px}.Mount_Body_Frog-Shade{background-image:url(spritesmith-main-6.png);background-position:-106px -354px;width:105px;height:114px}.Mount_Body_Frog-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-212px -354px;width:105px;height:114px}.Mount_Body_Frog-White{background-image:url(spritesmith-main-6.png);background-position:-318px -354px;width:105px;height:114px}.Mount_Body_Frog-Zombie{background-image:url(spritesmith-main-6.png);background-position:-424px -354px;width:105px;height:114px}.Mount_Body_Gryphon-Base{background-image:url(spritesmith-main-6.png);background-position:-848px -1211px;width:105px;height:105px}.Mount_Body_Gryphon-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-954px -1211px;width:105px;height:105px}.Mount_Body_Gryphon-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-1060px -1211px;width:105px;height:105px}.Mount_Body_Gryphon-Desert{background-image:url(spritesmith-main-6.png);background-position:-1166px -1211px;width:105px;height:105px}.Mount_Body_Gryphon-Golden{background-image:url(spritesmith-main-6.png);background-position:-1272px -1211px;width:105px;height:105px}.Mount_Body_Gryphon-Red{background-image:url(spritesmith-main-6.png);background-position:-1378px 0;width:105px;height:105px}.Mount_Body_Gryphon-RoyalPurple{background-image:url(spritesmith-main-6.png);background-position:-1378px -106px;width:105px;height:105px}.Mount_Body_Gryphon-Shade{background-image:url(spritesmith-main-6.png);background-position:-1378px -212px;width:105px;height:105px}.Mount_Body_Gryphon-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-1378px -318px;width:105px;height:105px}.Mount_Body_Gryphon-White{background-image:url(spritesmith-main-6.png);background-position:-1378px -424px;width:105px;height:105px}.Mount_Body_Gryphon-Zombie{background-image:url(spritesmith-main-6.png);background-position:-1378px -530px;width:105px;height:105px}.Mount_Body_Hedgehog-Base{background-image:url(spritesmith-main-6.png);background-position:-1378px -636px;width:105px;height:105px}.Mount_Body_Hedgehog-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-1378px -742px;width:105px;height:105px}.Mount_Body_Hedgehog-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-1378px -848px;width:105px;height:105px}.Mount_Body_Hedgehog-Desert{background-image:url(spritesmith-main-6.png);background-position:-1378px -954px;width:105px;height:105px}.Mount_Body_Hedgehog-Golden{background-image:url(spritesmith-main-6.png);background-position:-1378px -1060px;width:105px;height:105px}.Mount_Body_Hedgehog-Red{background-image:url(spritesmith-main-6.png);background-position:-1378px -1166px;width:105px;height:105px}.Mount_Body_Hedgehog-Shade{background-image:url(spritesmith-main-6.png);background-position:0 -1317px;width:105px;height:105px}.Mount_Body_Hedgehog-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-106px -1317px;width:105px;height:105px}.Mount_Body_Hedgehog-White{background-image:url(spritesmith-main-6.png);background-position:-212px -1317px;width:105px;height:105px}.Mount_Body_Hedgehog-Zombie{background-image:url(spritesmith-main-6.png);background-position:-318px -1317px;width:105px;height:105px}.Mount_Body_Horse-Base{background-image:url(spritesmith-main-6.png);background-position:-424px -1317px;width:105px;height:105px}.Mount_Body_Horse-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-530px -1317px;width:105px;height:105px}.Mount_Body_Horse-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-636px -1317px;width:105px;height:105px}.Mount_Body_Horse-Desert{background-image:url(spritesmith-main-6.png);background-position:-742px -1317px;width:105px;height:105px}.Mount_Body_Horse-Golden{background-image:url(spritesmith-main-6.png);background-position:-848px -1317px;width:105px;height:105px}.Mount_Body_Horse-Red{background-image:url(spritesmith-main-6.png);background-position:-954px -1317px;width:105px;height:105px}.Mount_Body_Horse-Shade{background-image:url(spritesmith-main-6.png);background-position:-1060px -1317px;width:105px;height:105px}.Mount_Body_Horse-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-1166px -1317px;width:105px;height:105px}.Mount_Body_Horse-White{background-image:url(spritesmith-main-6.png);background-position:-1272px -1317px;width:105px;height:105px}.Mount_Body_Horse-Zombie{background-image:url(spritesmith-main-6.png);background-position:-1378px -1317px;width:105px;height:105px}.Mount_Body_JackOLantern-Base{background-image:url(spritesmith-main-6.png);background-position:-539px -469px;width:90px;height:105px}.Mount_Body_LionCub-Base{background-image:url(spritesmith-main-6.png);background-position:-1484px -106px;width:105px;height:105px}.Mount_Body_LionCub-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-1484px -212px;width:105px;height:105px}.Mount_Body_LionCub-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-1484px -318px;width:105px;height:105px}.Mount_Body_LionCub-Desert{background-image:url(spritesmith-main-6.png);background-position:-1484px -424px;width:105px;height:105px}.Mount_Body_LionCub-Ethereal{background-image:url(spritesmith-main-6.png);background-position:-1484px -530px;width:105px;height:105px}.Mount_Body_LionCub-Golden{background-image:url(spritesmith-main-6.png);background-position:-1484px -636px;width:105px;height:105px}.Mount_Body_LionCub-Peppermint{background-image:url(spritesmith-main-6.png);background-position:-1484px -742px;width:105px;height:105px}.Mount_Body_LionCub-Red{background-image:url(spritesmith-main-6.png);background-position:-1484px -848px;width:105px;height:105px}.Mount_Body_LionCub-Shade{background-image:url(spritesmith-main-6.png);background-position:-1484px -954px;width:105px;height:105px}.Mount_Body_LionCub-Skeleton{background-image:url(spritesmith-main-6.png);background-position:0 -469px;width:111px;height:105px}.Mount_Body_LionCub-Spooky{background-image:url(spritesmith-main-6.png);background-position:-1484px -1166px;width:105px;height:105px}.Mount_Body_LionCub-White{background-image:url(spritesmith-main-6.png);background-position:-1484px -1272px;width:105px;height:105px}.Mount_Body_LionCub-Zombie{background-image:url(spritesmith-main-6.png);background-position:0 -1423px;width:105px;height:105px}.Mount_Body_Mammoth-Base{background-image:url(spritesmith-main-6.png);background-position:0 0;width:105px;height:123px}.Mount_Body_MantisShrimp-Base{background-image:url(spritesmith-main-6.png);background-position:-112px -469px;width:108px;height:105px}.Mount_Body_Octopus-Base{background-image:url(spritesmith-main-6.png);background-position:-318px -1423px;width:105px;height:105px}.Mount_Body_Octopus-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-424px -1423px;width:105px;height:105px}.Mount_Body_Octopus-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-530px -1423px;width:105px;height:105px}.Mount_Body_Octopus-Desert{background-image:url(spritesmith-main-6.png);background-position:-636px -1423px;width:105px;height:105px}.Mount_Body_Octopus-Golden{background-image:url(spritesmith-main-6.png);background-position:-742px -1423px;width:105px;height:105px}.Mount_Body_Octopus-Red{background-image:url(spritesmith-main-6.png);background-position:-848px -1423px;width:105px;height:105px}.Mount_Body_Octopus-Shade{background-image:url(spritesmith-main-6.png);background-position:-954px -1423px;width:105px;height:105px}.Mount_Body_Octopus-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-1060px -1423px;width:105px;height:105px}.Mount_Body_Octopus-White{background-image:url(spritesmith-main-6.png);background-position:-1166px -1423px;width:105px;height:105px}.Mount_Body_Octopus-Zombie{background-image:url(spritesmith-main-6.png);background-position:-1272px -1423px;width:105px;height:105px}.Mount_Body_Orca-Base{background-image:url(spritesmith-main-6.png);background-position:-1378px -1423px;width:105px;height:105px}.Mount_Body_Owl-Base{background-image:url(spritesmith-main-6.png);background-position:-1484px -1423px;width:105px;height:105px}.Mount_Body_Owl-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-1590px 0;width:105px;height:105px}.Mount_Body_Owl-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-1590px -106px;width:105px;height:105px}.Mount_Body_Owl-Desert{background-image:url(spritesmith-main-6.png);background-position:-1590px -212px;width:105px;height:105px}.Mount_Body_Owl-Golden{background-image:url(spritesmith-main-6.png);background-position:-1590px -318px;width:105px;height:105px}.Mount_Body_Owl-Red{background-image:url(spritesmith-main-6.png);background-position:-1590px -424px;width:105px;height:105px}.Mount_Body_Owl-Shade{background-image:url(spritesmith-main-6.png);background-position:-1590px -530px;width:105px;height:105px}.Mount_Body_Owl-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-1590px -636px;width:105px;height:105px}.Mount_Body_Owl-White{background-image:url(spritesmith-main-6.png);background-position:-1590px -742px;width:105px;height:105px}.Mount_Body_Owl-Zombie{background-image:url(spritesmith-main-6.png);background-position:-1590px -848px;width:105px;height:105px}.Mount_Body_PandaCub-Base{background-image:url(spritesmith-main-6.png);background-position:-1590px -954px;width:105px;height:105px}.Mount_Body_PandaCub-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-1590px -1060px;width:105px;height:105px}.Mount_Body_PandaCub-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-1590px -1166px;width:105px;height:105px}.Mount_Body_PandaCub-Desert{background-image:url(spritesmith-main-6.png);background-position:-1590px -1272px;width:105px;height:105px}.Mount_Body_PandaCub-Golden{background-image:url(spritesmith-main-6.png);background-position:-1590px -1378px;width:105px;height:105px}.Mount_Body_PandaCub-Peppermint{background-image:url(spritesmith-main-6.png);background-position:0 -1529px;width:105px;height:105px}.Mount_Body_PandaCub-Red{background-image:url(spritesmith-main-6.png);background-position:-106px -1529px;width:105px;height:105px}.Mount_Body_PandaCub-Shade{background-image:url(spritesmith-main-6.png);background-position:-212px -1529px;width:105px;height:105px}.Mount_Body_PandaCub-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-318px -1529px;width:105px;height:105px}.Mount_Body_PandaCub-Spooky{background-image:url(spritesmith-main-6.png);background-position:-424px -1529px;width:105px;height:105px}.Mount_Body_PandaCub-White{background-image:url(spritesmith-main-6.png);background-position:-530px -1529px;width:105px;height:105px}.Mount_Body_PandaCub-Zombie{background-image:url(spritesmith-main-6.png);background-position:-636px -1529px;width:105px;height:105px}.Mount_Body_Parrot-Base{background-image:url(spritesmith-main-6.png);background-position:-742px -1529px;width:105px;height:105px}.Mount_Body_Parrot-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-848px -1529px;width:105px;height:105px}.Mount_Body_Parrot-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-954px -1529px;width:105px;height:105px}.Mount_Body_Parrot-Desert{background-image:url(spritesmith-main-6.png);background-position:-1060px -1529px;width:105px;height:105px}.Mount_Body_Parrot-Golden{background-image:url(spritesmith-main-6.png);background-position:-1166px -1529px;width:105px;height:105px}.Mount_Body_Parrot-Red{background-image:url(spritesmith-main-6.png);background-position:-1272px -1529px;width:105px;height:105px}.Mount_Body_Parrot-Shade{background-image:url(spritesmith-main-6.png);background-position:-1378px -1529px;width:105px;height:105px}.Mount_Body_Parrot-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-1484px 0;width:105px;height:105px}.Mount_Body_Parrot-White{background-image:url(spritesmith-main-6.png);background-position:-1272px -212px;width:105px;height:105px}.Mount_Body_Parrot-Zombie{background-image:url(spritesmith-main-6.png);background-position:-433px -469px;width:105px;height:105px}.Mount_Body_Penguin-Base{background-image:url(spritesmith-main-6.png);background-position:-327px -469px;width:105px;height:105px}.Mount_Body_Penguin-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-221px -469px;width:105px;height:105px}.Mount_Body_Penguin-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-530px -327px;width:105px;height:105px}.Mount_Body_Penguin-Desert{background-image:url(spritesmith-main-6.png);background-position:-530px -221px;width:105px;height:105px}.Mount_Body_Penguin-Golden{background-image:url(spritesmith-main-6.png);background-position:-212px -1423px;width:105px;height:105px}.Mount_Body_Penguin-Red{background-image:url(spritesmith-main-6.png);background-position:-106px -1423px;width:105px;height:105px}.Mount_Body_Penguin-Shade{background-image:url(spritesmith-main-6.png);background-position:-1484px -1060px;width:105px;height:105px}.Mount_Body_Penguin-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-742px -1211px;width:105px;height:105px}.Mount_Body_Penguin-White{background-image:url(spritesmith-main-6.png);background-position:-636px -1211px;width:105px;height:105px}.Mount_Body_Penguin-Zombie{background-image:url(spritesmith-main-6.png);background-position:-530px -1211px;width:105px;height:105px}.Mount_Body_Phoenix-Base{background-image:url(spritesmith-main-6.png);background-position:-424px -1211px;width:105px;height:105px}.Mount_Body_Rat-Base{background-image:url(spritesmith-main-6.png);background-position:-318px -1211px;width:105px;height:105px}.Mount_Body_Rat-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-212px -1211px;width:105px;height:105px}.Mount_Body_Rat-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-106px -1211px;width:105px;height:105px}.Mount_Body_Rat-Desert{background-image:url(spritesmith-main-6.png);background-position:0 -1211px;width:105px;height:105px}.Mount_Body_Rat-Golden{background-image:url(spritesmith-main-6.png);background-position:-1272px -1060px;width:105px;height:105px}.Mount_Body_Rat-Red{background-image:url(spritesmith-main-6.png);background-position:-1272px -954px;width:105px;height:105px}.Mount_Body_Rat-Shade{background-image:url(spritesmith-main-6.png);background-position:-424px -893px;width:105px;height:105px}.Mount_Body_Rat-Skeleton{background-image:url(spritesmith-main-6.png);background-position:-318px -893px;width:105px;height:105px}.Mount_Body_Rat-White{background-image:url(spritesmith-main-6.png);background-position:-212px -893px;width:105px;height:105px}.Mount_Body_Rat-Zombie{background-image:url(spritesmith-main-6.png);background-position:-106px -893px;width:105px;height:105px}.Mount_Body_Rock-Base{background-image:url(spritesmith-main-6.png);background-position:0 -893px;width:105px;height:105px}.Mount_Body_Rock-CottonCandyBlue{background-image:url(spritesmith-main-6.png);background-position:-954px -742px;width:105px;height:105px}.Mount_Body_Rock-CottonCandyPink{background-image:url(spritesmith-main-6.png);background-position:-954px -636px;width:105px;height:105px}.Mount_Body_Rock-Desert{background-image:url(spritesmith-main-6.png);background-position:-954px -530px;width:105px;height:105px}.Mount_Body_Rock-Golden{background-image:url(spritesmith-main-6.png);background-position:-954px -424px;width:105px;height:105px}.Mount_Body_Rock-Red{background-image:url(spritesmith-main-6.png);background-position:-954px -318px;width:105px;height:105px}.Mount_Body_Rock-Shade{background-image:url(spritesmith-main-7.png);background-position:-998px -530px;width:105px;height:105px}.Mount_Body_Rock-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-954px -1113px;width:105px;height:105px}.Mount_Body_Rock-White{background-image:url(spritesmith-main-7.png);background-position:-998px -636px;width:105px;height:105px}.Mount_Body_Rock-Zombie{background-image:url(spritesmith-main-7.png);background-position:-998px -742px;width:105px;height:105px}.Mount_Body_Rooster-Base{background-image:url(spritesmith-main-7.png);background-position:0 -901px;width:105px;height:105px}.Mount_Body_Rooster-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-106px -901px;width:105px;height:105px}.Mount_Body_Rooster-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-212px -901px;width:105px;height:105px}.Mount_Body_Rooster-Desert{background-image:url(spritesmith-main-7.png);background-position:-318px -901px;width:105px;height:105px}.Mount_Body_Rooster-Golden{background-image:url(spritesmith-main-7.png);background-position:-424px -901px;width:105px;height:105px}.Mount_Body_Rooster-Red{background-image:url(spritesmith-main-7.png);background-position:-530px -901px;width:105px;height:105px}.Mount_Body_Rooster-Shade{background-image:url(spritesmith-main-7.png);background-position:-636px -901px;width:105px;height:105px}.Mount_Body_Rooster-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-1210px 0;width:105px;height:105px}.Mount_Body_Rooster-White{background-image:url(spritesmith-main-7.png);background-position:-1210px -106px;width:105px;height:105px}.Mount_Body_Rooster-Zombie{background-image:url(spritesmith-main-7.png);background-position:-1210px -212px;width:105px;height:105px}.Mount_Body_Seahorse-Base{background-image:url(spritesmith-main-7.png);background-position:-1210px -318px;width:105px;height:105px}.Mount_Body_Seahorse-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-1210px -424px;width:105px;height:105px}.Mount_Body_Seahorse-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-1210px -530px;width:105px;height:105px}.Mount_Body_Seahorse-Desert{background-image:url(spritesmith-main-7.png);background-position:-1210px -636px;width:105px;height:105px}.Mount_Body_Seahorse-Golden{background-image:url(spritesmith-main-7.png);background-position:-1210px -742px;width:105px;height:105px}.Mount_Body_Seahorse-Red{background-image:url(spritesmith-main-7.png);background-position:-1210px -848px;width:105px;height:105px}.Mount_Body_Seahorse-Shade{background-image:url(spritesmith-main-7.png);background-position:-1210px -954px;width:105px;height:105px}.Mount_Body_Seahorse-Skeleton{background-image:url(spritesmith-main-7.png);background-position:0 -1113px;width:105px;height:105px}.Mount_Body_Seahorse-White{background-image:url(spritesmith-main-7.png);background-position:-106px -1113px;width:105px;height:105px}.Mount_Body_Seahorse-Zombie{background-image:url(spritesmith-main-7.png);background-position:-1422px -1166px;width:105px;height:105px}.Mount_Body_Sheep-Base{background-image:url(spritesmith-main-7.png);background-position:0 -1325px;width:105px;height:105px}.Mount_Body_Sheep-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-106px -1325px;width:105px;height:105px}.Mount_Body_Sheep-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-212px -1325px;width:105px;height:105px}.Mount_Body_Sheep-Desert{background-image:url(spritesmith-main-7.png);background-position:-318px -1325px;width:105px;height:105px}.Mount_Body_Sheep-Golden{background-image:url(spritesmith-main-7.png);background-position:-424px -1325px;width:105px;height:105px}.Mount_Body_Sheep-Red{background-image:url(spritesmith-main-7.png);background-position:-530px -1325px;width:105px;height:105px}.Mount_Body_Sheep-Shade{background-image:url(spritesmith-main-7.png);background-position:-636px -1325px;width:105px;height:105px}.Mount_Body_Sheep-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-742px -1325px;width:105px;height:105px}.Mount_Body_Sheep-White{background-image:url(spritesmith-main-7.png);background-position:-848px -1325px;width:105px;height:105px}.Mount_Body_Sheep-Zombie{background-image:url(spritesmith-main-7.png);background-position:-954px -1537px;width:105px;height:105px}.Mount_Body_Slime-Base{background-image:url(spritesmith-main-7.png);background-position:-1060px -1537px;width:105px;height:105px}.Mount_Body_Slime-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-1166px -1537px;width:105px;height:105px}.Mount_Body_Slime-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-1272px -1537px;width:105px;height:105px}.Mount_Body_Slime-Desert{background-image:url(spritesmith-main-7.png);background-position:-1378px -1537px;width:105px;height:105px}.Mount_Body_Slime-Golden{background-image:url(spritesmith-main-7.png);background-position:-1484px -1537px;width:105px;height:105px}.Mount_Body_Slime-Red{background-image:url(spritesmith-main-7.png);background-position:-1590px -1537px;width:105px;height:105px}.Mount_Body_Slime-Shade{background-image:url(spritesmith-main-7.png);background-position:-1740px 0;width:105px;height:105px}.Mount_Body_Slime-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-1740px -106px;width:105px;height:105px}.Mount_Body_Slime-White{background-image:url(spritesmith-main-7.png);background-position:-1740px -212px;width:105px;height:105px}.Mount_Body_Slime-Zombie{background-image:url(spritesmith-main-7.png);background-position:-892px 0;width:105px;height:105px}.Mount_Body_Snake-Base{background-image:url(spritesmith-main-7.png);background-position:-892px -106px;width:105px;height:105px}.Mount_Body_Snake-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-892px -212px;width:105px;height:105px}.Mount_Body_Snake-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-892px -318px;width:105px;height:105px}.Mount_Body_Snake-Desert{background-image:url(spritesmith-main-7.png);background-position:-892px -424px;width:105px;height:105px}.Mount_Body_Snake-Golden{background-image:url(spritesmith-main-7.png);background-position:-892px -530px;width:105px;height:105px}.Mount_Body_Snake-Red{background-image:url(spritesmith-main-7.png);background-position:-892px -636px;width:105px;height:105px}.Mount_Body_Snake-Shade{background-image:url(spritesmith-main-7.png);background-position:0 -795px;width:105px;height:105px}.Mount_Body_Snake-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-106px -795px;width:105px;height:105px}.Mount_Body_Snake-White{background-image:url(spritesmith-main-7.png);background-position:-212px -795px;width:105px;height:105px}.Mount_Body_Snake-Zombie{background-image:url(spritesmith-main-7.png);background-position:-318px -795px;width:105px;height:105px}.Mount_Body_Spider-Base{background-image:url(spritesmith-main-7.png);background-position:-424px -795px;width:105px;height:105px}.Mount_Body_Spider-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-530px -795px;width:105px;height:105px}.Mount_Body_Spider-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-636px -795px;width:105px;height:105px}.Mount_Body_Spider-Desert{background-image:url(spritesmith-main-7.png);background-position:-742px -795px;width:105px;height:105px}.Mount_Body_Spider-Golden{background-image:url(spritesmith-main-7.png);background-position:-848px -795px;width:105px;height:105px}.Mount_Body_Spider-Red{background-image:url(spritesmith-main-7.png);background-position:-998px 0;width:105px;height:105px}.Mount_Body_Spider-Shade{background-image:url(spritesmith-main-7.png);background-position:-998px -106px;width:105px;height:105px}.Mount_Body_Spider-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-998px -212px;width:105px;height:105px}.Mount_Body_Spider-White{background-image:url(spritesmith-main-7.png);background-position:-998px -318px;width:105px;height:105px}.Mount_Body_Spider-Zombie{background-image:url(spritesmith-main-7.png);background-position:-998px -424px;width:105px;height:105px}.Mount_Body_TRex-Base{background-image:url(spritesmith-main-7.png);background-position:0 -544px;width:135px;height:135px}.Mount_Body_TRex-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-408px -272px;width:135px;height:135px}.Mount_Body_TRex-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:0 -136px;width:135px;height:135px}.Mount_Body_TRex-Desert{background-image:url(spritesmith-main-7.png);background-position:-136px -136px;width:135px;height:135px}.Mount_Body_TRex-Golden{background-image:url(spritesmith-main-7.png);background-position:-272px 0;width:135px;height:135px}.Mount_Body_TRex-Red{background-image:url(spritesmith-main-7.png);background-position:-272px -136px;width:135px;height:135px}.Mount_Body_TRex-Shade{background-image:url(spritesmith-main-7.png);background-position:0 -272px;width:135px;height:135px}.Mount_Body_TRex-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-136px -272px;width:135px;height:135px}.Mount_Body_TRex-White{background-image:url(spritesmith-main-7.png);background-position:-272px -272px;width:135px;height:135px}.Mount_Body_TRex-Zombie{background-image:url(spritesmith-main-7.png);background-position:-408px 0;width:135px;height:135px}.Mount_Body_TigerCub-Base{background-image:url(spritesmith-main-7.png);background-position:-742px -901px;width:105px;height:105px}.Mount_Body_TigerCub-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-848px -901px;width:105px;height:105px}.Mount_Body_TigerCub-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-954px -901px;width:105px;height:105px}.Mount_Body_TigerCub-Desert{background-image:url(spritesmith-main-7.png);background-position:-1104px 0;width:105px;height:105px}.Mount_Body_TigerCub-Golden{background-image:url(spritesmith-main-7.png);background-position:-1104px -106px;width:105px;height:105px}.Mount_Body_TigerCub-Peppermint{background-image:url(spritesmith-main-7.png);background-position:-1104px -212px;width:105px;height:105px}.Mount_Body_TigerCub-Red{background-image:url(spritesmith-main-7.png);background-position:-1104px -318px;width:105px;height:105px}.Mount_Body_TigerCub-Shade{background-image:url(spritesmith-main-7.png);background-position:-1104px -424px;width:105px;height:105px}.Mount_Body_TigerCub-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-1104px -530px;width:105px;height:105px}.Mount_Body_TigerCub-Spooky{background-image:url(spritesmith-main-7.png);background-position:-1104px -636px;width:105px;height:105px}.Mount_Body_TigerCub-White{background-image:url(spritesmith-main-7.png);background-position:-1104px -742px;width:105px;height:105px}.Mount_Body_TigerCub-Zombie{background-image:url(spritesmith-main-7.png);background-position:-1104px -848px;width:105px;height:105px}.Mount_Body_Turkey-Base{background-image:url(spritesmith-main-7.png);background-position:0 -1007px;width:105px;height:105px}.Mount_Body_Whale-Base{background-image:url(spritesmith-main-7.png);background-position:-106px -1007px;width:105px;height:105px}.Mount_Body_Whale-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-212px -1007px;width:105px;height:105px}.Mount_Body_Whale-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-318px -1007px;width:105px;height:105px}.Mount_Body_Whale-Desert{background-image:url(spritesmith-main-7.png);background-position:-424px -1007px;width:105px;height:105px}.Mount_Body_Whale-Golden{background-image:url(spritesmith-main-7.png);background-position:-530px -1007px;width:105px;height:105px}.Mount_Body_Whale-Red{background-image:url(spritesmith-main-7.png);background-position:-636px -1007px;width:105px;height:105px}.Mount_Body_Whale-Shade{background-image:url(spritesmith-main-7.png);background-position:-742px -1007px;width:105px;height:105px}.Mount_Body_Whale-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-848px -1007px;width:105px;height:105px}.Mount_Body_Whale-White{background-image:url(spritesmith-main-7.png);background-position:-954px -1007px;width:105px;height:105px}.Mount_Body_Whale-Zombie{background-image:url(spritesmith-main-7.png);background-position:-1060px -1007px;width:105px;height:105px}.Mount_Body_Wolf-Base{background-image:url(spritesmith-main-7.png);background-position:-408px -136px;width:135px;height:135px}.Mount_Body_Wolf-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:0 0;width:135px;height:135px}.Mount_Body_Wolf-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:0 -408px;width:135px;height:135px}.Mount_Body_Wolf-Desert{background-image:url(spritesmith-main-7.png);background-position:-136px -408px;width:135px;height:135px}.Mount_Body_Wolf-Golden{background-image:url(spritesmith-main-7.png);background-position:-272px -408px;width:135px;height:135px}.Mount_Body_Wolf-Peppermint{background-image:url(spritesmith-main-7.png);background-position:-408px -408px;width:135px;height:135px}.Mount_Body_Wolf-Red{background-image:url(spritesmith-main-7.png);background-position:-544px 0;width:135px;height:135px}.Mount_Body_Wolf-Shade{background-image:url(spritesmith-main-7.png);background-position:-544px -136px;width:135px;height:135px}.Mount_Body_Wolf-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-544px -272px;width:135px;height:135px}.Mount_Body_Wolf-Spooky{background-image:url(spritesmith-main-7.png);background-position:-544px -408px;width:135px;height:135px}.Mount_Body_Wolf-White{background-image:url(spritesmith-main-7.png);background-position:-136px 0;width:135px;height:135px}.Mount_Body_Wolf-Zombie{background-image:url(spritesmith-main-7.png);background-position:-136px -544px;width:135px;height:135px}.Mount_Head_BearCub-Base{background-image:url(spritesmith-main-7.png);background-position:-212px -1113px;width:105px;height:105px}.Mount_Head_BearCub-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-318px -1113px;width:105px;height:105px}.Mount_Head_BearCub-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-424px -1113px;width:105px;height:105px}.Mount_Head_BearCub-Desert{background-image:url(spritesmith-main-7.png);background-position:-530px -1113px;width:105px;height:105px}.Mount_Head_BearCub-Golden{background-image:url(spritesmith-main-7.png);background-position:-636px -1113px;width:105px;height:105px}.Mount_Head_BearCub-Peppermint{background-image:url(spritesmith-main-7.png);background-position:-742px -1113px;width:105px;height:105px}.Mount_Head_BearCub-Polar{background-image:url(spritesmith-main-7.png);background-position:-848px -1113px;width:105px;height:105px}.Mount_Head_BearCub-Red{background-image:url(spritesmith-main-7.png);background-position:-742px -680px;width:105px;height:105px}.Mount_Head_BearCub-Shade{background-image:url(spritesmith-main-7.png);background-position:-1060px -1113px;width:105px;height:105px}.Mount_Head_BearCub-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-1166px -1113px;width:105px;height:105px}.Mount_Head_BearCub-Spooky{background-image:url(spritesmith-main-7.png);background-position:-1316px 0;width:105px;height:105px}.Mount_Head_BearCub-White{background-image:url(spritesmith-main-7.png);background-position:-1316px -106px;width:105px;height:105px}.Mount_Head_BearCub-Zombie{background-image:url(spritesmith-main-7.png);background-position:-1316px -212px;width:105px;height:105px}.Mount_Head_Bunny-Base{background-image:url(spritesmith-main-7.png);background-position:-1316px -318px;width:105px;height:105px}.Mount_Head_Bunny-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-1316px -424px;width:105px;height:105px}.Mount_Head_Bunny-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-1316px -530px;width:105px;height:105px}.Mount_Head_Bunny-Desert{background-image:url(spritesmith-main-7.png);background-position:-1316px -636px;width:105px;height:105px}.Mount_Head_Bunny-Golden{background-image:url(spritesmith-main-7.png);background-position:-1316px -742px;width:105px;height:105px}.Mount_Head_Bunny-Red{background-image:url(spritesmith-main-7.png);background-position:-1316px -848px;width:105px;height:105px}.Mount_Head_Bunny-Shade{background-image:url(spritesmith-main-7.png);background-position:-1316px -954px;width:105px;height:105px}.Mount_Head_Bunny-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-1316px -1060px;width:105px;height:105px}.Mount_Head_Bunny-White{background-image:url(spritesmith-main-7.png);background-position:0 -1219px;width:105px;height:105px}.Mount_Head_Bunny-Zombie{background-image:url(spritesmith-main-7.png);background-position:-106px -1219px;width:105px;height:105px}.Mount_Head_Cactus-Base{background-image:url(spritesmith-main-7.png);background-position:-212px -1219px;width:105px;height:105px}.Mount_Head_Cactus-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-318px -1219px;width:105px;height:105px}.Mount_Head_Cactus-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-424px -1219px;width:105px;height:105px}.Mount_Head_Cactus-Desert{background-image:url(spritesmith-main-7.png);background-position:-530px -1219px;width:105px;height:105px}.Mount_Head_Cactus-Golden{background-image:url(spritesmith-main-7.png);background-position:-636px -1219px;width:105px;height:105px}.Mount_Head_Cactus-Peppermint{background-image:url(spritesmith-main-7.png);background-position:-742px -1219px;width:105px;height:105px}.Mount_Head_Cactus-Red{background-image:url(spritesmith-main-7.png);background-position:-848px -1219px;width:105px;height:105px}.Mount_Head_Cactus-Shade{background-image:url(spritesmith-main-7.png);background-position:-954px -1219px;width:105px;height:105px}.Mount_Head_Cactus-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-1060px -1219px;width:105px;height:105px}.Mount_Head_Cactus-Spooky{background-image:url(spritesmith-main-7.png);background-position:-1166px -1219px;width:105px;height:105px}.Mount_Head_Cactus-White{background-image:url(spritesmith-main-7.png);background-position:-1272px -1219px;width:105px;height:105px}.Mount_Head_Cactus-Zombie{background-image:url(spritesmith-main-7.png);background-position:-1422px 0;width:105px;height:105px}.Mount_Head_Cheetah-Base{background-image:url(spritesmith-main-7.png);background-position:-1422px -106px;width:105px;height:105px}.Mount_Head_Cheetah-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-1422px -212px;width:105px;height:105px}.Mount_Head_Cheetah-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-1422px -318px;width:105px;height:105px}.Mount_Head_Cheetah-Desert{background-image:url(spritesmith-main-7.png);background-position:-1422px -424px;width:105px;height:105px}.Mount_Head_Cheetah-Golden{background-image:url(spritesmith-main-7.png);background-position:-1422px -530px;width:105px;height:105px}.Mount_Head_Cheetah-Red{background-image:url(spritesmith-main-7.png);background-position:-1422px -636px;width:105px;height:105px}.Mount_Head_Cheetah-Shade{background-image:url(spritesmith-main-7.png);background-position:-1422px -742px;width:105px;height:105px}.Mount_Head_Cheetah-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-1422px -848px;width:105px;height:105px}.Mount_Head_Cheetah-White{background-image:url(spritesmith-main-7.png);background-position:-1422px -954px;width:105px;height:105px}.Mount_Head_Cheetah-Zombie{background-image:url(spritesmith-main-7.png);background-position:-1422px -1060px;width:105px;height:105px}.Mount_Head_Cuttlefish-Base{background-image:url(spritesmith-main-7.png);background-position:-378px -544px;width:105px;height:114px}.Mount_Head_Cuttlefish-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-484px -544px;width:105px;height:114px}.Mount_Head_Cuttlefish-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-680px 0;width:105px;height:114px}.Mount_Head_Cuttlefish-Desert{background-image:url(spritesmith-main-7.png);background-position:-680px -115px;width:105px;height:114px}.Mount_Head_Cuttlefish-Golden{background-image:url(spritesmith-main-7.png);background-position:-680px -230px;width:105px;height:114px}.Mount_Head_Cuttlefish-Red{background-image:url(spritesmith-main-7.png);background-position:-680px -345px;width:105px;height:114px}.Mount_Head_Cuttlefish-Shade{background-image:url(spritesmith-main-7.png);background-position:-680px -460px;width:105px;height:114px}.Mount_Head_Cuttlefish-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-786px 0;width:105px;height:114px}.Mount_Head_Cuttlefish-White{background-image:url(spritesmith-main-7.png);background-position:-786px -115px;width:105px;height:114px}.Mount_Head_Cuttlefish-Zombie{background-image:url(spritesmith-main-7.png);background-position:-786px -230px;width:105px;height:114px}.Mount_Head_Deer-Base{background-image:url(spritesmith-main-7.png);background-position:-954px -1325px;width:105px;height:105px}.Mount_Head_Deer-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-1060px -1325px;width:105px;height:105px}.Mount_Head_Deer-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-1166px -1325px;width:105px;height:105px}.Mount_Head_Deer-Desert{background-image:url(spritesmith-main-7.png);background-position:-1272px -1325px;width:105px;height:105px}.Mount_Head_Deer-Golden{background-image:url(spritesmith-main-7.png);background-position:-1378px -1325px;width:105px;height:105px}.Mount_Head_Deer-Red{background-image:url(spritesmith-main-7.png);background-position:-1528px 0;width:105px;height:105px}.Mount_Head_Deer-Shade{background-image:url(spritesmith-main-7.png);background-position:-1528px -106px;width:105px;height:105px}.Mount_Head_Deer-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-1528px -212px;width:105px;height:105px}.Mount_Head_Deer-White{background-image:url(spritesmith-main-7.png);background-position:-1528px -318px;width:105px;height:105px}.Mount_Head_Deer-Zombie{background-image:url(spritesmith-main-7.png);background-position:-1528px -424px;width:105px;height:105px}.Mount_Head_Dragon-Base{background-image:url(spritesmith-main-7.png);background-position:-1528px -530px;width:105px;height:105px}.Mount_Head_Dragon-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-1528px -636px;width:105px;height:105px}.Mount_Head_Dragon-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-1528px -742px;width:105px;height:105px}.Mount_Head_Dragon-Desert{background-image:url(spritesmith-main-7.png);background-position:-1528px -848px;width:105px;height:105px}.Mount_Head_Dragon-Golden{background-image:url(spritesmith-main-7.png);background-position:-1528px -954px;width:105px;height:105px}.Mount_Head_Dragon-Peppermint{background-image:url(spritesmith-main-7.png);background-position:-1528px -1060px;width:105px;height:105px}.Mount_Head_Dragon-Red{background-image:url(spritesmith-main-7.png);background-position:-1528px -1166px;width:105px;height:105px}.Mount_Head_Dragon-Shade{background-image:url(spritesmith-main-7.png);background-position:-1528px -1272px;width:105px;height:105px}.Mount_Head_Dragon-Skeleton{background-image:url(spritesmith-main-7.png);background-position:0 -1431px;width:105px;height:105px}.Mount_Head_Dragon-Spooky{background-image:url(spritesmith-main-7.png);background-position:-106px -1431px;width:105px;height:105px}.Mount_Head_Dragon-White{background-image:url(spritesmith-main-7.png);background-position:-212px -1431px;width:105px;height:105px}.Mount_Head_Dragon-Zombie{background-image:url(spritesmith-main-7.png);background-position:-318px -1431px;width:105px;height:105px}.Mount_Head_Egg-Base{background-image:url(spritesmith-main-7.png);background-position:-424px -1431px;width:105px;height:105px}.Mount_Head_Egg-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-530px -1431px;width:105px;height:105px}.Mount_Head_Egg-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-636px -1431px;width:105px;height:105px}.Mount_Head_Egg-Desert{background-image:url(spritesmith-main-7.png);background-position:-742px -1431px;width:105px;height:105px}.Mount_Head_Egg-Golden{background-image:url(spritesmith-main-7.png);background-position:-848px -1431px;width:105px;height:105px}.Mount_Head_Egg-Red{background-image:url(spritesmith-main-7.png);background-position:-954px -1431px;width:105px;height:105px}.Mount_Head_Egg-Shade{background-image:url(spritesmith-main-7.png);background-position:-1060px -1431px;width:105px;height:105px}.Mount_Head_Egg-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-1166px -1431px;width:105px;height:105px}.Mount_Head_Egg-White{background-image:url(spritesmith-main-7.png);background-position:-1272px -1431px;width:105px;height:105px}.Mount_Head_Egg-Zombie{background-image:url(spritesmith-main-7.png);background-position:-1378px -1431px;width:105px;height:105px}.Mount_Head_FlyingPig-Base{background-image:url(spritesmith-main-7.png);background-position:-1484px -1431px;width:105px;height:105px}.Mount_Head_FlyingPig-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-1634px 0;width:105px;height:105px}.Mount_Head_FlyingPig-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-1634px -106px;width:105px;height:105px}.Mount_Head_FlyingPig-Desert{background-image:url(spritesmith-main-7.png);background-position:-1634px -212px;width:105px;height:105px}.Mount_Head_FlyingPig-Golden{background-image:url(spritesmith-main-7.png);background-position:-1634px -318px;width:105px;height:105px}.Mount_Head_FlyingPig-Peppermint{background-image:url(spritesmith-main-7.png);background-position:-1634px -424px;width:105px;height:105px}.Mount_Head_FlyingPig-Red{background-image:url(spritesmith-main-7.png);background-position:-1634px -530px;width:105px;height:105px}.Mount_Head_FlyingPig-Shade{background-image:url(spritesmith-main-7.png);background-position:-1634px -636px;width:105px;height:105px}.Mount_Head_FlyingPig-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-1634px -742px;width:105px;height:105px}.Mount_Head_FlyingPig-Spooky{background-image:url(spritesmith-main-7.png);background-position:-1634px -848px;width:105px;height:105px}.Mount_Head_FlyingPig-White{background-image:url(spritesmith-main-7.png);background-position:-1634px -954px;width:105px;height:105px}.Mount_Head_FlyingPig-Zombie{background-image:url(spritesmith-main-7.png);background-position:-1634px -1060px;width:105px;height:105px}.Mount_Head_Fox-Base{background-image:url(spritesmith-main-7.png);background-position:-1634px -1166px;width:105px;height:105px}.Mount_Head_Fox-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-1634px -1272px;width:105px;height:105px}.Mount_Head_Fox-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:-1634px -1378px;width:105px;height:105px}.Mount_Head_Fox-Desert{background-image:url(spritesmith-main-7.png);background-position:0 -1537px;width:105px;height:105px}.Mount_Head_Fox-Golden{background-image:url(spritesmith-main-7.png);background-position:-106px -1537px;width:105px;height:105px}.Mount_Head_Fox-Peppermint{background-image:url(spritesmith-main-7.png);background-position:-212px -1537px;width:105px;height:105px}.Mount_Head_Fox-Red{background-image:url(spritesmith-main-7.png);background-position:-318px -1537px;width:105px;height:105px}.Mount_Head_Fox-Shade{background-image:url(spritesmith-main-7.png);background-position:-424px -1537px;width:105px;height:105px}.Mount_Head_Fox-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-530px -1537px;width:105px;height:105px}.Mount_Head_Fox-Spooky{background-image:url(spritesmith-main-7.png);background-position:-636px -1537px;width:105px;height:105px}.Mount_Head_Fox-White{background-image:url(spritesmith-main-7.png);background-position:-742px -1537px;width:105px;height:105px}.Mount_Head_Fox-Zombie{background-image:url(spritesmith-main-7.png);background-position:-848px -1537px;width:105px;height:105px}.Mount_Head_Frog-Base{background-image:url(spritesmith-main-7.png);background-position:-786px -345px;width:105px;height:114px}.Mount_Head_Frog-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-786px -460px;width:105px;height:114px}.Mount_Head_Frog-CottonCandyPink{background-image:url(spritesmith-main-7.png);background-position:0 -680px;width:105px;height:114px}.Mount_Head_Frog-Desert{background-image:url(spritesmith-main-7.png);background-position:-106px -680px;width:105px;height:114px}.Mount_Head_Frog-Golden{background-image:url(spritesmith-main-7.png);background-position:-212px -680px;width:105px;height:114px}.Mount_Head_Frog-Red{background-image:url(spritesmith-main-7.png);background-position:-318px -680px;width:105px;height:114px}.Mount_Head_Frog-Shade{background-image:url(spritesmith-main-7.png);background-position:-424px -680px;width:105px;height:114px}.Mount_Head_Frog-Skeleton{background-image:url(spritesmith-main-7.png);background-position:-530px -680px;width:105px;height:114px}.Mount_Head_Frog-White{background-image:url(spritesmith-main-7.png);background-position:-636px -680px;width:105px;height:114px}.Mount_Head_Frog-Zombie{background-image:url(spritesmith-main-7.png);background-position:-272px -544px;width:105px;height:114px}.Mount_Head_Gryphon-Base{background-image:url(spritesmith-main-7.png);background-position:-1740px -318px;width:105px;height:105px}.Mount_Head_Gryphon-CottonCandyBlue{background-image:url(spritesmith-main-7.png);background-position:-1740px -424px;width:105px;height:105px}.Mount_Head_Gryphon-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-680px -424px;width:105px;height:105px}.Mount_Head_Gryphon-Desert{background-image:url(spritesmith-main-8.png);background-position:-1210px -954px;width:105px;height:105px}.Mount_Head_Gryphon-Golden{background-image:url(spritesmith-main-8.png);background-position:-786px -106px;width:105px;height:105px}.Mount_Head_Gryphon-Red{background-image:url(spritesmith-main-8.png);background-position:-786px -530px;width:105px;height:105px}.Mount_Head_Gryphon-RoyalPurple{background-image:url(spritesmith-main-8.png);background-position:-786px -636px;width:105px;height:105px}.Mount_Head_Gryphon-Shade{background-image:url(spritesmith-main-8.png);background-position:-848px -1422px;width:105px;height:105px}.Mount_Head_Gryphon-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-954px -1422px;width:105px;height:105px}.Mount_Head_Gryphon-White{background-image:url(spritesmith-main-8.png);background-position:-1060px -1422px;width:105px;height:105px}.Mount_Head_Gryphon-Zombie{background-image:url(spritesmith-main-8.png);background-position:-1166px -1422px;width:105px;height:105px}.Mount_Head_Hedgehog-Base{background-image:url(spritesmith-main-8.png);background-position:-1272px -1422px;width:105px;height:105px}.Mount_Head_Hedgehog-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1378px -1422px;width:105px;height:105px}.Mount_Head_Hedgehog-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-1528px 0;width:105px;height:105px}.Mount_Head_Hedgehog-Desert{background-image:url(spritesmith-main-8.png);background-position:-1528px -106px;width:105px;height:105px}.Mount_Head_Hedgehog-Golden{background-image:url(spritesmith-main-8.png);background-position:-1528px -212px;width:105px;height:105px}.Mount_Head_Hedgehog-Red{background-image:url(spritesmith-main-8.png);background-position:-1528px -318px;width:105px;height:105px}.Mount_Head_Hedgehog-Shade{background-image:url(spritesmith-main-8.png);background-position:-1378px -1528px;width:105px;height:105px}.Mount_Head_Hedgehog-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-1484px -1528px;width:105px;height:105px}.Mount_Head_Hedgehog-White{background-image:url(spritesmith-main-8.png);background-position:-1634px 0;width:105px;height:105px}.Mount_Head_Hedgehog-Zombie{background-image:url(spritesmith-main-8.png);background-position:-1634px -106px;width:105px;height:105px}.Mount_Head_Horse-Base{background-image:url(spritesmith-main-8.png);background-position:-1634px -212px;width:105px;height:105px}.Mount_Head_Horse-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1634px -318px;width:105px;height:105px}.Mount_Head_Horse-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-1634px -424px;width:105px;height:105px}.Mount_Head_Horse-Desert{background-image:url(spritesmith-main-8.png);background-position:-1634px -530px;width:105px;height:105px}.Mount_Head_Horse-Golden{background-image:url(spritesmith-main-8.png);background-position:-1634px -636px;width:105px;height:105px}.Mount_Head_Horse-Red{background-image:url(spritesmith-main-8.png);background-position:-1634px -742px;width:105px;height:105px}.Mount_Head_Horse-Shade{background-image:url(spritesmith-main-8.png);background-position:-1634px -848px;width:105px;height:105px}.Mount_Head_Horse-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-680px -106px;width:105px;height:105px}.Mount_Head_Horse-White{background-image:url(spritesmith-main-8.png);background-position:-680px -212px;width:105px;height:105px}.Mount_Head_Horse-Zombie{background-image:url(spritesmith-main-8.png);background-position:-680px -318px;width:105px;height:105px}.Mount_Head_JackOLantern-Base{background-image:url(spritesmith-main-8.png);background-position:-1634px -954px;width:90px;height:105px}.Mount_Head_LionCub-Base{background-image:url(spritesmith-main-8.png);background-position:-680px -530px;width:105px;height:105px}.Mount_Head_LionCub-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:0 -680px;width:105px;height:105px}.Mount_Head_LionCub-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-106px -680px;width:105px;height:105px}.Mount_Head_LionCub-Desert{background-image:url(spritesmith-main-8.png);background-position:-212px -680px;width:105px;height:105px}.Mount_Head_LionCub-Ethereal{background-image:url(spritesmith-main-8.png);background-position:-318px -680px;width:105px;height:105px}.Mount_Head_LionCub-Golden{background-image:url(spritesmith-main-8.png);background-position:-424px -680px;width:105px;height:105px}.Mount_Head_LionCub-Peppermint{background-image:url(spritesmith-main-8.png);background-position:-530px -680px;width:105px;height:105px}.Mount_Head_LionCub-Red{background-image:url(spritesmith-main-8.png);background-position:-636px -680px;width:105px;height:105px}.Mount_Head_LionCub-Shade{background-image:url(spritesmith-main-8.png);background-position:-786px 0;width:105px;height:105px}.Mount_Head_LionCub-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-378px -544px;width:105px;height:110px}.Mount_Head_LionCub-Spooky{background-image:url(spritesmith-main-8.png);background-position:-786px -212px;width:105px;height:105px}.Mount_Head_LionCub-White{background-image:url(spritesmith-main-8.png);background-position:-786px -318px;width:105px;height:105px}.Mount_Head_LionCub-Zombie{background-image:url(spritesmith-main-8.png);background-position:-786px -424px;width:105px;height:105px}.Mount_Head_Mammoth-Base{background-image:url(spritesmith-main-8.png);background-position:-272px -544px;width:105px;height:123px}.Mount_Head_MantisShrimp-Base{background-image:url(spritesmith-main-8.png);background-position:-484px -544px;width:108px;height:105px}.Mount_Head_Octopus-Base{background-image:url(spritesmith-main-8.png);background-position:0 -786px;width:105px;height:105px}.Mount_Head_Octopus-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-106px -786px;width:105px;height:105px}.Mount_Head_Octopus-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-212px -786px;width:105px;height:105px}.Mount_Head_Octopus-Desert{background-image:url(spritesmith-main-8.png);background-position:-318px -786px;width:105px;height:105px}.Mount_Head_Octopus-Golden{background-image:url(spritesmith-main-8.png);background-position:-424px -786px;width:105px;height:105px}.Mount_Head_Octopus-Red{background-image:url(spritesmith-main-8.png);background-position:-530px -786px;width:105px;height:105px}.Mount_Head_Octopus-Shade{background-image:url(spritesmith-main-8.png);background-position:-636px -786px;width:105px;height:105px}.Mount_Head_Octopus-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-742px -786px;width:105px;height:105px}.Mount_Head_Octopus-White{background-image:url(spritesmith-main-8.png);background-position:-892px 0;width:105px;height:105px}.Mount_Head_Octopus-Zombie{background-image:url(spritesmith-main-8.png);background-position:-892px -106px;width:105px;height:105px}.Mount_Head_Orca-Base{background-image:url(spritesmith-main-8.png);background-position:-892px -212px;width:105px;height:105px}.Mount_Head_Owl-Base{background-image:url(spritesmith-main-8.png);background-position:-892px -318px;width:105px;height:105px}.Mount_Head_Owl-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-892px -424px;width:105px;height:105px}.Mount_Head_Owl-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-892px -530px;width:105px;height:105px}.Mount_Head_Owl-Desert{background-image:url(spritesmith-main-8.png);background-position:-892px -636px;width:105px;height:105px}.Mount_Head_Owl-Golden{background-image:url(spritesmith-main-8.png);background-position:-892px -742px;width:105px;height:105px}.Mount_Head_Owl-Red{background-image:url(spritesmith-main-8.png);background-position:0 -892px;width:105px;height:105px}.Mount_Head_Owl-Shade{background-image:url(spritesmith-main-8.png);background-position:-106px -892px;width:105px;height:105px}.Mount_Head_Owl-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-212px -892px;width:105px;height:105px}.Mount_Head_Owl-White{background-image:url(spritesmith-main-8.png);background-position:-318px -892px;width:105px;height:105px}.Mount_Head_Owl-Zombie{background-image:url(spritesmith-main-8.png);background-position:-424px -892px;width:105px;height:105px}.Mount_Head_PandaCub-Base{background-image:url(spritesmith-main-8.png);background-position:-530px -892px;width:105px;height:105px}.Mount_Head_PandaCub-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-636px -892px;width:105px;height:105px}.Mount_Head_PandaCub-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-742px -892px;width:105px;height:105px}.Mount_Head_PandaCub-Desert{background-image:url(spritesmith-main-8.png);background-position:-848px -892px;width:105px;height:105px}.Mount_Head_PandaCub-Golden{background-image:url(spritesmith-main-8.png);background-position:-998px 0;width:105px;height:105px}.Mount_Head_PandaCub-Peppermint{background-image:url(spritesmith-main-8.png);background-position:-998px -106px;width:105px;height:105px}.Mount_Head_PandaCub-Red{background-image:url(spritesmith-main-8.png);background-position:-998px -212px;width:105px;height:105px}.Mount_Head_PandaCub-Shade{background-image:url(spritesmith-main-8.png);background-position:-998px -318px;width:105px;height:105px}.Mount_Head_PandaCub-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-998px -424px;width:105px;height:105px}.Mount_Head_PandaCub-Spooky{background-image:url(spritesmith-main-8.png);background-position:-998px -530px;width:105px;height:105px}.Mount_Head_PandaCub-White{background-image:url(spritesmith-main-8.png);background-position:-998px -636px;width:105px;height:105px}.Mount_Head_PandaCub-Zombie{background-image:url(spritesmith-main-8.png);background-position:-998px -742px;width:105px;height:105px}.Mount_Head_Parrot-Base{background-image:url(spritesmith-main-8.png);background-position:-998px -848px;width:105px;height:105px}.Mount_Head_Parrot-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:0 -998px;width:105px;height:105px}.Mount_Head_Parrot-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-106px -998px;width:105px;height:105px}.Mount_Head_Parrot-Desert{background-image:url(spritesmith-main-8.png);background-position:-212px -998px;width:105px;height:105px}.Mount_Head_Parrot-Golden{background-image:url(spritesmith-main-8.png);background-position:-318px -998px;width:105px;height:105px}.Mount_Head_Parrot-Red{background-image:url(spritesmith-main-8.png);background-position:-424px -998px;width:105px;height:105px}.Mount_Head_Parrot-Shade{background-image:url(spritesmith-main-8.png);background-position:-530px -998px;width:105px;height:105px}.Mount_Head_Parrot-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-636px -998px;width:105px;height:105px}.Mount_Head_Parrot-White{background-image:url(spritesmith-main-8.png);background-position:-742px -998px;width:105px;height:105px}.Mount_Head_Parrot-Zombie{background-image:url(spritesmith-main-8.png);background-position:-848px -998px;width:105px;height:105px}.Mount_Head_Penguin-Base{background-image:url(spritesmith-main-8.png);background-position:-954px -998px;width:105px;height:105px}.Mount_Head_Penguin-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1104px 0;width:105px;height:105px}.Mount_Head_Penguin-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-1104px -106px;width:105px;height:105px}.Mount_Head_Penguin-Desert{background-image:url(spritesmith-main-8.png);background-position:-1104px -212px;width:105px;height:105px}.Mount_Head_Penguin-Golden{background-image:url(spritesmith-main-8.png);background-position:-1104px -318px;width:105px;height:105px}.Mount_Head_Penguin-Red{background-image:url(spritesmith-main-8.png);background-position:-1104px -424px;width:105px;height:105px}.Mount_Head_Penguin-Shade{background-image:url(spritesmith-main-8.png);background-position:-1104px -530px;width:105px;height:105px}.Mount_Head_Penguin-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-1104px -636px;width:105px;height:105px}.Mount_Head_Penguin-White{background-image:url(spritesmith-main-8.png);background-position:-1104px -742px;width:105px;height:105px}.Mount_Head_Penguin-Zombie{background-image:url(spritesmith-main-8.png);background-position:-1104px -848px;width:105px;height:105px}.Mount_Head_Phoenix-Base{background-image:url(spritesmith-main-8.png);background-position:-1104px -954px;width:105px;height:105px}.Mount_Head_Rat-Base{background-image:url(spritesmith-main-8.png);background-position:0 -1104px;width:105px;height:105px}.Mount_Head_Rat-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-106px -1104px;width:105px;height:105px}.Mount_Head_Rat-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-212px -1104px;width:105px;height:105px}.Mount_Head_Rat-Desert{background-image:url(spritesmith-main-8.png);background-position:-318px -1104px;width:105px;height:105px}.Mount_Head_Rat-Golden{background-image:url(spritesmith-main-8.png);background-position:-424px -1104px;width:105px;height:105px}.Mount_Head_Rat-Red{background-image:url(spritesmith-main-8.png);background-position:-530px -1104px;width:105px;height:105px}.Mount_Head_Rat-Shade{background-image:url(spritesmith-main-8.png);background-position:-636px -1104px;width:105px;height:105px}.Mount_Head_Rat-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-742px -1104px;width:105px;height:105px}.Mount_Head_Rat-White{background-image:url(spritesmith-main-8.png);background-position:-848px -1104px;width:105px;height:105px}.Mount_Head_Rat-Zombie{background-image:url(spritesmith-main-8.png);background-position:-954px -1104px;width:105px;height:105px}.Mount_Head_Rock-Base{background-image:url(spritesmith-main-8.png);background-position:-1060px -1104px;width:105px;height:105px}.Mount_Head_Rock-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1210px 0;width:105px;height:105px}.Mount_Head_Rock-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-1210px -106px;width:105px;height:105px}.Mount_Head_Rock-Desert{background-image:url(spritesmith-main-8.png);background-position:-1210px -212px;width:105px;height:105px}.Mount_Head_Rock-Golden{background-image:url(spritesmith-main-8.png);background-position:-1210px -318px;width:105px;height:105px}.Mount_Head_Rock-Red{background-image:url(spritesmith-main-8.png);background-position:-1210px -424px;width:105px;height:105px}.Mount_Head_Rock-Shade{background-image:url(spritesmith-main-8.png);background-position:-1210px -530px;width:105px;height:105px}.Mount_Head_Rock-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-1210px -636px;width:105px;height:105px}.Mount_Head_Rock-White{background-image:url(spritesmith-main-8.png);background-position:-1210px -742px;width:105px;height:105px}.Mount_Head_Rock-Zombie{background-image:url(spritesmith-main-8.png);background-position:-1210px -848px;width:105px;height:105px}.Mount_Head_Rooster-Base{background-image:url(spritesmith-main-8.png);background-position:-680px 0;width:105px;height:105px}.Mount_Head_Rooster-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1210px -1060px;width:105px;height:105px}.Mount_Head_Rooster-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:0 -1210px;width:105px;height:105px}.Mount_Head_Rooster-Desert{background-image:url(spritesmith-main-8.png);background-position:-106px -1210px;width:105px;height:105px}.Mount_Head_Rooster-Golden{background-image:url(spritesmith-main-8.png);background-position:-212px -1210px;width:105px;height:105px}.Mount_Head_Rooster-Red{background-image:url(spritesmith-main-8.png);background-position:-318px -1210px;width:105px;height:105px}.Mount_Head_Rooster-Shade{background-image:url(spritesmith-main-8.png);background-position:-424px -1210px;width:105px;height:105px}.Mount_Head_Rooster-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-530px -1210px;width:105px;height:105px}.Mount_Head_Rooster-White{background-image:url(spritesmith-main-8.png);background-position:-636px -1210px;width:105px;height:105px}.Mount_Head_Rooster-Zombie{background-image:url(spritesmith-main-8.png);background-position:-742px -1210px;width:105px;height:105px}.Mount_Head_Seahorse-Base{background-image:url(spritesmith-main-8.png);background-position:-848px -1210px;width:105px;height:105px}.Mount_Head_Seahorse-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-954px -1210px;width:105px;height:105px}.Mount_Head_Seahorse-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-1060px -1210px;width:105px;height:105px}.Mount_Head_Seahorse-Desert{background-image:url(spritesmith-main-8.png);background-position:-1166px -1210px;width:105px;height:105px}.Mount_Head_Seahorse-Golden{background-image:url(spritesmith-main-8.png);background-position:-1316px 0;width:105px;height:105px}.Mount_Head_Seahorse-Red{background-image:url(spritesmith-main-8.png);background-position:-1316px -106px;width:105px;height:105px}.Mount_Head_Seahorse-Shade{background-image:url(spritesmith-main-8.png);background-position:-1316px -212px;width:105px;height:105px}.Mount_Head_Seahorse-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-1316px -318px;width:105px;height:105px}.Mount_Head_Seahorse-White{background-image:url(spritesmith-main-8.png);background-position:-1316px -424px;width:105px;height:105px}.Mount_Head_Seahorse-Zombie{background-image:url(spritesmith-main-8.png);background-position:-1316px -530px;width:105px;height:105px}.Mount_Head_Sheep-Base{background-image:url(spritesmith-main-8.png);background-position:-1316px -636px;width:105px;height:105px}.Mount_Head_Sheep-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1316px -742px;width:105px;height:105px}.Mount_Head_Sheep-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-1316px -848px;width:105px;height:105px}.Mount_Head_Sheep-Desert{background-image:url(spritesmith-main-8.png);background-position:-1316px -954px;width:105px;height:105px}.Mount_Head_Sheep-Golden{background-image:url(spritesmith-main-8.png);background-position:-1316px -1060px;width:105px;height:105px}.Mount_Head_Sheep-Red{background-image:url(spritesmith-main-8.png);background-position:-1316px -1166px;width:105px;height:105px}.Mount_Head_Sheep-Shade{background-image:url(spritesmith-main-8.png);background-position:0 -1316px;width:105px;height:105px}.Mount_Head_Sheep-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-106px -1316px;width:105px;height:105px}.Mount_Head_Sheep-White{background-image:url(spritesmith-main-8.png);background-position:-212px -1316px;width:105px;height:105px}.Mount_Head_Sheep-Zombie{background-image:url(spritesmith-main-8.png);background-position:-318px -1316px;width:105px;height:105px}.Mount_Head_Slime-Base{background-image:url(spritesmith-main-8.png);background-position:-424px -1316px;width:105px;height:105px}.Mount_Head_Slime-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-530px -1316px;width:105px;height:105px}.Mount_Head_Slime-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-636px -1316px;width:105px;height:105px}.Mount_Head_Slime-Desert{background-image:url(spritesmith-main-8.png);background-position:-742px -1316px;width:105px;height:105px}.Mount_Head_Slime-Golden{background-image:url(spritesmith-main-8.png);background-position:-848px -1316px;width:105px;height:105px}.Mount_Head_Slime-Red{background-image:url(spritesmith-main-8.png);background-position:-954px -1316px;width:105px;height:105px}.Mount_Head_Slime-Shade{background-image:url(spritesmith-main-8.png);background-position:-1060px -1316px;width:105px;height:105px}.Mount_Head_Slime-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-1166px -1316px;width:105px;height:105px}.Mount_Head_Slime-White{background-image:url(spritesmith-main-8.png);background-position:-1272px -1316px;width:105px;height:105px}.Mount_Head_Slime-Zombie{background-image:url(spritesmith-main-8.png);background-position:-1422px 0;width:105px;height:105px}.Mount_Head_Snake-Base{background-image:url(spritesmith-main-8.png);background-position:-1422px -106px;width:105px;height:105px}.Mount_Head_Snake-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1422px -212px;width:105px;height:105px}.Mount_Head_Snake-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-1422px -318px;width:105px;height:105px}.Mount_Head_Snake-Desert{background-image:url(spritesmith-main-8.png);background-position:-1422px -424px;width:105px;height:105px}.Mount_Head_Snake-Golden{background-image:url(spritesmith-main-8.png);background-position:-1422px -530px;width:105px;height:105px}.Mount_Head_Snake-Red{background-image:url(spritesmith-main-8.png);background-position:-1422px -636px;width:105px;height:105px}.Mount_Head_Snake-Shade{background-image:url(spritesmith-main-8.png);background-position:-1422px -742px;width:105px;height:105px}.Mount_Head_Snake-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-1422px -848px;width:105px;height:105px}.Mount_Head_Snake-White{background-image:url(spritesmith-main-8.png);background-position:-1422px -954px;width:105px;height:105px}.Mount_Head_Snake-Zombie{background-image:url(spritesmith-main-8.png);background-position:-1422px -1060px;width:105px;height:105px}.Mount_Head_Spider-Base{background-image:url(spritesmith-main-8.png);background-position:-1422px -1166px;width:105px;height:105px}.Mount_Head_Spider-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1422px -1272px;width:105px;height:105px}.Mount_Head_Spider-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:0 -1422px;width:105px;height:105px}.Mount_Head_Spider-Desert{background-image:url(spritesmith-main-8.png);background-position:-106px -1422px;width:105px;height:105px}.Mount_Head_Spider-Golden{background-image:url(spritesmith-main-8.png);background-position:-212px -1422px;width:105px;height:105px}.Mount_Head_Spider-Red{background-image:url(spritesmith-main-8.png);background-position:-318px -1422px;width:105px;height:105px}.Mount_Head_Spider-Shade{background-image:url(spritesmith-main-8.png);background-position:-424px -1422px;width:105px;height:105px}.Mount_Head_Spider-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-530px -1422px;width:105px;height:105px}.Mount_Head_Spider-White{background-image:url(spritesmith-main-8.png);background-position:-636px -1422px;width:105px;height:105px}.Mount_Head_Spider-Zombie{background-image:url(spritesmith-main-8.png);background-position:-742px -1422px;width:105px;height:105px}.Mount_Head_TRex-Base{background-image:url(spritesmith-main-8.png);background-position:-272px -136px;width:135px;height:135px}.Mount_Head_TRex-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:0 -272px;width:135px;height:135px}.Mount_Head_TRex-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-136px -272px;width:135px;height:135px}.Mount_Head_TRex-Desert{background-image:url(spritesmith-main-8.png);background-position:-272px -272px;width:135px;height:135px}.Mount_Head_TRex-Golden{background-image:url(spritesmith-main-8.png);background-position:-408px 0;width:135px;height:135px}.Mount_Head_TRex-Red{background-image:url(spritesmith-main-8.png);background-position:-408px -136px;width:135px;height:135px}.Mount_Head_TRex-Shade{background-image:url(spritesmith-main-8.png);background-position:-408px -272px;width:135px;height:135px}.Mount_Head_TRex-Skeleton{background-image:url(spritesmith-main-8.png);background-position:0 -408px;width:135px;height:135px}.Mount_Head_TRex-White{background-image:url(spritesmith-main-8.png);background-position:0 0;width:135px;height:135px}.Mount_Head_TRex-Zombie{background-image:url(spritesmith-main-8.png);background-position:-272px -408px;width:135px;height:135px}.Mount_Head_TigerCub-Base{background-image:url(spritesmith-main-8.png);background-position:-1528px -424px;width:105px;height:105px}.Mount_Head_TigerCub-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1528px -530px;width:105px;height:105px}.Mount_Head_TigerCub-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-1528px -636px;width:105px;height:105px}.Mount_Head_TigerCub-Desert{background-image:url(spritesmith-main-8.png);background-position:-1528px -742px;width:105px;height:105px}.Mount_Head_TigerCub-Golden{background-image:url(spritesmith-main-8.png);background-position:-1528px -848px;width:105px;height:105px}.Mount_Head_TigerCub-Peppermint{background-image:url(spritesmith-main-8.png);background-position:-1528px -954px;width:105px;height:105px}.Mount_Head_TigerCub-Red{background-image:url(spritesmith-main-8.png);background-position:-1528px -1060px;width:105px;height:105px}.Mount_Head_TigerCub-Shade{background-image:url(spritesmith-main-8.png);background-position:-1528px -1166px;width:105px;height:105px}.Mount_Head_TigerCub-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-1528px -1272px;width:105px;height:105px}.Mount_Head_TigerCub-Spooky{background-image:url(spritesmith-main-8.png);background-position:-1528px -1378px;width:105px;height:105px}.Mount_Head_TigerCub-White{background-image:url(spritesmith-main-8.png);background-position:0 -1528px;width:105px;height:105px}.Mount_Head_TigerCub-Zombie{background-image:url(spritesmith-main-8.png);background-position:-106px -1528px;width:105px;height:105px}.Mount_Head_Turkey-Base{background-image:url(spritesmith-main-8.png);background-position:-212px -1528px;width:105px;height:105px}.Mount_Head_Whale-Base{background-image:url(spritesmith-main-8.png);background-position:-318px -1528px;width:105px;height:105px}.Mount_Head_Whale-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-424px -1528px;width:105px;height:105px}.Mount_Head_Whale-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-530px -1528px;width:105px;height:105px}.Mount_Head_Whale-Desert{background-image:url(spritesmith-main-8.png);background-position:-636px -1528px;width:105px;height:105px}.Mount_Head_Whale-Golden{background-image:url(spritesmith-main-8.png);background-position:-742px -1528px;width:105px;height:105px}.Mount_Head_Whale-Red{background-image:url(spritesmith-main-8.png);background-position:-848px -1528px;width:105px;height:105px}.Mount_Head_Whale-Shade{background-image:url(spritesmith-main-8.png);background-position:-954px -1528px;width:105px;height:105px}.Mount_Head_Whale-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-1060px -1528px;width:105px;height:105px}.Mount_Head_Whale-White{background-image:url(spritesmith-main-8.png);background-position:-1166px -1528px;width:105px;height:105px}.Mount_Head_Whale-Zombie{background-image:url(spritesmith-main-8.png);background-position:-1272px -1528px;width:105px;height:105px}.Mount_Head_Wolf-Base{background-image:url(spritesmith-main-8.png);background-position:-408px -408px;width:135px;height:135px}.Mount_Head_Wolf-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-544px 0;width:135px;height:135px}.Mount_Head_Wolf-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-544px -136px;width:135px;height:135px}.Mount_Head_Wolf-Desert{background-image:url(spritesmith-main-8.png);background-position:-544px -272px;width:135px;height:135px}.Mount_Head_Wolf-Golden{background-image:url(spritesmith-main-8.png);background-position:-544px -408px;width:135px;height:135px}.Mount_Head_Wolf-Peppermint{background-image:url(spritesmith-main-8.png);background-position:0 -544px;width:135px;height:135px}.Mount_Head_Wolf-Red{background-image:url(spritesmith-main-8.png);background-position:-136px -544px;width:135px;height:135px}.Mount_Head_Wolf-Shade{background-image:url(spritesmith-main-8.png);background-position:-272px 0;width:135px;height:135px}.Mount_Head_Wolf-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-136px -136px;width:135px;height:135px}.Mount_Head_Wolf-Spooky{background-image:url(spritesmith-main-8.png);background-position:0 -136px;width:135px;height:135px}.Mount_Head_Wolf-White{background-image:url(spritesmith-main-8.png);background-position:-136px 0;width:135px;height:135px}.Mount_Head_Wolf-Zombie{background-image:url(spritesmith-main-8.png);background-position:-136px -408px;width:135px;height:135px}.Mount_Icon_BearCub-Base{background-image:url(spritesmith-main-8.png);background-position:0 -1634px;width:81px;height:99px}.Mount_Icon_BearCub-CottonCandyBlue{background-image:url(spritesmith-main-8.png);background-position:-1634px -1160px;width:81px;height:99px}.Mount_Icon_BearCub-CottonCandyPink{background-image:url(spritesmith-main-8.png);background-position:-1634px -1260px;width:81px;height:99px}.Mount_Icon_BearCub-Desert{background-image:url(spritesmith-main-8.png);background-position:-1634px -1360px;width:81px;height:99px}.Mount_Icon_BearCub-Golden{background-image:url(spritesmith-main-8.png);background-position:-1634px -1460px;width:81px;height:99px}.Mount_Icon_BearCub-Peppermint{background-image:url(spritesmith-main-8.png);background-position:-593px -544px;width:81px;height:99px}.Mount_Icon_BearCub-Polar{background-image:url(spritesmith-main-8.png);background-position:-574px -1634px;width:81px;height:99px}.Mount_Icon_BearCub-Red{background-image:url(spritesmith-main-8.png);background-position:-82px -1634px;width:81px;height:99px}.Mount_Icon_BearCub-Shade{background-image:url(spritesmith-main-8.png);background-position:-164px -1634px;width:81px;height:99px}.Mount_Icon_BearCub-Skeleton{background-image:url(spritesmith-main-8.png);background-position:-246px -1634px;width:81px;height:99px}.Mount_Icon_BearCub-Spooky{background-image:url(spritesmith-main-8.png);background-position:-328px -1634px;width:81px;height:99px}.Mount_Icon_BearCub-White{background-image:url(spritesmith-main-8.png);background-position:-410px -1634px;width:81px;height:99px}.Mount_Icon_BearCub-Zombie{background-image:url(spritesmith-main-8.png);background-position:-492px -1634px;width:81px;height:99px}.Mount_Icon_Bunny-Base{background-image:url(spritesmith-main-8.png);background-position:-1634px -1060px;width:81px;height:99px}.Mount_Icon_Bunny-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-328px -845px;width:81px;height:99px}.Mount_Icon_Bunny-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-1244px -100px;width:81px;height:99px}.Mount_Icon_Bunny-Desert{background-image:url(spritesmith-main-9.png);background-position:-410px -845px;width:81px;height:99px}.Mount_Icon_Bunny-Golden{background-image:url(spritesmith-main-9.png);background-position:-492px -845px;width:81px;height:99px}.Mount_Icon_Bunny-Red{background-image:url(spritesmith-main-9.png);background-position:-574px -845px;width:81px;height:99px}.Mount_Icon_Bunny-Shade{background-image:url(spritesmith-main-9.png);background-position:-656px -845px;width:81px;height:99px}.Mount_Icon_Bunny-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-738px -845px;width:81px;height:99px}.Mount_Icon_Bunny-White{background-image:url(spritesmith-main-9.png);background-position:-820px -845px;width:81px;height:99px}.Mount_Icon_Bunny-Zombie{background-image:url(spritesmith-main-9.png);background-position:-902px -845px;width:81px;height:99px}.Mount_Icon_Cactus-Base{background-image:url(spritesmith-main-9.png);background-position:-998px 0;width:81px;height:99px}.Mount_Icon_Cactus-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-998px -100px;width:81px;height:99px}.Mount_Icon_Cactus-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-82px -1045px;width:81px;height:99px}.Mount_Icon_Cactus-Desert{background-image:url(spritesmith-main-9.png);background-position:-492px -1245px;width:81px;height:99px}.Mount_Icon_Cactus-Golden{background-image:url(spritesmith-main-9.png);background-position:-424px -100px;width:81px;height:99px}.Mount_Icon_Cactus-Peppermint{background-image:url(spritesmith-main-9.png);background-position:-424px -200px;width:81px;height:99px}.Mount_Icon_Cactus-Red{background-image:url(spritesmith-main-9.png);background-position:0 -345px;width:81px;height:99px}.Mount_Icon_Cactus-Shade{background-image:url(spritesmith-main-9.png);background-position:-82px -345px;width:81px;height:99px}.Mount_Icon_Cactus-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-164px -345px;width:81px;height:99px}.Mount_Icon_Cactus-Spooky{background-image:url(spritesmith-main-9.png);background-position:-246px -345px;width:81px;height:99px}.Mount_Icon_Cactus-White{background-image:url(spritesmith-main-9.png);background-position:-328px -345px;width:81px;height:99px}.Mount_Icon_Cactus-Zombie{background-image:url(spritesmith-main-9.png);background-position:-410px -345px;width:81px;height:99px}.Mount_Icon_Cheetah-Base{background-image:url(spritesmith-main-9.png);background-position:-506px 0;width:81px;height:99px}.Mount_Icon_Cheetah-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-506px -100px;width:81px;height:99px}.Mount_Icon_Cheetah-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-506px -200px;width:81px;height:99px}.Mount_Icon_Cheetah-Desert{background-image:url(spritesmith-main-9.png);background-position:-506px -300px;width:81px;height:99px}.Mount_Icon_Cheetah-Golden{background-image:url(spritesmith-main-9.png);background-position:0 -445px;width:81px;height:99px}.Mount_Icon_Cheetah-Red{background-image:url(spritesmith-main-9.png);background-position:-82px -445px;width:81px;height:99px}.Mount_Icon_Cheetah-Shade{background-image:url(spritesmith-main-9.png);background-position:-164px -445px;width:81px;height:99px}.Mount_Icon_Cheetah-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-246px -445px;width:81px;height:99px}.Mount_Icon_Cheetah-White{background-image:url(spritesmith-main-9.png);background-position:-328px -445px;width:81px;height:99px}.Mount_Icon_Cheetah-Zombie{background-image:url(spritesmith-main-9.png);background-position:-410px -445px;width:81px;height:99px}.Mount_Icon_Cuttlefish-Base{background-image:url(spritesmith-main-9.png);background-position:-492px -445px;width:81px;height:99px}.Mount_Icon_Cuttlefish-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-588px 0;width:81px;height:99px}.Mount_Icon_Cuttlefish-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-588px -100px;width:81px;height:99px}.Mount_Icon_Cuttlefish-Desert{background-image:url(spritesmith-main-9.png);background-position:-588px -200px;width:81px;height:99px}.Mount_Icon_Cuttlefish-Golden{background-image:url(spritesmith-main-9.png);background-position:-588px -300px;width:81px;height:99px}.Mount_Icon_Cuttlefish-Red{background-image:url(spritesmith-main-9.png);background-position:-588px -400px;width:81px;height:99px}.Mount_Icon_Cuttlefish-Shade{background-image:url(spritesmith-main-9.png);background-position:0 -545px;width:81px;height:99px}.Mount_Icon_Cuttlefish-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-82px -545px;width:81px;height:99px}.Mount_Icon_Cuttlefish-White{background-image:url(spritesmith-main-9.png);background-position:-164px -545px;width:81px;height:99px}.Mount_Icon_Cuttlefish-Zombie{background-image:url(spritesmith-main-9.png);background-position:-246px -545px;width:81px;height:99px}.Mount_Icon_Deer-Base{background-image:url(spritesmith-main-9.png);background-position:-328px -545px;width:81px;height:99px}.Mount_Icon_Deer-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-410px -545px;width:81px;height:99px}.Mount_Icon_Deer-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-492px -545px;width:81px;height:99px}.Mount_Icon_Deer-Desert{background-image:url(spritesmith-main-9.png);background-position:-574px -545px;width:81px;height:99px}.Mount_Icon_Deer-Golden{background-image:url(spritesmith-main-9.png);background-position:-670px 0;width:81px;height:99px}.Mount_Icon_Deer-Red{background-image:url(spritesmith-main-9.png);background-position:-670px -100px;width:81px;height:99px}.Mount_Icon_Deer-Shade{background-image:url(spritesmith-main-9.png);background-position:-670px -200px;width:81px;height:99px}.Mount_Icon_Deer-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-670px -300px;width:81px;height:99px}.Mount_Icon_Deer-White{background-image:url(spritesmith-main-9.png);background-position:-670px -400px;width:81px;height:99px}.Mount_Icon_Deer-Zombie{background-image:url(spritesmith-main-9.png);background-position:-670px -500px;width:81px;height:99px}.Mount_Icon_Dragon-Base{background-image:url(spritesmith-main-9.png);background-position:0 -645px;width:81px;height:99px}.Mount_Icon_Dragon-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-82px -645px;width:81px;height:99px}.Mount_Icon_Dragon-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-164px -645px;width:81px;height:99px}.Mount_Icon_Dragon-Desert{background-image:url(spritesmith-main-9.png);background-position:-246px -645px;width:81px;height:99px}.Mount_Icon_Dragon-Golden{background-image:url(spritesmith-main-9.png);background-position:-328px -645px;width:81px;height:99px}.Mount_Icon_Dragon-Peppermint{background-image:url(spritesmith-main-9.png);background-position:-410px -645px;width:81px;height:99px}.Mount_Icon_Dragon-Red{background-image:url(spritesmith-main-9.png);background-position:-492px -645px;width:81px;height:99px}.Mount_Icon_Dragon-Shade{background-image:url(spritesmith-main-9.png);background-position:-574px -645px;width:81px;height:99px}.Mount_Icon_Dragon-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-656px -645px;width:81px;height:99px}.Mount_Icon_Dragon-Spooky{background-image:url(spritesmith-main-9.png);background-position:-752px 0;width:81px;height:99px}.Mount_Icon_Dragon-White{background-image:url(spritesmith-main-9.png);background-position:-752px -100px;width:81px;height:99px}.Mount_Icon_Dragon-Zombie{background-image:url(spritesmith-main-9.png);background-position:-752px -200px;width:81px;height:99px}.Mount_Icon_Egg-Base{background-image:url(spritesmith-main-9.png);background-position:-752px -300px;width:81px;height:99px}.Mount_Icon_Egg-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-752px -400px;width:81px;height:99px}.Mount_Icon_Egg-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-752px -500px;width:81px;height:99px}.Mount_Icon_Egg-Desert{background-image:url(spritesmith-main-9.png);background-position:-752px -600px;width:81px;height:99px}.Mount_Icon_Egg-Golden{background-image:url(spritesmith-main-9.png);background-position:-834px 0;width:81px;height:99px}.Mount_Icon_Egg-Red{background-image:url(spritesmith-main-9.png);background-position:-834px -100px;width:81px;height:99px}.Mount_Icon_Egg-Shade{background-image:url(spritesmith-main-9.png);background-position:-834px -200px;width:81px;height:99px}.Mount_Icon_Egg-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-834px -300px;width:81px;height:99px}.Mount_Icon_Egg-White{background-image:url(spritesmith-main-9.png);background-position:-834px -400px;width:81px;height:99px}.Mount_Icon_Egg-Zombie{background-image:url(spritesmith-main-9.png);background-position:-834px -500px;width:81px;height:99px}.Mount_Icon_FlyingPig-Base{background-image:url(spritesmith-main-9.png);background-position:-834px -600px;width:81px;height:99px}.Mount_Icon_FlyingPig-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:0 -745px;width:81px;height:99px}.Mount_Icon_FlyingPig-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-82px -745px;width:81px;height:99px}.Mount_Icon_FlyingPig-Desert{background-image:url(spritesmith-main-9.png);background-position:-164px -745px;width:81px;height:99px}.Mount_Icon_FlyingPig-Golden{background-image:url(spritesmith-main-9.png);background-position:-246px -745px;width:81px;height:99px}.Mount_Icon_FlyingPig-Peppermint{background-image:url(spritesmith-main-9.png);background-position:-328px -745px;width:81px;height:99px}.Mount_Icon_FlyingPig-Red{background-image:url(spritesmith-main-9.png);background-position:-410px -745px;width:81px;height:99px}.Mount_Icon_FlyingPig-Shade{background-image:url(spritesmith-main-9.png);background-position:-492px -745px;width:81px;height:99px}.Mount_Icon_FlyingPig-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-574px -745px;width:81px;height:99px}.Mount_Icon_FlyingPig-Spooky{background-image:url(spritesmith-main-9.png);background-position:-656px -745px;width:81px;height:99px}.Mount_Icon_FlyingPig-White{background-image:url(spritesmith-main-9.png);background-position:-738px -745px;width:81px;height:99px}.Mount_Icon_FlyingPig-Zombie{background-image:url(spritesmith-main-9.png);background-position:-820px -745px;width:81px;height:99px}.Mount_Icon_Fox-Base{background-image:url(spritesmith-main-9.png);background-position:-916px 0;width:81px;height:99px}.Mount_Icon_Fox-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-916px -100px;width:81px;height:99px}.Mount_Icon_Fox-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-916px -200px;width:81px;height:99px}.Mount_Icon_Fox-Desert{background-image:url(spritesmith-main-9.png);background-position:-916px -300px;width:81px;height:99px}.Mount_Icon_Fox-Golden{background-image:url(spritesmith-main-9.png);background-position:-916px -400px;width:81px;height:99px}.Mount_Icon_Fox-Peppermint{background-image:url(spritesmith-main-9.png);background-position:-916px -500px;width:81px;height:99px}.Mount_Icon_Fox-Red{background-image:url(spritesmith-main-9.png);background-position:-916px -600px;width:81px;height:99px}.Mount_Icon_Fox-Shade{background-image:url(spritesmith-main-9.png);background-position:-916px -700px;width:81px;height:99px}.Mount_Icon_Fox-Skeleton{background-image:url(spritesmith-main-9.png);background-position:0 -845px;width:81px;height:99px}.Mount_Icon_Fox-Spooky{background-image:url(spritesmith-main-9.png);background-position:-82px -845px;width:81px;height:99px}.Mount_Icon_Fox-White{background-image:url(spritesmith-main-9.png);background-position:-164px -845px;width:81px;height:99px}.Mount_Icon_Fox-Zombie{background-image:url(spritesmith-main-9.png);background-position:-246px -845px;width:81px;height:99px}.Mount_Icon_Frog-Base{background-image:url(spritesmith-main-9.png);background-position:-212px -115px;width:105px;height:114px}.Mount_Icon_Frog-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-106px 0;width:105px;height:114px}.Mount_Icon_Frog-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-212px 0;width:105px;height:114px}.Mount_Icon_Frog-Desert{background-image:url(spritesmith-main-9.png);background-position:0 -115px;width:105px;height:114px}.Mount_Icon_Frog-Golden{background-image:url(spritesmith-main-9.png);background-position:-106px -115px;width:105px;height:114px}.Mount_Icon_Frog-Red{background-image:url(spritesmith-main-9.png);background-position:0 0;width:105px;height:114px}.Mount_Icon_Frog-Shade{background-image:url(spritesmith-main-9.png);background-position:-318px 0;width:105px;height:114px}.Mount_Icon_Frog-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-318px -115px;width:105px;height:114px}.Mount_Icon_Frog-White{background-image:url(spritesmith-main-9.png);background-position:0 -230px;width:105px;height:114px}.Mount_Icon_Frog-Zombie{background-image:url(spritesmith-main-9.png);background-position:-106px -230px;width:105px;height:114px}.Mount_Icon_Gryphon-Base{background-image:url(spritesmith-main-9.png);background-position:-998px -200px;width:81px;height:99px}.Mount_Icon_Gryphon-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-998px -300px;width:81px;height:99px}.Mount_Icon_Gryphon-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-998px -400px;width:81px;height:99px}.Mount_Icon_Gryphon-Desert{background-image:url(spritesmith-main-9.png);background-position:-998px -500px;width:81px;height:99px}.Mount_Icon_Gryphon-Golden{background-image:url(spritesmith-main-9.png);background-position:-998px -600px;width:81px;height:99px}.Mount_Icon_Gryphon-Red{background-image:url(spritesmith-main-9.png);background-position:-998px -700px;width:81px;height:99px}.Mount_Icon_Gryphon-RoyalPurple{background-image:url(spritesmith-main-9.png);background-position:-998px -800px;width:81px;height:99px}.Mount_Icon_Gryphon-Shade{background-image:url(spritesmith-main-9.png);background-position:0 -945px;width:81px;height:99px}.Mount_Icon_Gryphon-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-82px -945px;width:81px;height:99px}.Mount_Icon_Gryphon-White{background-image:url(spritesmith-main-9.png);background-position:-164px -945px;width:81px;height:99px}.Mount_Icon_Gryphon-Zombie{background-image:url(spritesmith-main-9.png);background-position:-246px -945px;width:81px;height:99px}.Mount_Icon_Hedgehog-Base{background-image:url(spritesmith-main-9.png);background-position:-328px -945px;width:81px;height:99px}.Mount_Icon_Hedgehog-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-410px -945px;width:81px;height:99px}.Mount_Icon_Hedgehog-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-492px -945px;width:81px;height:99px}.Mount_Icon_Hedgehog-Desert{background-image:url(spritesmith-main-9.png);background-position:-574px -945px;width:81px;height:99px}.Mount_Icon_Hedgehog-Golden{background-image:url(spritesmith-main-9.png);background-position:-656px -945px;width:81px;height:99px}.Mount_Icon_Hedgehog-Red{background-image:url(spritesmith-main-9.png);background-position:-738px -945px;width:81px;height:99px}.Mount_Icon_Hedgehog-Shade{background-image:url(spritesmith-main-9.png);background-position:-820px -945px;width:81px;height:99px}.Mount_Icon_Hedgehog-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-902px -945px;width:81px;height:99px}.Mount_Icon_Hedgehog-White{background-image:url(spritesmith-main-9.png);background-position:-984px -945px;width:81px;height:99px}.Mount_Icon_Hedgehog-Zombie{background-image:url(spritesmith-main-9.png);background-position:-1080px 0;width:81px;height:99px}.Mount_Icon_Horse-Base{background-image:url(spritesmith-main-9.png);background-position:-1080px -100px;width:81px;height:99px}.Mount_Icon_Horse-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-1080px -200px;width:81px;height:99px}.Mount_Icon_Horse-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-1080px -300px;width:81px;height:99px}.Mount_Icon_Horse-Desert{background-image:url(spritesmith-main-9.png);background-position:-1080px -400px;width:81px;height:99px}.Mount_Icon_Horse-Golden{background-image:url(spritesmith-main-9.png);background-position:-1080px -500px;width:81px;height:99px}.Mount_Icon_Horse-Red{background-image:url(spritesmith-main-9.png);background-position:-1080px -600px;width:81px;height:99px}.Mount_Icon_Horse-Shade{background-image:url(spritesmith-main-9.png);background-position:-1080px -700px;width:81px;height:99px}.Mount_Icon_Horse-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-1080px -800px;width:81px;height:99px}.Mount_Icon_Horse-White{background-image:url(spritesmith-main-9.png);background-position:-1080px -900px;width:81px;height:99px}.Mount_Icon_Horse-Zombie{background-image:url(spritesmith-main-9.png);background-position:0 -1045px;width:81px;height:99px}.Mount_Icon_JackOLantern-Base{background-image:url(spritesmith-main-9.png);background-position:-318px -230px;width:90px;height:105px}.Mount_Icon_LionCub-Base{background-image:url(spritesmith-main-9.png);background-position:-164px -1045px;width:81px;height:99px}.Mount_Icon_LionCub-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-246px -1045px;width:81px;height:99px}.Mount_Icon_LionCub-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-328px -1045px;width:81px;height:99px}.Mount_Icon_LionCub-Desert{background-image:url(spritesmith-main-9.png);background-position:-410px -1045px;width:81px;height:99px}.Mount_Icon_LionCub-Ethereal{background-image:url(spritesmith-main-9.png);background-position:-492px -1045px;width:81px;height:99px}.Mount_Icon_LionCub-Golden{background-image:url(spritesmith-main-9.png);background-position:-574px -1045px;width:81px;height:99px}.Mount_Icon_LionCub-Peppermint{background-image:url(spritesmith-main-9.png);background-position:-656px -1045px;width:81px;height:99px}.Mount_Icon_LionCub-Red{background-image:url(spritesmith-main-9.png);background-position:-738px -1045px;width:81px;height:99px}.Mount_Icon_LionCub-Shade{background-image:url(spritesmith-main-9.png);background-position:-820px -1045px;width:81px;height:99px}.Mount_Icon_LionCub-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-902px -1045px;width:81px;height:99px}.Mount_Icon_LionCub-Spooky{background-image:url(spritesmith-main-9.png);background-position:-984px -1045px;width:81px;height:99px}.Mount_Icon_LionCub-White{background-image:url(spritesmith-main-9.png);background-position:-1066px -1045px;width:81px;height:99px}.Mount_Icon_LionCub-Zombie{background-image:url(spritesmith-main-9.png);background-position:-1162px 0;width:81px;height:99px}.Mount_Icon_Mammoth-Base{background-image:url(spritesmith-main-9.png);background-position:-1162px -100px;width:81px;height:99px}.Mount_Icon_MantisShrimp-Base{background-image:url(spritesmith-main-9.png);background-position:-1162px -200px;width:81px;height:99px}.Mount_Icon_Octopus-Base{background-image:url(spritesmith-main-9.png);background-position:-1162px -300px;width:81px;height:99px}.Mount_Icon_Octopus-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-1162px -400px;width:81px;height:99px}.Mount_Icon_Octopus-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-1162px -500px;width:81px;height:99px}.Mount_Icon_Octopus-Desert{background-image:url(spritesmith-main-9.png);background-position:-1162px -600px;width:81px;height:99px}.Mount_Icon_Octopus-Golden{background-image:url(spritesmith-main-9.png);background-position:-1162px -700px;width:81px;height:99px}.Mount_Icon_Octopus-Red{background-image:url(spritesmith-main-9.png);background-position:-1162px -800px;width:81px;height:99px}.Mount_Icon_Octopus-Shade{background-image:url(spritesmith-main-9.png);background-position:-1162px -900px;width:81px;height:99px}.Mount_Icon_Octopus-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-1162px -1000px;width:81px;height:99px}.Mount_Icon_Octopus-White{background-image:url(spritesmith-main-9.png);background-position:-1244px 0;width:81px;height:99px}.Mount_Icon_Octopus-Zombie{background-image:url(spritesmith-main-9.png);background-position:-424px 0;width:81px;height:99px}.Mount_Icon_Orca-Base{background-image:url(spritesmith-main-9.png);background-position:-1244px -200px;width:81px;height:99px}.Mount_Icon_Owl-Base{background-image:url(spritesmith-main-9.png);background-position:-1244px -300px;width:81px;height:99px}.Mount_Icon_Owl-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-1244px -400px;width:81px;height:99px}.Mount_Icon_Owl-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-1244px -500px;width:81px;height:99px}.Mount_Icon_Owl-Desert{background-image:url(spritesmith-main-9.png);background-position:-1244px -600px;width:81px;height:99px}.Mount_Icon_Owl-Golden{background-image:url(spritesmith-main-9.png);background-position:-1244px -700px;width:81px;height:99px}.Mount_Icon_Owl-Red{background-image:url(spritesmith-main-9.png);background-position:-1244px -800px;width:81px;height:99px}.Mount_Icon_Owl-Shade{background-image:url(spritesmith-main-9.png);background-position:-1244px -900px;width:81px;height:99px}.Mount_Icon_Owl-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-1244px -1000px;width:81px;height:99px}.Mount_Icon_Owl-White{background-image:url(spritesmith-main-9.png);background-position:0 -1145px;width:81px;height:99px}.Mount_Icon_Owl-Zombie{background-image:url(spritesmith-main-9.png);background-position:-82px -1145px;width:81px;height:99px}.Mount_Icon_PandaCub-Base{background-image:url(spritesmith-main-9.png);background-position:-164px -1145px;width:81px;height:99px}.Mount_Icon_PandaCub-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-246px -1145px;width:81px;height:99px}.Mount_Icon_PandaCub-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-328px -1145px;width:81px;height:99px}.Mount_Icon_PandaCub-Desert{background-image:url(spritesmith-main-9.png);background-position:-410px -1145px;width:81px;height:99px}.Mount_Icon_PandaCub-Golden{background-image:url(spritesmith-main-9.png);background-position:-492px -1145px;width:81px;height:99px}.Mount_Icon_PandaCub-Peppermint{background-image:url(spritesmith-main-9.png);background-position:-574px -1145px;width:81px;height:99px}.Mount_Icon_PandaCub-Red{background-image:url(spritesmith-main-9.png);background-position:-656px -1145px;width:81px;height:99px}.Mount_Icon_PandaCub-Shade{background-image:url(spritesmith-main-9.png);background-position:-738px -1145px;width:81px;height:99px}.Mount_Icon_PandaCub-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-820px -1145px;width:81px;height:99px}.Mount_Icon_PandaCub-Spooky{background-image:url(spritesmith-main-9.png);background-position:-902px -1145px;width:81px;height:99px}.Mount_Icon_PandaCub-White{background-image:url(spritesmith-main-9.png);background-position:-984px -1145px;width:81px;height:99px}.Mount_Icon_PandaCub-Zombie{background-image:url(spritesmith-main-9.png);background-position:-1066px -1145px;width:81px;height:99px}.Mount_Icon_Parrot-Base{background-image:url(spritesmith-main-9.png);background-position:-1148px -1145px;width:81px;height:99px}.Mount_Icon_Parrot-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-1230px -1145px;width:81px;height:99px}.Mount_Icon_Parrot-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-1326px 0;width:81px;height:99px}.Mount_Icon_Parrot-Desert{background-image:url(spritesmith-main-9.png);background-position:-1326px -100px;width:81px;height:99px}.Mount_Icon_Parrot-Golden{background-image:url(spritesmith-main-9.png);background-position:-1326px -200px;width:81px;height:99px}.Mount_Icon_Parrot-Red{background-image:url(spritesmith-main-9.png);background-position:-1326px -300px;width:81px;height:99px}.Mount_Icon_Parrot-Shade{background-image:url(spritesmith-main-9.png);background-position:-1326px -400px;width:81px;height:99px}.Mount_Icon_Parrot-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-1326px -500px;width:81px;height:99px}.Mount_Icon_Parrot-White{background-image:url(spritesmith-main-9.png);background-position:-1326px -600px;width:81px;height:99px}.Mount_Icon_Parrot-Zombie{background-image:url(spritesmith-main-9.png);background-position:-1326px -700px;width:81px;height:99px}.Mount_Icon_Penguin-Base{background-image:url(spritesmith-main-9.png);background-position:-1326px -800px;width:81px;height:99px}.Mount_Icon_Penguin-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-1326px -900px;width:81px;height:99px}.Mount_Icon_Penguin-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-1326px -1000px;width:81px;height:99px}.Mount_Icon_Penguin-Desert{background-image:url(spritesmith-main-9.png);background-position:-1326px -1100px;width:81px;height:99px}.Mount_Icon_Penguin-Golden{background-image:url(spritesmith-main-9.png);background-position:0 -1245px;width:81px;height:99px}.Mount_Icon_Penguin-Red{background-image:url(spritesmith-main-9.png);background-position:-82px -1245px;width:81px;height:99px}.Mount_Icon_Penguin-Shade{background-image:url(spritesmith-main-9.png);background-position:-164px -1245px;width:81px;height:99px}.Mount_Icon_Penguin-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-246px -1245px;width:81px;height:99px}.Mount_Icon_Penguin-White{background-image:url(spritesmith-main-9.png);background-position:-328px -1245px;width:81px;height:99px}.Mount_Icon_Penguin-Zombie{background-image:url(spritesmith-main-9.png);background-position:-410px -1245px;width:81px;height:99px}.Mount_Icon_Phoenix-Base{background-image:url(spritesmith-main-9.png);background-position:-212px -230px;width:105px;height:105px}.Mount_Icon_Rat-Base{background-image:url(spritesmith-main-9.png);background-position:-574px -1245px;width:81px;height:99px}.Mount_Icon_Rat-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-656px -1245px;width:81px;height:99px}.Mount_Icon_Rat-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-738px -1245px;width:81px;height:99px}.Mount_Icon_Rat-Desert{background-image:url(spritesmith-main-9.png);background-position:-820px -1245px;width:81px;height:99px}.Mount_Icon_Rat-Golden{background-image:url(spritesmith-main-9.png);background-position:-902px -1245px;width:81px;height:99px}.Mount_Icon_Rat-Red{background-image:url(spritesmith-main-9.png);background-position:-984px -1245px;width:81px;height:99px}.Mount_Icon_Rat-Shade{background-image:url(spritesmith-main-9.png);background-position:-1066px -1245px;width:81px;height:99px}.Mount_Icon_Rat-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-1148px -1245px;width:81px;height:99px}.Mount_Icon_Rat-White{background-image:url(spritesmith-main-9.png);background-position:-1230px -1245px;width:81px;height:99px}.Mount_Icon_Rat-Zombie{background-image:url(spritesmith-main-9.png);background-position:-1312px -1245px;width:81px;height:99px}.Mount_Icon_Rock-Base{background-image:url(spritesmith-main-9.png);background-position:-1408px 0;width:81px;height:99px}.Mount_Icon_Rock-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-1408px -100px;width:81px;height:99px}.Mount_Icon_Rock-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-1408px -200px;width:81px;height:99px}.Mount_Icon_Rock-Desert{background-image:url(spritesmith-main-9.png);background-position:-1408px -300px;width:81px;height:99px}.Mount_Icon_Rock-Golden{background-image:url(spritesmith-main-9.png);background-position:-1408px -400px;width:81px;height:99px}.Mount_Icon_Rock-Red{background-image:url(spritesmith-main-9.png);background-position:-1408px -500px;width:81px;height:99px}.Mount_Icon_Rock-Shade{background-image:url(spritesmith-main-9.png);background-position:-1408px -600px;width:81px;height:99px}.Mount_Icon_Rock-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-1408px -700px;width:81px;height:99px}.Mount_Icon_Rock-White{background-image:url(spritesmith-main-9.png);background-position:-1408px -800px;width:81px;height:99px}.Mount_Icon_Rock-Zombie{background-image:url(spritesmith-main-9.png);background-position:-1408px -900px;width:81px;height:99px}.Mount_Icon_Rooster-Base{background-image:url(spritesmith-main-9.png);background-position:-1408px -1000px;width:81px;height:99px}.Mount_Icon_Rooster-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-1408px -1100px;width:81px;height:99px}.Mount_Icon_Rooster-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-1408px -1200px;width:81px;height:99px}.Mount_Icon_Rooster-Desert{background-image:url(spritesmith-main-9.png);background-position:0 -1345px;width:81px;height:99px}.Mount_Icon_Rooster-Golden{background-image:url(spritesmith-main-9.png);background-position:-82px -1345px;width:81px;height:99px}.Mount_Icon_Rooster-Red{background-image:url(spritesmith-main-9.png);background-position:-164px -1345px;width:81px;height:99px}.Mount_Icon_Rooster-Shade{background-image:url(spritesmith-main-9.png);background-position:-246px -1345px;width:81px;height:99px}.Mount_Icon_Rooster-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-328px -1345px;width:81px;height:99px}.Mount_Icon_Rooster-White{background-image:url(spritesmith-main-9.png);background-position:-410px -1345px;width:81px;height:99px}.Mount_Icon_Rooster-Zombie{background-image:url(spritesmith-main-9.png);background-position:-492px -1345px;width:81px;height:99px}.Mount_Icon_Seahorse-Base{background-image:url(spritesmith-main-9.png);background-position:-574px -1345px;width:81px;height:99px}.Mount_Icon_Seahorse-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-656px -1345px;width:81px;height:99px}.Mount_Icon_Seahorse-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-738px -1345px;width:81px;height:99px}.Mount_Icon_Seahorse-Desert{background-image:url(spritesmith-main-9.png);background-position:-820px -1345px;width:81px;height:99px}.Mount_Icon_Seahorse-Golden{background-image:url(spritesmith-main-9.png);background-position:-902px -1345px;width:81px;height:99px}.Mount_Icon_Seahorse-Red{background-image:url(spritesmith-main-9.png);background-position:-984px -1345px;width:81px;height:99px}.Mount_Icon_Seahorse-Shade{background-image:url(spritesmith-main-9.png);background-position:-1066px -1345px;width:81px;height:99px}.Mount_Icon_Seahorse-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-1148px -1345px;width:81px;height:99px}.Mount_Icon_Seahorse-White{background-image:url(spritesmith-main-9.png);background-position:-1230px -1345px;width:81px;height:99px}.Mount_Icon_Seahorse-Zombie{background-image:url(spritesmith-main-9.png);background-position:-1312px -1345px;width:81px;height:99px}.Mount_Icon_Sheep-Base{background-image:url(spritesmith-main-9.png);background-position:-1394px -1345px;width:81px;height:99px}.Mount_Icon_Sheep-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-1490px 0;width:81px;height:99px}.Mount_Icon_Sheep-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-1490px -100px;width:81px;height:99px}.Mount_Icon_Sheep-Desert{background-image:url(spritesmith-main-9.png);background-position:-1490px -200px;width:81px;height:99px}.Mount_Icon_Sheep-Golden{background-image:url(spritesmith-main-9.png);background-position:-1490px -300px;width:81px;height:99px}.Mount_Icon_Sheep-Red{background-image:url(spritesmith-main-9.png);background-position:-1490px -400px;width:81px;height:99px}.Mount_Icon_Sheep-Shade{background-image:url(spritesmith-main-9.png);background-position:-1490px -500px;width:81px;height:99px}.Mount_Icon_Sheep-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-1490px -600px;width:81px;height:99px}.Mount_Icon_Sheep-White{background-image:url(spritesmith-main-9.png);background-position:-1490px -700px;width:81px;height:99px}.Mount_Icon_Sheep-Zombie{background-image:url(spritesmith-main-9.png);background-position:-1490px -800px;width:81px;height:99px}.Mount_Icon_Slime-Base{background-image:url(spritesmith-main-9.png);background-position:-1490px -900px;width:81px;height:99px}.Mount_Icon_Slime-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-1490px -1000px;width:81px;height:99px}.Mount_Icon_Slime-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-1490px -1100px;width:81px;height:99px}.Mount_Icon_Slime-Desert{background-image:url(spritesmith-main-9.png);background-position:-1490px -1200px;width:81px;height:99px}.Mount_Icon_Slime-Golden{background-image:url(spritesmith-main-9.png);background-position:-1490px -1300px;width:81px;height:99px}.Mount_Icon_Slime-Red{background-image:url(spritesmith-main-9.png);background-position:0 -1445px;width:81px;height:99px}.Mount_Icon_Slime-Shade{background-image:url(spritesmith-main-9.png);background-position:-82px -1445px;width:81px;height:99px}.Mount_Icon_Slime-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-164px -1445px;width:81px;height:99px}.Mount_Icon_Slime-White{background-image:url(spritesmith-main-9.png);background-position:-246px -1445px;width:81px;height:99px}.Mount_Icon_Slime-Zombie{background-image:url(spritesmith-main-9.png);background-position:-328px -1445px;width:81px;height:99px}.Mount_Icon_Snake-Base{background-image:url(spritesmith-main-9.png);background-position:-410px -1445px;width:81px;height:99px}.Mount_Icon_Snake-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-492px -1445px;width:81px;height:99px}.Mount_Icon_Snake-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-574px -1445px;width:81px;height:99px}.Mount_Icon_Snake-Desert{background-image:url(spritesmith-main-9.png);background-position:-656px -1445px;width:81px;height:99px}.Mount_Icon_Snake-Golden{background-image:url(spritesmith-main-9.png);background-position:-738px -1445px;width:81px;height:99px}.Mount_Icon_Snake-Red{background-image:url(spritesmith-main-9.png);background-position:-820px -1445px;width:81px;height:99px}.Mount_Icon_Snake-Shade{background-image:url(spritesmith-main-9.png);background-position:-902px -1445px;width:81px;height:99px}.Mount_Icon_Snake-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-984px -1445px;width:81px;height:99px}.Mount_Icon_Snake-White{background-image:url(spritesmith-main-9.png);background-position:-1066px -1445px;width:81px;height:99px}.Mount_Icon_Snake-Zombie{background-image:url(spritesmith-main-9.png);background-position:-1148px -1445px;width:81px;height:99px}.Mount_Icon_Spider-Base{background-image:url(spritesmith-main-9.png);background-position:-1230px -1445px;width:81px;height:99px}.Mount_Icon_Spider-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-1312px -1445px;width:81px;height:99px}.Mount_Icon_Spider-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-1394px -1445px;width:81px;height:99px}.Mount_Icon_Spider-Desert{background-image:url(spritesmith-main-9.png);background-position:-1476px -1445px;width:81px;height:99px}.Mount_Icon_Spider-Golden{background-image:url(spritesmith-main-9.png);background-position:-1572px 0;width:81px;height:99px}.Mount_Icon_Spider-Red{background-image:url(spritesmith-main-9.png);background-position:-1572px -100px;width:81px;height:99px}.Mount_Icon_Spider-Shade{background-image:url(spritesmith-main-9.png);background-position:-1572px -200px;width:81px;height:99px}.Mount_Icon_Spider-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-1572px -300px;width:81px;height:99px}.Mount_Icon_Spider-White{background-image:url(spritesmith-main-9.png);background-position:-1572px -400px;width:81px;height:99px}.Mount_Icon_Spider-Zombie{background-image:url(spritesmith-main-9.png);background-position:-1572px -500px;width:81px;height:99px}.Mount_Icon_TRex-Base{background-image:url(spritesmith-main-9.png);background-position:-1572px -600px;width:81px;height:99px}.Mount_Icon_TRex-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-1572px -700px;width:81px;height:99px}.Mount_Icon_TRex-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-1572px -800px;width:81px;height:99px}.Mount_Icon_TRex-Desert{background-image:url(spritesmith-main-9.png);background-position:-1572px -900px;width:81px;height:99px}.Mount_Icon_TRex-Golden{background-image:url(spritesmith-main-9.png);background-position:-1572px -1000px;width:81px;height:99px}.Mount_Icon_TRex-Red{background-image:url(spritesmith-main-9.png);background-position:-1572px -1100px;width:81px;height:99px}.Mount_Icon_TRex-Shade{background-image:url(spritesmith-main-9.png);background-position:-1572px -1200px;width:81px;height:99px}.Mount_Icon_TRex-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-1572px -1300px;width:81px;height:99px}.Mount_Icon_TRex-White{background-image:url(spritesmith-main-9.png);background-position:-1572px -1400px;width:81px;height:99px}.Mount_Icon_TRex-Zombie{background-image:url(spritesmith-main-9.png);background-position:0 -1545px;width:81px;height:99px}.Mount_Icon_TigerCub-Base{background-image:url(spritesmith-main-9.png);background-position:-82px -1545px;width:81px;height:99px}.Mount_Icon_TigerCub-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-164px -1545px;width:81px;height:99px}.Mount_Icon_TigerCub-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-246px -1545px;width:81px;height:99px}.Mount_Icon_TigerCub-Desert{background-image:url(spritesmith-main-9.png);background-position:-328px -1545px;width:81px;height:99px}.Mount_Icon_TigerCub-Golden{background-image:url(spritesmith-main-9.png);background-position:-410px -1545px;width:81px;height:99px}.Mount_Icon_TigerCub-Peppermint{background-image:url(spritesmith-main-9.png);background-position:-492px -1545px;width:81px;height:99px}.Mount_Icon_TigerCub-Red{background-image:url(spritesmith-main-9.png);background-position:-574px -1545px;width:81px;height:99px}.Mount_Icon_TigerCub-Shade{background-image:url(spritesmith-main-9.png);background-position:-656px -1545px;width:81px;height:99px}.Mount_Icon_TigerCub-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-738px -1545px;width:81px;height:99px}.Mount_Icon_TigerCub-Spooky{background-image:url(spritesmith-main-9.png);background-position:-820px -1545px;width:81px;height:99px}.Mount_Icon_TigerCub-White{background-image:url(spritesmith-main-9.png);background-position:-902px -1545px;width:81px;height:99px}.Mount_Icon_TigerCub-Zombie{background-image:url(spritesmith-main-9.png);background-position:-984px -1545px;width:81px;height:99px}.Mount_Icon_Turkey-Base{background-image:url(spritesmith-main-9.png);background-position:-1066px -1545px;width:81px;height:99px}.Mount_Icon_Whale-Base{background-image:url(spritesmith-main-9.png);background-position:-1148px -1545px;width:81px;height:99px}.Mount_Icon_Whale-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-1230px -1545px;width:81px;height:99px}.Mount_Icon_Whale-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-1312px -1545px;width:81px;height:99px}.Mount_Icon_Whale-Desert{background-image:url(spritesmith-main-9.png);background-position:-1394px -1545px;width:81px;height:99px}.Mount_Icon_Whale-Golden{background-image:url(spritesmith-main-9.png);background-position:-1476px -1545px;width:81px;height:99px}.Mount_Icon_Whale-Red{background-image:url(spritesmith-main-9.png);background-position:-1558px -1545px;width:81px;height:99px}.Mount_Icon_Whale-Shade{background-image:url(spritesmith-main-9.png);background-position:-1654px 0;width:81px;height:99px}.Mount_Icon_Whale-Skeleton{background-image:url(spritesmith-main-9.png);background-position:-1654px -100px;width:81px;height:99px}.Mount_Icon_Whale-White{background-image:url(spritesmith-main-9.png);background-position:-1654px -200px;width:81px;height:99px}.Mount_Icon_Whale-Zombie{background-image:url(spritesmith-main-9.png);background-position:-1654px -300px;width:81px;height:99px}.Mount_Icon_Wolf-Base{background-image:url(spritesmith-main-9.png);background-position:-1654px -400px;width:81px;height:99px}.Mount_Icon_Wolf-CottonCandyBlue{background-image:url(spritesmith-main-9.png);background-position:-1654px -500px;width:81px;height:99px}.Mount_Icon_Wolf-CottonCandyPink{background-image:url(spritesmith-main-9.png);background-position:-1654px -600px;width:81px;height:99px}.Mount_Icon_Wolf-Desert{background-image:url(spritesmith-main-9.png);background-position:-1654px -700px;width:81px;height:99px}.Mount_Icon_Wolf-Golden{background-image:url(spritesmith-main-9.png);background-position:-1654px -800px;width:81px;height:99px}.Mount_Icon_Wolf-Peppermint{background-image:url(spritesmith-main-9.png);background-position:-1654px -900px;width:81px;height:99px}.head_special_0,.weapon_special_0{width:105px;height:105px;margin-left:-3px;margin-top:-18px}.broad_armor_special_0,.shield_special_0,.slim_armor_special_0{width:90px;height:90px}.weapon_special_critical{background:url(/common/img/sprites/backer-only/weapon_special_critical.gif) no-repeat;width:90px;height:90px;margin-left:-12px;margin-top:12px}.weapon_special_1{margin-left:-12px}.broad_armor_special_1,.head_special_1,.slim_armor_special_1{width:90px;height:90px}.head_special_0{background:url(/common/img/sprites/backer-only/BackerOnly-Equip-ShadeHelmet.gif) no-repeat}.head_special_1{background:url(/common/img/sprites/backer-only/ContributorOnly-Equip-CrystalHelmet.gif) no-repeat;margin-top:3px}.broad_armor_special_0,.slim_armor_special_0{background:url(/common/img/sprites/backer-only/BackerOnly-Equip-ShadeArmor.gif) no-repeat}.broad_armor_special_1,.slim_armor_special_1{background:url(/common/img/sprites/backer-only/ContributorOnly-Equip-CrystalArmor.gif) no-repeat}.shield_special_0{background:url(/common/img/sprites/backer-only/BackerOnly-Shield-TormentedSkull.gif) no-repeat}.weapon_special_0{background:url(/common/img/sprites/backer-only/BackerOnly-Weapon-DarkSoulsBlade.gif) no-repeat}.Pet-Wolf-Cerberus{width:105px;height:72px;background:url(/common/img/sprites/backer-only/BackerOnly-Pet-CerberusPup.gif) no-repeat}.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;width:219px;height:249px}.Gems{display:inline-block;margin-right:5px;border-style:none;margin-left:0;margin-top:2px}.inline-gems{vertical-align:middle;margin-left:0;display:inline-block}.customize-menu .locked{background-color:#727272}.achievement{float:left;clear:right;margin-right:10px}.multi-achievement{margin:auto;padding-left:.5em;padding-right:.5em}[class*=Mount_Body_],[class*=Mount_Head_]{margin-top:18px}.Pet_Currency_Gem{margin-top:5px;margin-bottom:5px} \ No newline at end of file diff --git a/common/dist/sprites/spritesmith-largeSprites-0.css b/common/dist/sprites/spritesmith-largeSprites-0.css index f476d79b78..2632bfb2e4 100644 --- a/common/dist/sprites/spritesmith-largeSprites-0.css +++ b/common/dist/sprites/spritesmith-largeSprites-0.css @@ -1,327 +1,363 @@ .2014_Fall_HealerPROMO2 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -472px -950px; + background-position: -943px -616px; width: 90px; height: 90px; } .2014_Fall_Mage_PROMO9 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -970px -392px; + background-position: -943px -252px; width: 120px; height: 90px; } .2014_Fall_RoguePROMO3 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -970px -589px; + background-position: -943px -343px; width: 105px; height: 90px; } .2014_Fall_Warrior_PROMO { background-image: url(spritesmith-largeSprites-0.png); - background-position: -563px -950px; + background-position: -306px -402px; width: 90px; height: 90px; } +.promo_android { + background-image: url(spritesmith-largeSprites-0.png); + background-position: -943px 0px; + width: 175px; + height: 175px; +} .promo_backtoschool { background-image: url(spritesmith-largeSprites-0.png); - background-position: -220px -220px; + background-position: -1119px -251px; width: 150px; height: 150px; } .promo_burnout { background-image: url(spritesmith-largeSprites-0.png); - background-position: 0px -220px; + background-position: -452px 0px; width: 219px; height: 240px; } .promo_classes_fall_2014 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -326px -664px; + background-position: -326px -724px; width: 321px; height: 100px; } .promo_classes_fall_2015 { background-image: url(spritesmith-largeSprites-0.png); - background-position: 0px -564px; + background-position: -430px -621px; width: 377px; height: 99px; } .promo_dilatoryDistress { background-image: url(spritesmith-largeSprites-0.png); - background-position: -836px -950px; + background-position: -452px -417px; width: 90px; height: 90px; } .promo_enchanted_armoire { background-image: url(spritesmith-largeSprites-0.png); - background-position: -378px -564px; + background-position: -499px -525px; width: 374px; height: 76px; } .promo_enchanted_armoire_201507 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -289px -859px; + background-position: -1119px -550px; width: 217px; height: 90px; } .promo_enchanted_armoire_201508 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -725px -859px; + background-position: -1119px -824px; width: 180px; height: 90px; } .promo_enchanted_armoire_201509 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -290px -950px; + background-position: -543px -417px; width: 90px; height: 90px; } +.promo_enchanted_armoire_201511 { + background-image: url(spritesmith-largeSprites-0.png); + background-position: -1225px -991px; + width: 122px; + height: 90px; +} .promo_habitica { background-image: url(spritesmith-largeSprites-0.png); - background-position: -723px -166px; + background-position: -452px -241px; width: 175px; height: 175px; } +.promo_habitica_sticker { + background-image: url(spritesmith-largeSprites-0.png); + background-position: 0px -220px; + width: 305px; + height: 304px; +} .promo_haunted_hair { background-image: url(spritesmith-largeSprites-0.png); - background-position: -970px -148px; + background-position: -1260px -402px; width: 100px; height: 137px; } .customize-option.promo_haunted_hair { background-image: url(spritesmith-largeSprites-0.png); - background-position: -995px -163px; + background-position: -1285px -417px; width: 60px; height: 60px; } .promo_item_notif { background-image: url(spritesmith-largeSprites-0.png); - background-position: -452px -347px; + background-position: -1119px 0px; width: 249px; height: 102px; } .promo_mystery_201405 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -199px -950px; + background-position: -380px -1008px; width: 90px; height: 90px; } .promo_mystery_201406 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -970px -680px; + background-position: -1270px -251px; width: 90px; height: 96px; } .promo_mystery_201407 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1111px -431px; + background-position: -1037px -525px; width: 42px; height: 62px; } .promo_mystery_201408 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1111px -155px; + background-position: -1300px -824px; width: 60px; height: 71px; } .promo_mystery_201409 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -745px -950px; + background-position: -306px -311px; width: 90px; height: 90px; } .promo_mystery_201410 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1111px -91px; + background-position: -1272px -915px; width: 72px; height: 63px; } .promo_mystery_201411 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -927px -950px; + background-position: -808px -621px; width: 90px; height: 90px; } .promo_mystery_201412 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1154px -361px; + background-position: -1037px -434px; width: 42px; height: 66px; } .promo_mystery_201501 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1111px -297px; + background-position: -1318px -732px; width: 48px; height: 63px; } .promo_mystery_201502 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -381px -950px; + background-position: -943px -707px; width: 90px; height: 90px; } .promo_mystery_201503 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1111px 0px; + background-position: -562px -1008px; width: 90px; height: 90px; } .promo_mystery_201504 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1111px -227px; + background-position: -1049px -343px; width: 60px; height: 69px; } .promo_mystery_201505 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -654px -950px; + background-position: -306px -220px; width: 90px; height: 90px; } .promo_mystery_201506 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1111px -361px; + background-position: -1064px -252px; width: 42px; height: 69px; } .promo_mystery_201507 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -970px -483px; + background-position: -1276px -103px; width: 90px; height: 105px; } .promo_mystery_201508 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -970px -777px; + background-position: -943px -525px; width: 93px; height: 90px; } .promo_mystery_201509 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1018px -950px; + background-position: -289px -1008px; + width: 90px; + height: 90px; +} +.promo_mystery_201510 { + background-image: url(spritesmith-largeSprites-0.png); + background-position: -943px -434px; + width: 93px; + height: 90px; +} +.promo_mystery_201511 { + background-image: url(spritesmith-largeSprites-0.png); + background-position: -471px -1008px; width: 90px; height: 90px; } .promo_mystery_3014 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -507px -859px; + background-position: -1119px -641px; width: 217px; height: 90px; } .promo_orca { background-image: url(spritesmith-largeSprites-0.png); - background-position: -970px -286px; + background-position: -1119px -991px; width: 105px; height: 105px; } .promo_partyhats { background-image: url(spritesmith-largeSprites-0.png); - background-position: -970px -868px; + background-position: -662px -835px; width: 115px; height: 47px; } .promo_pastel_skin { background-image: url(spritesmith-largeSprites-0.png); - background-position: 0px -775px; + background-position: 0px -835px; width: 330px; height: 83px; } .customize-option.promo_pastel_skin { background-image: url(spritesmith-largeSprites-0.png); - background-position: -25px -790px; + background-position: -25px -850px; width: 60px; height: 60px; } .promo_pet_skins { background-image: url(spritesmith-largeSprites-0.png); - background-position: -970px 0px; + background-position: -1119px -402px; width: 140px; height: 147px; } .customize-option.promo_pet_skins { background-image: url(spritesmith-largeSprites-0.png); - background-position: -995px -15px; + background-position: -1144px -417px; width: 60px; height: 60px; } .promo_shimmer_hair { background-image: url(spritesmith-largeSprites-0.png); - background-position: -331px -775px; + background-position: -331px -835px; width: 330px; height: 83px; } .customize-option.promo_shimmer_hair { background-image: url(spritesmith-largeSprites-0.png); - background-position: -356px -790px; + background-position: -356px -850px; width: 60px; height: 60px; } .promo_splashyskins { background-image: url(spritesmith-largeSprites-0.png); - background-position: 0px -950px; + background-position: -1119px -732px; width: 198px; height: 91px; } .customize-option.promo_splashyskins { background-image: url(spritesmith-largeSprites-0.png); - background-position: -25px -965px; + background-position: -1144px -747px; width: 60px; height: 60px; } .promo_springclasses2014 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -430px -461px; + background-position: -648px -724px; width: 288px; height: 90px; } .promo_springclasses2015 { background-image: url(spritesmith-largeSprites-0.png); - background-position: 0px -859px; + background-position: 0px -1008px; width: 288px; height: 90px; } .promo_summer_classes_2014 { background-image: url(spritesmith-largeSprites-0.png); - background-position: 0px -461px; + background-position: 0px -621px; width: 429px; height: 102px; } .promo_summer_classes_2015 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -648px -664px; + background-position: 0px -919px; width: 300px; height: 88px; } .promo_updos { background-image: url(spritesmith-largeSprites-0.png); - background-position: -723px -342px; + background-position: -1119px -103px; width: 156px; height: 147px; } .promo_veteran_pets { background-image: url(spritesmith-largeSprites-0.png); - background-position: -753px -564px; + background-position: -943px -176px; width: 146px; height: 75px; } .promo_winterclasses2015 { background-image: url(spritesmith-largeSprites-0.png); - background-position: 0px -664px; + background-position: 0px -724px; width: 325px; height: 110px; } .promo_winteryhair { background-image: url(spritesmith-largeSprites-0.png); - background-position: -220px -371px; + background-position: -1119px -915px; width: 152px; height: 75px; } .customize-option.promo_winteryhair { background-image: url(spritesmith-largeSprites-0.png); - background-position: -245px -386px; + background-position: -1144px -930px; width: 60px; height: 60px; } +.avatar_variety { + background-image: url(spritesmith-largeSprites-0.png); + background-position: 0px -525px; + width: 498px; + height: 95px; +} .party_preview { background-image: url(spritesmith-largeSprites-0.png); background-position: 0px 0px; @@ -330,19 +366,19 @@ } .welcome_basic_avatars { background-image: url(spritesmith-largeSprites-0.png); - background-position: -452px -181px; + background-position: -672px -347px; width: 246px; height: 165px; } .welcome_promo_party { background-image: url(spritesmith-largeSprites-0.png); - background-position: -452px 0px; + background-position: -672px 0px; width: 270px; height: 180px; } .welcome_sample_tasks { background-image: url(spritesmith-largeSprites-0.png); - background-position: -723px 0px; + background-position: -672px -181px; width: 246px; height: 165px; } diff --git a/common/dist/sprites/spritesmith-largeSprites-0.png b/common/dist/sprites/spritesmith-largeSprites-0.png index 9c1e272534..4874189df2 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 6291b1b808..aa55acb916 100644 --- a/common/dist/sprites/spritesmith-main-0.css +++ b/common/dist/sprites/spritesmith-main-0.css @@ -1,252 +1,474 @@ .achievement-alien { background-image: url(spritesmith-main-0.png); - background-position: -1703px -533px; + background-position: -1208px -1180px; width: 24px; height: 26px; } +.achievement-alien2x { + background-image: url(spritesmith-main-0.png); + background-position: -1223px -239px; + width: 48px; + height: 52px; +} .achievement-alpha { background-image: url(spritesmith-main-0.png); - background-position: -1703px -182px; + background-position: -1183px -1180px; width: 24px; height: 26px; } .achievement-armor { background-image: url(spritesmith-main-0.png); - background-position: -1678px -533px; + background-position: -1232px -1127px; width: 24px; height: 26px; } +.achievement-armor2x { + background-image: url(spritesmith-main-0.png); + background-position: -1223px -330px; + width: 48px; + height: 52px; +} .achievement-boot { background-image: url(spritesmith-main-0.png); - background-position: -1728px -506px; + background-position: -1208px -1089px; width: 24px; height: 26px; } +.achievement-boot2x { + background-image: url(spritesmith-main-0.png); + background-position: -1223px -512px; + width: 48px; + height: 52px; +} .achievement-bow { background-image: url(spritesmith-main-0.png); - background-position: -1703px -506px; + background-position: -1232px -1036px; width: 24px; height: 26px; } +.achievement-bow2x { + background-image: url(spritesmith-main-0.png); + background-position: -1223px -694px; + width: 48px; + height: 52px; +} .achievement-burnout { background-image: url(spritesmith-main-0.png); - background-position: -1678px -506px; + background-position: -1248px -929px; width: 24px; height: 26px; } +.achievement-burnout2x { + background-image: url(spritesmith-main-0.png); + background-position: -1223px -876px; + width: 48px; + height: 52px; +} .achievement-cactus { background-image: url(spritesmith-main-0.png); - background-position: -1728px -479px; + background-position: -1248px -838px; width: 24px; height: 26px; } +.achievement-cactus2x { + background-image: url(spritesmith-main-0.png); + background-position: -1181px -967px; + width: 48px; + height: 52px; +} .achievement-cake { background-image: url(spritesmith-main-0.png); - background-position: -1703px -479px; + background-position: -1248px -747px; width: 24px; height: 26px; } +.achievement-cake2x { + background-image: url(spritesmith-main-0.png); + background-position: -1183px -1127px; + width: 48px; + height: 52px; +} .achievement-cave { background-image: url(spritesmith-main-0.png); - background-position: -1678px -479px; + background-position: -1248px -656px; width: 24px; height: 26px; } +.achievement-cave2x { + background-image: url(spritesmith-main-0.png); + background-position: -1365px -1309px; + width: 48px; + height: 52px; +} .achievement-coffin { background-image: url(spritesmith-main-0.png); - background-position: -1728px -452px; + background-position: -1248px -565px; width: 24px; height: 26px; } .achievement-comment { background-image: url(spritesmith-main-0.png); - background-position: -1703px -452px; + background-position: -1223px -565px; width: 24px; height: 26px; } +.achievement-comment2x { + background-image: url(spritesmith-main-0.png); + background-position: -1547px -1491px; + width: 48px; + height: 52px; +} .achievement-costumeContest { background-image: url(spritesmith-main-0.png); - background-position: -1678px -452px; + background-position: -1223px -474px; width: 24px; height: 26px; } +.achievement-costumeContest2x { + background-image: url(spritesmith-main-0.png); + background-position: -322px -1582px; + width: 48px; + height: 52px; +} .achievement-dilatory { background-image: url(spritesmith-main-0.png); - background-position: -1728px -425px; + background-position: -1223px -383px; width: 24px; height: 26px; } .achievement-firefox { background-image: url(spritesmith-main-0.png); - background-position: -1703px -425px; + background-position: -1248px -292px; width: 24px; height: 26px; } .achievement-greeting { background-image: url(spritesmith-main-0.png); - background-position: -1678px -425px; + background-position: -1223px -292px; width: 24px; height: 26px; } +.achievement-greeting2x { + background-image: url(spritesmith-main-0.png); + background-position: -420px -1582px; + width: 48px; + height: 52px; +} .achievement-habitBirthday { background-image: url(spritesmith-main-0.png); - background-position: -1728px -398px; + background-position: -1223px -201px; width: 24px; height: 26px; } +.achievement-habitBirthday2x { + background-image: url(spritesmith-main-0.png); + background-position: -518px -1582px; + width: 48px; + height: 52px; +} .achievement-habiticaDay { background-image: url(spritesmith-main-0.png); - background-position: -1703px -398px; + background-position: -1298px -1183px; width: 24px; height: 26px; } +.achievement-habiticaDay2x { + background-image: url(spritesmith-main-0.png); + background-position: -616px -1582px; + width: 48px; + height: 52px; +} .achievement-heart { background-image: url(spritesmith-main-0.png); - background-position: -1678px -398px; + background-position: -1414px -1274px; width: 24px; height: 26px; } +.achievement-heart2x { + background-image: url(spritesmith-main-0.png); + background-position: -665px -1582px; + width: 48px; + height: 52px; +} +.achievement-karaoke-2x { + background-image: url(spritesmith-main-0.png); + background-position: -763px -1582px; + width: 48px; + height: 52px; +} .achievement-karaoke { background-image: url(spritesmith-main-0.png); - background-position: -1728px -371px; + background-position: -1505px -1365px; width: 24px; height: 26px; } .achievement-ninja { background-image: url(spritesmith-main-0.png); - background-position: -1703px -371px; + background-position: -1480px -1365px; width: 24px; height: 26px; } +.achievement-ninja2x { + background-image: url(spritesmith-main-0.png); + background-position: -861px -1582px; + width: 48px; + height: 52px; +} .achievement-nye { background-image: url(spritesmith-main-0.png); - background-position: -1678px -371px; + background-position: -1596px -1456px; width: 24px; height: 26px; } +.achievement-nye2x { + background-image: url(spritesmith-main-0.png); + background-position: -959px -1582px; + width: 48px; + height: 52px; +} .achievement-perfect { background-image: url(spritesmith-main-0.png); - background-position: -1678px -182px; + background-position: -1546px -1456px; width: 24px; height: 26px; } +.achievement-perfect2x { + background-image: url(spritesmith-main-0.png); + background-position: -1223px -148px; + width: 48px; + height: 52px; +} .achievement-rat { background-image: url(spritesmith-main-0.png); - background-position: -1703px -344px; + background-position: -1248px -383px; width: 24px; height: 26px; } +.achievement-rat2x { + background-image: url(spritesmith-main-0.png); + background-position: -1155px -1582px; + width: 48px; + height: 52px; +} .achievement-seafoam { background-image: url(spritesmith-main-0.png); - background-position: -1678px -344px; + background-position: -1662px -1547px; width: 24px; height: 26px; } +.achievement-seafoam2x { + background-image: url(spritesmith-main-0.png); + background-position: -1106px -1582px; + width: 48px; + height: 52px; +} .achievement-shield { background-image: url(spritesmith-main-0.png); - background-position: -1728px -317px; + background-position: -1687px -1547px; width: 24px; height: 26px; } +.achievement-shield2x { + background-image: url(spritesmith-main-0.png); + background-position: -1008px -1582px; + width: 48px; + height: 52px; +} .achievement-shinySeed { background-image: url(spritesmith-main-0.png); - background-position: -1703px -317px; + background-position: -1571px -1456px; width: 24px; height: 26px; } +.achievement-shinySeed2x { + background-image: url(spritesmith-main-0.png); + background-position: -910px -1582px; + width: 48px; + height: 52px; +} .achievement-snowball { background-image: url(spritesmith-main-0.png); - background-position: -1678px -317px; + background-position: -1455px -1365px; width: 24px; height: 26px; } +.achievement-snowball2x { + background-image: url(spritesmith-main-0.png); + background-position: -812px -1582px; + width: 48px; + height: 52px; +} .achievement-spookDust { background-image: url(spritesmith-main-0.png); - background-position: -1728px -290px; + background-position: -1364px -1274px; width: 24px; height: 26px; } +.achievement-spookDust2x { + background-image: url(spritesmith-main-0.png); + background-position: -714px -1582px; + width: 48px; + height: 52px; +} .achievement-stoikalm { background-image: url(spritesmith-main-0.png); - background-position: -1703px -290px; + background-position: -1389px -1274px; width: 24px; height: 26px; } .achievement-sun { background-image: url(spritesmith-main-0.png); - background-position: -1678px -290px; + background-position: -1273px -1183px; width: 24px; height: 26px; } +.achievement-sun2x { + background-image: url(spritesmith-main-0.png); + background-position: -567px -1582px; + width: 48px; + height: 52px; +} .achievement-sword { background-image: url(spritesmith-main-0.png); - background-position: -1728px -263px; + background-position: -1323px -1183px; width: 24px; height: 26px; } +.achievement-sword2x { + background-image: url(spritesmith-main-0.png); + background-position: -469px -1582px; + width: 48px; + height: 52px; +} .achievement-thankyou { background-image: url(spritesmith-main-0.png); - background-position: -1703px -263px; + background-position: -1248px -201px; width: 24px; height: 26px; } +.achievement-thankyou2x { + background-image: url(spritesmith-main-0.png); + background-position: -371px -1582px; + width: 48px; + height: 52px; +} .achievement-thermometer { background-image: url(spritesmith-main-0.png); - background-position: -1678px -263px; + background-position: -1637px -1547px; width: 24px; height: 26px; } +.achievement-thermometer2x { + background-image: url(spritesmith-main-0.png); + background-position: -273px -1582px; + width: 48px; + height: 52px; +} .achievement-tree { background-image: url(spritesmith-main-0.png); - background-position: -1728px -236px; + background-position: -1248px -474px; width: 24px; height: 26px; } +.achievement-tree2x { + background-image: url(spritesmith-main-0.png); + background-position: -1456px -1400px; + width: 48px; + height: 52px; +} .achievement-triadbingo { background-image: url(spritesmith-main-0.png); - background-position: -1703px -236px; + background-position: -1223px -656px; width: 24px; height: 26px; } +.achievement-triadbingo2x { + background-image: url(spritesmith-main-0.png); + background-position: -1274px -1218px; + width: 48px; + height: 52px; +} .achievement-ultimate-healer { background-image: url(spritesmith-main-0.png); - background-position: -1678px -236px; + background-position: -1223px -747px; width: 24px; height: 26px; } +.achievement-ultimate-healer2x { + background-image: url(spritesmith-main-0.png); + background-position: -1183px -1036px; + width: 48px; + height: 52px; +} .achievement-ultimate-mage { background-image: url(spritesmith-main-0.png); - background-position: -1728px -209px; + background-position: -1223px -838px; width: 24px; height: 26px; } +.achievement-ultimate-mage2x { + background-image: url(spritesmith-main-0.png); + background-position: -1132px -967px; + width: 48px; + height: 52px; +} .achievement-ultimate-rogue { background-image: url(spritesmith-main-0.png); - background-position: -1703px -209px; + background-position: -1223px -929px; width: 24px; height: 26px; } +.achievement-ultimate-rogue2x { + background-image: url(spritesmith-main-0.png); + background-position: -1223px -785px; + width: 48px; + height: 52px; +} .achievement-ultimate-warrior { background-image: url(spritesmith-main-0.png); - background-position: -1678px -209px; + background-position: -1230px -967px; width: 24px; height: 26px; } +.achievement-ultimate-warrior2x { + background-image: url(spritesmith-main-0.png); + background-position: -1223px -603px; + width: 48px; + height: 52px; +} .achievement-valentine { background-image: url(spritesmith-main-0.png); - background-position: -1728px -182px; + background-position: -1183px -1089px; width: 24px; height: 26px; } +.achievement-valentine2x { + background-image: url(spritesmith-main-0.png); + background-position: -1223px -421px; + width: 48px; + height: 52px; +} .achievement-wolf { background-image: url(spritesmith-main-0.png); - background-position: -1728px -344px; + background-position: -1233px -1089px; width: 24px; height: 26px; } +.achievement-wolf2x { + background-image: url(spritesmith-main-0.png); + background-position: -1057px -1582px; + width: 48px; + height: 52px; +} +.background_alpine_slopes { + background-image: url(spritesmith-main-0.png); + background-position: -705px -592px; + width: 140px; + height: 147px; +} .background_autumn_forest { background-image: url(spritesmith-main-0.png); - background-position: -282px -592px; + background-position: -423px -444px; width: 140px; height: 147px; } @@ -258,82 +480,88 @@ } .background_blacksmithy { background-image: url(spritesmith-main-0.png); - background-position: -709px 0px; + background-position: -709px -444px; width: 140px; height: 147px; } .background_cherry_trees { background-image: url(spritesmith-main-0.png); - background-position: -709px -148px; + background-position: -141px -592px; width: 140px; height: 147px; } .background_clouds { background-image: url(spritesmith-main-0.png); - background-position: -709px -444px; + background-position: -564px -592px; width: 140px; height: 147px; } .background_coral_reef { background-image: url(spritesmith-main-0.png); - background-position: -705px -592px; + background-position: -850px -296px; width: 140px; height: 147px; } .background_crystal_cave { background-image: url(spritesmith-main-0.png); - background-position: -850px -296px; + background-position: 0px -740px; width: 140px; height: 147px; } .background_dilatory_ruins { background-image: url(spritesmith-main-0.png); - background-position: -850px -444px; + background-position: -141px -740px; width: 140px; height: 147px; } .background_distant_castle { background-image: url(spritesmith-main-0.png); - background-position: 0px -888px; + background-position: -705px -888px; width: 140px; height: 147px; } .background_drifting_raft { background-image: url(spritesmith-main-0.png); - background-position: -141px -888px; + background-position: -846px -888px; width: 140px; height: 147px; } .background_dusty_canyons { background-image: url(spritesmith-main-0.png); - background-position: -282px -888px; + background-position: -987px -888px; width: 140px; height: 147px; } .background_fairy_ring { - background-image: url(spritesmith-main-0.png); - background-position: -568px 0px; - width: 140px; - height: 147px; -} -.background_floral_meadow { background-image: url(spritesmith-main-0.png); background-position: -568px -148px; width: 140px; height: 147px; } -.background_forest { +.background_floating_islands { background-image: url(spritesmith-main-0.png); background-position: -568px -296px; width: 140px; height: 147px; } -.background_frigid_peak { +.background_floral_meadow { background-image: url(spritesmith-main-0.png); background-position: 0px -444px; width: 140px; height: 147px; } +.background_forest { + background-image: url(spritesmith-main-0.png); + background-position: -141px -444px; + width: 140px; + height: 147px; +} +.background_frigid_peak { + background-image: url(spritesmith-main-0.png); + background-position: -282px -444px; + width: 140px; + height: 147px; +} .background_giant_wave { background-image: url(spritesmith-main-0.png); background-position: -284px 0px; @@ -342,19 +570,19 @@ } .background_graveyard { background-image: url(spritesmith-main-0.png); - background-position: -282px -444px; + background-position: -564px -444px; width: 140px; height: 147px; } .background_gumdrop_land { background-image: url(spritesmith-main-0.png); - background-position: -423px -444px; + background-position: -709px 0px; width: 140px; height: 147px; } .background_harvest_feast { background-image: url(spritesmith-main-0.png); - background-position: -564px -444px; + background-position: -709px -148px; width: 140px; height: 147px; } @@ -372,7 +600,7 @@ } .background_haunted_house { background-image: url(spritesmith-main-0.png); - background-position: -709px -296px; + background-position: 0px -592px; width: 140px; height: 147px; } @@ -384,2581 +612,2293 @@ } .background_iceberg { background-image: url(spritesmith-main-0.png); - background-position: 0px -592px; + background-position: -282px -592px; width: 140px; height: 147px; } .background_island_waterfalls { background-image: url(spritesmith-main-0.png); - background-position: -141px -592px; + background-position: -423px -592px; width: 140px; height: 147px; } .background_marble_temple { background-image: url(spritesmith-main-0.png); - background-position: -142px 0px; + background-position: 0px 0px; width: 141px; height: 147px; } .background_market { background-image: url(spritesmith-main-0.png); - background-position: -423px -592px; + background-position: -568px 0px; width: 140px; height: 147px; } .background_mountain_lake { - background-image: url(spritesmith-main-0.png); - background-position: -564px -592px; - width: 140px; - height: 147px; -} -.background_open_waters { - background-image: url(spritesmith-main-0.png); - background-position: 0px 0px; - width: 141px; - height: 147px; -} -.background_pagodas { background-image: url(spritesmith-main-0.png); background-position: -850px 0px; width: 140px; height: 147px; } -.background_pumpkin_patch { +.background_night_dunes { background-image: url(spritesmith-main-0.png); background-position: -850px -148px; width: 140px; height: 147px; } -.background_pyramids { +.background_open_waters { background-image: url(spritesmith-main-0.png); background-position: -426px -148px; width: 141px; height: 147px; } -.background_rolling_hills { +.background_pagodas { background-image: url(spritesmith-main-0.png); - background-position: 0px -296px; - width: 141px; + background-position: -850px -444px; + width: 140px; height: 147px; } -.background_seafarer_ship { +.background_pumpkin_patch { background-image: url(spritesmith-main-0.png); background-position: -850px -592px; width: 140px; height: 147px; } -.background_shimmery_bubbles { +.background_pyramids { background-image: url(spritesmith-main-0.png); - background-position: 0px -740px; - width: 140px; + background-position: 0px -296px; + width: 141px; height: 147px; } -.background_slimy_swamp { - background-image: url(spritesmith-main-0.png); - background-position: -141px -740px; - width: 140px; - height: 147px; -} -.background_snowy_pines { - background-image: url(spritesmith-main-0.png); - background-position: -282px -740px; - width: 140px; - height: 147px; -} -.background_south_pole { - background-image: url(spritesmith-main-0.png); - background-position: -423px -740px; - width: 140px; - height: 147px; -} -.background_spring_rain { - background-image: url(spritesmith-main-0.png); - background-position: -564px -740px; - width: 140px; - height: 147px; -} -.background_stable { - background-image: url(spritesmith-main-0.png); - background-position: -705px -740px; - width: 140px; - height: 147px; -} -.background_stained_glass { - background-image: url(spritesmith-main-0.png); - background-position: -846px -740px; - width: 140px; - height: 147px; -} -.background_starry_skies { - background-image: url(spritesmith-main-0.png); - background-position: -991px 0px; - width: 140px; - height: 147px; -} -.background_sunken_ship { - background-image: url(spritesmith-main-0.png); - background-position: -991px -148px; - width: 140px; - height: 147px; -} -.background_sunset_meadow { - background-image: url(spritesmith-main-0.png); - background-position: -991px -296px; - width: 140px; - height: 147px; -} -.background_sunset_savannah { - background-image: url(spritesmith-main-0.png); - background-position: -991px -444px; - width: 140px; - height: 147px; -} -.background_swarming_darkness { - background-image: url(spritesmith-main-0.png); - background-position: -991px -592px; - width: 140px; - height: 147px; -} -.background_tavern { - background-image: url(spritesmith-main-0.png); - background-position: -991px -740px; - width: 140px; - height: 147px; -} -.background_thunderstorm { +.background_rolling_hills { background-image: url(spritesmith-main-0.png); background-position: -142px -296px; width: 141px; height: 147px; } -.background_twinkly_lights { +.background_seafarer_ship { + background-image: url(spritesmith-main-0.png); + background-position: -282px -740px; + width: 140px; + height: 147px; +} +.background_shimmery_bubbles { + background-image: url(spritesmith-main-0.png); + background-position: -423px -740px; + width: 140px; + height: 147px; +} +.background_slimy_swamp { + background-image: url(spritesmith-main-0.png); + background-position: -564px -740px; + width: 140px; + height: 147px; +} +.background_snowy_pines { + background-image: url(spritesmith-main-0.png); + background-position: -705px -740px; + width: 140px; + height: 147px; +} +.background_snowy_sunrise { + background-image: url(spritesmith-main-0.png); + background-position: -846px -740px; + width: 140px; + height: 147px; +} +.background_south_pole { + background-image: url(spritesmith-main-0.png); + background-position: -991px 0px; + width: 140px; + height: 147px; +} +.background_spring_rain { + background-image: url(spritesmith-main-0.png); + background-position: -991px -148px; + width: 140px; + height: 147px; +} +.background_stable { + background-image: url(spritesmith-main-0.png); + background-position: -991px -296px; + width: 140px; + height: 147px; +} +.background_stained_glass { + background-image: url(spritesmith-main-0.png); + background-position: -991px -444px; + width: 140px; + height: 147px; +} +.background_starry_skies { + background-image: url(spritesmith-main-0.png); + background-position: -991px -592px; + width: 140px; + height: 147px; +} +.background_sunken_ship { + background-image: url(spritesmith-main-0.png); + background-position: -991px -740px; + width: 140px; + height: 147px; +} +.background_sunset_meadow { + background-image: url(spritesmith-main-0.png); + background-position: 0px -888px; + width: 140px; + height: 147px; +} +.background_sunset_oasis { + background-image: url(spritesmith-main-0.png); + background-position: -141px -888px; + width: 140px; + height: 147px; +} +.background_sunset_savannah { + background-image: url(spritesmith-main-0.png); + background-position: -282px -888px; + width: 140px; + height: 147px; +} +.background_swarming_darkness { + background-image: url(spritesmith-main-0.png); + background-position: -423px -888px; + width: 140px; + height: 147px; +} +.background_tavern { + background-image: url(spritesmith-main-0.png); + background-position: -564px -888px; + width: 140px; + height: 147px; +} +.background_thunderstorm { background-image: url(spritesmith-main-0.png); background-position: -284px -296px; width: 141px; height: 147px; } -.background_twinkly_party_lights { +.background_twinkly_lights { background-image: url(spritesmith-main-0.png); background-position: -426px -296px; width: 141px; height: 147px; } +.background_twinkly_party_lights { + background-image: url(spritesmith-main-0.png); + background-position: -142px 0px; + width: 141px; + height: 147px; +} .background_volcano { background-image: url(spritesmith-main-0.png); - background-position: -141px -444px; + background-position: -1132px 0px; + width: 140px; + height: 147px; +} +.background_winter_town { + background-image: url(spritesmith-main-0.png); + background-position: -709px -296px; width: 140px; height: 147px; } .hair_beard_1_TRUred { background-image: url(spritesmith-main-0.png); - background-position: -910px -1127px; + background-position: -91px -1309px; width: 90px; height: 90px; } .customize-option.hair_beard_1_TRUred { background-image: url(spritesmith-main-0.png); - background-position: -935px -1142px; + background-position: -116px -1324px; width: 60px; height: 60px; } .hair_beard_1_aurora { background-image: url(spritesmith-main-0.png); - background-position: -1001px -1127px; + background-position: -182px -1309px; width: 90px; height: 90px; } .customize-option.hair_beard_1_aurora { background-image: url(spritesmith-main-0.png); - background-position: -1026px -1142px; + background-position: -207px -1324px; width: 60px; height: 60px; } .hair_beard_1_black { background-image: url(spritesmith-main-0.png); - background-position: -1092px -1127px; + background-position: -273px -1309px; width: 90px; height: 90px; } .customize-option.hair_beard_1_black { background-image: url(spritesmith-main-0.png); - background-position: -1117px -1142px; + background-position: -298px -1324px; width: 60px; height: 60px; } .hair_beard_1_blond { background-image: url(spritesmith-main-0.png); - background-position: -1223px 0px; + background-position: -364px -1309px; width: 90px; height: 90px; } .customize-option.hair_beard_1_blond { background-image: url(spritesmith-main-0.png); - background-position: -1248px -15px; + background-position: -389px -1324px; width: 60px; height: 60px; } .hair_beard_1_blue { background-image: url(spritesmith-main-0.png); - background-position: -1223px -91px; + background-position: -455px -1309px; width: 90px; height: 90px; } .customize-option.hair_beard_1_blue { background-image: url(spritesmith-main-0.png); - background-position: -1248px -106px; + background-position: -480px -1324px; width: 60px; height: 60px; } .hair_beard_1_brown { background-image: url(spritesmith-main-0.png); - background-position: -1223px -182px; + background-position: -546px -1309px; width: 90px; height: 90px; } .customize-option.hair_beard_1_brown { background-image: url(spritesmith-main-0.png); - background-position: -1248px -197px; + background-position: -571px -1324px; width: 60px; height: 60px; } .hair_beard_1_candycane { background-image: url(spritesmith-main-0.png); - background-position: -1223px -273px; + background-position: -637px -1309px; width: 90px; height: 90px; } .customize-option.hair_beard_1_candycane { background-image: url(spritesmith-main-0.png); - background-position: -1248px -288px; + background-position: -662px -1324px; width: 60px; height: 60px; } .hair_beard_1_candycorn { background-image: url(spritesmith-main-0.png); - background-position: -1223px -364px; + background-position: -728px -1309px; width: 90px; height: 90px; } .customize-option.hair_beard_1_candycorn { background-image: url(spritesmith-main-0.png); - background-position: -1248px -379px; + background-position: -753px -1324px; width: 60px; height: 60px; } .hair_beard_1_festive { background-image: url(spritesmith-main-0.png); - background-position: -1223px -455px; + background-position: -819px -1309px; width: 90px; height: 90px; } .customize-option.hair_beard_1_festive { background-image: url(spritesmith-main-0.png); - background-position: -1248px -470px; + background-position: -844px -1324px; width: 60px; height: 60px; } .hair_beard_1_frost { background-image: url(spritesmith-main-0.png); - background-position: -1223px -546px; + background-position: -910px -1309px; width: 90px; height: 90px; } .customize-option.hair_beard_1_frost { background-image: url(spritesmith-main-0.png); - background-position: -1248px -561px; + background-position: -935px -1324px; width: 60px; height: 60px; } .hair_beard_1_ghostwhite { background-image: url(spritesmith-main-0.png); - background-position: -1223px -637px; + background-position: -1001px -1309px; width: 90px; height: 90px; } .customize-option.hair_beard_1_ghostwhite { background-image: url(spritesmith-main-0.png); - background-position: -1248px -652px; + background-position: -1026px -1324px; width: 60px; height: 60px; } .hair_beard_1_green { background-image: url(spritesmith-main-0.png); - background-position: -1223px -728px; + background-position: -1092px -1309px; width: 90px; height: 90px; } .customize-option.hair_beard_1_green { background-image: url(spritesmith-main-0.png); - background-position: -1248px -743px; + background-position: -1117px -1324px; width: 60px; height: 60px; } .hair_beard_1_halloween { background-image: url(spritesmith-main-0.png); - background-position: -1223px -819px; + background-position: -1183px -1309px; width: 90px; height: 90px; } .customize-option.hair_beard_1_halloween { background-image: url(spritesmith-main-0.png); - background-position: -1248px -834px; + background-position: -1208px -1324px; width: 60px; height: 60px; } .hair_beard_1_holly { background-image: url(spritesmith-main-0.png); - background-position: -1223px -910px; + background-position: -1274px -1309px; width: 90px; height: 90px; } .customize-option.hair_beard_1_holly { background-image: url(spritesmith-main-0.png); - background-position: -1248px -925px; + background-position: -1299px -1324px; width: 60px; height: 60px; } .hair_beard_1_hollygreen { background-image: url(spritesmith-main-0.png); - background-position: -1223px -1001px; + background-position: -1455px 0px; width: 90px; height: 90px; } .customize-option.hair_beard_1_hollygreen { background-image: url(spritesmith-main-0.png); - background-position: -1248px -1016px; + background-position: -1480px -15px; width: 60px; height: 60px; } .hair_beard_1_midnight { background-image: url(spritesmith-main-0.png); - background-position: -1223px -1092px; + background-position: -1455px -91px; width: 90px; height: 90px; } .customize-option.hair_beard_1_midnight { background-image: url(spritesmith-main-0.png); - background-position: -1248px -1107px; + background-position: -1480px -106px; width: 60px; height: 60px; } .hair_beard_1_pblue { background-image: url(spritesmith-main-0.png); - background-position: 0px -1218px; + background-position: -1455px -182px; width: 90px; height: 90px; } .customize-option.hair_beard_1_pblue { background-image: url(spritesmith-main-0.png); - background-position: -25px -1233px; + background-position: -1480px -197px; width: 60px; height: 60px; } .hair_beard_1_peppermint { background-image: url(spritesmith-main-0.png); - background-position: -91px -1218px; + background-position: -1455px -273px; width: 90px; height: 90px; } .customize-option.hair_beard_1_peppermint { background-image: url(spritesmith-main-0.png); - background-position: -116px -1233px; + background-position: -1480px -288px; width: 60px; height: 60px; } .hair_beard_1_pgreen { background-image: url(spritesmith-main-0.png); - background-position: -182px -1218px; + background-position: -1455px -364px; width: 90px; height: 90px; } .customize-option.hair_beard_1_pgreen { background-image: url(spritesmith-main-0.png); - background-position: -207px -1233px; + background-position: -1480px -379px; width: 60px; height: 60px; } .hair_beard_1_porange { background-image: url(spritesmith-main-0.png); - background-position: -273px -1218px; + background-position: -1455px -455px; width: 90px; height: 90px; } .customize-option.hair_beard_1_porange { background-image: url(spritesmith-main-0.png); - background-position: -298px -1233px; + background-position: -1480px -470px; width: 60px; height: 60px; } .hair_beard_1_ppink { background-image: url(spritesmith-main-0.png); - background-position: -364px -1218px; + background-position: -1132px -148px; width: 90px; height: 90px; } .customize-option.hair_beard_1_ppink { background-image: url(spritesmith-main-0.png); - background-position: -389px -1233px; + background-position: -1157px -163px; width: 60px; height: 60px; } .hair_beard_1_ppurple { background-image: url(spritesmith-main-0.png); - background-position: -455px -1218px; + background-position: -1455px -637px; width: 90px; height: 90px; } .customize-option.hair_beard_1_ppurple { background-image: url(spritesmith-main-0.png); - background-position: -480px -1233px; + background-position: -1480px -652px; width: 60px; height: 60px; } .hair_beard_1_pumpkin { background-image: url(spritesmith-main-0.png); - background-position: -546px -1218px; + background-position: -1455px -728px; width: 90px; height: 90px; } .customize-option.hair_beard_1_pumpkin { background-image: url(spritesmith-main-0.png); - background-position: -571px -1233px; + background-position: -1480px -743px; width: 60px; height: 60px; } .hair_beard_1_purple { background-image: url(spritesmith-main-0.png); - background-position: -637px -1218px; + background-position: -1455px -819px; width: 90px; height: 90px; } .customize-option.hair_beard_1_purple { background-image: url(spritesmith-main-0.png); - background-position: -662px -1233px; + background-position: -1480px -834px; width: 60px; height: 60px; } .hair_beard_1_pyellow { background-image: url(spritesmith-main-0.png); - background-position: -728px -1218px; + background-position: -1455px -910px; width: 90px; height: 90px; } .customize-option.hair_beard_1_pyellow { background-image: url(spritesmith-main-0.png); - background-position: -753px -1233px; + background-position: -1480px -925px; width: 60px; height: 60px; } .hair_beard_1_rainbow { background-image: url(spritesmith-main-0.png); - background-position: -819px -1218px; + background-position: -1455px -1001px; width: 90px; height: 90px; } .customize-option.hair_beard_1_rainbow { background-image: url(spritesmith-main-0.png); - background-position: -844px -1233px; + background-position: -1480px -1016px; width: 60px; height: 60px; } .hair_beard_1_red { background-image: url(spritesmith-main-0.png); - background-position: -910px -1218px; + background-position: -1455px -1092px; width: 90px; height: 90px; } .customize-option.hair_beard_1_red { background-image: url(spritesmith-main-0.png); - background-position: -935px -1233px; + background-position: -1480px -1107px; width: 60px; height: 60px; } .hair_beard_1_snowy { background-image: url(spritesmith-main-0.png); - background-position: -1001px -1218px; + background-position: -1455px -1183px; width: 90px; height: 90px; } .customize-option.hair_beard_1_snowy { background-image: url(spritesmith-main-0.png); - background-position: -1026px -1233px; + background-position: -1480px -1198px; width: 60px; height: 60px; } .hair_beard_1_white { background-image: url(spritesmith-main-0.png); - background-position: -1092px -1218px; + background-position: -1455px -1274px; width: 90px; height: 90px; } .customize-option.hair_beard_1_white { background-image: url(spritesmith-main-0.png); - background-position: -1117px -1233px; + background-position: -1480px -1289px; width: 60px; height: 60px; } .hair_beard_1_winternight { background-image: url(spritesmith-main-0.png); - background-position: -1183px -1218px; + background-position: 0px -1400px; width: 90px; height: 90px; } .customize-option.hair_beard_1_winternight { background-image: url(spritesmith-main-0.png); - background-position: -1208px -1233px; + background-position: -25px -1415px; width: 60px; height: 60px; } .hair_beard_1_winterstar { background-image: url(spritesmith-main-0.png); - background-position: -1314px 0px; + background-position: -91px -1400px; width: 90px; height: 90px; } .customize-option.hair_beard_1_winterstar { background-image: url(spritesmith-main-0.png); - background-position: -1339px -15px; + background-position: -116px -1415px; width: 60px; height: 60px; } .hair_beard_1_yellow { background-image: url(spritesmith-main-0.png); - background-position: -1314px -91px; + background-position: -182px -1400px; width: 90px; height: 90px; } .customize-option.hair_beard_1_yellow { background-image: url(spritesmith-main-0.png); - background-position: -1339px -106px; + background-position: -207px -1415px; width: 60px; height: 60px; } .hair_beard_1_zombie { background-image: url(spritesmith-main-0.png); - background-position: -1314px -182px; + background-position: -273px -1400px; width: 90px; height: 90px; } .customize-option.hair_beard_1_zombie { background-image: url(spritesmith-main-0.png); - background-position: -1339px -197px; + background-position: -298px -1415px; width: 60px; height: 60px; } .hair_beard_2_TRUred { background-image: url(spritesmith-main-0.png); - background-position: -1314px -273px; + background-position: -364px -1400px; width: 90px; height: 90px; } .customize-option.hair_beard_2_TRUred { background-image: url(spritesmith-main-0.png); - background-position: -1339px -288px; + background-position: -389px -1415px; width: 60px; height: 60px; } .hair_beard_2_aurora { background-image: url(spritesmith-main-0.png); - background-position: -1314px -364px; + background-position: -455px -1400px; width: 90px; height: 90px; } .customize-option.hair_beard_2_aurora { background-image: url(spritesmith-main-0.png); - background-position: -1339px -379px; + background-position: -480px -1415px; width: 60px; height: 60px; } .hair_beard_2_black { background-image: url(spritesmith-main-0.png); - background-position: -1314px -455px; + background-position: -546px -1400px; width: 90px; height: 90px; } .customize-option.hair_beard_2_black { background-image: url(spritesmith-main-0.png); - background-position: -1339px -470px; + background-position: -571px -1415px; width: 60px; height: 60px; } .hair_beard_2_blond { background-image: url(spritesmith-main-0.png); - background-position: -1314px -546px; + background-position: -637px -1400px; width: 90px; height: 90px; } .customize-option.hair_beard_2_blond { background-image: url(spritesmith-main-0.png); - background-position: -1339px -561px; + background-position: -662px -1415px; width: 60px; height: 60px; } .hair_beard_2_blue { background-image: url(spritesmith-main-0.png); - background-position: -1314px -637px; + background-position: -728px -1400px; width: 90px; height: 90px; } .customize-option.hair_beard_2_blue { background-image: url(spritesmith-main-0.png); - background-position: -1339px -652px; + background-position: -753px -1415px; width: 60px; height: 60px; } .hair_beard_2_brown { background-image: url(spritesmith-main-0.png); - background-position: -1314px -728px; + background-position: -819px -1400px; width: 90px; height: 90px; } .customize-option.hair_beard_2_brown { background-image: url(spritesmith-main-0.png); - background-position: -1339px -743px; + background-position: -844px -1415px; width: 60px; height: 60px; } .hair_beard_2_candycane { background-image: url(spritesmith-main-0.png); - background-position: -1314px -819px; + background-position: -910px -1400px; width: 90px; height: 90px; } .customize-option.hair_beard_2_candycane { background-image: url(spritesmith-main-0.png); - background-position: -1339px -834px; + background-position: -935px -1415px; width: 60px; height: 60px; } .hair_beard_2_candycorn { background-image: url(spritesmith-main-0.png); - background-position: -1314px -910px; + background-position: -1001px -1400px; width: 90px; height: 90px; } .customize-option.hair_beard_2_candycorn { background-image: url(spritesmith-main-0.png); - background-position: -1339px -925px; + background-position: -1026px -1415px; width: 60px; height: 60px; } .hair_beard_2_festive { background-image: url(spritesmith-main-0.png); - background-position: -1314px -1001px; + background-position: -1092px -1400px; width: 90px; height: 90px; } .customize-option.hair_beard_2_festive { background-image: url(spritesmith-main-0.png); - background-position: -1339px -1016px; + background-position: -1117px -1415px; width: 60px; height: 60px; } .hair_beard_2_frost { background-image: url(spritesmith-main-0.png); - background-position: -1314px -1092px; + background-position: -1183px -1400px; width: 90px; height: 90px; } .customize-option.hair_beard_2_frost { background-image: url(spritesmith-main-0.png); - background-position: -1339px -1107px; + background-position: -1208px -1415px; width: 60px; height: 60px; } .hair_beard_2_ghostwhite { background-image: url(spritesmith-main-0.png); - background-position: -1314px -1183px; + background-position: -1274px -1400px; width: 90px; height: 90px; } .customize-option.hair_beard_2_ghostwhite { background-image: url(spritesmith-main-0.png); - background-position: -1339px -1198px; + background-position: -1299px -1415px; width: 60px; height: 60px; } .hair_beard_2_green { background-image: url(spritesmith-main-0.png); - background-position: 0px -1309px; + background-position: -1365px -1400px; width: 90px; height: 90px; } .customize-option.hair_beard_2_green { background-image: url(spritesmith-main-0.png); - background-position: -25px -1324px; + background-position: -1390px -1415px; width: 60px; height: 60px; } .hair_beard_2_halloween { background-image: url(spritesmith-main-0.png); - background-position: -91px -1309px; + background-position: -1546px 0px; width: 90px; height: 90px; } .customize-option.hair_beard_2_halloween { background-image: url(spritesmith-main-0.png); - background-position: -116px -1324px; + background-position: -1571px -15px; width: 60px; height: 60px; } .hair_beard_2_holly { background-image: url(spritesmith-main-0.png); - background-position: -182px -1309px; + background-position: -1546px -91px; width: 90px; height: 90px; } .customize-option.hair_beard_2_holly { background-image: url(spritesmith-main-0.png); - background-position: -207px -1324px; + background-position: -1571px -106px; width: 60px; height: 60px; } .hair_beard_2_hollygreen { background-image: url(spritesmith-main-0.png); - background-position: -273px -1309px; + background-position: -1546px -182px; width: 90px; height: 90px; } .customize-option.hair_beard_2_hollygreen { background-image: url(spritesmith-main-0.png); - background-position: -298px -1324px; + background-position: -1571px -197px; width: 60px; height: 60px; } .hair_beard_2_midnight { background-image: url(spritesmith-main-0.png); - background-position: -364px -1309px; + background-position: -1546px -273px; width: 90px; height: 90px; } .customize-option.hair_beard_2_midnight { background-image: url(spritesmith-main-0.png); - background-position: -389px -1324px; + background-position: -1571px -288px; width: 60px; height: 60px; } .hair_beard_2_pblue { background-image: url(spritesmith-main-0.png); - background-position: -455px -1309px; + background-position: -1546px -364px; width: 90px; height: 90px; } .customize-option.hair_beard_2_pblue { background-image: url(spritesmith-main-0.png); - background-position: -480px -1324px; + background-position: -1571px -379px; width: 60px; height: 60px; } .hair_beard_2_peppermint { background-image: url(spritesmith-main-0.png); - background-position: -546px -1309px; + background-position: -1546px -455px; width: 90px; height: 90px; } .customize-option.hair_beard_2_peppermint { background-image: url(spritesmith-main-0.png); - background-position: -571px -1324px; + background-position: -1571px -470px; width: 60px; height: 60px; } .hair_beard_2_pgreen { background-image: url(spritesmith-main-0.png); - background-position: -637px -1309px; + background-position: -1546px -546px; width: 90px; height: 90px; } .customize-option.hair_beard_2_pgreen { background-image: url(spritesmith-main-0.png); - background-position: -662px -1324px; + background-position: -1571px -561px; width: 60px; height: 60px; } .hair_beard_2_porange { background-image: url(spritesmith-main-0.png); - background-position: -728px -1309px; + background-position: -1546px -637px; width: 90px; height: 90px; } .customize-option.hair_beard_2_porange { background-image: url(spritesmith-main-0.png); - background-position: -753px -1324px; + background-position: -1571px -652px; width: 60px; height: 60px; } .hair_beard_2_ppink { background-image: url(spritesmith-main-0.png); - background-position: -819px -1309px; + background-position: -1546px -728px; width: 90px; height: 90px; } .customize-option.hair_beard_2_ppink { background-image: url(spritesmith-main-0.png); - background-position: -844px -1324px; + background-position: -1571px -743px; width: 60px; height: 60px; } .hair_beard_2_ppurple { background-image: url(spritesmith-main-0.png); - background-position: -423px -888px; + background-position: -1546px -819px; width: 90px; height: 90px; } .customize-option.hair_beard_2_ppurple { background-image: url(spritesmith-main-0.png); - background-position: -448px -903px; + background-position: -1571px -834px; width: 60px; height: 60px; } .hair_beard_2_pumpkin { background-image: url(spritesmith-main-0.png); - background-position: -1001px -1309px; + background-position: -1546px -910px; width: 90px; height: 90px; } .customize-option.hair_beard_2_pumpkin { background-image: url(spritesmith-main-0.png); - background-position: -1026px -1324px; + background-position: -1571px -925px; width: 60px; height: 60px; } .hair_beard_2_purple { background-image: url(spritesmith-main-0.png); - background-position: -1092px -1309px; + background-position: -1546px -1001px; width: 90px; height: 90px; } .customize-option.hair_beard_2_purple { background-image: url(spritesmith-main-0.png); - background-position: -1117px -1324px; + background-position: -1571px -1016px; width: 60px; height: 60px; } .hair_beard_2_pyellow { background-image: url(spritesmith-main-0.png); - background-position: -1183px -1309px; + background-position: -1546px -1092px; width: 90px; height: 90px; } .customize-option.hair_beard_2_pyellow { background-image: url(spritesmith-main-0.png); - background-position: -1208px -1324px; + background-position: -1571px -1107px; width: 60px; height: 60px; } .hair_beard_2_rainbow { background-image: url(spritesmith-main-0.png); - background-position: -1274px -1309px; + background-position: -1546px -1183px; width: 90px; height: 90px; } .customize-option.hair_beard_2_rainbow { background-image: url(spritesmith-main-0.png); - background-position: -1299px -1324px; + background-position: -1571px -1198px; width: 60px; height: 60px; } .hair_beard_2_red { background-image: url(spritesmith-main-0.png); - background-position: -1405px 0px; + background-position: -1546px -1274px; width: 90px; height: 90px; } .customize-option.hair_beard_2_red { background-image: url(spritesmith-main-0.png); - background-position: -1430px -15px; + background-position: -1571px -1289px; width: 60px; height: 60px; } .hair_beard_2_snowy { background-image: url(spritesmith-main-0.png); - background-position: -1405px -91px; + background-position: -1546px -1365px; width: 90px; height: 90px; } .customize-option.hair_beard_2_snowy { background-image: url(spritesmith-main-0.png); - background-position: -1430px -106px; + background-position: -1571px -1380px; width: 60px; height: 60px; } .hair_beard_2_white { background-image: url(spritesmith-main-0.png); - background-position: -1405px -182px; + background-position: 0px -1491px; width: 90px; height: 90px; } .customize-option.hair_beard_2_white { background-image: url(spritesmith-main-0.png); - background-position: -1430px -197px; + background-position: -25px -1506px; width: 60px; height: 60px; } .hair_beard_2_winternight { background-image: url(spritesmith-main-0.png); - background-position: -1405px -273px; + background-position: -91px -1491px; width: 90px; height: 90px; } .customize-option.hair_beard_2_winternight { background-image: url(spritesmith-main-0.png); - background-position: -1430px -288px; + background-position: -116px -1506px; width: 60px; height: 60px; } .hair_beard_2_winterstar { background-image: url(spritesmith-main-0.png); - background-position: -1405px -364px; + background-position: -182px -1491px; width: 90px; height: 90px; } .customize-option.hair_beard_2_winterstar { background-image: url(spritesmith-main-0.png); - background-position: -1430px -379px; + background-position: -207px -1506px; width: 60px; height: 60px; } .hair_beard_2_yellow { background-image: url(spritesmith-main-0.png); - background-position: -1405px -455px; + background-position: -273px -1491px; width: 90px; height: 90px; } .customize-option.hair_beard_2_yellow { background-image: url(spritesmith-main-0.png); - background-position: -1430px -470px; + background-position: -298px -1506px; width: 60px; height: 60px; } .hair_beard_2_zombie { background-image: url(spritesmith-main-0.png); - background-position: -1405px -546px; + background-position: -364px -1491px; width: 90px; height: 90px; } .customize-option.hair_beard_2_zombie { background-image: url(spritesmith-main-0.png); - background-position: -1430px -561px; + background-position: -389px -1506px; width: 60px; height: 60px; } .hair_beard_3_TRUred { background-image: url(spritesmith-main-0.png); - background-position: -1405px -637px; + background-position: -455px -1491px; width: 90px; height: 90px; } .customize-option.hair_beard_3_TRUred { background-image: url(spritesmith-main-0.png); - background-position: -1430px -652px; + background-position: -480px -1506px; width: 60px; height: 60px; } .hair_beard_3_aurora { background-image: url(spritesmith-main-0.png); - background-position: -1405px -728px; + background-position: -546px -1491px; width: 90px; height: 90px; } .customize-option.hair_beard_3_aurora { background-image: url(spritesmith-main-0.png); - background-position: -1430px -743px; + background-position: -571px -1506px; width: 60px; height: 60px; } .hair_beard_3_black { background-image: url(spritesmith-main-0.png); - background-position: -1405px -819px; + background-position: -637px -1491px; width: 90px; height: 90px; } .customize-option.hair_beard_3_black { background-image: url(spritesmith-main-0.png); - background-position: -1430px -834px; + background-position: -662px -1506px; width: 60px; height: 60px; } .hair_beard_3_blond { background-image: url(spritesmith-main-0.png); - background-position: -1405px -910px; + background-position: -728px -1491px; width: 90px; height: 90px; } .customize-option.hair_beard_3_blond { background-image: url(spritesmith-main-0.png); - background-position: -1430px -925px; + background-position: -753px -1506px; width: 60px; height: 60px; } .hair_beard_3_blue { background-image: url(spritesmith-main-0.png); - background-position: -1405px -1001px; + background-position: -819px -1491px; width: 90px; height: 90px; } .customize-option.hair_beard_3_blue { background-image: url(spritesmith-main-0.png); - background-position: -1430px -1016px; + background-position: -844px -1506px; width: 60px; height: 60px; } .hair_beard_3_brown { background-image: url(spritesmith-main-0.png); - background-position: -1405px -1092px; + background-position: -910px -1491px; width: 90px; height: 90px; } .customize-option.hair_beard_3_brown { background-image: url(spritesmith-main-0.png); - background-position: -1430px -1107px; + background-position: -935px -1506px; width: 60px; height: 60px; } .hair_beard_3_candycane { background-image: url(spritesmith-main-0.png); - background-position: -1405px -1183px; + background-position: -1001px -1491px; width: 90px; height: 90px; } .customize-option.hair_beard_3_candycane { background-image: url(spritesmith-main-0.png); - background-position: -1430px -1198px; + background-position: -1026px -1506px; width: 60px; height: 60px; } .hair_beard_3_candycorn { background-image: url(spritesmith-main-0.png); - background-position: -1405px -1274px; + background-position: -1092px -1491px; width: 90px; height: 90px; } .customize-option.hair_beard_3_candycorn { background-image: url(spritesmith-main-0.png); - background-position: -1430px -1289px; + background-position: -1117px -1506px; width: 60px; height: 60px; } .hair_beard_3_festive { background-image: url(spritesmith-main-0.png); - background-position: 0px -1400px; + background-position: -1183px -1491px; width: 90px; height: 90px; } .customize-option.hair_beard_3_festive { background-image: url(spritesmith-main-0.png); - background-position: -25px -1415px; + background-position: -1208px -1506px; width: 60px; height: 60px; } .hair_beard_3_frost { background-image: url(spritesmith-main-0.png); - background-position: -91px -1400px; + background-position: -1274px -1491px; width: 90px; height: 90px; } .customize-option.hair_beard_3_frost { background-image: url(spritesmith-main-0.png); - background-position: -116px -1415px; + background-position: -1299px -1506px; width: 60px; height: 60px; } .hair_beard_3_ghostwhite { background-image: url(spritesmith-main-0.png); - background-position: -182px -1400px; + background-position: -1365px -1491px; width: 90px; height: 90px; } .customize-option.hair_beard_3_ghostwhite { background-image: url(spritesmith-main-0.png); - background-position: -207px -1415px; + background-position: -1390px -1506px; width: 60px; height: 60px; } .hair_beard_3_green { background-image: url(spritesmith-main-0.png); - background-position: -273px -1400px; + background-position: -1456px -1491px; width: 90px; height: 90px; } .customize-option.hair_beard_3_green { background-image: url(spritesmith-main-0.png); - background-position: -298px -1415px; + background-position: -1481px -1506px; width: 60px; height: 60px; } .hair_beard_3_halloween { background-image: url(spritesmith-main-0.png); - background-position: -364px -1400px; + background-position: -1637px 0px; width: 90px; height: 90px; } .customize-option.hair_beard_3_halloween { background-image: url(spritesmith-main-0.png); - background-position: -389px -1415px; + background-position: -1662px -15px; width: 60px; height: 60px; } .hair_beard_3_holly { background-image: url(spritesmith-main-0.png); - background-position: -455px -1400px; + background-position: -1637px -91px; width: 90px; height: 90px; } .customize-option.hair_beard_3_holly { background-image: url(spritesmith-main-0.png); - background-position: -480px -1415px; + background-position: -1662px -106px; width: 60px; height: 60px; } .hair_beard_3_hollygreen { background-image: url(spritesmith-main-0.png); - background-position: -546px -1400px; + background-position: -1637px -182px; width: 90px; height: 90px; } .customize-option.hair_beard_3_hollygreen { background-image: url(spritesmith-main-0.png); - background-position: -571px -1415px; + background-position: -1662px -197px; width: 60px; height: 60px; } .hair_beard_3_midnight { background-image: url(spritesmith-main-0.png); - background-position: -637px -1400px; + background-position: -1637px -273px; width: 90px; height: 90px; } .customize-option.hair_beard_3_midnight { background-image: url(spritesmith-main-0.png); - background-position: -662px -1415px; + background-position: -1662px -288px; width: 60px; height: 60px; } .hair_beard_3_pblue { background-image: url(spritesmith-main-0.png); - background-position: -728px -1400px; + background-position: -1637px -364px; width: 90px; height: 90px; } .customize-option.hair_beard_3_pblue { background-image: url(spritesmith-main-0.png); - background-position: -753px -1415px; + background-position: -1662px -379px; width: 60px; height: 60px; } .hair_beard_3_peppermint { background-image: url(spritesmith-main-0.png); - background-position: -819px -1400px; + background-position: -1637px -455px; width: 90px; height: 90px; } .customize-option.hair_beard_3_peppermint { background-image: url(spritesmith-main-0.png); - background-position: -844px -1415px; + background-position: -1662px -470px; width: 60px; height: 60px; } .hair_beard_3_pgreen { background-image: url(spritesmith-main-0.png); - background-position: -910px -1400px; + background-position: -1637px -546px; width: 90px; height: 90px; } .customize-option.hair_beard_3_pgreen { background-image: url(spritesmith-main-0.png); - background-position: -935px -1415px; + background-position: -1662px -561px; width: 60px; height: 60px; } .hair_beard_3_porange { background-image: url(spritesmith-main-0.png); - background-position: -1001px -1400px; + background-position: -1637px -637px; width: 90px; height: 90px; } .customize-option.hair_beard_3_porange { background-image: url(spritesmith-main-0.png); - background-position: -1026px -1415px; + background-position: -1662px -652px; width: 60px; height: 60px; } .hair_beard_3_ppink { background-image: url(spritesmith-main-0.png); - background-position: -1092px -1400px; + background-position: -1637px -728px; width: 90px; height: 90px; } .customize-option.hair_beard_3_ppink { background-image: url(spritesmith-main-0.png); - background-position: -1117px -1415px; + background-position: -1662px -743px; width: 60px; height: 60px; } .hair_beard_3_ppurple { background-image: url(spritesmith-main-0.png); - background-position: -1183px -1400px; + background-position: -1637px -819px; width: 90px; height: 90px; } .customize-option.hair_beard_3_ppurple { background-image: url(spritesmith-main-0.png); - background-position: -1208px -1415px; + background-position: -1662px -834px; width: 60px; height: 60px; } .hair_beard_3_pumpkin { background-image: url(spritesmith-main-0.png); - background-position: -1274px -1400px; + background-position: -1637px -910px; width: 90px; height: 90px; } .customize-option.hair_beard_3_pumpkin { background-image: url(spritesmith-main-0.png); - background-position: -1299px -1415px; + background-position: -1662px -925px; width: 60px; height: 60px; } .hair_beard_3_purple { background-image: url(spritesmith-main-0.png); - background-position: -1365px -1400px; + background-position: -1637px -1001px; width: 90px; height: 90px; } .customize-option.hair_beard_3_purple { background-image: url(spritesmith-main-0.png); - background-position: -1390px -1415px; + background-position: -1662px -1016px; width: 60px; height: 60px; } .hair_beard_3_pyellow { background-image: url(spritesmith-main-0.png); - background-position: -1496px 0px; + background-position: -1637px -1092px; width: 90px; height: 90px; } .customize-option.hair_beard_3_pyellow { background-image: url(spritesmith-main-0.png); - background-position: -1521px -15px; + background-position: -1662px -1107px; width: 60px; height: 60px; } .hair_beard_3_rainbow { background-image: url(spritesmith-main-0.png); - background-position: -1496px -91px; + background-position: -1637px -1183px; width: 90px; height: 90px; } .customize-option.hair_beard_3_rainbow { background-image: url(spritesmith-main-0.png); - background-position: -1521px -106px; + background-position: -1662px -1198px; width: 60px; height: 60px; } .hair_beard_3_red { background-image: url(spritesmith-main-0.png); - background-position: -1496px -182px; + background-position: -1637px -1274px; width: 90px; height: 90px; } .customize-option.hair_beard_3_red { background-image: url(spritesmith-main-0.png); - background-position: -1521px -197px; + background-position: -1662px -1289px; width: 60px; height: 60px; } .hair_beard_3_snowy { background-image: url(spritesmith-main-0.png); - background-position: -1496px -273px; + background-position: -1637px -1365px; width: 90px; height: 90px; } .customize-option.hair_beard_3_snowy { background-image: url(spritesmith-main-0.png); - background-position: -1521px -288px; + background-position: -1662px -1380px; width: 60px; height: 60px; } .hair_beard_3_white { background-image: url(spritesmith-main-0.png); - background-position: -1496px -364px; + background-position: -1637px -1456px; width: 90px; height: 90px; } .customize-option.hair_beard_3_white { background-image: url(spritesmith-main-0.png); - background-position: -1521px -379px; + background-position: -1662px -1471px; width: 60px; height: 60px; } .hair_beard_3_winternight { background-image: url(spritesmith-main-0.png); - background-position: -1496px -455px; + background-position: 0px -1582px; width: 90px; height: 90px; } .customize-option.hair_beard_3_winternight { background-image: url(spritesmith-main-0.png); - background-position: -1521px -470px; + background-position: -25px -1597px; width: 60px; height: 60px; } .hair_beard_3_winterstar { background-image: url(spritesmith-main-0.png); - background-position: -1496px -546px; + background-position: -91px -1582px; width: 90px; height: 90px; } .customize-option.hair_beard_3_winterstar { background-image: url(spritesmith-main-0.png); - background-position: -1521px -561px; + background-position: -116px -1597px; width: 60px; height: 60px; } .hair_beard_3_yellow { background-image: url(spritesmith-main-0.png); - background-position: -1496px -637px; + background-position: -182px -1582px; width: 90px; height: 90px; } .customize-option.hair_beard_3_yellow { background-image: url(spritesmith-main-0.png); - background-position: -1521px -652px; + background-position: -207px -1597px; width: 60px; height: 60px; } .hair_beard_3_zombie { background-image: url(spritesmith-main-0.png); - background-position: -1496px -728px; + background-position: -1455px -546px; width: 90px; height: 90px; } .customize-option.hair_beard_3_zombie { background-image: url(spritesmith-main-0.png); - background-position: -1521px -743px; + background-position: -1480px -561px; width: 60px; height: 60px; } .hair_mustache_1_TRUred { background-image: url(spritesmith-main-0.png); - background-position: -1496px -819px; + background-position: -910px -1036px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_TRUred { background-image: url(spritesmith-main-0.png); - background-position: -1521px -834px; + background-position: -935px -1051px; width: 60px; height: 60px; } .hair_mustache_1_aurora { background-image: url(spritesmith-main-0.png); - background-position: -1496px -910px; + background-position: -819px -1036px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_aurora { background-image: url(spritesmith-main-0.png); - background-position: -1521px -925px; + background-position: -844px -1051px; width: 60px; height: 60px; } .hair_mustache_1_black { background-image: url(spritesmith-main-0.png); - background-position: -1496px -1001px; + background-position: -728px -1036px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_black { background-image: url(spritesmith-main-0.png); - background-position: -1521px -1016px; + background-position: -753px -1051px; width: 60px; height: 60px; } .hair_mustache_1_blond { background-image: url(spritesmith-main-0.png); - background-position: -1496px -1092px; + background-position: -637px -1036px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_blond { background-image: url(spritesmith-main-0.png); - background-position: -1521px -1107px; + background-position: -662px -1051px; width: 60px; height: 60px; } .hair_mustache_1_blue { background-image: url(spritesmith-main-0.png); - background-position: -1496px -1183px; + background-position: -546px -1036px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_blue { background-image: url(spritesmith-main-0.png); - background-position: -1521px -1198px; + background-position: -571px -1051px; width: 60px; height: 60px; } .hair_mustache_1_brown { background-image: url(spritesmith-main-0.png); - background-position: -1496px -1274px; + background-position: -455px -1036px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_brown { background-image: url(spritesmith-main-0.png); - background-position: -1521px -1289px; + background-position: -480px -1051px; width: 60px; height: 60px; } .hair_mustache_1_candycane { background-image: url(spritesmith-main-0.png); - background-position: -1496px -1365px; + background-position: -364px -1036px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_candycane { background-image: url(spritesmith-main-0.png); - background-position: -1521px -1380px; + background-position: -389px -1051px; width: 60px; height: 60px; } .hair_mustache_1_candycorn { background-image: url(spritesmith-main-0.png); - background-position: 0px -1491px; + background-position: -273px -1036px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_candycorn { background-image: url(spritesmith-main-0.png); - background-position: -25px -1506px; + background-position: -298px -1051px; width: 60px; height: 60px; } .hair_mustache_1_festive { background-image: url(spritesmith-main-0.png); - background-position: -91px -1491px; + background-position: -182px -1036px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_festive { background-image: url(spritesmith-main-0.png); - background-position: -116px -1506px; + background-position: -207px -1051px; width: 60px; height: 60px; } .hair_mustache_1_frost { background-image: url(spritesmith-main-0.png); - background-position: -182px -1491px; + background-position: -91px -1036px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_frost { background-image: url(spritesmith-main-0.png); - background-position: -207px -1506px; + background-position: -116px -1051px; width: 60px; height: 60px; } .hair_mustache_1_ghostwhite { background-image: url(spritesmith-main-0.png); - background-position: -273px -1491px; + background-position: 0px -1036px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_ghostwhite { background-image: url(spritesmith-main-0.png); - background-position: -298px -1506px; + background-position: -25px -1051px; width: 60px; height: 60px; } .hair_mustache_1_green { background-image: url(spritesmith-main-0.png); - background-position: -364px -1491px; + background-position: -1132px -876px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_green { background-image: url(spritesmith-main-0.png); - background-position: -389px -1506px; + background-position: -1157px -891px; width: 60px; height: 60px; } .hair_mustache_1_halloween { background-image: url(spritesmith-main-0.png); - background-position: -455px -1491px; + background-position: -1132px -785px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_halloween { background-image: url(spritesmith-main-0.png); - background-position: -480px -1506px; + background-position: -1157px -800px; width: 60px; height: 60px; } .hair_mustache_1_holly { background-image: url(spritesmith-main-0.png); - background-position: -546px -1491px; + background-position: -1132px -694px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_holly { background-image: url(spritesmith-main-0.png); - background-position: -571px -1506px; + background-position: -1157px -709px; width: 60px; height: 60px; } .hair_mustache_1_hollygreen { background-image: url(spritesmith-main-0.png); - background-position: -637px -1491px; + background-position: -1132px -603px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_hollygreen { background-image: url(spritesmith-main-0.png); - background-position: -662px -1506px; + background-position: -1157px -618px; width: 60px; height: 60px; } .hair_mustache_1_midnight { background-image: url(spritesmith-main-0.png); - background-position: -728px -1491px; + background-position: -1132px -512px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_midnight { background-image: url(spritesmith-main-0.png); - background-position: -753px -1506px; + background-position: -1157px -527px; width: 60px; height: 60px; } .hair_mustache_1_pblue { background-image: url(spritesmith-main-0.png); - background-position: -819px -1491px; + background-position: -1132px -421px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_pblue { background-image: url(spritesmith-main-0.png); - background-position: -844px -1506px; + background-position: -1157px -436px; width: 60px; height: 60px; } .hair_mustache_1_peppermint { background-image: url(spritesmith-main-0.png); - background-position: -910px -1491px; + background-position: -1132px -330px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_peppermint { background-image: url(spritesmith-main-0.png); - background-position: -935px -1506px; + background-position: -1157px -345px; width: 60px; height: 60px; } .hair_mustache_1_pgreen { background-image: url(spritesmith-main-0.png); - background-position: -1001px -1491px; + background-position: -1132px -239px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_pgreen { background-image: url(spritesmith-main-0.png); - background-position: -1026px -1506px; + background-position: -1157px -254px; width: 60px; height: 60px; } .hair_mustache_1_porange { background-image: url(spritesmith-main-0.png); - background-position: -1092px -1491px; + background-position: 0px -1309px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_porange { background-image: url(spritesmith-main-0.png); - background-position: -1117px -1506px; + background-position: -25px -1324px; width: 60px; height: 60px; } .hair_mustache_1_ppink { background-image: url(spritesmith-main-0.png); - background-position: -1183px -1491px; + background-position: -1364px -1183px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_ppink { background-image: url(spritesmith-main-0.png); - background-position: -1208px -1506px; + background-position: -1389px -1198px; width: 60px; height: 60px; } .hair_mustache_1_ppurple { background-image: url(spritesmith-main-0.png); - background-position: -1274px -1491px; + background-position: -1364px -1092px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_ppurple { background-image: url(spritesmith-main-0.png); - background-position: -1299px -1506px; + background-position: -1389px -1107px; width: 60px; height: 60px; } .hair_mustache_1_pumpkin { background-image: url(spritesmith-main-0.png); - background-position: -1365px -1491px; + background-position: -1364px -1001px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_pumpkin { background-image: url(spritesmith-main-0.png); - background-position: -1390px -1506px; + background-position: -1389px -1016px; width: 60px; height: 60px; } .hair_mustache_1_purple { background-image: url(spritesmith-main-0.png); - background-position: -1456px -1491px; + background-position: -1364px -910px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_purple { background-image: url(spritesmith-main-0.png); - background-position: -1481px -1506px; + background-position: -1389px -925px; width: 60px; height: 60px; } .hair_mustache_1_pyellow { background-image: url(spritesmith-main-0.png); - background-position: -1587px 0px; + background-position: -1364px -819px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_pyellow { background-image: url(spritesmith-main-0.png); - background-position: -1612px -15px; + background-position: -1389px -834px; width: 60px; height: 60px; } .hair_mustache_1_rainbow { background-image: url(spritesmith-main-0.png); - background-position: -1587px -91px; + background-position: -1364px -728px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_rainbow { background-image: url(spritesmith-main-0.png); - background-position: -1612px -106px; + background-position: -1389px -743px; width: 60px; height: 60px; } .hair_mustache_1_red { background-image: url(spritesmith-main-0.png); - background-position: -1587px -182px; + background-position: -1364px -637px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_red { background-image: url(spritesmith-main-0.png); - background-position: -1612px -197px; + background-position: -1389px -652px; width: 60px; height: 60px; } .hair_mustache_1_snowy { background-image: url(spritesmith-main-0.png); - background-position: -1587px -273px; + background-position: -1364px -546px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_snowy { background-image: url(spritesmith-main-0.png); - background-position: -1612px -288px; + background-position: -1389px -561px; width: 60px; height: 60px; } .hair_mustache_1_white { background-image: url(spritesmith-main-0.png); - background-position: -1587px -364px; + background-position: -1364px -455px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_white { background-image: url(spritesmith-main-0.png); - background-position: -1612px -379px; + background-position: -1389px -470px; width: 60px; height: 60px; } .hair_mustache_1_winternight { background-image: url(spritesmith-main-0.png); - background-position: -1587px -455px; + background-position: -1364px -364px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_winternight { background-image: url(spritesmith-main-0.png); - background-position: -1612px -470px; + background-position: -1389px -379px; width: 60px; height: 60px; } .hair_mustache_1_winterstar { background-image: url(spritesmith-main-0.png); - background-position: -1587px -546px; + background-position: -1364px -273px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_winterstar { background-image: url(spritesmith-main-0.png); - background-position: -1612px -561px; + background-position: -1389px -288px; width: 60px; height: 60px; } .hair_mustache_1_yellow { background-image: url(spritesmith-main-0.png); - background-position: -1587px -637px; + background-position: -1364px -182px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_yellow { background-image: url(spritesmith-main-0.png); - background-position: -1612px -652px; + background-position: -1389px -197px; width: 60px; height: 60px; } .hair_mustache_1_zombie { background-image: url(spritesmith-main-0.png); - background-position: -1587px -728px; + background-position: -1364px -91px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_zombie { background-image: url(spritesmith-main-0.png); - background-position: -1612px -743px; + background-position: -1389px -106px; width: 60px; height: 60px; } .hair_mustache_2_TRUred { background-image: url(spritesmith-main-0.png); - background-position: -1587px -819px; + background-position: -1364px 0px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_TRUred { background-image: url(spritesmith-main-0.png); - background-position: -1612px -834px; + background-position: -1389px -15px; width: 60px; height: 60px; } .hair_mustache_2_aurora { background-image: url(spritesmith-main-0.png); - background-position: -1587px -910px; + background-position: -1183px -1218px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_aurora { background-image: url(spritesmith-main-0.png); - background-position: -1612px -925px; + background-position: -1208px -1233px; width: 60px; height: 60px; } .hair_mustache_2_black { background-image: url(spritesmith-main-0.png); - background-position: -1587px -1001px; + background-position: -1092px -1218px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_black { background-image: url(spritesmith-main-0.png); - background-position: -1612px -1016px; + background-position: -1117px -1233px; width: 60px; height: 60px; } .hair_mustache_2_blond { background-image: url(spritesmith-main-0.png); - background-position: -1587px -1092px; + background-position: -1001px -1218px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_blond { background-image: url(spritesmith-main-0.png); - background-position: -1612px -1107px; + background-position: -1026px -1233px; width: 60px; height: 60px; } .hair_mustache_2_blue { background-image: url(spritesmith-main-0.png); - background-position: -1587px -1183px; + background-position: -910px -1218px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_blue { background-image: url(spritesmith-main-0.png); - background-position: -1612px -1198px; + background-position: -935px -1233px; width: 60px; height: 60px; } .hair_mustache_2_brown { background-image: url(spritesmith-main-0.png); - background-position: -1587px -1274px; + background-position: -819px -1218px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_brown { background-image: url(spritesmith-main-0.png); - background-position: -1612px -1289px; + background-position: -844px -1233px; width: 60px; height: 60px; } .hair_mustache_2_candycane { background-image: url(spritesmith-main-0.png); - background-position: -1587px -1365px; + background-position: -728px -1218px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_candycane { background-image: url(spritesmith-main-0.png); - background-position: -1612px -1380px; + background-position: -753px -1233px; width: 60px; height: 60px; } .hair_mustache_2_candycorn { background-image: url(spritesmith-main-0.png); - background-position: -1587px -1456px; + background-position: -637px -1218px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_candycorn { background-image: url(spritesmith-main-0.png); - background-position: -1612px -1471px; + background-position: -662px -1233px; width: 60px; height: 60px; } .hair_mustache_2_festive { background-image: url(spritesmith-main-0.png); - background-position: 0px -1582px; + background-position: -546px -1218px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_festive { background-image: url(spritesmith-main-0.png); - background-position: -25px -1597px; + background-position: -571px -1233px; width: 60px; height: 60px; } .hair_mustache_2_frost { background-image: url(spritesmith-main-0.png); - background-position: -91px -1582px; + background-position: -455px -1218px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_frost { background-image: url(spritesmith-main-0.png); - background-position: -116px -1597px; + background-position: -480px -1233px; width: 60px; height: 60px; } .hair_mustache_2_ghostwhite { background-image: url(spritesmith-main-0.png); - background-position: -182px -1582px; + background-position: -364px -1218px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_ghostwhite { background-image: url(spritesmith-main-0.png); - background-position: -207px -1597px; + background-position: -389px -1233px; width: 60px; height: 60px; } .hair_mustache_2_green { background-image: url(spritesmith-main-0.png); - background-position: -273px -1582px; + background-position: -273px -1218px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_green { background-image: url(spritesmith-main-0.png); - background-position: -298px -1597px; + background-position: -298px -1233px; width: 60px; height: 60px; } .hair_mustache_2_halloween { background-image: url(spritesmith-main-0.png); - background-position: -364px -1582px; + background-position: -182px -1218px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_halloween { background-image: url(spritesmith-main-0.png); - background-position: -389px -1597px; + background-position: -207px -1233px; width: 60px; height: 60px; } .hair_mustache_2_holly { background-image: url(spritesmith-main-0.png); - background-position: -455px -1582px; + background-position: -91px -1218px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_holly { background-image: url(spritesmith-main-0.png); - background-position: -480px -1597px; + background-position: -116px -1233px; width: 60px; height: 60px; } .hair_mustache_2_hollygreen { background-image: url(spritesmith-main-0.png); - background-position: -546px -1582px; + background-position: 0px -1218px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_hollygreen { background-image: url(spritesmith-main-0.png); - background-position: -571px -1597px; + background-position: -25px -1233px; width: 60px; height: 60px; } .hair_mustache_2_midnight { background-image: url(spritesmith-main-0.png); - background-position: -637px -1582px; + background-position: -1273px -1092px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_midnight { background-image: url(spritesmith-main-0.png); - background-position: -662px -1597px; + background-position: -1298px -1107px; width: 60px; height: 60px; } .hair_mustache_2_pblue { background-image: url(spritesmith-main-0.png); - background-position: -728px -1582px; + background-position: -1273px -1001px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_pblue { background-image: url(spritesmith-main-0.png); - background-position: -753px -1597px; + background-position: -1298px -1016px; width: 60px; height: 60px; } .hair_mustache_2_peppermint { background-image: url(spritesmith-main-0.png); - background-position: -819px -1582px; + background-position: -1273px -910px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_peppermint { background-image: url(spritesmith-main-0.png); - background-position: -844px -1597px; + background-position: -1298px -925px; width: 60px; height: 60px; } .hair_mustache_2_pgreen { background-image: url(spritesmith-main-0.png); - background-position: -910px -1582px; + background-position: -1273px -819px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_pgreen { background-image: url(spritesmith-main-0.png); - background-position: -935px -1597px; + background-position: -1298px -834px; width: 60px; height: 60px; } .hair_mustache_2_porange { background-image: url(spritesmith-main-0.png); - background-position: -1001px -1582px; + background-position: -1273px -728px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_porange { background-image: url(spritesmith-main-0.png); - background-position: -1026px -1597px; + background-position: -1298px -743px; width: 60px; height: 60px; } .hair_mustache_2_ppink { background-image: url(spritesmith-main-0.png); - background-position: -1092px -1582px; + background-position: -1273px -637px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_ppink { background-image: url(spritesmith-main-0.png); - background-position: -1117px -1597px; + background-position: -1298px -652px; width: 60px; height: 60px; } .hair_mustache_2_ppurple { background-image: url(spritesmith-main-0.png); - background-position: -1183px -1582px; + background-position: -1273px -546px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_ppurple { background-image: url(spritesmith-main-0.png); - background-position: -1208px -1597px; + background-position: -1298px -561px; width: 60px; height: 60px; } .hair_mustache_2_pumpkin { background-image: url(spritesmith-main-0.png); - background-position: -1274px -1582px; + background-position: -1273px -455px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_pumpkin { background-image: url(spritesmith-main-0.png); - background-position: -1299px -1597px; + background-position: -1298px -470px; width: 60px; height: 60px; } .hair_mustache_2_purple { background-image: url(spritesmith-main-0.png); - background-position: -1365px -1582px; + background-position: -1273px -364px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_purple { background-image: url(spritesmith-main-0.png); - background-position: -1390px -1597px; + background-position: -1298px -379px; width: 60px; height: 60px; } .hair_mustache_2_pyellow { background-image: url(spritesmith-main-0.png); - background-position: -1456px -1582px; + background-position: -1273px -273px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_pyellow { background-image: url(spritesmith-main-0.png); - background-position: -1481px -1597px; + background-position: -1298px -288px; width: 60px; height: 60px; } .hair_mustache_2_rainbow { background-image: url(spritesmith-main-0.png); - background-position: -1547px -1582px; + background-position: -1273px -182px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_rainbow { background-image: url(spritesmith-main-0.png); - background-position: -1572px -1597px; + background-position: -1298px -197px; width: 60px; height: 60px; } .hair_mustache_2_red { background-image: url(spritesmith-main-0.png); - background-position: -1678px 0px; + background-position: -1273px -91px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_red { background-image: url(spritesmith-main-0.png); - background-position: -1703px -15px; + background-position: -1298px -106px; width: 60px; height: 60px; } .hair_mustache_2_snowy { background-image: url(spritesmith-main-0.png); - background-position: -1678px -91px; + background-position: -1273px 0px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_snowy { background-image: url(spritesmith-main-0.png); - background-position: -1703px -106px; + background-position: -1298px -15px; width: 60px; height: 60px; } .hair_mustache_2_white { background-image: url(spritesmith-main-0.png); - background-position: -910px -1309px; + background-position: -1092px -1127px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_white { background-image: url(spritesmith-main-0.png); - background-position: -935px -1324px; + background-position: -1117px -1142px; width: 60px; height: 60px; } .hair_mustache_2_winternight { background-image: url(spritesmith-main-0.png); - background-position: -1132px -910px; + background-position: -1001px -1127px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_winternight { background-image: url(spritesmith-main-0.png); - background-position: -1157px -925px; + background-position: -1026px -1142px; width: 60px; height: 60px; } .hair_mustache_2_winterstar { background-image: url(spritesmith-main-0.png); - background-position: -1132px -819px; + background-position: -910px -1127px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_winterstar { background-image: url(spritesmith-main-0.png); - background-position: -1157px -834px; + background-position: -935px -1142px; width: 60px; height: 60px; } .hair_mustache_2_yellow { background-image: url(spritesmith-main-0.png); - background-position: -1132px -728px; + background-position: -819px -1127px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_yellow { background-image: url(spritesmith-main-0.png); - background-position: -1157px -743px; + background-position: -844px -1142px; width: 60px; height: 60px; } .hair_mustache_2_zombie { background-image: url(spritesmith-main-0.png); - background-position: -1132px -637px; + background-position: -728px -1127px; width: 90px; height: 90px; } .customize-option.hair_mustache_2_zombie { background-image: url(spritesmith-main-0.png); - background-position: -1157px -652px; + background-position: -753px -1142px; width: 60px; height: 60px; } .hair_flower_1 { background-image: url(spritesmith-main-0.png); - background-position: -1132px -546px; + background-position: -637px -1127px; width: 90px; height: 90px; } .customize-option.hair_flower_1 { background-image: url(spritesmith-main-0.png); - background-position: -1157px -561px; + background-position: -662px -1142px; width: 60px; height: 60px; } .hair_flower_2 { background-image: url(spritesmith-main-0.png); - background-position: -1132px -455px; + background-position: -546px -1127px; width: 90px; height: 90px; } .customize-option.hair_flower_2 { background-image: url(spritesmith-main-0.png); - background-position: -1157px -470px; + background-position: -571px -1142px; width: 60px; height: 60px; } .hair_flower_3 { background-image: url(spritesmith-main-0.png); - background-position: -1132px -364px; + background-position: -455px -1127px; width: 90px; height: 90px; } .customize-option.hair_flower_3 { background-image: url(spritesmith-main-0.png); - background-position: -1157px -379px; + background-position: -480px -1142px; width: 60px; height: 60px; } .hair_flower_4 { background-image: url(spritesmith-main-0.png); - background-position: -1132px -273px; + background-position: -364px -1127px; width: 90px; height: 90px; } .customize-option.hair_flower_4 { background-image: url(spritesmith-main-0.png); - background-position: -1157px -288px; + background-position: -389px -1142px; width: 60px; height: 60px; } .hair_flower_5 { background-image: url(spritesmith-main-0.png); - background-position: -1132px -182px; + background-position: -273px -1127px; width: 90px; height: 90px; } .customize-option.hair_flower_5 { background-image: url(spritesmith-main-0.png); - background-position: -1157px -197px; + background-position: -298px -1142px; width: 60px; height: 60px; } .hair_flower_6 { background-image: url(spritesmith-main-0.png); - background-position: -1132px -91px; + background-position: -182px -1127px; width: 90px; height: 90px; } .customize-option.hair_flower_6 { background-image: url(spritesmith-main-0.png); - background-position: -1157px -106px; + background-position: -207px -1142px; width: 60px; height: 60px; } .hair_bangs_1_TRUred { background-image: url(spritesmith-main-0.png); - background-position: -1132px 0px; + background-position: -91px -1127px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_TRUred { background-image: url(spritesmith-main-0.png); - background-position: -1157px -15px; + background-position: -116px -1142px; width: 60px; height: 60px; } .hair_bangs_1_aurora { background-image: url(spritesmith-main-0.png); - background-position: -1001px -1036px; + background-position: 0px -1127px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_aurora { background-image: url(spritesmith-main-0.png); - background-position: -1026px -1051px; + background-position: -25px -1142px; width: 60px; height: 60px; } .hair_bangs_1_black { background-image: url(spritesmith-main-0.png); - background-position: -910px -1036px; + background-position: -1092px -1036px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_black { background-image: url(spritesmith-main-0.png); - background-position: -935px -1051px; + background-position: -1117px -1051px; width: 60px; height: 60px; } .hair_bangs_1_blond { background-image: url(spritesmith-main-0.png); - background-position: -819px -1036px; + background-position: -1001px -1036px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_blond { background-image: url(spritesmith-main-0.png); - background-position: -844px -1051px; - width: 60px; - height: 60px; -} -.hair_bangs_1_blue { - background-image: url(spritesmith-main-0.png); - background-position: -728px -1036px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_blue { - background-image: url(spritesmith-main-0.png); - background-position: -753px -1051px; - width: 60px; - height: 60px; -} -.hair_bangs_1_brown { - background-image: url(spritesmith-main-0.png); - background-position: -637px -1036px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_brown { - background-image: url(spritesmith-main-0.png); - background-position: -662px -1051px; - width: 60px; - height: 60px; -} -.hair_bangs_1_candycane { - background-image: url(spritesmith-main-0.png); - background-position: -546px -1036px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_candycane { - background-image: url(spritesmith-main-0.png); - background-position: -571px -1051px; - width: 60px; - height: 60px; -} -.hair_bangs_1_candycorn { - background-image: url(spritesmith-main-0.png); - background-position: -455px -1036px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_candycorn { - background-image: url(spritesmith-main-0.png); - background-position: -480px -1051px; - width: 60px; - height: 60px; -} -.hair_bangs_1_festive { - background-image: url(spritesmith-main-0.png); - background-position: -364px -1036px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_festive { - background-image: url(spritesmith-main-0.png); - background-position: -389px -1051px; - width: 60px; - height: 60px; -} -.hair_bangs_1_frost { - background-image: url(spritesmith-main-0.png); - background-position: -273px -1036px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_frost { - background-image: url(spritesmith-main-0.png); - background-position: -298px -1051px; - width: 60px; - height: 60px; -} -.hair_bangs_1_ghostwhite { - background-image: url(spritesmith-main-0.png); - background-position: -182px -1036px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_ghostwhite { - background-image: url(spritesmith-main-0.png); - background-position: -207px -1051px; - width: 60px; - height: 60px; -} -.hair_bangs_1_green { - background-image: url(spritesmith-main-0.png); - background-position: -91px -1036px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_green { - background-image: url(spritesmith-main-0.png); - background-position: -116px -1051px; - width: 60px; - height: 60px; -} -.hair_bangs_1_halloween { - background-image: url(spritesmith-main-0.png); - background-position: 0px -1036px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_halloween { - background-image: url(spritesmith-main-0.png); - background-position: -25px -1051px; - width: 60px; - height: 60px; -} -.hair_bangs_1_holly { - background-image: url(spritesmith-main-0.png); - background-position: -969px -888px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_holly { - background-image: url(spritesmith-main-0.png); - background-position: -994px -903px; - width: 60px; - height: 60px; -} -.hair_bangs_1_hollygreen { - background-image: url(spritesmith-main-0.png); - background-position: -878px -888px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_hollygreen { - background-image: url(spritesmith-main-0.png); - background-position: -903px -903px; - width: 60px; - height: 60px; -} -.hair_bangs_1_midnight { - background-image: url(spritesmith-main-0.png); - background-position: -787px -888px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_midnight { - background-image: url(spritesmith-main-0.png); - background-position: -812px -903px; - width: 60px; - height: 60px; -} -.hair_bangs_1_pblue { - background-image: url(spritesmith-main-0.png); - background-position: -696px -888px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_pblue { - background-image: url(spritesmith-main-0.png); - background-position: -721px -903px; - width: 60px; - height: 60px; -} -.hair_bangs_1_pblue2 { - background-image: url(spritesmith-main-0.png); - background-position: -605px -888px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_pblue2 { - background-image: url(spritesmith-main-0.png); - background-position: -630px -903px; - width: 60px; - height: 60px; -} -.hair_bangs_1_peppermint { - background-image: url(spritesmith-main-0.png); - background-position: -514px -888px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_peppermint { - background-image: url(spritesmith-main-0.png); - background-position: -539px -903px; - width: 60px; - height: 60px; -} -.hair_bangs_1_pgreen { - background-image: url(spritesmith-main-0.png); - background-position: -819px -1127px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_pgreen { - background-image: url(spritesmith-main-0.png); - background-position: -844px -1142px; - width: 60px; - height: 60px; -} -.hair_bangs_1_pgreen2 { - background-image: url(spritesmith-main-0.png); - background-position: -728px -1127px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_pgreen2 { - background-image: url(spritesmith-main-0.png); - background-position: -753px -1142px; - width: 60px; - height: 60px; -} -.hair_bangs_1_porange { - background-image: url(spritesmith-main-0.png); - background-position: -637px -1127px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_porange { - background-image: url(spritesmith-main-0.png); - background-position: -662px -1142px; - width: 60px; - height: 60px; -} -.hair_bangs_1_porange2 { - background-image: url(spritesmith-main-0.png); - background-position: -546px -1127px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_porange2 { - background-image: url(spritesmith-main-0.png); - background-position: -571px -1142px; - width: 60px; - height: 60px; -} -.hair_bangs_1_ppink { - background-image: url(spritesmith-main-0.png); - background-position: -455px -1127px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_ppink { - background-image: url(spritesmith-main-0.png); - background-position: -480px -1142px; - width: 60px; - height: 60px; -} -.hair_bangs_1_ppink2 { - background-image: url(spritesmith-main-0.png); - background-position: -364px -1127px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_ppink2 { - background-image: url(spritesmith-main-0.png); - background-position: -389px -1142px; - width: 60px; - height: 60px; -} -.hair_bangs_1_ppurple { - background-image: url(spritesmith-main-0.png); - background-position: -273px -1127px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_ppurple { - background-image: url(spritesmith-main-0.png); - background-position: -298px -1142px; - width: 60px; - height: 60px; -} -.hair_bangs_1_ppurple2 { - background-image: url(spritesmith-main-0.png); - background-position: -182px -1127px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_ppurple2 { - background-image: url(spritesmith-main-0.png); - background-position: -207px -1142px; - width: 60px; - height: 60px; -} -.hair_bangs_1_pumpkin { - background-image: url(spritesmith-main-0.png); - background-position: -91px -1127px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_pumpkin { - background-image: url(spritesmith-main-0.png); - background-position: -116px -1142px; - width: 60px; - height: 60px; -} -.hair_bangs_1_purple { - background-image: url(spritesmith-main-0.png); - background-position: 0px -1127px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_purple { - background-image: url(spritesmith-main-0.png); - background-position: -25px -1142px; - width: 60px; - height: 60px; -} -.hair_bangs_1_pyellow { - background-image: url(spritesmith-main-0.png); - background-position: -1132px -1001px; - width: 90px; - height: 90px; -} -.customize-option.hair_bangs_1_pyellow { - background-image: url(spritesmith-main-0.png); - background-position: -1157px -1016px; + background-position: -1026px -1051px; width: 60px; height: 60px; } diff --git a/common/dist/sprites/spritesmith-main-0.png b/common/dist/sprites/spritesmith-main-0.png index 593cd477ab..45d789f165 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 713d5cded0..3de7dadb08 100644 --- a/common/dist/sprites/spritesmith-main-1.css +++ b/common/dist/sprites/spritesmith-main-1.css @@ -1,3946 +1,3946 @@ -.hair_bangs_1_pyellow2 { +.hair_bangs_1_blue { background-image: url(spritesmith-main-1.png); background-position: -91px 0px; width: 90px; height: 90px; } -.customize-option.hair_bangs_1_pyellow2 { +.customize-option.hair_bangs_1_blue { background-image: url(spritesmith-main-1.png); background-position: -116px -15px; width: 60px; height: 60px; } -.hair_bangs_1_rainbow { +.hair_bangs_1_brown { background-image: url(spritesmith-main-1.png); background-position: -728px -1092px; width: 90px; height: 90px; } -.customize-option.hair_bangs_1_rainbow { +.customize-option.hair_bangs_1_brown { background-image: url(spritesmith-main-1.png); background-position: -753px -1107px; width: 60px; height: 60px; } -.hair_bangs_1_red { +.hair_bangs_1_candycane { background-image: url(spritesmith-main-1.png); background-position: 0px -91px; width: 90px; height: 90px; } -.customize-option.hair_bangs_1_red { +.customize-option.hair_bangs_1_candycane { background-image: url(spritesmith-main-1.png); background-position: -25px -106px; width: 60px; height: 60px; } -.hair_bangs_1_snowy { +.hair_bangs_1_candycorn { background-image: url(spritesmith-main-1.png); background-position: -91px -91px; width: 90px; height: 90px; } -.customize-option.hair_bangs_1_snowy { +.customize-option.hair_bangs_1_candycorn { background-image: url(spritesmith-main-1.png); background-position: -116px -106px; width: 60px; height: 60px; } -.hair_bangs_1_white { +.hair_bangs_1_festive { background-image: url(spritesmith-main-1.png); background-position: -182px 0px; width: 90px; height: 90px; } -.customize-option.hair_bangs_1_white { +.customize-option.hair_bangs_1_festive { background-image: url(spritesmith-main-1.png); background-position: -207px -15px; width: 60px; height: 60px; } -.hair_bangs_1_winternight { +.hair_bangs_1_frost { background-image: url(spritesmith-main-1.png); background-position: -182px -91px; width: 90px; height: 90px; } -.customize-option.hair_bangs_1_winternight { +.customize-option.hair_bangs_1_frost { background-image: url(spritesmith-main-1.png); background-position: -207px -106px; width: 60px; height: 60px; } -.hair_bangs_1_winterstar { +.hair_bangs_1_ghostwhite { background-image: url(spritesmith-main-1.png); background-position: 0px -182px; width: 90px; height: 90px; } -.customize-option.hair_bangs_1_winterstar { +.customize-option.hair_bangs_1_ghostwhite { background-image: url(spritesmith-main-1.png); background-position: -25px -197px; width: 60px; height: 60px; } -.hair_bangs_1_yellow { +.hair_bangs_1_green { background-image: url(spritesmith-main-1.png); background-position: -91px -182px; width: 90px; height: 90px; } -.customize-option.hair_bangs_1_yellow { +.customize-option.hair_bangs_1_green { background-image: url(spritesmith-main-1.png); background-position: -116px -197px; width: 60px; height: 60px; } -.hair_bangs_1_zombie { +.hair_bangs_1_halloween { background-image: url(spritesmith-main-1.png); background-position: -182px -182px; width: 90px; height: 90px; } -.customize-option.hair_bangs_1_zombie { +.customize-option.hair_bangs_1_halloween { background-image: url(spritesmith-main-1.png); background-position: -207px -197px; width: 60px; height: 60px; } -.hair_bangs_2_TRUred { +.hair_bangs_1_holly { background-image: url(spritesmith-main-1.png); background-position: -273px 0px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_TRUred { +.customize-option.hair_bangs_1_holly { background-image: url(spritesmith-main-1.png); background-position: -298px -15px; width: 60px; height: 60px; } -.hair_bangs_2_aurora { +.hair_bangs_1_hollygreen { background-image: url(spritesmith-main-1.png); background-position: -273px -91px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_aurora { +.customize-option.hair_bangs_1_hollygreen { background-image: url(spritesmith-main-1.png); background-position: -298px -106px; width: 60px; height: 60px; } -.hair_bangs_2_black { +.hair_bangs_1_midnight { background-image: url(spritesmith-main-1.png); background-position: -273px -182px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_black { +.customize-option.hair_bangs_1_midnight { background-image: url(spritesmith-main-1.png); background-position: -298px -197px; width: 60px; height: 60px; } -.hair_bangs_2_blond { +.hair_bangs_1_pblue { background-image: url(spritesmith-main-1.png); background-position: 0px -273px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_blond { +.customize-option.hair_bangs_1_pblue { background-image: url(spritesmith-main-1.png); background-position: -25px -288px; width: 60px; height: 60px; } -.hair_bangs_2_blue { +.hair_bangs_1_pblue2 { background-image: url(spritesmith-main-1.png); background-position: -91px -273px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_blue { +.customize-option.hair_bangs_1_pblue2 { background-image: url(spritesmith-main-1.png); background-position: -116px -288px; width: 60px; height: 60px; } -.hair_bangs_2_brown { +.hair_bangs_1_peppermint { background-image: url(spritesmith-main-1.png); background-position: -182px -273px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_brown { +.customize-option.hair_bangs_1_peppermint { background-image: url(spritesmith-main-1.png); background-position: -207px -288px; width: 60px; height: 60px; } -.hair_bangs_2_candycane { +.hair_bangs_1_pgreen { background-image: url(spritesmith-main-1.png); background-position: -273px -273px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_candycane { +.customize-option.hair_bangs_1_pgreen { background-image: url(spritesmith-main-1.png); background-position: -298px -288px; width: 60px; height: 60px; } -.hair_bangs_2_candycorn { +.hair_bangs_1_pgreen2 { background-image: url(spritesmith-main-1.png); background-position: -364px 0px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_candycorn { +.customize-option.hair_bangs_1_pgreen2 { background-image: url(spritesmith-main-1.png); background-position: -389px -15px; width: 60px; height: 60px; } -.hair_bangs_2_festive { +.hair_bangs_1_porange { background-image: url(spritesmith-main-1.png); background-position: -364px -91px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_festive { +.customize-option.hair_bangs_1_porange { background-image: url(spritesmith-main-1.png); background-position: -389px -106px; width: 60px; height: 60px; } -.hair_bangs_2_frost { +.hair_bangs_1_porange2 { background-image: url(spritesmith-main-1.png); background-position: -364px -182px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_frost { +.customize-option.hair_bangs_1_porange2 { background-image: url(spritesmith-main-1.png); background-position: -389px -197px; width: 60px; height: 60px; } -.hair_bangs_2_ghostwhite { +.hair_bangs_1_ppink { background-image: url(spritesmith-main-1.png); background-position: -364px -273px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_ghostwhite { +.customize-option.hair_bangs_1_ppink { background-image: url(spritesmith-main-1.png); background-position: -389px -288px; width: 60px; height: 60px; } -.hair_bangs_2_green { +.hair_bangs_1_ppink2 { background-image: url(spritesmith-main-1.png); background-position: 0px -364px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_green { +.customize-option.hair_bangs_1_ppink2 { background-image: url(spritesmith-main-1.png); background-position: -25px -379px; width: 60px; height: 60px; } -.hair_bangs_2_halloween { +.hair_bangs_1_ppurple { background-image: url(spritesmith-main-1.png); background-position: -91px -364px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_halloween { +.customize-option.hair_bangs_1_ppurple { background-image: url(spritesmith-main-1.png); background-position: -116px -379px; width: 60px; height: 60px; } -.hair_bangs_2_holly { +.hair_bangs_1_ppurple2 { background-image: url(spritesmith-main-1.png); background-position: -182px -364px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_holly { +.customize-option.hair_bangs_1_ppurple2 { background-image: url(spritesmith-main-1.png); background-position: -207px -379px; width: 60px; height: 60px; } -.hair_bangs_2_hollygreen { +.hair_bangs_1_pumpkin { background-image: url(spritesmith-main-1.png); background-position: -273px -364px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_hollygreen { +.customize-option.hair_bangs_1_pumpkin { background-image: url(spritesmith-main-1.png); background-position: -298px -379px; width: 60px; height: 60px; } -.hair_bangs_2_midnight { +.hair_bangs_1_purple { background-image: url(spritesmith-main-1.png); background-position: -364px -364px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_midnight { +.customize-option.hair_bangs_1_purple { background-image: url(spritesmith-main-1.png); background-position: -389px -379px; width: 60px; height: 60px; } -.hair_bangs_2_pblue { +.hair_bangs_1_pyellow { background-image: url(spritesmith-main-1.png); background-position: -455px 0px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_pblue { +.customize-option.hair_bangs_1_pyellow { background-image: url(spritesmith-main-1.png); background-position: -480px -15px; width: 60px; height: 60px; } -.hair_bangs_2_pblue2 { +.hair_bangs_1_pyellow2 { background-image: url(spritesmith-main-1.png); background-position: -455px -91px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_pblue2 { +.customize-option.hair_bangs_1_pyellow2 { background-image: url(spritesmith-main-1.png); background-position: -480px -106px; width: 60px; height: 60px; } -.hair_bangs_2_peppermint { +.hair_bangs_1_rainbow { background-image: url(spritesmith-main-1.png); background-position: -455px -182px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_peppermint { +.customize-option.hair_bangs_1_rainbow { background-image: url(spritesmith-main-1.png); background-position: -480px -197px; width: 60px; height: 60px; } -.hair_bangs_2_pgreen { +.hair_bangs_1_red { background-image: url(spritesmith-main-1.png); background-position: -455px -273px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_pgreen { +.customize-option.hair_bangs_1_red { background-image: url(spritesmith-main-1.png); background-position: -480px -288px; width: 60px; height: 60px; } -.hair_bangs_2_pgreen2 { +.hair_bangs_1_snowy { background-image: url(spritesmith-main-1.png); background-position: -455px -364px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_pgreen2 { +.customize-option.hair_bangs_1_snowy { background-image: url(spritesmith-main-1.png); background-position: -480px -379px; width: 60px; height: 60px; } -.hair_bangs_2_porange { +.hair_bangs_1_white { background-image: url(spritesmith-main-1.png); background-position: 0px -455px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_porange { +.customize-option.hair_bangs_1_white { background-image: url(spritesmith-main-1.png); background-position: -25px -470px; width: 60px; height: 60px; } -.hair_bangs_2_porange2 { +.hair_bangs_1_winternight { background-image: url(spritesmith-main-1.png); background-position: -91px -455px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_porange2 { +.customize-option.hair_bangs_1_winternight { background-image: url(spritesmith-main-1.png); background-position: -116px -470px; width: 60px; height: 60px; } -.hair_bangs_2_ppink { +.hair_bangs_1_winterstar { background-image: url(spritesmith-main-1.png); background-position: -182px -455px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_ppink { +.customize-option.hair_bangs_1_winterstar { background-image: url(spritesmith-main-1.png); background-position: -207px -470px; width: 60px; height: 60px; } -.hair_bangs_2_ppink2 { +.hair_bangs_1_yellow { background-image: url(spritesmith-main-1.png); background-position: -273px -455px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_ppink2 { +.customize-option.hair_bangs_1_yellow { background-image: url(spritesmith-main-1.png); background-position: -298px -470px; width: 60px; height: 60px; } -.hair_bangs_2_ppurple { +.hair_bangs_1_zombie { background-image: url(spritesmith-main-1.png); background-position: -364px -455px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_ppurple { +.customize-option.hair_bangs_1_zombie { background-image: url(spritesmith-main-1.png); background-position: -389px -470px; width: 60px; height: 60px; } -.hair_bangs_2_ppurple2 { +.hair_bangs_2_TRUred { background-image: url(spritesmith-main-1.png); background-position: -455px -455px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_ppurple2 { +.customize-option.hair_bangs_2_TRUred { background-image: url(spritesmith-main-1.png); background-position: -480px -470px; width: 60px; height: 60px; } -.hair_bangs_2_pumpkin { +.hair_bangs_2_aurora { background-image: url(spritesmith-main-1.png); background-position: -546px 0px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_pumpkin { +.customize-option.hair_bangs_2_aurora { background-image: url(spritesmith-main-1.png); background-position: -571px -15px; width: 60px; height: 60px; } -.hair_bangs_2_purple { +.hair_bangs_2_black { background-image: url(spritesmith-main-1.png); background-position: -546px -91px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_purple { +.customize-option.hair_bangs_2_black { background-image: url(spritesmith-main-1.png); background-position: -571px -106px; width: 60px; height: 60px; } -.hair_bangs_2_pyellow { +.hair_bangs_2_blond { background-image: url(spritesmith-main-1.png); background-position: -546px -182px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_pyellow { +.customize-option.hair_bangs_2_blond { background-image: url(spritesmith-main-1.png); background-position: -571px -197px; width: 60px; height: 60px; } -.hair_bangs_2_pyellow2 { +.hair_bangs_2_blue { background-image: url(spritesmith-main-1.png); background-position: -546px -273px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_pyellow2 { +.customize-option.hair_bangs_2_blue { background-image: url(spritesmith-main-1.png); background-position: -571px -288px; width: 60px; height: 60px; } -.hair_bangs_2_rainbow { +.hair_bangs_2_brown { background-image: url(spritesmith-main-1.png); background-position: -546px -364px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_rainbow { +.customize-option.hair_bangs_2_brown { background-image: url(spritesmith-main-1.png); background-position: -571px -379px; width: 60px; height: 60px; } -.hair_bangs_2_red { +.hair_bangs_2_candycane { background-image: url(spritesmith-main-1.png); background-position: -546px -455px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_red { +.customize-option.hair_bangs_2_candycane { background-image: url(spritesmith-main-1.png); background-position: -571px -470px; width: 60px; height: 60px; } -.hair_bangs_2_snowy { +.hair_bangs_2_candycorn { background-image: url(spritesmith-main-1.png); background-position: 0px -546px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_snowy { +.customize-option.hair_bangs_2_candycorn { background-image: url(spritesmith-main-1.png); background-position: -25px -561px; width: 60px; height: 60px; } -.hair_bangs_2_white { +.hair_bangs_2_festive { background-image: url(spritesmith-main-1.png); background-position: -91px -546px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_white { +.customize-option.hair_bangs_2_festive { background-image: url(spritesmith-main-1.png); background-position: -116px -561px; width: 60px; height: 60px; } -.hair_bangs_2_winternight { +.hair_bangs_2_frost { background-image: url(spritesmith-main-1.png); background-position: -182px -546px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_winternight { +.customize-option.hair_bangs_2_frost { background-image: url(spritesmith-main-1.png); background-position: -207px -561px; width: 60px; height: 60px; } -.hair_bangs_2_winterstar { +.hair_bangs_2_ghostwhite { background-image: url(spritesmith-main-1.png); background-position: -273px -546px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_winterstar { +.customize-option.hair_bangs_2_ghostwhite { background-image: url(spritesmith-main-1.png); background-position: -298px -561px; width: 60px; height: 60px; } -.hair_bangs_2_yellow { +.hair_bangs_2_green { background-image: url(spritesmith-main-1.png); background-position: -364px -546px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_yellow { +.customize-option.hair_bangs_2_green { background-image: url(spritesmith-main-1.png); background-position: -389px -561px; width: 60px; height: 60px; } -.hair_bangs_2_zombie { +.hair_bangs_2_halloween { background-image: url(spritesmith-main-1.png); background-position: -455px -546px; width: 90px; height: 90px; } -.customize-option.hair_bangs_2_zombie { +.customize-option.hair_bangs_2_halloween { background-image: url(spritesmith-main-1.png); background-position: -480px -561px; width: 60px; height: 60px; } -.hair_bangs_3_TRUred { +.hair_bangs_2_holly { background-image: url(spritesmith-main-1.png); background-position: -546px -546px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_TRUred { +.customize-option.hair_bangs_2_holly { background-image: url(spritesmith-main-1.png); background-position: -571px -561px; width: 60px; height: 60px; } -.hair_bangs_3_aurora { +.hair_bangs_2_hollygreen { background-image: url(spritesmith-main-1.png); background-position: -637px 0px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_aurora { +.customize-option.hair_bangs_2_hollygreen { background-image: url(spritesmith-main-1.png); background-position: -662px -15px; width: 60px; height: 60px; } -.hair_bangs_3_black { +.hair_bangs_2_midnight { background-image: url(spritesmith-main-1.png); background-position: -637px -91px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_black { +.customize-option.hair_bangs_2_midnight { background-image: url(spritesmith-main-1.png); background-position: -662px -106px; width: 60px; height: 60px; } -.hair_bangs_3_blond { +.hair_bangs_2_pblue { background-image: url(spritesmith-main-1.png); background-position: -637px -182px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_blond { +.customize-option.hair_bangs_2_pblue { background-image: url(spritesmith-main-1.png); background-position: -662px -197px; width: 60px; height: 60px; } -.hair_bangs_3_blue { +.hair_bangs_2_pblue2 { background-image: url(spritesmith-main-1.png); background-position: -637px -273px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_blue { +.customize-option.hair_bangs_2_pblue2 { background-image: url(spritesmith-main-1.png); background-position: -662px -288px; width: 60px; height: 60px; } -.hair_bangs_3_brown { +.hair_bangs_2_peppermint { background-image: url(spritesmith-main-1.png); background-position: -637px -364px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_brown { +.customize-option.hair_bangs_2_peppermint { background-image: url(spritesmith-main-1.png); background-position: -662px -379px; width: 60px; height: 60px; } -.hair_bangs_3_candycane { +.hair_bangs_2_pgreen { background-image: url(spritesmith-main-1.png); background-position: -637px -455px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_candycane { +.customize-option.hair_bangs_2_pgreen { background-image: url(spritesmith-main-1.png); background-position: -662px -470px; width: 60px; height: 60px; } -.hair_bangs_3_candycorn { +.hair_bangs_2_pgreen2 { background-image: url(spritesmith-main-1.png); background-position: -637px -546px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_candycorn { +.customize-option.hair_bangs_2_pgreen2 { background-image: url(spritesmith-main-1.png); background-position: -662px -561px; width: 60px; height: 60px; } -.hair_bangs_3_festive { +.hair_bangs_2_porange { background-image: url(spritesmith-main-1.png); background-position: 0px -637px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_festive { +.customize-option.hair_bangs_2_porange { background-image: url(spritesmith-main-1.png); background-position: -25px -652px; width: 60px; height: 60px; } -.hair_bangs_3_frost { +.hair_bangs_2_porange2 { background-image: url(spritesmith-main-1.png); background-position: -91px -637px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_frost { +.customize-option.hair_bangs_2_porange2 { background-image: url(spritesmith-main-1.png); background-position: -116px -652px; width: 60px; height: 60px; } -.hair_bangs_3_ghostwhite { +.hair_bangs_2_ppink { background-image: url(spritesmith-main-1.png); background-position: -182px -637px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_ghostwhite { +.customize-option.hair_bangs_2_ppink { background-image: url(spritesmith-main-1.png); background-position: -207px -652px; width: 60px; height: 60px; } -.hair_bangs_3_green { +.hair_bangs_2_ppink2 { background-image: url(spritesmith-main-1.png); background-position: -273px -637px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_green { +.customize-option.hair_bangs_2_ppink2 { background-image: url(spritesmith-main-1.png); background-position: -298px -652px; width: 60px; height: 60px; } -.hair_bangs_3_halloween { +.hair_bangs_2_ppurple { background-image: url(spritesmith-main-1.png); background-position: -364px -637px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_halloween { +.customize-option.hair_bangs_2_ppurple { background-image: url(spritesmith-main-1.png); background-position: -389px -652px; width: 60px; height: 60px; } -.hair_bangs_3_holly { +.hair_bangs_2_ppurple2 { background-image: url(spritesmith-main-1.png); background-position: -455px -637px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_holly { +.customize-option.hair_bangs_2_ppurple2 { background-image: url(spritesmith-main-1.png); background-position: -480px -652px; width: 60px; height: 60px; } -.hair_bangs_3_hollygreen { +.hair_bangs_2_pumpkin { background-image: url(spritesmith-main-1.png); background-position: -546px -637px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_hollygreen { +.customize-option.hair_bangs_2_pumpkin { background-image: url(spritesmith-main-1.png); background-position: -571px -652px; width: 60px; height: 60px; } -.hair_bangs_3_midnight { +.hair_bangs_2_purple { background-image: url(spritesmith-main-1.png); background-position: -637px -637px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_midnight { +.customize-option.hair_bangs_2_purple { background-image: url(spritesmith-main-1.png); background-position: -662px -652px; width: 60px; height: 60px; } -.hair_bangs_3_pblue { +.hair_bangs_2_pyellow { background-image: url(spritesmith-main-1.png); background-position: -728px 0px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_pblue { +.customize-option.hair_bangs_2_pyellow { background-image: url(spritesmith-main-1.png); background-position: -753px -15px; width: 60px; height: 60px; } -.hair_bangs_3_pblue2 { +.hair_bangs_2_pyellow2 { background-image: url(spritesmith-main-1.png); background-position: -728px -91px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_pblue2 { +.customize-option.hair_bangs_2_pyellow2 { background-image: url(spritesmith-main-1.png); background-position: -753px -106px; width: 60px; height: 60px; } -.hair_bangs_3_peppermint { +.hair_bangs_2_rainbow { background-image: url(spritesmith-main-1.png); background-position: -728px -182px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_peppermint { +.customize-option.hair_bangs_2_rainbow { background-image: url(spritesmith-main-1.png); background-position: -753px -197px; width: 60px; height: 60px; } -.hair_bangs_3_pgreen { +.hair_bangs_2_red { background-image: url(spritesmith-main-1.png); background-position: -728px -273px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_pgreen { +.customize-option.hair_bangs_2_red { background-image: url(spritesmith-main-1.png); background-position: -753px -288px; width: 60px; height: 60px; } -.hair_bangs_3_pgreen2 { +.hair_bangs_2_snowy { background-image: url(spritesmith-main-1.png); background-position: -728px -364px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_pgreen2 { +.customize-option.hair_bangs_2_snowy { background-image: url(spritesmith-main-1.png); background-position: -753px -379px; width: 60px; height: 60px; } -.hair_bangs_3_porange { +.hair_bangs_2_white { background-image: url(spritesmith-main-1.png); background-position: -728px -455px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_porange { +.customize-option.hair_bangs_2_white { background-image: url(spritesmith-main-1.png); background-position: -753px -470px; width: 60px; height: 60px; } -.hair_bangs_3_porange2 { +.hair_bangs_2_winternight { background-image: url(spritesmith-main-1.png); background-position: -728px -546px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_porange2 { +.customize-option.hair_bangs_2_winternight { background-image: url(spritesmith-main-1.png); background-position: -753px -561px; width: 60px; height: 60px; } -.hair_bangs_3_ppink { +.hair_bangs_2_winterstar { background-image: url(spritesmith-main-1.png); background-position: -728px -637px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_ppink { +.customize-option.hair_bangs_2_winterstar { background-image: url(spritesmith-main-1.png); background-position: -753px -652px; width: 60px; height: 60px; } -.hair_bangs_3_ppink2 { +.hair_bangs_2_yellow { background-image: url(spritesmith-main-1.png); background-position: 0px -728px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_ppink2 { +.customize-option.hair_bangs_2_yellow { background-image: url(spritesmith-main-1.png); background-position: -25px -743px; width: 60px; height: 60px; } -.hair_bangs_3_ppurple { +.hair_bangs_2_zombie { background-image: url(spritesmith-main-1.png); background-position: -91px -728px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_ppurple { +.customize-option.hair_bangs_2_zombie { background-image: url(spritesmith-main-1.png); background-position: -116px -743px; width: 60px; height: 60px; } -.hair_bangs_3_ppurple2 { +.hair_bangs_3_TRUred { background-image: url(spritesmith-main-1.png); background-position: -182px -728px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_ppurple2 { +.customize-option.hair_bangs_3_TRUred { background-image: url(spritesmith-main-1.png); background-position: -207px -743px; width: 60px; height: 60px; } -.hair_bangs_3_pumpkin { +.hair_bangs_3_aurora { background-image: url(spritesmith-main-1.png); background-position: -273px -728px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_pumpkin { +.customize-option.hair_bangs_3_aurora { background-image: url(spritesmith-main-1.png); background-position: -298px -743px; width: 60px; height: 60px; } -.hair_bangs_3_purple { +.hair_bangs_3_black { background-image: url(spritesmith-main-1.png); background-position: -364px -728px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_purple { +.customize-option.hair_bangs_3_black { background-image: url(spritesmith-main-1.png); background-position: -389px -743px; width: 60px; height: 60px; } -.hair_bangs_3_pyellow { +.hair_bangs_3_blond { background-image: url(spritesmith-main-1.png); background-position: -455px -728px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_pyellow { +.customize-option.hair_bangs_3_blond { background-image: url(spritesmith-main-1.png); background-position: -480px -743px; width: 60px; height: 60px; } -.hair_bangs_3_pyellow2 { +.hair_bangs_3_blue { background-image: url(spritesmith-main-1.png); background-position: -546px -728px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_pyellow2 { +.customize-option.hair_bangs_3_blue { background-image: url(spritesmith-main-1.png); background-position: -571px -743px; width: 60px; height: 60px; } -.hair_bangs_3_rainbow { +.hair_bangs_3_brown { background-image: url(spritesmith-main-1.png); background-position: -637px -728px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_rainbow { +.customize-option.hair_bangs_3_brown { background-image: url(spritesmith-main-1.png); background-position: -662px -743px; width: 60px; height: 60px; } -.hair_bangs_3_red { +.hair_bangs_3_candycane { background-image: url(spritesmith-main-1.png); background-position: -728px -728px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_red { +.customize-option.hair_bangs_3_candycane { background-image: url(spritesmith-main-1.png); background-position: -753px -743px; width: 60px; height: 60px; } -.hair_bangs_3_snowy { +.hair_bangs_3_candycorn { background-image: url(spritesmith-main-1.png); background-position: -819px 0px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_snowy { +.customize-option.hair_bangs_3_candycorn { background-image: url(spritesmith-main-1.png); background-position: -844px -15px; width: 60px; height: 60px; } -.hair_bangs_3_white { +.hair_bangs_3_festive { background-image: url(spritesmith-main-1.png); background-position: -819px -91px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_white { +.customize-option.hair_bangs_3_festive { background-image: url(spritesmith-main-1.png); background-position: -844px -106px; width: 60px; height: 60px; } -.hair_bangs_3_winternight { +.hair_bangs_3_frost { background-image: url(spritesmith-main-1.png); background-position: -819px -182px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_winternight { +.customize-option.hair_bangs_3_frost { background-image: url(spritesmith-main-1.png); background-position: -844px -197px; width: 60px; height: 60px; } -.hair_bangs_3_winterstar { +.hair_bangs_3_ghostwhite { background-image: url(spritesmith-main-1.png); background-position: -819px -273px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_winterstar { +.customize-option.hair_bangs_3_ghostwhite { background-image: url(spritesmith-main-1.png); background-position: -844px -288px; width: 60px; height: 60px; } -.hair_bangs_3_yellow { +.hair_bangs_3_green { background-image: url(spritesmith-main-1.png); background-position: -819px -364px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_yellow { +.customize-option.hair_bangs_3_green { background-image: url(spritesmith-main-1.png); background-position: -844px -379px; width: 60px; height: 60px; } -.hair_bangs_3_zombie { +.hair_bangs_3_halloween { background-image: url(spritesmith-main-1.png); background-position: -819px -455px; width: 90px; height: 90px; } -.customize-option.hair_bangs_3_zombie { +.customize-option.hair_bangs_3_halloween { background-image: url(spritesmith-main-1.png); background-position: -844px -470px; width: 60px; height: 60px; } -.hair_base_10_TRUred { +.hair_bangs_3_holly { background-image: url(spritesmith-main-1.png); background-position: -819px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_10_TRUred { +.customize-option.hair_bangs_3_holly { background-image: url(spritesmith-main-1.png); background-position: -844px -561px; width: 60px; height: 60px; } -.hair_base_10_aurora { +.hair_bangs_3_hollygreen { background-image: url(spritesmith-main-1.png); background-position: -819px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_10_aurora { +.customize-option.hair_bangs_3_hollygreen { background-image: url(spritesmith-main-1.png); background-position: -844px -652px; width: 60px; height: 60px; } -.hair_base_10_black { +.hair_bangs_3_midnight { background-image: url(spritesmith-main-1.png); background-position: -819px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_10_black { +.customize-option.hair_bangs_3_midnight { background-image: url(spritesmith-main-1.png); background-position: -844px -743px; width: 60px; height: 60px; } -.hair_base_10_blond { +.hair_bangs_3_pblue { background-image: url(spritesmith-main-1.png); background-position: 0px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_10_blond { +.customize-option.hair_bangs_3_pblue { background-image: url(spritesmith-main-1.png); background-position: -25px -834px; width: 60px; height: 60px; } -.hair_base_10_blue { +.hair_bangs_3_pblue2 { background-image: url(spritesmith-main-1.png); background-position: -91px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_10_blue { +.customize-option.hair_bangs_3_pblue2 { background-image: url(spritesmith-main-1.png); background-position: -116px -834px; width: 60px; height: 60px; } -.hair_base_10_brown { +.hair_bangs_3_peppermint { background-image: url(spritesmith-main-1.png); background-position: -182px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_10_brown { +.customize-option.hair_bangs_3_peppermint { background-image: url(spritesmith-main-1.png); background-position: -207px -834px; width: 60px; height: 60px; } -.hair_base_10_candycane { +.hair_bangs_3_pgreen { background-image: url(spritesmith-main-1.png); background-position: -273px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_10_candycane { +.customize-option.hair_bangs_3_pgreen { background-image: url(spritesmith-main-1.png); background-position: -298px -834px; width: 60px; height: 60px; } -.hair_base_10_candycorn { +.hair_bangs_3_pgreen2 { background-image: url(spritesmith-main-1.png); background-position: -364px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_10_candycorn { +.customize-option.hair_bangs_3_pgreen2 { background-image: url(spritesmith-main-1.png); background-position: -389px -834px; width: 60px; height: 60px; } -.hair_base_10_festive { +.hair_bangs_3_porange { background-image: url(spritesmith-main-1.png); background-position: -455px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_10_festive { +.customize-option.hair_bangs_3_porange { background-image: url(spritesmith-main-1.png); background-position: -480px -834px; width: 60px; height: 60px; } -.hair_base_10_frost { +.hair_bangs_3_porange2 { background-image: url(spritesmith-main-1.png); background-position: -546px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_10_frost { +.customize-option.hair_bangs_3_porange2 { background-image: url(spritesmith-main-1.png); background-position: -571px -834px; width: 60px; height: 60px; } -.hair_base_10_ghostwhite { +.hair_bangs_3_ppink { background-image: url(spritesmith-main-1.png); background-position: -637px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_10_ghostwhite { +.customize-option.hair_bangs_3_ppink { background-image: url(spritesmith-main-1.png); background-position: -662px -834px; width: 60px; height: 60px; } -.hair_base_10_green { +.hair_bangs_3_ppink2 { background-image: url(spritesmith-main-1.png); background-position: -728px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_10_green { +.customize-option.hair_bangs_3_ppink2 { background-image: url(spritesmith-main-1.png); background-position: -753px -834px; width: 60px; height: 60px; } -.hair_base_10_halloween { +.hair_bangs_3_ppurple { background-image: url(spritesmith-main-1.png); background-position: -819px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_10_halloween { +.customize-option.hair_bangs_3_ppurple { background-image: url(spritesmith-main-1.png); background-position: -844px -834px; width: 60px; height: 60px; } -.hair_base_10_holly { +.hair_bangs_3_ppurple2 { background-image: url(spritesmith-main-1.png); background-position: -910px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_10_holly { +.customize-option.hair_bangs_3_ppurple2 { background-image: url(spritesmith-main-1.png); background-position: -935px -15px; width: 60px; height: 60px; } -.hair_base_10_hollygreen { +.hair_bangs_3_pumpkin { background-image: url(spritesmith-main-1.png); background-position: -910px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_10_hollygreen { +.customize-option.hair_bangs_3_pumpkin { background-image: url(spritesmith-main-1.png); background-position: -935px -106px; width: 60px; height: 60px; } -.hair_base_10_midnight { +.hair_bangs_3_purple { background-image: url(spritesmith-main-1.png); background-position: -910px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_10_midnight { +.customize-option.hair_bangs_3_purple { background-image: url(spritesmith-main-1.png); background-position: -935px -197px; width: 60px; height: 60px; } -.hair_base_10_pblue { +.hair_bangs_3_pyellow { background-image: url(spritesmith-main-1.png); background-position: -910px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_10_pblue { +.customize-option.hair_bangs_3_pyellow { background-image: url(spritesmith-main-1.png); background-position: -935px -288px; width: 60px; height: 60px; } -.hair_base_10_pblue2 { +.hair_bangs_3_pyellow2 { background-image: url(spritesmith-main-1.png); background-position: -910px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_10_pblue2 { +.customize-option.hair_bangs_3_pyellow2 { background-image: url(spritesmith-main-1.png); background-position: -935px -379px; width: 60px; height: 60px; } -.hair_base_10_peppermint { +.hair_bangs_3_rainbow { background-image: url(spritesmith-main-1.png); background-position: -910px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_10_peppermint { +.customize-option.hair_bangs_3_rainbow { background-image: url(spritesmith-main-1.png); background-position: -935px -470px; width: 60px; height: 60px; } -.hair_base_10_pgreen { +.hair_bangs_3_red { background-image: url(spritesmith-main-1.png); background-position: -910px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_10_pgreen { +.customize-option.hair_bangs_3_red { background-image: url(spritesmith-main-1.png); background-position: -935px -561px; width: 60px; height: 60px; } -.hair_base_10_pgreen2 { +.hair_bangs_3_snowy { background-image: url(spritesmith-main-1.png); background-position: -910px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_10_pgreen2 { +.customize-option.hair_bangs_3_snowy { background-image: url(spritesmith-main-1.png); background-position: -935px -652px; width: 60px; height: 60px; } -.hair_base_10_porange { +.hair_bangs_3_white { background-image: url(spritesmith-main-1.png); background-position: -910px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_10_porange { +.customize-option.hair_bangs_3_white { background-image: url(spritesmith-main-1.png); background-position: -935px -743px; width: 60px; height: 60px; } -.hair_base_10_porange2 { +.hair_bangs_3_winternight { background-image: url(spritesmith-main-1.png); background-position: -910px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_10_porange2 { +.customize-option.hair_bangs_3_winternight { background-image: url(spritesmith-main-1.png); background-position: -935px -834px; width: 60px; height: 60px; } -.hair_base_10_ppink { +.hair_bangs_3_winterstar { background-image: url(spritesmith-main-1.png); background-position: 0px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_10_ppink { +.customize-option.hair_bangs_3_winterstar { background-image: url(spritesmith-main-1.png); background-position: -25px -925px; width: 60px; height: 60px; } -.hair_base_10_ppink2 { +.hair_bangs_3_yellow { background-image: url(spritesmith-main-1.png); background-position: -91px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_10_ppink2 { +.customize-option.hair_bangs_3_yellow { background-image: url(spritesmith-main-1.png); background-position: -116px -925px; width: 60px; height: 60px; } -.hair_base_10_ppurple { +.hair_bangs_3_zombie { background-image: url(spritesmith-main-1.png); background-position: -182px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_10_ppurple { +.customize-option.hair_bangs_3_zombie { background-image: url(spritesmith-main-1.png); background-position: -207px -925px; width: 60px; height: 60px; } -.hair_base_10_ppurple2 { +.hair_base_10_TRUred { background-image: url(spritesmith-main-1.png); background-position: -273px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_10_ppurple2 { +.customize-option.hair_base_10_TRUred { background-image: url(spritesmith-main-1.png); background-position: -298px -925px; width: 60px; height: 60px; } -.hair_base_10_pumpkin { +.hair_base_10_aurora { background-image: url(spritesmith-main-1.png); background-position: -364px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_10_pumpkin { +.customize-option.hair_base_10_aurora { background-image: url(spritesmith-main-1.png); background-position: -389px -925px; width: 60px; height: 60px; } -.hair_base_10_purple { +.hair_base_10_black { background-image: url(spritesmith-main-1.png); background-position: -455px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_10_purple { +.customize-option.hair_base_10_black { background-image: url(spritesmith-main-1.png); background-position: -480px -925px; width: 60px; height: 60px; } -.hair_base_10_pyellow { +.hair_base_10_blond { background-image: url(spritesmith-main-1.png); background-position: -546px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_10_pyellow { +.customize-option.hair_base_10_blond { background-image: url(spritesmith-main-1.png); background-position: -571px -925px; width: 60px; height: 60px; } -.hair_base_10_pyellow2 { +.hair_base_10_blue { background-image: url(spritesmith-main-1.png); background-position: -637px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_10_pyellow2 { +.customize-option.hair_base_10_blue { background-image: url(spritesmith-main-1.png); background-position: -662px -925px; width: 60px; height: 60px; } -.hair_base_10_rainbow { +.hair_base_10_brown { background-image: url(spritesmith-main-1.png); background-position: -728px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_10_rainbow { +.customize-option.hair_base_10_brown { background-image: url(spritesmith-main-1.png); background-position: -753px -925px; width: 60px; height: 60px; } -.hair_base_10_red { +.hair_base_10_candycane { background-image: url(spritesmith-main-1.png); background-position: -819px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_10_red { +.customize-option.hair_base_10_candycane { background-image: url(spritesmith-main-1.png); background-position: -844px -925px; width: 60px; height: 60px; } -.hair_base_10_snowy { +.hair_base_10_candycorn { background-image: url(spritesmith-main-1.png); background-position: -910px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_10_snowy { +.customize-option.hair_base_10_candycorn { background-image: url(spritesmith-main-1.png); background-position: -935px -925px; width: 60px; height: 60px; } -.hair_base_10_white { +.hair_base_10_festive { background-image: url(spritesmith-main-1.png); background-position: -1001px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_10_white { +.customize-option.hair_base_10_festive { background-image: url(spritesmith-main-1.png); background-position: -1026px -15px; width: 60px; height: 60px; } -.hair_base_10_winternight { +.hair_base_10_frost { background-image: url(spritesmith-main-1.png); background-position: -1001px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_10_winternight { +.customize-option.hair_base_10_frost { background-image: url(spritesmith-main-1.png); background-position: -1026px -106px; width: 60px; height: 60px; } -.hair_base_10_winterstar { +.hair_base_10_ghostwhite { background-image: url(spritesmith-main-1.png); background-position: -1001px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_10_winterstar { +.customize-option.hair_base_10_ghostwhite { background-image: url(spritesmith-main-1.png); background-position: -1026px -197px; width: 60px; height: 60px; } -.hair_base_10_yellow { +.hair_base_10_green { background-image: url(spritesmith-main-1.png); background-position: -1001px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_10_yellow { +.customize-option.hair_base_10_green { background-image: url(spritesmith-main-1.png); background-position: -1026px -288px; width: 60px; height: 60px; } -.hair_base_10_zombie { +.hair_base_10_halloween { background-image: url(spritesmith-main-1.png); background-position: -1001px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_10_zombie { +.customize-option.hair_base_10_halloween { background-image: url(spritesmith-main-1.png); background-position: -1026px -379px; width: 60px; height: 60px; } -.hair_base_11_TRUred { +.hair_base_10_holly { background-image: url(spritesmith-main-1.png); background-position: -1001px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_11_TRUred { +.customize-option.hair_base_10_holly { background-image: url(spritesmith-main-1.png); background-position: -1026px -470px; width: 60px; height: 60px; } -.hair_base_11_aurora { +.hair_base_10_hollygreen { background-image: url(spritesmith-main-1.png); background-position: -1001px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_11_aurora { +.customize-option.hair_base_10_hollygreen { background-image: url(spritesmith-main-1.png); background-position: -1026px -561px; width: 60px; height: 60px; } -.hair_base_11_black { +.hair_base_10_midnight { background-image: url(spritesmith-main-1.png); background-position: -1001px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_11_black { +.customize-option.hair_base_10_midnight { background-image: url(spritesmith-main-1.png); background-position: -1026px -652px; width: 60px; height: 60px; } -.hair_base_11_blond { +.hair_base_10_pblue { background-image: url(spritesmith-main-1.png); background-position: -1001px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_11_blond { +.customize-option.hair_base_10_pblue { background-image: url(spritesmith-main-1.png); background-position: -1026px -743px; width: 60px; height: 60px; } -.hair_base_11_blue { +.hair_base_10_pblue2 { background-image: url(spritesmith-main-1.png); background-position: -1001px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_11_blue { +.customize-option.hair_base_10_pblue2 { background-image: url(spritesmith-main-1.png); background-position: -1026px -834px; width: 60px; height: 60px; } -.hair_base_11_brown { +.hair_base_10_peppermint { background-image: url(spritesmith-main-1.png); background-position: -1001px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_11_brown { +.customize-option.hair_base_10_peppermint { background-image: url(spritesmith-main-1.png); background-position: -1026px -925px; width: 60px; height: 60px; } -.hair_base_11_candycane { +.hair_base_10_pgreen { background-image: url(spritesmith-main-1.png); background-position: 0px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_11_candycane { +.customize-option.hair_base_10_pgreen { background-image: url(spritesmith-main-1.png); background-position: -25px -1016px; width: 60px; height: 60px; } -.hair_base_11_candycorn { +.hair_base_10_pgreen2 { background-image: url(spritesmith-main-1.png); background-position: -91px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_11_candycorn { +.customize-option.hair_base_10_pgreen2 { background-image: url(spritesmith-main-1.png); background-position: -116px -1016px; width: 60px; height: 60px; } -.hair_base_11_festive { +.hair_base_10_porange { background-image: url(spritesmith-main-1.png); background-position: -182px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_11_festive { +.customize-option.hair_base_10_porange { background-image: url(spritesmith-main-1.png); background-position: -207px -1016px; width: 60px; height: 60px; } -.hair_base_11_frost { +.hair_base_10_porange2 { background-image: url(spritesmith-main-1.png); background-position: -273px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_11_frost { +.customize-option.hair_base_10_porange2 { background-image: url(spritesmith-main-1.png); background-position: -298px -1016px; width: 60px; height: 60px; } -.hair_base_11_ghostwhite { +.hair_base_10_ppink { background-image: url(spritesmith-main-1.png); background-position: -364px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_11_ghostwhite { +.customize-option.hair_base_10_ppink { background-image: url(spritesmith-main-1.png); background-position: -389px -1016px; width: 60px; height: 60px; } -.hair_base_11_green { +.hair_base_10_ppink2 { background-image: url(spritesmith-main-1.png); background-position: -455px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_11_green { +.customize-option.hair_base_10_ppink2 { background-image: url(spritesmith-main-1.png); background-position: -480px -1016px; width: 60px; height: 60px; } -.hair_base_11_halloween { +.hair_base_10_ppurple { background-image: url(spritesmith-main-1.png); background-position: -546px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_11_halloween { +.customize-option.hair_base_10_ppurple { background-image: url(spritesmith-main-1.png); background-position: -571px -1016px; width: 60px; height: 60px; } -.hair_base_11_holly { +.hair_base_10_ppurple2 { background-image: url(spritesmith-main-1.png); background-position: -637px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_11_holly { +.customize-option.hair_base_10_ppurple2 { background-image: url(spritesmith-main-1.png); background-position: -662px -1016px; width: 60px; height: 60px; } -.hair_base_11_hollygreen { +.hair_base_10_pumpkin { background-image: url(spritesmith-main-1.png); background-position: -728px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_11_hollygreen { +.customize-option.hair_base_10_pumpkin { background-image: url(spritesmith-main-1.png); background-position: -753px -1016px; width: 60px; height: 60px; } -.hair_base_11_midnight { +.hair_base_10_purple { background-image: url(spritesmith-main-1.png); background-position: -819px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_11_midnight { +.customize-option.hair_base_10_purple { background-image: url(spritesmith-main-1.png); background-position: -844px -1016px; width: 60px; height: 60px; } -.hair_base_11_pblue { +.hair_base_10_pyellow { background-image: url(spritesmith-main-1.png); background-position: -910px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_11_pblue { +.customize-option.hair_base_10_pyellow { background-image: url(spritesmith-main-1.png); background-position: -935px -1016px; width: 60px; height: 60px; } -.hair_base_11_pblue2 { +.hair_base_10_pyellow2 { background-image: url(spritesmith-main-1.png); background-position: -1001px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_11_pblue2 { +.customize-option.hair_base_10_pyellow2 { background-image: url(spritesmith-main-1.png); background-position: -1026px -1016px; width: 60px; height: 60px; } -.hair_base_11_peppermint { +.hair_base_10_rainbow { background-image: url(spritesmith-main-1.png); background-position: -1092px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_11_peppermint { +.customize-option.hair_base_10_rainbow { background-image: url(spritesmith-main-1.png); background-position: -1117px -15px; width: 60px; height: 60px; } -.hair_base_11_pgreen { +.hair_base_10_red { background-image: url(spritesmith-main-1.png); background-position: -1092px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_11_pgreen { +.customize-option.hair_base_10_red { background-image: url(spritesmith-main-1.png); background-position: -1117px -106px; width: 60px; height: 60px; } -.hair_base_11_pgreen2 { +.hair_base_10_snowy { background-image: url(spritesmith-main-1.png); background-position: -1092px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_11_pgreen2 { +.customize-option.hair_base_10_snowy { background-image: url(spritesmith-main-1.png); background-position: -1117px -197px; width: 60px; height: 60px; } -.hair_base_11_porange { +.hair_base_10_white { background-image: url(spritesmith-main-1.png); background-position: -1092px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_11_porange { +.customize-option.hair_base_10_white { background-image: url(spritesmith-main-1.png); background-position: -1117px -288px; width: 60px; height: 60px; } -.hair_base_11_porange2 { +.hair_base_10_winternight { background-image: url(spritesmith-main-1.png); background-position: -1092px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_11_porange2 { +.customize-option.hair_base_10_winternight { background-image: url(spritesmith-main-1.png); background-position: -1117px -379px; width: 60px; height: 60px; } -.hair_base_11_ppink { +.hair_base_10_winterstar { background-image: url(spritesmith-main-1.png); background-position: -1092px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_11_ppink { +.customize-option.hair_base_10_winterstar { background-image: url(spritesmith-main-1.png); background-position: -1117px -470px; width: 60px; height: 60px; } -.hair_base_11_ppink2 { +.hair_base_10_yellow { background-image: url(spritesmith-main-1.png); background-position: -1092px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_11_ppink2 { +.customize-option.hair_base_10_yellow { background-image: url(spritesmith-main-1.png); background-position: -1117px -561px; width: 60px; height: 60px; } -.hair_base_11_ppurple { +.hair_base_10_zombie { background-image: url(spritesmith-main-1.png); background-position: -1092px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_11_ppurple { +.customize-option.hair_base_10_zombie { background-image: url(spritesmith-main-1.png); background-position: -1117px -652px; width: 60px; height: 60px; } -.hair_base_11_ppurple2 { +.hair_base_11_TRUred { background-image: url(spritesmith-main-1.png); background-position: -1092px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_11_ppurple2 { +.customize-option.hair_base_11_TRUred { background-image: url(spritesmith-main-1.png); background-position: -1117px -743px; width: 60px; height: 60px; } -.hair_base_11_pumpkin { +.hair_base_11_aurora { background-image: url(spritesmith-main-1.png); background-position: -1092px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_11_pumpkin { +.customize-option.hair_base_11_aurora { background-image: url(spritesmith-main-1.png); background-position: -1117px -834px; width: 60px; height: 60px; } -.hair_base_11_purple { +.hair_base_11_black { background-image: url(spritesmith-main-1.png); background-position: -1092px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_11_purple { +.customize-option.hair_base_11_black { background-image: url(spritesmith-main-1.png); background-position: -1117px -925px; width: 60px; height: 60px; } -.hair_base_11_pyellow { +.hair_base_11_blond { background-image: url(spritesmith-main-1.png); background-position: -1092px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_11_pyellow { +.customize-option.hair_base_11_blond { background-image: url(spritesmith-main-1.png); background-position: -1117px -1016px; width: 60px; height: 60px; } -.hair_base_11_pyellow2 { +.hair_base_11_blue { background-image: url(spritesmith-main-1.png); background-position: 0px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_11_pyellow2 { +.customize-option.hair_base_11_blue { background-image: url(spritesmith-main-1.png); background-position: -25px -1107px; width: 60px; height: 60px; } -.hair_base_11_rainbow { +.hair_base_11_brown { background-image: url(spritesmith-main-1.png); background-position: -91px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_11_rainbow { +.customize-option.hair_base_11_brown { background-image: url(spritesmith-main-1.png); background-position: -116px -1107px; width: 60px; height: 60px; } -.hair_base_11_red { +.hair_base_11_candycane { background-image: url(spritesmith-main-1.png); background-position: -182px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_11_red { +.customize-option.hair_base_11_candycane { background-image: url(spritesmith-main-1.png); background-position: -207px -1107px; width: 60px; height: 60px; } -.hair_base_11_snowy { +.hair_base_11_candycorn { background-image: url(spritesmith-main-1.png); background-position: -273px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_11_snowy { +.customize-option.hair_base_11_candycorn { background-image: url(spritesmith-main-1.png); background-position: -298px -1107px; width: 60px; height: 60px; } -.hair_base_11_white { +.hair_base_11_festive { background-image: url(spritesmith-main-1.png); background-position: -364px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_11_white { +.customize-option.hair_base_11_festive { background-image: url(spritesmith-main-1.png); background-position: -389px -1107px; width: 60px; height: 60px; } -.hair_base_11_winternight { +.hair_base_11_frost { background-image: url(spritesmith-main-1.png); background-position: -455px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_11_winternight { +.customize-option.hair_base_11_frost { background-image: url(spritesmith-main-1.png); background-position: -480px -1107px; width: 60px; height: 60px; } -.hair_base_11_winterstar { +.hair_base_11_ghostwhite { background-image: url(spritesmith-main-1.png); background-position: -546px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_11_winterstar { +.customize-option.hair_base_11_ghostwhite { background-image: url(spritesmith-main-1.png); background-position: -571px -1107px; width: 60px; height: 60px; } -.hair_base_11_yellow { +.hair_base_11_green { background-image: url(spritesmith-main-1.png); background-position: -637px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_11_yellow { +.customize-option.hair_base_11_green { background-image: url(spritesmith-main-1.png); background-position: -662px -1107px; width: 60px; height: 60px; } -.hair_base_11_zombie { +.hair_base_11_halloween { background-image: url(spritesmith-main-1.png); background-position: 0px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_11_zombie { +.customize-option.hair_base_11_halloween { background-image: url(spritesmith-main-1.png); background-position: -25px -15px; width: 60px; height: 60px; } -.hair_base_12_TRUred { +.hair_base_11_holly { background-image: url(spritesmith-main-1.png); background-position: -819px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_12_TRUred { +.customize-option.hair_base_11_holly { background-image: url(spritesmith-main-1.png); background-position: -844px -1107px; width: 60px; height: 60px; } -.hair_base_12_aurora { +.hair_base_11_hollygreen { background-image: url(spritesmith-main-1.png); background-position: -910px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_12_aurora { +.customize-option.hair_base_11_hollygreen { background-image: url(spritesmith-main-1.png); background-position: -935px -1107px; width: 60px; height: 60px; } -.hair_base_12_black { +.hair_base_11_midnight { background-image: url(spritesmith-main-1.png); background-position: -1001px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_12_black { +.customize-option.hair_base_11_midnight { background-image: url(spritesmith-main-1.png); background-position: -1026px -1107px; width: 60px; height: 60px; } -.hair_base_12_blond { +.hair_base_11_pblue { background-image: url(spritesmith-main-1.png); background-position: -1092px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_12_blond { +.customize-option.hair_base_11_pblue { background-image: url(spritesmith-main-1.png); background-position: -1117px -1107px; width: 60px; height: 60px; } -.hair_base_12_blue { +.hair_base_11_pblue2 { background-image: url(spritesmith-main-1.png); background-position: -1183px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_12_blue { +.customize-option.hair_base_11_pblue2 { background-image: url(spritesmith-main-1.png); background-position: -1208px -15px; width: 60px; height: 60px; } -.hair_base_12_brown { +.hair_base_11_peppermint { background-image: url(spritesmith-main-1.png); background-position: -1183px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_12_brown { +.customize-option.hair_base_11_peppermint { background-image: url(spritesmith-main-1.png); background-position: -1208px -106px; width: 60px; height: 60px; } -.hair_base_12_candycane { +.hair_base_11_pgreen { background-image: url(spritesmith-main-1.png); background-position: -1183px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_12_candycane { +.customize-option.hair_base_11_pgreen { background-image: url(spritesmith-main-1.png); background-position: -1208px -197px; width: 60px; height: 60px; } -.hair_base_12_candycorn { +.hair_base_11_pgreen2 { background-image: url(spritesmith-main-1.png); background-position: -1183px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_12_candycorn { +.customize-option.hair_base_11_pgreen2 { background-image: url(spritesmith-main-1.png); background-position: -1208px -288px; width: 60px; height: 60px; } -.hair_base_12_festive { +.hair_base_11_porange { background-image: url(spritesmith-main-1.png); background-position: -1183px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_12_festive { +.customize-option.hair_base_11_porange { background-image: url(spritesmith-main-1.png); background-position: -1208px -379px; width: 60px; height: 60px; } -.hair_base_12_frost { +.hair_base_11_porange2 { background-image: url(spritesmith-main-1.png); background-position: -1183px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_12_frost { +.customize-option.hair_base_11_porange2 { background-image: url(spritesmith-main-1.png); background-position: -1208px -470px; width: 60px; height: 60px; } -.hair_base_12_ghostwhite { +.hair_base_11_ppink { background-image: url(spritesmith-main-1.png); background-position: -1183px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_12_ghostwhite { +.customize-option.hair_base_11_ppink { background-image: url(spritesmith-main-1.png); background-position: -1208px -561px; width: 60px; height: 60px; } -.hair_base_12_green { +.hair_base_11_ppink2 { background-image: url(spritesmith-main-1.png); background-position: -1183px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_12_green { +.customize-option.hair_base_11_ppink2 { background-image: url(spritesmith-main-1.png); background-position: -1208px -652px; width: 60px; height: 60px; } -.hair_base_12_halloween { +.hair_base_11_ppurple { background-image: url(spritesmith-main-1.png); background-position: -1183px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_12_halloween { +.customize-option.hair_base_11_ppurple { background-image: url(spritesmith-main-1.png); background-position: -1208px -743px; width: 60px; height: 60px; } -.hair_base_12_holly { +.hair_base_11_ppurple2 { background-image: url(spritesmith-main-1.png); background-position: -1183px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_12_holly { +.customize-option.hair_base_11_ppurple2 { background-image: url(spritesmith-main-1.png); background-position: -1208px -834px; width: 60px; height: 60px; } -.hair_base_12_hollygreen { +.hair_base_11_pumpkin { background-image: url(spritesmith-main-1.png); background-position: -1183px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_12_hollygreen { +.customize-option.hair_base_11_pumpkin { background-image: url(spritesmith-main-1.png); background-position: -1208px -925px; width: 60px; height: 60px; } -.hair_base_12_midnight { +.hair_base_11_purple { background-image: url(spritesmith-main-1.png); background-position: -1183px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_12_midnight { +.customize-option.hair_base_11_purple { background-image: url(spritesmith-main-1.png); background-position: -1208px -1016px; width: 60px; height: 60px; } -.hair_base_12_pblue { +.hair_base_11_pyellow { background-image: url(spritesmith-main-1.png); background-position: -1183px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_12_pblue { +.customize-option.hair_base_11_pyellow { background-image: url(spritesmith-main-1.png); background-position: -1208px -1107px; width: 60px; height: 60px; } -.hair_base_12_pblue2 { +.hair_base_11_pyellow2 { background-image: url(spritesmith-main-1.png); background-position: 0px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_12_pblue2 { +.customize-option.hair_base_11_pyellow2 { background-image: url(spritesmith-main-1.png); background-position: -25px -1198px; width: 60px; height: 60px; } -.hair_base_12_peppermint { +.hair_base_11_rainbow { background-image: url(spritesmith-main-1.png); background-position: -91px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_12_peppermint { +.customize-option.hair_base_11_rainbow { background-image: url(spritesmith-main-1.png); background-position: -116px -1198px; width: 60px; height: 60px; } -.hair_base_12_pgreen { +.hair_base_11_red { background-image: url(spritesmith-main-1.png); background-position: -182px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_12_pgreen { +.customize-option.hair_base_11_red { background-image: url(spritesmith-main-1.png); background-position: -207px -1198px; width: 60px; height: 60px; } -.hair_base_12_pgreen2 { +.hair_base_11_snowy { background-image: url(spritesmith-main-1.png); background-position: -273px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_12_pgreen2 { +.customize-option.hair_base_11_snowy { background-image: url(spritesmith-main-1.png); background-position: -298px -1198px; width: 60px; height: 60px; } -.hair_base_12_porange { +.hair_base_11_white { background-image: url(spritesmith-main-1.png); background-position: -364px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_12_porange { +.customize-option.hair_base_11_white { background-image: url(spritesmith-main-1.png); background-position: -389px -1198px; width: 60px; height: 60px; } -.hair_base_12_porange2 { +.hair_base_11_winternight { background-image: url(spritesmith-main-1.png); background-position: -455px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_12_porange2 { +.customize-option.hair_base_11_winternight { background-image: url(spritesmith-main-1.png); background-position: -480px -1198px; width: 60px; height: 60px; } -.hair_base_12_ppink { +.hair_base_11_winterstar { background-image: url(spritesmith-main-1.png); background-position: -546px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_12_ppink { +.customize-option.hair_base_11_winterstar { background-image: url(spritesmith-main-1.png); background-position: -571px -1198px; width: 60px; height: 60px; } -.hair_base_12_ppink2 { +.hair_base_11_yellow { background-image: url(spritesmith-main-1.png); background-position: -637px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_12_ppink2 { +.customize-option.hair_base_11_yellow { background-image: url(spritesmith-main-1.png); background-position: -662px -1198px; width: 60px; height: 60px; } -.hair_base_12_ppurple { +.hair_base_11_zombie { background-image: url(spritesmith-main-1.png); background-position: -728px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_12_ppurple { +.customize-option.hair_base_11_zombie { background-image: url(spritesmith-main-1.png); background-position: -753px -1198px; width: 60px; height: 60px; } -.hair_base_12_ppurple2 { +.hair_base_12_TRUred { background-image: url(spritesmith-main-1.png); background-position: -819px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_12_ppurple2 { +.customize-option.hair_base_12_TRUred { background-image: url(spritesmith-main-1.png); background-position: -844px -1198px; width: 60px; height: 60px; } -.hair_base_12_pumpkin { +.hair_base_12_aurora { background-image: url(spritesmith-main-1.png); background-position: -910px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_12_pumpkin { +.customize-option.hair_base_12_aurora { background-image: url(spritesmith-main-1.png); background-position: -935px -1198px; width: 60px; height: 60px; } -.hair_base_12_purple { +.hair_base_12_black { background-image: url(spritesmith-main-1.png); background-position: -1001px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_12_purple { +.customize-option.hair_base_12_black { background-image: url(spritesmith-main-1.png); background-position: -1026px -1198px; width: 60px; height: 60px; } -.hair_base_12_pyellow { +.hair_base_12_blond { background-image: url(spritesmith-main-1.png); background-position: -1092px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_12_pyellow { +.customize-option.hair_base_12_blond { background-image: url(spritesmith-main-1.png); background-position: -1117px -1198px; width: 60px; height: 60px; } -.hair_base_12_pyellow2 { +.hair_base_12_blue { background-image: url(spritesmith-main-1.png); background-position: -1183px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_12_pyellow2 { +.customize-option.hair_base_12_blue { background-image: url(spritesmith-main-1.png); background-position: -1208px -1198px; width: 60px; height: 60px; } -.hair_base_12_rainbow { +.hair_base_12_brown { background-image: url(spritesmith-main-1.png); background-position: -1274px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_12_rainbow { +.customize-option.hair_base_12_brown { background-image: url(spritesmith-main-1.png); background-position: -1299px -15px; width: 60px; height: 60px; } -.hair_base_12_red { +.hair_base_12_candycane { background-image: url(spritesmith-main-1.png); background-position: -1274px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_12_red { +.customize-option.hair_base_12_candycane { background-image: url(spritesmith-main-1.png); background-position: -1299px -106px; width: 60px; height: 60px; } -.hair_base_12_snowy { +.hair_base_12_candycorn { background-image: url(spritesmith-main-1.png); background-position: -1274px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_12_snowy { +.customize-option.hair_base_12_candycorn { background-image: url(spritesmith-main-1.png); background-position: -1299px -197px; width: 60px; height: 60px; } -.hair_base_12_white { +.hair_base_12_festive { background-image: url(spritesmith-main-1.png); background-position: -1274px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_12_white { +.customize-option.hair_base_12_festive { background-image: url(spritesmith-main-1.png); background-position: -1299px -288px; width: 60px; height: 60px; } -.hair_base_12_winternight { +.hair_base_12_frost { background-image: url(spritesmith-main-1.png); background-position: -1274px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_12_winternight { +.customize-option.hair_base_12_frost { background-image: url(spritesmith-main-1.png); background-position: -1299px -379px; width: 60px; height: 60px; } -.hair_base_12_winterstar { +.hair_base_12_ghostwhite { background-image: url(spritesmith-main-1.png); background-position: -1274px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_12_winterstar { +.customize-option.hair_base_12_ghostwhite { background-image: url(spritesmith-main-1.png); background-position: -1299px -470px; width: 60px; height: 60px; } -.hair_base_12_yellow { +.hair_base_12_green { background-image: url(spritesmith-main-1.png); background-position: -1274px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_12_yellow { +.customize-option.hair_base_12_green { background-image: url(spritesmith-main-1.png); background-position: -1299px -561px; width: 60px; height: 60px; } -.hair_base_12_zombie { +.hair_base_12_halloween { background-image: url(spritesmith-main-1.png); background-position: -1274px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_12_zombie { +.customize-option.hair_base_12_halloween { background-image: url(spritesmith-main-1.png); background-position: -1299px -652px; width: 60px; height: 60px; } -.hair_base_13_TRUred { +.hair_base_12_holly { background-image: url(spritesmith-main-1.png); background-position: -1274px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_13_TRUred { +.customize-option.hair_base_12_holly { background-image: url(spritesmith-main-1.png); background-position: -1299px -743px; width: 60px; height: 60px; } -.hair_base_13_aurora { +.hair_base_12_hollygreen { background-image: url(spritesmith-main-1.png); background-position: -1274px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_13_aurora { +.customize-option.hair_base_12_hollygreen { background-image: url(spritesmith-main-1.png); background-position: -1299px -834px; width: 60px; height: 60px; } -.hair_base_13_black { +.hair_base_12_midnight { background-image: url(spritesmith-main-1.png); background-position: -1274px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_13_black { +.customize-option.hair_base_12_midnight { background-image: url(spritesmith-main-1.png); background-position: -1299px -925px; width: 60px; height: 60px; } -.hair_base_13_blond { +.hair_base_12_pblue { background-image: url(spritesmith-main-1.png); background-position: -1274px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_13_blond { +.customize-option.hair_base_12_pblue { background-image: url(spritesmith-main-1.png); background-position: -1299px -1016px; width: 60px; height: 60px; } -.hair_base_13_blue { +.hair_base_12_pblue2 { background-image: url(spritesmith-main-1.png); background-position: -1274px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_13_blue { +.customize-option.hair_base_12_pblue2 { background-image: url(spritesmith-main-1.png); background-position: -1299px -1107px; width: 60px; height: 60px; } -.hair_base_13_brown { +.hair_base_12_peppermint { background-image: url(spritesmith-main-1.png); background-position: -1274px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_13_brown { +.customize-option.hair_base_12_peppermint { background-image: url(spritesmith-main-1.png); background-position: -1299px -1198px; width: 60px; height: 60px; } -.hair_base_13_candycane { +.hair_base_12_pgreen { background-image: url(spritesmith-main-1.png); background-position: 0px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_13_candycane { +.customize-option.hair_base_12_pgreen { background-image: url(spritesmith-main-1.png); background-position: -25px -1289px; width: 60px; height: 60px; } -.hair_base_13_candycorn { +.hair_base_12_pgreen2 { background-image: url(spritesmith-main-1.png); background-position: -91px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_13_candycorn { +.customize-option.hair_base_12_pgreen2 { background-image: url(spritesmith-main-1.png); background-position: -116px -1289px; width: 60px; height: 60px; } -.hair_base_13_festive { +.hair_base_12_porange { background-image: url(spritesmith-main-1.png); background-position: -182px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_13_festive { +.customize-option.hair_base_12_porange { background-image: url(spritesmith-main-1.png); background-position: -207px -1289px; width: 60px; height: 60px; } -.hair_base_13_frost { +.hair_base_12_porange2 { background-image: url(spritesmith-main-1.png); background-position: -273px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_13_frost { +.customize-option.hair_base_12_porange2 { background-image: url(spritesmith-main-1.png); background-position: -298px -1289px; width: 60px; height: 60px; } -.hair_base_13_ghostwhite { +.hair_base_12_ppink { background-image: url(spritesmith-main-1.png); background-position: -364px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_13_ghostwhite { +.customize-option.hair_base_12_ppink { background-image: url(spritesmith-main-1.png); background-position: -389px -1289px; width: 60px; height: 60px; } -.hair_base_13_green { +.hair_base_12_ppink2 { background-image: url(spritesmith-main-1.png); background-position: -455px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_13_green { +.customize-option.hair_base_12_ppink2 { background-image: url(spritesmith-main-1.png); background-position: -480px -1289px; width: 60px; height: 60px; } -.hair_base_13_halloween { +.hair_base_12_ppurple { background-image: url(spritesmith-main-1.png); background-position: -546px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_13_halloween { +.customize-option.hair_base_12_ppurple { background-image: url(spritesmith-main-1.png); background-position: -571px -1289px; width: 60px; height: 60px; } -.hair_base_13_holly { +.hair_base_12_ppurple2 { background-image: url(spritesmith-main-1.png); background-position: -637px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_13_holly { +.customize-option.hair_base_12_ppurple2 { background-image: url(spritesmith-main-1.png); background-position: -662px -1289px; width: 60px; height: 60px; } -.hair_base_13_hollygreen { +.hair_base_12_pumpkin { background-image: url(spritesmith-main-1.png); background-position: -728px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_13_hollygreen { +.customize-option.hair_base_12_pumpkin { background-image: url(spritesmith-main-1.png); background-position: -753px -1289px; width: 60px; height: 60px; } -.hair_base_13_midnight { +.hair_base_12_purple { background-image: url(spritesmith-main-1.png); background-position: -819px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_13_midnight { +.customize-option.hair_base_12_purple { background-image: url(spritesmith-main-1.png); background-position: -844px -1289px; width: 60px; height: 60px; } -.hair_base_13_pblue { +.hair_base_12_pyellow { background-image: url(spritesmith-main-1.png); background-position: -910px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_13_pblue { +.customize-option.hair_base_12_pyellow { background-image: url(spritesmith-main-1.png); background-position: -935px -1289px; width: 60px; height: 60px; } -.hair_base_13_pblue2 { +.hair_base_12_pyellow2 { background-image: url(spritesmith-main-1.png); background-position: -1001px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_13_pblue2 { +.customize-option.hair_base_12_pyellow2 { background-image: url(spritesmith-main-1.png); background-position: -1026px -1289px; width: 60px; height: 60px; } -.hair_base_13_peppermint { +.hair_base_12_rainbow { background-image: url(spritesmith-main-1.png); background-position: -1092px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_13_peppermint { +.customize-option.hair_base_12_rainbow { background-image: url(spritesmith-main-1.png); background-position: -1117px -1289px; width: 60px; height: 60px; } -.hair_base_13_pgreen { +.hair_base_12_red { background-image: url(spritesmith-main-1.png); background-position: -1183px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_13_pgreen { +.customize-option.hair_base_12_red { background-image: url(spritesmith-main-1.png); background-position: -1208px -1289px; width: 60px; height: 60px; } -.hair_base_13_pgreen2 { +.hair_base_12_snowy { background-image: url(spritesmith-main-1.png); background-position: -1274px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_13_pgreen2 { +.customize-option.hair_base_12_snowy { background-image: url(spritesmith-main-1.png); background-position: -1299px -1289px; width: 60px; height: 60px; } -.hair_base_13_porange { +.hair_base_12_white { background-image: url(spritesmith-main-1.png); background-position: -1365px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_13_porange { +.customize-option.hair_base_12_white { background-image: url(spritesmith-main-1.png); background-position: -1390px -15px; width: 60px; height: 60px; } -.hair_base_13_porange2 { +.hair_base_12_winternight { background-image: url(spritesmith-main-1.png); background-position: -1365px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_13_porange2 { +.customize-option.hair_base_12_winternight { background-image: url(spritesmith-main-1.png); background-position: -1390px -106px; width: 60px; height: 60px; } -.hair_base_13_ppink { +.hair_base_12_winterstar { background-image: url(spritesmith-main-1.png); background-position: -1365px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_13_ppink { +.customize-option.hair_base_12_winterstar { background-image: url(spritesmith-main-1.png); background-position: -1390px -197px; width: 60px; height: 60px; } -.hair_base_13_ppink2 { +.hair_base_12_yellow { background-image: url(spritesmith-main-1.png); background-position: -1365px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_13_ppink2 { +.customize-option.hair_base_12_yellow { background-image: url(spritesmith-main-1.png); background-position: -1390px -288px; width: 60px; height: 60px; } -.hair_base_13_ppurple { +.hair_base_12_zombie { background-image: url(spritesmith-main-1.png); background-position: -1365px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_13_ppurple { +.customize-option.hair_base_12_zombie { background-image: url(spritesmith-main-1.png); background-position: -1390px -379px; width: 60px; height: 60px; } -.hair_base_13_ppurple2 { +.hair_base_13_TRUred { background-image: url(spritesmith-main-1.png); background-position: -1365px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_13_ppurple2 { +.customize-option.hair_base_13_TRUred { background-image: url(spritesmith-main-1.png); background-position: -1390px -470px; width: 60px; height: 60px; } -.hair_base_13_pumpkin { +.hair_base_13_aurora { background-image: url(spritesmith-main-1.png); background-position: -1365px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_13_pumpkin { +.customize-option.hair_base_13_aurora { background-image: url(spritesmith-main-1.png); background-position: -1390px -561px; width: 60px; height: 60px; } -.hair_base_13_purple { +.hair_base_13_black { background-image: url(spritesmith-main-1.png); background-position: -1365px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_13_purple { +.customize-option.hair_base_13_black { background-image: url(spritesmith-main-1.png); background-position: -1390px -652px; width: 60px; height: 60px; } -.hair_base_13_pyellow { +.hair_base_13_blond { background-image: url(spritesmith-main-1.png); background-position: -1365px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_13_pyellow { +.customize-option.hair_base_13_blond { background-image: url(spritesmith-main-1.png); background-position: -1390px -743px; width: 60px; height: 60px; } -.hair_base_13_pyellow2 { +.hair_base_13_blue { background-image: url(spritesmith-main-1.png); background-position: -1365px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_13_pyellow2 { +.customize-option.hair_base_13_blue { background-image: url(spritesmith-main-1.png); background-position: -1390px -834px; width: 60px; height: 60px; } -.hair_base_13_rainbow { +.hair_base_13_brown { background-image: url(spritesmith-main-1.png); background-position: -1365px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_13_rainbow { +.customize-option.hair_base_13_brown { background-image: url(spritesmith-main-1.png); background-position: -1390px -925px; width: 60px; height: 60px; } -.hair_base_13_red { +.hair_base_13_candycane { background-image: url(spritesmith-main-1.png); background-position: -1365px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_13_red { +.customize-option.hair_base_13_candycane { background-image: url(spritesmith-main-1.png); background-position: -1390px -1016px; width: 60px; height: 60px; } -.hair_base_13_snowy { +.hair_base_13_candycorn { background-image: url(spritesmith-main-1.png); background-position: -1365px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_13_snowy { +.customize-option.hair_base_13_candycorn { background-image: url(spritesmith-main-1.png); background-position: -1390px -1107px; width: 60px; height: 60px; } -.hair_base_13_white { +.hair_base_13_festive { background-image: url(spritesmith-main-1.png); background-position: -1365px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_13_white { +.customize-option.hair_base_13_festive { background-image: url(spritesmith-main-1.png); background-position: -1390px -1198px; width: 60px; height: 60px; } -.hair_base_13_winternight { +.hair_base_13_frost { background-image: url(spritesmith-main-1.png); background-position: -1365px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_13_winternight { +.customize-option.hair_base_13_frost { background-image: url(spritesmith-main-1.png); background-position: -1390px -1289px; width: 60px; height: 60px; } -.hair_base_13_winterstar { +.hair_base_13_ghostwhite { background-image: url(spritesmith-main-1.png); background-position: 0px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_13_winterstar { +.customize-option.hair_base_13_ghostwhite { background-image: url(spritesmith-main-1.png); background-position: -25px -1380px; width: 60px; height: 60px; } -.hair_base_13_yellow { +.hair_base_13_green { background-image: url(spritesmith-main-1.png); background-position: -91px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_13_yellow { +.customize-option.hair_base_13_green { background-image: url(spritesmith-main-1.png); background-position: -116px -1380px; width: 60px; height: 60px; } -.hair_base_13_zombie { +.hair_base_13_halloween { background-image: url(spritesmith-main-1.png); background-position: -182px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_13_zombie { +.customize-option.hair_base_13_halloween { background-image: url(spritesmith-main-1.png); background-position: -207px -1380px; width: 60px; height: 60px; } -.hair_base_14_TRUred { +.hair_base_13_holly { background-image: url(spritesmith-main-1.png); background-position: -273px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_14_TRUred { +.customize-option.hair_base_13_holly { background-image: url(spritesmith-main-1.png); background-position: -298px -1380px; width: 60px; height: 60px; } -.hair_base_14_aurora { +.hair_base_13_hollygreen { background-image: url(spritesmith-main-1.png); background-position: -364px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_14_aurora { +.customize-option.hair_base_13_hollygreen { background-image: url(spritesmith-main-1.png); background-position: -389px -1380px; width: 60px; height: 60px; } -.hair_base_14_black { +.hair_base_13_midnight { background-image: url(spritesmith-main-1.png); background-position: -455px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_14_black { +.customize-option.hair_base_13_midnight { background-image: url(spritesmith-main-1.png); background-position: -480px -1380px; width: 60px; height: 60px; } -.hair_base_14_blond { +.hair_base_13_pblue { background-image: url(spritesmith-main-1.png); background-position: -546px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_14_blond { +.customize-option.hair_base_13_pblue { background-image: url(spritesmith-main-1.png); background-position: -571px -1380px; width: 60px; height: 60px; } -.hair_base_14_blue { +.hair_base_13_pblue2 { background-image: url(spritesmith-main-1.png); background-position: -637px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_14_blue { +.customize-option.hair_base_13_pblue2 { background-image: url(spritesmith-main-1.png); background-position: -662px -1380px; width: 60px; height: 60px; } -.hair_base_14_brown { +.hair_base_13_peppermint { background-image: url(spritesmith-main-1.png); background-position: -728px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_14_brown { +.customize-option.hair_base_13_peppermint { background-image: url(spritesmith-main-1.png); background-position: -753px -1380px; width: 60px; height: 60px; } -.hair_base_14_candycane { +.hair_base_13_pgreen { background-image: url(spritesmith-main-1.png); background-position: -819px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_14_candycane { +.customize-option.hair_base_13_pgreen { background-image: url(spritesmith-main-1.png); background-position: -844px -1380px; width: 60px; height: 60px; } -.hair_base_14_candycorn { +.hair_base_13_pgreen2 { background-image: url(spritesmith-main-1.png); background-position: -910px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_14_candycorn { +.customize-option.hair_base_13_pgreen2 { background-image: url(spritesmith-main-1.png); background-position: -935px -1380px; width: 60px; height: 60px; } -.hair_base_14_festive { +.hair_base_13_porange { background-image: url(spritesmith-main-1.png); background-position: -1001px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_14_festive { +.customize-option.hair_base_13_porange { background-image: url(spritesmith-main-1.png); background-position: -1026px -1380px; width: 60px; height: 60px; } -.hair_base_14_frost { +.hair_base_13_porange2 { background-image: url(spritesmith-main-1.png); background-position: -1092px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_14_frost { +.customize-option.hair_base_13_porange2 { background-image: url(spritesmith-main-1.png); background-position: -1117px -1380px; width: 60px; height: 60px; } -.hair_base_14_ghostwhite { +.hair_base_13_ppink { background-image: url(spritesmith-main-1.png); background-position: -1183px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_14_ghostwhite { +.customize-option.hair_base_13_ppink { background-image: url(spritesmith-main-1.png); background-position: -1208px -1380px; width: 60px; height: 60px; } -.hair_base_14_green { +.hair_base_13_ppink2 { background-image: url(spritesmith-main-1.png); background-position: -1274px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_14_green { +.customize-option.hair_base_13_ppink2 { background-image: url(spritesmith-main-1.png); background-position: -1299px -1380px; width: 60px; height: 60px; } -.hair_base_14_halloween { +.hair_base_13_ppurple { background-image: url(spritesmith-main-1.png); background-position: -1365px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_14_halloween { +.customize-option.hair_base_13_ppurple { background-image: url(spritesmith-main-1.png); background-position: -1390px -1380px; width: 60px; height: 60px; } -.hair_base_14_holly { +.hair_base_13_ppurple2 { background-image: url(spritesmith-main-1.png); background-position: -1456px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_14_holly { +.customize-option.hair_base_13_ppurple2 { background-image: url(spritesmith-main-1.png); background-position: -1481px -15px; width: 60px; height: 60px; } -.hair_base_14_hollygreen { +.hair_base_13_pumpkin { background-image: url(spritesmith-main-1.png); background-position: -1456px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_14_hollygreen { +.customize-option.hair_base_13_pumpkin { background-image: url(spritesmith-main-1.png); background-position: -1481px -106px; width: 60px; height: 60px; } -.hair_base_14_midnight { +.hair_base_13_purple { background-image: url(spritesmith-main-1.png); background-position: -1456px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_14_midnight { +.customize-option.hair_base_13_purple { background-image: url(spritesmith-main-1.png); background-position: -1481px -197px; width: 60px; height: 60px; } -.hair_base_14_pblue { +.hair_base_13_pyellow { background-image: url(spritesmith-main-1.png); background-position: -1456px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_14_pblue { +.customize-option.hair_base_13_pyellow { background-image: url(spritesmith-main-1.png); background-position: -1481px -288px; width: 60px; height: 60px; } -.hair_base_14_pblue2 { +.hair_base_13_pyellow2 { background-image: url(spritesmith-main-1.png); background-position: -1456px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_14_pblue2 { +.customize-option.hair_base_13_pyellow2 { background-image: url(spritesmith-main-1.png); background-position: -1481px -379px; width: 60px; height: 60px; } -.hair_base_14_peppermint { +.hair_base_13_rainbow { background-image: url(spritesmith-main-1.png); background-position: -1456px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_14_peppermint { +.customize-option.hair_base_13_rainbow { background-image: url(spritesmith-main-1.png); background-position: -1481px -470px; width: 60px; height: 60px; } -.hair_base_14_pgreen { +.hair_base_13_red { background-image: url(spritesmith-main-1.png); background-position: -1456px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_14_pgreen { +.customize-option.hair_base_13_red { background-image: url(spritesmith-main-1.png); background-position: -1481px -561px; width: 60px; height: 60px; } -.hair_base_14_pgreen2 { +.hair_base_13_snowy { background-image: url(spritesmith-main-1.png); background-position: -1456px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_14_pgreen2 { +.customize-option.hair_base_13_snowy { background-image: url(spritesmith-main-1.png); background-position: -1481px -652px; width: 60px; height: 60px; } -.hair_base_14_porange { +.hair_base_13_white { background-image: url(spritesmith-main-1.png); background-position: -1456px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_14_porange { +.customize-option.hair_base_13_white { background-image: url(spritesmith-main-1.png); background-position: -1481px -743px; width: 60px; height: 60px; } -.hair_base_14_porange2 { +.hair_base_13_winternight { background-image: url(spritesmith-main-1.png); background-position: -1456px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_14_porange2 { +.customize-option.hair_base_13_winternight { background-image: url(spritesmith-main-1.png); background-position: -1481px -834px; width: 60px; height: 60px; } -.hair_base_14_ppink { +.hair_base_13_winterstar { background-image: url(spritesmith-main-1.png); background-position: -1456px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_14_ppink { +.customize-option.hair_base_13_winterstar { background-image: url(spritesmith-main-1.png); background-position: -1481px -925px; width: 60px; height: 60px; } -.hair_base_14_ppink2 { +.hair_base_13_yellow { background-image: url(spritesmith-main-1.png); background-position: -1456px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_14_ppink2 { +.customize-option.hair_base_13_yellow { background-image: url(spritesmith-main-1.png); background-position: -1481px -1016px; width: 60px; height: 60px; } -.hair_base_14_ppurple { +.hair_base_13_zombie { background-image: url(spritesmith-main-1.png); background-position: -1456px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_14_ppurple { +.customize-option.hair_base_13_zombie { background-image: url(spritesmith-main-1.png); background-position: -1481px -1107px; width: 60px; height: 60px; } -.hair_base_14_ppurple2 { +.hair_base_14_TRUred { background-image: url(spritesmith-main-1.png); background-position: -1456px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_14_ppurple2 { +.customize-option.hair_base_14_TRUred { background-image: url(spritesmith-main-1.png); background-position: -1481px -1198px; width: 60px; height: 60px; } -.hair_base_14_pumpkin { +.hair_base_14_aurora { background-image: url(spritesmith-main-1.png); background-position: -1456px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_14_pumpkin { +.customize-option.hair_base_14_aurora { background-image: url(spritesmith-main-1.png); background-position: -1481px -1289px; width: 60px; height: 60px; } -.hair_base_14_purple { +.hair_base_14_black { background-image: url(spritesmith-main-1.png); background-position: -1456px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_14_purple { +.customize-option.hair_base_14_black { background-image: url(spritesmith-main-1.png); background-position: -1481px -1380px; width: 60px; height: 60px; } -.hair_base_14_pyellow { +.hair_base_14_blond { background-image: url(spritesmith-main-1.png); background-position: 0px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_14_pyellow { +.customize-option.hair_base_14_blond { background-image: url(spritesmith-main-1.png); background-position: -25px -1471px; width: 60px; height: 60px; } -.hair_base_14_pyellow2 { +.hair_base_14_blue { background-image: url(spritesmith-main-1.png); background-position: -91px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_14_pyellow2 { +.customize-option.hair_base_14_blue { background-image: url(spritesmith-main-1.png); background-position: -116px -1471px; width: 60px; height: 60px; } -.hair_base_14_rainbow { +.hair_base_14_brown { background-image: url(spritesmith-main-1.png); background-position: -182px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_14_rainbow { +.customize-option.hair_base_14_brown { background-image: url(spritesmith-main-1.png); background-position: -207px -1471px; width: 60px; height: 60px; } -.hair_base_14_red { +.hair_base_14_candycane { background-image: url(spritesmith-main-1.png); background-position: -273px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_14_red { +.customize-option.hair_base_14_candycane { background-image: url(spritesmith-main-1.png); background-position: -298px -1471px; width: 60px; height: 60px; } -.hair_base_14_snowy { +.hair_base_14_candycorn { background-image: url(spritesmith-main-1.png); background-position: -364px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_14_snowy { +.customize-option.hair_base_14_candycorn { background-image: url(spritesmith-main-1.png); background-position: -389px -1471px; width: 60px; height: 60px; } -.hair_base_14_white { +.hair_base_14_festive { background-image: url(spritesmith-main-1.png); background-position: -455px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_14_white { +.customize-option.hair_base_14_festive { background-image: url(spritesmith-main-1.png); background-position: -480px -1471px; width: 60px; height: 60px; } -.hair_base_14_winternight { +.hair_base_14_frost { background-image: url(spritesmith-main-1.png); background-position: -546px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_14_winternight { +.customize-option.hair_base_14_frost { background-image: url(spritesmith-main-1.png); background-position: -571px -1471px; width: 60px; height: 60px; } -.hair_base_14_winterstar { +.hair_base_14_ghostwhite { background-image: url(spritesmith-main-1.png); background-position: -637px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_14_winterstar { +.customize-option.hair_base_14_ghostwhite { background-image: url(spritesmith-main-1.png); background-position: -662px -1471px; width: 60px; height: 60px; } -.hair_base_14_yellow { +.hair_base_14_green { background-image: url(spritesmith-main-1.png); background-position: -728px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_14_yellow { +.customize-option.hair_base_14_green { background-image: url(spritesmith-main-1.png); background-position: -753px -1471px; width: 60px; height: 60px; } -.hair_base_14_zombie { +.hair_base_14_halloween { background-image: url(spritesmith-main-1.png); background-position: -819px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_14_zombie { +.customize-option.hair_base_14_halloween { background-image: url(spritesmith-main-1.png); background-position: -844px -1471px; width: 60px; height: 60px; } -.hair_base_1_TRUred { +.hair_base_14_holly { background-image: url(spritesmith-main-1.png); background-position: -910px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_1_TRUred { +.customize-option.hair_base_14_holly { background-image: url(spritesmith-main-1.png); background-position: -935px -1471px; width: 60px; height: 60px; } -.hair_base_1_aurora { +.hair_base_14_hollygreen { background-image: url(spritesmith-main-1.png); background-position: -1001px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_1_aurora { +.customize-option.hair_base_14_hollygreen { background-image: url(spritesmith-main-1.png); background-position: -1026px -1471px; width: 60px; height: 60px; } -.hair_base_1_black { +.hair_base_14_midnight { background-image: url(spritesmith-main-1.png); background-position: -1092px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_1_black { +.customize-option.hair_base_14_midnight { background-image: url(spritesmith-main-1.png); background-position: -1117px -1471px; width: 60px; height: 60px; } -.hair_base_1_blond { +.hair_base_14_pblue { background-image: url(spritesmith-main-1.png); background-position: -1183px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_1_blond { +.customize-option.hair_base_14_pblue { background-image: url(spritesmith-main-1.png); background-position: -1208px -1471px; width: 60px; height: 60px; } -.hair_base_1_blue { +.hair_base_14_pblue2 { background-image: url(spritesmith-main-1.png); background-position: -1274px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_1_blue { +.customize-option.hair_base_14_pblue2 { background-image: url(spritesmith-main-1.png); background-position: -1299px -1471px; width: 60px; height: 60px; } -.hair_base_1_brown { +.hair_base_14_peppermint { background-image: url(spritesmith-main-1.png); background-position: -1365px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_1_brown { +.customize-option.hair_base_14_peppermint { background-image: url(spritesmith-main-1.png); background-position: -1390px -1471px; width: 60px; height: 60px; } -.hair_base_1_candycane { +.hair_base_14_pgreen { background-image: url(spritesmith-main-1.png); background-position: -1456px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_1_candycane { +.customize-option.hair_base_14_pgreen { background-image: url(spritesmith-main-1.png); background-position: -1481px -1471px; width: 60px; height: 60px; } -.hair_base_1_candycorn { +.hair_base_14_pgreen2 { background-image: url(spritesmith-main-1.png); background-position: -1547px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_1_candycorn { +.customize-option.hair_base_14_pgreen2 { background-image: url(spritesmith-main-1.png); background-position: -1572px -15px; width: 60px; height: 60px; } -.hair_base_1_festive { +.hair_base_14_porange { background-image: url(spritesmith-main-1.png); background-position: -1547px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_1_festive { +.customize-option.hair_base_14_porange { background-image: url(spritesmith-main-1.png); background-position: -1572px -106px; width: 60px; height: 60px; } -.hair_base_1_frost { +.hair_base_14_porange2 { background-image: url(spritesmith-main-1.png); background-position: -1547px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_1_frost { +.customize-option.hair_base_14_porange2 { background-image: url(spritesmith-main-1.png); background-position: -1572px -197px; width: 60px; height: 60px; } -.hair_base_1_ghostwhite { +.hair_base_14_ppink { background-image: url(spritesmith-main-1.png); background-position: -1547px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_1_ghostwhite { +.customize-option.hair_base_14_ppink { background-image: url(spritesmith-main-1.png); background-position: -1572px -288px; width: 60px; height: 60px; } -.hair_base_1_green { +.hair_base_14_ppink2 { background-image: url(spritesmith-main-1.png); background-position: -1547px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_1_green { +.customize-option.hair_base_14_ppink2 { background-image: url(spritesmith-main-1.png); background-position: -1572px -379px; width: 60px; height: 60px; } -.hair_base_1_halloween { +.hair_base_14_ppurple { background-image: url(spritesmith-main-1.png); background-position: -1547px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_1_halloween { +.customize-option.hair_base_14_ppurple { background-image: url(spritesmith-main-1.png); background-position: -1572px -470px; width: 60px; height: 60px; } -.hair_base_1_holly { +.hair_base_14_ppurple2 { background-image: url(spritesmith-main-1.png); background-position: -1547px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_1_holly { +.customize-option.hair_base_14_ppurple2 { background-image: url(spritesmith-main-1.png); background-position: -1572px -561px; width: 60px; height: 60px; } -.hair_base_1_hollygreen { +.hair_base_14_pumpkin { background-image: url(spritesmith-main-1.png); background-position: -1547px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_1_hollygreen { +.customize-option.hair_base_14_pumpkin { background-image: url(spritesmith-main-1.png); background-position: -1572px -652px; width: 60px; height: 60px; } -.hair_base_1_midnight { +.hair_base_14_purple { background-image: url(spritesmith-main-1.png); background-position: -1547px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_1_midnight { +.customize-option.hair_base_14_purple { background-image: url(spritesmith-main-1.png); background-position: -1572px -743px; width: 60px; height: 60px; } -.hair_base_1_pblue { +.hair_base_14_pyellow { background-image: url(spritesmith-main-1.png); background-position: -1547px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_1_pblue { +.customize-option.hair_base_14_pyellow { background-image: url(spritesmith-main-1.png); background-position: -1572px -834px; width: 60px; height: 60px; } -.hair_base_1_pblue2 { +.hair_base_14_pyellow2 { background-image: url(spritesmith-main-1.png); background-position: -1547px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_1_pblue2 { +.customize-option.hair_base_14_pyellow2 { background-image: url(spritesmith-main-1.png); background-position: -1572px -925px; width: 60px; height: 60px; } -.hair_base_1_peppermint { +.hair_base_14_rainbow { background-image: url(spritesmith-main-1.png); background-position: -1547px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_1_peppermint { +.customize-option.hair_base_14_rainbow { background-image: url(spritesmith-main-1.png); background-position: -1572px -1016px; width: 60px; height: 60px; } -.hair_base_1_pgreen { +.hair_base_14_red { background-image: url(spritesmith-main-1.png); background-position: -1547px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_1_pgreen { +.customize-option.hair_base_14_red { background-image: url(spritesmith-main-1.png); background-position: -1572px -1107px; width: 60px; height: 60px; } -.hair_base_1_pgreen2 { +.hair_base_14_snowy { background-image: url(spritesmith-main-1.png); background-position: -1547px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_1_pgreen2 { +.customize-option.hair_base_14_snowy { background-image: url(spritesmith-main-1.png); background-position: -1572px -1198px; width: 60px; height: 60px; } -.hair_base_1_porange { +.hair_base_14_white { background-image: url(spritesmith-main-1.png); background-position: -1547px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_1_porange { +.customize-option.hair_base_14_white { background-image: url(spritesmith-main-1.png); background-position: -1572px -1289px; width: 60px; height: 60px; } -.hair_base_1_porange2 { +.hair_base_14_winternight { background-image: url(spritesmith-main-1.png); background-position: -1547px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_1_porange2 { +.customize-option.hair_base_14_winternight { background-image: url(spritesmith-main-1.png); background-position: -1572px -1380px; width: 60px; height: 60px; } -.hair_base_1_ppink { +.hair_base_14_winterstar { background-image: url(spritesmith-main-1.png); background-position: -1547px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_1_ppink { +.customize-option.hair_base_14_winterstar { background-image: url(spritesmith-main-1.png); background-position: -1572px -1471px; width: 60px; height: 60px; } -.hair_base_1_ppink2 { +.hair_base_14_yellow { background-image: url(spritesmith-main-1.png); background-position: 0px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_1_ppink2 { +.customize-option.hair_base_14_yellow { background-image: url(spritesmith-main-1.png); background-position: -25px -1562px; width: 60px; height: 60px; } -.hair_base_1_ppurple { +.hair_base_14_zombie { background-image: url(spritesmith-main-1.png); background-position: -91px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_1_ppurple { +.customize-option.hair_base_14_zombie { background-image: url(spritesmith-main-1.png); background-position: -116px -1562px; width: 60px; height: 60px; } -.hair_base_1_ppurple2 { +.hair_base_1_TRUred { background-image: url(spritesmith-main-1.png); background-position: -182px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_1_ppurple2 { +.customize-option.hair_base_1_TRUred { background-image: url(spritesmith-main-1.png); background-position: -207px -1562px; width: 60px; height: 60px; } -.hair_base_1_pumpkin { +.hair_base_1_aurora { background-image: url(spritesmith-main-1.png); background-position: -273px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_1_pumpkin { +.customize-option.hair_base_1_aurora { background-image: url(spritesmith-main-1.png); background-position: -298px -1562px; width: 60px; height: 60px; } -.hair_base_1_purple { +.hair_base_1_black { background-image: url(spritesmith-main-1.png); background-position: -364px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_1_purple { +.customize-option.hair_base_1_black { background-image: url(spritesmith-main-1.png); background-position: -389px -1562px; width: 60px; height: 60px; } -.hair_base_1_pyellow { +.hair_base_1_blond { background-image: url(spritesmith-main-1.png); background-position: -455px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_1_pyellow { +.customize-option.hair_base_1_blond { background-image: url(spritesmith-main-1.png); background-position: -480px -1562px; width: 60px; height: 60px; } -.hair_base_1_pyellow2 { +.hair_base_1_blue { background-image: url(spritesmith-main-1.png); background-position: -546px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_1_pyellow2 { +.customize-option.hair_base_1_blue { background-image: url(spritesmith-main-1.png); background-position: -571px -1562px; width: 60px; height: 60px; } -.hair_base_1_rainbow { +.hair_base_1_brown { background-image: url(spritesmith-main-1.png); background-position: -637px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_1_rainbow { +.customize-option.hair_base_1_brown { background-image: url(spritesmith-main-1.png); background-position: -662px -1562px; width: 60px; height: 60px; } -.hair_base_1_red { +.hair_base_1_candycane { background-image: url(spritesmith-main-1.png); background-position: -728px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_1_red { +.customize-option.hair_base_1_candycane { background-image: url(spritesmith-main-1.png); background-position: -753px -1562px; width: 60px; height: 60px; } -.hair_base_1_snowy { +.hair_base_1_candycorn { background-image: url(spritesmith-main-1.png); background-position: -819px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_1_snowy { +.customize-option.hair_base_1_candycorn { background-image: url(spritesmith-main-1.png); background-position: -844px -1562px; width: 60px; height: 60px; } -.hair_base_1_white { +.hair_base_1_festive { background-image: url(spritesmith-main-1.png); background-position: -910px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_1_white { +.customize-option.hair_base_1_festive { background-image: url(spritesmith-main-1.png); background-position: -935px -1562px; width: 60px; height: 60px; } -.hair_base_1_winternight { +.hair_base_1_frost { background-image: url(spritesmith-main-1.png); background-position: -1001px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_1_winternight { +.customize-option.hair_base_1_frost { background-image: url(spritesmith-main-1.png); background-position: -1026px -1562px; width: 60px; height: 60px; } -.hair_base_1_winterstar { +.hair_base_1_ghostwhite { background-image: url(spritesmith-main-1.png); background-position: -1092px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_1_winterstar { +.customize-option.hair_base_1_ghostwhite { background-image: url(spritesmith-main-1.png); background-position: -1117px -1562px; width: 60px; height: 60px; } -.hair_base_1_yellow { +.hair_base_1_green { background-image: url(spritesmith-main-1.png); background-position: -1183px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_1_yellow { +.customize-option.hair_base_1_green { background-image: url(spritesmith-main-1.png); background-position: -1208px -1562px; width: 60px; height: 60px; } -.hair_base_1_zombie { +.hair_base_1_halloween { background-image: url(spritesmith-main-1.png); background-position: -1274px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_1_zombie { +.customize-option.hair_base_1_halloween { background-image: url(spritesmith-main-1.png); background-position: -1299px -1562px; width: 60px; height: 60px; } -.hair_base_2_TRUred { +.hair_base_1_holly { background-image: url(spritesmith-main-1.png); background-position: -1365px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_2_TRUred { +.customize-option.hair_base_1_holly { background-image: url(spritesmith-main-1.png); background-position: -1390px -1562px; width: 60px; height: 60px; } -.hair_base_2_aurora { +.hair_base_1_hollygreen { background-image: url(spritesmith-main-1.png); background-position: -1456px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_2_aurora { +.customize-option.hair_base_1_hollygreen { background-image: url(spritesmith-main-1.png); background-position: -1481px -1562px; width: 60px; height: 60px; } -.hair_base_2_black { +.hair_base_1_midnight { background-image: url(spritesmith-main-1.png); background-position: -1547px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_2_black { +.customize-option.hair_base_1_midnight { background-image: url(spritesmith-main-1.png); background-position: -1572px -1562px; width: 60px; height: 60px; } -.hair_base_2_blond { +.hair_base_1_pblue { background-image: url(spritesmith-main-1.png); background-position: -1638px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_2_blond { +.customize-option.hair_base_1_pblue { background-image: url(spritesmith-main-1.png); background-position: -1663px -15px; width: 60px; height: 60px; } -.hair_base_2_blue { +.hair_base_1_pblue2 { background-image: url(spritesmith-main-1.png); background-position: -1638px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_2_blue { +.customize-option.hair_base_1_pblue2 { background-image: url(spritesmith-main-1.png); background-position: -1663px -106px; width: 60px; height: 60px; } -.hair_base_2_brown { +.hair_base_1_peppermint { background-image: url(spritesmith-main-1.png); background-position: -1638px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_2_brown { +.customize-option.hair_base_1_peppermint { background-image: url(spritesmith-main-1.png); background-position: -1663px -197px; width: 60px; height: 60px; } -.hair_base_2_candycane { +.hair_base_1_pgreen { background-image: url(spritesmith-main-1.png); background-position: -1638px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_2_candycane { +.customize-option.hair_base_1_pgreen { background-image: url(spritesmith-main-1.png); background-position: -1663px -288px; width: 60px; height: 60px; } -.hair_base_2_candycorn { +.hair_base_1_pgreen2 { background-image: url(spritesmith-main-1.png); background-position: -1638px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_2_candycorn { +.customize-option.hair_base_1_pgreen2 { background-image: url(spritesmith-main-1.png); background-position: -1663px -379px; width: 60px; diff --git a/common/dist/sprites/spritesmith-main-1.png b/common/dist/sprites/spritesmith-main-1.png index 5e248f2b17..d2b844e916 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 new file mode 100644 index 0000000000..309503d5ad --- /dev/null +++ b/common/dist/sprites/spritesmith-main-10.css @@ -0,0 +1,1992 @@ +.Mount_Icon_Wolf-Red { + background-image: url(spritesmith-main-10.png); + background-position: -82px 0px; + width: 81px; + height: 99px; +} +.Mount_Icon_Wolf-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -82px -1100px; + width: 81px; + height: 99px; +} +.Mount_Icon_Wolf-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -164px 0px; + width: 81px; + height: 99px; +} +.Mount_Icon_Wolf-Spooky { + background-image: url(spritesmith-main-10.png); + background-position: 0px -100px; + width: 81px; + height: 99px; +} +.Mount_Icon_Wolf-White { + background-image: url(spritesmith-main-10.png); + background-position: -82px -100px; + width: 81px; + height: 99px; +} +.Mount_Icon_Wolf-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -164px -100px; + width: 81px; + height: 99px; +} +.Pet-BearCub-Base { + background-image: url(spritesmith-main-10.png); + background-position: -246px 0px; + width: 81px; + height: 99px; +} +.Pet-BearCub-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -246px -100px; + width: 81px; + height: 99px; +} +.Pet-BearCub-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: 0px -200px; + width: 81px; + height: 99px; +} +.Pet-BearCub-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -82px -200px; + width: 81px; + height: 99px; +} +.Pet-BearCub-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -164px -200px; + width: 81px; + height: 99px; +} +.Pet-BearCub-Peppermint { + background-image: url(spritesmith-main-10.png); + background-position: -246px -200px; + width: 81px; + height: 99px; +} +.Pet-BearCub-Polar { + background-image: url(spritesmith-main-10.png); + background-position: -328px 0px; + width: 81px; + height: 99px; +} +.Pet-BearCub-Red { + background-image: url(spritesmith-main-10.png); + background-position: -328px -100px; + width: 81px; + height: 99px; +} +.Pet-BearCub-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -328px -200px; + width: 81px; + height: 99px; +} +.Pet-BearCub-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: 0px -300px; + width: 81px; + height: 99px; +} +.Pet-BearCub-Spooky { + background-image: url(spritesmith-main-10.png); + background-position: -82px -300px; + width: 81px; + height: 99px; +} +.Pet-BearCub-White { + background-image: url(spritesmith-main-10.png); + background-position: -164px -300px; + width: 81px; + height: 99px; +} +.Pet-BearCub-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -246px -300px; + width: 81px; + height: 99px; +} +.Pet-Bunny-Base { + background-image: url(spritesmith-main-10.png); + background-position: -328px -300px; + width: 81px; + height: 99px; +} +.Pet-Bunny-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -410px 0px; + width: 81px; + height: 99px; +} +.Pet-Bunny-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -410px -100px; + width: 81px; + height: 99px; +} +.Pet-Bunny-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -410px -200px; + width: 81px; + height: 99px; +} +.Pet-Bunny-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -410px -300px; + width: 81px; + height: 99px; +} +.Pet-Bunny-Red { + background-image: url(spritesmith-main-10.png); + background-position: -492px 0px; + width: 81px; + height: 99px; +} +.Pet-Bunny-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -492px -100px; + width: 81px; + height: 99px; +} +.Pet-Bunny-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -492px -200px; + width: 81px; + height: 99px; +} +.Pet-Bunny-White { + background-image: url(spritesmith-main-10.png); + background-position: -492px -300px; + width: 81px; + height: 99px; +} +.Pet-Bunny-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: 0px -400px; + width: 81px; + height: 99px; +} +.Pet-Cactus-Base { + background-image: url(spritesmith-main-10.png); + background-position: -82px -400px; + width: 81px; + height: 99px; +} +.Pet-Cactus-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -164px -400px; + width: 81px; + height: 99px; +} +.Pet-Cactus-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -246px -400px; + width: 81px; + height: 99px; +} +.Pet-Cactus-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -328px -400px; + width: 81px; + height: 99px; +} +.Pet-Cactus-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -410px -400px; + width: 81px; + height: 99px; +} +.Pet-Cactus-Peppermint { + background-image: url(spritesmith-main-10.png); + background-position: -492px -400px; + width: 81px; + height: 99px; +} +.Pet-Cactus-Red { + background-image: url(spritesmith-main-10.png); + background-position: -574px 0px; + width: 81px; + height: 99px; +} +.Pet-Cactus-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -574px -100px; + width: 81px; + height: 99px; +} +.Pet-Cactus-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -574px -200px; + width: 81px; + height: 99px; +} +.Pet-Cactus-Spooky { + background-image: url(spritesmith-main-10.png); + background-position: -574px -300px; + width: 81px; + height: 99px; +} +.Pet-Cactus-White { + background-image: url(spritesmith-main-10.png); + background-position: -574px -400px; + width: 81px; + height: 99px; +} +.Pet-Cactus-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: 0px -500px; + width: 81px; + height: 99px; +} +.Pet-Cheetah-Base { + background-image: url(spritesmith-main-10.png); + background-position: -82px -500px; + width: 81px; + height: 99px; +} +.Pet-Cheetah-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -164px -500px; + width: 81px; + height: 99px; +} +.Pet-Cheetah-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -246px -500px; + width: 81px; + height: 99px; +} +.Pet-Cheetah-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -328px -500px; + width: 81px; + height: 99px; +} +.Pet-Cheetah-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -410px -500px; + width: 81px; + height: 99px; +} +.Pet-Cheetah-Red { + background-image: url(spritesmith-main-10.png); + background-position: -492px -500px; + width: 81px; + height: 99px; +} +.Pet-Cheetah-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -574px -500px; + width: 81px; + height: 99px; +} +.Pet-Cheetah-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -656px 0px; + width: 81px; + height: 99px; +} +.Pet-Cheetah-White { + background-image: url(spritesmith-main-10.png); + background-position: -656px -100px; + width: 81px; + height: 99px; +} +.Pet-Cheetah-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -656px -200px; + width: 81px; + height: 99px; +} +.Pet-Cuttlefish-Base { + background-image: url(spritesmith-main-10.png); + background-position: -656px -300px; + width: 81px; + height: 99px; +} +.Pet-Cuttlefish-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -656px -400px; + width: 81px; + height: 99px; +} +.Pet-Cuttlefish-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -656px -500px; + width: 81px; + height: 99px; +} +.Pet-Cuttlefish-Desert { + background-image: url(spritesmith-main-10.png); + background-position: 0px -600px; + width: 81px; + height: 99px; +} +.Pet-Cuttlefish-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -82px -600px; + width: 81px; + height: 99px; +} +.Pet-Cuttlefish-Red { + background-image: url(spritesmith-main-10.png); + background-position: -164px -600px; + width: 81px; + height: 99px; +} +.Pet-Cuttlefish-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -246px -600px; + width: 81px; + height: 99px; +} +.Pet-Cuttlefish-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -328px -600px; + width: 81px; + height: 99px; +} +.Pet-Cuttlefish-White { + background-image: url(spritesmith-main-10.png); + background-position: -410px -600px; + width: 81px; + height: 99px; +} +.Pet-Cuttlefish-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -492px -600px; + width: 81px; + height: 99px; +} +.Pet-Deer-Base { + background-image: url(spritesmith-main-10.png); + background-position: -574px -600px; + width: 81px; + height: 99px; +} +.Pet-Deer-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -656px -600px; + width: 81px; + height: 99px; +} +.Pet-Deer-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -738px 0px; + width: 81px; + height: 99px; +} +.Pet-Deer-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -738px -100px; + width: 81px; + height: 99px; +} +.Pet-Deer-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -738px -200px; + width: 81px; + height: 99px; +} +.Pet-Deer-Red { + background-image: url(spritesmith-main-10.png); + background-position: -738px -300px; + width: 81px; + height: 99px; +} +.Pet-Deer-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -738px -400px; + width: 81px; + height: 99px; +} +.Pet-Deer-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -738px -500px; + width: 81px; + height: 99px; +} +.Pet-Deer-White { + background-image: url(spritesmith-main-10.png); + background-position: -738px -600px; + width: 81px; + height: 99px; +} +.Pet-Deer-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: 0px -700px; + width: 81px; + height: 99px; +} +.Pet-Dragon-Base { + background-image: url(spritesmith-main-10.png); + background-position: -82px -700px; + width: 81px; + height: 99px; +} +.Pet-Dragon-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -164px -700px; + width: 81px; + height: 99px; +} +.Pet-Dragon-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -246px -700px; + width: 81px; + height: 99px; +} +.Pet-Dragon-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -328px -700px; + width: 81px; + height: 99px; +} +.Pet-Dragon-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -410px -700px; + width: 81px; + height: 99px; +} +.Pet-Dragon-Hydra { + background-image: url(spritesmith-main-10.png); + background-position: -492px -700px; + width: 81px; + height: 99px; +} +.Pet-Dragon-Peppermint { + background-image: url(spritesmith-main-10.png); + background-position: -574px -700px; + width: 81px; + height: 99px; +} +.Pet-Dragon-Red { + background-image: url(spritesmith-main-10.png); + background-position: -656px -700px; + width: 81px; + height: 99px; +} +.Pet-Dragon-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -738px -700px; + width: 81px; + height: 99px; +} +.Pet-Dragon-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -820px 0px; + width: 81px; + height: 99px; +} +.Pet-Dragon-Spooky { + background-image: url(spritesmith-main-10.png); + background-position: -820px -100px; + width: 81px; + height: 99px; +} +.Pet-Dragon-White { + background-image: url(spritesmith-main-10.png); + background-position: -820px -200px; + width: 81px; + height: 99px; +} +.Pet-Dragon-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -820px -300px; + width: 81px; + height: 99px; +} +.Pet-Egg-Base { + background-image: url(spritesmith-main-10.png); + background-position: -820px -400px; + width: 81px; + height: 99px; +} +.Pet-Egg-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -820px -500px; + width: 81px; + height: 99px; +} +.Pet-Egg-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -820px -600px; + width: 81px; + height: 99px; +} +.Pet-Egg-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -820px -700px; + width: 81px; + height: 99px; +} +.Pet-Egg-Golden { + background-image: url(spritesmith-main-10.png); + background-position: 0px -800px; + width: 81px; + height: 99px; +} +.Pet-Egg-Red { + background-image: url(spritesmith-main-10.png); + background-position: -82px -800px; + width: 81px; + height: 99px; +} +.Pet-Egg-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -164px -800px; + width: 81px; + height: 99px; +} +.Pet-Egg-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -246px -800px; + width: 81px; + height: 99px; +} +.Pet-Egg-White { + background-image: url(spritesmith-main-10.png); + background-position: -328px -800px; + width: 81px; + height: 99px; +} +.Pet-Egg-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -410px -800px; + width: 81px; + height: 99px; +} +.Pet-FlyingPig-Base { + background-image: url(spritesmith-main-10.png); + background-position: -492px -800px; + width: 81px; + height: 99px; +} +.Pet-FlyingPig-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -574px -800px; + width: 81px; + height: 99px; +} +.Pet-FlyingPig-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -656px -800px; + width: 81px; + height: 99px; +} +.Pet-FlyingPig-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -738px -800px; + width: 81px; + height: 99px; +} +.Pet-FlyingPig-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -820px -800px; + width: 81px; + height: 99px; +} +.Pet-FlyingPig-Peppermint { + background-image: url(spritesmith-main-10.png); + background-position: -902px 0px; + width: 81px; + height: 99px; +} +.Pet-FlyingPig-Red { + background-image: url(spritesmith-main-10.png); + background-position: -902px -100px; + width: 81px; + height: 99px; +} +.Pet-FlyingPig-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -902px -200px; + width: 81px; + height: 99px; +} +.Pet-FlyingPig-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -902px -300px; + width: 81px; + height: 99px; +} +.Pet-FlyingPig-Spooky { + background-image: url(spritesmith-main-10.png); + background-position: -902px -400px; + width: 81px; + height: 99px; +} +.Pet-FlyingPig-White { + background-image: url(spritesmith-main-10.png); + background-position: -902px -500px; + width: 81px; + height: 99px; +} +.Pet-FlyingPig-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -902px -600px; + width: 81px; + height: 99px; +} +.Pet-Fox-Base { + background-image: url(spritesmith-main-10.png); + background-position: -902px -700px; + width: 81px; + height: 99px; +} +.Pet-Fox-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -902px -800px; + width: 81px; + height: 99px; +} +.Pet-Fox-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -984px 0px; + width: 81px; + height: 99px; +} +.Pet-Fox-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -984px -100px; + width: 81px; + height: 99px; +} +.Pet-Fox-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -984px -200px; + width: 81px; + height: 99px; +} +.Pet-Fox-Peppermint { + background-image: url(spritesmith-main-10.png); + background-position: -984px -300px; + width: 81px; + height: 99px; +} +.Pet-Fox-Red { + background-image: url(spritesmith-main-10.png); + background-position: -984px -400px; + width: 81px; + height: 99px; +} +.Pet-Fox-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -984px -500px; + width: 81px; + height: 99px; +} +.Pet-Fox-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -984px -600px; + width: 81px; + height: 99px; +} +.Pet-Fox-Spooky { + background-image: url(spritesmith-main-10.png); + background-position: -984px -700px; + width: 81px; + height: 99px; +} +.Pet-Fox-White { + background-image: url(spritesmith-main-10.png); + background-position: -984px -800px; + width: 81px; + height: 99px; +} +.Pet-Fox-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: 0px -900px; + width: 81px; + height: 99px; +} +.Pet-Frog-Base { + background-image: url(spritesmith-main-10.png); + background-position: -82px -900px; + width: 81px; + height: 99px; +} +.Pet-Frog-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -164px -900px; + width: 81px; + height: 99px; +} +.Pet-Frog-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -246px -900px; + width: 81px; + height: 99px; +} +.Pet-Frog-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -328px -900px; + width: 81px; + height: 99px; +} +.Pet-Frog-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -410px -900px; + width: 81px; + height: 99px; +} +.Pet-Frog-Red { + background-image: url(spritesmith-main-10.png); + background-position: -492px -900px; + width: 81px; + height: 99px; +} +.Pet-Frog-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -574px -900px; + width: 81px; + height: 99px; +} +.Pet-Frog-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -656px -900px; + width: 81px; + height: 99px; +} +.Pet-Frog-White { + background-image: url(spritesmith-main-10.png); + background-position: -738px -900px; + width: 81px; + height: 99px; +} +.Pet-Frog-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -820px -900px; + width: 81px; + height: 99px; +} +.Pet-Gryphon-Base { + background-image: url(spritesmith-main-10.png); + background-position: -902px -900px; + width: 81px; + height: 99px; +} +.Pet-Gryphon-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -984px -900px; + width: 81px; + height: 99px; +} +.Pet-Gryphon-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -1066px 0px; + width: 81px; + height: 99px; +} +.Pet-Gryphon-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -1066px -100px; + width: 81px; + height: 99px; +} +.Pet-Gryphon-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -1066px -200px; + width: 81px; + height: 99px; +} +.Pet-Gryphon-Red { + background-image: url(spritesmith-main-10.png); + background-position: -1066px -300px; + width: 81px; + height: 99px; +} +.Pet-Gryphon-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -1066px -400px; + width: 81px; + height: 99px; +} +.Pet-Gryphon-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -1066px -500px; + width: 81px; + height: 99px; +} +.Pet-Gryphon-White { + background-image: url(spritesmith-main-10.png); + background-position: -1066px -600px; + width: 81px; + height: 99px; +} +.Pet-Gryphon-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -1066px -700px; + width: 81px; + height: 99px; +} +.Pet-Hedgehog-Base { + background-image: url(spritesmith-main-10.png); + background-position: -1066px -800px; + width: 81px; + height: 99px; +} +.Pet-Hedgehog-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -1066px -900px; + width: 81px; + height: 99px; +} +.Pet-Hedgehog-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: 0px -1000px; + width: 81px; + height: 99px; +} +.Pet-Hedgehog-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -82px -1000px; + width: 81px; + height: 99px; +} +.Pet-Hedgehog-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -164px -1000px; + width: 81px; + height: 99px; +} +.Pet-Hedgehog-Red { + background-image: url(spritesmith-main-10.png); + background-position: -246px -1000px; + width: 81px; + height: 99px; +} +.Pet-Hedgehog-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -328px -1000px; + width: 81px; + height: 99px; +} +.Pet-Hedgehog-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -410px -1000px; + width: 81px; + height: 99px; +} +.Pet-Hedgehog-White { + background-image: url(spritesmith-main-10.png); + background-position: -492px -1000px; + width: 81px; + height: 99px; +} +.Pet-Hedgehog-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -574px -1000px; + width: 81px; + height: 99px; +} +.Pet-Horse-Base { + background-image: url(spritesmith-main-10.png); + background-position: -656px -1000px; + width: 81px; + height: 99px; +} +.Pet-Horse-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -738px -1000px; + width: 81px; + height: 99px; +} +.Pet-Horse-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -820px -1000px; + width: 81px; + height: 99px; +} +.Pet-Horse-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -902px -1000px; + width: 81px; + height: 99px; +} +.Pet-Horse-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -984px -1000px; + width: 81px; + height: 99px; +} +.Pet-Horse-Red { + background-image: url(spritesmith-main-10.png); + background-position: -1066px -1000px; + width: 81px; + height: 99px; +} +.Pet-Horse-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -1148px 0px; + width: 81px; + height: 99px; +} +.Pet-Horse-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -1148px -100px; + width: 81px; + height: 99px; +} +.Pet-Horse-White { + background-image: url(spritesmith-main-10.png); + background-position: -1148px -200px; + width: 81px; + height: 99px; +} +.Pet-Horse-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -1148px -300px; + width: 81px; + height: 99px; +} +.Pet-JackOLantern-Base { + background-image: url(spritesmith-main-10.png); + background-position: -1148px -400px; + width: 81px; + height: 99px; +} +.Pet-LionCub-Base { + background-image: url(spritesmith-main-10.png); + background-position: -1148px -500px; + width: 81px; + height: 99px; +} +.Pet-LionCub-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -1148px -600px; + width: 81px; + height: 99px; +} +.Pet-LionCub-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -1148px -700px; + width: 81px; + height: 99px; +} +.Pet-LionCub-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -1148px -800px; + width: 81px; + height: 99px; +} +.Pet-LionCub-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -1148px -900px; + width: 81px; + height: 99px; +} +.Pet-LionCub-Peppermint { + background-image: url(spritesmith-main-10.png); + background-position: -1148px -1000px; + width: 81px; + height: 99px; +} +.Pet-LionCub-Red { + background-image: url(spritesmith-main-10.png); + background-position: 0px -1100px; + width: 81px; + height: 99px; +} +.Pet-LionCub-Shade { + background-image: url(spritesmith-main-10.png); + background-position: 0px 0px; + width: 81px; + height: 99px; +} +.Pet-LionCub-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -164px -1100px; + width: 81px; + height: 99px; +} +.Pet-LionCub-Spooky { + background-image: url(spritesmith-main-10.png); + background-position: -246px -1100px; + width: 81px; + height: 99px; +} +.Pet-LionCub-White { + background-image: url(spritesmith-main-10.png); + background-position: -328px -1100px; + width: 81px; + height: 99px; +} +.Pet-LionCub-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -410px -1100px; + width: 81px; + height: 99px; +} +.Pet-Mammoth-Base { + background-image: url(spritesmith-main-10.png); + background-position: -492px -1100px; + width: 81px; + height: 99px; +} +.Pet-MantisShrimp-Base { + background-image: url(spritesmith-main-10.png); + background-position: -574px -1100px; + width: 81px; + height: 99px; +} +.Pet-Octopus-Base { + background-image: url(spritesmith-main-10.png); + background-position: -656px -1100px; + width: 81px; + height: 99px; +} +.Pet-Octopus-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -738px -1100px; + width: 81px; + height: 99px; +} +.Pet-Octopus-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -820px -1100px; + width: 81px; + height: 99px; +} +.Pet-Octopus-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -902px -1100px; + width: 81px; + height: 99px; +} +.Pet-Octopus-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -984px -1100px; + width: 81px; + height: 99px; +} +.Pet-Octopus-Red { + background-image: url(spritesmith-main-10.png); + background-position: -1066px -1100px; + width: 81px; + height: 99px; +} +.Pet-Octopus-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -1148px -1100px; + width: 81px; + height: 99px; +} +.Pet-Octopus-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -1230px 0px; + width: 81px; + height: 99px; +} +.Pet-Octopus-White { + background-image: url(spritesmith-main-10.png); + background-position: -1230px -100px; + width: 81px; + height: 99px; +} +.Pet-Octopus-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -1230px -200px; + width: 81px; + height: 99px; +} +.Pet-Owl-Base { + background-image: url(spritesmith-main-10.png); + background-position: -1230px -300px; + width: 81px; + height: 99px; +} +.Pet-Owl-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -1230px -400px; + width: 81px; + height: 99px; +} +.Pet-Owl-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -1230px -500px; + width: 81px; + height: 99px; +} +.Pet-Owl-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -1230px -600px; + width: 81px; + height: 99px; +} +.Pet-Owl-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -1230px -700px; + width: 81px; + height: 99px; +} +.Pet-Owl-Red { + background-image: url(spritesmith-main-10.png); + background-position: -1230px -800px; + width: 81px; + height: 99px; +} +.Pet-Owl-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -1230px -900px; + width: 81px; + height: 99px; +} +.Pet-Owl-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -1230px -1000px; + width: 81px; + height: 99px; +} +.Pet-Owl-White { + background-image: url(spritesmith-main-10.png); + background-position: -1230px -1100px; + width: 81px; + height: 99px; +} +.Pet-Owl-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: 0px -1200px; + width: 81px; + height: 99px; +} +.Pet-PandaCub-Base { + background-image: url(spritesmith-main-10.png); + background-position: -82px -1200px; + width: 81px; + height: 99px; +} +.Pet-PandaCub-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -164px -1200px; + width: 81px; + height: 99px; +} +.Pet-PandaCub-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -246px -1200px; + width: 81px; + height: 99px; +} +.Pet-PandaCub-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -328px -1200px; + width: 81px; + height: 99px; +} +.Pet-PandaCub-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -410px -1200px; + width: 81px; + height: 99px; +} +.Pet-PandaCub-Peppermint { + background-image: url(spritesmith-main-10.png); + background-position: -492px -1200px; + width: 81px; + height: 99px; +} +.Pet-PandaCub-Red { + background-image: url(spritesmith-main-10.png); + background-position: -574px -1200px; + width: 81px; + height: 99px; +} +.Pet-PandaCub-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -656px -1200px; + width: 81px; + height: 99px; +} +.Pet-PandaCub-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -738px -1200px; + width: 81px; + height: 99px; +} +.Pet-PandaCub-Spooky { + background-image: url(spritesmith-main-10.png); + background-position: -820px -1200px; + width: 81px; + height: 99px; +} +.Pet-PandaCub-White { + background-image: url(spritesmith-main-10.png); + background-position: -902px -1200px; + width: 81px; + height: 99px; +} +.Pet-PandaCub-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -984px -1200px; + width: 81px; + height: 99px; +} +.Pet-Parrot-Base { + background-image: url(spritesmith-main-10.png); + background-position: -1066px -1200px; + width: 81px; + height: 99px; +} +.Pet-Parrot-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -1148px -1200px; + width: 81px; + height: 99px; +} +.Pet-Parrot-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -1230px -1200px; + width: 81px; + height: 99px; +} +.Pet-Parrot-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -1312px 0px; + width: 81px; + height: 99px; +} +.Pet-Parrot-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -1312px -100px; + width: 81px; + height: 99px; +} +.Pet-Parrot-Red { + background-image: url(spritesmith-main-10.png); + background-position: -1312px -200px; + width: 81px; + height: 99px; +} +.Pet-Parrot-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -1312px -300px; + width: 81px; + height: 99px; +} +.Pet-Parrot-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -1312px -400px; + width: 81px; + height: 99px; +} +.Pet-Parrot-White { + background-image: url(spritesmith-main-10.png); + background-position: -1312px -500px; + width: 81px; + height: 99px; +} +.Pet-Parrot-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -1312px -600px; + width: 81px; + height: 99px; +} +.Pet-Penguin-Base { + background-image: url(spritesmith-main-10.png); + background-position: -1312px -700px; + width: 81px; + height: 99px; +} +.Pet-Penguin-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -1312px -800px; + width: 81px; + height: 99px; +} +.Pet-Penguin-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -1312px -900px; + width: 81px; + height: 99px; +} +.Pet-Penguin-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -1312px -1000px; + width: 81px; + height: 99px; +} +.Pet-Penguin-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -1312px -1100px; + width: 81px; + height: 99px; +} +.Pet-Penguin-Red { + background-image: url(spritesmith-main-10.png); + background-position: -1312px -1200px; + width: 81px; + height: 99px; +} +.Pet-Penguin-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -1394px 0px; + width: 81px; + height: 99px; +} +.Pet-Penguin-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -1394px -100px; + width: 81px; + height: 99px; +} +.Pet-Penguin-White { + background-image: url(spritesmith-main-10.png); + background-position: -1394px -200px; + width: 81px; + height: 99px; +} +.Pet-Penguin-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -1394px -300px; + width: 81px; + height: 99px; +} +.Pet-Phoenix-Base { + background-image: url(spritesmith-main-10.png); + background-position: -1394px -400px; + width: 81px; + height: 99px; +} +.Pet-Rat-Base { + background-image: url(spritesmith-main-10.png); + background-position: -1394px -500px; + width: 81px; + height: 99px; +} +.Pet-Rat-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -1394px -600px; + width: 81px; + height: 99px; +} +.Pet-Rat-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -1394px -700px; + width: 81px; + height: 99px; +} +.Pet-Rat-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -1394px -800px; + width: 81px; + height: 99px; +} +.Pet-Rat-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -1394px -900px; + width: 81px; + height: 99px; +} +.Pet-Rat-Red { + background-image: url(spritesmith-main-10.png); + background-position: -1394px -1000px; + width: 81px; + height: 99px; +} +.Pet-Rat-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -1394px -1100px; + width: 81px; + height: 99px; +} +.Pet-Rat-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -1394px -1200px; + width: 81px; + height: 99px; +} +.Pet-Rat-White { + background-image: url(spritesmith-main-10.png); + background-position: 0px -1300px; + width: 81px; + height: 99px; +} +.Pet-Rat-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -82px -1300px; + width: 81px; + height: 99px; +} +.Pet-Rock-Base { + background-image: url(spritesmith-main-10.png); + background-position: -164px -1300px; + width: 81px; + height: 99px; +} +.Pet-Rock-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -246px -1300px; + width: 81px; + height: 99px; +} +.Pet-Rock-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -328px -1300px; + width: 81px; + height: 99px; +} +.Pet-Rock-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -410px -1300px; + width: 81px; + height: 99px; +} +.Pet-Rock-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -492px -1300px; + width: 81px; + height: 99px; +} +.Pet-Rock-Red { + background-image: url(spritesmith-main-10.png); + background-position: -574px -1300px; + width: 81px; + height: 99px; +} +.Pet-Rock-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -656px -1300px; + width: 81px; + height: 99px; +} +.Pet-Rock-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -738px -1300px; + width: 81px; + height: 99px; +} +.Pet-Rock-White { + background-image: url(spritesmith-main-10.png); + background-position: -820px -1300px; + width: 81px; + height: 99px; +} +.Pet-Rock-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -902px -1300px; + width: 81px; + height: 99px; +} +.Pet-Rooster-Base { + background-image: url(spritesmith-main-10.png); + background-position: -984px -1300px; + width: 81px; + height: 99px; +} +.Pet-Rooster-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -1066px -1300px; + width: 81px; + height: 99px; +} +.Pet-Rooster-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -1148px -1300px; + width: 81px; + height: 99px; +} +.Pet-Rooster-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -1230px -1300px; + width: 81px; + height: 99px; +} +.Pet-Rooster-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -1312px -1300px; + width: 81px; + height: 99px; +} +.Pet-Rooster-Red { + background-image: url(spritesmith-main-10.png); + background-position: -1394px -1300px; + width: 81px; + height: 99px; +} +.Pet-Rooster-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -1476px 0px; + width: 81px; + height: 99px; +} +.Pet-Rooster-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -1476px -100px; + width: 81px; + height: 99px; +} +.Pet-Rooster-White { + background-image: url(spritesmith-main-10.png); + background-position: -1476px -200px; + width: 81px; + height: 99px; +} +.Pet-Rooster-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -1476px -300px; + width: 81px; + height: 99px; +} +.Pet-Seahorse-Base { + background-image: url(spritesmith-main-10.png); + background-position: -1476px -400px; + width: 81px; + height: 99px; +} +.Pet-Seahorse-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -1476px -500px; + width: 81px; + height: 99px; +} +.Pet-Seahorse-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -1476px -600px; + width: 81px; + height: 99px; +} +.Pet-Seahorse-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -1476px -700px; + width: 81px; + height: 99px; +} +.Pet-Seahorse-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -1476px -800px; + width: 81px; + height: 99px; +} +.Pet-Seahorse-Red { + background-image: url(spritesmith-main-10.png); + background-position: -1476px -900px; + width: 81px; + height: 99px; +} +.Pet-Seahorse-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -1476px -1000px; + width: 81px; + height: 99px; +} +.Pet-Seahorse-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -1476px -1100px; + width: 81px; + height: 99px; +} +.Pet-Seahorse-White { + background-image: url(spritesmith-main-10.png); + background-position: -1476px -1200px; + width: 81px; + height: 99px; +} +.Pet-Seahorse-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -1476px -1300px; + width: 81px; + height: 99px; +} +.Pet-Sheep-Base { + background-image: url(spritesmith-main-10.png); + background-position: 0px -1400px; + width: 81px; + height: 99px; +} +.Pet-Sheep-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -82px -1400px; + width: 81px; + height: 99px; +} +.Pet-Sheep-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -164px -1400px; + width: 81px; + height: 99px; +} +.Pet-Sheep-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -246px -1400px; + width: 81px; + height: 99px; +} +.Pet-Sheep-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -328px -1400px; + width: 81px; + height: 99px; +} +.Pet-Sheep-Red { + background-image: url(spritesmith-main-10.png); + background-position: -410px -1400px; + width: 81px; + height: 99px; +} +.Pet-Sheep-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -492px -1400px; + width: 81px; + height: 99px; +} +.Pet-Sheep-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -574px -1400px; + width: 81px; + height: 99px; +} +.Pet-Sheep-White { + background-image: url(spritesmith-main-10.png); + background-position: -656px -1400px; + width: 81px; + height: 99px; +} +.Pet-Sheep-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -738px -1400px; + width: 81px; + height: 99px; +} +.Pet-Slime-Base { + background-image: url(spritesmith-main-10.png); + background-position: -820px -1400px; + width: 81px; + height: 99px; +} +.Pet-Slime-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -902px -1400px; + width: 81px; + height: 99px; +} +.Pet-Slime-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -984px -1400px; + width: 81px; + height: 99px; +} +.Pet-Slime-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -1066px -1400px; + width: 81px; + height: 99px; +} +.Pet-Slime-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -1148px -1400px; + width: 81px; + height: 99px; +} +.Pet-Slime-Red { + background-image: url(spritesmith-main-10.png); + background-position: -1230px -1400px; + width: 81px; + height: 99px; +} +.Pet-Slime-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -1312px -1400px; + width: 81px; + height: 99px; +} +.Pet-Slime-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -1394px -1400px; + width: 81px; + height: 99px; +} +.Pet-Slime-White { + background-image: url(spritesmith-main-10.png); + background-position: -1476px -1400px; + width: 81px; + height: 99px; +} +.Pet-Slime-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -1558px 0px; + width: 81px; + height: 99px; +} +.Pet-Snake-Base { + background-image: url(spritesmith-main-10.png); + background-position: -1558px -100px; + width: 81px; + height: 99px; +} +.Pet-Snake-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -1558px -200px; + width: 81px; + height: 99px; +} +.Pet-Snake-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -1558px -300px; + width: 81px; + height: 99px; +} +.Pet-Snake-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -1558px -400px; + width: 81px; + height: 99px; +} +.Pet-Snake-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -1558px -500px; + width: 81px; + height: 99px; +} +.Pet-Snake-Red { + background-image: url(spritesmith-main-10.png); + background-position: -1558px -600px; + width: 81px; + height: 99px; +} +.Pet-Snake-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -1558px -700px; + width: 81px; + height: 99px; +} +.Pet-Snake-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -1558px -800px; + width: 81px; + height: 99px; +} +.Pet-Snake-White { + background-image: url(spritesmith-main-10.png); + background-position: -1558px -900px; + width: 81px; + height: 99px; +} +.Pet-Snake-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -1558px -1000px; + width: 81px; + height: 99px; +} +.Pet-Spider-Base { + background-image: url(spritesmith-main-10.png); + background-position: -1558px -1100px; + width: 81px; + height: 99px; +} +.Pet-Spider-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -1558px -1200px; + width: 81px; + height: 99px; +} +.Pet-Spider-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -1558px -1300px; + width: 81px; + height: 99px; +} +.Pet-Spider-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -1558px -1400px; + width: 81px; + height: 99px; +} +.Pet-Spider-Golden { + background-image: url(spritesmith-main-10.png); + background-position: 0px -1500px; + width: 81px; + height: 99px; +} +.Pet-Spider-Red { + background-image: url(spritesmith-main-10.png); + background-position: -82px -1500px; + width: 81px; + height: 99px; +} +.Pet-Spider-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -164px -1500px; + width: 81px; + height: 99px; +} +.Pet-Spider-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -246px -1500px; + width: 81px; + height: 99px; +} +.Pet-Spider-White { + background-image: url(spritesmith-main-10.png); + background-position: -328px -1500px; + width: 81px; + height: 99px; +} +.Pet-Spider-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -410px -1500px; + width: 81px; + height: 99px; +} +.Pet-TRex-Base { + background-image: url(spritesmith-main-10.png); + background-position: -492px -1500px; + width: 81px; + height: 99px; +} +.Pet-TRex-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -574px -1500px; + width: 81px; + height: 99px; +} +.Pet-TRex-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -656px -1500px; + width: 81px; + height: 99px; +} +.Pet-TRex-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -738px -1500px; + width: 81px; + height: 99px; +} +.Pet-TRex-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -820px -1500px; + width: 81px; + height: 99px; +} +.Pet-TRex-Red { + background-image: url(spritesmith-main-10.png); + background-position: -902px -1500px; + width: 81px; + height: 99px; +} +.Pet-TRex-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -984px -1500px; + width: 81px; + height: 99px; +} +.Pet-TRex-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -1066px -1500px; + width: 81px; + height: 99px; +} +.Pet-TRex-White { + background-image: url(spritesmith-main-10.png); + background-position: -1148px -1500px; + width: 81px; + height: 99px; +} +.Pet-TRex-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -1230px -1500px; + width: 81px; + height: 99px; +} +.Pet-Tiger-Veteran { + background-image: url(spritesmith-main-10.png); + background-position: -1312px -1500px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-Base { + background-image: url(spritesmith-main-10.png); + background-position: -1394px -1500px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -1476px -1500px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -1558px -1500px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -1640px 0px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -1640px -100px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-Peppermint { + background-image: url(spritesmith-main-10.png); + background-position: -1640px -200px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-Red { + background-image: url(spritesmith-main-10.png); + background-position: -1640px -300px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -1640px -400px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -1640px -500px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-Spooky { + background-image: url(spritesmith-main-10.png); + background-position: -1640px -600px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-White { + background-image: url(spritesmith-main-10.png); + background-position: -1640px -700px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -1640px -800px; + width: 81px; + height: 99px; +} +.Pet-Turkey-Base { + background-image: url(spritesmith-main-10.png); + background-position: -1640px -900px; + width: 81px; + height: 99px; +} +.Pet-Turkey-Gilded { + background-image: url(spritesmith-main-10.png); + background-position: -1640px -1000px; + width: 81px; + height: 99px; +} +.Pet-Whale-Base { + background-image: url(spritesmith-main-10.png); + background-position: -1640px -1100px; + width: 81px; + height: 99px; +} diff --git a/common/dist/sprites/spritesmith-main-10.png b/common/dist/sprites/spritesmith-main-10.png new file mode 100644 index 0000000000..57d3463fb0 Binary files /dev/null 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 new file mode 100644 index 0000000000..ccae9f0b94 --- /dev/null +++ b/common/dist/sprites/spritesmith-main-11.css @@ -0,0 +1,204 @@ +.Pet-Whale-CottonCandyBlue { + background-image: url(spritesmith-main-11.png); + background-position: -82px 0px; + width: 81px; + height: 99px; +} +.Pet-Whale-CottonCandyPink { + background-image: url(spritesmith-main-11.png); + background-position: -164px -300px; + width: 81px; + height: 99px; +} +.Pet-Whale-Desert { + background-image: url(spritesmith-main-11.png); + background-position: -164px 0px; + width: 81px; + height: 99px; +} +.Pet-Whale-Golden { + background-image: url(spritesmith-main-11.png); + background-position: 0px -100px; + width: 81px; + height: 99px; +} +.Pet-Whale-Red { + background-image: url(spritesmith-main-11.png); + background-position: -82px -100px; + width: 81px; + height: 99px; +} +.Pet-Whale-Shade { + background-image: url(spritesmith-main-11.png); + background-position: -164px -100px; + width: 81px; + height: 99px; +} +.Pet-Whale-Skeleton { + background-image: url(spritesmith-main-11.png); + background-position: -246px 0px; + width: 81px; + height: 99px; +} +.Pet-Whale-White { + background-image: url(spritesmith-main-11.png); + background-position: -246px -100px; + width: 81px; + height: 99px; +} +.Pet-Whale-Zombie { + background-image: url(spritesmith-main-11.png); + background-position: 0px -200px; + width: 81px; + height: 99px; +} +.Pet-Wolf-Base { + background-image: url(spritesmith-main-11.png); + background-position: -82px -200px; + width: 81px; + height: 99px; +} +.Pet-Wolf-CottonCandyBlue { + background-image: url(spritesmith-main-11.png); + background-position: -164px -200px; + width: 81px; + height: 99px; +} +.Pet-Wolf-CottonCandyPink { + background-image: url(spritesmith-main-11.png); + background-position: -246px -200px; + width: 81px; + height: 99px; +} +.Pet-Wolf-Desert { + background-image: url(spritesmith-main-11.png); + background-position: -328px 0px; + width: 81px; + height: 99px; +} +.Pet-Wolf-Golden { + background-image: url(spritesmith-main-11.png); + background-position: -328px -100px; + width: 81px; + height: 99px; +} +.Pet-Wolf-Peppermint { + background-image: url(spritesmith-main-11.png); + background-position: -328px -200px; + width: 81px; + height: 99px; +} +.Pet-Wolf-Red { + background-image: url(spritesmith-main-11.png); + background-position: 0px -300px; + width: 81px; + height: 99px; +} +.Pet-Wolf-Shade { + background-image: url(spritesmith-main-11.png); + background-position: -82px -300px; + width: 81px; + height: 99px; +} +.Pet-Wolf-Skeleton { + background-image: url(spritesmith-main-11.png); + background-position: 0px 0px; + width: 81px; + height: 99px; +} +.Pet-Wolf-Spooky { + background-image: url(spritesmith-main-11.png); + background-position: -246px -300px; + width: 81px; + height: 99px; +} +.Pet-Wolf-Veteran { + background-image: url(spritesmith-main-11.png); + background-position: -328px -300px; + width: 81px; + height: 99px; +} +.Pet-Wolf-White { + background-image: url(spritesmith-main-11.png); + background-position: -410px 0px; + width: 81px; + height: 99px; +} +.Pet-Wolf-Zombie { + background-image: url(spritesmith-main-11.png); + background-position: -410px -100px; + width: 81px; + height: 99px; +} +.Pet_HatchingPotion_Base { + background-image: url(spritesmith-main-11.png); + background-position: -410px -252px; + width: 48px; + height: 51px; +} +.Pet_HatchingPotion_CottonCandyBlue { + background-image: url(spritesmith-main-11.png); + background-position: -147px -400px; + width: 48px; + height: 51px; +} +.Pet_HatchingPotion_CottonCandyPink { + background-image: url(spritesmith-main-11.png); + background-position: -410px -304px; + width: 48px; + height: 51px; +} +.Pet_HatchingPotion_Desert { + background-image: url(spritesmith-main-11.png); + background-position: 0px -400px; + width: 48px; + height: 51px; +} +.Pet_HatchingPotion_Golden { + background-image: url(spritesmith-main-11.png); + background-position: -49px -400px; + width: 48px; + height: 51px; +} +.Pet_HatchingPotion_Peppermint { + background-image: url(spritesmith-main-11.png); + background-position: -98px -400px; + width: 48px; + height: 51px; +} +.Pet_HatchingPotion_Red { + background-image: url(spritesmith-main-11.png); + background-position: -410px -200px; + width: 48px; + height: 51px; +} +.Pet_HatchingPotion_Shade { + background-image: url(spritesmith-main-11.png); + background-position: -196px -400px; + width: 48px; + height: 51px; +} +.Pet_HatchingPotion_Skeleton { + background-image: url(spritesmith-main-11.png); + background-position: -245px -400px; + width: 48px; + height: 51px; +} +.Pet_HatchingPotion_Spooky { + background-image: url(spritesmith-main-11.png); + background-position: -294px -400px; + width: 48px; + height: 51px; +} +.Pet_HatchingPotion_White { + background-image: url(spritesmith-main-11.png); + background-position: -343px -400px; + width: 48px; + height: 51px; +} +.Pet_HatchingPotion_Zombie { + background-image: url(spritesmith-main-11.png); + background-position: -392px -400px; + width: 48px; + height: 51px; +} diff --git a/common/dist/sprites/spritesmith-main-11.png b/common/dist/sprites/spritesmith-main-11.png new file mode 100644 index 0000000000..2b73945f0d Binary files /dev/null and b/common/dist/sprites/spritesmith-main-11.png differ diff --git a/common/dist/sprites/spritesmith-main-2.css b/common/dist/sprites/spritesmith-main-2.css index ba9cacec38..20a66d698b 100644 --- a/common/dist/sprites/spritesmith-main-2.css +++ b/common/dist/sprites/spritesmith-main-2.css @@ -1,3946 +1,3946 @@ -.hair_base_2_festive { +.hair_base_1_porange { background-image: url(spritesmith-main-2.png); background-position: -91px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_2_festive { +.customize-option.hair_base_1_porange { background-image: url(spritesmith-main-2.png); background-position: -116px -15px; width: 60px; height: 60px; } -.hair_base_2_frost { +.hair_base_1_porange2 { background-image: url(spritesmith-main-2.png); background-position: -728px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_2_frost { +.customize-option.hair_base_1_porange2 { background-image: url(spritesmith-main-2.png); background-position: -753px -1107px; width: 60px; height: 60px; } -.hair_base_2_ghostwhite { +.hair_base_1_ppink { background-image: url(spritesmith-main-2.png); background-position: 0px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_2_ghostwhite { +.customize-option.hair_base_1_ppink { background-image: url(spritesmith-main-2.png); background-position: -25px -106px; width: 60px; height: 60px; } -.hair_base_2_green { +.hair_base_1_ppink2 { background-image: url(spritesmith-main-2.png); background-position: -91px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_2_green { +.customize-option.hair_base_1_ppink2 { background-image: url(spritesmith-main-2.png); background-position: -116px -106px; width: 60px; height: 60px; } -.hair_base_2_halloween { +.hair_base_1_ppurple { background-image: url(spritesmith-main-2.png); background-position: -182px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_2_halloween { +.customize-option.hair_base_1_ppurple { background-image: url(spritesmith-main-2.png); background-position: -207px -15px; width: 60px; height: 60px; } -.hair_base_2_holly { +.hair_base_1_ppurple2 { background-image: url(spritesmith-main-2.png); background-position: -182px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_2_holly { +.customize-option.hair_base_1_ppurple2 { background-image: url(spritesmith-main-2.png); background-position: -207px -106px; width: 60px; height: 60px; } -.hair_base_2_hollygreen { +.hair_base_1_pumpkin { background-image: url(spritesmith-main-2.png); background-position: 0px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_2_hollygreen { +.customize-option.hair_base_1_pumpkin { background-image: url(spritesmith-main-2.png); background-position: -25px -197px; width: 60px; height: 60px; } -.hair_base_2_midnight { +.hair_base_1_purple { background-image: url(spritesmith-main-2.png); background-position: -91px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_2_midnight { +.customize-option.hair_base_1_purple { background-image: url(spritesmith-main-2.png); background-position: -116px -197px; width: 60px; height: 60px; } -.hair_base_2_pblue { +.hair_base_1_pyellow { background-image: url(spritesmith-main-2.png); background-position: -182px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_2_pblue { +.customize-option.hair_base_1_pyellow { background-image: url(spritesmith-main-2.png); background-position: -207px -197px; width: 60px; height: 60px; } -.hair_base_2_pblue2 { +.hair_base_1_pyellow2 { background-image: url(spritesmith-main-2.png); background-position: -273px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_2_pblue2 { +.customize-option.hair_base_1_pyellow2 { background-image: url(spritesmith-main-2.png); background-position: -298px -15px; width: 60px; height: 60px; } -.hair_base_2_peppermint { +.hair_base_1_rainbow { background-image: url(spritesmith-main-2.png); background-position: -273px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_2_peppermint { +.customize-option.hair_base_1_rainbow { background-image: url(spritesmith-main-2.png); background-position: -298px -106px; width: 60px; height: 60px; } -.hair_base_2_pgreen { +.hair_base_1_red { background-image: url(spritesmith-main-2.png); background-position: -273px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_2_pgreen { +.customize-option.hair_base_1_red { background-image: url(spritesmith-main-2.png); background-position: -298px -197px; width: 60px; height: 60px; } -.hair_base_2_pgreen2 { +.hair_base_1_snowy { background-image: url(spritesmith-main-2.png); background-position: 0px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_2_pgreen2 { +.customize-option.hair_base_1_snowy { background-image: url(spritesmith-main-2.png); background-position: -25px -288px; width: 60px; height: 60px; } -.hair_base_2_porange { +.hair_base_1_white { background-image: url(spritesmith-main-2.png); background-position: -91px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_2_porange { +.customize-option.hair_base_1_white { background-image: url(spritesmith-main-2.png); background-position: -116px -288px; width: 60px; height: 60px; } -.hair_base_2_porange2 { +.hair_base_1_winternight { background-image: url(spritesmith-main-2.png); background-position: -182px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_2_porange2 { +.customize-option.hair_base_1_winternight { background-image: url(spritesmith-main-2.png); background-position: -207px -288px; width: 60px; height: 60px; } -.hair_base_2_ppink { +.hair_base_1_winterstar { background-image: url(spritesmith-main-2.png); background-position: -273px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_2_ppink { +.customize-option.hair_base_1_winterstar { background-image: url(spritesmith-main-2.png); background-position: -298px -288px; width: 60px; height: 60px; } -.hair_base_2_ppink2 { +.hair_base_1_yellow { background-image: url(spritesmith-main-2.png); background-position: -364px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_2_ppink2 { +.customize-option.hair_base_1_yellow { background-image: url(spritesmith-main-2.png); background-position: -389px -15px; width: 60px; height: 60px; } -.hair_base_2_ppurple { +.hair_base_1_zombie { background-image: url(spritesmith-main-2.png); background-position: -364px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_2_ppurple { +.customize-option.hair_base_1_zombie { background-image: url(spritesmith-main-2.png); background-position: -389px -106px; width: 60px; height: 60px; } -.hair_base_2_ppurple2 { +.hair_base_2_TRUred { background-image: url(spritesmith-main-2.png); background-position: -364px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_2_ppurple2 { +.customize-option.hair_base_2_TRUred { background-image: url(spritesmith-main-2.png); background-position: -389px -197px; width: 60px; height: 60px; } -.hair_base_2_pumpkin { +.hair_base_2_aurora { background-image: url(spritesmith-main-2.png); background-position: -364px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_2_pumpkin { +.customize-option.hair_base_2_aurora { background-image: url(spritesmith-main-2.png); background-position: -389px -288px; width: 60px; height: 60px; } -.hair_base_2_purple { +.hair_base_2_black { background-image: url(spritesmith-main-2.png); background-position: 0px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_2_purple { +.customize-option.hair_base_2_black { background-image: url(spritesmith-main-2.png); background-position: -25px -379px; width: 60px; height: 60px; } -.hair_base_2_pyellow { +.hair_base_2_blond { background-image: url(spritesmith-main-2.png); background-position: -91px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_2_pyellow { +.customize-option.hair_base_2_blond { background-image: url(spritesmith-main-2.png); background-position: -116px -379px; width: 60px; height: 60px; } -.hair_base_2_pyellow2 { +.hair_base_2_blue { background-image: url(spritesmith-main-2.png); background-position: -182px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_2_pyellow2 { +.customize-option.hair_base_2_blue { background-image: url(spritesmith-main-2.png); background-position: -207px -379px; width: 60px; height: 60px; } -.hair_base_2_rainbow { +.hair_base_2_brown { background-image: url(spritesmith-main-2.png); background-position: -273px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_2_rainbow { +.customize-option.hair_base_2_brown { background-image: url(spritesmith-main-2.png); background-position: -298px -379px; width: 60px; height: 60px; } -.hair_base_2_red { +.hair_base_2_candycane { background-image: url(spritesmith-main-2.png); background-position: -364px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_2_red { +.customize-option.hair_base_2_candycane { background-image: url(spritesmith-main-2.png); background-position: -389px -379px; width: 60px; height: 60px; } -.hair_base_2_snowy { +.hair_base_2_candycorn { background-image: url(spritesmith-main-2.png); background-position: -455px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_2_snowy { +.customize-option.hair_base_2_candycorn { background-image: url(spritesmith-main-2.png); background-position: -480px -15px; width: 60px; height: 60px; } -.hair_base_2_white { +.hair_base_2_festive { background-image: url(spritesmith-main-2.png); background-position: -455px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_2_white { +.customize-option.hair_base_2_festive { background-image: url(spritesmith-main-2.png); background-position: -480px -106px; width: 60px; height: 60px; } -.hair_base_2_winternight { +.hair_base_2_frost { background-image: url(spritesmith-main-2.png); background-position: -455px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_2_winternight { +.customize-option.hair_base_2_frost { background-image: url(spritesmith-main-2.png); background-position: -480px -197px; width: 60px; height: 60px; } -.hair_base_2_winterstar { +.hair_base_2_ghostwhite { background-image: url(spritesmith-main-2.png); background-position: -455px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_2_winterstar { +.customize-option.hair_base_2_ghostwhite { background-image: url(spritesmith-main-2.png); background-position: -480px -288px; width: 60px; height: 60px; } -.hair_base_2_yellow { +.hair_base_2_green { background-image: url(spritesmith-main-2.png); background-position: -455px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_2_yellow { +.customize-option.hair_base_2_green { background-image: url(spritesmith-main-2.png); background-position: -480px -379px; width: 60px; height: 60px; } -.hair_base_2_zombie { +.hair_base_2_halloween { background-image: url(spritesmith-main-2.png); background-position: 0px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_2_zombie { +.customize-option.hair_base_2_halloween { background-image: url(spritesmith-main-2.png); background-position: -25px -470px; width: 60px; height: 60px; } -.hair_base_3_TRUred { +.hair_base_2_holly { background-image: url(spritesmith-main-2.png); background-position: -91px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_3_TRUred { +.customize-option.hair_base_2_holly { background-image: url(spritesmith-main-2.png); background-position: -116px -470px; width: 60px; height: 60px; } -.hair_base_3_aurora { +.hair_base_2_hollygreen { background-image: url(spritesmith-main-2.png); background-position: -182px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_3_aurora { +.customize-option.hair_base_2_hollygreen { background-image: url(spritesmith-main-2.png); background-position: -207px -470px; width: 60px; height: 60px; } -.hair_base_3_black { +.hair_base_2_midnight { background-image: url(spritesmith-main-2.png); background-position: -273px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_3_black { +.customize-option.hair_base_2_midnight { background-image: url(spritesmith-main-2.png); background-position: -298px -470px; width: 60px; height: 60px; } -.hair_base_3_blond { +.hair_base_2_pblue { background-image: url(spritesmith-main-2.png); background-position: -364px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_3_blond { +.customize-option.hair_base_2_pblue { background-image: url(spritesmith-main-2.png); background-position: -389px -470px; width: 60px; height: 60px; } -.hair_base_3_blue { +.hair_base_2_pblue2 { background-image: url(spritesmith-main-2.png); background-position: -455px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_3_blue { +.customize-option.hair_base_2_pblue2 { background-image: url(spritesmith-main-2.png); background-position: -480px -470px; width: 60px; height: 60px; } -.hair_base_3_brown { +.hair_base_2_peppermint { background-image: url(spritesmith-main-2.png); background-position: -546px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_3_brown { +.customize-option.hair_base_2_peppermint { background-image: url(spritesmith-main-2.png); background-position: -571px -15px; width: 60px; height: 60px; } -.hair_base_3_candycane { +.hair_base_2_pgreen { background-image: url(spritesmith-main-2.png); background-position: -546px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_3_candycane { +.customize-option.hair_base_2_pgreen { background-image: url(spritesmith-main-2.png); background-position: -571px -106px; width: 60px; height: 60px; } -.hair_base_3_candycorn { +.hair_base_2_pgreen2 { background-image: url(spritesmith-main-2.png); background-position: -546px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_3_candycorn { +.customize-option.hair_base_2_pgreen2 { background-image: url(spritesmith-main-2.png); background-position: -571px -197px; width: 60px; height: 60px; } -.hair_base_3_festive { +.hair_base_2_porange { background-image: url(spritesmith-main-2.png); background-position: -546px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_3_festive { +.customize-option.hair_base_2_porange { background-image: url(spritesmith-main-2.png); background-position: -571px -288px; width: 60px; height: 60px; } -.hair_base_3_frost { +.hair_base_2_porange2 { background-image: url(spritesmith-main-2.png); background-position: -546px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_3_frost { +.customize-option.hair_base_2_porange2 { background-image: url(spritesmith-main-2.png); background-position: -571px -379px; width: 60px; height: 60px; } -.hair_base_3_ghostwhite { +.hair_base_2_ppink { background-image: url(spritesmith-main-2.png); background-position: -546px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_3_ghostwhite { +.customize-option.hair_base_2_ppink { background-image: url(spritesmith-main-2.png); background-position: -571px -470px; width: 60px; height: 60px; } -.hair_base_3_green { +.hair_base_2_ppink2 { background-image: url(spritesmith-main-2.png); background-position: 0px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_3_green { +.customize-option.hair_base_2_ppink2 { background-image: url(spritesmith-main-2.png); background-position: -25px -561px; width: 60px; height: 60px; } -.hair_base_3_halloween { +.hair_base_2_ppurple { background-image: url(spritesmith-main-2.png); background-position: -91px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_3_halloween { +.customize-option.hair_base_2_ppurple { background-image: url(spritesmith-main-2.png); background-position: -116px -561px; width: 60px; height: 60px; } -.hair_base_3_holly { +.hair_base_2_ppurple2 { background-image: url(spritesmith-main-2.png); background-position: -182px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_3_holly { +.customize-option.hair_base_2_ppurple2 { background-image: url(spritesmith-main-2.png); background-position: -207px -561px; width: 60px; height: 60px; } -.hair_base_3_hollygreen { +.hair_base_2_pumpkin { background-image: url(spritesmith-main-2.png); background-position: -273px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_3_hollygreen { +.customize-option.hair_base_2_pumpkin { background-image: url(spritesmith-main-2.png); background-position: -298px -561px; width: 60px; height: 60px; } -.hair_base_3_midnight { +.hair_base_2_purple { background-image: url(spritesmith-main-2.png); background-position: -364px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_3_midnight { +.customize-option.hair_base_2_purple { background-image: url(spritesmith-main-2.png); background-position: -389px -561px; width: 60px; height: 60px; } -.hair_base_3_pblue { +.hair_base_2_pyellow { background-image: url(spritesmith-main-2.png); background-position: -455px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_3_pblue { +.customize-option.hair_base_2_pyellow { background-image: url(spritesmith-main-2.png); background-position: -480px -561px; width: 60px; height: 60px; } -.hair_base_3_pblue2 { +.hair_base_2_pyellow2 { background-image: url(spritesmith-main-2.png); background-position: -546px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_3_pblue2 { +.customize-option.hair_base_2_pyellow2 { background-image: url(spritesmith-main-2.png); background-position: -571px -561px; width: 60px; height: 60px; } -.hair_base_3_peppermint { +.hair_base_2_rainbow { background-image: url(spritesmith-main-2.png); background-position: -637px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_3_peppermint { +.customize-option.hair_base_2_rainbow { background-image: url(spritesmith-main-2.png); background-position: -662px -15px; width: 60px; height: 60px; } -.hair_base_3_pgreen { +.hair_base_2_red { background-image: url(spritesmith-main-2.png); background-position: -637px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_3_pgreen { +.customize-option.hair_base_2_red { background-image: url(spritesmith-main-2.png); background-position: -662px -106px; width: 60px; height: 60px; } -.hair_base_3_pgreen2 { +.hair_base_2_snowy { background-image: url(spritesmith-main-2.png); background-position: -637px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_3_pgreen2 { +.customize-option.hair_base_2_snowy { background-image: url(spritesmith-main-2.png); background-position: -662px -197px; width: 60px; height: 60px; } -.hair_base_3_porange { +.hair_base_2_white { background-image: url(spritesmith-main-2.png); background-position: -637px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_3_porange { +.customize-option.hair_base_2_white { background-image: url(spritesmith-main-2.png); background-position: -662px -288px; width: 60px; height: 60px; } -.hair_base_3_porange2 { +.hair_base_2_winternight { background-image: url(spritesmith-main-2.png); background-position: -637px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_3_porange2 { +.customize-option.hair_base_2_winternight { background-image: url(spritesmith-main-2.png); background-position: -662px -379px; width: 60px; height: 60px; } -.hair_base_3_ppink { +.hair_base_2_winterstar { background-image: url(spritesmith-main-2.png); background-position: -637px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_3_ppink { +.customize-option.hair_base_2_winterstar { background-image: url(spritesmith-main-2.png); background-position: -662px -470px; width: 60px; height: 60px; } -.hair_base_3_ppink2 { +.hair_base_2_yellow { background-image: url(spritesmith-main-2.png); background-position: -637px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_3_ppink2 { +.customize-option.hair_base_2_yellow { background-image: url(spritesmith-main-2.png); background-position: -662px -561px; width: 60px; height: 60px; } -.hair_base_3_ppurple { +.hair_base_2_zombie { background-image: url(spritesmith-main-2.png); background-position: 0px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_3_ppurple { +.customize-option.hair_base_2_zombie { background-image: url(spritesmith-main-2.png); background-position: -25px -652px; width: 60px; height: 60px; } -.hair_base_3_ppurple2 { +.hair_base_3_TRUred { background-image: url(spritesmith-main-2.png); background-position: -91px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_3_ppurple2 { +.customize-option.hair_base_3_TRUred { background-image: url(spritesmith-main-2.png); background-position: -116px -652px; width: 60px; height: 60px; } -.hair_base_3_pumpkin { +.hair_base_3_aurora { background-image: url(spritesmith-main-2.png); background-position: -182px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_3_pumpkin { +.customize-option.hair_base_3_aurora { background-image: url(spritesmith-main-2.png); background-position: -207px -652px; width: 60px; height: 60px; } -.hair_base_3_purple { +.hair_base_3_black { background-image: url(spritesmith-main-2.png); background-position: -273px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_3_purple { +.customize-option.hair_base_3_black { background-image: url(spritesmith-main-2.png); background-position: -298px -652px; width: 60px; height: 60px; } -.hair_base_3_pyellow { +.hair_base_3_blond { background-image: url(spritesmith-main-2.png); background-position: -364px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_3_pyellow { +.customize-option.hair_base_3_blond { background-image: url(spritesmith-main-2.png); background-position: -389px -652px; width: 60px; height: 60px; } -.hair_base_3_pyellow2 { +.hair_base_3_blue { background-image: url(spritesmith-main-2.png); background-position: -455px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_3_pyellow2 { +.customize-option.hair_base_3_blue { background-image: url(spritesmith-main-2.png); background-position: -480px -652px; width: 60px; height: 60px; } -.hair_base_3_rainbow { +.hair_base_3_brown { background-image: url(spritesmith-main-2.png); background-position: -546px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_3_rainbow { +.customize-option.hair_base_3_brown { background-image: url(spritesmith-main-2.png); background-position: -571px -652px; width: 60px; height: 60px; } -.hair_base_3_red { +.hair_base_3_candycane { background-image: url(spritesmith-main-2.png); background-position: -637px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_3_red { +.customize-option.hair_base_3_candycane { background-image: url(spritesmith-main-2.png); background-position: -662px -652px; width: 60px; height: 60px; } -.hair_base_3_snowy { +.hair_base_3_candycorn { background-image: url(spritesmith-main-2.png); background-position: -728px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_3_snowy { +.customize-option.hair_base_3_candycorn { background-image: url(spritesmith-main-2.png); background-position: -753px -15px; width: 60px; height: 60px; } -.hair_base_3_white { +.hair_base_3_festive { background-image: url(spritesmith-main-2.png); background-position: -728px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_3_white { +.customize-option.hair_base_3_festive { background-image: url(spritesmith-main-2.png); background-position: -753px -106px; width: 60px; height: 60px; } -.hair_base_3_winternight { +.hair_base_3_frost { background-image: url(spritesmith-main-2.png); background-position: -728px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_3_winternight { +.customize-option.hair_base_3_frost { background-image: url(spritesmith-main-2.png); background-position: -753px -197px; width: 60px; height: 60px; } -.hair_base_3_winterstar { +.hair_base_3_ghostwhite { background-image: url(spritesmith-main-2.png); background-position: -728px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_3_winterstar { +.customize-option.hair_base_3_ghostwhite { background-image: url(spritesmith-main-2.png); background-position: -753px -288px; width: 60px; height: 60px; } -.hair_base_3_yellow { +.hair_base_3_green { background-image: url(spritesmith-main-2.png); background-position: -728px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_3_yellow { +.customize-option.hair_base_3_green { background-image: url(spritesmith-main-2.png); background-position: -753px -379px; width: 60px; height: 60px; } -.hair_base_3_zombie { +.hair_base_3_halloween { background-image: url(spritesmith-main-2.png); background-position: -728px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_3_zombie { +.customize-option.hair_base_3_halloween { background-image: url(spritesmith-main-2.png); background-position: -753px -470px; width: 60px; height: 60px; } -.hair_base_4_TRUred { +.hair_base_3_holly { background-image: url(spritesmith-main-2.png); background-position: -728px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_4_TRUred { +.customize-option.hair_base_3_holly { background-image: url(spritesmith-main-2.png); background-position: -753px -561px; width: 60px; height: 60px; } -.hair_base_4_aurora { +.hair_base_3_hollygreen { background-image: url(spritesmith-main-2.png); background-position: -728px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_4_aurora { +.customize-option.hair_base_3_hollygreen { background-image: url(spritesmith-main-2.png); background-position: -753px -652px; width: 60px; height: 60px; } -.hair_base_4_black { +.hair_base_3_midnight { background-image: url(spritesmith-main-2.png); background-position: 0px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_4_black { +.customize-option.hair_base_3_midnight { background-image: url(spritesmith-main-2.png); background-position: -25px -743px; width: 60px; height: 60px; } -.hair_base_4_blond { +.hair_base_3_pblue { background-image: url(spritesmith-main-2.png); background-position: -91px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_4_blond { +.customize-option.hair_base_3_pblue { background-image: url(spritesmith-main-2.png); background-position: -116px -743px; width: 60px; height: 60px; } -.hair_base_4_blue { +.hair_base_3_pblue2 { background-image: url(spritesmith-main-2.png); background-position: -182px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_4_blue { +.customize-option.hair_base_3_pblue2 { background-image: url(spritesmith-main-2.png); background-position: -207px -743px; width: 60px; height: 60px; } -.hair_base_4_brown { +.hair_base_3_peppermint { background-image: url(spritesmith-main-2.png); background-position: -273px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_4_brown { +.customize-option.hair_base_3_peppermint { background-image: url(spritesmith-main-2.png); background-position: -298px -743px; width: 60px; height: 60px; } -.hair_base_4_candycane { +.hair_base_3_pgreen { background-image: url(spritesmith-main-2.png); background-position: -364px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_4_candycane { +.customize-option.hair_base_3_pgreen { background-image: url(spritesmith-main-2.png); background-position: -389px -743px; width: 60px; height: 60px; } -.hair_base_4_candycorn { +.hair_base_3_pgreen2 { background-image: url(spritesmith-main-2.png); background-position: -455px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_4_candycorn { +.customize-option.hair_base_3_pgreen2 { background-image: url(spritesmith-main-2.png); background-position: -480px -743px; width: 60px; height: 60px; } -.hair_base_4_festive { +.hair_base_3_porange { background-image: url(spritesmith-main-2.png); background-position: -546px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_4_festive { +.customize-option.hair_base_3_porange { background-image: url(spritesmith-main-2.png); background-position: -571px -743px; width: 60px; height: 60px; } -.hair_base_4_frost { +.hair_base_3_porange2 { background-image: url(spritesmith-main-2.png); background-position: -637px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_4_frost { +.customize-option.hair_base_3_porange2 { background-image: url(spritesmith-main-2.png); background-position: -662px -743px; width: 60px; height: 60px; } -.hair_base_4_ghostwhite { +.hair_base_3_ppink { background-image: url(spritesmith-main-2.png); background-position: -728px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_4_ghostwhite { +.customize-option.hair_base_3_ppink { background-image: url(spritesmith-main-2.png); background-position: -753px -743px; width: 60px; height: 60px; } -.hair_base_4_green { +.hair_base_3_ppink2 { background-image: url(spritesmith-main-2.png); background-position: -819px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_4_green { +.customize-option.hair_base_3_ppink2 { background-image: url(spritesmith-main-2.png); background-position: -844px -15px; width: 60px; height: 60px; } -.hair_base_4_halloween { +.hair_base_3_ppurple { background-image: url(spritesmith-main-2.png); background-position: -819px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_4_halloween { +.customize-option.hair_base_3_ppurple { background-image: url(spritesmith-main-2.png); background-position: -844px -106px; width: 60px; height: 60px; } -.hair_base_4_holly { +.hair_base_3_ppurple2 { background-image: url(spritesmith-main-2.png); background-position: -819px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_4_holly { +.customize-option.hair_base_3_ppurple2 { background-image: url(spritesmith-main-2.png); background-position: -844px -197px; width: 60px; height: 60px; } -.hair_base_4_hollygreen { +.hair_base_3_pumpkin { background-image: url(spritesmith-main-2.png); background-position: -819px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_4_hollygreen { +.customize-option.hair_base_3_pumpkin { background-image: url(spritesmith-main-2.png); background-position: -844px -288px; width: 60px; height: 60px; } -.hair_base_4_midnight { +.hair_base_3_purple { background-image: url(spritesmith-main-2.png); background-position: -819px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_4_midnight { +.customize-option.hair_base_3_purple { background-image: url(spritesmith-main-2.png); background-position: -844px -379px; width: 60px; height: 60px; } -.hair_base_4_pblue { +.hair_base_3_pyellow { background-image: url(spritesmith-main-2.png); background-position: -819px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_4_pblue { +.customize-option.hair_base_3_pyellow { background-image: url(spritesmith-main-2.png); background-position: -844px -470px; width: 60px; height: 60px; } -.hair_base_4_pblue2 { +.hair_base_3_pyellow2 { background-image: url(spritesmith-main-2.png); background-position: -819px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_4_pblue2 { +.customize-option.hair_base_3_pyellow2 { background-image: url(spritesmith-main-2.png); background-position: -844px -561px; width: 60px; height: 60px; } -.hair_base_4_peppermint { +.hair_base_3_rainbow { background-image: url(spritesmith-main-2.png); background-position: -819px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_4_peppermint { +.customize-option.hair_base_3_rainbow { background-image: url(spritesmith-main-2.png); background-position: -844px -652px; width: 60px; height: 60px; } -.hair_base_4_pgreen { +.hair_base_3_red { background-image: url(spritesmith-main-2.png); background-position: -819px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_4_pgreen { +.customize-option.hair_base_3_red { background-image: url(spritesmith-main-2.png); background-position: -844px -743px; width: 60px; height: 60px; } -.hair_base_4_pgreen2 { +.hair_base_3_snowy { background-image: url(spritesmith-main-2.png); background-position: 0px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_4_pgreen2 { +.customize-option.hair_base_3_snowy { background-image: url(spritesmith-main-2.png); background-position: -25px -834px; width: 60px; height: 60px; } -.hair_base_4_porange { +.hair_base_3_white { background-image: url(spritesmith-main-2.png); background-position: -91px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_4_porange { +.customize-option.hair_base_3_white { background-image: url(spritesmith-main-2.png); background-position: -116px -834px; width: 60px; height: 60px; } -.hair_base_4_porange2 { +.hair_base_3_winternight { background-image: url(spritesmith-main-2.png); background-position: -182px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_4_porange2 { +.customize-option.hair_base_3_winternight { background-image: url(spritesmith-main-2.png); background-position: -207px -834px; width: 60px; height: 60px; } -.hair_base_4_ppink { +.hair_base_3_winterstar { background-image: url(spritesmith-main-2.png); background-position: -273px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_4_ppink { +.customize-option.hair_base_3_winterstar { background-image: url(spritesmith-main-2.png); background-position: -298px -834px; width: 60px; height: 60px; } -.hair_base_4_ppink2 { +.hair_base_3_yellow { background-image: url(spritesmith-main-2.png); background-position: -364px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_4_ppink2 { +.customize-option.hair_base_3_yellow { background-image: url(spritesmith-main-2.png); background-position: -389px -834px; width: 60px; height: 60px; } -.hair_base_4_ppurple { +.hair_base_3_zombie { background-image: url(spritesmith-main-2.png); background-position: -455px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_4_ppurple { +.customize-option.hair_base_3_zombie { background-image: url(spritesmith-main-2.png); background-position: -480px -834px; width: 60px; height: 60px; } -.hair_base_4_ppurple2 { +.hair_base_4_TRUred { background-image: url(spritesmith-main-2.png); background-position: -546px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_4_ppurple2 { +.customize-option.hair_base_4_TRUred { background-image: url(spritesmith-main-2.png); background-position: -571px -834px; width: 60px; height: 60px; } -.hair_base_4_pumpkin { +.hair_base_4_aurora { background-image: url(spritesmith-main-2.png); background-position: -637px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_4_pumpkin { +.customize-option.hair_base_4_aurora { background-image: url(spritesmith-main-2.png); background-position: -662px -834px; width: 60px; height: 60px; } -.hair_base_4_purple { +.hair_base_4_black { background-image: url(spritesmith-main-2.png); background-position: -728px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_4_purple { +.customize-option.hair_base_4_black { background-image: url(spritesmith-main-2.png); background-position: -753px -834px; width: 60px; height: 60px; } -.hair_base_4_pyellow { +.hair_base_4_blond { background-image: url(spritesmith-main-2.png); background-position: -819px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_4_pyellow { +.customize-option.hair_base_4_blond { background-image: url(spritesmith-main-2.png); background-position: -844px -834px; width: 60px; height: 60px; } -.hair_base_4_pyellow2 { +.hair_base_4_blue { background-image: url(spritesmith-main-2.png); background-position: -910px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_4_pyellow2 { +.customize-option.hair_base_4_blue { background-image: url(spritesmith-main-2.png); background-position: -935px -15px; width: 60px; height: 60px; } -.hair_base_4_rainbow { +.hair_base_4_brown { background-image: url(spritesmith-main-2.png); background-position: -910px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_4_rainbow { +.customize-option.hair_base_4_brown { background-image: url(spritesmith-main-2.png); background-position: -935px -106px; width: 60px; height: 60px; } -.hair_base_4_red { +.hair_base_4_candycane { background-image: url(spritesmith-main-2.png); background-position: -910px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_4_red { +.customize-option.hair_base_4_candycane { background-image: url(spritesmith-main-2.png); background-position: -935px -197px; width: 60px; height: 60px; } -.hair_base_4_snowy { +.hair_base_4_candycorn { background-image: url(spritesmith-main-2.png); background-position: -910px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_4_snowy { +.customize-option.hair_base_4_candycorn { background-image: url(spritesmith-main-2.png); background-position: -935px -288px; width: 60px; height: 60px; } -.hair_base_4_white { +.hair_base_4_festive { background-image: url(spritesmith-main-2.png); background-position: -910px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_4_white { +.customize-option.hair_base_4_festive { background-image: url(spritesmith-main-2.png); background-position: -935px -379px; width: 60px; height: 60px; } -.hair_base_4_winternight { +.hair_base_4_frost { background-image: url(spritesmith-main-2.png); background-position: -910px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_4_winternight { +.customize-option.hair_base_4_frost { background-image: url(spritesmith-main-2.png); background-position: -935px -470px; width: 60px; height: 60px; } -.hair_base_4_winterstar { +.hair_base_4_ghostwhite { background-image: url(spritesmith-main-2.png); background-position: -910px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_4_winterstar { +.customize-option.hair_base_4_ghostwhite { background-image: url(spritesmith-main-2.png); background-position: -935px -561px; width: 60px; height: 60px; } -.hair_base_4_yellow { +.hair_base_4_green { background-image: url(spritesmith-main-2.png); background-position: -910px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_4_yellow { +.customize-option.hair_base_4_green { background-image: url(spritesmith-main-2.png); background-position: -935px -652px; width: 60px; height: 60px; } -.hair_base_4_zombie { +.hair_base_4_halloween { background-image: url(spritesmith-main-2.png); background-position: -910px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_4_zombie { +.customize-option.hair_base_4_halloween { background-image: url(spritesmith-main-2.png); background-position: -935px -743px; width: 60px; height: 60px; } -.hair_base_5_TRUred { +.hair_base_4_holly { background-image: url(spritesmith-main-2.png); background-position: -910px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_5_TRUred { +.customize-option.hair_base_4_holly { background-image: url(spritesmith-main-2.png); background-position: -935px -834px; width: 60px; height: 60px; } -.hair_base_5_aurora { +.hair_base_4_hollygreen { background-image: url(spritesmith-main-2.png); background-position: 0px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_5_aurora { +.customize-option.hair_base_4_hollygreen { background-image: url(spritesmith-main-2.png); background-position: -25px -925px; width: 60px; height: 60px; } -.hair_base_5_black { +.hair_base_4_midnight { background-image: url(spritesmith-main-2.png); background-position: -91px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_5_black { +.customize-option.hair_base_4_midnight { background-image: url(spritesmith-main-2.png); background-position: -116px -925px; width: 60px; height: 60px; } -.hair_base_5_blond { +.hair_base_4_pblue { background-image: url(spritesmith-main-2.png); background-position: -182px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_5_blond { +.customize-option.hair_base_4_pblue { background-image: url(spritesmith-main-2.png); background-position: -207px -925px; width: 60px; height: 60px; } -.hair_base_5_blue { +.hair_base_4_pblue2 { background-image: url(spritesmith-main-2.png); background-position: -273px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_5_blue { +.customize-option.hair_base_4_pblue2 { background-image: url(spritesmith-main-2.png); background-position: -298px -925px; width: 60px; height: 60px; } -.hair_base_5_brown { +.hair_base_4_peppermint { background-image: url(spritesmith-main-2.png); background-position: -364px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_5_brown { +.customize-option.hair_base_4_peppermint { background-image: url(spritesmith-main-2.png); background-position: -389px -925px; width: 60px; height: 60px; } -.hair_base_5_candycane { +.hair_base_4_pgreen { background-image: url(spritesmith-main-2.png); background-position: -455px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_5_candycane { +.customize-option.hair_base_4_pgreen { background-image: url(spritesmith-main-2.png); background-position: -480px -925px; width: 60px; height: 60px; } -.hair_base_5_candycorn { +.hair_base_4_pgreen2 { background-image: url(spritesmith-main-2.png); background-position: -546px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_5_candycorn { +.customize-option.hair_base_4_pgreen2 { background-image: url(spritesmith-main-2.png); background-position: -571px -925px; width: 60px; height: 60px; } -.hair_base_5_festive { +.hair_base_4_porange { background-image: url(spritesmith-main-2.png); background-position: -637px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_5_festive { +.customize-option.hair_base_4_porange { background-image: url(spritesmith-main-2.png); background-position: -662px -925px; width: 60px; height: 60px; } -.hair_base_5_frost { +.hair_base_4_porange2 { background-image: url(spritesmith-main-2.png); background-position: -728px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_5_frost { +.customize-option.hair_base_4_porange2 { background-image: url(spritesmith-main-2.png); background-position: -753px -925px; width: 60px; height: 60px; } -.hair_base_5_ghostwhite { +.hair_base_4_ppink { background-image: url(spritesmith-main-2.png); background-position: -819px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_5_ghostwhite { +.customize-option.hair_base_4_ppink { background-image: url(spritesmith-main-2.png); background-position: -844px -925px; width: 60px; height: 60px; } -.hair_base_5_green { +.hair_base_4_ppink2 { background-image: url(spritesmith-main-2.png); background-position: -910px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_5_green { +.customize-option.hair_base_4_ppink2 { background-image: url(spritesmith-main-2.png); background-position: -935px -925px; width: 60px; height: 60px; } -.hair_base_5_halloween { +.hair_base_4_ppurple { background-image: url(spritesmith-main-2.png); background-position: -1001px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_5_halloween { +.customize-option.hair_base_4_ppurple { background-image: url(spritesmith-main-2.png); background-position: -1026px -15px; width: 60px; height: 60px; } -.hair_base_5_holly { +.hair_base_4_ppurple2 { background-image: url(spritesmith-main-2.png); background-position: -1001px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_5_holly { +.customize-option.hair_base_4_ppurple2 { background-image: url(spritesmith-main-2.png); background-position: -1026px -106px; width: 60px; height: 60px; } -.hair_base_5_hollygreen { +.hair_base_4_pumpkin { background-image: url(spritesmith-main-2.png); background-position: -1001px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_5_hollygreen { +.customize-option.hair_base_4_pumpkin { background-image: url(spritesmith-main-2.png); background-position: -1026px -197px; width: 60px; height: 60px; } -.hair_base_5_midnight { +.hair_base_4_purple { background-image: url(spritesmith-main-2.png); background-position: -1001px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_5_midnight { +.customize-option.hair_base_4_purple { background-image: url(spritesmith-main-2.png); background-position: -1026px -288px; width: 60px; height: 60px; } -.hair_base_5_pblue { +.hair_base_4_pyellow { background-image: url(spritesmith-main-2.png); background-position: -1001px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_5_pblue { +.customize-option.hair_base_4_pyellow { background-image: url(spritesmith-main-2.png); background-position: -1026px -379px; width: 60px; height: 60px; } -.hair_base_5_pblue2 { +.hair_base_4_pyellow2 { background-image: url(spritesmith-main-2.png); background-position: -1001px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_5_pblue2 { +.customize-option.hair_base_4_pyellow2 { background-image: url(spritesmith-main-2.png); background-position: -1026px -470px; width: 60px; height: 60px; } -.hair_base_5_peppermint { +.hair_base_4_rainbow { background-image: url(spritesmith-main-2.png); background-position: -1001px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_5_peppermint { +.customize-option.hair_base_4_rainbow { background-image: url(spritesmith-main-2.png); background-position: -1026px -561px; width: 60px; height: 60px; } -.hair_base_5_pgreen { +.hair_base_4_red { background-image: url(spritesmith-main-2.png); background-position: -1001px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_5_pgreen { +.customize-option.hair_base_4_red { background-image: url(spritesmith-main-2.png); background-position: -1026px -652px; width: 60px; height: 60px; } -.hair_base_5_pgreen2 { +.hair_base_4_snowy { background-image: url(spritesmith-main-2.png); background-position: -1001px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_5_pgreen2 { +.customize-option.hair_base_4_snowy { background-image: url(spritesmith-main-2.png); background-position: -1026px -743px; width: 60px; height: 60px; } -.hair_base_5_porange { +.hair_base_4_white { background-image: url(spritesmith-main-2.png); background-position: -1001px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_5_porange { +.customize-option.hair_base_4_white { background-image: url(spritesmith-main-2.png); background-position: -1026px -834px; width: 60px; height: 60px; } -.hair_base_5_porange2 { +.hair_base_4_winternight { background-image: url(spritesmith-main-2.png); background-position: -1001px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_5_porange2 { +.customize-option.hair_base_4_winternight { background-image: url(spritesmith-main-2.png); background-position: -1026px -925px; width: 60px; height: 60px; } -.hair_base_5_ppink { +.hair_base_4_winterstar { background-image: url(spritesmith-main-2.png); background-position: 0px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_5_ppink { +.customize-option.hair_base_4_winterstar { background-image: url(spritesmith-main-2.png); background-position: -25px -1016px; width: 60px; height: 60px; } -.hair_base_5_ppink2 { +.hair_base_4_yellow { background-image: url(spritesmith-main-2.png); background-position: -91px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_5_ppink2 { +.customize-option.hair_base_4_yellow { background-image: url(spritesmith-main-2.png); background-position: -116px -1016px; width: 60px; height: 60px; } -.hair_base_5_ppurple { +.hair_base_4_zombie { background-image: url(spritesmith-main-2.png); background-position: -182px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_5_ppurple { +.customize-option.hair_base_4_zombie { background-image: url(spritesmith-main-2.png); background-position: -207px -1016px; width: 60px; height: 60px; } -.hair_base_5_ppurple2 { +.hair_base_5_TRUred { background-image: url(spritesmith-main-2.png); background-position: -273px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_5_ppurple2 { +.customize-option.hair_base_5_TRUred { background-image: url(spritesmith-main-2.png); background-position: -298px -1016px; width: 60px; height: 60px; } -.hair_base_5_pumpkin { +.hair_base_5_aurora { background-image: url(spritesmith-main-2.png); background-position: -364px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_5_pumpkin { +.customize-option.hair_base_5_aurora { background-image: url(spritesmith-main-2.png); background-position: -389px -1016px; width: 60px; height: 60px; } -.hair_base_5_purple { +.hair_base_5_black { background-image: url(spritesmith-main-2.png); background-position: -455px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_5_purple { +.customize-option.hair_base_5_black { background-image: url(spritesmith-main-2.png); background-position: -480px -1016px; width: 60px; height: 60px; } -.hair_base_5_pyellow { +.hair_base_5_blond { background-image: url(spritesmith-main-2.png); background-position: -546px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_5_pyellow { +.customize-option.hair_base_5_blond { background-image: url(spritesmith-main-2.png); background-position: -571px -1016px; width: 60px; height: 60px; } -.hair_base_5_pyellow2 { +.hair_base_5_blue { background-image: url(spritesmith-main-2.png); background-position: -637px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_5_pyellow2 { +.customize-option.hair_base_5_blue { background-image: url(spritesmith-main-2.png); background-position: -662px -1016px; width: 60px; height: 60px; } -.hair_base_5_rainbow { +.hair_base_5_brown { background-image: url(spritesmith-main-2.png); background-position: -728px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_5_rainbow { +.customize-option.hair_base_5_brown { background-image: url(spritesmith-main-2.png); background-position: -753px -1016px; width: 60px; height: 60px; } -.hair_base_5_red { +.hair_base_5_candycane { background-image: url(spritesmith-main-2.png); background-position: -819px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_5_red { +.customize-option.hair_base_5_candycane { background-image: url(spritesmith-main-2.png); background-position: -844px -1016px; width: 60px; height: 60px; } -.hair_base_5_snowy { +.hair_base_5_candycorn { background-image: url(spritesmith-main-2.png); background-position: -910px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_5_snowy { +.customize-option.hair_base_5_candycorn { background-image: url(spritesmith-main-2.png); background-position: -935px -1016px; width: 60px; height: 60px; } -.hair_base_5_white { +.hair_base_5_festive { background-image: url(spritesmith-main-2.png); background-position: -1001px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_5_white { +.customize-option.hair_base_5_festive { background-image: url(spritesmith-main-2.png); background-position: -1026px -1016px; width: 60px; height: 60px; } -.hair_base_5_winternight { +.hair_base_5_frost { background-image: url(spritesmith-main-2.png); background-position: -1092px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_5_winternight { +.customize-option.hair_base_5_frost { background-image: url(spritesmith-main-2.png); background-position: -1117px -15px; width: 60px; height: 60px; } -.hair_base_5_winterstar { +.hair_base_5_ghostwhite { background-image: url(spritesmith-main-2.png); background-position: -1092px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_5_winterstar { +.customize-option.hair_base_5_ghostwhite { background-image: url(spritesmith-main-2.png); background-position: -1117px -106px; width: 60px; height: 60px; } -.hair_base_5_yellow { +.hair_base_5_green { background-image: url(spritesmith-main-2.png); background-position: -1092px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_5_yellow { +.customize-option.hair_base_5_green { background-image: url(spritesmith-main-2.png); background-position: -1117px -197px; width: 60px; height: 60px; } -.hair_base_5_zombie { +.hair_base_5_halloween { background-image: url(spritesmith-main-2.png); background-position: -1092px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_5_zombie { +.customize-option.hair_base_5_halloween { background-image: url(spritesmith-main-2.png); background-position: -1117px -288px; width: 60px; height: 60px; } -.hair_base_6_TRUred { +.hair_base_5_holly { background-image: url(spritesmith-main-2.png); background-position: -1092px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_6_TRUred { +.customize-option.hair_base_5_holly { background-image: url(spritesmith-main-2.png); background-position: -1117px -379px; width: 60px; height: 60px; } -.hair_base_6_aurora { +.hair_base_5_hollygreen { background-image: url(spritesmith-main-2.png); background-position: -1092px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_6_aurora { +.customize-option.hair_base_5_hollygreen { background-image: url(spritesmith-main-2.png); background-position: -1117px -470px; width: 60px; height: 60px; } -.hair_base_6_black { +.hair_base_5_midnight { background-image: url(spritesmith-main-2.png); background-position: -1092px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_6_black { +.customize-option.hair_base_5_midnight { background-image: url(spritesmith-main-2.png); background-position: -1117px -561px; width: 60px; height: 60px; } -.hair_base_6_blond { +.hair_base_5_pblue { background-image: url(spritesmith-main-2.png); background-position: -1092px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_6_blond { +.customize-option.hair_base_5_pblue { background-image: url(spritesmith-main-2.png); background-position: -1117px -652px; width: 60px; height: 60px; } -.hair_base_6_blue { +.hair_base_5_pblue2 { background-image: url(spritesmith-main-2.png); background-position: -1092px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_6_blue { +.customize-option.hair_base_5_pblue2 { background-image: url(spritesmith-main-2.png); background-position: -1117px -743px; width: 60px; height: 60px; } -.hair_base_6_brown { +.hair_base_5_peppermint { background-image: url(spritesmith-main-2.png); background-position: -1092px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_6_brown { +.customize-option.hair_base_5_peppermint { background-image: url(spritesmith-main-2.png); background-position: -1117px -834px; width: 60px; height: 60px; } -.hair_base_6_candycane { +.hair_base_5_pgreen { background-image: url(spritesmith-main-2.png); background-position: -1092px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_6_candycane { +.customize-option.hair_base_5_pgreen { background-image: url(spritesmith-main-2.png); background-position: -1117px -925px; width: 60px; height: 60px; } -.hair_base_6_candycorn { +.hair_base_5_pgreen2 { background-image: url(spritesmith-main-2.png); background-position: -1092px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_6_candycorn { +.customize-option.hair_base_5_pgreen2 { background-image: url(spritesmith-main-2.png); background-position: -1117px -1016px; width: 60px; height: 60px; } -.hair_base_6_festive { +.hair_base_5_porange { background-image: url(spritesmith-main-2.png); background-position: 0px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_6_festive { +.customize-option.hair_base_5_porange { background-image: url(spritesmith-main-2.png); background-position: -25px -1107px; width: 60px; height: 60px; } -.hair_base_6_frost { +.hair_base_5_porange2 { background-image: url(spritesmith-main-2.png); background-position: -91px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_6_frost { +.customize-option.hair_base_5_porange2 { background-image: url(spritesmith-main-2.png); background-position: -116px -1107px; width: 60px; height: 60px; } -.hair_base_6_ghostwhite { +.hair_base_5_ppink { background-image: url(spritesmith-main-2.png); background-position: -182px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_6_ghostwhite { +.customize-option.hair_base_5_ppink { background-image: url(spritesmith-main-2.png); background-position: -207px -1107px; width: 60px; height: 60px; } -.hair_base_6_green { +.hair_base_5_ppink2 { background-image: url(spritesmith-main-2.png); background-position: -273px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_6_green { +.customize-option.hair_base_5_ppink2 { background-image: url(spritesmith-main-2.png); background-position: -298px -1107px; width: 60px; height: 60px; } -.hair_base_6_halloween { +.hair_base_5_ppurple { background-image: url(spritesmith-main-2.png); background-position: -364px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_6_halloween { +.customize-option.hair_base_5_ppurple { background-image: url(spritesmith-main-2.png); background-position: -389px -1107px; width: 60px; height: 60px; } -.hair_base_6_holly { +.hair_base_5_ppurple2 { background-image: url(spritesmith-main-2.png); background-position: -455px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_6_holly { +.customize-option.hair_base_5_ppurple2 { background-image: url(spritesmith-main-2.png); background-position: -480px -1107px; width: 60px; height: 60px; } -.hair_base_6_hollygreen { +.hair_base_5_pumpkin { background-image: url(spritesmith-main-2.png); background-position: -546px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_6_hollygreen { +.customize-option.hair_base_5_pumpkin { background-image: url(spritesmith-main-2.png); background-position: -571px -1107px; width: 60px; height: 60px; } -.hair_base_6_midnight { +.hair_base_5_purple { background-image: url(spritesmith-main-2.png); background-position: -637px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_6_midnight { +.customize-option.hair_base_5_purple { background-image: url(spritesmith-main-2.png); background-position: -662px -1107px; width: 60px; height: 60px; } -.hair_base_6_pblue { +.hair_base_5_pyellow { background-image: url(spritesmith-main-2.png); background-position: 0px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_6_pblue { +.customize-option.hair_base_5_pyellow { background-image: url(spritesmith-main-2.png); background-position: -25px -15px; width: 60px; height: 60px; } -.hair_base_6_pblue2 { +.hair_base_5_pyellow2 { background-image: url(spritesmith-main-2.png); background-position: -819px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_6_pblue2 { +.customize-option.hair_base_5_pyellow2 { background-image: url(spritesmith-main-2.png); background-position: -844px -1107px; width: 60px; height: 60px; } -.hair_base_6_peppermint { +.hair_base_5_rainbow { background-image: url(spritesmith-main-2.png); background-position: -910px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_6_peppermint { +.customize-option.hair_base_5_rainbow { background-image: url(spritesmith-main-2.png); background-position: -935px -1107px; width: 60px; height: 60px; } -.hair_base_6_pgreen { +.hair_base_5_red { background-image: url(spritesmith-main-2.png); background-position: -1001px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_6_pgreen { +.customize-option.hair_base_5_red { background-image: url(spritesmith-main-2.png); background-position: -1026px -1107px; width: 60px; height: 60px; } -.hair_base_6_pgreen2 { +.hair_base_5_snowy { background-image: url(spritesmith-main-2.png); background-position: -1092px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_6_pgreen2 { +.customize-option.hair_base_5_snowy { background-image: url(spritesmith-main-2.png); background-position: -1117px -1107px; width: 60px; height: 60px; } -.hair_base_6_porange { +.hair_base_5_white { background-image: url(spritesmith-main-2.png); background-position: -1183px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_6_porange { +.customize-option.hair_base_5_white { background-image: url(spritesmith-main-2.png); background-position: -1208px -15px; width: 60px; height: 60px; } -.hair_base_6_porange2 { +.hair_base_5_winternight { background-image: url(spritesmith-main-2.png); background-position: -1183px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_6_porange2 { +.customize-option.hair_base_5_winternight { background-image: url(spritesmith-main-2.png); background-position: -1208px -106px; width: 60px; height: 60px; } -.hair_base_6_ppink { +.hair_base_5_winterstar { background-image: url(spritesmith-main-2.png); background-position: -1183px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_6_ppink { +.customize-option.hair_base_5_winterstar { background-image: url(spritesmith-main-2.png); background-position: -1208px -197px; width: 60px; height: 60px; } -.hair_base_6_ppink2 { +.hair_base_5_yellow { background-image: url(spritesmith-main-2.png); background-position: -1183px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_6_ppink2 { +.customize-option.hair_base_5_yellow { background-image: url(spritesmith-main-2.png); background-position: -1208px -288px; width: 60px; height: 60px; } -.hair_base_6_ppurple { +.hair_base_5_zombie { background-image: url(spritesmith-main-2.png); background-position: -1183px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_6_ppurple { +.customize-option.hair_base_5_zombie { background-image: url(spritesmith-main-2.png); background-position: -1208px -379px; width: 60px; height: 60px; } -.hair_base_6_ppurple2 { +.hair_base_6_TRUred { background-image: url(spritesmith-main-2.png); background-position: -1183px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_6_ppurple2 { +.customize-option.hair_base_6_TRUred { background-image: url(spritesmith-main-2.png); background-position: -1208px -470px; width: 60px; height: 60px; } -.hair_base_6_pumpkin { +.hair_base_6_aurora { background-image: url(spritesmith-main-2.png); background-position: -1183px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_6_pumpkin { +.customize-option.hair_base_6_aurora { background-image: url(spritesmith-main-2.png); background-position: -1208px -561px; width: 60px; height: 60px; } -.hair_base_6_purple { +.hair_base_6_black { background-image: url(spritesmith-main-2.png); background-position: -1183px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_6_purple { +.customize-option.hair_base_6_black { background-image: url(spritesmith-main-2.png); background-position: -1208px -652px; width: 60px; height: 60px; } -.hair_base_6_pyellow { +.hair_base_6_blond { background-image: url(spritesmith-main-2.png); background-position: -1183px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_6_pyellow { +.customize-option.hair_base_6_blond { background-image: url(spritesmith-main-2.png); background-position: -1208px -743px; width: 60px; height: 60px; } -.hair_base_6_pyellow2 { +.hair_base_6_blue { background-image: url(spritesmith-main-2.png); background-position: -1183px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_6_pyellow2 { +.customize-option.hair_base_6_blue { background-image: url(spritesmith-main-2.png); background-position: -1208px -834px; width: 60px; height: 60px; } -.hair_base_6_rainbow { +.hair_base_6_brown { background-image: url(spritesmith-main-2.png); background-position: -1183px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_6_rainbow { +.customize-option.hair_base_6_brown { background-image: url(spritesmith-main-2.png); background-position: -1208px -925px; width: 60px; height: 60px; } -.hair_base_6_red { +.hair_base_6_candycane { background-image: url(spritesmith-main-2.png); background-position: -1183px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_6_red { +.customize-option.hair_base_6_candycane { background-image: url(spritesmith-main-2.png); background-position: -1208px -1016px; width: 60px; height: 60px; } -.hair_base_6_snowy { +.hair_base_6_candycorn { background-image: url(spritesmith-main-2.png); background-position: -1183px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_6_snowy { +.customize-option.hair_base_6_candycorn { background-image: url(spritesmith-main-2.png); background-position: -1208px -1107px; width: 60px; height: 60px; } -.hair_base_6_white { +.hair_base_6_festive { background-image: url(spritesmith-main-2.png); background-position: 0px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_6_white { +.customize-option.hair_base_6_festive { background-image: url(spritesmith-main-2.png); background-position: -25px -1198px; width: 60px; height: 60px; } -.hair_base_6_winternight { +.hair_base_6_frost { background-image: url(spritesmith-main-2.png); background-position: -91px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_6_winternight { +.customize-option.hair_base_6_frost { background-image: url(spritesmith-main-2.png); background-position: -116px -1198px; width: 60px; height: 60px; } -.hair_base_6_winterstar { +.hair_base_6_ghostwhite { background-image: url(spritesmith-main-2.png); background-position: -182px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_6_winterstar { +.customize-option.hair_base_6_ghostwhite { background-image: url(spritesmith-main-2.png); background-position: -207px -1198px; width: 60px; height: 60px; } -.hair_base_6_yellow { +.hair_base_6_green { background-image: url(spritesmith-main-2.png); background-position: -273px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_6_yellow { +.customize-option.hair_base_6_green { background-image: url(spritesmith-main-2.png); background-position: -298px -1198px; width: 60px; height: 60px; } -.hair_base_6_zombie { +.hair_base_6_halloween { background-image: url(spritesmith-main-2.png); background-position: -364px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_6_zombie { +.customize-option.hair_base_6_halloween { background-image: url(spritesmith-main-2.png); background-position: -389px -1198px; width: 60px; height: 60px; } -.hair_base_7_TRUred { +.hair_base_6_holly { background-image: url(spritesmith-main-2.png); background-position: -455px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_7_TRUred { +.customize-option.hair_base_6_holly { background-image: url(spritesmith-main-2.png); background-position: -480px -1198px; width: 60px; height: 60px; } -.hair_base_7_aurora { +.hair_base_6_hollygreen { background-image: url(spritesmith-main-2.png); background-position: -546px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_7_aurora { +.customize-option.hair_base_6_hollygreen { background-image: url(spritesmith-main-2.png); background-position: -571px -1198px; width: 60px; height: 60px; } -.hair_base_7_black { +.hair_base_6_midnight { background-image: url(spritesmith-main-2.png); background-position: -637px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_7_black { +.customize-option.hair_base_6_midnight { background-image: url(spritesmith-main-2.png); background-position: -662px -1198px; width: 60px; height: 60px; } -.hair_base_7_blond { +.hair_base_6_pblue { background-image: url(spritesmith-main-2.png); background-position: -728px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_7_blond { +.customize-option.hair_base_6_pblue { background-image: url(spritesmith-main-2.png); background-position: -753px -1198px; width: 60px; height: 60px; } -.hair_base_7_blue { +.hair_base_6_pblue2 { background-image: url(spritesmith-main-2.png); background-position: -819px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_7_blue { +.customize-option.hair_base_6_pblue2 { background-image: url(spritesmith-main-2.png); background-position: -844px -1198px; width: 60px; height: 60px; } -.hair_base_7_brown { +.hair_base_6_peppermint { background-image: url(spritesmith-main-2.png); background-position: -910px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_7_brown { +.customize-option.hair_base_6_peppermint { background-image: url(spritesmith-main-2.png); background-position: -935px -1198px; width: 60px; height: 60px; } -.hair_base_7_candycane { +.hair_base_6_pgreen { background-image: url(spritesmith-main-2.png); background-position: -1001px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_7_candycane { +.customize-option.hair_base_6_pgreen { background-image: url(spritesmith-main-2.png); background-position: -1026px -1198px; width: 60px; height: 60px; } -.hair_base_7_candycorn { +.hair_base_6_pgreen2 { background-image: url(spritesmith-main-2.png); background-position: -1092px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_7_candycorn { +.customize-option.hair_base_6_pgreen2 { background-image: url(spritesmith-main-2.png); background-position: -1117px -1198px; width: 60px; height: 60px; } -.hair_base_7_festive { +.hair_base_6_porange { background-image: url(spritesmith-main-2.png); background-position: -1183px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_7_festive { +.customize-option.hair_base_6_porange { background-image: url(spritesmith-main-2.png); background-position: -1208px -1198px; width: 60px; height: 60px; } -.hair_base_7_frost { +.hair_base_6_porange2 { background-image: url(spritesmith-main-2.png); background-position: -1274px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_7_frost { +.customize-option.hair_base_6_porange2 { background-image: url(spritesmith-main-2.png); background-position: -1299px -15px; width: 60px; height: 60px; } -.hair_base_7_ghostwhite { +.hair_base_6_ppink { background-image: url(spritesmith-main-2.png); background-position: -1274px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_7_ghostwhite { +.customize-option.hair_base_6_ppink { background-image: url(spritesmith-main-2.png); background-position: -1299px -106px; width: 60px; height: 60px; } -.hair_base_7_green { +.hair_base_6_ppink2 { background-image: url(spritesmith-main-2.png); background-position: -1274px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_7_green { +.customize-option.hair_base_6_ppink2 { background-image: url(spritesmith-main-2.png); background-position: -1299px -197px; width: 60px; height: 60px; } -.hair_base_7_halloween { +.hair_base_6_ppurple { background-image: url(spritesmith-main-2.png); background-position: -1274px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_7_halloween { +.customize-option.hair_base_6_ppurple { background-image: url(spritesmith-main-2.png); background-position: -1299px -288px; width: 60px; height: 60px; } -.hair_base_7_holly { +.hair_base_6_ppurple2 { background-image: url(spritesmith-main-2.png); background-position: -1274px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_7_holly { +.customize-option.hair_base_6_ppurple2 { background-image: url(spritesmith-main-2.png); background-position: -1299px -379px; width: 60px; height: 60px; } -.hair_base_7_hollygreen { +.hair_base_6_pumpkin { background-image: url(spritesmith-main-2.png); background-position: -1274px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_7_hollygreen { +.customize-option.hair_base_6_pumpkin { background-image: url(spritesmith-main-2.png); background-position: -1299px -470px; width: 60px; height: 60px; } -.hair_base_7_midnight { +.hair_base_6_purple { background-image: url(spritesmith-main-2.png); background-position: -1274px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_7_midnight { +.customize-option.hair_base_6_purple { background-image: url(spritesmith-main-2.png); background-position: -1299px -561px; width: 60px; height: 60px; } -.hair_base_7_pblue { +.hair_base_6_pyellow { background-image: url(spritesmith-main-2.png); background-position: -1274px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_7_pblue { +.customize-option.hair_base_6_pyellow { background-image: url(spritesmith-main-2.png); background-position: -1299px -652px; width: 60px; height: 60px; } -.hair_base_7_pblue2 { +.hair_base_6_pyellow2 { background-image: url(spritesmith-main-2.png); background-position: -1274px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_7_pblue2 { +.customize-option.hair_base_6_pyellow2 { background-image: url(spritesmith-main-2.png); background-position: -1299px -743px; width: 60px; height: 60px; } -.hair_base_7_peppermint { +.hair_base_6_rainbow { background-image: url(spritesmith-main-2.png); background-position: -1274px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_7_peppermint { +.customize-option.hair_base_6_rainbow { background-image: url(spritesmith-main-2.png); background-position: -1299px -834px; width: 60px; height: 60px; } -.hair_base_7_pgreen { +.hair_base_6_red { background-image: url(spritesmith-main-2.png); background-position: -1274px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_7_pgreen { +.customize-option.hair_base_6_red { background-image: url(spritesmith-main-2.png); background-position: -1299px -925px; width: 60px; height: 60px; } -.hair_base_7_pgreen2 { +.hair_base_6_snowy { background-image: url(spritesmith-main-2.png); background-position: -1274px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_7_pgreen2 { +.customize-option.hair_base_6_snowy { background-image: url(spritesmith-main-2.png); background-position: -1299px -1016px; width: 60px; height: 60px; } -.hair_base_7_porange { +.hair_base_6_white { background-image: url(spritesmith-main-2.png); background-position: -1274px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_7_porange { +.customize-option.hair_base_6_white { background-image: url(spritesmith-main-2.png); background-position: -1299px -1107px; width: 60px; height: 60px; } -.hair_base_7_porange2 { +.hair_base_6_winternight { background-image: url(spritesmith-main-2.png); background-position: -1274px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_7_porange2 { +.customize-option.hair_base_6_winternight { background-image: url(spritesmith-main-2.png); background-position: -1299px -1198px; width: 60px; height: 60px; } -.hair_base_7_ppink { +.hair_base_6_winterstar { background-image: url(spritesmith-main-2.png); background-position: 0px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_7_ppink { +.customize-option.hair_base_6_winterstar { background-image: url(spritesmith-main-2.png); background-position: -25px -1289px; width: 60px; height: 60px; } -.hair_base_7_ppink2 { +.hair_base_6_yellow { background-image: url(spritesmith-main-2.png); background-position: -91px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_7_ppink2 { +.customize-option.hair_base_6_yellow { background-image: url(spritesmith-main-2.png); background-position: -116px -1289px; width: 60px; height: 60px; } -.hair_base_7_ppurple { +.hair_base_6_zombie { background-image: url(spritesmith-main-2.png); background-position: -182px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_7_ppurple { +.customize-option.hair_base_6_zombie { background-image: url(spritesmith-main-2.png); background-position: -207px -1289px; width: 60px; height: 60px; } -.hair_base_7_ppurple2 { +.hair_base_7_TRUred { background-image: url(spritesmith-main-2.png); background-position: -273px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_7_ppurple2 { +.customize-option.hair_base_7_TRUred { background-image: url(spritesmith-main-2.png); background-position: -298px -1289px; width: 60px; height: 60px; } -.hair_base_7_pumpkin { +.hair_base_7_aurora { background-image: url(spritesmith-main-2.png); background-position: -364px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_7_pumpkin { +.customize-option.hair_base_7_aurora { background-image: url(spritesmith-main-2.png); background-position: -389px -1289px; width: 60px; height: 60px; } -.hair_base_7_purple { +.hair_base_7_black { background-image: url(spritesmith-main-2.png); background-position: -455px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_7_purple { +.customize-option.hair_base_7_black { background-image: url(spritesmith-main-2.png); background-position: -480px -1289px; width: 60px; height: 60px; } -.hair_base_7_pyellow { +.hair_base_7_blond { background-image: url(spritesmith-main-2.png); background-position: -546px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_7_pyellow { +.customize-option.hair_base_7_blond { background-image: url(spritesmith-main-2.png); background-position: -571px -1289px; width: 60px; height: 60px; } -.hair_base_7_pyellow2 { +.hair_base_7_blue { background-image: url(spritesmith-main-2.png); background-position: -637px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_7_pyellow2 { +.customize-option.hair_base_7_blue { background-image: url(spritesmith-main-2.png); background-position: -662px -1289px; width: 60px; height: 60px; } -.hair_base_7_rainbow { +.hair_base_7_brown { background-image: url(spritesmith-main-2.png); background-position: -728px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_7_rainbow { +.customize-option.hair_base_7_brown { background-image: url(spritesmith-main-2.png); background-position: -753px -1289px; width: 60px; height: 60px; } -.hair_base_7_red { +.hair_base_7_candycane { background-image: url(spritesmith-main-2.png); background-position: -819px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_7_red { +.customize-option.hair_base_7_candycane { background-image: url(spritesmith-main-2.png); background-position: -844px -1289px; width: 60px; height: 60px; } -.hair_base_7_snowy { +.hair_base_7_candycorn { background-image: url(spritesmith-main-2.png); background-position: -910px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_7_snowy { +.customize-option.hair_base_7_candycorn { background-image: url(spritesmith-main-2.png); background-position: -935px -1289px; width: 60px; height: 60px; } -.hair_base_7_white { +.hair_base_7_festive { background-image: url(spritesmith-main-2.png); background-position: -1001px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_7_white { +.customize-option.hair_base_7_festive { background-image: url(spritesmith-main-2.png); background-position: -1026px -1289px; width: 60px; height: 60px; } -.hair_base_7_winternight { +.hair_base_7_frost { background-image: url(spritesmith-main-2.png); background-position: -1092px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_7_winternight { +.customize-option.hair_base_7_frost { background-image: url(spritesmith-main-2.png); background-position: -1117px -1289px; width: 60px; height: 60px; } -.hair_base_7_winterstar { +.hair_base_7_ghostwhite { background-image: url(spritesmith-main-2.png); background-position: -1183px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_7_winterstar { +.customize-option.hair_base_7_ghostwhite { background-image: url(spritesmith-main-2.png); background-position: -1208px -1289px; width: 60px; height: 60px; } -.hair_base_7_yellow { +.hair_base_7_green { background-image: url(spritesmith-main-2.png); background-position: -1274px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_7_yellow { +.customize-option.hair_base_7_green { background-image: url(spritesmith-main-2.png); background-position: -1299px -1289px; width: 60px; height: 60px; } -.hair_base_7_zombie { +.hair_base_7_halloween { background-image: url(spritesmith-main-2.png); background-position: -1365px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_7_zombie { +.customize-option.hair_base_7_halloween { background-image: url(spritesmith-main-2.png); background-position: -1390px -15px; width: 60px; height: 60px; } -.hair_base_8_TRUred { +.hair_base_7_holly { background-image: url(spritesmith-main-2.png); background-position: -1365px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_8_TRUred { +.customize-option.hair_base_7_holly { background-image: url(spritesmith-main-2.png); background-position: -1390px -106px; width: 60px; height: 60px; } -.hair_base_8_aurora { +.hair_base_7_hollygreen { background-image: url(spritesmith-main-2.png); background-position: -1365px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_8_aurora { +.customize-option.hair_base_7_hollygreen { background-image: url(spritesmith-main-2.png); background-position: -1390px -197px; width: 60px; height: 60px; } -.hair_base_8_black { +.hair_base_7_midnight { background-image: url(spritesmith-main-2.png); background-position: -1365px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_8_black { +.customize-option.hair_base_7_midnight { background-image: url(spritesmith-main-2.png); background-position: -1390px -288px; width: 60px; height: 60px; } -.hair_base_8_blond { +.hair_base_7_pblue { background-image: url(spritesmith-main-2.png); background-position: -1365px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_8_blond { +.customize-option.hair_base_7_pblue { background-image: url(spritesmith-main-2.png); background-position: -1390px -379px; width: 60px; height: 60px; } -.hair_base_8_blue { +.hair_base_7_pblue2 { background-image: url(spritesmith-main-2.png); background-position: -1365px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_8_blue { +.customize-option.hair_base_7_pblue2 { background-image: url(spritesmith-main-2.png); background-position: -1390px -470px; width: 60px; height: 60px; } -.hair_base_8_brown { +.hair_base_7_peppermint { background-image: url(spritesmith-main-2.png); background-position: -1365px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_8_brown { +.customize-option.hair_base_7_peppermint { background-image: url(spritesmith-main-2.png); background-position: -1390px -561px; width: 60px; height: 60px; } -.hair_base_8_candycane { +.hair_base_7_pgreen { background-image: url(spritesmith-main-2.png); background-position: -1365px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_8_candycane { +.customize-option.hair_base_7_pgreen { background-image: url(spritesmith-main-2.png); background-position: -1390px -652px; width: 60px; height: 60px; } -.hair_base_8_candycorn { +.hair_base_7_pgreen2 { background-image: url(spritesmith-main-2.png); background-position: -1365px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_8_candycorn { +.customize-option.hair_base_7_pgreen2 { background-image: url(spritesmith-main-2.png); background-position: -1390px -743px; width: 60px; height: 60px; } -.hair_base_8_festive { +.hair_base_7_porange { background-image: url(spritesmith-main-2.png); background-position: -1365px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_8_festive { +.customize-option.hair_base_7_porange { background-image: url(spritesmith-main-2.png); background-position: -1390px -834px; width: 60px; height: 60px; } -.hair_base_8_frost { +.hair_base_7_porange2 { background-image: url(spritesmith-main-2.png); background-position: -1365px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_8_frost { +.customize-option.hair_base_7_porange2 { background-image: url(spritesmith-main-2.png); background-position: -1390px -925px; width: 60px; height: 60px; } -.hair_base_8_ghostwhite { +.hair_base_7_ppink { background-image: url(spritesmith-main-2.png); background-position: -1365px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_8_ghostwhite { +.customize-option.hair_base_7_ppink { background-image: url(spritesmith-main-2.png); background-position: -1390px -1016px; width: 60px; height: 60px; } -.hair_base_8_green { +.hair_base_7_ppink2 { background-image: url(spritesmith-main-2.png); background-position: -1365px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_8_green { +.customize-option.hair_base_7_ppink2 { background-image: url(spritesmith-main-2.png); background-position: -1390px -1107px; width: 60px; height: 60px; } -.hair_base_8_halloween { +.hair_base_7_ppurple { background-image: url(spritesmith-main-2.png); background-position: -1365px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_8_halloween { +.customize-option.hair_base_7_ppurple { background-image: url(spritesmith-main-2.png); background-position: -1390px -1198px; width: 60px; height: 60px; } -.hair_base_8_holly { +.hair_base_7_ppurple2 { background-image: url(spritesmith-main-2.png); background-position: -1365px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_8_holly { +.customize-option.hair_base_7_ppurple2 { background-image: url(spritesmith-main-2.png); background-position: -1390px -1289px; width: 60px; height: 60px; } -.hair_base_8_hollygreen { +.hair_base_7_pumpkin { background-image: url(spritesmith-main-2.png); background-position: 0px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_8_hollygreen { +.customize-option.hair_base_7_pumpkin { background-image: url(spritesmith-main-2.png); background-position: -25px -1380px; width: 60px; height: 60px; } -.hair_base_8_midnight { +.hair_base_7_purple { background-image: url(spritesmith-main-2.png); background-position: -91px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_8_midnight { +.customize-option.hair_base_7_purple { background-image: url(spritesmith-main-2.png); background-position: -116px -1380px; width: 60px; height: 60px; } -.hair_base_8_pblue { +.hair_base_7_pyellow { background-image: url(spritesmith-main-2.png); background-position: -182px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_8_pblue { +.customize-option.hair_base_7_pyellow { background-image: url(spritesmith-main-2.png); background-position: -207px -1380px; width: 60px; height: 60px; } -.hair_base_8_pblue2 { +.hair_base_7_pyellow2 { background-image: url(spritesmith-main-2.png); background-position: -273px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_8_pblue2 { +.customize-option.hair_base_7_pyellow2 { background-image: url(spritesmith-main-2.png); background-position: -298px -1380px; width: 60px; height: 60px; } -.hair_base_8_peppermint { +.hair_base_7_rainbow { background-image: url(spritesmith-main-2.png); background-position: -364px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_8_peppermint { +.customize-option.hair_base_7_rainbow { background-image: url(spritesmith-main-2.png); background-position: -389px -1380px; width: 60px; height: 60px; } -.hair_base_8_pgreen { +.hair_base_7_red { background-image: url(spritesmith-main-2.png); background-position: -455px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_8_pgreen { +.customize-option.hair_base_7_red { background-image: url(spritesmith-main-2.png); background-position: -480px -1380px; width: 60px; height: 60px; } -.hair_base_8_pgreen2 { +.hair_base_7_snowy { background-image: url(spritesmith-main-2.png); background-position: -546px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_8_pgreen2 { +.customize-option.hair_base_7_snowy { background-image: url(spritesmith-main-2.png); background-position: -571px -1380px; width: 60px; height: 60px; } -.hair_base_8_porange { +.hair_base_7_white { background-image: url(spritesmith-main-2.png); background-position: -637px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_8_porange { +.customize-option.hair_base_7_white { background-image: url(spritesmith-main-2.png); background-position: -662px -1380px; width: 60px; height: 60px; } -.hair_base_8_porange2 { +.hair_base_7_winternight { background-image: url(spritesmith-main-2.png); background-position: -728px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_8_porange2 { +.customize-option.hair_base_7_winternight { background-image: url(spritesmith-main-2.png); background-position: -753px -1380px; width: 60px; height: 60px; } -.hair_base_8_ppink { +.hair_base_7_winterstar { background-image: url(spritesmith-main-2.png); background-position: -819px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_8_ppink { +.customize-option.hair_base_7_winterstar { background-image: url(spritesmith-main-2.png); background-position: -844px -1380px; width: 60px; height: 60px; } -.hair_base_8_ppink2 { +.hair_base_7_yellow { background-image: url(spritesmith-main-2.png); background-position: -910px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_8_ppink2 { +.customize-option.hair_base_7_yellow { background-image: url(spritesmith-main-2.png); background-position: -935px -1380px; width: 60px; height: 60px; } -.hair_base_8_ppurple { +.hair_base_7_zombie { background-image: url(spritesmith-main-2.png); background-position: -1001px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_8_ppurple { +.customize-option.hair_base_7_zombie { background-image: url(spritesmith-main-2.png); background-position: -1026px -1380px; width: 60px; height: 60px; } -.hair_base_8_ppurple2 { +.hair_base_8_TRUred { background-image: url(spritesmith-main-2.png); background-position: -1092px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_8_ppurple2 { +.customize-option.hair_base_8_TRUred { background-image: url(spritesmith-main-2.png); background-position: -1117px -1380px; width: 60px; height: 60px; } -.hair_base_8_pumpkin { +.hair_base_8_aurora { background-image: url(spritesmith-main-2.png); background-position: -1183px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_8_pumpkin { +.customize-option.hair_base_8_aurora { background-image: url(spritesmith-main-2.png); background-position: -1208px -1380px; width: 60px; height: 60px; } -.hair_base_8_purple { +.hair_base_8_black { background-image: url(spritesmith-main-2.png); background-position: -1274px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_8_purple { +.customize-option.hair_base_8_black { background-image: url(spritesmith-main-2.png); background-position: -1299px -1380px; width: 60px; height: 60px; } -.hair_base_8_pyellow { +.hair_base_8_blond { background-image: url(spritesmith-main-2.png); background-position: -1365px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_8_pyellow { +.customize-option.hair_base_8_blond { background-image: url(spritesmith-main-2.png); background-position: -1390px -1380px; width: 60px; height: 60px; } -.hair_base_8_pyellow2 { +.hair_base_8_blue { background-image: url(spritesmith-main-2.png); background-position: -1456px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_8_pyellow2 { +.customize-option.hair_base_8_blue { background-image: url(spritesmith-main-2.png); background-position: -1481px -15px; width: 60px; height: 60px; } -.hair_base_8_rainbow { +.hair_base_8_brown { background-image: url(spritesmith-main-2.png); background-position: -1456px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_8_rainbow { +.customize-option.hair_base_8_brown { background-image: url(spritesmith-main-2.png); background-position: -1481px -106px; width: 60px; height: 60px; } -.hair_base_8_red { +.hair_base_8_candycane { background-image: url(spritesmith-main-2.png); background-position: -1456px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_8_red { +.customize-option.hair_base_8_candycane { background-image: url(spritesmith-main-2.png); background-position: -1481px -197px; width: 60px; height: 60px; } -.hair_base_8_snowy { +.hair_base_8_candycorn { background-image: url(spritesmith-main-2.png); background-position: -1456px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_8_snowy { +.customize-option.hair_base_8_candycorn { background-image: url(spritesmith-main-2.png); background-position: -1481px -288px; width: 60px; height: 60px; } -.hair_base_8_white { +.hair_base_8_festive { background-image: url(spritesmith-main-2.png); background-position: -1456px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_8_white { +.customize-option.hair_base_8_festive { background-image: url(spritesmith-main-2.png); background-position: -1481px -379px; width: 60px; height: 60px; } -.hair_base_8_winternight { +.hair_base_8_frost { background-image: url(spritesmith-main-2.png); background-position: -1456px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_8_winternight { +.customize-option.hair_base_8_frost { background-image: url(spritesmith-main-2.png); background-position: -1481px -470px; width: 60px; height: 60px; } -.hair_base_8_winterstar { +.hair_base_8_ghostwhite { background-image: url(spritesmith-main-2.png); background-position: -1456px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_8_winterstar { +.customize-option.hair_base_8_ghostwhite { background-image: url(spritesmith-main-2.png); background-position: -1481px -561px; width: 60px; height: 60px; } -.hair_base_8_yellow { +.hair_base_8_green { background-image: url(spritesmith-main-2.png); background-position: -1456px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_8_yellow { +.customize-option.hair_base_8_green { background-image: url(spritesmith-main-2.png); background-position: -1481px -652px; width: 60px; height: 60px; } -.hair_base_8_zombie { +.hair_base_8_halloween { background-image: url(spritesmith-main-2.png); background-position: -1456px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_8_zombie { +.customize-option.hair_base_8_halloween { background-image: url(spritesmith-main-2.png); background-position: -1481px -743px; width: 60px; height: 60px; } -.hair_base_9_TRUred { +.hair_base_8_holly { background-image: url(spritesmith-main-2.png); background-position: -1456px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_9_TRUred { +.customize-option.hair_base_8_holly { background-image: url(spritesmith-main-2.png); background-position: -1481px -834px; width: 60px; height: 60px; } -.hair_base_9_aurora { +.hair_base_8_hollygreen { background-image: url(spritesmith-main-2.png); background-position: -1456px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_9_aurora { +.customize-option.hair_base_8_hollygreen { background-image: url(spritesmith-main-2.png); background-position: -1481px -925px; width: 60px; height: 60px; } -.hair_base_9_black { +.hair_base_8_midnight { background-image: url(spritesmith-main-2.png); background-position: -1456px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_9_black { +.customize-option.hair_base_8_midnight { background-image: url(spritesmith-main-2.png); background-position: -1481px -1016px; width: 60px; height: 60px; } -.hair_base_9_blond { +.hair_base_8_pblue { background-image: url(spritesmith-main-2.png); background-position: -1456px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_9_blond { +.customize-option.hair_base_8_pblue { background-image: url(spritesmith-main-2.png); background-position: -1481px -1107px; width: 60px; height: 60px; } -.hair_base_9_blue { +.hair_base_8_pblue2 { background-image: url(spritesmith-main-2.png); background-position: -1456px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_9_blue { +.customize-option.hair_base_8_pblue2 { background-image: url(spritesmith-main-2.png); background-position: -1481px -1198px; width: 60px; height: 60px; } -.hair_base_9_brown { +.hair_base_8_peppermint { background-image: url(spritesmith-main-2.png); background-position: -1456px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_9_brown { +.customize-option.hair_base_8_peppermint { background-image: url(spritesmith-main-2.png); background-position: -1481px -1289px; width: 60px; height: 60px; } -.hair_base_9_candycane { +.hair_base_8_pgreen { background-image: url(spritesmith-main-2.png); background-position: -1456px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_9_candycane { +.customize-option.hair_base_8_pgreen { background-image: url(spritesmith-main-2.png); background-position: -1481px -1380px; width: 60px; height: 60px; } -.hair_base_9_candycorn { +.hair_base_8_pgreen2 { background-image: url(spritesmith-main-2.png); background-position: 0px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_9_candycorn { +.customize-option.hair_base_8_pgreen2 { background-image: url(spritesmith-main-2.png); background-position: -25px -1471px; width: 60px; height: 60px; } -.hair_base_9_festive { +.hair_base_8_porange { background-image: url(spritesmith-main-2.png); background-position: -91px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_9_festive { +.customize-option.hair_base_8_porange { background-image: url(spritesmith-main-2.png); background-position: -116px -1471px; width: 60px; height: 60px; } -.hair_base_9_frost { +.hair_base_8_porange2 { background-image: url(spritesmith-main-2.png); background-position: -182px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_9_frost { +.customize-option.hair_base_8_porange2 { background-image: url(spritesmith-main-2.png); background-position: -207px -1471px; width: 60px; height: 60px; } -.hair_base_9_ghostwhite { +.hair_base_8_ppink { background-image: url(spritesmith-main-2.png); background-position: -273px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_9_ghostwhite { +.customize-option.hair_base_8_ppink { background-image: url(spritesmith-main-2.png); background-position: -298px -1471px; width: 60px; height: 60px; } -.hair_base_9_green { +.hair_base_8_ppink2 { background-image: url(spritesmith-main-2.png); background-position: -364px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_9_green { +.customize-option.hair_base_8_ppink2 { background-image: url(spritesmith-main-2.png); background-position: -389px -1471px; width: 60px; height: 60px; } -.hair_base_9_halloween { +.hair_base_8_ppurple { background-image: url(spritesmith-main-2.png); background-position: -455px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_9_halloween { +.customize-option.hair_base_8_ppurple { background-image: url(spritesmith-main-2.png); background-position: -480px -1471px; width: 60px; height: 60px; } -.hair_base_9_holly { +.hair_base_8_ppurple2 { background-image: url(spritesmith-main-2.png); background-position: -546px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_9_holly { +.customize-option.hair_base_8_ppurple2 { background-image: url(spritesmith-main-2.png); background-position: -571px -1471px; width: 60px; height: 60px; } -.hair_base_9_hollygreen { +.hair_base_8_pumpkin { background-image: url(spritesmith-main-2.png); background-position: -637px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_9_hollygreen { +.customize-option.hair_base_8_pumpkin { background-image: url(spritesmith-main-2.png); background-position: -662px -1471px; width: 60px; height: 60px; } -.hair_base_9_midnight { +.hair_base_8_purple { background-image: url(spritesmith-main-2.png); background-position: -728px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_9_midnight { +.customize-option.hair_base_8_purple { background-image: url(spritesmith-main-2.png); background-position: -753px -1471px; width: 60px; height: 60px; } -.hair_base_9_pblue { +.hair_base_8_pyellow { background-image: url(spritesmith-main-2.png); background-position: -819px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_9_pblue { +.customize-option.hair_base_8_pyellow { background-image: url(spritesmith-main-2.png); background-position: -844px -1471px; width: 60px; height: 60px; } -.hair_base_9_pblue2 { +.hair_base_8_pyellow2 { background-image: url(spritesmith-main-2.png); background-position: -910px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_9_pblue2 { +.customize-option.hair_base_8_pyellow2 { background-image: url(spritesmith-main-2.png); background-position: -935px -1471px; width: 60px; height: 60px; } -.hair_base_9_peppermint { +.hair_base_8_rainbow { background-image: url(spritesmith-main-2.png); background-position: -1001px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_9_peppermint { +.customize-option.hair_base_8_rainbow { background-image: url(spritesmith-main-2.png); background-position: -1026px -1471px; width: 60px; height: 60px; } -.hair_base_9_pgreen { +.hair_base_8_red { background-image: url(spritesmith-main-2.png); background-position: -1092px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_9_pgreen { +.customize-option.hair_base_8_red { background-image: url(spritesmith-main-2.png); background-position: -1117px -1471px; width: 60px; height: 60px; } -.hair_base_9_pgreen2 { +.hair_base_8_snowy { background-image: url(spritesmith-main-2.png); background-position: -1183px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_9_pgreen2 { +.customize-option.hair_base_8_snowy { background-image: url(spritesmith-main-2.png); background-position: -1208px -1471px; width: 60px; height: 60px; } -.hair_base_9_porange { +.hair_base_8_white { background-image: url(spritesmith-main-2.png); background-position: -1274px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_9_porange { +.customize-option.hair_base_8_white { background-image: url(spritesmith-main-2.png); background-position: -1299px -1471px; width: 60px; height: 60px; } -.hair_base_9_porange2 { +.hair_base_8_winternight { background-image: url(spritesmith-main-2.png); background-position: -1365px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_9_porange2 { +.customize-option.hair_base_8_winternight { background-image: url(spritesmith-main-2.png); background-position: -1390px -1471px; width: 60px; height: 60px; } -.hair_base_9_ppink { +.hair_base_8_winterstar { background-image: url(spritesmith-main-2.png); background-position: -1456px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_9_ppink { +.customize-option.hair_base_8_winterstar { background-image: url(spritesmith-main-2.png); background-position: -1481px -1471px; width: 60px; height: 60px; } -.hair_base_9_ppink2 { +.hair_base_8_yellow { background-image: url(spritesmith-main-2.png); background-position: -1547px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_9_ppink2 { +.customize-option.hair_base_8_yellow { background-image: url(spritesmith-main-2.png); background-position: -1572px -15px; width: 60px; height: 60px; } -.hair_base_9_ppurple { +.hair_base_8_zombie { background-image: url(spritesmith-main-2.png); background-position: -1547px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_9_ppurple { +.customize-option.hair_base_8_zombie { background-image: url(spritesmith-main-2.png); background-position: -1572px -106px; width: 60px; height: 60px; } -.hair_base_9_ppurple2 { +.hair_base_9_TRUred { background-image: url(spritesmith-main-2.png); background-position: -1547px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_9_ppurple2 { +.customize-option.hair_base_9_TRUred { background-image: url(spritesmith-main-2.png); background-position: -1572px -197px; width: 60px; height: 60px; } -.hair_base_9_pumpkin { +.hair_base_9_aurora { background-image: url(spritesmith-main-2.png); background-position: -1547px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_9_pumpkin { +.customize-option.hair_base_9_aurora { background-image: url(spritesmith-main-2.png); background-position: -1572px -288px; width: 60px; height: 60px; } -.hair_base_9_purple { +.hair_base_9_black { background-image: url(spritesmith-main-2.png); background-position: -1547px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_9_purple { +.customize-option.hair_base_9_black { background-image: url(spritesmith-main-2.png); background-position: -1572px -379px; width: 60px; height: 60px; } -.hair_base_9_pyellow { +.hair_base_9_blond { background-image: url(spritesmith-main-2.png); background-position: -1547px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_9_pyellow { +.customize-option.hair_base_9_blond { background-image: url(spritesmith-main-2.png); background-position: -1572px -470px; width: 60px; height: 60px; } -.hair_base_9_pyellow2 { +.hair_base_9_blue { background-image: url(spritesmith-main-2.png); background-position: -1547px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_9_pyellow2 { +.customize-option.hair_base_9_blue { background-image: url(spritesmith-main-2.png); background-position: -1572px -561px; width: 60px; height: 60px; } -.hair_base_9_rainbow { +.hair_base_9_brown { background-image: url(spritesmith-main-2.png); background-position: -1547px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_9_rainbow { +.customize-option.hair_base_9_brown { background-image: url(spritesmith-main-2.png); background-position: -1572px -652px; width: 60px; height: 60px; } -.hair_base_9_red { +.hair_base_9_candycane { background-image: url(spritesmith-main-2.png); background-position: -1547px -728px; width: 90px; height: 90px; } -.customize-option.hair_base_9_red { +.customize-option.hair_base_9_candycane { background-image: url(spritesmith-main-2.png); background-position: -1572px -743px; width: 60px; height: 60px; } -.hair_base_9_snowy { +.hair_base_9_candycorn { background-image: url(spritesmith-main-2.png); background-position: -1547px -819px; width: 90px; height: 90px; } -.customize-option.hair_base_9_snowy { +.customize-option.hair_base_9_candycorn { background-image: url(spritesmith-main-2.png); background-position: -1572px -834px; width: 60px; height: 60px; } -.hair_base_9_white { +.hair_base_9_festive { background-image: url(spritesmith-main-2.png); background-position: -1547px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_9_white { +.customize-option.hair_base_9_festive { background-image: url(spritesmith-main-2.png); background-position: -1572px -925px; width: 60px; height: 60px; } -.hair_base_9_winternight { +.hair_base_9_frost { background-image: url(spritesmith-main-2.png); background-position: -1547px -1001px; width: 90px; height: 90px; } -.customize-option.hair_base_9_winternight { +.customize-option.hair_base_9_frost { background-image: url(spritesmith-main-2.png); background-position: -1572px -1016px; width: 60px; height: 60px; } -.hair_base_9_winterstar { +.hair_base_9_ghostwhite { background-image: url(spritesmith-main-2.png); background-position: -1547px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_9_winterstar { +.customize-option.hair_base_9_ghostwhite { background-image: url(spritesmith-main-2.png); background-position: -1572px -1107px; width: 60px; height: 60px; } -.hair_base_9_yellow { +.hair_base_9_green { background-image: url(spritesmith-main-2.png); background-position: -1547px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_9_yellow { +.customize-option.hair_base_9_green { background-image: url(spritesmith-main-2.png); background-position: -1572px -1198px; width: 60px; height: 60px; } -.hair_base_9_zombie { +.hair_base_9_halloween { background-image: url(spritesmith-main-2.png); background-position: -1547px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_9_zombie { +.customize-option.hair_base_9_halloween { background-image: url(spritesmith-main-2.png); background-position: -1572px -1289px; width: 60px; height: 60px; } -.hair_beard_1_pblue2 { +.hair_base_9_holly { background-image: url(spritesmith-main-2.png); background-position: -1547px -1365px; width: 90px; height: 90px; } -.customize-option.hair_beard_1_pblue2 { +.customize-option.hair_base_9_holly { background-image: url(spritesmith-main-2.png); background-position: -1572px -1380px; width: 60px; height: 60px; } -.hair_beard_1_pgreen2 { +.hair_base_9_hollygreen { background-image: url(spritesmith-main-2.png); background-position: -1547px -1456px; width: 90px; height: 90px; } -.customize-option.hair_beard_1_pgreen2 { +.customize-option.hair_base_9_hollygreen { background-image: url(spritesmith-main-2.png); background-position: -1572px -1471px; width: 60px; height: 60px; } -.hair_beard_1_porange2 { +.hair_base_9_midnight { background-image: url(spritesmith-main-2.png); background-position: 0px -1547px; width: 90px; height: 90px; } -.customize-option.hair_beard_1_porange2 { +.customize-option.hair_base_9_midnight { background-image: url(spritesmith-main-2.png); background-position: -25px -1562px; width: 60px; height: 60px; } -.hair_beard_1_ppink2 { +.hair_base_9_pblue { background-image: url(spritesmith-main-2.png); background-position: -91px -1547px; width: 90px; height: 90px; } -.customize-option.hair_beard_1_ppink2 { +.customize-option.hair_base_9_pblue { background-image: url(spritesmith-main-2.png); background-position: -116px -1562px; width: 60px; height: 60px; } -.hair_beard_1_ppurple2 { +.hair_base_9_pblue2 { background-image: url(spritesmith-main-2.png); background-position: -182px -1547px; width: 90px; height: 90px; } -.customize-option.hair_beard_1_ppurple2 { +.customize-option.hair_base_9_pblue2 { background-image: url(spritesmith-main-2.png); background-position: -207px -1562px; width: 60px; height: 60px; } -.hair_beard_1_pyellow2 { +.hair_base_9_peppermint { background-image: url(spritesmith-main-2.png); background-position: -273px -1547px; width: 90px; height: 90px; } -.customize-option.hair_beard_1_pyellow2 { +.customize-option.hair_base_9_peppermint { background-image: url(spritesmith-main-2.png); background-position: -298px -1562px; width: 60px; height: 60px; } -.hair_beard_2_pblue2 { +.hair_base_9_pgreen { background-image: url(spritesmith-main-2.png); background-position: -364px -1547px; width: 90px; height: 90px; } -.customize-option.hair_beard_2_pblue2 { +.customize-option.hair_base_9_pgreen { background-image: url(spritesmith-main-2.png); background-position: -389px -1562px; width: 60px; height: 60px; } -.hair_beard_2_pgreen2 { +.hair_base_9_pgreen2 { background-image: url(spritesmith-main-2.png); background-position: -455px -1547px; width: 90px; height: 90px; } -.customize-option.hair_beard_2_pgreen2 { +.customize-option.hair_base_9_pgreen2 { background-image: url(spritesmith-main-2.png); background-position: -480px -1562px; width: 60px; height: 60px; } -.hair_beard_2_porange2 { +.hair_base_9_porange { background-image: url(spritesmith-main-2.png); background-position: -546px -1547px; width: 90px; height: 90px; } -.customize-option.hair_beard_2_porange2 { +.customize-option.hair_base_9_porange { background-image: url(spritesmith-main-2.png); background-position: -571px -1562px; width: 60px; height: 60px; } -.hair_beard_2_ppink2 { +.hair_base_9_porange2 { background-image: url(spritesmith-main-2.png); background-position: -637px -1547px; width: 90px; height: 90px; } -.customize-option.hair_beard_2_ppink2 { +.customize-option.hair_base_9_porange2 { background-image: url(spritesmith-main-2.png); background-position: -662px -1562px; width: 60px; height: 60px; } -.hair_beard_2_ppurple2 { +.hair_base_9_ppink { background-image: url(spritesmith-main-2.png); background-position: -728px -1547px; width: 90px; height: 90px; } -.customize-option.hair_beard_2_ppurple2 { +.customize-option.hair_base_9_ppink { background-image: url(spritesmith-main-2.png); background-position: -753px -1562px; width: 60px; height: 60px; } -.hair_beard_2_pyellow2 { +.hair_base_9_ppink2 { background-image: url(spritesmith-main-2.png); background-position: -819px -1547px; width: 90px; height: 90px; } -.customize-option.hair_beard_2_pyellow2 { +.customize-option.hair_base_9_ppink2 { background-image: url(spritesmith-main-2.png); background-position: -844px -1562px; width: 60px; height: 60px; } -.hair_beard_3_pblue2 { +.hair_base_9_ppurple { background-image: url(spritesmith-main-2.png); background-position: -910px -1547px; width: 90px; height: 90px; } -.customize-option.hair_beard_3_pblue2 { +.customize-option.hair_base_9_ppurple { background-image: url(spritesmith-main-2.png); background-position: -935px -1562px; width: 60px; height: 60px; } -.hair_beard_3_pgreen2 { +.hair_base_9_ppurple2 { background-image: url(spritesmith-main-2.png); background-position: -1001px -1547px; width: 90px; height: 90px; } -.customize-option.hair_beard_3_pgreen2 { +.customize-option.hair_base_9_ppurple2 { background-image: url(spritesmith-main-2.png); background-position: -1026px -1562px; width: 60px; height: 60px; } -.hair_beard_3_porange2 { +.hair_base_9_pumpkin { background-image: url(spritesmith-main-2.png); background-position: -1092px -1547px; width: 90px; height: 90px; } -.customize-option.hair_beard_3_porange2 { +.customize-option.hair_base_9_pumpkin { background-image: url(spritesmith-main-2.png); background-position: -1117px -1562px; width: 60px; height: 60px; } -.hair_beard_3_ppink2 { +.hair_base_9_purple { background-image: url(spritesmith-main-2.png); background-position: -1183px -1547px; width: 90px; height: 90px; } -.customize-option.hair_beard_3_ppink2 { +.customize-option.hair_base_9_purple { background-image: url(spritesmith-main-2.png); background-position: -1208px -1562px; width: 60px; height: 60px; } -.hair_beard_3_ppurple2 { +.hair_base_9_pyellow { background-image: url(spritesmith-main-2.png); background-position: -1274px -1547px; width: 90px; height: 90px; } -.customize-option.hair_beard_3_ppurple2 { +.customize-option.hair_base_9_pyellow { background-image: url(spritesmith-main-2.png); background-position: -1299px -1562px; width: 60px; height: 60px; } -.hair_beard_3_pyellow2 { +.hair_base_9_pyellow2 { background-image: url(spritesmith-main-2.png); background-position: -1365px -1547px; width: 90px; height: 90px; } -.customize-option.hair_beard_3_pyellow2 { +.customize-option.hair_base_9_pyellow2 { background-image: url(spritesmith-main-2.png); background-position: -1390px -1562px; width: 60px; height: 60px; } -.hair_mustache_1_pblue2 { +.hair_base_9_rainbow { background-image: url(spritesmith-main-2.png); background-position: -1456px -1547px; width: 90px; height: 90px; } -.customize-option.hair_mustache_1_pblue2 { +.customize-option.hair_base_9_rainbow { background-image: url(spritesmith-main-2.png); background-position: -1481px -1562px; width: 60px; height: 60px; } -.hair_mustache_1_pgreen2 { +.hair_base_9_red { background-image: url(spritesmith-main-2.png); background-position: -1547px -1547px; width: 90px; height: 90px; } -.customize-option.hair_mustache_1_pgreen2 { +.customize-option.hair_base_9_red { background-image: url(spritesmith-main-2.png); background-position: -1572px -1562px; width: 60px; height: 60px; } -.hair_mustache_1_porange2 { +.hair_base_9_snowy { background-image: url(spritesmith-main-2.png); background-position: -1638px 0px; width: 90px; height: 90px; } -.customize-option.hair_mustache_1_porange2 { +.customize-option.hair_base_9_snowy { background-image: url(spritesmith-main-2.png); background-position: -1663px -15px; width: 60px; height: 60px; } -.hair_mustache_1_ppink2 { +.hair_base_9_white { background-image: url(spritesmith-main-2.png); background-position: -1638px -91px; width: 90px; height: 90px; } -.customize-option.hair_mustache_1_ppink2 { +.customize-option.hair_base_9_white { background-image: url(spritesmith-main-2.png); background-position: -1663px -106px; width: 60px; height: 60px; } -.hair_mustache_1_ppurple2 { +.hair_base_9_winternight { background-image: url(spritesmith-main-2.png); background-position: -1638px -182px; width: 90px; height: 90px; } -.customize-option.hair_mustache_1_ppurple2 { +.customize-option.hair_base_9_winternight { background-image: url(spritesmith-main-2.png); background-position: -1663px -197px; width: 60px; height: 60px; } -.hair_mustache_1_pyellow2 { +.hair_base_9_winterstar { background-image: url(spritesmith-main-2.png); background-position: -1638px -273px; width: 90px; height: 90px; } -.customize-option.hair_mustache_1_pyellow2 { +.customize-option.hair_base_9_winterstar { background-image: url(spritesmith-main-2.png); background-position: -1663px -288px; width: 60px; height: 60px; } -.hair_mustache_2_pblue2 { +.hair_base_9_yellow { background-image: url(spritesmith-main-2.png); background-position: -1638px -364px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_pblue2 { +.customize-option.hair_base_9_yellow { 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 5d26a19f55..04cab26d3c 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 3ee9f6fbae..08aebde70a 100644 --- a/common/dist/sprites/spritesmith-main-3.css +++ b/common/dist/sprites/spritesmith-main-3.css @@ -1,2682 +1,3132 @@ -.hair_mustache_2_pgreen2 { - background-image: url(spritesmith-main-3.png); - background-position: -1185px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_2_pgreen2 { - background-image: url(spritesmith-main-3.png); - background-position: -1210px -743px; - width: 60px; - height: 60px; -} -.hair_mustache_2_porange2 { - background-image: url(spritesmith-main-3.png); - background-position: 0px -1274px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_2_porange2 { - background-image: url(spritesmith-main-3.png); - background-position: -25px -1289px; - width: 60px; - height: 60px; -} -.hair_mustache_2_ppink2 { - background-image: url(spritesmith-main-3.png); - background-position: -1185px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_2_ppink2 { - background-image: url(spritesmith-main-3.png); - background-position: -1210px -834px; - width: 60px; - height: 60px; -} -.hair_mustache_2_ppurple2 { - background-image: url(spritesmith-main-3.png); - background-position: -1185px -910px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_2_ppurple2 { - background-image: url(spritesmith-main-3.png); - background-position: -1210px -925px; - width: 60px; - height: 60px; -} -.hair_mustache_2_pyellow2 { - background-image: url(spritesmith-main-3.png); - background-position: -637px -1183px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_2_pyellow2 { - background-image: url(spritesmith-main-3.png); - background-position: -662px -1198px; - width: 60px; - height: 60px; -} -.broad_shirt_black { - background-image: url(spritesmith-main-3.png); - background-position: -728px -1183px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_black { - background-image: url(spritesmith-main-3.png); - background-position: -753px -1213px; - width: 60px; - height: 60px; -} -.broad_shirt_blue { - background-image: url(spritesmith-main-3.png); - background-position: -819px -1183px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_blue { - background-image: url(spritesmith-main-3.png); - background-position: -844px -1213px; - width: 60px; - height: 60px; -} -.broad_shirt_convict { - background-image: url(spritesmith-main-3.png); - background-position: -273px -1365px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_convict { - background-image: url(spritesmith-main-3.png); - background-position: -298px -1395px; - width: 60px; - height: 60px; -} -.broad_shirt_cross { - background-image: url(spritesmith-main-3.png); - background-position: -364px -1365px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_cross { - background-image: url(spritesmith-main-3.png); - background-position: -389px -1395px; - width: 60px; - height: 60px; -} -.broad_shirt_fire { - background-image: url(spritesmith-main-3.png); - background-position: -728px -1365px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_fire { - background-image: url(spritesmith-main-3.png); - background-position: -753px -1395px; - width: 60px; - height: 60px; -} -.broad_shirt_green { - background-image: url(spritesmith-main-3.png); - background-position: -819px -1365px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_green { - background-image: url(spritesmith-main-3.png); - background-position: -844px -1395px; - width: 60px; - height: 60px; -} -.broad_shirt_horizon { - background-image: url(spritesmith-main-3.png); - background-position: -1001px -1365px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_horizon { - background-image: url(spritesmith-main-3.png); - background-position: -1026px -1395px; - width: 60px; - height: 60px; -} -.broad_shirt_ocean { - background-image: url(spritesmith-main-3.png); - background-position: -1092px -1365px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_ocean { - background-image: url(spritesmith-main-3.png); - background-position: -1117px -1395px; - width: 60px; - height: 60px; -} -.broad_shirt_pink { - background-image: url(spritesmith-main-3.png); - background-position: -1458px 0px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_pink { - background-image: url(spritesmith-main-3.png); - background-position: -1483px -30px; - width: 60px; - height: 60px; -} -.broad_shirt_purple { - background-image: url(spritesmith-main-3.png); - background-position: -1458px -91px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_purple { - background-image: url(spritesmith-main-3.png); - background-position: -1483px -121px; - width: 60px; - height: 60px; -} -.broad_shirt_rainbow { - background-image: url(spritesmith-main-3.png); - background-position: -1458px -273px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_rainbow { - background-image: url(spritesmith-main-3.png); - background-position: -1483px -303px; - width: 60px; - height: 60px; -} -.broad_shirt_redblue { - background-image: url(spritesmith-main-3.png); - background-position: -1458px -546px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_redblue { - background-image: url(spritesmith-main-3.png); - background-position: -1483px -576px; - width: 60px; - height: 60px; -} -.broad_shirt_thunder { - background-image: url(spritesmith-main-3.png); - background-position: -1458px -637px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_thunder { - background-image: url(spritesmith-main-3.png); - background-position: -1483px -667px; - width: 60px; - height: 60px; -} -.broad_shirt_tropical { - background-image: url(spritesmith-main-3.png); - background-position: -1549px 0px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_tropical { - background-image: url(spritesmith-main-3.png); - background-position: -1574px -30px; - width: 60px; - height: 60px; -} -.broad_shirt_white { - background-image: url(spritesmith-main-3.png); - background-position: -1549px -91px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_white { - background-image: url(spritesmith-main-3.png); - background-position: -1574px -121px; - width: 60px; - height: 60px; -} -.broad_shirt_yellow { - background-image: url(spritesmith-main-3.png); - background-position: -1549px -364px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_yellow { - background-image: url(spritesmith-main-3.png); - background-position: -1574px -394px; - width: 60px; - height: 60px; -} -.broad_shirt_zombie { - background-image: url(spritesmith-main-3.png); - background-position: -1549px -455px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_zombie { - background-image: url(spritesmith-main-3.png); - background-position: -1574px -485px; - width: 60px; - height: 60px; -} -.slim_shirt_black { - background-image: url(spritesmith-main-3.png); - background-position: -1549px -819px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_black { - background-image: url(spritesmith-main-3.png); - background-position: -1574px -849px; - width: 60px; - height: 60px; -} -.slim_shirt_blue { - background-image: url(spritesmith-main-3.png); - background-position: -1549px -910px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_blue { - background-image: url(spritesmith-main-3.png); - background-position: -1574px -940px; - width: 60px; - height: 60px; -} -.slim_shirt_convict { - background-image: url(spritesmith-main-3.png); - background-position: -1549px -1092px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_convict { - background-image: url(spritesmith-main-3.png); - background-position: -1574px -1122px; - width: 60px; - height: 60px; -} -.slim_shirt_cross { - background-image: url(spritesmith-main-3.png); - background-position: -1549px -1183px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_cross { - background-image: url(spritesmith-main-3.png); - background-position: -1574px -1213px; - width: 60px; - height: 60px; -} -.slim_shirt_fire { - background-image: url(spritesmith-main-3.png); - background-position: -545px -182px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_fire { - background-image: url(spritesmith-main-3.png); - background-position: -570px -212px; - width: 60px; - height: 60px; -} -.slim_shirt_green { - background-image: url(spritesmith-main-3.png); - background-position: -545px -273px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_green { - background-image: url(spritesmith-main-3.png); - background-position: -570px -303px; - width: 60px; - height: 60px; -} -.slim_shirt_horizon { - background-image: url(spritesmith-main-3.png); - background-position: -545px -364px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_horizon { - background-image: url(spritesmith-main-3.png); - background-position: -570px -394px; - width: 60px; - height: 60px; -} -.slim_shirt_ocean { - background-image: url(spritesmith-main-3.png); - background-position: 0px -455px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_ocean { - background-image: url(spritesmith-main-3.png); - background-position: -25px -485px; - width: 60px; - height: 60px; -} -.slim_shirt_pink { - background-image: url(spritesmith-main-3.png); - background-position: -91px -455px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_pink { - background-image: url(spritesmith-main-3.png); - background-position: -116px -485px; - width: 60px; - height: 60px; -} -.slim_shirt_purple { - background-image: url(spritesmith-main-3.png); - background-position: -182px -455px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_purple { - background-image: url(spritesmith-main-3.png); - background-position: -207px -485px; - width: 60px; - height: 60px; -} -.slim_shirt_rainbow { - background-image: url(spritesmith-main-3.png); - background-position: -273px -455px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_rainbow { - background-image: url(spritesmith-main-3.png); - background-position: -298px -485px; - width: 60px; - height: 60px; -} -.slim_shirt_redblue { - background-image: url(spritesmith-main-3.png); - background-position: -364px -455px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_redblue { - background-image: url(spritesmith-main-3.png); - background-position: -389px -485px; - width: 60px; - height: 60px; -} -.slim_shirt_thunder { - background-image: url(spritesmith-main-3.png); - background-position: -455px -455px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_thunder { - background-image: url(spritesmith-main-3.png); - background-position: -480px -485px; - width: 60px; - height: 60px; -} -.slim_shirt_tropical { - background-image: url(spritesmith-main-3.png); - background-position: -546px -455px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_tropical { - background-image: url(spritesmith-main-3.png); - background-position: -571px -485px; - width: 60px; - height: 60px; -} -.slim_shirt_white { - background-image: url(spritesmith-main-3.png); - background-position: 0px -546px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_white { - background-image: url(spritesmith-main-3.png); - background-position: -25px -576px; - width: 60px; - height: 60px; -} -.slim_shirt_yellow { - background-image: url(spritesmith-main-3.png); - background-position: -91px -546px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_yellow { - background-image: url(spritesmith-main-3.png); - background-position: -116px -576px; - width: 60px; - height: 60px; -} -.slim_shirt_zombie { - background-image: url(spritesmith-main-3.png); - background-position: -182px -546px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_zombie { - background-image: url(spritesmith-main-3.png); - background-position: -207px -576px; - width: 60px; - height: 60px; -} -.skin_0ff591 { - background-image: url(spritesmith-main-3.png); - background-position: -273px -546px; - width: 90px; - height: 90px; -} -.customize-option.skin_0ff591 { - background-image: url(spritesmith-main-3.png); - background-position: -298px -561px; - width: 60px; - height: 60px; -} -.skin_0ff591_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -364px -546px; - width: 90px; - height: 90px; -} -.customize-option.skin_0ff591_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -389px -561px; - width: 60px; - height: 60px; -} -.skin_2b43f6 { - background-image: url(spritesmith-main-3.png); - background-position: -455px -546px; - width: 90px; - height: 90px; -} -.customize-option.skin_2b43f6 { - background-image: url(spritesmith-main-3.png); - background-position: -480px -561px; - width: 60px; - height: 60px; -} -.skin_2b43f6_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -546px -546px; - width: 90px; - height: 90px; -} -.customize-option.skin_2b43f6_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -571px -561px; - width: 60px; - height: 60px; -} -.skin_6bd049 { - background-image: url(spritesmith-main-3.png); - background-position: -639px 0px; - width: 90px; - height: 90px; -} -.customize-option.skin_6bd049 { - background-image: url(spritesmith-main-3.png); - background-position: -664px -15px; - width: 60px; - height: 60px; -} -.skin_6bd049_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -639px -91px; - width: 90px; - height: 90px; -} -.customize-option.skin_6bd049_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -664px -106px; - width: 60px; - height: 60px; -} -.skin_800ed0 { - background-image: url(spritesmith-main-3.png); - background-position: -639px -182px; - width: 90px; - height: 90px; -} -.customize-option.skin_800ed0 { - background-image: url(spritesmith-main-3.png); - background-position: -664px -197px; - width: 60px; - height: 60px; -} -.skin_800ed0_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -639px -273px; - width: 90px; - height: 90px; -} -.customize-option.skin_800ed0_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -664px -288px; - width: 60px; - height: 60px; -} -.skin_915533 { - background-image: url(spritesmith-main-3.png); - background-position: -639px -364px; - width: 90px; - height: 90px; -} -.customize-option.skin_915533 { - background-image: url(spritesmith-main-3.png); - background-position: -664px -379px; - width: 60px; - height: 60px; -} -.skin_915533_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -639px -455px; - width: 90px; - height: 90px; -} -.customize-option.skin_915533_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -664px -470px; - width: 60px; - height: 60px; -} -.skin_98461a { - background-image: url(spritesmith-main-3.png); - background-position: -639px -546px; - width: 90px; - height: 90px; -} -.customize-option.skin_98461a { - background-image: url(spritesmith-main-3.png); - background-position: -664px -561px; - width: 60px; - height: 60px; -} -.skin_98461a_sleep { - background-image: url(spritesmith-main-3.png); - background-position: 0px -637px; - width: 90px; - height: 90px; -} -.customize-option.skin_98461a_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -25px -652px; - width: 60px; - height: 60px; -} -.skin_bear { - background-image: url(spritesmith-main-3.png); - background-position: -91px -637px; - width: 90px; - height: 90px; -} -.customize-option.skin_bear { - background-image: url(spritesmith-main-3.png); - background-position: -116px -652px; - width: 60px; - height: 60px; -} -.skin_bear_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -182px -637px; - width: 90px; - height: 90px; -} -.customize-option.skin_bear_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -207px -652px; - width: 60px; - height: 60px; -} -.skin_c06534 { - background-image: url(spritesmith-main-3.png); - background-position: -273px -637px; - width: 90px; - height: 90px; -} -.customize-option.skin_c06534 { - background-image: url(spritesmith-main-3.png); - background-position: -298px -652px; - width: 60px; - height: 60px; -} -.skin_c06534_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -364px -637px; - width: 90px; - height: 90px; -} -.customize-option.skin_c06534_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -389px -652px; - width: 60px; - height: 60px; -} -.skin_c3e1dc { - background-image: url(spritesmith-main-3.png); - background-position: -455px -637px; - width: 90px; - height: 90px; -} -.customize-option.skin_c3e1dc { - background-image: url(spritesmith-main-3.png); - background-position: -480px -652px; - width: 60px; - height: 60px; -} -.skin_c3e1dc_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -546px -637px; - width: 90px; - height: 90px; -} -.customize-option.skin_c3e1dc_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -571px -652px; - width: 60px; - height: 60px; -} -.skin_cactus { - background-image: url(spritesmith-main-3.png); - background-position: -637px -637px; - width: 90px; - height: 90px; -} -.customize-option.skin_cactus { - background-image: url(spritesmith-main-3.png); - background-position: -662px -652px; - width: 60px; - height: 60px; -} -.skin_cactus_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -730px 0px; - width: 90px; - height: 90px; -} -.customize-option.skin_cactus_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -755px -15px; - width: 60px; - height: 60px; -} -.skin_candycorn { - background-image: url(spritesmith-main-3.png); - background-position: -730px -91px; - width: 90px; - height: 90px; -} -.customize-option.skin_candycorn { - background-image: url(spritesmith-main-3.png); - background-position: -755px -106px; - width: 60px; - height: 60px; -} -.skin_candycorn_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -730px -182px; - width: 90px; - height: 90px; -} -.customize-option.skin_candycorn_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -755px -197px; - width: 60px; - height: 60px; -} -.skin_clownfish { - background-image: url(spritesmith-main-3.png); - background-position: -730px -273px; - width: 90px; - height: 90px; -} -.customize-option.skin_clownfish { - background-image: url(spritesmith-main-3.png); - background-position: -755px -288px; - width: 60px; - height: 60px; -} -.skin_clownfish_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -730px -364px; - width: 90px; - height: 90px; -} -.customize-option.skin_clownfish_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -755px -379px; - width: 60px; - height: 60px; -} -.skin_d7a9f7 { - background-image: url(spritesmith-main-3.png); - background-position: -730px -455px; - width: 90px; - height: 90px; -} -.customize-option.skin_d7a9f7 { - background-image: url(spritesmith-main-3.png); - background-position: -755px -470px; - width: 60px; - height: 60px; -} -.skin_d7a9f7_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -730px -546px; - width: 90px; - height: 90px; -} -.customize-option.skin_d7a9f7_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -755px -561px; - width: 60px; - height: 60px; -} -.skin_ddc994 { - background-image: url(spritesmith-main-3.png); - background-position: -730px -637px; - width: 90px; - height: 90px; -} -.customize-option.skin_ddc994 { - background-image: url(spritesmith-main-3.png); - background-position: -755px -652px; - width: 60px; - height: 60px; -} -.skin_ddc994_sleep { - background-image: url(spritesmith-main-3.png); - background-position: 0px -728px; - width: 90px; - height: 90px; -} -.customize-option.skin_ddc994_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -25px -743px; - width: 60px; - height: 60px; -} -.skin_deepocean { - background-image: url(spritesmith-main-3.png); - background-position: -91px -728px; - width: 90px; - height: 90px; -} -.customize-option.skin_deepocean { - background-image: url(spritesmith-main-3.png); - background-position: -116px -743px; - width: 60px; - height: 60px; -} -.skin_deepocean_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -182px -728px; - width: 90px; - height: 90px; -} -.customize-option.skin_deepocean_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -207px -743px; - width: 60px; - height: 60px; -} -.skin_ea8349 { - background-image: url(spritesmith-main-3.png); - background-position: -273px -728px; - width: 90px; - height: 90px; -} -.customize-option.skin_ea8349 { - background-image: url(spritesmith-main-3.png); - background-position: -298px -743px; - width: 60px; - height: 60px; -} -.skin_ea8349_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -364px -728px; - width: 90px; - height: 90px; -} -.customize-option.skin_ea8349_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -389px -743px; - width: 60px; - height: 60px; -} -.skin_eb052b { - background-image: url(spritesmith-main-3.png); - background-position: -455px -728px; - width: 90px; - height: 90px; -} -.customize-option.skin_eb052b { - background-image: url(spritesmith-main-3.png); - background-position: -480px -743px; - width: 60px; - height: 60px; -} -.skin_eb052b_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -546px -728px; - width: 90px; - height: 90px; -} -.customize-option.skin_eb052b_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -571px -743px; - width: 60px; - height: 60px; -} -.skin_f5a76e { - background-image: url(spritesmith-main-3.png); - background-position: -637px -728px; - width: 90px; - height: 90px; -} -.customize-option.skin_f5a76e { - background-image: url(spritesmith-main-3.png); - background-position: -662px -743px; - width: 60px; - height: 60px; -} -.skin_f5a76e_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -728px -728px; - width: 90px; - height: 90px; -} -.customize-option.skin_f5a76e_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -753px -743px; - width: 60px; - height: 60px; -} -.skin_f5d70f { - background-image: url(spritesmith-main-3.png); - background-position: -821px 0px; - width: 90px; - height: 90px; -} -.customize-option.skin_f5d70f { - background-image: url(spritesmith-main-3.png); - background-position: -846px -15px; - width: 60px; - height: 60px; -} -.skin_f5d70f_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -821px -91px; - width: 90px; - height: 90px; -} -.customize-option.skin_f5d70f_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -846px -106px; - width: 60px; - height: 60px; -} -.skin_f69922 { - background-image: url(spritesmith-main-3.png); - background-position: -821px -182px; - width: 90px; - height: 90px; -} -.customize-option.skin_f69922 { - background-image: url(spritesmith-main-3.png); - background-position: -846px -197px; - width: 60px; - height: 60px; -} -.skin_f69922_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -821px -273px; - width: 90px; - height: 90px; -} -.customize-option.skin_f69922_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -846px -288px; - width: 60px; - height: 60px; -} -.skin_fox { - background-image: url(spritesmith-main-3.png); - background-position: -821px -364px; - width: 90px; - height: 90px; -} -.customize-option.skin_fox { - background-image: url(spritesmith-main-3.png); - background-position: -846px -379px; - width: 60px; - height: 60px; -} -.skin_fox_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -821px -455px; - width: 90px; - height: 90px; -} -.customize-option.skin_fox_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -846px -470px; - width: 60px; - height: 60px; -} -.skin_ghost { - background-image: url(spritesmith-main-3.png); - background-position: -821px -546px; - width: 90px; - height: 90px; -} -.customize-option.skin_ghost { - background-image: url(spritesmith-main-3.png); - background-position: -846px -561px; - width: 60px; - height: 60px; -} -.skin_ghost_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -821px -637px; - width: 90px; - height: 90px; -} -.customize-option.skin_ghost_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -846px -652px; - width: 60px; - height: 60px; -} -.skin_lion { - background-image: url(spritesmith-main-3.png); - background-position: -821px -728px; - width: 90px; - height: 90px; -} -.customize-option.skin_lion { - background-image: url(spritesmith-main-3.png); - background-position: -846px -743px; - width: 60px; - height: 60px; -} -.skin_lion_sleep { - background-image: url(spritesmith-main-3.png); - background-position: 0px -819px; - width: 90px; - height: 90px; -} -.customize-option.skin_lion_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -25px -834px; - width: 60px; - height: 60px; -} -.skin_merblue { - background-image: url(spritesmith-main-3.png); - background-position: -91px -819px; - width: 90px; - height: 90px; -} -.customize-option.skin_merblue { - background-image: url(spritesmith-main-3.png); - background-position: -116px -834px; - width: 60px; - height: 60px; -} -.skin_merblue_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -182px -819px; - width: 90px; - height: 90px; -} -.customize-option.skin_merblue_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -207px -834px; - width: 60px; - height: 60px; -} -.skin_mergold { - background-image: url(spritesmith-main-3.png); - background-position: -273px -819px; - width: 90px; - height: 90px; -} -.customize-option.skin_mergold { - background-image: url(spritesmith-main-3.png); - background-position: -298px -834px; - width: 60px; - height: 60px; -} -.skin_mergold_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -364px -819px; - width: 90px; - height: 90px; -} -.customize-option.skin_mergold_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -389px -834px; - width: 60px; - height: 60px; -} -.skin_mergreen { - background-image: url(spritesmith-main-3.png); - background-position: -455px -819px; - width: 90px; - height: 90px; -} -.customize-option.skin_mergreen { - background-image: url(spritesmith-main-3.png); - background-position: -480px -834px; - width: 60px; - height: 60px; -} -.skin_mergreen_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -546px -819px; - width: 90px; - height: 90px; -} -.customize-option.skin_mergreen_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -571px -834px; - width: 60px; - height: 60px; -} -.skin_merruby { - background-image: url(spritesmith-main-3.png); - background-position: -637px -819px; - width: 90px; - height: 90px; -} -.customize-option.skin_merruby { - background-image: url(spritesmith-main-3.png); - background-position: -662px -834px; - width: 60px; - height: 60px; -} -.skin_merruby_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -728px -819px; - width: 90px; - height: 90px; -} -.customize-option.skin_merruby_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -753px -834px; - width: 60px; - height: 60px; -} -.skin_monster { - background-image: url(spritesmith-main-3.png); - background-position: -819px -819px; - width: 90px; - height: 90px; -} -.customize-option.skin_monster { - background-image: url(spritesmith-main-3.png); - background-position: -844px -834px; - width: 60px; - height: 60px; -} -.skin_monster_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -912px 0px; - width: 90px; - height: 90px; -} -.customize-option.skin_monster_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -937px -15px; - width: 60px; - height: 60px; -} -.skin_ogre { - background-image: url(spritesmith-main-3.png); - background-position: -912px -91px; - width: 90px; - height: 90px; -} -.customize-option.skin_ogre { - background-image: url(spritesmith-main-3.png); - background-position: -937px -106px; - width: 60px; - height: 60px; -} -.skin_ogre_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -912px -182px; - width: 90px; - height: 90px; -} -.customize-option.skin_ogre_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -937px -197px; - width: 60px; - height: 60px; -} -.skin_panda { - background-image: url(spritesmith-main-3.png); - background-position: -912px -273px; - width: 90px; - height: 90px; -} -.customize-option.skin_panda { - background-image: url(spritesmith-main-3.png); - background-position: -937px -288px; - width: 60px; - height: 60px; -} -.skin_panda_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -912px -364px; - width: 90px; - height: 90px; -} -.customize-option.skin_panda_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -937px -379px; - width: 60px; - height: 60px; -} -.skin_pastelBlue { - background-image: url(spritesmith-main-3.png); - background-position: -912px -455px; - width: 90px; - height: 90px; -} -.customize-option.skin_pastelBlue { - background-image: url(spritesmith-main-3.png); - background-position: -937px -470px; - width: 60px; - height: 60px; -} -.skin_pastelBlue_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -912px -546px; - width: 90px; - height: 90px; -} -.customize-option.skin_pastelBlue_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -937px -561px; - width: 60px; - height: 60px; -} -.skin_pastelGreen { - background-image: url(spritesmith-main-3.png); - background-position: -912px -637px; - width: 90px; - height: 90px; -} -.customize-option.skin_pastelGreen { - background-image: url(spritesmith-main-3.png); - background-position: -937px -652px; - width: 60px; - height: 60px; -} -.skin_pastelGreen_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -912px -728px; - width: 90px; - height: 90px; -} -.customize-option.skin_pastelGreen_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -937px -743px; - width: 60px; - height: 60px; -} -.skin_pastelOrange { - background-image: url(spritesmith-main-3.png); - background-position: -912px -819px; - width: 90px; - height: 90px; -} -.customize-option.skin_pastelOrange { - background-image: url(spritesmith-main-3.png); - background-position: -937px -834px; - width: 60px; - height: 60px; -} -.skin_pastelOrange_sleep { - background-image: url(spritesmith-main-3.png); - background-position: 0px -910px; - width: 90px; - height: 90px; -} -.customize-option.skin_pastelOrange_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -25px -925px; - width: 60px; - height: 60px; -} -.skin_pastelPink { - background-image: url(spritesmith-main-3.png); - background-position: -91px -910px; - width: 90px; - height: 90px; -} -.customize-option.skin_pastelPink { - background-image: url(spritesmith-main-3.png); - background-position: -116px -925px; - width: 60px; - height: 60px; -} -.skin_pastelPink_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -182px -910px; - width: 90px; - height: 90px; -} -.customize-option.skin_pastelPink_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -207px -925px; - width: 60px; - height: 60px; -} -.skin_pastelPurple { - background-image: url(spritesmith-main-3.png); - background-position: -273px -910px; - width: 90px; - height: 90px; -} -.customize-option.skin_pastelPurple { - background-image: url(spritesmith-main-3.png); - background-position: -298px -925px; - width: 60px; - height: 60px; -} -.skin_pastelPurple_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -364px -910px; - width: 90px; - height: 90px; -} -.customize-option.skin_pastelPurple_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -389px -925px; - width: 60px; - height: 60px; -} -.skin_pastelRainbowChevron { - background-image: url(spritesmith-main-3.png); - background-position: -455px -910px; - width: 90px; - height: 90px; -} -.customize-option.skin_pastelRainbowChevron { - background-image: url(spritesmith-main-3.png); - background-position: -480px -925px; - width: 60px; - height: 60px; -} -.skin_pastelRainbowChevron_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -546px -910px; - width: 90px; - height: 90px; -} -.customize-option.skin_pastelRainbowChevron_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -571px -925px; - width: 60px; - height: 60px; -} -.skin_pastelRainbowDiagonal { - background-image: url(spritesmith-main-3.png); - background-position: -637px -910px; - width: 90px; - height: 90px; -} -.customize-option.skin_pastelRainbowDiagonal { - background-image: url(spritesmith-main-3.png); - background-position: -662px -925px; - width: 60px; - height: 60px; -} -.skin_pastelRainbowDiagonal_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -728px -910px; - width: 90px; - height: 90px; -} -.customize-option.skin_pastelRainbowDiagonal_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -753px -925px; - width: 60px; - height: 60px; -} -.skin_pastelYellow { - background-image: url(spritesmith-main-3.png); - background-position: -819px -910px; - width: 90px; - height: 90px; -} -.customize-option.skin_pastelYellow { - background-image: url(spritesmith-main-3.png); - background-position: -844px -925px; - width: 60px; - height: 60px; -} -.skin_pastelYellow_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -910px -910px; - width: 90px; - height: 90px; -} -.customize-option.skin_pastelYellow_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -935px -925px; - width: 60px; - height: 60px; -} -.skin_pig { - background-image: url(spritesmith-main-3.png); - background-position: -1003px 0px; - width: 90px; - height: 90px; -} -.customize-option.skin_pig { - background-image: url(spritesmith-main-3.png); - background-position: -1028px -15px; - width: 60px; - height: 60px; -} -.skin_pig_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1003px -91px; - width: 90px; - height: 90px; -} -.customize-option.skin_pig_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1028px -106px; - width: 60px; - height: 60px; -} -.skin_pumpkin { - background-image: url(spritesmith-main-3.png); - background-position: -1003px -182px; - width: 90px; - height: 90px; -} -.customize-option.skin_pumpkin { - background-image: url(spritesmith-main-3.png); - background-position: -1028px -197px; - width: 60px; - height: 60px; -} -.skin_pumpkin2 { - background-image: url(spritesmith-main-3.png); - background-position: -1003px -273px; - width: 90px; - height: 90px; -} -.customize-option.skin_pumpkin2 { - background-image: url(spritesmith-main-3.png); - background-position: -1028px -288px; - width: 60px; - height: 60px; -} -.skin_pumpkin2_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1003px -364px; - width: 90px; - height: 90px; -} -.customize-option.skin_pumpkin2_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1028px -379px; - width: 60px; - height: 60px; -} -.skin_pumpkin_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1003px -455px; - width: 90px; - height: 90px; -} -.customize-option.skin_pumpkin_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1028px -470px; - width: 60px; - height: 60px; -} -.skin_rainbow { - background-image: url(spritesmith-main-3.png); - background-position: -1003px -546px; - width: 90px; - height: 90px; -} -.customize-option.skin_rainbow { - background-image: url(spritesmith-main-3.png); - background-position: -1028px -561px; - width: 60px; - height: 60px; -} -.skin_rainbow_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1003px -637px; - width: 90px; - height: 90px; -} -.customize-option.skin_rainbow_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1028px -652px; - width: 60px; - height: 60px; -} -.skin_reptile { - background-image: url(spritesmith-main-3.png); - background-position: -1003px -728px; - width: 90px; - height: 90px; -} -.customize-option.skin_reptile { - background-image: url(spritesmith-main-3.png); - background-position: -1028px -743px; - width: 60px; - height: 60px; -} -.skin_reptile_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1003px -819px; - width: 90px; - height: 90px; -} -.customize-option.skin_reptile_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1028px -834px; - width: 60px; - height: 60px; -} -.skin_shadow { - background-image: url(spritesmith-main-3.png); - background-position: -1003px -910px; - width: 90px; - height: 90px; -} -.customize-option.skin_shadow { - background-image: url(spritesmith-main-3.png); - background-position: -1028px -925px; - width: 60px; - height: 60px; -} -.skin_shadow2 { - background-image: url(spritesmith-main-3.png); - background-position: 0px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_shadow2 { - background-image: url(spritesmith-main-3.png); - background-position: -25px -1016px; - width: 60px; - height: 60px; -} -.skin_shadow2_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -91px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_shadow2_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -116px -1016px; - width: 60px; - height: 60px; -} -.skin_shadow_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -182px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_shadow_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -207px -1016px; - width: 60px; - height: 60px; -} -.skin_shark { - background-image: url(spritesmith-main-3.png); - background-position: -273px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_shark { - background-image: url(spritesmith-main-3.png); - background-position: -298px -1016px; - width: 60px; - height: 60px; -} -.skin_shark_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -364px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_shark_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -389px -1016px; - width: 60px; - height: 60px; -} -.skin_skeleton { - background-image: url(spritesmith-main-3.png); - background-position: -455px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_skeleton { - background-image: url(spritesmith-main-3.png); - background-position: -480px -1016px; - width: 60px; - height: 60px; -} -.skin_skeleton2 { - background-image: url(spritesmith-main-3.png); - background-position: -546px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_skeleton2 { - background-image: url(spritesmith-main-3.png); - background-position: -571px -1016px; - width: 60px; - height: 60px; -} -.skin_skeleton2_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -637px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_skeleton2_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -662px -1016px; - width: 60px; - height: 60px; -} -.skin_skeleton_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -728px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_skeleton_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -753px -1016px; - width: 60px; - height: 60px; -} -.skin_tiger { - background-image: url(spritesmith-main-3.png); - background-position: -819px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_tiger { - background-image: url(spritesmith-main-3.png); - background-position: -844px -1016px; - width: 60px; - height: 60px; -} -.skin_tiger_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -910px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_tiger_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -935px -1016px; - width: 60px; - height: 60px; -} -.skin_transparent { - background-image: url(spritesmith-main-3.png); - background-position: -1001px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_transparent { - background-image: url(spritesmith-main-3.png); - background-position: -1026px -1016px; - width: 60px; - height: 60px; -} -.skin_transparent_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1094px 0px; - width: 90px; - height: 90px; -} -.customize-option.skin_transparent_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1119px -15px; - width: 60px; - height: 60px; -} -.skin_tropicalwater { - background-image: url(spritesmith-main-3.png); - background-position: -1094px -91px; - width: 90px; - height: 90px; -} -.customize-option.skin_tropicalwater { - background-image: url(spritesmith-main-3.png); - background-position: -1119px -106px; - width: 60px; - height: 60px; -} -.skin_tropicalwater_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1094px -182px; - width: 90px; - height: 90px; -} -.customize-option.skin_tropicalwater_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1119px -197px; - width: 60px; - height: 60px; -} -.skin_wolf { - background-image: url(spritesmith-main-3.png); - background-position: -1094px -273px; - width: 90px; - height: 90px; -} -.customize-option.skin_wolf { - background-image: url(spritesmith-main-3.png); - background-position: -1119px -288px; - width: 60px; - height: 60px; -} -.skin_wolf_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1094px -364px; - width: 90px; - height: 90px; -} -.customize-option.skin_wolf_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1119px -379px; - width: 60px; - height: 60px; -} -.skin_zombie { - background-image: url(spritesmith-main-3.png); - background-position: -1094px -455px; - width: 90px; - height: 90px; -} -.customize-option.skin_zombie { - background-image: url(spritesmith-main-3.png); - background-position: -1119px -470px; - width: 60px; - height: 60px; -} -.skin_zombie2 { - background-image: url(spritesmith-main-3.png); - background-position: -1094px -546px; - width: 90px; - height: 90px; -} -.customize-option.skin_zombie2 { - background-image: url(spritesmith-main-3.png); - background-position: -1119px -561px; - width: 60px; - height: 60px; -} -.skin_zombie2_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1094px -637px; - width: 90px; - height: 90px; -} -.customize-option.skin_zombie2_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1119px -652px; - width: 60px; - height: 60px; -} -.skin_zombie_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1094px -728px; - width: 90px; - height: 90px; -} -.customize-option.skin_zombie_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1119px -743px; - width: 60px; - height: 60px; -} -.broad_armor_armoire_gladiatorArmor { - background-image: url(spritesmith-main-3.png); - background-position: -1094px -819px; - width: 90px; - height: 90px; -} -.broad_armor_armoire_goldenToga { - background-image: url(spritesmith-main-3.png); - background-position: -1094px -910px; - width: 90px; - height: 90px; -} -.broad_armor_armoire_hornedIronArmor { - background-image: url(spritesmith-main-3.png); - background-position: -1094px -1001px; - width: 90px; - height: 90px; -} -.broad_armor_armoire_lunarArmor { - background-image: url(spritesmith-main-3.png); - background-position: 0px -1092px; - width: 90px; - height: 90px; -} -.broad_armor_armoire_plagueDoctorOvercoat { - background-image: url(spritesmith-main-3.png); - background-position: -91px -1092px; - width: 90px; - height: 90px; -} -.broad_armor_armoire_rancherRobes { - background-image: url(spritesmith-main-3.png); - background-position: -182px -1092px; - width: 90px; - height: 90px; -} -.eyewear_armoire_plagueDoctorMask { - background-image: url(spritesmith-main-3.png); - background-position: -273px -1092px; - width: 90px; - height: 90px; -} -.head_armoire_blackCat { - background-image: url(spritesmith-main-3.png); - background-position: -364px -1092px; - width: 90px; - height: 90px; -} -.head_armoire_blueHairbow { - background-image: url(spritesmith-main-3.png); - background-position: -455px -1092px; - width: 90px; - height: 90px; -} -.head_armoire_gladiatorHelm { - background-image: url(spritesmith-main-3.png); - background-position: -546px -1092px; - width: 90px; - height: 90px; -} -.head_armoire_goldenLaurels { - background-image: url(spritesmith-main-3.png); - background-position: -637px -1092px; - width: 90px; - height: 90px; -} -.head_armoire_hornedIronHelm { - background-image: url(spritesmith-main-3.png); - background-position: -728px -1092px; - width: 90px; - height: 90px; -} -.head_armoire_lunarCrown { - background-image: url(spritesmith-main-3.png); - background-position: -819px -1092px; - width: 90px; - height: 90px; -} -.head_armoire_orangeCat { - background-image: url(spritesmith-main-3.png); - background-position: -910px -1092px; - width: 90px; - height: 90px; -} -.head_armoire_plagueDoctorHat { - background-image: url(spritesmith-main-3.png); - background-position: -1001px -1092px; - width: 90px; - height: 90px; -} -.head_armoire_rancherHat { - background-image: url(spritesmith-main-3.png); - background-position: -1092px -1092px; - width: 90px; - height: 90px; -} -.head_armoire_redFloppyHat { - background-image: url(spritesmith-main-3.png); - background-position: -1185px 0px; - width: 90px; - height: 90px; -} -.head_armoire_redHairbow { - background-image: url(spritesmith-main-3.png); - background-position: -1185px -91px; - width: 90px; - height: 90px; -} -.head_armoire_royalCrown { - background-image: url(spritesmith-main-3.png); - background-position: -1185px -182px; - width: 90px; - height: 90px; -} -.head_armoire_violetFloppyHat { - background-image: url(spritesmith-main-3.png); - background-position: -1185px -273px; - width: 90px; - height: 90px; -} -.head_armoire_yellowHairbow { - background-image: url(spritesmith-main-3.png); - background-position: -1185px -364px; - width: 90px; - height: 90px; -} -.shield_armoire_gladiatorShield { - background-image: url(spritesmith-main-3.png); - background-position: -1185px -455px; - width: 90px; - height: 90px; -} -.shield_armoire_midnightShield { - background-image: url(spritesmith-main-3.png); - background-position: -1185px -546px; - width: 90px; - height: 90px; -} -.shop_armor_armoire_gladiatorArmor { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -820px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_goldenToga { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -779px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_hornedIronArmor { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -656px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_lunarArmor { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -615px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_plagueDoctorOvercoat { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -574px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_rancherRobes { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -451px; - width: 40px; - height: 40px; -} -.shop_eyewear_armoire_plagueDoctorMask { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -410px; - width: 40px; - height: 40px; -} -.shop_head_armoire_blackCat { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -369px; - width: 40px; - height: 40px; -} -.shop_head_armoire_blueHairbow { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -246px; - width: 40px; - height: 40px; -} -.shop_head_armoire_gladiatorHelm { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -205px; - width: 40px; - height: 40px; -} -.shop_head_armoire_goldenLaurels { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -164px; - width: 40px; - height: 40px; -} -.shop_head_armoire_hornedIronHelm { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -41px; - width: 40px; - height: 40px; -} -.shop_head_armoire_lunarCrown { - background-image: url(spritesmith-main-3.png); - background-position: -1640px 0px; - width: 40px; - height: 40px; -} -.shop_head_armoire_orangeCat { - background-image: url(spritesmith-main-3.png); - background-position: -1599px -1588px; - width: 40px; - height: 40px; -} -.shop_head_armoire_plagueDoctorHat { - background-image: url(spritesmith-main-3.png); - background-position: -1476px -1588px; - width: 40px; - height: 40px; -} -.shop_head_armoire_rancherHat { - background-image: url(spritesmith-main-3.png); - background-position: -1435px -1588px; - width: 40px; - height: 40px; -} -.shop_head_armoire_redFloppyHat { - background-image: url(spritesmith-main-3.png); - background-position: -1394px -1588px; - width: 40px; - height: 40px; -} -.shop_head_armoire_redHairbow { - background-image: url(spritesmith-main-3.png); - background-position: -1271px -1588px; - width: 40px; - height: 40px; -} -.shop_head_armoire_royalCrown { - background-image: url(spritesmith-main-3.png); - background-position: -1230px -1588px; - width: 40px; - height: 40px; -} -.shop_head_armoire_violetFloppyHat { - background-image: url(spritesmith-main-3.png); - background-position: -1107px -1588px; - width: 40px; - height: 40px; -} -.shop_head_armoire_yellowHairbow { - background-image: url(spritesmith-main-3.png); - background-position: -1066px -1588px; - width: 40px; - height: 40px; -} -.shop_shield_armoire_gladiatorShield { - background-image: url(spritesmith-main-3.png); - background-position: -1025px -1588px; - width: 40px; - height: 40px; -} -.shop_shield_armoire_midnightShield { - background-image: url(spritesmith-main-3.png); - background-position: -902px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_basicCrossbow { - background-image: url(spritesmith-main-3.png); - background-position: -861px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_batWand { - background-image: url(spritesmith-main-3.png); - background-position: -820px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_goldWingStaff { - background-image: url(spritesmith-main-3.png); - background-position: -656px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_ironCrook { - background-image: url(spritesmith-main-3.png); - background-position: -615px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_lunarSceptre { - background-image: url(spritesmith-main-3.png); - background-position: -574px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_mythmakerSword { - background-image: url(spritesmith-main-3.png); - background-position: -533px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_rancherLasso { - background-image: url(spritesmith-main-3.png); - background-position: -410px -1588px; - width: 40px; - height: 40px; -} -.slim_armor_armoire_gladiatorArmor { - background-image: url(spritesmith-main-3.png); - background-position: -1276px -910px; - width: 90px; - height: 90px; -} -.slim_armor_armoire_goldenToga { - background-image: url(spritesmith-main-3.png); - background-position: -1276px -1001px; - width: 90px; - height: 90px; -} -.slim_armor_armoire_hornedIronArmor { +.hair_base_9_zombie { background-image: url(spritesmith-main-3.png); background-position: -1276px -1092px; width: 90px; height: 90px; } -.slim_armor_armoire_lunarArmor { +.customize-option.hair_base_9_zombie { + background-image: url(spritesmith-main-3.png); + background-position: -1301px -1107px; + width: 60px; + height: 60px; +} +.hair_beard_1_pblue2 { + background-image: url(spritesmith-main-3.png); + background-position: -1276px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_beard_1_pblue2 { + background-image: url(spritesmith-main-3.png); + background-position: -1301px -743px; + width: 60px; + height: 60px; +} +.hair_beard_1_pgreen2 { background-image: url(spritesmith-main-3.png); background-position: -1276px -1183px; width: 90px; height: 90px; } -.slim_armor_armoire_plagueDoctorOvercoat { +.customize-option.hair_beard_1_pgreen2 { background-image: url(spritesmith-main-3.png); - background-position: -545px -91px; - width: 90px; - height: 90px; + background-position: -1301px -1198px; + width: 60px; + height: 60px; } -.slim_armor_armoire_rancherRobes { +.hair_beard_1_porange2 { background-image: url(spritesmith-main-3.png); background-position: -91px -1274px; width: 90px; height: 90px; } -.weapon_armoire_basicCrossbow { +.customize-option.hair_beard_1_porange2 { + background-image: url(spritesmith-main-3.png); + background-position: -116px -1289px; + width: 60px; + height: 60px; +} +.hair_beard_1_ppink2 { background-image: url(spritesmith-main-3.png); background-position: -182px -1274px; width: 90px; height: 90px; } -.weapon_armoire_batWand { +.customize-option.hair_beard_1_ppink2 { background-image: url(spritesmith-main-3.png); - background-position: -273px -1274px; - width: 90px; - height: 90px; + background-position: -207px -1289px; + width: 60px; + height: 60px; } -.weapon_armoire_goldWingStaff { - background-image: url(spritesmith-main-3.png); - background-position: -364px -1274px; - width: 90px; - height: 90px; -} -.weapon_armoire_ironCrook { - background-image: url(spritesmith-main-3.png); - background-position: -455px -1274px; - width: 90px; - height: 90px; -} -.weapon_armoire_lunarSceptre { +.hair_beard_1_ppurple2 { background-image: url(spritesmith-main-3.png); background-position: -546px -1274px; width: 90px; height: 90px; } -.weapon_armoire_mythmakerSword { +.customize-option.hair_beard_1_ppurple2 { + background-image: url(spritesmith-main-3.png); + background-position: -571px -1289px; + width: 60px; + height: 60px; +} +.hair_beard_1_pyellow2 { background-image: url(spritesmith-main-3.png); background-position: -637px -1274px; width: 90px; height: 90px; } -.weapon_armoire_rancherLasso { +.customize-option.hair_beard_1_pyellow2 { background-image: url(spritesmith-main-3.png); - background-position: -728px -1274px; - width: 90px; - height: 90px; + background-position: -662px -1289px; + width: 60px; + height: 60px; } -.broad_armor_healer_1 { +.hair_beard_2_pblue2 { background-image: url(spritesmith-main-3.png); background-position: -819px -1274px; width: 90px; height: 90px; } -.broad_armor_healer_2 { +.customize-option.hair_beard_2_pblue2 { background-image: url(spritesmith-main-3.png); - background-position: -910px -1274px; - width: 90px; - height: 90px; + background-position: -844px -1289px; + width: 60px; + height: 60px; } -.broad_armor_healer_3 { - background-image: url(spritesmith-main-3.png); - background-position: -1001px -1274px; - width: 90px; - height: 90px; -} -.broad_armor_healer_4 { +.hair_beard_2_pgreen2 { background-image: url(spritesmith-main-3.png); background-position: -1092px -1274px; width: 90px; height: 90px; } -.broad_armor_healer_5 { +.customize-option.hair_beard_2_pgreen2 { + background-image: url(spritesmith-main-3.png); + background-position: -1117px -1289px; + width: 60px; + height: 60px; +} +.hair_beard_2_porange2 { background-image: url(spritesmith-main-3.png); background-position: -1183px -1274px; width: 90px; height: 90px; } -.broad_armor_rogue_1 { +.customize-option.hair_beard_2_porange2 { background-image: url(spritesmith-main-3.png); - background-position: -1274px -1274px; - width: 90px; - height: 90px; + background-position: -1208px -1289px; + width: 60px; + height: 60px; } -.broad_armor_rogue_2 { +.hair_beard_2_ppink2 { background-image: url(spritesmith-main-3.png); background-position: -1367px 0px; width: 90px; height: 90px; } -.broad_armor_rogue_3 { +.customize-option.hair_beard_2_ppink2 { + background-image: url(spritesmith-main-3.png); + background-position: -1392px -15px; + width: 60px; + height: 60px; +} +.hair_beard_2_ppurple2 { background-image: url(spritesmith-main-3.png); background-position: -1367px -91px; width: 90px; height: 90px; } -.broad_armor_rogue_4 { +.customize-option.hair_beard_2_ppurple2 { background-image: url(spritesmith-main-3.png); - background-position: -1367px -182px; - width: 90px; - height: 90px; + background-position: -1392px -106px; + width: 60px; + height: 60px; } -.broad_armor_rogue_5 { - background-image: url(spritesmith-main-3.png); - background-position: -1367px -273px; - width: 90px; - height: 90px; -} -.broad_armor_special_2 { - background-image: url(spritesmith-main-3.png); - background-position: -1367px -364px; - width: 90px; - height: 90px; -} -.broad_armor_special_finnedOceanicArmor { +.hair_beard_2_pyellow2 { background-image: url(spritesmith-main-3.png); background-position: -1367px -455px; width: 90px; height: 90px; } -.broad_armor_warrior_1 { +.customize-option.hair_beard_2_pyellow2 { + background-image: url(spritesmith-main-3.png); + background-position: -1392px -470px; + width: 60px; + height: 60px; +} +.hair_beard_3_pblue2 { background-image: url(spritesmith-main-3.png); background-position: -1367px -546px; width: 90px; height: 90px; } -.broad_armor_warrior_2 { +.customize-option.hair_beard_3_pblue2 { background-image: url(spritesmith-main-3.png); - background-position: -1367px -637px; - width: 90px; - height: 90px; + background-position: -1392px -561px; + width: 60px; + height: 60px; } -.broad_armor_warrior_3 { +.hair_beard_3_pgreen2 { background-image: url(spritesmith-main-3.png); background-position: -1367px -728px; width: 90px; height: 90px; } -.broad_armor_warrior_4 { +.customize-option.hair_beard_3_pgreen2 { + background-image: url(spritesmith-main-3.png); + background-position: -1392px -743px; + width: 60px; + height: 60px; +} +.hair_beard_3_porange2 { background-image: url(spritesmith-main-3.png); background-position: -1367px -819px; width: 90px; height: 90px; } -.broad_armor_warrior_5 { +.customize-option.hair_beard_3_porange2 { background-image: url(spritesmith-main-3.png); - background-position: -1367px -910px; - width: 90px; - height: 90px; + background-position: -1392px -834px; + width: 60px; + height: 60px; } -.broad_armor_wizard_1 { - background-image: url(spritesmith-main-3.png); - background-position: -1367px -1001px; - width: 90px; - height: 90px; -} -.broad_armor_wizard_2 { - background-image: url(spritesmith-main-3.png); - background-position: -1367px -1092px; - width: 90px; - height: 90px; -} -.broad_armor_wizard_3 { +.hair_beard_3_ppink2 { background-image: url(spritesmith-main-3.png); background-position: -1367px -1183px; width: 90px; height: 90px; } -.broad_armor_wizard_4 { +.customize-option.hair_beard_3_ppink2 { + background-image: url(spritesmith-main-3.png); + background-position: -1392px -1198px; + width: 60px; + height: 60px; +} +.hair_beard_3_ppurple2 { background-image: url(spritesmith-main-3.png); background-position: -1367px -1274px; width: 90px; height: 90px; } -.broad_armor_wizard_5 { +.customize-option.hair_beard_3_ppurple2 { background-image: url(spritesmith-main-3.png); - background-position: 0px -1365px; + background-position: -1392px -1289px; + width: 60px; + height: 60px; +} +.hair_beard_3_pyellow2 { + background-image: url(spritesmith-main-3.png); + background-position: -454px -182px; width: 90px; height: 90px; } -.shop_armor_healer_1 { +.customize-option.hair_beard_3_pyellow2 { background-image: url(spritesmith-main-3.png); - background-position: -369px -1588px; + background-position: -479px -197px; + width: 60px; + height: 60px; +} +.hair_mustache_1_pblue2 { + background-image: url(spritesmith-main-3.png); + background-position: -454px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_pblue2 { + background-image: url(spritesmith-main-3.png); + background-position: -479px -288px; + width: 60px; + height: 60px; +} +.hair_mustache_1_pgreen2 { + background-image: url(spritesmith-main-3.png); + background-position: 0px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_pgreen2 { + background-image: url(spritesmith-main-3.png); + background-position: -25px -379px; + width: 60px; + height: 60px; +} +.hair_mustache_1_porange2 { + background-image: url(spritesmith-main-3.png); + background-position: -91px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_porange2 { + background-image: url(spritesmith-main-3.png); + background-position: -116px -379px; + width: 60px; + height: 60px; +} +.hair_mustache_1_ppink2 { + background-image: url(spritesmith-main-3.png); + background-position: -182px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_ppink2 { + background-image: url(spritesmith-main-3.png); + background-position: -207px -379px; + width: 60px; + height: 60px; +} +.hair_mustache_1_ppurple2 { + background-image: url(spritesmith-main-3.png); + background-position: -273px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_ppurple2 { + background-image: url(spritesmith-main-3.png); + background-position: -298px -379px; + width: 60px; + height: 60px; +} +.hair_mustache_1_pyellow2 { + background-image: url(spritesmith-main-3.png); + background-position: -364px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_pyellow2 { + background-image: url(spritesmith-main-3.png); + background-position: -389px -379px; + width: 60px; + height: 60px; +} +.hair_mustache_2_pblue2 { + background-image: url(spritesmith-main-3.png); + background-position: -455px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_2_pblue2 { + background-image: url(spritesmith-main-3.png); + background-position: -480px -379px; + width: 60px; + height: 60px; +} +.hair_mustache_2_pgreen2 { + background-image: url(spritesmith-main-3.png); + background-position: 0px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_2_pgreen2 { + background-image: url(spritesmith-main-3.png); + background-position: -25px -470px; + width: 60px; + height: 60px; +} +.hair_mustache_2_porange2 { + background-image: url(spritesmith-main-3.png); + background-position: -91px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_2_porange2 { + background-image: url(spritesmith-main-3.png); + background-position: -116px -470px; + width: 60px; + height: 60px; +} +.hair_mustache_2_ppink2 { + background-image: url(spritesmith-main-3.png); + background-position: -182px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_2_ppink2 { + background-image: url(spritesmith-main-3.png); + background-position: -207px -470px; + width: 60px; + height: 60px; +} +.hair_mustache_2_ppurple2 { + background-image: url(spritesmith-main-3.png); + background-position: -273px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_2_ppurple2 { + background-image: url(spritesmith-main-3.png); + background-position: -298px -470px; + width: 60px; + height: 60px; +} +.hair_mustache_2_pyellow2 { + background-image: url(spritesmith-main-3.png); + background-position: -364px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_2_pyellow2 { + background-image: url(spritesmith-main-3.png); + background-position: -389px -470px; + width: 60px; + height: 60px; +} +.broad_shirt_black { + background-image: url(spritesmith-main-3.png); + background-position: -455px -455px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_black { + background-image: url(spritesmith-main-3.png); + background-position: -480px -485px; + width: 60px; + height: 60px; +} +.broad_shirt_blue { + background-image: url(spritesmith-main-3.png); + background-position: -548px 0px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_blue { + background-image: url(spritesmith-main-3.png); + background-position: -573px -30px; + width: 60px; + height: 60px; +} +.broad_shirt_convict { + background-image: url(spritesmith-main-3.png); + background-position: -548px -91px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_convict { + background-image: url(spritesmith-main-3.png); + background-position: -573px -121px; + width: 60px; + height: 60px; +} +.broad_shirt_cross { + background-image: url(spritesmith-main-3.png); + background-position: -548px -182px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_cross { + background-image: url(spritesmith-main-3.png); + background-position: -573px -212px; + width: 60px; + height: 60px; +} +.broad_shirt_fire { + background-image: url(spritesmith-main-3.png); + background-position: -548px -273px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_fire { + background-image: url(spritesmith-main-3.png); + background-position: -573px -303px; + width: 60px; + height: 60px; +} +.broad_shirt_green { + background-image: url(spritesmith-main-3.png); + background-position: -548px -364px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_green { + background-image: url(spritesmith-main-3.png); + background-position: -573px -394px; + width: 60px; + height: 60px; +} +.broad_shirt_horizon { + background-image: url(spritesmith-main-3.png); + background-position: -548px -455px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_horizon { + background-image: url(spritesmith-main-3.png); + background-position: -573px -485px; + width: 60px; + height: 60px; +} +.broad_shirt_ocean { + background-image: url(spritesmith-main-3.png); + background-position: 0px -546px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_ocean { + background-image: url(spritesmith-main-3.png); + background-position: -25px -576px; + width: 60px; + height: 60px; +} +.broad_shirt_pink { + background-image: url(spritesmith-main-3.png); + background-position: -91px -546px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_pink { + background-image: url(spritesmith-main-3.png); + background-position: -116px -576px; + width: 60px; + height: 60px; +} +.broad_shirt_purple { + background-image: url(spritesmith-main-3.png); + background-position: -182px -546px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_purple { + background-image: url(spritesmith-main-3.png); + background-position: -207px -576px; + width: 60px; + height: 60px; +} +.broad_shirt_rainbow { + background-image: url(spritesmith-main-3.png); + background-position: -273px -546px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_rainbow { + background-image: url(spritesmith-main-3.png); + background-position: -298px -576px; + width: 60px; + height: 60px; +} +.broad_shirt_redblue { + background-image: url(spritesmith-main-3.png); + background-position: -364px -546px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_redblue { + background-image: url(spritesmith-main-3.png); + background-position: -389px -576px; + width: 60px; + height: 60px; +} +.broad_shirt_thunder { + background-image: url(spritesmith-main-3.png); + background-position: -455px -546px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_thunder { + background-image: url(spritesmith-main-3.png); + background-position: -480px -576px; + width: 60px; + height: 60px; +} +.broad_shirt_tropical { + background-image: url(spritesmith-main-3.png); + background-position: -546px -546px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_tropical { + background-image: url(spritesmith-main-3.png); + background-position: -571px -576px; + width: 60px; + height: 60px; +} +.broad_shirt_white { + background-image: url(spritesmith-main-3.png); + background-position: -639px 0px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_white { + background-image: url(spritesmith-main-3.png); + background-position: -664px -30px; + width: 60px; + height: 60px; +} +.broad_shirt_yellow { + background-image: url(spritesmith-main-3.png); + background-position: -639px -91px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_yellow { + background-image: url(spritesmith-main-3.png); + background-position: -664px -121px; + width: 60px; + height: 60px; +} +.broad_shirt_zombie { + background-image: url(spritesmith-main-3.png); + background-position: -639px -182px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_zombie { + background-image: url(spritesmith-main-3.png); + background-position: -664px -212px; + width: 60px; + height: 60px; +} +.slim_shirt_black { + background-image: url(spritesmith-main-3.png); + background-position: -639px -273px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_black { + background-image: url(spritesmith-main-3.png); + background-position: -664px -303px; + width: 60px; + height: 60px; +} +.slim_shirt_blue { + background-image: url(spritesmith-main-3.png); + background-position: -639px -364px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_blue { + background-image: url(spritesmith-main-3.png); + background-position: -664px -394px; + width: 60px; + height: 60px; +} +.slim_shirt_convict { + background-image: url(spritesmith-main-3.png); + background-position: -639px -455px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_convict { + background-image: url(spritesmith-main-3.png); + background-position: -664px -485px; + width: 60px; + height: 60px; +} +.slim_shirt_cross { + background-image: url(spritesmith-main-3.png); + background-position: -639px -546px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_cross { + background-image: url(spritesmith-main-3.png); + background-position: -664px -576px; + width: 60px; + height: 60px; +} +.slim_shirt_fire { + background-image: url(spritesmith-main-3.png); + background-position: 0px -637px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_fire { + background-image: url(spritesmith-main-3.png); + background-position: -25px -667px; + width: 60px; + height: 60px; +} +.slim_shirt_green { + background-image: url(spritesmith-main-3.png); + background-position: -91px -637px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_green { + background-image: url(spritesmith-main-3.png); + background-position: -116px -667px; + width: 60px; + height: 60px; +} +.slim_shirt_horizon { + background-image: url(spritesmith-main-3.png); + background-position: -182px -637px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_horizon { + background-image: url(spritesmith-main-3.png); + background-position: -207px -667px; + width: 60px; + height: 60px; +} +.slim_shirt_ocean { + background-image: url(spritesmith-main-3.png); + background-position: -273px -637px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_ocean { + background-image: url(spritesmith-main-3.png); + background-position: -298px -667px; + width: 60px; + height: 60px; +} +.slim_shirt_pink { + background-image: url(spritesmith-main-3.png); + background-position: -364px -637px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_pink { + background-image: url(spritesmith-main-3.png); + background-position: -389px -667px; + width: 60px; + height: 60px; +} +.slim_shirt_purple { + background-image: url(spritesmith-main-3.png); + background-position: -455px -637px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_purple { + background-image: url(spritesmith-main-3.png); + background-position: -480px -667px; + width: 60px; + height: 60px; +} +.slim_shirt_rainbow { + background-image: url(spritesmith-main-3.png); + background-position: -546px -637px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_rainbow { + background-image: url(spritesmith-main-3.png); + background-position: -571px -667px; + width: 60px; + height: 60px; +} +.slim_shirt_redblue { + background-image: url(spritesmith-main-3.png); + background-position: -637px -637px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_redblue { + background-image: url(spritesmith-main-3.png); + background-position: -662px -667px; + width: 60px; + height: 60px; +} +.slim_shirt_thunder { + background-image: url(spritesmith-main-3.png); + background-position: -730px 0px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_thunder { + background-image: url(spritesmith-main-3.png); + background-position: -755px -30px; + width: 60px; + height: 60px; +} +.slim_shirt_tropical { + background-image: url(spritesmith-main-3.png); + background-position: -730px -91px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_tropical { + background-image: url(spritesmith-main-3.png); + background-position: -755px -121px; + width: 60px; + height: 60px; +} +.slim_shirt_white { + background-image: url(spritesmith-main-3.png); + background-position: -730px -182px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_white { + background-image: url(spritesmith-main-3.png); + background-position: -755px -212px; + width: 60px; + height: 60px; +} +.slim_shirt_yellow { + background-image: url(spritesmith-main-3.png); + background-position: -730px -273px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_yellow { + background-image: url(spritesmith-main-3.png); + background-position: -755px -303px; + width: 60px; + height: 60px; +} +.slim_shirt_zombie { + background-image: url(spritesmith-main-3.png); + background-position: -730px -364px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_zombie { + background-image: url(spritesmith-main-3.png); + background-position: -755px -394px; + width: 60px; + height: 60px; +} +.skin_0ff591 { + background-image: url(spritesmith-main-3.png); + background-position: -730px -455px; + width: 90px; + height: 90px; +} +.customize-option.skin_0ff591 { + background-image: url(spritesmith-main-3.png); + background-position: -755px -470px; + width: 60px; + height: 60px; +} +.skin_0ff591_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -730px -546px; + width: 90px; + height: 90px; +} +.customize-option.skin_0ff591_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -755px -561px; + width: 60px; + height: 60px; +} +.skin_2b43f6 { + background-image: url(spritesmith-main-3.png); + background-position: -730px -637px; + width: 90px; + height: 90px; +} +.customize-option.skin_2b43f6 { + background-image: url(spritesmith-main-3.png); + background-position: -755px -652px; + width: 60px; + height: 60px; +} +.skin_2b43f6_sleep { + background-image: url(spritesmith-main-3.png); + background-position: 0px -728px; + width: 90px; + height: 90px; +} +.customize-option.skin_2b43f6_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -25px -743px; + width: 60px; + height: 60px; +} +.skin_6bd049 { + background-image: url(spritesmith-main-3.png); + background-position: -91px -728px; + width: 90px; + height: 90px; +} +.customize-option.skin_6bd049 { + background-image: url(spritesmith-main-3.png); + background-position: -116px -743px; + width: 60px; + height: 60px; +} +.skin_6bd049_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -182px -728px; + width: 90px; + height: 90px; +} +.customize-option.skin_6bd049_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -207px -743px; + width: 60px; + height: 60px; +} +.skin_800ed0 { + background-image: url(spritesmith-main-3.png); + background-position: -273px -728px; + width: 90px; + height: 90px; +} +.customize-option.skin_800ed0 { + background-image: url(spritesmith-main-3.png); + background-position: -298px -743px; + width: 60px; + height: 60px; +} +.skin_800ed0_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -364px -728px; + width: 90px; + height: 90px; +} +.customize-option.skin_800ed0_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -389px -743px; + width: 60px; + height: 60px; +} +.skin_915533 { + background-image: url(spritesmith-main-3.png); + background-position: -455px -728px; + width: 90px; + height: 90px; +} +.customize-option.skin_915533 { + background-image: url(spritesmith-main-3.png); + background-position: -480px -743px; + width: 60px; + height: 60px; +} +.skin_915533_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -546px -728px; + width: 90px; + height: 90px; +} +.customize-option.skin_915533_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -571px -743px; + width: 60px; + height: 60px; +} +.skin_98461a { + background-image: url(spritesmith-main-3.png); + background-position: -637px -728px; + width: 90px; + height: 90px; +} +.customize-option.skin_98461a { + background-image: url(spritesmith-main-3.png); + background-position: -662px -743px; + width: 60px; + height: 60px; +} +.skin_98461a_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -728px -728px; + width: 90px; + height: 90px; +} +.customize-option.skin_98461a_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -753px -743px; + width: 60px; + height: 60px; +} +.skin_bear { + background-image: url(spritesmith-main-3.png); + background-position: -821px 0px; + width: 90px; + height: 90px; +} +.customize-option.skin_bear { + background-image: url(spritesmith-main-3.png); + background-position: -846px -15px; + width: 60px; + height: 60px; +} +.skin_bear_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -821px -91px; + width: 90px; + height: 90px; +} +.customize-option.skin_bear_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -846px -106px; + width: 60px; + height: 60px; +} +.skin_c06534 { + background-image: url(spritesmith-main-3.png); + background-position: -821px -182px; + width: 90px; + height: 90px; +} +.customize-option.skin_c06534 { + background-image: url(spritesmith-main-3.png); + background-position: -846px -197px; + width: 60px; + height: 60px; +} +.skin_c06534_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -821px -273px; + width: 90px; + height: 90px; +} +.customize-option.skin_c06534_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -846px -288px; + width: 60px; + height: 60px; +} +.skin_c3e1dc { + background-image: url(spritesmith-main-3.png); + background-position: -821px -364px; + width: 90px; + height: 90px; +} +.customize-option.skin_c3e1dc { + background-image: url(spritesmith-main-3.png); + background-position: -846px -379px; + width: 60px; + height: 60px; +} +.skin_c3e1dc_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -821px -455px; + width: 90px; + height: 90px; +} +.customize-option.skin_c3e1dc_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -846px -470px; + width: 60px; + height: 60px; +} +.skin_cactus { + background-image: url(spritesmith-main-3.png); + background-position: -821px -546px; + width: 90px; + height: 90px; +} +.customize-option.skin_cactus { + background-image: url(spritesmith-main-3.png); + background-position: -846px -561px; + width: 60px; + height: 60px; +} +.skin_cactus_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -821px -637px; + width: 90px; + height: 90px; +} +.customize-option.skin_cactus_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -846px -652px; + width: 60px; + height: 60px; +} +.skin_candycorn { + background-image: url(spritesmith-main-3.png); + background-position: -821px -728px; + width: 90px; + height: 90px; +} +.customize-option.skin_candycorn { + background-image: url(spritesmith-main-3.png); + background-position: -846px -743px; + width: 60px; + height: 60px; +} +.skin_candycorn_sleep { + background-image: url(spritesmith-main-3.png); + background-position: 0px -819px; + width: 90px; + height: 90px; +} +.customize-option.skin_candycorn_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -25px -834px; + width: 60px; + height: 60px; +} +.skin_clownfish { + background-image: url(spritesmith-main-3.png); + background-position: -91px -819px; + width: 90px; + height: 90px; +} +.customize-option.skin_clownfish { + background-image: url(spritesmith-main-3.png); + background-position: -116px -834px; + width: 60px; + height: 60px; +} +.skin_clownfish_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -182px -819px; + width: 90px; + height: 90px; +} +.customize-option.skin_clownfish_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -207px -834px; + width: 60px; + height: 60px; +} +.skin_d7a9f7 { + background-image: url(spritesmith-main-3.png); + background-position: -273px -819px; + width: 90px; + height: 90px; +} +.customize-option.skin_d7a9f7 { + background-image: url(spritesmith-main-3.png); + background-position: -298px -834px; + width: 60px; + height: 60px; +} +.skin_d7a9f7_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -364px -819px; + width: 90px; + height: 90px; +} +.customize-option.skin_d7a9f7_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -389px -834px; + width: 60px; + height: 60px; +} +.skin_ddc994 { + background-image: url(spritesmith-main-3.png); + background-position: -455px -819px; + width: 90px; + height: 90px; +} +.customize-option.skin_ddc994 { + background-image: url(spritesmith-main-3.png); + background-position: -480px -834px; + width: 60px; + height: 60px; +} +.skin_ddc994_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -546px -819px; + width: 90px; + height: 90px; +} +.customize-option.skin_ddc994_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -571px -834px; + width: 60px; + height: 60px; +} +.skin_deepocean { + background-image: url(spritesmith-main-3.png); + background-position: -637px -819px; + width: 90px; + height: 90px; +} +.customize-option.skin_deepocean { + background-image: url(spritesmith-main-3.png); + background-position: -662px -834px; + width: 60px; + height: 60px; +} +.skin_deepocean_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -728px -819px; + width: 90px; + height: 90px; +} +.customize-option.skin_deepocean_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -753px -834px; + width: 60px; + height: 60px; +} +.skin_ea8349 { + background-image: url(spritesmith-main-3.png); + background-position: -819px -819px; + width: 90px; + height: 90px; +} +.customize-option.skin_ea8349 { + background-image: url(spritesmith-main-3.png); + background-position: -844px -834px; + width: 60px; + height: 60px; +} +.skin_ea8349_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -912px 0px; + width: 90px; + height: 90px; +} +.customize-option.skin_ea8349_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -937px -15px; + width: 60px; + height: 60px; +} +.skin_eb052b { + background-image: url(spritesmith-main-3.png); + background-position: -912px -91px; + width: 90px; + height: 90px; +} +.customize-option.skin_eb052b { + background-image: url(spritesmith-main-3.png); + background-position: -937px -106px; + width: 60px; + height: 60px; +} +.skin_eb052b_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -912px -182px; + width: 90px; + height: 90px; +} +.customize-option.skin_eb052b_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -937px -197px; + width: 60px; + height: 60px; +} +.skin_f5a76e { + background-image: url(spritesmith-main-3.png); + background-position: -912px -273px; + width: 90px; + height: 90px; +} +.customize-option.skin_f5a76e { + background-image: url(spritesmith-main-3.png); + background-position: -937px -288px; + width: 60px; + height: 60px; +} +.skin_f5a76e_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -912px -364px; + width: 90px; + height: 90px; +} +.customize-option.skin_f5a76e_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -937px -379px; + width: 60px; + height: 60px; +} +.skin_f5d70f { + background-image: url(spritesmith-main-3.png); + background-position: -912px -455px; + width: 90px; + height: 90px; +} +.customize-option.skin_f5d70f { + background-image: url(spritesmith-main-3.png); + background-position: -937px -470px; + width: 60px; + height: 60px; +} +.skin_f5d70f_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -912px -546px; + width: 90px; + height: 90px; +} +.customize-option.skin_f5d70f_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -937px -561px; + width: 60px; + height: 60px; +} +.skin_f69922 { + background-image: url(spritesmith-main-3.png); + background-position: -912px -637px; + width: 90px; + height: 90px; +} +.customize-option.skin_f69922 { + background-image: url(spritesmith-main-3.png); + background-position: -937px -652px; + width: 60px; + height: 60px; +} +.skin_f69922_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -912px -728px; + width: 90px; + height: 90px; +} +.customize-option.skin_f69922_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -937px -743px; + width: 60px; + height: 60px; +} +.skin_fox { + background-image: url(spritesmith-main-3.png); + background-position: -912px -819px; + width: 90px; + height: 90px; +} +.customize-option.skin_fox { + background-image: url(spritesmith-main-3.png); + background-position: -937px -834px; + width: 60px; + height: 60px; +} +.skin_fox_sleep { + background-image: url(spritesmith-main-3.png); + background-position: 0px -910px; + width: 90px; + height: 90px; +} +.customize-option.skin_fox_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -25px -925px; + width: 60px; + height: 60px; +} +.skin_ghost { + background-image: url(spritesmith-main-3.png); + background-position: -91px -910px; + width: 90px; + height: 90px; +} +.customize-option.skin_ghost { + background-image: url(spritesmith-main-3.png); + background-position: -116px -925px; + width: 60px; + height: 60px; +} +.skin_ghost_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -182px -910px; + width: 90px; + height: 90px; +} +.customize-option.skin_ghost_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -207px -925px; + width: 60px; + height: 60px; +} +.skin_lion { + background-image: url(spritesmith-main-3.png); + background-position: -273px -910px; + width: 90px; + height: 90px; +} +.customize-option.skin_lion { + background-image: url(spritesmith-main-3.png); + background-position: -298px -925px; + width: 60px; + height: 60px; +} +.skin_lion_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -364px -910px; + width: 90px; + height: 90px; +} +.customize-option.skin_lion_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -389px -925px; + width: 60px; + height: 60px; +} +.skin_merblue { + background-image: url(spritesmith-main-3.png); + background-position: -455px -910px; + width: 90px; + height: 90px; +} +.customize-option.skin_merblue { + background-image: url(spritesmith-main-3.png); + background-position: -480px -925px; + width: 60px; + height: 60px; +} +.skin_merblue_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -546px -910px; + width: 90px; + height: 90px; +} +.customize-option.skin_merblue_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -571px -925px; + width: 60px; + height: 60px; +} +.skin_mergold { + background-image: url(spritesmith-main-3.png); + background-position: -637px -910px; + width: 90px; + height: 90px; +} +.customize-option.skin_mergold { + background-image: url(spritesmith-main-3.png); + background-position: -662px -925px; + width: 60px; + height: 60px; +} +.skin_mergold_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -728px -910px; + width: 90px; + height: 90px; +} +.customize-option.skin_mergold_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -753px -925px; + width: 60px; + height: 60px; +} +.skin_mergreen { + background-image: url(spritesmith-main-3.png); + background-position: -819px -910px; + width: 90px; + height: 90px; +} +.customize-option.skin_mergreen { + background-image: url(spritesmith-main-3.png); + background-position: -844px -925px; + width: 60px; + height: 60px; +} +.skin_mergreen_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -910px -910px; + width: 90px; + height: 90px; +} +.customize-option.skin_mergreen_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -935px -925px; + width: 60px; + height: 60px; +} +.skin_merruby { + background-image: url(spritesmith-main-3.png); + background-position: -1003px 0px; + width: 90px; + height: 90px; +} +.customize-option.skin_merruby { + background-image: url(spritesmith-main-3.png); + background-position: -1028px -15px; + width: 60px; + height: 60px; +} +.skin_merruby_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1003px -91px; + width: 90px; + height: 90px; +} +.customize-option.skin_merruby_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1028px -106px; + width: 60px; + height: 60px; +} +.skin_monster { + background-image: url(spritesmith-main-3.png); + background-position: -1003px -182px; + width: 90px; + height: 90px; +} +.customize-option.skin_monster { + background-image: url(spritesmith-main-3.png); + background-position: -1028px -197px; + width: 60px; + height: 60px; +} +.skin_monster_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1003px -273px; + width: 90px; + height: 90px; +} +.customize-option.skin_monster_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1028px -288px; + width: 60px; + height: 60px; +} +.skin_ogre { + background-image: url(spritesmith-main-3.png); + background-position: -1003px -364px; + width: 90px; + height: 90px; +} +.customize-option.skin_ogre { + background-image: url(spritesmith-main-3.png); + background-position: -1028px -379px; + width: 60px; + height: 60px; +} +.skin_ogre_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1003px -455px; + width: 90px; + height: 90px; +} +.customize-option.skin_ogre_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1028px -470px; + width: 60px; + height: 60px; +} +.skin_panda { + background-image: url(spritesmith-main-3.png); + background-position: -1003px -546px; + width: 90px; + height: 90px; +} +.customize-option.skin_panda { + background-image: url(spritesmith-main-3.png); + background-position: -1028px -561px; + width: 60px; + height: 60px; +} +.skin_panda_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1003px -637px; + width: 90px; + height: 90px; +} +.customize-option.skin_panda_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1028px -652px; + width: 60px; + height: 60px; +} +.skin_pastelBlue { + background-image: url(spritesmith-main-3.png); + background-position: -1003px -728px; + width: 90px; + height: 90px; +} +.customize-option.skin_pastelBlue { + background-image: url(spritesmith-main-3.png); + background-position: -1028px -743px; + width: 60px; + height: 60px; +} +.skin_pastelBlue_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1003px -819px; + width: 90px; + height: 90px; +} +.customize-option.skin_pastelBlue_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1028px -834px; + width: 60px; + height: 60px; +} +.skin_pastelGreen { + background-image: url(spritesmith-main-3.png); + background-position: -1003px -910px; + width: 90px; + height: 90px; +} +.customize-option.skin_pastelGreen { + background-image: url(spritesmith-main-3.png); + background-position: -1028px -925px; + width: 60px; + height: 60px; +} +.skin_pastelGreen_sleep { + background-image: url(spritesmith-main-3.png); + background-position: 0px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_pastelGreen_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -25px -1016px; + width: 60px; + height: 60px; +} +.skin_pastelOrange { + background-image: url(spritesmith-main-3.png); + background-position: -91px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_pastelOrange { + background-image: url(spritesmith-main-3.png); + background-position: -116px -1016px; + width: 60px; + height: 60px; +} +.skin_pastelOrange_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -182px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_pastelOrange_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -207px -1016px; + width: 60px; + height: 60px; +} +.skin_pastelPink { + background-image: url(spritesmith-main-3.png); + background-position: -273px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_pastelPink { + background-image: url(spritesmith-main-3.png); + background-position: -298px -1016px; + width: 60px; + height: 60px; +} +.skin_pastelPink_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -364px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_pastelPink_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -389px -1016px; + width: 60px; + height: 60px; +} +.skin_pastelPurple { + background-image: url(spritesmith-main-3.png); + background-position: -455px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_pastelPurple { + background-image: url(spritesmith-main-3.png); + background-position: -480px -1016px; + width: 60px; + height: 60px; +} +.skin_pastelPurple_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -546px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_pastelPurple_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -571px -1016px; + width: 60px; + height: 60px; +} +.skin_pastelRainbowChevron { + background-image: url(spritesmith-main-3.png); + background-position: -637px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_pastelRainbowChevron { + background-image: url(spritesmith-main-3.png); + background-position: -662px -1016px; + width: 60px; + height: 60px; +} +.skin_pastelRainbowChevron_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -728px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_pastelRainbowChevron_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -753px -1016px; + width: 60px; + height: 60px; +} +.skin_pastelRainbowDiagonal { + background-image: url(spritesmith-main-3.png); + background-position: -819px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_pastelRainbowDiagonal { + background-image: url(spritesmith-main-3.png); + background-position: -844px -1016px; + width: 60px; + height: 60px; +} +.skin_pastelRainbowDiagonal_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -910px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_pastelRainbowDiagonal_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -935px -1016px; + width: 60px; + height: 60px; +} +.skin_pastelYellow { + background-image: url(spritesmith-main-3.png); + background-position: -1001px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_pastelYellow { + background-image: url(spritesmith-main-3.png); + background-position: -1026px -1016px; + width: 60px; + height: 60px; +} +.skin_pastelYellow_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1094px 0px; + width: 90px; + height: 90px; +} +.customize-option.skin_pastelYellow_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1119px -15px; + width: 60px; + height: 60px; +} +.skin_pig { + background-image: url(spritesmith-main-3.png); + background-position: -1094px -91px; + width: 90px; + height: 90px; +} +.customize-option.skin_pig { + background-image: url(spritesmith-main-3.png); + background-position: -1119px -106px; + width: 60px; + height: 60px; +} +.skin_pig_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1094px -182px; + width: 90px; + height: 90px; +} +.customize-option.skin_pig_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1119px -197px; + width: 60px; + height: 60px; +} +.skin_pumpkin { + background-image: url(spritesmith-main-3.png); + background-position: -1094px -273px; + width: 90px; + height: 90px; +} +.customize-option.skin_pumpkin { + background-image: url(spritesmith-main-3.png); + background-position: -1119px -288px; + width: 60px; + height: 60px; +} +.skin_pumpkin2 { + background-image: url(spritesmith-main-3.png); + background-position: -1094px -364px; + width: 90px; + height: 90px; +} +.customize-option.skin_pumpkin2 { + background-image: url(spritesmith-main-3.png); + background-position: -1119px -379px; + width: 60px; + height: 60px; +} +.skin_pumpkin2_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1094px -455px; + width: 90px; + height: 90px; +} +.customize-option.skin_pumpkin2_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1119px -470px; + width: 60px; + height: 60px; +} +.skin_pumpkin_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1094px -546px; + width: 90px; + height: 90px; +} +.customize-option.skin_pumpkin_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1119px -561px; + width: 60px; + height: 60px; +} +.skin_rainbow { + background-image: url(spritesmith-main-3.png); + background-position: -1094px -637px; + width: 90px; + height: 90px; +} +.customize-option.skin_rainbow { + background-image: url(spritesmith-main-3.png); + background-position: -1119px -652px; + width: 60px; + height: 60px; +} +.skin_rainbow_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1094px -728px; + width: 90px; + height: 90px; +} +.customize-option.skin_rainbow_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1119px -743px; + width: 60px; + height: 60px; +} +.skin_reptile { + background-image: url(spritesmith-main-3.png); + background-position: -1094px -819px; + width: 90px; + height: 90px; +} +.customize-option.skin_reptile { + background-image: url(spritesmith-main-3.png); + background-position: -1119px -834px; + width: 60px; + height: 60px; +} +.skin_reptile_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1094px -910px; + width: 90px; + height: 90px; +} +.customize-option.skin_reptile_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1119px -925px; + width: 60px; + height: 60px; +} +.skin_shadow { + background-image: url(spritesmith-main-3.png); + background-position: -1094px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_shadow { + background-image: url(spritesmith-main-3.png); + background-position: -1119px -1016px; + width: 60px; + height: 60px; +} +.skin_shadow2 { + background-image: url(spritesmith-main-3.png); + background-position: 0px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_shadow2 { + background-image: url(spritesmith-main-3.png); + background-position: -25px -1107px; + width: 60px; + height: 60px; +} +.skin_shadow2_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -91px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_shadow2_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -116px -1107px; + width: 60px; + height: 60px; +} +.skin_shadow_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -182px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_shadow_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -207px -1107px; + width: 60px; + height: 60px; +} +.skin_shark { + background-image: url(spritesmith-main-3.png); + background-position: -273px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_shark { + background-image: url(spritesmith-main-3.png); + background-position: -298px -1107px; + width: 60px; + height: 60px; +} +.skin_shark_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -364px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_shark_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -389px -1107px; + width: 60px; + height: 60px; +} +.skin_skeleton { + background-image: url(spritesmith-main-3.png); + background-position: -455px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_skeleton { + background-image: url(spritesmith-main-3.png); + background-position: -480px -1107px; + width: 60px; + height: 60px; +} +.skin_skeleton2 { + background-image: url(spritesmith-main-3.png); + background-position: -546px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_skeleton2 { + background-image: url(spritesmith-main-3.png); + background-position: -571px -1107px; + width: 60px; + height: 60px; +} +.skin_skeleton2_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -637px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_skeleton2_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -662px -1107px; + width: 60px; + height: 60px; +} +.skin_skeleton_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -728px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_skeleton_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -753px -1107px; + width: 60px; + height: 60px; +} +.skin_tiger { + background-image: url(spritesmith-main-3.png); + background-position: -819px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_tiger { + background-image: url(spritesmith-main-3.png); + background-position: -844px -1107px; + width: 60px; + height: 60px; +} +.skin_tiger_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -910px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_tiger_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -935px -1107px; + width: 60px; + height: 60px; +} +.skin_transparent { + background-image: url(spritesmith-main-3.png); + background-position: -1001px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_transparent { + background-image: url(spritesmith-main-3.png); + background-position: -1026px -1107px; + width: 60px; + height: 60px; +} +.skin_transparent_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1092px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_transparent_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1117px -1107px; + width: 60px; + height: 60px; +} +.skin_tropicalwater { + background-image: url(spritesmith-main-3.png); + background-position: -1185px 0px; + width: 90px; + height: 90px; +} +.customize-option.skin_tropicalwater { + background-image: url(spritesmith-main-3.png); + background-position: -1210px -15px; + width: 60px; + height: 60px; +} +.skin_tropicalwater_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1185px -91px; + width: 90px; + height: 90px; +} +.customize-option.skin_tropicalwater_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1210px -106px; + width: 60px; + height: 60px; +} +.skin_wolf { + background-image: url(spritesmith-main-3.png); + background-position: -1185px -182px; + width: 90px; + height: 90px; +} +.customize-option.skin_wolf { + background-image: url(spritesmith-main-3.png); + background-position: -1210px -197px; + width: 60px; + height: 60px; +} +.skin_wolf_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1185px -273px; + width: 90px; + height: 90px; +} +.customize-option.skin_wolf_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1210px -288px; + width: 60px; + height: 60px; +} +.skin_zombie { + background-image: url(spritesmith-main-3.png); + background-position: -1185px -364px; + width: 90px; + height: 90px; +} +.customize-option.skin_zombie { + background-image: url(spritesmith-main-3.png); + background-position: -1210px -379px; + width: 60px; + height: 60px; +} +.skin_zombie2 { + background-image: url(spritesmith-main-3.png); + background-position: -1185px -455px; + width: 90px; + height: 90px; +} +.customize-option.skin_zombie2 { + background-image: url(spritesmith-main-3.png); + background-position: -1210px -470px; + width: 60px; + height: 60px; +} +.skin_zombie2_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1185px -546px; + width: 90px; + height: 90px; +} +.customize-option.skin_zombie2_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1210px -561px; + width: 60px; + height: 60px; +} +.skin_zombie_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1185px -637px; + width: 90px; + height: 90px; +} +.customize-option.skin_zombie_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1210px -652px; + width: 60px; + height: 60px; +} +.broad_armor_armoire_crystalCrescentRobes { + background-image: url(spritesmith-main-3.png); + background-position: -1185px -728px; + width: 90px; + height: 90px; +} +.broad_armor_armoire_gladiatorArmor { + background-image: url(spritesmith-main-3.png); + background-position: -1185px -819px; + width: 90px; + height: 90px; +} +.broad_armor_armoire_goldenToga { + background-image: url(spritesmith-main-3.png); + background-position: -1185px -910px; + width: 90px; + height: 90px; +} +.broad_armor_armoire_hornedIronArmor { + background-image: url(spritesmith-main-3.png); + background-position: -1185px -1001px; + width: 90px; + height: 90px; +} +.broad_armor_armoire_lunarArmor { + background-image: url(spritesmith-main-3.png); + background-position: -1185px -1092px; + width: 90px; + height: 90px; +} +.broad_armor_armoire_plagueDoctorOvercoat { + background-image: url(spritesmith-main-3.png); + background-position: 0px -1183px; + width: 90px; + height: 90px; +} +.broad_armor_armoire_rancherRobes { + background-image: url(spritesmith-main-3.png); + background-position: -91px -1183px; + width: 90px; + height: 90px; +} +.broad_armor_armoire_royalRobes { + background-image: url(spritesmith-main-3.png); + background-position: -182px -1183px; + width: 90px; + height: 90px; +} +.broad_armor_armoire_shepherdRobes { + background-image: url(spritesmith-main-3.png); + background-position: -273px -1183px; + width: 90px; + height: 90px; +} +.eyewear_armoire_plagueDoctorMask { + background-image: url(spritesmith-main-3.png); + background-position: -364px -1183px; + width: 90px; + height: 90px; +} +.head_armoire_blackCat { + background-image: url(spritesmith-main-3.png); + background-position: -455px -1183px; + width: 90px; + height: 90px; +} +.head_armoire_blueFloppyHat { + background-image: url(spritesmith-main-3.png); + background-position: -546px -1183px; + width: 90px; + height: 90px; +} +.head_armoire_blueHairbow { + background-image: url(spritesmith-main-3.png); + background-position: -637px -1183px; + width: 90px; + height: 90px; +} +.head_armoire_crystalCrescentHat { + background-image: url(spritesmith-main-3.png); + background-position: -728px -1183px; + width: 90px; + height: 90px; +} +.head_armoire_gladiatorHelm { + background-image: url(spritesmith-main-3.png); + background-position: -819px -1183px; + width: 90px; + height: 90px; +} +.head_armoire_goldenLaurels { + background-image: url(spritesmith-main-3.png); + background-position: -910px -1183px; + width: 90px; + height: 90px; +} +.head_armoire_hornedIronHelm { + background-image: url(spritesmith-main-3.png); + background-position: -1001px -1183px; + width: 90px; + height: 90px; +} +.head_armoire_lunarCrown { + background-image: url(spritesmith-main-3.png); + background-position: -1092px -1183px; + width: 90px; + height: 90px; +} +.head_armoire_orangeCat { + background-image: url(spritesmith-main-3.png); + background-position: -1183px -1183px; + width: 90px; + height: 90px; +} +.head_armoire_plagueDoctorHat { + background-image: url(spritesmith-main-3.png); + background-position: -1276px 0px; + width: 90px; + height: 90px; +} +.head_armoire_rancherHat { + background-image: url(spritesmith-main-3.png); + background-position: -1276px -91px; + width: 90px; + height: 90px; +} +.head_armoire_redFloppyHat { + background-image: url(spritesmith-main-3.png); + background-position: -1276px -182px; + width: 90px; + height: 90px; +} +.head_armoire_redHairbow { + background-image: url(spritesmith-main-3.png); + background-position: -1276px -273px; + width: 90px; + height: 90px; +} +.head_armoire_royalCrown { + background-image: url(spritesmith-main-3.png); + background-position: -1276px -364px; + width: 90px; + height: 90px; +} +.head_armoire_shepherdHeaddress { + background-image: url(spritesmith-main-3.png); + background-position: -1276px -455px; + width: 90px; + height: 90px; +} +.head_armoire_violetFloppyHat { + background-image: url(spritesmith-main-3.png); + background-position: -1276px -546px; + width: 90px; + height: 90px; +} +.head_armoire_yellowHairbow { + background-image: url(spritesmith-main-3.png); + background-position: -1276px -637px; + width: 90px; + height: 90px; +} +.shield_armoire_gladiatorShield { + background-image: url(spritesmith-main-3.png); + background-position: -454px -91px; + width: 90px; + height: 90px; +} +.shield_armoire_midnightShield { + background-image: url(spritesmith-main-3.png); + background-position: -1276px -819px; + width: 90px; + height: 90px; +} +.shield_armoire_royalCane { + background-image: url(spritesmith-main-3.png); + background-position: -1276px -910px; + width: 90px; + height: 90px; +} +.shop_armor_armoire_crystalCrescentRobes { + background-image: url(spritesmith-main-3.png); + background-position: -1640px -902px; width: 40px; height: 40px; } -.shop_armor_healer_2 { +.shop_armor_armoire_gladiatorArmor { background-image: url(spritesmith-main-3.png); - background-position: -454px -291px; + background-position: -1640px -861px; width: 40px; height: 40px; } -.shop_armor_healer_3 { +.shop_armor_armoire_goldenToga { background-image: url(spritesmith-main-3.png); - background-position: -287px -1588px; + background-position: -1640px -820px; width: 40px; height: 40px; } -.shop_armor_healer_4 { +.shop_armor_armoire_hornedIronArmor { background-image: url(spritesmith-main-3.png); - background-position: -246px -1588px; + background-position: -1640px -779px; width: 40px; height: 40px; } -.shop_armor_healer_5 { +.shop_armor_armoire_lunarArmor { background-image: url(spritesmith-main-3.png); - background-position: -205px -1588px; + background-position: -1640px -738px; width: 40px; height: 40px; } -.shop_armor_rogue_1 { +.shop_armor_armoire_plagueDoctorOvercoat { background-image: url(spritesmith-main-3.png); - background-position: -164px -1588px; + background-position: -1640px -697px; width: 40px; height: 40px; } -.shop_armor_rogue_2 { +.shop_armor_armoire_rancherRobes { background-image: url(spritesmith-main-3.png); - background-position: -123px -1588px; + background-position: -1640px -656px; width: 40px; height: 40px; } -.shop_armor_rogue_3 { +.shop_armor_armoire_royalRobes { background-image: url(spritesmith-main-3.png); - background-position: -82px -1588px; + background-position: -1640px -615px; width: 40px; height: 40px; } -.shop_armor_rogue_4 { +.shop_armor_armoire_shepherdRobes { background-image: url(spritesmith-main-3.png); - background-position: -41px -1588px; + background-position: -1640px -574px; width: 40px; height: 40px; } -.shop_armor_rogue_5 { +.shop_eyewear_armoire_plagueDoctorMask { background-image: url(spritesmith-main-3.png); - background-position: 0px -1588px; + background-position: -1640px -533px; width: 40px; height: 40px; } -.shop_armor_special_0 { +.shop_head_armoire_blackCat { background-image: url(spritesmith-main-3.png); - background-position: -1599px -1547px; + background-position: -1640px -492px; width: 40px; height: 40px; } -.shop_armor_special_1 { +.shop_head_armoire_blueFloppyHat { background-image: url(spritesmith-main-3.png); - background-position: -1558px -1547px; + background-position: -838px -1588px; width: 40px; height: 40px; } -.shop_armor_special_2 { +.shop_head_armoire_blueHairbow { background-image: url(spritesmith-main-3.png); - background-position: -1517px -1547px; + background-position: -797px -1588px; width: 40px; height: 40px; } -.shop_armor_special_finnedOceanicArmor { +.shop_head_armoire_crystalCrescentHat { background-image: url(spritesmith-main-3.png); - background-position: -1476px -1547px; + background-position: -756px -1588px; width: 40px; height: 40px; } -.shop_armor_warrior_1 { +.shop_head_armoire_gladiatorHelm { background-image: url(spritesmith-main-3.png); - background-position: -1435px -1547px; + background-position: -715px -1588px; width: 40px; height: 40px; } -.shop_armor_warrior_2 { +.shop_head_armoire_goldenLaurels { background-image: url(spritesmith-main-3.png); - background-position: -1394px -1547px; + background-position: -674px -1588px; width: 40px; height: 40px; } -.shop_armor_warrior_3 { +.shop_head_armoire_hornedIronHelm { background-image: url(spritesmith-main-3.png); - background-position: -1353px -1547px; + background-position: -633px -1588px; width: 40px; height: 40px; } -.shop_armor_warrior_4 { +.shop_head_armoire_lunarCrown { background-image: url(spritesmith-main-3.png); - background-position: -82px -1547px; + background-position: -1640px -943px; width: 40px; height: 40px; } -.shop_armor_warrior_5 { +.shop_head_armoire_orangeCat { background-image: url(spritesmith-main-3.png); - background-position: -41px -1547px; + background-position: -551px -1588px; width: 40px; height: 40px; } -.shop_armor_wizard_1 { +.shop_head_armoire_plagueDoctorHat { background-image: url(spritesmith-main-3.png); - background-position: 0px -1547px; + background-position: -510px -1588px; width: 40px; height: 40px; } -.shop_armor_wizard_2 { +.shop_head_armoire_rancherHat { background-image: url(spritesmith-main-3.png); - background-position: -470px -405px; + background-position: -469px -1588px; width: 40px; height: 40px; } -.shop_armor_wizard_3 { +.shop_head_armoire_redFloppyHat { background-image: url(spritesmith-main-3.png); - background-position: -470px -364px; + background-position: -428px -1588px; width: 40px; height: 40px; } -.shop_armor_wizard_4 { +.shop_head_armoire_redHairbow { background-image: url(spritesmith-main-3.png); - background-position: -400px -314px; + background-position: -387px -1588px; width: 40px; height: 40px; } -.shop_armor_wizard_5 { +.shop_head_armoire_royalCrown { background-image: url(spritesmith-main-3.png); - background-position: -400px -273px; + background-position: -346px -1588px; width: 40px; height: 40px; } -.slim_armor_healer_1 { +.shop_head_armoire_shepherdHeaddress { + background-image: url(spritesmith-main-3.png); + background-position: -305px -1588px; + width: 40px; + height: 40px; +} +.shop_head_armoire_violetFloppyHat { + background-image: url(spritesmith-main-3.png); + background-position: -264px -1588px; + width: 40px; + height: 40px; +} +.shop_head_armoire_yellowHairbow { + background-image: url(spritesmith-main-3.png); + background-position: -223px -1588px; + width: 40px; + height: 40px; +} +.shop_shield_armoire_gladiatorShield { + background-image: url(spritesmith-main-3.png); + background-position: -182px -1588px; + width: 40px; + height: 40px; +} +.shop_shield_armoire_midnightShield { + background-image: url(spritesmith-main-3.png); + background-position: -1576px -1547px; + width: 40px; + height: 40px; +} +.shop_shield_armoire_royalCane { + background-image: url(spritesmith-main-3.png); + background-position: -1535px -1547px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_basicCrossbow { + background-image: url(spritesmith-main-3.png); + background-position: -1494px -1547px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_batWand { + background-image: url(spritesmith-main-3.png); + background-position: -1453px -1547px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_blueLongbow { + background-image: url(spritesmith-main-3.png); + background-position: -1412px -1547px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_crystalCrescentStaff { + background-image: url(spritesmith-main-3.png); + background-position: -1371px -1547px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_goldWingStaff { + background-image: url(spritesmith-main-3.png); + background-position: -1330px -1547px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_ironCrook { + background-image: url(spritesmith-main-3.png); + background-position: -1207px -1547px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_lunarSceptre { + background-image: url(spritesmith-main-3.png); + background-position: -1166px -1547px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_mythmakerSword { + background-image: url(spritesmith-main-3.png); + background-position: -1125px -1547px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_rancherLasso { + background-image: url(spritesmith-main-3.png); + background-position: -1084px -1547px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_shepherdsCrook { + background-image: url(spritesmith-main-3.png); + background-position: -1043px -1547px; + width: 40px; + height: 40px; +} +.slim_armor_armoire_crystalCrescentRobes { + background-image: url(spritesmith-main-3.png); + background-position: -637px -1365px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_gladiatorArmor { + background-image: url(spritesmith-main-3.png); + background-position: -728px -1365px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_goldenToga { + background-image: url(spritesmith-main-3.png); + background-position: -819px -1365px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_hornedIronArmor { + background-image: url(spritesmith-main-3.png); + background-position: -910px -1365px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_lunarArmor { + background-image: url(spritesmith-main-3.png); + background-position: -1001px -1365px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_plagueDoctorOvercoat { + background-image: url(spritesmith-main-3.png); + background-position: -1092px -1365px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_rancherRobes { + background-image: url(spritesmith-main-3.png); + background-position: -1183px -1365px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_royalRobes { + background-image: url(spritesmith-main-3.png); + background-position: -1274px -1365px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_shepherdRobes { + background-image: url(spritesmith-main-3.png); + background-position: -1365px -1365px; + width: 90px; + height: 90px; +} +.weapon_armoire_basicCrossbow { + background-image: url(spritesmith-main-3.png); + background-position: -1458px 0px; + width: 90px; + height: 90px; +} +.weapon_armoire_batWand { + background-image: url(spritesmith-main-3.png); + background-position: -1458px -91px; + width: 90px; + height: 90px; +} +.weapon_armoire_blueLongbow { + background-image: url(spritesmith-main-3.png); + background-position: -1458px -182px; + width: 90px; + height: 90px; +} +.weapon_armoire_crystalCrescentStaff { + background-image: url(spritesmith-main-3.png); + background-position: -1458px -273px; + width: 90px; + height: 90px; +} +.weapon_armoire_goldWingStaff { + background-image: url(spritesmith-main-3.png); + background-position: -1458px -364px; + width: 90px; + height: 90px; +} +.weapon_armoire_ironCrook { + background-image: url(spritesmith-main-3.png); + background-position: -1458px -455px; + width: 90px; + height: 90px; +} +.weapon_armoire_lunarSceptre { + background-image: url(spritesmith-main-3.png); + background-position: -1458px -546px; + width: 90px; + height: 90px; +} +.weapon_armoire_mythmakerSword { + background-image: url(spritesmith-main-3.png); + background-position: -1458px -637px; + width: 90px; + height: 90px; +} +.weapon_armoire_rancherLasso { + background-image: url(spritesmith-main-3.png); + background-position: -1458px -728px; + width: 90px; + height: 90px; +} +.weapon_armoire_shepherdsCrook { background-image: url(spritesmith-main-3.png); background-position: -1458px -819px; width: 90px; height: 90px; } -.slim_armor_healer_2 { +.broad_armor_healer_1 { background-image: url(spritesmith-main-3.png); background-position: -1458px -910px; width: 90px; height: 90px; } -.slim_armor_healer_3 { +.broad_armor_healer_2 { background-image: url(spritesmith-main-3.png); background-position: -1458px -1001px; width: 90px; height: 90px; } -.slim_armor_healer_4 { +.broad_armor_healer_3 { background-image: url(spritesmith-main-3.png); background-position: -1458px -1092px; width: 90px; height: 90px; } -.slim_armor_healer_5 { +.broad_armor_healer_4 { background-image: url(spritesmith-main-3.png); background-position: -1458px -1183px; width: 90px; height: 90px; } -.slim_armor_rogue_1 { +.broad_armor_healer_5 { background-image: url(spritesmith-main-3.png); background-position: -1458px -1274px; width: 90px; height: 90px; } -.slim_armor_rogue_2 { +.broad_armor_rogue_1 { background-image: url(spritesmith-main-3.png); background-position: -1458px -1365px; width: 90px; height: 90px; } -.slim_armor_rogue_3 { +.broad_armor_rogue_2 { background-image: url(spritesmith-main-3.png); background-position: 0px -1456px; width: 90px; height: 90px; } -.slim_armor_rogue_4 { +.broad_armor_rogue_3 { background-image: url(spritesmith-main-3.png); background-position: -91px -1456px; width: 90px; height: 90px; } -.slim_armor_rogue_5 { +.broad_armor_rogue_4 { background-image: url(spritesmith-main-3.png); background-position: -182px -1456px; width: 90px; height: 90px; } -.slim_armor_special_2 { +.broad_armor_rogue_5 { background-image: url(spritesmith-main-3.png); background-position: -273px -1456px; width: 90px; height: 90px; } -.slim_armor_special_finnedOceanicArmor { +.broad_armor_special_2 { background-image: url(spritesmith-main-3.png); background-position: -364px -1456px; width: 90px; height: 90px; } -.slim_armor_warrior_1 { +.broad_armor_special_finnedOceanicArmor { background-image: url(spritesmith-main-3.png); background-position: -455px -1456px; width: 90px; height: 90px; } -.slim_armor_warrior_2 { +.broad_armor_warrior_1 { background-image: url(spritesmith-main-3.png); background-position: -546px -1456px; width: 90px; height: 90px; } -.slim_armor_warrior_3 { +.broad_armor_warrior_2 { background-image: url(spritesmith-main-3.png); background-position: -637px -1456px; width: 90px; height: 90px; } -.slim_armor_warrior_4 { +.broad_armor_warrior_3 { background-image: url(spritesmith-main-3.png); background-position: -728px -1456px; width: 90px; height: 90px; } -.slim_armor_warrior_5 { +.broad_armor_warrior_4 { background-image: url(spritesmith-main-3.png); background-position: -819px -1456px; width: 90px; height: 90px; } -.slim_armor_wizard_1 { +.broad_armor_warrior_5 { background-image: url(spritesmith-main-3.png); background-position: -910px -1456px; width: 90px; height: 90px; } -.slim_armor_wizard_2 { +.broad_armor_wizard_1 { background-image: url(spritesmith-main-3.png); background-position: -1001px -1456px; width: 90px; height: 90px; } -.slim_armor_wizard_3 { +.broad_armor_wizard_2 { background-image: url(spritesmith-main-3.png); background-position: -1092px -1456px; width: 90px; height: 90px; } -.slim_armor_wizard_4 { +.broad_armor_wizard_3 { background-image: url(spritesmith-main-3.png); background-position: -1183px -1456px; width: 90px; height: 90px; } -.slim_armor_wizard_5 { +.broad_armor_wizard_4 { background-image: url(spritesmith-main-3.png); background-position: -1274px -1456px; width: 90px; height: 90px; } -.broad_armor_special_birthday { +.broad_armor_wizard_5 { background-image: url(spritesmith-main-3.png); background-position: -1365px -1456px; width: 90px; height: 90px; } -.broad_armor_special_birthday2015 { +.shop_armor_healer_1 { background-image: url(spritesmith-main-3.png); - background-position: -1456px -1456px; - width: 90px; - height: 90px; -} -.shop_armor_special_birthday { - background-image: url(spritesmith-main-3.png); - background-position: -328px -1588px; + background-position: -1002px -1547px; width: 40px; height: 40px; } -.shop_armor_special_birthday2015 { +.shop_armor_healer_2 { background-image: url(spritesmith-main-3.png); - background-position: -495px -291px; + background-position: -961px -1547px; width: 40px; height: 40px; } -.slim_armor_special_birthday { +.shop_armor_healer_3 { background-image: url(spritesmith-main-3.png); - background-position: -1549px -182px; + background-position: -920px -1547px; + width: 40px; + height: 40px; +} +.shop_armor_healer_4 { + background-image: url(spritesmith-main-3.png); + background-position: -879px -1547px; + width: 40px; + height: 40px; +} +.shop_armor_healer_5 { + background-image: url(spritesmith-main-3.png); + background-position: -838px -1547px; + width: 40px; + height: 40px; +} +.shop_armor_rogue_1 { + background-image: url(spritesmith-main-3.png); + background-position: -797px -1547px; + width: 40px; + height: 40px; +} +.shop_armor_rogue_2 { + background-image: url(spritesmith-main-3.png); + background-position: -756px -1547px; + width: 40px; + height: 40px; +} +.shop_armor_rogue_3 { + background-image: url(spritesmith-main-3.png); + background-position: -715px -1547px; + width: 40px; + height: 40px; +} +.shop_armor_rogue_4 { + background-image: url(spritesmith-main-3.png); + background-position: -674px -1547px; + width: 40px; + height: 40px; +} +.shop_armor_rogue_5 { + background-image: url(spritesmith-main-3.png); + background-position: -633px -1547px; + width: 40px; + height: 40px; +} +.shop_armor_special_0 { + background-image: url(spritesmith-main-3.png); + background-position: -592px -1547px; + width: 40px; + height: 40px; +} +.shop_armor_special_1 { + background-image: url(spritesmith-main-3.png); + background-position: -551px -1547px; + width: 40px; + height: 40px; +} +.shop_armor_special_2 { + background-image: url(spritesmith-main-3.png); + background-position: -510px -1547px; + width: 40px; + height: 40px; +} +.shop_armor_special_finnedOceanicArmor { + background-image: url(spritesmith-main-3.png); + background-position: -469px -1547px; + width: 40px; + height: 40px; +} +.shop_armor_warrior_1 { + background-image: url(spritesmith-main-3.png); + background-position: -428px -1547px; + width: 40px; + height: 40px; +} +.shop_armor_warrior_2 { + background-image: url(spritesmith-main-3.png); + background-position: -387px -1547px; + width: 40px; + height: 40px; +} +.shop_armor_warrior_3 { + background-image: url(spritesmith-main-3.png); + background-position: -346px -1547px; + width: 40px; + height: 40px; +} +.shop_armor_warrior_4 { + background-image: url(spritesmith-main-3.png); + background-position: -305px -1547px; + width: 40px; + height: 40px; +} +.shop_armor_warrior_5 { + background-image: url(spritesmith-main-3.png); + background-position: -264px -1547px; + width: 40px; + height: 40px; +} +.shop_armor_wizard_1 { + background-image: url(spritesmith-main-3.png); + background-position: -376px -273px; + width: 40px; + height: 40px; +} +.shop_armor_wizard_2 { + background-image: url(spritesmith-main-3.png); + background-position: -592px -1588px; + width: 40px; + height: 40px; +} +.shop_armor_wizard_3 { + background-image: url(spritesmith-main-3.png); + background-position: -376px -314px; + width: 40px; + height: 40px; +} +.shop_armor_wizard_4 { + background-image: url(spritesmith-main-3.png); + background-position: -182px -1547px; + width: 40px; + height: 40px; +} +.shop_armor_wizard_5 { + background-image: url(spritesmith-main-3.png); + background-position: -223px -1547px; + width: 40px; + height: 40px; +} +.slim_armor_healer_1 { + background-image: url(spritesmith-main-3.png); + background-position: 0px -1547px; width: 90px; height: 90px; } -.slim_armor_special_birthday2015 { +.slim_armor_healer_2 { background-image: url(spritesmith-main-3.png); - background-position: -1549px -273px; + background-position: -1549px -1456px; width: 90px; height: 90px; } -.broad_armor_special_fall2015Healer { - background-image: url(spritesmith-main-3.png); - background-position: -212px -273px; - width: 93px; - height: 90px; -} -.broad_armor_special_fall2015Mage { - background-image: url(spritesmith-main-3.png); - background-position: 0px -273px; - width: 105px; - height: 90px; -} -.broad_armor_special_fall2015Rogue { - background-image: url(spritesmith-main-3.png); - background-position: -1549px -546px; - width: 90px; - height: 90px; -} -.broad_armor_special_fall2015Warrior { - background-image: url(spritesmith-main-3.png); - background-position: -1549px -637px; - width: 90px; - height: 90px; -} -.broad_armor_special_fallHealer { - background-image: url(spritesmith-main-3.png); - background-position: -1549px -728px; - width: 90px; - height: 90px; -} -.broad_armor_special_fallMage { - background-image: url(spritesmith-main-3.png); - background-position: 0px 0px; - width: 120px; - height: 90px; -} -.broad_armor_special_fallRogue { - background-image: url(spritesmith-main-3.png); - background-position: -242px -91px; - width: 105px; - height: 90px; -} -.broad_armor_special_fallWarrior { - background-image: url(spritesmith-main-3.png); - background-position: -1549px -1001px; - width: 90px; - height: 90px; -} -.head_special_fall2015Healer { - background-image: url(spritesmith-main-3.png); - background-position: -545px 0px; - width: 93px; - height: 90px; -} -.head_special_fall2015Mage { - background-image: url(spritesmith-main-3.png); - background-position: -212px -182px; - width: 105px; - height: 90px; -} -.head_special_fall2015Rogue { - background-image: url(spritesmith-main-3.png); - background-position: -1549px -1274px; - width: 90px; - height: 90px; -} -.head_special_fall2015Warrior { +.slim_armor_healer_3 { background-image: url(spritesmith-main-3.png); background-position: -1549px -1365px; width: 90px; height: 90px; } +.slim_armor_healer_4 { + background-image: url(spritesmith-main-3.png); + background-position: -1549px -1274px; + width: 90px; + height: 90px; +} +.slim_armor_healer_5 { + background-image: url(spritesmith-main-3.png); + background-position: -1549px -1183px; + width: 90px; + height: 90px; +} +.slim_armor_rogue_1 { + background-image: url(spritesmith-main-3.png); + background-position: -1549px -1092px; + width: 90px; + height: 90px; +} +.slim_armor_rogue_2 { + background-image: url(spritesmith-main-3.png); + background-position: -1549px -1001px; + width: 90px; + height: 90px; +} +.slim_armor_rogue_3 { + background-image: url(spritesmith-main-3.png); + background-position: -1549px -910px; + width: 90px; + height: 90px; +} +.slim_armor_rogue_4 { + background-image: url(spritesmith-main-3.png); + background-position: -1549px -819px; + width: 90px; + height: 90px; +} +.slim_armor_rogue_5 { + background-image: url(spritesmith-main-3.png); + background-position: -1549px -728px; + width: 90px; + height: 90px; +} +.slim_armor_special_2 { + background-image: url(spritesmith-main-3.png); + background-position: -1549px -637px; + width: 90px; + height: 90px; +} +.slim_armor_special_finnedOceanicArmor { + background-image: url(spritesmith-main-3.png); + background-position: -1549px -546px; + width: 90px; + height: 90px; +} +.slim_armor_warrior_1 { + background-image: url(spritesmith-main-3.png); + background-position: -1549px -455px; + width: 90px; + height: 90px; +} +.slim_armor_warrior_2 { + background-image: url(spritesmith-main-3.png); + background-position: -1549px -364px; + width: 90px; + height: 90px; +} +.slim_armor_warrior_3 { + background-image: url(spritesmith-main-3.png); + background-position: -1549px -273px; + width: 90px; + height: 90px; +} +.slim_armor_warrior_4 { + background-image: url(spritesmith-main-3.png); + background-position: -1549px -182px; + width: 90px; + height: 90px; +} +.slim_armor_warrior_5 { + background-image: url(spritesmith-main-3.png); + background-position: -1549px -91px; + width: 90px; + height: 90px; +} +.slim_armor_wizard_1 { + background-image: url(spritesmith-main-3.png); + background-position: -1549px 0px; + width: 90px; + height: 90px; +} +.slim_armor_wizard_2 { + background-image: url(spritesmith-main-3.png); + background-position: -1456px -1456px; + width: 90px; + height: 90px; +} +.slim_armor_wizard_3 { + background-image: url(spritesmith-main-3.png); + background-position: -546px -1365px; + width: 90px; + height: 90px; +} +.slim_armor_wizard_4 { + background-image: url(spritesmith-main-3.png); + background-position: -455px -1365px; + width: 90px; + height: 90px; +} +.slim_armor_wizard_5 { + background-image: url(spritesmith-main-3.png); + background-position: -364px -1365px; + width: 90px; + height: 90px; +} +.broad_armor_special_birthday { + background-image: url(spritesmith-main-3.png); + background-position: -273px -1365px; + width: 90px; + height: 90px; +} +.broad_armor_special_birthday2015 { + background-image: url(spritesmith-main-3.png); + background-position: -182px -1365px; + width: 90px; + height: 90px; +} +.shop_armor_special_birthday { + background-image: url(spritesmith-main-3.png); + background-position: -1248px -1547px; + width: 40px; + height: 40px; +} +.shop_armor_special_birthday2015 { + background-image: url(spritesmith-main-3.png); + background-position: -1289px -1547px; + width: 40px; + height: 40px; +} +.slim_armor_special_birthday { + background-image: url(spritesmith-main-3.png); + background-position: -91px -1365px; + width: 90px; + height: 90px; +} +.slim_armor_special_birthday2015 { + background-image: url(spritesmith-main-3.png); + background-position: 0px -1365px; + width: 90px; + height: 90px; +} +.broad_armor_special_fall2015Healer { + background-image: url(spritesmith-main-3.png); + background-position: -282px -273px; + width: 93px; + height: 90px; +} +.broad_armor_special_fall2015Mage { + background-image: url(spritesmith-main-3.png); + background-position: -212px -182px; + width: 105px; + height: 90px; +} +.broad_armor_special_fall2015Rogue { + background-image: url(spritesmith-main-3.png); + background-position: -1367px -1092px; + width: 90px; + height: 90px; +} +.broad_armor_special_fall2015Warrior { + background-image: url(spritesmith-main-3.png); + background-position: -1367px -1001px; + width: 90px; + height: 90px; +} +.broad_armor_special_fallHealer { + background-image: url(spritesmith-main-3.png); + background-position: -1367px -910px; + width: 90px; + height: 90px; +} +.broad_armor_special_fallMage { + background-image: url(spritesmith-main-3.png); + background-position: 0px -91px; + width: 120px; + height: 90px; +} +.broad_armor_special_fallRogue { + background-image: url(spritesmith-main-3.png); + background-position: -348px -91px; + width: 105px; + height: 90px; +} +.broad_armor_special_fallWarrior { + background-image: url(spritesmith-main-3.png); + background-position: -1367px -637px; + width: 90px; + height: 90px; +} +.head_special_fall2015Healer { + background-image: url(spritesmith-main-3.png); + background-position: -94px -273px; + width: 93px; + height: 90px; +} +.head_special_fall2015Mage { + background-image: url(spritesmith-main-3.png); + background-position: -348px 0px; + width: 105px; + height: 90px; +} +.head_special_fall2015Rogue { + background-image: url(spritesmith-main-3.png); + background-position: -1367px -364px; + width: 90px; + height: 90px; +} +.head_special_fall2015Warrior { + background-image: url(spritesmith-main-3.png); + background-position: -1367px -273px; + width: 90px; + height: 90px; +} .head_special_fallHealer { background-image: url(spritesmith-main-3.png); - background-position: -1549px -1456px; + background-position: -1367px -182px; width: 90px; height: 90px; } @@ -2688,649 +3138,301 @@ } .head_special_fallRogue { background-image: url(spritesmith-main-3.png); - background-position: 0px -182px; + background-position: -106px -182px; width: 105px; height: 90px; } .head_special_fallWarrior { background-image: url(spritesmith-main-3.png); - background-position: -1458px -728px; + background-position: -1274px -1274px; width: 90px; height: 90px; } .shield_special_fall2015Healer { background-image: url(spritesmith-main-3.png); - background-position: -188px -364px; + background-position: 0px -273px; width: 93px; height: 90px; } .shield_special_fall2015Rogue { background-image: url(spritesmith-main-3.png); - background-position: -348px -91px; + background-position: -242px -91px; width: 105px; height: 90px; } .shield_special_fall2015Warrior { background-image: url(spritesmith-main-3.png); - background-position: -1458px -455px; + background-position: -1001px -1274px; width: 90px; height: 90px; } .shield_special_fallHealer { background-image: url(spritesmith-main-3.png); - background-position: -1458px -364px; + background-position: -910px -1274px; width: 90px; height: 90px; } .shield_special_fallRogue { background-image: url(spritesmith-main-3.png); - background-position: -106px -273px; + background-position: -242px 0px; width: 105px; height: 90px; } .shield_special_fallWarrior { background-image: url(spritesmith-main-3.png); - background-position: -1458px -182px; + background-position: -728px -1274px; width: 90px; height: 90px; } .shop_armor_special_fall2015Healer { background-image: url(spritesmith-main-3.png); - background-position: -123px -1547px; + background-position: -879px -1588px; width: 40px; height: 40px; } .shop_armor_special_fall2015Mage { background-image: url(spritesmith-main-3.png); - background-position: -164px -1547px; + background-position: -920px -1588px; width: 40px; height: 40px; } .shop_armor_special_fall2015Rogue { background-image: url(spritesmith-main-3.png); - background-position: -205px -1547px; + background-position: -961px -1588px; width: 40px; height: 40px; } .shop_armor_special_fall2015Warrior { background-image: url(spritesmith-main-3.png); - background-position: -246px -1547px; + background-position: -1002px -1588px; width: 40px; height: 40px; } .shop_armor_special_fallHealer { background-image: url(spritesmith-main-3.png); - background-position: -287px -1547px; + background-position: -1043px -1588px; width: 40px; height: 40px; } .shop_armor_special_fallMage { background-image: url(spritesmith-main-3.png); - background-position: -328px -1547px; + background-position: -1084px -1588px; width: 40px; height: 40px; } .shop_armor_special_fallRogue { background-image: url(spritesmith-main-3.png); - background-position: -369px -1547px; + background-position: -1125px -1588px; width: 40px; height: 40px; } .shop_armor_special_fallWarrior { background-image: url(spritesmith-main-3.png); - background-position: -410px -1547px; + background-position: -1166px -1588px; width: 40px; height: 40px; } .shop_head_special_fall2015Healer { background-image: url(spritesmith-main-3.png); - background-position: -451px -1547px; + background-position: -1207px -1588px; width: 40px; height: 40px; } .shop_head_special_fall2015Mage { background-image: url(spritesmith-main-3.png); - background-position: -492px -1547px; + background-position: -1248px -1588px; width: 40px; height: 40px; } .shop_head_special_fall2015Rogue { background-image: url(spritesmith-main-3.png); - background-position: -533px -1547px; + background-position: -1289px -1588px; width: 40px; height: 40px; } .shop_head_special_fall2015Warrior { background-image: url(spritesmith-main-3.png); - background-position: -574px -1547px; + background-position: -1330px -1588px; width: 40px; height: 40px; } .shop_head_special_fallHealer { background-image: url(spritesmith-main-3.png); - background-position: -615px -1547px; + background-position: -1371px -1588px; width: 40px; height: 40px; } .shop_head_special_fallMage { background-image: url(spritesmith-main-3.png); - background-position: -656px -1547px; + background-position: -1412px -1588px; width: 40px; height: 40px; } .shop_head_special_fallRogue { background-image: url(spritesmith-main-3.png); - background-position: -697px -1547px; + background-position: -1453px -1588px; width: 40px; height: 40px; } .shop_head_special_fallWarrior { background-image: url(spritesmith-main-3.png); - background-position: -738px -1547px; + background-position: -1494px -1588px; width: 40px; height: 40px; } .shop_shield_special_fall2015Healer { background-image: url(spritesmith-main-3.png); - background-position: -779px -1547px; + background-position: -1535px -1588px; width: 40px; height: 40px; } .shop_shield_special_fall2015Rogue { background-image: url(spritesmith-main-3.png); - background-position: -820px -1547px; + background-position: -1576px -1588px; width: 40px; height: 40px; } .shop_shield_special_fall2015Warrior { background-image: url(spritesmith-main-3.png); - background-position: -861px -1547px; + background-position: -1640px 0px; width: 40px; height: 40px; } .shop_shield_special_fallHealer { background-image: url(spritesmith-main-3.png); - background-position: -902px -1547px; + background-position: -1640px -41px; width: 40px; height: 40px; } .shop_shield_special_fallRogue { background-image: url(spritesmith-main-3.png); - background-position: -943px -1547px; + background-position: -1640px -82px; width: 40px; height: 40px; } .shop_shield_special_fallWarrior { background-image: url(spritesmith-main-3.png); - background-position: -984px -1547px; + background-position: -1640px -123px; width: 40px; height: 40px; } .shop_weapon_special_fall2015Healer { background-image: url(spritesmith-main-3.png); - background-position: -1025px -1547px; + background-position: -1640px -164px; width: 40px; height: 40px; } .shop_weapon_special_fall2015Mage { background-image: url(spritesmith-main-3.png); - background-position: -1066px -1547px; + background-position: -1640px -205px; width: 40px; height: 40px; } .shop_weapon_special_fall2015Rogue { background-image: url(spritesmith-main-3.png); - background-position: -1107px -1547px; + background-position: -1640px -246px; width: 40px; height: 40px; } .shop_weapon_special_fall2015Warrior { background-image: url(spritesmith-main-3.png); - background-position: -1148px -1547px; + background-position: -1640px -287px; width: 40px; height: 40px; } .shop_weapon_special_fallHealer { background-image: url(spritesmith-main-3.png); - background-position: -1189px -1547px; + background-position: -1640px -328px; width: 40px; height: 40px; } .shop_weapon_special_fallMage { background-image: url(spritesmith-main-3.png); - background-position: -1230px -1547px; + background-position: -1640px -369px; width: 40px; height: 40px; } .shop_weapon_special_fallRogue { background-image: url(spritesmith-main-3.png); - background-position: -1271px -1547px; + background-position: -1640px -410px; width: 40px; height: 40px; } .shop_weapon_special_fallWarrior { background-image: url(spritesmith-main-3.png); - background-position: -1312px -1547px; + background-position: -1640px -451px; width: 40px; height: 40px; } .slim_armor_special_fall2015Healer { background-image: url(spritesmith-main-3.png); - background-position: -306px -273px; + background-position: -454px 0px; width: 93px; height: 90px; } .slim_armor_special_fall2015Mage { background-image: url(spritesmith-main-3.png); - background-position: -242px 0px; + background-position: -348px -182px; width: 105px; height: 90px; } .slim_armor_special_fall2015Rogue { background-image: url(spritesmith-main-3.png); - background-position: -1365px -1365px; + background-position: -455px -1274px; width: 90px; height: 90px; } .slim_armor_special_fall2015Warrior { background-image: url(spritesmith-main-3.png); - background-position: -1274px -1365px; + background-position: -364px -1274px; width: 90px; height: 90px; } .slim_armor_special_fallHealer { background-image: url(spritesmith-main-3.png); - background-position: -1183px -1365px; + background-position: -273px -1274px; width: 90px; height: 90px; } .slim_armor_special_fallMage { background-image: url(spritesmith-main-3.png); - background-position: -121px -91px; + background-position: 0px 0px; width: 120px; height: 90px; } .slim_armor_special_fallRogue { background-image: url(spritesmith-main-3.png); - background-position: -348px -182px; + background-position: 0px -182px; width: 105px; height: 90px; } .slim_armor_special_fallWarrior { background-image: url(spritesmith-main-3.png); - background-position: -910px -1365px; + background-position: 0px -1274px; width: 90px; height: 90px; } .weapon_special_fall2015Healer { background-image: url(spritesmith-main-3.png); - background-position: 0px -364px; + background-position: -188px -273px; width: 93px; height: 90px; } .weapon_special_fall2015Mage { background-image: url(spritesmith-main-3.png); - background-position: -348px 0px; + background-position: -121px -91px; width: 105px; height: 90px; } .weapon_special_fall2015Rogue { background-image: url(spritesmith-main-3.png); - background-position: -637px -1365px; + background-position: -1276px -1001px; width: 90px; height: 90px; } .weapon_special_fall2015Warrior { background-image: url(spritesmith-main-3.png); - background-position: -546px -1365px; + background-position: -91px -1547px; width: 90px; height: 90px; } -.weapon_special_fallHealer { - background-image: url(spritesmith-main-3.png); - background-position: -455px -1365px; - width: 90px; - height: 90px; -} -.weapon_special_fallMage { - background-image: url(spritesmith-main-3.png); - background-position: 0px -91px; - width: 120px; - height: 90px; -} -.weapon_special_fallRogue { - background-image: url(spritesmith-main-3.png); - background-position: -106px -182px; - width: 105px; - height: 90px; -} -.weapon_special_fallWarrior { - background-image: url(spritesmith-main-3.png); - background-position: -182px -1365px; - width: 90px; - height: 90px; -} -.broad_armor_special_gaymerx { - background-image: url(spritesmith-main-3.png); - background-position: -91px -1365px; - width: 90px; - height: 90px; -} -.head_special_gaymerx { - background-image: url(spritesmith-main-3.png); - background-position: -1276px -819px; - width: 90px; - height: 90px; -} -.shop_armor_special_gaymerx { - background-image: url(spritesmith-main-3.png); - background-position: -451px -1588px; - width: 40px; - height: 40px; -} -.shop_head_special_gaymerx { - background-image: url(spritesmith-main-3.png); - background-position: -492px -1588px; - width: 40px; - height: 40px; -} -.slim_armor_special_gaymerx { - background-image: url(spritesmith-main-3.png); - background-position: -1276px -728px; - width: 90px; - height: 90px; -} -.back_mystery_201402 { - background-image: url(spritesmith-main-3.png); - background-position: -1276px -637px; - width: 90px; - height: 90px; -} -.broad_armor_mystery_201402 { - background-image: url(spritesmith-main-3.png); - background-position: -1276px -546px; - width: 90px; - height: 90px; -} -.head_mystery_201402 { - background-image: url(spritesmith-main-3.png); - background-position: -1276px -455px; - width: 90px; - height: 90px; -} -.shop_armor_mystery_201402 { - background-image: url(spritesmith-main-3.png); - background-position: -697px -1588px; - width: 40px; - height: 40px; -} -.shop_back_mystery_201402 { - background-image: url(spritesmith-main-3.png); - background-position: -738px -1588px; - width: 40px; - height: 40px; -} -.shop_head_mystery_201402 { - background-image: url(spritesmith-main-3.png); - background-position: -779px -1588px; - width: 40px; - height: 40px; -} -.slim_armor_mystery_201402 { - background-image: url(spritesmith-main-3.png); - background-position: -1276px -364px; - width: 90px; - height: 90px; -} -.broad_armor_mystery_201403 { - background-image: url(spritesmith-main-3.png); - background-position: -1276px -273px; - width: 90px; - height: 90px; -} -.headAccessory_mystery_201403 { - background-image: url(spritesmith-main-3.png); - background-position: -1276px -182px; - width: 90px; - height: 90px; -} -.shop_armor_mystery_201403 { - background-image: url(spritesmith-main-3.png); - background-position: -943px -1588px; - width: 40px; - height: 40px; -} -.shop_headAccessory_mystery_201403 { - background-image: url(spritesmith-main-3.png); - background-position: -984px -1588px; - width: 40px; - height: 40px; -} -.slim_armor_mystery_201403 { - background-image: url(spritesmith-main-3.png); - background-position: -1276px -91px; - width: 90px; - height: 90px; -} -.back_mystery_201404 { - background-image: url(spritesmith-main-3.png); - background-position: -1276px 0px; - width: 90px; - height: 90px; -} -.headAccessory_mystery_201404 { - background-image: url(spritesmith-main-3.png); - background-position: -1183px -1183px; - width: 90px; - height: 90px; -} -.shop_back_mystery_201404 { - background-image: url(spritesmith-main-3.png); - background-position: -1148px -1588px; - width: 40px; - height: 40px; -} -.shop_headAccessory_mystery_201404 { - background-image: url(spritesmith-main-3.png); - background-position: -1189px -1588px; - width: 40px; - height: 40px; -} -.broad_armor_mystery_201405 { - background-image: url(spritesmith-main-3.png); - background-position: -1092px -1183px; - width: 90px; - height: 90px; -} -.head_mystery_201405 { - background-image: url(spritesmith-main-3.png); - background-position: -1001px -1183px; - width: 90px; - height: 90px; -} -.shop_armor_mystery_201405 { - background-image: url(spritesmith-main-3.png); - background-position: -1312px -1588px; - width: 40px; - height: 40px; -} -.shop_head_mystery_201405 { - background-image: url(spritesmith-main-3.png); - background-position: -1353px -1588px; - width: 40px; - height: 40px; -} -.slim_armor_mystery_201405 { - background-image: url(spritesmith-main-3.png); - background-position: -910px -1183px; - width: 90px; - height: 90px; -} -.broad_armor_mystery_201406 { - background-image: url(spritesmith-main-3.png); - background-position: -454px 0px; - width: 90px; - height: 96px; -} -.head_mystery_201406 { - background-image: url(spritesmith-main-3.png); - background-position: -454px -97px; - width: 90px; - height: 96px; -} -.shop_armor_mystery_201406 { - background-image: url(spritesmith-main-3.png); - background-position: -1517px -1588px; - width: 40px; - height: 40px; -} -.shop_head_mystery_201406 { - background-image: url(spritesmith-main-3.png); - background-position: -1558px -1588px; - width: 40px; - height: 40px; -} -.slim_armor_mystery_201406 { - background-image: url(spritesmith-main-3.png); - background-position: -454px -194px; - width: 90px; - height: 96px; -} -.broad_armor_mystery_201407 { - background-image: url(spritesmith-main-3.png); - background-position: -546px -1183px; - width: 90px; - height: 90px; -} -.head_mystery_201407 { - background-image: url(spritesmith-main-3.png); - background-position: -455px -1183px; - width: 90px; - height: 90px; -} -.shop_armor_mystery_201407 { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -82px; - width: 40px; - height: 40px; -} -.shop_head_mystery_201407 { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -123px; - width: 40px; - height: 40px; -} -.slim_armor_mystery_201407 { - background-image: url(spritesmith-main-3.png); - background-position: -364px -1183px; - width: 90px; - height: 90px; -} -.broad_armor_mystery_201408 { - background-image: url(spritesmith-main-3.png); - background-position: -273px -1183px; - width: 90px; - height: 90px; -} -.head_mystery_201408 { - background-image: url(spritesmith-main-3.png); - background-position: -182px -1183px; - width: 90px; - height: 90px; -} -.shop_armor_mystery_201408 { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -287px; - width: 40px; - height: 40px; -} -.shop_head_mystery_201408 { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -328px; - width: 40px; - height: 40px; -} -.slim_armor_mystery_201408 { - background-image: url(spritesmith-main-3.png); - background-position: -91px -1183px; - width: 90px; - height: 90px; -} -.broad_armor_mystery_201409 { - background-image: url(spritesmith-main-3.png); - background-position: 0px -1183px; - width: 90px; - height: 90px; -} -.headAccessory_mystery_201409 { - background-image: url(spritesmith-main-3.png); - background-position: -1185px -1092px; - width: 90px; - height: 90px; -} -.shop_armor_mystery_201409 { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -492px; - width: 40px; - height: 40px; -} -.shop_headAccessory_mystery_201409 { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -533px; - width: 40px; - height: 40px; -} -.slim_armor_mystery_201409 { - background-image: url(spritesmith-main-3.png); - background-position: -1185px -1001px; - width: 90px; - height: 90px; -} -.back_mystery_201410 { - background-image: url(spritesmith-main-3.png); - background-position: -282px -364px; - width: 93px; - height: 90px; -} -.broad_armor_mystery_201410 { - background-image: url(spritesmith-main-3.png); - background-position: -376px -364px; - width: 93px; - height: 90px; -} -.shop_armor_mystery_201410 { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -697px; - width: 40px; - height: 40px; -} -.shop_back_mystery_201410 { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -738px; - width: 40px; - height: 40px; -} -.slim_armor_mystery_201410 { - background-image: url(spritesmith-main-3.png); - background-position: -94px -364px; - width: 93px; - height: 90px; -} -.head_mystery_201411 { - background-image: url(spritesmith-main-3.png); - background-position: -1185px -637px; - width: 90px; - height: 90px; -} -.shop_head_mystery_201411 { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -861px; - width: 40px; - height: 40px; -} -.shop_weapon_mystery_201411 { - background-image: url(spritesmith-main-3.png); - background-position: -1640px -902px; - width: 40px; - height: 40px; -} diff --git a/common/dist/sprites/spritesmith-main-3.png b/common/dist/sprites/spritesmith-main-3.png index 92d626489e..d62abf85f5 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 5177a22ed3..87772d3be8 100644 --- a/common/dist/sprites/spritesmith-main-4.css +++ b/common/dist/sprites/spritesmith-main-4.css @@ -1,1410 +1,1812 @@ -.weapon_mystery_201411 { - background-image: url(spritesmith-main-4.png); - background-position: -819px -1152px; - width: 90px; - height: 90px; -} -.broad_armor_mystery_201412 { - background-image: url(spritesmith-main-4.png); - background-position: -455px -1425px; - width: 90px; - height: 90px; -} -.head_mystery_201412 { - background-image: url(spritesmith-main-4.png); - background-position: -910px -1152px; - width: 90px; - height: 90px; -} -.shop_armor_mystery_201412 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -820px; - width: 40px; - height: 40px; -} -.shop_head_mystery_201412 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -779px; - width: 40px; - height: 40px; -} -.slim_armor_mystery_201412 { - background-image: url(spritesmith-main-4.png); - background-position: -1291px -91px; - width: 90px; - height: 90px; -} -.broad_armor_mystery_201501 { - background-image: url(spritesmith-main-4.png); - background-position: -1291px -364px; - width: 90px; - height: 90px; -} -.head_mystery_201501 { - background-image: url(spritesmith-main-4.png); - background-position: -1291px -546px; - width: 90px; - height: 90px; -} -.shop_armor_mystery_201501 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -738px; - width: 40px; - height: 40px; -} -.shop_head_mystery_201501 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -697px; - width: 40px; - height: 40px; -} -.slim_armor_mystery_201501 { - background-image: url(spritesmith-main-4.png); - background-position: -1018px -455px; - width: 90px; - height: 90px; -} -.headAccessory_mystery_201502 { - background-image: url(spritesmith-main-4.png); - background-position: -1018px -637px; - width: 90px; - height: 90px; -} -.shop_headAccessory_mystery_201502 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -656px; - width: 40px; - height: 40px; -} -.shop_weapon_mystery_201502 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -615px; - width: 40px; - height: 40px; -} -.weapon_mystery_201502 { - background-image: url(spritesmith-main-4.png); - background-position: 0px -970px; - width: 90px; - height: 90px; -} -.broad_armor_mystery_201503 { - background-image: url(spritesmith-main-4.png); - background-position: -91px -970px; - width: 90px; - height: 90px; -} -.eyewear_mystery_201503 { - background-image: url(spritesmith-main-4.png); - background-position: -182px -970px; - width: 90px; - height: 90px; -} -.shop_armor_mystery_201503 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -574px; - width: 40px; - height: 40px; -} -.shop_eyewear_mystery_201503 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -533px; - width: 40px; - height: 40px; -} -.slim_armor_mystery_201503 { - background-image: url(spritesmith-main-4.png); - background-position: -1200px -637px; - width: 90px; - height: 90px; -} -.back_mystery_201504 { - background-image: url(spritesmith-main-4.png); - background-position: -1200px -728px; - width: 90px; - height: 90px; -} -.broad_armor_mystery_201504 { - background-image: url(spritesmith-main-4.png); - background-position: -1200px -1001px; - width: 90px; - height: 90px; -} -.shop_armor_mystery_201504 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -492px; - width: 40px; - height: 40px; -} -.shop_back_mystery_201504 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -451px; - width: 40px; - height: 40px; -} -.slim_armor_mystery_201504 { - background-image: url(spritesmith-main-4.png); - background-position: -182px -1152px; - width: 90px; - height: 90px; -} -.head_mystery_201505 { - background-image: url(spritesmith-main-4.png); - background-position: -273px -1152px; - width: 90px; - height: 90px; -} -.shop_head_mystery_201505 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -410px; - width: 40px; - height: 40px; -} -.shop_weapon_mystery_201505 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -369px; - width: 40px; - height: 40px; -} -.weapon_mystery_201505 { - background-image: url(spritesmith-main-4.png); - background-position: -546px -1152px; - width: 90px; - height: 90px; -} -.broad_armor_mystery_201506 { - background-image: url(spritesmith-main-4.png); - background-position: -91px -485px; - width: 90px; - height: 105px; -} -.eyewear_mystery_201506 { - background-image: url(spritesmith-main-4.png); - background-position: 0px -485px; - width: 90px; - height: 105px; -} -.shop_armor_mystery_201506 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -328px; - width: 40px; - height: 40px; -} -.shop_eyewear_mystery_201506 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -287px; - width: 40px; - height: 40px; -} -.slim_armor_mystery_201506 { - background-image: url(spritesmith-main-4.png); - background-position: -648px -212px; - width: 90px; - height: 105px; -} -.back_mystery_201507 { - background-image: url(spritesmith-main-4.png); - background-position: -546px -591px; - width: 90px; - height: 105px; -} -.eyewear_mystery_201507 { - background-image: url(spritesmith-main-4.png); - background-position: -637px -591px; - width: 90px; - height: 105px; -} -.shop_back_mystery_201507 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -246px; - width: 40px; - height: 40px; -} -.shop_eyewear_mystery_201507 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -205px; - width: 40px; - height: 40px; -} -.broad_armor_mystery_201508 { - background-image: url(spritesmith-main-4.png); - background-position: -830px -273px; - width: 93px; - height: 90px; -} -.head_mystery_201508 { - background-image: url(spritesmith-main-4.png); - background-position: -830px -182px; - width: 93px; - height: 90px; -} -.shop_armor_mystery_201508 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -164px; - width: 40px; - height: 40px; -} -.shop_head_mystery_201508 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -123px; - width: 40px; - height: 40px; -} -.slim_armor_mystery_201508 { - background-image: url(spritesmith-main-4.png); - background-position: -830px -91px; - width: 93px; - height: 90px; -} -.broad_armor_mystery_201509 { - background-image: url(spritesmith-main-4.png); - background-position: -1291px -910px; - width: 90px; - height: 90px; -} -.head_mystery_201509 { - background-image: url(spritesmith-main-4.png); - background-position: -1382px -819px; - width: 90px; - height: 90px; -} -.shop_armor_mystery_201509 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -82px; - width: 40px; - height: 40px; -} -.shop_head_mystery_201509 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -41px; - width: 40px; - height: 40px; -} -.slim_armor_mystery_201509 { - background-image: url(spritesmith-main-4.png); - background-position: -910px -1334px; - width: 90px; - height: 90px; -} -.broad_armor_mystery_301404 { - background-image: url(spritesmith-main-4.png); - background-position: -1001px -1334px; - width: 90px; - height: 90px; -} -.eyewear_mystery_301404 { - background-image: url(spritesmith-main-4.png); - background-position: -1092px -1334px; - width: 90px; - height: 90px; -} -.head_mystery_301404 { - background-image: url(spritesmith-main-4.png); - background-position: -1183px -1334px; - width: 90px; - height: 90px; -} -.shop_armor_mystery_301404 { - background-image: url(spritesmith-main-4.png); - background-position: -1655px 0px; - width: 40px; - height: 40px; -} -.shop_eyewear_mystery_301404 { - background-image: url(spritesmith-main-4.png); - background-position: -1599px -1598px; - width: 40px; - height: 40px; -} -.shop_head_mystery_301404 { - background-image: url(spritesmith-main-4.png); - background-position: -1558px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_mystery_301404 { - background-image: url(spritesmith-main-4.png); - background-position: -1517px -1598px; - width: 40px; - height: 40px; -} -.slim_armor_mystery_301404 { - background-image: url(spritesmith-main-4.png); - background-position: -1473px -364px; - width: 90px; - height: 90px; -} -.weapon_mystery_301404 { - background-image: url(spritesmith-main-4.png); - background-position: -1473px -455px; - width: 90px; - height: 90px; -} -.eyewear_mystery_301405 { - background-image: url(spritesmith-main-4.png); - background-position: -1473px -546px; - width: 90px; - height: 90px; -} -.headAccessory_mystery_301405 { - background-image: url(spritesmith-main-4.png); - background-position: -1473px -1092px; - width: 90px; - height: 90px; -} -.head_mystery_301405 { - background-image: url(spritesmith-main-4.png); - background-position: -637px -1425px; - width: 90px; - height: 90px; -} -.shield_mystery_301405 { - background-image: url(spritesmith-main-4.png); - background-position: -910px -1425px; - width: 90px; - height: 90px; -} -.shop_eyewear_mystery_301405 { - background-image: url(spritesmith-main-4.png); - background-position: -1476px -1598px; - width: 40px; - height: 40px; -} -.shop_headAccessory_mystery_301405 { - background-image: url(spritesmith-main-4.png); - background-position: -1435px -1598px; - width: 40px; - height: 40px; -} -.shop_head_mystery_301405 { - background-image: url(spritesmith-main-4.png); - background-position: -1394px -1598px; - width: 40px; - height: 40px; -} -.shop_shield_mystery_301405 { - background-image: url(spritesmith-main-4.png); - background-position: -1353px -1598px; - width: 40px; - height: 40px; -} -.broad_armor_special_spring2015Healer { - background-image: url(spritesmith-main-4.png); - background-position: -739px -212px; - width: 90px; - height: 90px; -} -.broad_armor_special_spring2015Mage { - background-image: url(spritesmith-main-4.png); - background-position: -739px -303px; - width: 90px; - height: 90px; -} -.broad_armor_special_spring2015Rogue { - background-image: url(spritesmith-main-4.png); - background-position: -739px -394px; - width: 90px; - height: 90px; -} -.broad_armor_special_spring2015Warrior { - background-image: url(spritesmith-main-4.png); - background-position: -739px -485px; - width: 90px; - height: 90px; -} -.broad_armor_special_springHealer { - background-image: url(spritesmith-main-4.png); - background-position: -739px -576px; - width: 90px; - height: 90px; -} -.broad_armor_special_springMage { - background-image: url(spritesmith-main-4.png); - background-position: 0px -788px; - width: 90px; - height: 90px; -} -.broad_armor_special_springRogue { - background-image: url(spritesmith-main-4.png); - background-position: -91px -788px; - width: 90px; - height: 90px; -} -.broad_armor_special_springWarrior { - background-image: url(spritesmith-main-4.png); - background-position: -182px -788px; - width: 90px; - height: 90px; -} -.headAccessory_special_spring2015Healer { - background-image: url(spritesmith-main-4.png); - background-position: -273px -788px; - width: 90px; - height: 90px; -} -.headAccessory_special_spring2015Mage { - background-image: url(spritesmith-main-4.png); - background-position: -364px -788px; - width: 90px; - height: 90px; -} -.headAccessory_special_spring2015Rogue { - background-image: url(spritesmith-main-4.png); - background-position: -455px -788px; - width: 90px; - height: 90px; -} -.headAccessory_special_spring2015Warrior { - background-image: url(spritesmith-main-4.png); - background-position: -546px -788px; - width: 90px; - height: 90px; -} -.headAccessory_special_springHealer { - background-image: url(spritesmith-main-4.png); - background-position: -637px -788px; - width: 90px; - height: 90px; -} -.headAccessory_special_springMage { - background-image: url(spritesmith-main-4.png); - background-position: -728px -788px; - width: 90px; - height: 90px; -} -.headAccessory_special_springRogue { - background-image: url(spritesmith-main-4.png); - background-position: -819px -788px; - width: 90px; - height: 90px; -} -.headAccessory_special_springWarrior { - background-image: url(spritesmith-main-4.png); - background-position: -927px 0px; - width: 90px; - height: 90px; -} -.head_special_spring2015Healer { - background-image: url(spritesmith-main-4.png); - background-position: -927px -91px; - width: 90px; - height: 90px; -} -.head_special_spring2015Mage { - background-image: url(spritesmith-main-4.png); - background-position: -927px -182px; - width: 90px; - height: 90px; -} -.head_special_spring2015Rogue { - background-image: url(spritesmith-main-4.png); - background-position: -927px -273px; - width: 90px; - height: 90px; -} -.head_special_spring2015Warrior { - background-image: url(spritesmith-main-4.png); - background-position: -927px -364px; - width: 90px; - height: 90px; -} -.head_special_springHealer { - background-image: url(spritesmith-main-4.png); - background-position: -927px -455px; - width: 90px; - height: 90px; -} -.head_special_springMage { - background-image: url(spritesmith-main-4.png); - background-position: -927px -546px; - width: 90px; - height: 90px; -} -.head_special_springRogue { - background-image: url(spritesmith-main-4.png); - background-position: -927px -637px; - width: 90px; - height: 90px; -} -.head_special_springWarrior { - background-image: url(spritesmith-main-4.png); - background-position: -927px -728px; - width: 90px; - height: 90px; -} -.shield_special_spring2015Healer { - background-image: url(spritesmith-main-4.png); - background-position: 0px -879px; - width: 90px; - height: 90px; -} -.shield_special_spring2015Rogue { - background-image: url(spritesmith-main-4.png); - background-position: -91px -879px; - width: 90px; - height: 90px; -} -.shield_special_spring2015Warrior { +.weapon_special_fallHealer { background-image: url(spritesmith-main-4.png); background-position: -182px -879px; width: 90px; height: 90px; } -.shield_special_springHealer { +.weapon_special_fallMage { background-image: url(spritesmith-main-4.png); - background-position: -273px -879px; + background-position: 0px 0px; + width: 120px; + height: 90px; +} +.weapon_special_fallRogue { + background-image: url(spritesmith-main-4.png); + background-position: -336px -303px; + width: 105px; + height: 90px; +} +.weapon_special_fallWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -1033px -455px; width: 90px; height: 90px; } -.shield_special_springRogue { +.broad_armor_special_gaymerx { background-image: url(spritesmith-main-4.png); - background-position: -364px -879px; + background-position: -1306px -819px; width: 90px; height: 90px; } -.shield_special_springWarrior { +.head_special_gaymerx { + background-image: url(spritesmith-main-4.png); + background-position: -1306px -1092px; + width: 90px; + height: 90px; +} +.shop_armor_special_gaymerx { + background-image: url(spritesmith-main-4.png); + background-position: -1670px -615px; + width: 40px; + height: 40px; +} +.shop_head_special_gaymerx { + background-image: url(spritesmith-main-4.png); + background-position: -1670px -574px; + width: 40px; + height: 40px; +} +.slim_armor_special_gaymerx { + background-image: url(spritesmith-main-4.png); + background-position: -273px -1334px; + width: 90px; + height: 90px; +} +.back_mystery_201402 { + background-image: url(spritesmith-main-4.png); + background-position: -364px -1334px; + width: 90px; + height: 90px; +} +.broad_armor_mystery_201402 { + background-image: url(spritesmith-main-4.png); + background-position: -455px -1334px; + width: 90px; + height: 90px; +} +.head_mystery_201402 { + background-image: url(spritesmith-main-4.png); + background-position: -910px -1334px; + width: 90px; + height: 90px; +} +.shop_armor_mystery_201402 { + background-image: url(spritesmith-main-4.png); + background-position: -1670px -533px; + width: 40px; + height: 40px; +} +.shop_back_mystery_201402 { + background-image: url(spritesmith-main-4.png); + background-position: -1670px -492px; + width: 40px; + height: 40px; +} +.shop_head_mystery_201402 { + background-image: url(spritesmith-main-4.png); + background-position: -1670px -451px; + width: 40px; + height: 40px; +} +.slim_armor_mystery_201402 { + background-image: url(spritesmith-main-4.png); + background-position: -942px -455px; + width: 90px; + height: 90px; +} +.broad_armor_mystery_201403 { + background-image: url(spritesmith-main-4.png); + background-position: -942px -546px; + width: 90px; + height: 90px; +} +.headAccessory_mystery_201403 { + background-image: url(spritesmith-main-4.png); + background-position: 0px -879px; + width: 90px; + height: 90px; +} +.shop_armor_mystery_201403 { + background-image: url(spritesmith-main-4.png); + background-position: -1670px -410px; + width: 40px; + height: 40px; +} +.shop_headAccessory_mystery_201403 { + background-image: url(spritesmith-main-4.png); + background-position: -1670px -369px; + width: 40px; + height: 40px; +} +.slim_armor_mystery_201403 { background-image: url(spritesmith-main-4.png); background-position: -455px -879px; width: 90px; height: 90px; } -.shop_armor_special_spring2015Healer { +.back_mystery_201404 { background-image: url(spritesmith-main-4.png); - background-position: -1312px -1598px; - width: 40px; - height: 40px; -} -.shop_armor_special_spring2015Mage { - background-image: url(spritesmith-main-4.png); - background-position: -1271px -1598px; - width: 40px; - height: 40px; -} -.shop_armor_special_spring2015Rogue { - background-image: url(spritesmith-main-4.png); - background-position: -1230px -1598px; - width: 40px; - height: 40px; -} -.shop_armor_special_spring2015Warrior { - background-image: url(spritesmith-main-4.png); - background-position: -1189px -1598px; - width: 40px; - height: 40px; -} -.shop_armor_special_springHealer { - background-image: url(spritesmith-main-4.png); - background-position: -533px -1557px; - width: 40px; - height: 40px; -} -.shop_armor_special_springMage { - background-image: url(spritesmith-main-4.png); - background-position: -492px -1557px; - width: 40px; - height: 40px; -} -.shop_armor_special_springRogue { - background-image: url(spritesmith-main-4.png); - background-position: -451px -1557px; - width: 40px; - height: 40px; -} -.shop_armor_special_springWarrior { - background-image: url(spritesmith-main-4.png); - background-position: -410px -1557px; - width: 40px; - height: 40px; -} -.shop_headAccessory_special_spring2015Healer { - background-image: url(spritesmith-main-4.png); - background-position: -369px -1557px; - width: 40px; - height: 40px; -} -.shop_headAccessory_special_spring2015Mage { - background-image: url(spritesmith-main-4.png); - background-position: -328px -1557px; - width: 40px; - height: 40px; -} -.shop_headAccessory_special_spring2015Rogue { - background-image: url(spritesmith-main-4.png); - background-position: -287px -1557px; - width: 40px; - height: 40px; -} -.shop_headAccessory_special_spring2015Warrior { - background-image: url(spritesmith-main-4.png); - background-position: -246px -1557px; - width: 40px; - height: 40px; -} -.shop_headAccessory_special_springHealer { - background-image: url(spritesmith-main-4.png); - background-position: -205px -1557px; - width: 40px; - height: 40px; -} -.shop_headAccessory_special_springMage { - background-image: url(spritesmith-main-4.png); - background-position: -164px -1557px; - width: 40px; - height: 40px; -} -.shop_headAccessory_special_springRogue { - background-image: url(spritesmith-main-4.png); - background-position: -123px -1557px; - width: 40px; - height: 40px; -} -.shop_headAccessory_special_springWarrior { - background-image: url(spritesmith-main-4.png); - background-position: -82px -1557px; - width: 40px; - height: 40px; -} -.shop_head_special_spring2015Healer { - background-image: url(spritesmith-main-4.png); - background-position: -41px -1557px; - width: 40px; - height: 40px; -} -.shop_head_special_spring2015Mage { - background-image: url(spritesmith-main-4.png); - background-position: 0px -1557px; - width: 40px; - height: 40px; -} -.shop_head_special_spring2015Rogue { - background-image: url(spritesmith-main-4.png); - background-position: -1599px -1516px; - width: 40px; - height: 40px; -} -.shop_head_special_spring2015Warrior { - background-image: url(spritesmith-main-4.png); - background-position: -1558px -1516px; - width: 40px; - height: 40px; -} -.shop_head_special_springHealer { - background-image: url(spritesmith-main-4.png); - background-position: -1517px -1516px; - width: 40px; - height: 40px; -} -.shop_head_special_springMage { - background-image: url(spritesmith-main-4.png); - background-position: -1476px -1516px; - width: 40px; - height: 40px; -} -.shop_head_special_springRogue { - background-image: url(spritesmith-main-4.png); - background-position: -1435px -1516px; - width: 40px; - height: 40px; -} -.shop_head_special_springWarrior { - background-image: url(spritesmith-main-4.png); - background-position: -1394px -1516px; - width: 40px; - height: 40px; -} -.shop_shield_special_spring2015Healer { - background-image: url(spritesmith-main-4.png); - background-position: -1025px -1516px; - width: 40px; - height: 40px; -} -.shop_shield_special_spring2015Rogue { - background-image: url(spritesmith-main-4.png); - background-position: -984px -1516px; - width: 40px; - height: 40px; -} -.shop_shield_special_spring2015Warrior { - background-image: url(spritesmith-main-4.png); - background-position: -943px -1516px; - width: 40px; - height: 40px; -} -.shop_shield_special_springHealer { - background-image: url(spritesmith-main-4.png); - background-position: -902px -1516px; - width: 40px; - height: 40px; -} -.shop_shield_special_springRogue { - background-image: url(spritesmith-main-4.png); - background-position: -861px -1516px; - width: 40px; - height: 40px; -} -.shop_shield_special_springWarrior { - background-image: url(spritesmith-main-4.png); - background-position: -820px -1516px; - width: 40px; - height: 40px; -} -.shop_weapon_special_spring2015Healer { - background-image: url(spritesmith-main-4.png); - background-position: -779px -1516px; - width: 40px; - height: 40px; -} -.shop_weapon_special_spring2015Mage { - background-image: url(spritesmith-main-4.png); - background-position: -738px -1516px; - width: 40px; - height: 40px; -} -.shop_weapon_special_spring2015Rogue { - background-image: url(spritesmith-main-4.png); - background-position: -377px -303px; - width: 40px; - height: 40px; -} -.shop_weapon_special_spring2015Warrior { - background-image: url(spritesmith-main-4.png); - background-position: -336px -303px; - width: 40px; - height: 40px; -} -.shop_weapon_special_springHealer { - background-image: url(spritesmith-main-4.png); - background-position: -230px -253px; - width: 40px; - height: 40px; -} -.shop_weapon_special_springMage { - background-image: url(spritesmith-main-4.png); - background-position: -230px -212px; - width: 40px; - height: 40px; -} -.shop_weapon_special_springRogue { - background-image: url(spritesmith-main-4.png); - background-position: -689px -530px; - width: 40px; - height: 40px; -} -.shop_weapon_special_springWarrior { - background-image: url(spritesmith-main-4.png); - background-position: -648px -530px; - width: 40px; - height: 40px; -} -.slim_armor_special_spring2015Healer { - background-image: url(spritesmith-main-4.png); - background-position: 0px -1061px; + background-position: -546px -879px; width: 90px; height: 90px; } -.slim_armor_special_spring2015Mage { +.headAccessory_mystery_201404 { background-image: url(spritesmith-main-4.png); - background-position: -91px -1061px; + background-position: -819px -879px; width: 90px; height: 90px; } -.slim_armor_special_spring2015Rogue { +.shop_back_mystery_201404 { background-image: url(spritesmith-main-4.png); - background-position: -182px -1061px; - width: 90px; - height: 90px; + background-position: -1670px -328px; + width: 40px; + height: 40px; } -.slim_armor_special_spring2015Warrior { +.shop_headAccessory_mystery_201404 { background-image: url(spritesmith-main-4.png); - background-position: -273px -1061px; - width: 90px; - height: 90px; + background-position: -1670px -287px; + width: 40px; + height: 40px; } -.slim_armor_special_springHealer { - background-image: url(spritesmith-main-4.png); - background-position: -364px -1061px; - width: 90px; - height: 90px; -} -.slim_armor_special_springMage { - background-image: url(spritesmith-main-4.png); - background-position: -455px -1061px; - width: 90px; - height: 90px; -} -.slim_armor_special_springRogue { - background-image: url(spritesmith-main-4.png); - background-position: -546px -1061px; - width: 90px; - height: 90px; -} -.slim_armor_special_springWarrior { - background-image: url(spritesmith-main-4.png); - background-position: -637px -1061px; - width: 90px; - height: 90px; -} -.weapon_special_spring2015Healer { - background-image: url(spritesmith-main-4.png); - background-position: -728px -1061px; - width: 90px; - height: 90px; -} -.weapon_special_spring2015Mage { - background-image: url(spritesmith-main-4.png); - background-position: -819px -1061px; - width: 90px; - height: 90px; -} -.weapon_special_spring2015Rogue { - background-image: url(spritesmith-main-4.png); - background-position: -910px -1061px; - width: 90px; - height: 90px; -} -.weapon_special_spring2015Warrior { - background-image: url(spritesmith-main-4.png); - background-position: -1001px -1061px; - width: 90px; - height: 90px; -} -.weapon_special_springHealer { - background-image: url(spritesmith-main-4.png); - background-position: -1092px -1061px; - width: 90px; - height: 90px; -} -.weapon_special_springMage { - background-image: url(spritesmith-main-4.png); - background-position: -1200px 0px; - width: 90px; - height: 90px; -} -.weapon_special_springRogue { - background-image: url(spritesmith-main-4.png); - background-position: -1200px -91px; - width: 90px; - height: 90px; -} -.weapon_special_springWarrior { - background-image: url(spritesmith-main-4.png); - background-position: -1200px -182px; - width: 90px; - height: 90px; -} -.body_special_summer2015Healer { - background-image: url(spritesmith-main-4.png); - background-position: -1200px -273px; - width: 90px; - height: 90px; -} -.body_special_summer2015Mage { - background-image: url(spritesmith-main-4.png); - background-position: -1200px -364px; - width: 90px; - height: 90px; -} -.body_special_summer2015Rogue { - background-image: url(spritesmith-main-4.png); - background-position: -206px -106px; - width: 102px; - height: 105px; -} -.body_special_summer2015Warrior { - background-image: url(spritesmith-main-4.png); - background-position: -364px -485px; - width: 90px; - height: 105px; -} -.body_special_summerHealer { - background-image: url(spritesmith-main-4.png); - background-position: -648px 0px; - width: 90px; - height: 105px; -} -.body_special_summerMage { - background-image: url(spritesmith-main-4.png); - background-position: -648px -106px; - width: 90px; - height: 105px; -} -.broad_armor_special_summer2015Healer { - background-image: url(spritesmith-main-4.png); - background-position: -1200px -819px; - width: 90px; - height: 90px; -} -.broad_armor_special_summer2015Mage { - background-image: url(spritesmith-main-4.png); - background-position: -1200px -910px; - width: 90px; - height: 90px; -} -.broad_armor_special_summer2015Rogue { - background-image: url(spritesmith-main-4.png); - background-position: -103px -106px; - width: 102px; - height: 105px; -} -.broad_armor_special_summer2015Warrior { - background-image: url(spritesmith-main-4.png); - background-position: 0px -591px; - width: 90px; - height: 105px; -} -.broad_armor_special_summerHealer { - background-image: url(spritesmith-main-4.png); - background-position: -91px -591px; - width: 90px; - height: 105px; -} -.broad_armor_special_summerMage { - background-image: url(spritesmith-main-4.png); - background-position: -182px -591px; - width: 90px; - height: 105px; -} -.broad_armor_special_summerRogue { - background-image: url(spritesmith-main-4.png); - background-position: -424px -273px; - width: 111px; - height: 90px; -} -.broad_armor_special_summerWarrior { - background-image: url(spritesmith-main-4.png); - background-position: -309px -91px; - width: 111px; - height: 90px; -} -.eyewear_special_summerRogue { - background-image: url(spritesmith-main-4.png); - background-position: -309px -182px; - width: 111px; - height: 90px; -} -.eyewear_special_summerWarrior { - background-image: url(spritesmith-main-4.png); - background-position: 0px -303px; - width: 111px; - height: 90px; -} -.head_special_summer2015Healer { +.broad_armor_mystery_201405 { background-image: url(spritesmith-main-4.png); background-position: -637px -1152px; width: 90px; height: 90px; } -.head_special_summer2015Mage { +.head_mystery_201405 { background-image: url(spritesmith-main-4.png); - background-position: -728px -1152px; + background-position: -1306px -91px; width: 90px; height: 90px; } -.head_special_summer2015Rogue { +.shop_armor_mystery_201405 { background-image: url(spritesmith-main-4.png); - background-position: 0px 0px; - width: 102px; - height: 105px; + background-position: -1670px -246px; + width: 40px; + height: 40px; } -.head_special_summer2015Warrior { +.shop_head_mystery_201405 { background-image: url(spritesmith-main-4.png); - background-position: -739px -106px; - width: 90px; - height: 105px; + background-position: -1670px -205px; + width: 40px; + height: 40px; } -.head_special_summerHealer { +.slim_armor_mystery_201405 { background-image: url(spritesmith-main-4.png); - background-position: -739px 0px; - width: 90px; - height: 105px; -} -.head_special_summerMage { - background-image: url(spritesmith-main-4.png); - background-position: -182px -485px; - width: 90px; - height: 105px; -} -.head_special_summerRogue { - background-image: url(spritesmith-main-4.png); - background-position: -224px -303px; - width: 111px; - height: 90px; -} -.head_special_summerWarrior { - background-image: url(spritesmith-main-4.png); - background-position: -424px 0px; - width: 111px; - height: 90px; -} -.Healer_Summer { - background-image: url(spritesmith-main-4.png); - background-position: -455px -485px; - width: 90px; - height: 105px; -} -.Mage_Summer { - background-image: url(spritesmith-main-4.png); - background-position: -546px -485px; - width: 90px; - height: 105px; -} -.SummerRogue14 { - background-image: url(spritesmith-main-4.png); - background-position: -536px -91px; - width: 111px; - height: 90px; -} -.SummerWarrior14 { - background-image: url(spritesmith-main-4.png); - background-position: -424px -182px; - width: 111px; - height: 90px; -} -.shield_special_summer2015Healer { - background-image: url(spritesmith-main-4.png); - background-position: -1291px -455px; + background-position: -182px -1243px; width: 90px; height: 90px; } -.shield_special_summer2015Rogue { +.broad_armor_mystery_201406 { background-image: url(spritesmith-main-4.png); - background-position: 0px -106px; - width: 102px; - height: 105px; -} -.shield_special_summer2015Warrior { - background-image: url(spritesmith-main-4.png); - background-position: -648px -318px; + background-position: -757px -415px; width: 90px; - height: 105px; + height: 96px; } -.shield_special_summerHealer { +.head_mystery_201406 { background-image: url(spritesmith-main-4.png); - background-position: -648px -424px; + background-position: -757px -318px; width: 90px; - height: 105px; + height: 96px; } -.shield_special_summerRogue { +.shop_armor_mystery_201406 { background-image: url(spritesmith-main-4.png); - background-position: 0px -394px; - width: 111px; - height: 90px; -} -.shield_special_summerWarrior { - background-image: url(spritesmith-main-4.png); - background-position: -112px -394px; - width: 111px; - height: 90px; -} -.shop_armor_special_summer2015Healer { - background-image: url(spritesmith-main-4.png); - background-position: -871px -728px; + background-position: -1670px -164px; width: 40px; height: 40px; } -.shop_armor_special_summer2015Mage { +.shop_head_mystery_201406 { background-image: url(spritesmith-main-4.png); - background-position: -830px -728px; + background-position: -1670px -123px; width: 40px; height: 40px; } -.shop_armor_special_summer2015Rogue { +.slim_armor_mystery_201406 { background-image: url(spritesmith-main-4.png); - background-position: -968px -819px; - width: 40px; - height: 40px; -} -.shop_armor_special_summer2015Warrior { - background-image: url(spritesmith-main-4.png); - background-position: -927px -819px; - width: 40px; - height: 40px; -} -.shop_armor_special_summerHealer { - background-image: url(spritesmith-main-4.png); - background-position: -1059px -910px; - width: 40px; - height: 40px; -} -.shop_armor_special_summerMage { - background-image: url(spritesmith-main-4.png); - background-position: -1018px -910px; - width: 40px; - height: 40px; -} -.shop_armor_special_summerRogue { - background-image: url(spritesmith-main-4.png); - background-position: -1150px -1001px; - width: 40px; - height: 40px; -} -.shop_armor_special_summerWarrior { - background-image: url(spritesmith-main-4.png); - background-position: -1109px -1001px; - width: 40px; - height: 40px; -} -.shop_body_special_summer2015Healer { - background-image: url(spritesmith-main-4.png); - background-position: -1241px -1092px; - width: 40px; - height: 40px; -} -.shop_body_special_summer2015Mage { - background-image: url(spritesmith-main-4.png); - background-position: -1200px -1092px; - width: 40px; - height: 40px; -} -.shop_body_special_summer2015Rogue { - background-image: url(spritesmith-main-4.png); - background-position: -1332px -1183px; - width: 40px; - height: 40px; -} -.shop_body_special_summer2015Warrior { - background-image: url(spritesmith-main-4.png); - background-position: -1291px -1183px; - width: 40px; - height: 40px; -} -.shop_body_special_summerHealer { - background-image: url(spritesmith-main-4.png); - background-position: -1423px -1274px; - width: 40px; - height: 40px; -} -.shop_body_special_summerMage { - background-image: url(spritesmith-main-4.png); - background-position: -1382px -1274px; - width: 40px; - height: 40px; -} -.shop_eyewear_special_summerRogue { - background-image: url(spritesmith-main-4.png); - background-position: -1514px -1365px; - width: 40px; - height: 40px; -} -.shop_eyewear_special_summerWarrior { - background-image: url(spritesmith-main-4.png); - background-position: -1473px -1365px; - width: 40px; - height: 40px; -} -.shop_head_special_summer2015Healer { - background-image: url(spritesmith-main-4.png); - background-position: -1605px -1461px; - width: 40px; - height: 40px; -} -.shop_head_special_summer2015Mage { - background-image: url(spritesmith-main-4.png); - background-position: -1605px -1297px; - width: 40px; - height: 40px; -} -.shop_head_special_summer2015Rogue { - background-image: url(spritesmith-main-4.png); - background-position: -1564px -1297px; - width: 40px; - height: 40px; -} -.shop_head_special_summer2015Warrior { - background-image: url(spritesmith-main-4.png); - background-position: -1605px -1256px; - width: 40px; - height: 40px; -} -.shop_head_special_summerHealer { - background-image: url(spritesmith-main-4.png); - background-position: -1564px -1256px; - width: 40px; - height: 40px; -} -.shop_head_special_summerMage { - background-image: url(spritesmith-main-4.png); - background-position: -1605px -1215px; - width: 40px; - height: 40px; -} -.shop_head_special_summerRogue { - background-image: url(spritesmith-main-4.png); - background-position: -1564px -1215px; - width: 40px; - height: 40px; -} -.shop_head_special_summerWarrior { - background-image: url(spritesmith-main-4.png); - background-position: -1605px -1174px; - width: 40px; - height: 40px; -} -.shop_shield_special_summer2015Healer { - background-image: url(spritesmith-main-4.png); - background-position: -1564px -1174px; - width: 40px; - height: 40px; -} -.shop_shield_special_summer2015Rogue { - background-image: url(spritesmith-main-4.png); - background-position: -1605px -1133px; - width: 40px; - height: 40px; -} -.shop_shield_special_summer2015Warrior { - background-image: url(spritesmith-main-4.png); - background-position: -1564px -1133px; - width: 40px; - height: 40px; -} -.shop_shield_special_summerHealer { - background-image: url(spritesmith-main-4.png); - background-position: -1605px -1092px; - width: 40px; - height: 40px; -} -.shop_shield_special_summerRogue { - background-image: url(spritesmith-main-4.png); - background-position: -1564px -1092px; - width: 40px; - height: 40px; -} -.shop_shield_special_summerWarrior { - background-image: url(spritesmith-main-4.png); - background-position: -1605px -1051px; - width: 40px; - height: 40px; -} -.shop_weapon_special_summer2015Healer { - background-image: url(spritesmith-main-4.png); - background-position: -1564px -1051px; - width: 40px; - height: 40px; -} -.shop_weapon_special_summer2015Mage { - background-image: url(spritesmith-main-4.png); - background-position: -1605px -1010px; - width: 40px; - height: 40px; -} -.shop_weapon_special_summer2015Rogue { - background-image: url(spritesmith-main-4.png); - background-position: -1564px -1010px; - width: 40px; - height: 40px; -} -.shop_weapon_special_summer2015Warrior { - background-image: url(spritesmith-main-4.png); - background-position: -1605px -969px; - width: 40px; - height: 40px; -} -.shop_weapon_special_summerHealer { - background-image: url(spritesmith-main-4.png); - background-position: -1564px -969px; - width: 40px; - height: 40px; -} -.shop_weapon_special_summerMage { - background-image: url(spritesmith-main-4.png); - background-position: -1605px -928px; - width: 40px; - height: 40px; -} -.shop_weapon_special_summerRogue { - background-image: url(spritesmith-main-4.png); - background-position: -1564px -928px; - width: 40px; - height: 40px; -} -.shop_weapon_special_summerWarrior { - background-image: url(spritesmith-main-4.png); - background-position: -1605px -887px; - width: 40px; - height: 40px; -} -.slim_armor_special_summer2015Healer { - background-image: url(spritesmith-main-4.png); - background-position: -637px -1334px; + background-position: -757px -512px; width: 90px; - height: 90px; + height: 96px; } -.slim_armor_special_summer2015Mage { +.broad_armor_mystery_201407 { background-image: url(spritesmith-main-4.png); background-position: -728px -1334px; width: 90px; height: 90px; } -.slim_armor_special_summer2015Rogue { +.head_mystery_201407 { background-image: url(spritesmith-main-4.png); - background-position: -206px 0px; + background-position: -819px -1334px; + width: 90px; + height: 90px; +} +.shop_armor_mystery_201407 { + background-image: url(spritesmith-main-4.png); + background-position: -1670px -82px; + width: 40px; + height: 40px; +} +.shop_head_mystery_201407 { + background-image: url(spritesmith-main-4.png); + background-position: -1670px -41px; + width: 40px; + height: 40px; +} +.slim_armor_mystery_201407 { + background-image: url(spritesmith-main-4.png); + background-position: -1092px -1334px; + width: 90px; + height: 90px; +} +.broad_armor_mystery_201408 { + background-image: url(spritesmith-main-4.png); + background-position: -1183px -1334px; + width: 90px; + height: 90px; +} +.head_mystery_201408 { + background-image: url(spritesmith-main-4.png); + background-position: -1274px -1334px; + width: 90px; + height: 90px; +} +.shop_armor_mystery_201408 { + background-image: url(spritesmith-main-4.png); + background-position: -1670px 0px; + width: 40px; + height: 40px; +} +.shop_head_mystery_201408 { + background-image: url(spritesmith-main-4.png); + background-position: -1599px -1598px; + width: 40px; + height: 40px; +} +.slim_armor_mystery_201408 { + background-image: url(spritesmith-main-4.png); + background-position: -1488px -273px; + width: 90px; + height: 90px; +} +.broad_armor_mystery_201409 { + background-image: url(spritesmith-main-4.png); + background-position: -1488px -364px; + width: 90px; + height: 90px; +} +.headAccessory_mystery_201409 { + background-image: url(spritesmith-main-4.png); + background-position: -1488px -455px; + width: 90px; + height: 90px; +} +.shop_armor_mystery_201409 { + background-image: url(spritesmith-main-4.png); + background-position: -1558px -1598px; + width: 40px; + height: 40px; +} +.shop_headAccessory_mystery_201409 { + background-image: url(spritesmith-main-4.png); + background-position: -1517px -1598px; + width: 40px; + height: 40px; +} +.slim_armor_mystery_201409 { + background-image: url(spritesmith-main-4.png); + background-position: -1488px -728px; + width: 90px; + height: 90px; +} +.back_mystery_201410 { + background-image: url(spritesmith-main-4.png); + background-position: -848px -91px; + width: 93px; + height: 90px; +} +.broad_armor_mystery_201410 { + background-image: url(spritesmith-main-4.png); + background-position: -848px 0px; + width: 93px; + height: 90px; +} +.shop_armor_mystery_201410 { + background-image: url(spritesmith-main-4.png); + background-position: -1476px -1598px; + width: 40px; + height: 40px; +} +.shop_back_mystery_201410 { + background-image: url(spritesmith-main-4.png); + background-position: -1107px -1598px; + width: 40px; + height: 40px; +} +.slim_armor_mystery_201410 { + background-image: url(spritesmith-main-4.png); + background-position: -701px -697px; + width: 93px; + height: 90px; +} +.head_mystery_201411 { + background-image: url(spritesmith-main-4.png); + background-position: 0px -1425px; + width: 90px; + height: 90px; +} +.shop_head_mystery_201411 { + background-image: url(spritesmith-main-4.png); + background-position: -1066px -1598px; + width: 40px; + height: 40px; +} +.shop_weapon_mystery_201411 { + background-image: url(spritesmith-main-4.png); + background-position: -1025px -1598px; + width: 40px; + height: 40px; +} +.weapon_mystery_201411 { + background-image: url(spritesmith-main-4.png); + background-position: -728px -1425px; + width: 90px; + height: 90px; +} +.broad_armor_mystery_201412 { + background-image: url(spritesmith-main-4.png); + background-position: -819px -1425px; + width: 90px; + height: 90px; +} +.head_mystery_201412 { + background-image: url(spritesmith-main-4.png); + background-position: -910px -1425px; + width: 90px; + height: 90px; +} +.shop_armor_mystery_201412 { + background-image: url(spritesmith-main-4.png); + background-position: -984px -1598px; + width: 40px; + height: 40px; +} +.shop_head_mystery_201412 { + background-image: url(spritesmith-main-4.png); + background-position: -943px -1598px; + width: 40px; + height: 40px; +} +.slim_armor_mystery_201412 { + background-image: url(spritesmith-main-4.png); + background-position: -1183px -1425px; + width: 90px; + height: 90px; +} +.broad_armor_mystery_201501 { + background-image: url(spritesmith-main-4.png); + background-position: -1456px -1425px; + width: 90px; + height: 90px; +} +.head_mystery_201501 { + background-image: url(spritesmith-main-4.png); + background-position: -1579px 0px; + width: 90px; + height: 90px; +} +.shop_armor_mystery_201501 { + background-image: url(spritesmith-main-4.png); + background-position: -902px -1598px; + width: 40px; + height: 40px; +} +.shop_head_mystery_201501 { + background-image: url(spritesmith-main-4.png); + background-position: -861px -1598px; + width: 40px; + height: 40px; +} +.slim_armor_mystery_201501 { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -273px; + width: 90px; + height: 90px; +} +.headAccessory_mystery_201502 { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -364px; + width: 90px; + height: 90px; +} +.shop_headAccessory_mystery_201502 { + background-image: url(spritesmith-main-4.png); + background-position: -820px -1598px; + width: 40px; + height: 40px; +} +.shop_weapon_mystery_201502 { + background-image: url(spritesmith-main-4.png); + background-position: -1435px -1557px; + width: 40px; + height: 40px; +} +.weapon_mystery_201502 { + background-image: url(spritesmith-main-4.png); + background-position: 0px -788px; + width: 90px; + height: 90px; +} +.broad_armor_mystery_201503 { + background-image: url(spritesmith-main-4.png); + background-position: -91px -788px; + width: 90px; + height: 90px; +} +.eyewear_mystery_201503 { + background-image: url(spritesmith-main-4.png); + background-position: -182px -788px; + width: 90px; + height: 90px; +} +.shop_armor_mystery_201503 { + background-image: url(spritesmith-main-4.png); + background-position: -1394px -1557px; + width: 40px; + height: 40px; +} +.shop_eyewear_mystery_201503 { + background-image: url(spritesmith-main-4.png); + background-position: -1353px -1557px; + width: 40px; + height: 40px; +} +.slim_armor_mystery_201503 { + background-image: url(spritesmith-main-4.png); + background-position: -455px -788px; + width: 90px; + height: 90px; +} +.back_mystery_201504 { + background-image: url(spritesmith-main-4.png); + background-position: -546px -788px; + width: 90px; + height: 90px; +} +.broad_armor_mystery_201504 { + background-image: url(spritesmith-main-4.png); + background-position: -637px -788px; + width: 90px; + height: 90px; +} +.shop_armor_mystery_201504 { + background-image: url(spritesmith-main-4.png); + background-position: -1312px -1557px; + width: 40px; + height: 40px; +} +.shop_back_mystery_201504 { + background-image: url(spritesmith-main-4.png); + background-position: -1271px -1557px; + width: 40px; + height: 40px; +} +.slim_armor_mystery_201504 { + background-image: url(spritesmith-main-4.png); + background-position: -942px 0px; + width: 90px; + height: 90px; +} +.head_mystery_201505 { + background-image: url(spritesmith-main-4.png); + background-position: -942px -91px; + width: 90px; + height: 90px; +} +.shop_head_mystery_201505 { + background-image: url(spritesmith-main-4.png); + background-position: -1230px -1557px; + width: 40px; + height: 40px; +} +.shop_weapon_mystery_201505 { + background-image: url(spritesmith-main-4.png); + background-position: -1189px -1557px; + width: 40px; + height: 40px; +} +.weapon_mystery_201505 { + background-image: url(spritesmith-main-4.png); + background-position: -942px -364px; + width: 90px; + height: 90px; +} +.broad_armor_mystery_201506 { + background-image: url(spritesmith-main-4.png); + background-position: -364px -485px; + width: 90px; + height: 105px; +} +.eyewear_mystery_201506 { + background-image: url(spritesmith-main-4.png); + background-position: -455px -485px; + width: 90px; + height: 105px; +} +.shop_armor_mystery_201506 { + background-image: url(spritesmith-main-4.png); + background-position: -1148px -1557px; + width: 40px; + height: 40px; +} +.shop_eyewear_mystery_201506 { + background-image: url(spritesmith-main-4.png); + background-position: -1107px -1557px; + width: 40px; + height: 40px; +} +.slim_armor_mystery_201506 { + background-image: url(spritesmith-main-4.png); + background-position: -666px -424px; + width: 90px; + height: 105px; +} +.back_mystery_201507 { + background-image: url(spritesmith-main-4.png); + background-position: 0px -591px; + width: 90px; + height: 105px; +} +.eyewear_mystery_201507 { + background-image: url(spritesmith-main-4.png); + background-position: -91px -591px; + width: 90px; + height: 105px; +} +.shop_back_mystery_201507 { + background-image: url(spritesmith-main-4.png); + background-position: -1066px -1557px; + width: 40px; + height: 40px; +} +.shop_eyewear_mystery_201507 { + background-image: url(spritesmith-main-4.png); + background-position: -1025px -1557px; + width: 40px; + height: 40px; +} +.broad_armor_mystery_201508 { + background-image: url(spritesmith-main-4.png); + background-position: -848px -182px; + width: 93px; + height: 90px; +} +.head_mystery_201508 { + background-image: url(spritesmith-main-4.png); + background-position: -848px -273px; + width: 93px; + height: 90px; +} +.shop_armor_mystery_201508 { + background-image: url(spritesmith-main-4.png); + background-position: -984px -1557px; + width: 40px; + height: 40px; +} +.shop_head_mystery_201508 { + background-image: url(spritesmith-main-4.png); + background-position: -943px -1557px; + width: 40px; + height: 40px; +} +.slim_armor_mystery_201508 { + background-image: url(spritesmith-main-4.png); + background-position: -848px -455px; + width: 93px; + height: 90px; +} +.broad_armor_mystery_201509 { + background-image: url(spritesmith-main-4.png); + background-position: -910px -879px; + width: 90px; + height: 90px; +} +.head_mystery_201509 { + background-image: url(spritesmith-main-4.png); + background-position: -1033px 0px; + width: 90px; + height: 90px; +} +.shop_armor_mystery_201509 { + background-image: url(spritesmith-main-4.png); + background-position: -902px -1557px; + width: 40px; + height: 40px; +} +.shop_head_mystery_201509 { + background-image: url(spritesmith-main-4.png); + background-position: -861px -1557px; + width: 40px; + height: 40px; +} +.slim_armor_mystery_201509 { + background-image: url(spritesmith-main-4.png); + background-position: -1033px -273px; + width: 90px; + height: 90px; +} +.back_mystery_201510 { + background-image: url(spritesmith-main-4.png); + background-position: -448px -394px; + width: 105px; + height: 90px; +} +.headAccessory_mystery_201510 { + background-image: url(spritesmith-main-4.png); + background-position: -848px -364px; + width: 93px; + height: 90px; +} +.shop_back_mystery_201510 { + background-image: url(spritesmith-main-4.png); + background-position: -820px -1557px; + width: 40px; + height: 40px; +} +.shop_headAccessory_mystery_201510 { + background-image: url(spritesmith-main-4.png); + background-position: -779px -1557px; + width: 40px; + height: 40px; +} +.broad_armor_mystery_201511 { + background-image: url(spritesmith-main-4.png); + background-position: -1033px -728px; + width: 90px; + height: 90px; +} +.head_mystery_201511 { + background-image: url(spritesmith-main-4.png); + background-position: -1033px -819px; + width: 90px; + height: 90px; +} +.shop_armor_mystery_201511 { + background-image: url(spritesmith-main-4.png); + background-position: -1622px -637px; + width: 42px; + height: 42px; +} +.shop_head_mystery_201511 { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -637px; + width: 42px; + height: 42px; +} +.slim_armor_mystery_201511 { + background-image: url(spritesmith-main-4.png); + background-position: -182px -970px; + width: 90px; + height: 90px; +} +.broad_armor_mystery_301404 { + background-image: url(spritesmith-main-4.png); + background-position: -273px -970px; + width: 90px; + height: 90px; +} +.eyewear_mystery_301404 { + background-image: url(spritesmith-main-4.png); + background-position: -364px -970px; + width: 90px; + height: 90px; +} +.head_mystery_301404 { + background-image: url(spritesmith-main-4.png); + background-position: -455px -970px; + width: 90px; + height: 90px; +} +.shop_armor_mystery_301404 { + background-image: url(spritesmith-main-4.png); + background-position: -656px -1557px; + width: 40px; + height: 40px; +} +.shop_eyewear_mystery_301404 { + background-image: url(spritesmith-main-4.png); + background-position: -615px -1557px; + width: 40px; + height: 40px; +} +.shop_head_mystery_301404 { + background-image: url(spritesmith-main-4.png); + background-position: -574px -1557px; + width: 40px; + height: 40px; +} +.shop_weapon_mystery_301404 { + background-image: url(spritesmith-main-4.png); + background-position: -533px -1557px; + width: 40px; + height: 40px; +} +.slim_armor_mystery_301404 { + background-image: url(spritesmith-main-4.png); + background-position: -910px -970px; + width: 90px; + height: 90px; +} +.weapon_mystery_301404 { + background-image: url(spritesmith-main-4.png); + background-position: -1001px -970px; + width: 90px; + height: 90px; +} +.eyewear_mystery_301405 { + background-image: url(spritesmith-main-4.png); + background-position: -1124px 0px; + width: 90px; + height: 90px; +} +.headAccessory_mystery_301405 { + background-image: url(spritesmith-main-4.png); + background-position: -1124px -91px; + width: 90px; + height: 90px; +} +.head_mystery_301405 { + background-image: url(spritesmith-main-4.png); + background-position: -1124px -182px; + width: 90px; + height: 90px; +} +.shield_mystery_301405 { + background-image: url(spritesmith-main-4.png); + background-position: -1124px -273px; + width: 90px; + height: 90px; +} +.shop_eyewear_mystery_301405 { + background-image: url(spritesmith-main-4.png); + background-position: -205px -1557px; + width: 40px; + height: 40px; +} +.shop_headAccessory_mystery_301405 { + background-image: url(spritesmith-main-4.png); + background-position: -164px -1557px; + width: 40px; + height: 40px; +} +.shop_head_mystery_301405 { + background-image: url(spritesmith-main-4.png); + background-position: -123px -1557px; + width: 40px; + height: 40px; +} +.shop_shield_mystery_301405 { + background-image: url(spritesmith-main-4.png); + background-position: -82px -1557px; + width: 40px; + height: 40px; +} +.broad_armor_special_spring2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: -1124px -728px; + width: 90px; + height: 90px; +} +.broad_armor_special_spring2015Mage { + background-image: url(spritesmith-main-4.png); + background-position: -1124px -819px; + width: 90px; + height: 90px; +} +.broad_armor_special_spring2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: -1124px -910px; + width: 90px; + height: 90px; +} +.broad_armor_special_spring2015Warrior { + background-image: url(spritesmith-main-4.png); + background-position: 0px -1061px; + width: 90px; + height: 90px; +} +.broad_armor_special_springHealer { + background-image: url(spritesmith-main-4.png); + background-position: -91px -1061px; + width: 90px; + height: 90px; +} +.broad_armor_special_springMage { + background-image: url(spritesmith-main-4.png); + background-position: -182px -1061px; + width: 90px; + height: 90px; +} +.broad_armor_special_springRogue { + background-image: url(spritesmith-main-4.png); + background-position: -273px -1061px; + width: 90px; + height: 90px; +} +.broad_armor_special_springWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -364px -1061px; + width: 90px; + height: 90px; +} +.headAccessory_special_spring2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: -455px -1061px; + width: 90px; + height: 90px; +} +.headAccessory_special_spring2015Mage { + background-image: url(spritesmith-main-4.png); + background-position: -546px -1061px; + width: 90px; + height: 90px; +} +.headAccessory_special_spring2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: -637px -1061px; + width: 90px; + height: 90px; +} +.headAccessory_special_spring2015Warrior { + background-image: url(spritesmith-main-4.png); + background-position: -728px -1061px; + width: 90px; + height: 90px; +} +.headAccessory_special_springHealer { + background-image: url(spritesmith-main-4.png); + background-position: -819px -1061px; + width: 90px; + height: 90px; +} +.headAccessory_special_springMage { + background-image: url(spritesmith-main-4.png); + background-position: -910px -1061px; + width: 90px; + height: 90px; +} +.headAccessory_special_springRogue { + background-image: url(spritesmith-main-4.png); + background-position: -1001px -1061px; + width: 90px; + height: 90px; +} +.headAccessory_special_springWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -1092px -1061px; + width: 90px; + height: 90px; +} +.head_special_spring2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: -1215px 0px; + width: 90px; + height: 90px; +} +.head_special_spring2015Mage { + background-image: url(spritesmith-main-4.png); + background-position: -1215px -91px; + width: 90px; + height: 90px; +} +.head_special_spring2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: -1215px -182px; + width: 90px; + height: 90px; +} +.head_special_spring2015Warrior { + background-image: url(spritesmith-main-4.png); + background-position: -1215px -273px; + width: 90px; + height: 90px; +} +.head_special_springHealer { + background-image: url(spritesmith-main-4.png); + background-position: -1215px -364px; + width: 90px; + height: 90px; +} +.head_special_springMage { + background-image: url(spritesmith-main-4.png); + background-position: -1215px -455px; + width: 90px; + height: 90px; +} +.head_special_springRogue { + background-image: url(spritesmith-main-4.png); + background-position: -1215px -546px; + width: 90px; + height: 90px; +} +.head_special_springWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -1215px -637px; + width: 90px; + height: 90px; +} +.shield_special_spring2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: -1215px -728px; + width: 90px; + height: 90px; +} +.shield_special_spring2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: -1215px -819px; + width: 90px; + height: 90px; +} +.shield_special_spring2015Warrior { + background-image: url(spritesmith-main-4.png); + background-position: -1215px -910px; + width: 90px; + height: 90px; +} +.shield_special_springHealer { + background-image: url(spritesmith-main-4.png); + background-position: -1215px -1001px; + width: 90px; + height: 90px; +} +.shield_special_springRogue { + background-image: url(spritesmith-main-4.png); + background-position: 0px -1152px; + width: 90px; + height: 90px; +} +.shield_special_springWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -91px -1152px; + width: 90px; + height: 90px; +} +.shop_armor_special_spring2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: -41px -1557px; + width: 40px; + height: 40px; +} +.shop_armor_special_spring2015Mage { + background-image: url(spritesmith-main-4.png); + background-position: 0px -1557px; + width: 40px; + height: 40px; +} +.shop_armor_special_spring2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: -1599px -1516px; + width: 40px; + height: 40px; +} +.shop_armor_special_spring2015Warrior { + background-image: url(spritesmith-main-4.png); + background-position: -1558px -1516px; + width: 40px; + height: 40px; +} +.shop_armor_special_springHealer { + background-image: url(spritesmith-main-4.png); + background-position: -1517px -1516px; + width: 40px; + height: 40px; +} +.shop_armor_special_springMage { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -680px; + width: 40px; + height: 40px; +} +.shop_armor_special_springRogue { + background-image: url(spritesmith-main-4.png); + background-position: -1435px -1516px; + width: 40px; + height: 40px; +} +.shop_armor_special_springWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -1394px -1516px; + width: 40px; + height: 40px; +} +.shop_headAccessory_special_spring2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: -1353px -1516px; + width: 40px; + height: 40px; +} +.shop_headAccessory_special_spring2015Mage { + background-image: url(spritesmith-main-4.png); + background-position: -1312px -1516px; + width: 40px; + height: 40px; +} +.shop_headAccessory_special_spring2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: -1271px -1516px; + width: 40px; + height: 40px; +} +.shop_headAccessory_special_spring2015Warrior { + background-image: url(spritesmith-main-4.png); + background-position: -1230px -1516px; + width: 40px; + height: 40px; +} +.shop_headAccessory_special_springHealer { + background-image: url(spritesmith-main-4.png); + background-position: -1189px -1516px; + width: 40px; + height: 40px; +} +.shop_headAccessory_special_springMage { + background-image: url(spritesmith-main-4.png); + background-position: -1148px -1516px; + width: 40px; + height: 40px; +} +.shop_headAccessory_special_springRogue { + background-image: url(spritesmith-main-4.png); + background-position: -1107px -1516px; + width: 40px; + height: 40px; +} +.shop_headAccessory_special_springWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -1066px -1516px; + width: 40px; + height: 40px; +} +.shop_head_special_spring2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: -1025px -1516px; + width: 40px; + height: 40px; +} +.shop_head_special_spring2015Mage { + background-image: url(spritesmith-main-4.png); + background-position: -984px -1516px; + width: 40px; + height: 40px; +} +.shop_head_special_spring2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: -943px -1516px; + width: 40px; + height: 40px; +} +.shop_head_special_spring2015Warrior { + background-image: url(spritesmith-main-4.png); + background-position: -848px -728px; + width: 40px; + height: 40px; +} +.shop_head_special_springHealer { + background-image: url(spritesmith-main-4.png); + background-position: -983px -819px; + width: 40px; + height: 40px; +} +.shop_head_special_springMage { + background-image: url(spritesmith-main-4.png); + background-position: -942px -819px; + width: 40px; + height: 40px; +} +.shop_head_special_springRogue { + background-image: url(spritesmith-main-4.png); + background-position: -1074px -910px; + width: 40px; + height: 40px; +} +.shop_head_special_springWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -1033px -910px; + width: 40px; + height: 40px; +} +.shop_shield_special_spring2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: -1165px -1001px; + width: 40px; + height: 40px; +} +.shop_shield_special_spring2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: -1124px -1001px; + width: 40px; + height: 40px; +} +.shop_shield_special_spring2015Warrior { + background-image: url(spritesmith-main-4.png); + background-position: -1256px -1092px; + width: 40px; + height: 40px; +} +.shop_shield_special_springHealer { + background-image: url(spritesmith-main-4.png); + background-position: -1215px -1092px; + width: 40px; + height: 40px; +} +.shop_shield_special_springRogue { + background-image: url(spritesmith-main-4.png); + background-position: -1347px -1183px; + width: 40px; + height: 40px; +} +.shop_shield_special_springWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -1306px -1183px; + width: 40px; + height: 40px; +} +.shop_weapon_special_spring2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: -1438px -1274px; + width: 40px; + height: 40px; +} +.shop_weapon_special_spring2015Mage { + background-image: url(spritesmith-main-4.png); + background-position: -1397px -1274px; + width: 40px; + height: 40px; +} +.shop_weapon_special_spring2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: -1529px -1365px; + width: 40px; + height: 40px; +} +.shop_weapon_special_spring2015Warrior { + background-image: url(spritesmith-main-4.png); + background-position: -1488px -1365px; + width: 40px; + height: 40px; +} +.shop_weapon_special_springHealer { + background-image: url(spritesmith-main-4.png); + background-position: -1620px -1459px; + width: 40px; + height: 40px; +} +.shop_weapon_special_springMage { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -1459px; + width: 40px; + height: 40px; +} +.shop_weapon_special_springRogue { + background-image: url(spritesmith-main-4.png); + background-position: -1620px -1418px; + width: 40px; + height: 40px; +} +.shop_weapon_special_springWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -1418px; + width: 40px; + height: 40px; +} +.slim_armor_special_spring2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: -1183px -1243px; + width: 90px; + height: 90px; +} +.slim_armor_special_spring2015Mage { + background-image: url(spritesmith-main-4.png); + background-position: -1274px -1243px; + width: 90px; + height: 90px; +} +.slim_armor_special_spring2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: -1397px 0px; + width: 90px; + height: 90px; +} +.slim_armor_special_spring2015Warrior { + background-image: url(spritesmith-main-4.png); + background-position: -1397px -91px; + width: 90px; + height: 90px; +} +.slim_armor_special_springHealer { + background-image: url(spritesmith-main-4.png); + background-position: -1397px -182px; + width: 90px; + height: 90px; +} +.slim_armor_special_springMage { + background-image: url(spritesmith-main-4.png); + background-position: -1397px -273px; + width: 90px; + height: 90px; +} +.slim_armor_special_springRogue { + background-image: url(spritesmith-main-4.png); + background-position: -1397px -364px; + width: 90px; + height: 90px; +} +.slim_armor_special_springWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -1397px -455px; + width: 90px; + height: 90px; +} +.weapon_special_spring2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: -1397px -546px; + width: 90px; + height: 90px; +} +.weapon_special_spring2015Mage { + background-image: url(spritesmith-main-4.png); + background-position: -1397px -637px; + width: 90px; + height: 90px; +} +.weapon_special_spring2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: -1397px -728px; + width: 90px; + height: 90px; +} +.weapon_special_spring2015Warrior { + background-image: url(spritesmith-main-4.png); + background-position: -1397px -819px; + width: 90px; + height: 90px; +} +.weapon_special_springHealer { + background-image: url(spritesmith-main-4.png); + background-position: -1397px -910px; + width: 90px; + height: 90px; +} +.weapon_special_springMage { + background-image: url(spritesmith-main-4.png); + background-position: -1397px -1001px; + width: 90px; + height: 90px; +} +.weapon_special_springRogue { + background-image: url(spritesmith-main-4.png); + background-position: -1397px -1092px; + width: 90px; + height: 90px; +} +.weapon_special_springWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -1397px -1183px; + width: 90px; + height: 90px; +} +.body_special_summer2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: 0px -1334px; + width: 90px; + height: 90px; +} +.body_special_summer2015Mage { + background-image: url(spritesmith-main-4.png); + background-position: -91px -1334px; + width: 90px; + height: 90px; +} +.body_special_summer2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: -206px -197px; width: 102px; height: 105px; } -.slim_armor_special_summer2015Warrior { +.body_special_summer2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -273px -591px; + background-position: -546px -485px; width: 90px; height: 105px; } -.slim_armor_special_summerHealer { +.body_special_summerHealer { background-image: url(spritesmith-main-4.png); - background-position: -364px -591px; + background-position: -666px 0px; width: 90px; height: 105px; } -.slim_armor_special_summerMage { +.body_special_summerMage { background-image: url(spritesmith-main-4.png); - background-position: -455px -591px; + background-position: -666px -106px; width: 90px; height: 105px; } -.slim_armor_special_summerRogue { +.broad_armor_special_summer2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: -546px -1334px; + width: 90px; + height: 90px; +} +.broad_armor_special_summer2015Mage { + background-image: url(spritesmith-main-4.png); + background-position: -637px -1334px; + width: 90px; + height: 90px; +} +.broad_armor_special_summer2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: 0px -91px; + width: 102px; + height: 105px; +} +.broad_armor_special_summer2015Warrior { + background-image: url(spritesmith-main-4.png); + background-position: -666px -212px; + width: 90px; + height: 105px; +} +.broad_armor_special_summerHealer { + background-image: url(spritesmith-main-4.png); + background-position: -666px -318px; + width: 90px; + height: 105px; +} +.broad_armor_special_summerMage { + background-image: url(spritesmith-main-4.png); + background-position: -554px -364px; + width: 90px; + height: 105px; +} +.broad_armor_special_summerRogue { + background-image: url(spritesmith-main-4.png); + background-position: -112px -394px; + width: 111px; + height: 90px; +} +.broad_armor_special_summerWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -224px -394px; + width: 111px; + height: 90px; +} +.eyewear_special_summerRogue { background-image: url(spritesmith-main-4.png); background-position: -336px -394px; width: 111px; height: 90px; } +.eyewear_special_summerWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -554px 0px; + width: 111px; + height: 90px; +} +.head_special_summer2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: -1488px 0px; + width: 90px; + height: 90px; +} +.head_special_summer2015Mage { + background-image: url(spritesmith-main-4.png); + background-position: -1488px -91px; + width: 90px; + height: 90px; +} +.head_special_summer2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: -103px -197px; + width: 102px; + height: 105px; +} +.head_special_summer2015Warrior { + background-image: url(spritesmith-main-4.png); + background-position: -455px -591px; + width: 90px; + height: 105px; +} +.head_special_summerHealer { + background-image: url(spritesmith-main-4.png); + background-position: -546px -591px; + width: 90px; + height: 105px; +} +.head_special_summerMage { + background-image: url(spritesmith-main-4.png); + background-position: -637px -591px; + width: 90px; + height: 105px; +} +.head_special_summerRogue { + background-image: url(spritesmith-main-4.png); + background-position: -442px -182px; + width: 111px; + height: 90px; +} +.head_special_summerWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -554px -273px; + width: 111px; + height: 90px; +} +.Healer_Summer { + background-image: url(spritesmith-main-4.png); + background-position: -757px -106px; + width: 90px; + height: 105px; +} +.Mage_Summer { + background-image: url(spritesmith-main-4.png); + background-position: -757px -212px; + width: 90px; + height: 105px; +} +.SummerRogue14 { + background-image: url(spritesmith-main-4.png); + background-position: -554px -91px; + width: 111px; + height: 90px; +} +.SummerWarrior14 { + background-image: url(spritesmith-main-4.png); + background-position: 0px -303px; + width: 111px; + height: 90px; +} +.shield_special_summer2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: -1488px -1092px; + width: 90px; + height: 90px; +} +.shield_special_summer2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: -224px 0px; + width: 102px; + height: 105px; +} +.shield_special_summer2015Warrior { + background-image: url(spritesmith-main-4.png); + background-position: -273px -485px; + width: 90px; + height: 105px; +} +.shield_special_summerHealer { + background-image: url(spritesmith-main-4.png); + background-position: -182px -485px; + width: 90px; + height: 105px; +} +.shield_special_summerRogue { + background-image: url(spritesmith-main-4.png); + background-position: -442px -91px; + width: 111px; + height: 90px; +} +.shield_special_summerWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -442px 0px; + width: 111px; + height: 90px; +} +.shop_armor_special_summer2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: -1620px -1377px; + width: 40px; + height: 40px; +} +.shop_armor_special_summer2015Mage { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -1377px; + width: 40px; + height: 40px; +} +.shop_armor_special_summer2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: -1620px -1336px; + width: 40px; + height: 40px; +} +.shop_armor_special_summer2015Warrior { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -1336px; + width: 40px; + height: 40px; +} +.shop_armor_special_summerHealer { + background-image: url(spritesmith-main-4.png); + background-position: -1620px -1295px; + width: 40px; + height: 40px; +} +.shop_armor_special_summerMage { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -1295px; + width: 40px; + height: 40px; +} +.shop_armor_special_summerRogue { + background-image: url(spritesmith-main-4.png); + background-position: -1620px -1254px; + width: 40px; + height: 40px; +} +.shop_armor_special_summerWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -1254px; + width: 40px; + height: 40px; +} +.shop_body_special_summer2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: -1620px -1213px; + width: 40px; + height: 40px; +} +.shop_body_special_summer2015Mage { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -1213px; + width: 40px; + height: 40px; +} +.shop_body_special_summer2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: -1620px -1172px; + width: 40px; + height: 40px; +} +.shop_body_special_summer2015Warrior { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -1172px; + width: 40px; + height: 40px; +} +.shop_body_special_summerHealer { + background-image: url(spritesmith-main-4.png); + background-position: -1620px -1131px; + width: 40px; + height: 40px; +} +.shop_body_special_summerMage { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -1131px; + width: 40px; + height: 40px; +} +.shop_eyewear_special_summerRogue { + background-image: url(spritesmith-main-4.png); + background-position: -1620px -1090px; + width: 40px; + height: 40px; +} +.shop_eyewear_special_summerWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -1090px; + width: 40px; + height: 40px; +} +.shop_head_special_summer2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: -1620px -1049px; + width: 40px; + height: 40px; +} +.shop_head_special_summer2015Mage { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -1049px; + width: 40px; + height: 40px; +} +.shop_head_special_summer2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: -1620px -1008px; + width: 40px; + height: 40px; +} +.shop_head_special_summer2015Warrior { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -1008px; + width: 40px; + height: 40px; +} +.shop_head_special_summerHealer { + background-image: url(spritesmith-main-4.png); + background-position: -1620px -967px; + width: 40px; + height: 40px; +} +.shop_head_special_summerMage { + background-image: url(spritesmith-main-4.png); + background-position: -697px -1557px; + width: 40px; + height: 40px; +} +.shop_head_special_summerRogue { + background-image: url(spritesmith-main-4.png); + background-position: -1476px -1516px; + width: 40px; + height: 40px; +} +.shop_head_special_summerWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -738px -1557px; + width: 40px; + height: 40px; +} +.shop_shield_special_summer2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: -1620px -680px; + width: 40px; + height: 40px; +} +.shop_shield_special_summer2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -721px; + width: 40px; + height: 40px; +} +.shop_shield_special_summer2015Warrior { + background-image: url(spritesmith-main-4.png); + background-position: -1620px -721px; + width: 40px; + height: 40px; +} +.shop_shield_special_summerHealer { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -762px; + width: 40px; + height: 40px; +} +.shop_shield_special_summerRogue { + background-image: url(spritesmith-main-4.png); + background-position: -1620px -762px; + width: 40px; + height: 40px; +} +.shop_shield_special_summerWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -803px; + width: 40px; + height: 40px; +} +.shop_weapon_special_summer2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: -1620px -803px; + width: 40px; + height: 40px; +} +.shop_weapon_special_summer2015Mage { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -844px; + width: 40px; + height: 40px; +} +.shop_weapon_special_summer2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: -1620px -844px; + width: 40px; + height: 40px; +} +.shop_weapon_special_summer2015Warrior { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -885px; + width: 40px; + height: 40px; +} +.shop_weapon_special_summerHealer { + background-image: url(spritesmith-main-4.png); + background-position: -1620px -885px; + width: 40px; + height: 40px; +} +.shop_weapon_special_summerMage { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -926px; + width: 40px; + height: 40px; +} +.shop_weapon_special_summerRogue { + background-image: url(spritesmith-main-4.png); + background-position: -1620px -926px; + width: 40px; + height: 40px; +} +.shop_weapon_special_summerWarrior { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -967px; + width: 40px; + height: 40px; +} +.slim_armor_special_summer2015Healer { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -546px; + width: 90px; + height: 90px; +} +.slim_armor_special_summer2015Mage { + background-image: url(spritesmith-main-4.png); + background-position: -1579px -455px; + width: 90px; + height: 90px; +} +.slim_armor_special_summer2015Rogue { + background-image: url(spritesmith-main-4.png); + background-position: 0px -197px; + width: 102px; + height: 105px; +} +.slim_armor_special_summer2015Warrior { + background-image: url(spritesmith-main-4.png); + background-position: 0px -485px; + width: 90px; + height: 105px; +} +.slim_armor_special_summerHealer { + background-image: url(spritesmith-main-4.png); + background-position: -91px -485px; + width: 90px; + height: 105px; +} +.slim_armor_special_summerMage { + background-image: url(spritesmith-main-4.png); + background-position: -757px 0px; + width: 90px; + height: 105px; +} +.slim_armor_special_summerRogue { + background-image: url(spritesmith-main-4.png); + background-position: -442px -273px; + width: 111px; + height: 90px; +} .slim_armor_special_summerWarrior { background-image: url(spritesmith-main-4.png); - background-position: -536px 0px; + background-position: 0px -394px; width: 111px; height: 90px; } .weapon_special_summer2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -1365px -1334px; + background-position: -1365px -1425px; width: 90px; height: 90px; } .weapon_special_summer2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -1473px 0px; + background-position: -1274px -1425px; width: 90px; height: 90px; } .weapon_special_summer2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -103px 0px; + background-position: -121px 0px; width: 102px; height: 105px; } .weapon_special_summer2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -536px -288px; + background-position: -182px -591px; width: 90px; height: 105px; } .weapon_special_summerHealer { background-image: url(spritesmith-main-4.png); - background-position: -536px -182px; + background-position: -273px -591px; width: 90px; height: 105px; } .weapon_special_summerMage { background-image: url(spritesmith-main-4.png); - background-position: -273px -485px; + background-position: -364px -591px; width: 90px; height: 105px; } @@ -1416,1639 +1818,1093 @@ } .weapon_special_summerWarrior { background-image: url(spritesmith-main-4.png); - background-position: -424px -91px; + background-position: -224px -303px; width: 111px; height: 90px; } .broad_armor_special_candycane { background-image: url(spritesmith-main-4.png); - background-position: -1473px -637px; + background-position: -637px -1425px; width: 90px; height: 90px; } .broad_armor_special_ski { background-image: url(spritesmith-main-4.png); - background-position: -1473px -728px; + background-position: -546px -1425px; width: 90px; height: 90px; } .broad_armor_special_snowflake { background-image: url(spritesmith-main-4.png); - background-position: -1473px -819px; + background-position: -455px -1425px; width: 90px; height: 90px; } .broad_armor_special_winter2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -1473px -910px; + background-position: -364px -1425px; width: 90px; height: 90px; } .broad_armor_special_winter2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -1473px -1001px; + background-position: -273px -1425px; width: 90px; height: 90px; } .broad_armor_special_winter2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -311px -697px; + background-position: -507px -697px; width: 96px; height: 90px; } .broad_armor_special_winter2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -1473px -1183px; + background-position: -1001px -1243px; width: 90px; height: 90px; } .broad_armor_special_yeti { background-image: url(spritesmith-main-4.png); - background-position: -1473px -1274px; + background-position: -910px -1243px; width: 90px; height: 90px; } .head_special_candycane { background-image: url(spritesmith-main-4.png); - background-position: 0px -1425px; + background-position: -819px -1243px; width: 90px; height: 90px; } .head_special_nye { background-image: url(spritesmith-main-4.png); - background-position: -91px -1425px; + background-position: -728px -1243px; width: 90px; height: 90px; } .head_special_nye2014 { background-image: url(spritesmith-main-4.png); - background-position: -182px -1425px; + background-position: -637px -1243px; width: 90px; height: 90px; } .head_special_ski { background-image: url(spritesmith-main-4.png); - background-position: -273px -1425px; + background-position: -546px -1243px; width: 90px; height: 90px; } .head_special_snowflake { background-image: url(spritesmith-main-4.png); - background-position: -364px -1425px; + background-position: -455px -1243px; width: 90px; height: 90px; } .head_special_winter2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -830px -364px; + background-position: -364px -1243px; width: 90px; height: 90px; } .head_special_winter2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -546px -1425px; + background-position: -273px -1243px; width: 90px; height: 90px; } .head_special_winter2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -505px -697px; + background-position: -604px -697px; width: 96px; height: 90px; } .head_special_winter2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -728px -1425px; + background-position: -91px -1243px; width: 90px; height: 90px; } .head_special_yeti { background-image: url(spritesmith-main-4.png); - background-position: -819px -1425px; + background-position: 0px -1243px; width: 90px; height: 90px; } .shield_special_ski { background-image: url(spritesmith-main-4.png); - background-position: -536px -394px; + background-position: 0px -697px; width: 104px; height: 90px; } .shield_special_snowflake { background-image: url(spritesmith-main-4.png); - background-position: -1001px -1425px; + background-position: -1306px -1001px; width: 90px; height: 90px; } .shield_special_winter2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -1092px -1425px; + background-position: -1306px -910px; width: 90px; height: 90px; } .shield_special_winter2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -602px -697px; + background-position: -121px -106px; width: 96px; height: 90px; } .shield_special_winter2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -1274px -1425px; + background-position: -1306px -728px; width: 90px; height: 90px; } .shield_special_yeti { background-image: url(spritesmith-main-4.png); - background-position: -1365px -1425px; + background-position: -1306px -637px; width: 90px; height: 90px; } .shop_armor_special_candycane { background-image: url(spritesmith-main-4.png); - background-position: -1564px -887px; + background-position: -889px -728px; width: 40px; height: 40px; } .shop_armor_special_ski { background-image: url(spritesmith-main-4.png); - background-position: -1605px -846px; + background-position: -757px -609px; width: 40px; height: 40px; } .shop_armor_special_snowflake { background-image: url(spritesmith-main-4.png); - background-position: -1655px -861px; + background-position: -798px -609px; width: 40px; height: 40px; } .shop_armor_special_winter2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -1189px -1516px; + background-position: -757px -650px; width: 40px; height: 40px; } .shop_armor_special_winter2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -1655px -902px; + background-position: -798px -650px; width: 40px; height: 40px; } .shop_armor_special_winter2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -1655px -943px; + background-position: -666px -530px; width: 40px; height: 40px; } .shop_armor_special_winter2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -1655px -984px; + background-position: -707px -530px; width: 40px; height: 40px; } .shop_armor_special_yeti { background-image: url(spritesmith-main-4.png); - background-position: -1564px -354px; + background-position: -795px -697px; width: 40px; height: 40px; } .shop_head_special_candycane { background-image: url(spritesmith-main-4.png); - background-position: -1605px -354px; + background-position: -795px -738px; width: 40px; height: 40px; } .shop_head_special_nye { background-image: url(spritesmith-main-4.png); - background-position: -1564px -395px; + background-position: 0px -1516px; width: 40px; height: 40px; } .shop_head_special_nye2014 { background-image: url(spritesmith-main-4.png); - background-position: -1605px -395px; + background-position: -41px -1516px; width: 40px; height: 40px; } .shop_head_special_ski { background-image: url(spritesmith-main-4.png); - background-position: -1564px -436px; + background-position: -82px -1516px; width: 40px; height: 40px; } .shop_head_special_snowflake { background-image: url(spritesmith-main-4.png); - background-position: -1605px -436px; + background-position: -123px -1516px; width: 40px; height: 40px; } .shop_head_special_winter2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -1564px -477px; + background-position: -164px -1516px; width: 40px; height: 40px; } .shop_head_special_winter2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -1605px -477px; + background-position: -205px -1516px; width: 40px; height: 40px; } .shop_head_special_winter2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -1564px -518px; + background-position: -246px -1516px; width: 40px; height: 40px; } .shop_head_special_winter2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -1605px -518px; + background-position: -287px -1516px; width: 40px; height: 40px; } .shop_head_special_yeti { background-image: url(spritesmith-main-4.png); - background-position: -1564px -559px; + background-position: -328px -1516px; width: 40px; height: 40px; } .shop_shield_special_ski { background-image: url(spritesmith-main-4.png); - background-position: -1605px -559px; + background-position: -369px -1516px; width: 40px; height: 40px; } .shop_shield_special_snowflake { background-image: url(spritesmith-main-4.png); - background-position: -1564px -600px; + background-position: -410px -1516px; width: 40px; height: 40px; } .shop_shield_special_winter2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -1605px -600px; + background-position: -451px -1516px; width: 40px; height: 40px; } .shop_shield_special_winter2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -1564px -641px; + background-position: -492px -1516px; width: 40px; height: 40px; } .shop_shield_special_winter2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -1605px -641px; + background-position: -533px -1516px; width: 40px; height: 40px; } .shop_shield_special_yeti { background-image: url(spritesmith-main-4.png); - background-position: -1564px -682px; + background-position: -574px -1516px; width: 40px; height: 40px; } .shop_weapon_special_candycane { background-image: url(spritesmith-main-4.png); - background-position: -1605px -682px; + background-position: -615px -1516px; width: 40px; height: 40px; } .shop_weapon_special_ski { background-image: url(spritesmith-main-4.png); - background-position: -1564px -723px; + background-position: -656px -1516px; width: 40px; height: 40px; } .shop_weapon_special_snowflake { background-image: url(spritesmith-main-4.png); - background-position: -1605px -723px; + background-position: -697px -1516px; width: 40px; height: 40px; } .shop_weapon_special_winter2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -1564px -764px; + background-position: -738px -1516px; width: 40px; height: 40px; } .shop_weapon_special_winter2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -1605px -764px; + background-position: -779px -1516px; width: 40px; height: 40px; } .shop_weapon_special_winter2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -1564px -805px; + background-position: -820px -1516px; width: 40px; height: 40px; } .shop_weapon_special_winter2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -1605px -805px; + background-position: -861px -1516px; width: 40px; height: 40px; } .shop_weapon_special_yeti { background-image: url(spritesmith-main-4.png); - background-position: -1564px -846px; + background-position: -902px -1516px; width: 40px; height: 40px; } .slim_armor_special_candycane { background-image: url(spritesmith-main-4.png); - background-position: -1564px 0px; + background-position: -1306px -546px; width: 90px; height: 90px; } .slim_armor_special_ski { background-image: url(spritesmith-main-4.png); - background-position: -1456px -1425px; + background-position: -1306px -455px; width: 90px; height: 90px; } .slim_armor_special_snowflake { background-image: url(spritesmith-main-4.png); - background-position: -546px -1334px; + background-position: -1306px -364px; width: 90px; height: 90px; } .slim_armor_special_winter2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -455px -1334px; + background-position: -1306px -273px; width: 90px; height: 90px; } .slim_armor_special_winter2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -364px -1334px; + background-position: -1306px -182px; width: 90px; height: 90px; } .slim_armor_special_winter2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -830px 0px; + background-position: -313px -697px; width: 96px; height: 90px; } .slim_armor_special_winter2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -182px -1334px; + background-position: -1306px 0px; width: 90px; height: 90px; } .slim_armor_special_yeti { background-image: url(spritesmith-main-4.png); - background-position: -91px -1334px; + background-position: -1183px -1152px; width: 90px; height: 90px; } .weapon_special_candycane { background-image: url(spritesmith-main-4.png); - background-position: 0px -1334px; + background-position: -1092px -1152px; width: 90px; height: 90px; } .weapon_special_ski { background-image: url(spritesmith-main-4.png); - background-position: -1382px -1183px; + background-position: -1001px -1152px; width: 90px; height: 90px; } .weapon_special_snowflake { background-image: url(spritesmith-main-4.png); - background-position: -1382px -1092px; + background-position: -910px -1152px; width: 90px; height: 90px; } .weapon_special_winter2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -1382px -1001px; + background-position: -819px -1152px; width: 90px; height: 90px; } .weapon_special_winter2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -1382px -910px; + background-position: -728px -1152px; width: 90px; height: 90px; } .weapon_special_winter2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -699px -697px; + background-position: -410px -697px; width: 96px; height: 90px; } .weapon_special_winter2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -1382px -728px; + background-position: -546px -1152px; width: 90px; height: 90px; } .weapon_special_yeti { background-image: url(spritesmith-main-4.png); - background-position: -1382px -637px; + background-position: -455px -1152px; width: 90px; height: 90px; } .back_special_wondercon_black { background-image: url(spritesmith-main-4.png); - background-position: -1382px -546px; + background-position: -364px -1152px; width: 90px; height: 90px; } .back_special_wondercon_red { background-image: url(spritesmith-main-4.png); - background-position: -1382px -455px; + background-position: -273px -1152px; width: 90px; height: 90px; } .body_special_wondercon_black { background-image: url(spritesmith-main-4.png); - background-position: -1382px -364px; + background-position: -182px -1152px; width: 90px; height: 90px; } .body_special_wondercon_gold { background-image: url(spritesmith-main-4.png); - background-position: -1382px -273px; + background-position: -1124px -637px; width: 90px; height: 90px; } .body_special_wondercon_red { background-image: url(spritesmith-main-4.png); - background-position: -1382px -182px; + background-position: -1124px -546px; width: 90px; height: 90px; } .eyewear_special_wondercon_black { background-image: url(spritesmith-main-4.png); - background-position: -1382px -91px; + background-position: -1124px -455px; width: 90px; height: 90px; } .eyewear_special_wondercon_red { background-image: url(spritesmith-main-4.png); - background-position: -1382px 0px; + background-position: -1124px -364px; width: 90px; height: 90px; } .shop_back_special_wondercon_black { background-image: url(spritesmith-main-4.png); - background-position: -1564px -1338px; + background-position: -246px -1557px; width: 40px; height: 40px; } .shop_back_special_wondercon_red { background-image: url(spritesmith-main-4.png); - background-position: -1605px -1338px; + background-position: -287px -1557px; width: 40px; height: 40px; } .shop_body_special_wondercon_black { background-image: url(spritesmith-main-4.png); - background-position: -1564px -1379px; + background-position: -328px -1557px; width: 40px; height: 40px; } .shop_body_special_wondercon_gold { background-image: url(spritesmith-main-4.png); - background-position: -1605px -1379px; + background-position: -369px -1557px; width: 40px; height: 40px; } .shop_body_special_wondercon_red { background-image: url(spritesmith-main-4.png); - background-position: -1564px -1420px; + background-position: -410px -1557px; width: 40px; height: 40px; } .shop_eyewear_special_wondercon_black { background-image: url(spritesmith-main-4.png); - background-position: -1605px -1420px; + background-position: -451px -1557px; width: 40px; height: 40px; } .shop_eyewear_special_wondercon_red { background-image: url(spritesmith-main-4.png); - background-position: -1564px -1461px; + background-position: -492px -1557px; width: 40px; height: 40px; } .head_0 { background-image: url(spritesmith-main-4.png); - background-position: -1274px -1243px; + background-position: -819px -970px; width: 90px; height: 90px; } .customize-option.head_0 { background-image: url(spritesmith-main-4.png); - background-position: -1299px -1258px; + background-position: -844px -985px; width: 60px; height: 60px; } .head_healer_1 { background-image: url(spritesmith-main-4.png); - background-position: -1183px -1243px; + background-position: -728px -970px; width: 90px; height: 90px; } .head_healer_2 { background-image: url(spritesmith-main-4.png); - background-position: -1092px -1243px; + background-position: -637px -970px; width: 90px; height: 90px; } .head_healer_3 { background-image: url(spritesmith-main-4.png); - background-position: -1001px -1243px; + background-position: -546px -970px; width: 90px; height: 90px; } .head_healer_4 { background-image: url(spritesmith-main-4.png); - background-position: -910px -1243px; + background-position: -91px -970px; width: 90px; height: 90px; } .head_healer_5 { background-image: url(spritesmith-main-4.png); - background-position: -819px -1243px; + background-position: 0px -970px; width: 90px; height: 90px; } .head_rogue_1 { background-image: url(spritesmith-main-4.png); - background-position: -728px -1243px; + background-position: -1033px -637px; width: 90px; height: 90px; } .head_rogue_2 { background-image: url(spritesmith-main-4.png); - background-position: -637px -1243px; + background-position: -1033px -546px; width: 90px; height: 90px; } .head_rogue_3 { background-image: url(spritesmith-main-4.png); - background-position: -546px -1243px; + background-position: -1033px -182px; width: 90px; height: 90px; } .head_rogue_4 { background-image: url(spritesmith-main-4.png); - background-position: -455px -1243px; + background-position: -1033px -91px; width: 90px; height: 90px; } .head_rogue_5 { background-image: url(spritesmith-main-4.png); - background-position: -364px -1243px; + background-position: -728px -879px; width: 90px; height: 90px; } .head_special_2 { background-image: url(spritesmith-main-4.png); - background-position: -273px -1243px; + background-position: -637px -879px; width: 90px; height: 90px; } .head_special_fireCoralCirclet { background-image: url(spritesmith-main-4.png); - background-position: -182px -1243px; + background-position: -364px -879px; width: 90px; height: 90px; } .head_warrior_1 { background-image: url(spritesmith-main-4.png); - background-position: -91px -1243px; + background-position: -273px -879px; width: 90px; height: 90px; } .head_warrior_2 { background-image: url(spritesmith-main-4.png); - background-position: 0px -1243px; + background-position: -942px -728px; width: 90px; height: 90px; } .head_warrior_3 { background-image: url(spritesmith-main-4.png); - background-position: -1291px -1092px; + background-position: -942px -637px; width: 90px; height: 90px; } .head_warrior_4 { background-image: url(spritesmith-main-4.png); - background-position: -1291px -1001px; + background-position: -942px -273px; width: 90px; height: 90px; } .head_warrior_5 { background-image: url(spritesmith-main-4.png); - background-position: -1109px -910px; + background-position: -942px -182px; width: 90px; height: 90px; } .head_wizard_1 { background-image: url(spritesmith-main-4.png); - background-position: -1109px -819px; + background-position: -819px -788px; width: 90px; height: 90px; } .head_wizard_2 { background-image: url(spritesmith-main-4.png); - background-position: -1109px -728px; + background-position: -728px -788px; width: 90px; height: 90px; } .head_wizard_3 { background-image: url(spritesmith-main-4.png); - background-position: -1109px -637px; + background-position: -364px -788px; width: 90px; height: 90px; } .head_wizard_4 { background-image: url(spritesmith-main-4.png); - background-position: -1109px -546px; + background-position: -273px -788px; width: 90px; height: 90px; } .head_wizard_5 { background-image: url(spritesmith-main-4.png); - background-position: -1109px -455px; + background-position: -848px -637px; width: 90px; height: 90px; } .shop_head_healer_1 { background-image: url(spritesmith-main-4.png); - background-position: -336px -344px; + background-position: -1476px -1557px; width: 40px; height: 40px; } .shop_head_healer_2 { background-image: url(spritesmith-main-4.png); - background-position: -377px -344px; + background-position: -1517px -1557px; width: 40px; height: 40px; } .shop_head_healer_3 { background-image: url(spritesmith-main-4.png); - background-position: -448px -394px; + background-position: -1558px -1557px; width: 40px; height: 40px; } .shop_head_healer_4 { background-image: url(spritesmith-main-4.png); - background-position: -489px -394px; + background-position: -1599px -1557px; width: 40px; height: 40px; } .shop_head_healer_5 { background-image: url(spritesmith-main-4.png); - background-position: -448px -435px; + background-position: 0px -1598px; width: 40px; height: 40px; } .shop_head_rogue_1 { background-image: url(spritesmith-main-4.png); - background-position: -489px -435px; + background-position: -41px -1598px; width: 40px; height: 40px; } .shop_head_rogue_2 { background-image: url(spritesmith-main-4.png); - background-position: 0px -1516px; + background-position: -82px -1598px; width: 40px; height: 40px; } .shop_head_rogue_3 { background-image: url(spritesmith-main-4.png); - background-position: -41px -1516px; + background-position: -123px -1598px; width: 40px; height: 40px; } .shop_head_rogue_4 { background-image: url(spritesmith-main-4.png); - background-position: -82px -1516px; + background-position: -164px -1598px; width: 40px; height: 40px; } .shop_head_rogue_5 { background-image: url(spritesmith-main-4.png); - background-position: -123px -1516px; + background-position: -205px -1598px; width: 40px; height: 40px; } .shop_head_special_0 { background-image: url(spritesmith-main-4.png); - background-position: -164px -1516px; + background-position: -246px -1598px; width: 40px; height: 40px; } .shop_head_special_1 { background-image: url(spritesmith-main-4.png); - background-position: -205px -1516px; + background-position: -287px -1598px; width: 40px; height: 40px; } .shop_head_special_2 { background-image: url(spritesmith-main-4.png); - background-position: -246px -1516px; + background-position: -328px -1598px; width: 40px; height: 40px; } .shop_head_special_fireCoralCirclet { background-image: url(spritesmith-main-4.png); - background-position: -287px -1516px; + background-position: -369px -1598px; width: 40px; height: 40px; } .shop_head_warrior_1 { background-image: url(spritesmith-main-4.png); - background-position: -328px -1516px; + background-position: -410px -1598px; width: 40px; height: 40px; } .shop_head_warrior_2 { background-image: url(spritesmith-main-4.png); - background-position: -369px -1516px; + background-position: -451px -1598px; width: 40px; height: 40px; } .shop_head_warrior_3 { background-image: url(spritesmith-main-4.png); - background-position: -410px -1516px; + background-position: -492px -1598px; width: 40px; height: 40px; } .shop_head_warrior_4 { background-image: url(spritesmith-main-4.png); - background-position: -451px -1516px; + background-position: -533px -1598px; width: 40px; height: 40px; } .shop_head_warrior_5 { background-image: url(spritesmith-main-4.png); - background-position: -492px -1516px; + background-position: -574px -1598px; width: 40px; height: 40px; } .shop_head_wizard_1 { background-image: url(spritesmith-main-4.png); - background-position: -533px -1516px; + background-position: -615px -1598px; width: 40px; height: 40px; } .shop_head_wizard_2 { background-image: url(spritesmith-main-4.png); - background-position: -574px -1516px; + background-position: -656px -1598px; width: 40px; height: 40px; } .shop_head_wizard_3 { background-image: url(spritesmith-main-4.png); - background-position: -615px -1516px; + background-position: -697px -1598px; width: 40px; height: 40px; } .shop_head_wizard_4 { background-image: url(spritesmith-main-4.png); - background-position: -656px -1516px; + background-position: -738px -1598px; width: 40px; height: 40px; } .shop_head_wizard_5 { background-image: url(spritesmith-main-4.png); - background-position: -697px -1516px; + background-position: -779px -1598px; width: 40px; height: 40px; } .headAccessory_special_bearEars { background-image: url(spritesmith-main-4.png); - background-position: -1109px -364px; + background-position: -848px -546px; width: 90px; height: 90px; } .customize-option.headAccessory_special_bearEars { background-image: url(spritesmith-main-4.png); - background-position: -1134px -379px; + background-position: -873px -561px; width: 60px; height: 60px; } .headAccessory_special_cactusEars { background-image: url(spritesmith-main-4.png); - background-position: -1109px -273px; + background-position: -1579px -182px; width: 90px; height: 90px; } .customize-option.headAccessory_special_cactusEars { background-image: url(spritesmith-main-4.png); - background-position: -1134px -288px; + background-position: -1604px -197px; width: 60px; height: 60px; } .headAccessory_special_foxEars { background-image: url(spritesmith-main-4.png); - background-position: -1109px -182px; + background-position: -1579px -91px; width: 90px; height: 90px; } .customize-option.headAccessory_special_foxEars { background-image: url(spritesmith-main-4.png); - background-position: -1134px -197px; + background-position: -1604px -106px; width: 60px; height: 60px; } .headAccessory_special_lionEars { background-image: url(spritesmith-main-4.png); - background-position: -1109px -91px; + background-position: -1092px -1425px; width: 90px; height: 90px; } .customize-option.headAccessory_special_lionEars { background-image: url(spritesmith-main-4.png); - background-position: -1134px -106px; + background-position: -1117px -1440px; width: 60px; height: 60px; } .headAccessory_special_pandaEars { background-image: url(spritesmith-main-4.png); - background-position: -1109px 0px; + background-position: -1001px -1425px; width: 90px; height: 90px; } .customize-option.headAccessory_special_pandaEars { background-image: url(spritesmith-main-4.png); - background-position: -1134px -15px; + background-position: -1026px -1440px; width: 60px; height: 60px; } .headAccessory_special_pigEars { background-image: url(spritesmith-main-4.png); - background-position: -1001px -970px; + background-position: -182px -1425px; width: 90px; height: 90px; } .customize-option.headAccessory_special_pigEars { background-image: url(spritesmith-main-4.png); - background-position: -1026px -985px; + background-position: -207px -1440px; width: 60px; height: 60px; } .headAccessory_special_tigerEars { background-image: url(spritesmith-main-4.png); - background-position: -910px -970px; + background-position: -91px -1425px; width: 90px; height: 90px; } .customize-option.headAccessory_special_tigerEars { background-image: url(spritesmith-main-4.png); - background-position: -935px -985px; + background-position: -116px -1440px; width: 60px; height: 60px; } .headAccessory_special_wolfEars { background-image: url(spritesmith-main-4.png); - background-position: -819px -970px; + background-position: -1488px -1183px; width: 90px; height: 90px; } .customize-option.headAccessory_special_wolfEars { background-image: url(spritesmith-main-4.png); - background-position: -844px -985px; + background-position: -1513px -1198px; width: 60px; height: 60px; } .shop_headAccessory_special_bearEars { background-image: url(spritesmith-main-4.png); - background-position: -1066px -1516px; + background-position: -1148px -1598px; width: 40px; height: 40px; } .shop_headAccessory_special_cactusEars { background-image: url(spritesmith-main-4.png); - background-position: -1107px -1516px; + background-position: -1189px -1598px; width: 40px; height: 40px; } .shop_headAccessory_special_foxEars { background-image: url(spritesmith-main-4.png); - background-position: -1148px -1516px; + background-position: -1230px -1598px; width: 40px; height: 40px; } .shop_headAccessory_special_lionEars { background-image: url(spritesmith-main-4.png); - background-position: -1655px -1025px; + background-position: -1271px -1598px; width: 40px; height: 40px; } .shop_headAccessory_special_pandaEars { background-image: url(spritesmith-main-4.png); - background-position: -1230px -1516px; + background-position: -1312px -1598px; width: 40px; height: 40px; } .shop_headAccessory_special_pigEars { background-image: url(spritesmith-main-4.png); - background-position: -1271px -1516px; + background-position: -1353px -1598px; width: 40px; height: 40px; } .shop_headAccessory_special_tigerEars { background-image: url(spritesmith-main-4.png); - background-position: -1312px -1516px; + background-position: -1394px -1598px; width: 40px; height: 40px; } .shop_headAccessory_special_wolfEars { background-image: url(spritesmith-main-4.png); - background-position: -1353px -1516px; + background-position: -1435px -1598px; width: 40px; height: 40px; } .shield_healer_1 { background-image: url(spritesmith-main-4.png); - background-position: -728px -970px; + background-position: -1488px -1001px; width: 90px; height: 90px; } .shield_healer_2 { background-image: url(spritesmith-main-4.png); - background-position: -637px -970px; + background-position: -1488px -637px; width: 90px; height: 90px; } .shield_healer_3 { background-image: url(spritesmith-main-4.png); - background-position: -546px -970px; + background-position: -1488px -546px; width: 90px; height: 90px; } .shield_healer_4 { background-image: url(spritesmith-main-4.png); - background-position: -455px -970px; + background-position: -1488px -182px; width: 90px; height: 90px; } .shield_healer_5 { background-image: url(spritesmith-main-4.png); - background-position: -364px -970px; + background-position: -1365px -1334px; width: 90px; height: 90px; } .shield_rogue_0 { background-image: url(spritesmith-main-4.png); - background-position: -273px -970px; + background-position: -1001px -1334px; width: 90px; height: 90px; } .shield_rogue_1 { background-image: url(spritesmith-main-4.png); - background-position: 0px -697px; + background-position: -209px -697px; width: 103px; height: 90px; } .shield_rogue_2 { background-image: url(spritesmith-main-4.png); - background-position: -104px -697px; + background-position: -105px -697px; width: 103px; height: 90px; } .shield_rogue_3 { background-image: url(spritesmith-main-4.png); - background-position: 0px -212px; + background-position: -327px -91px; width: 114px; height: 90px; } .shield_rogue_4 { background-image: url(spritesmith-main-4.png); - background-position: -408px -697px; + background-position: -224px -106px; width: 96px; height: 90px; } .shield_rogue_5 { background-image: url(spritesmith-main-4.png); - background-position: -115px -212px; + background-position: -327px -182px; width: 114px; height: 90px; } .shield_rogue_6 { background-image: url(spritesmith-main-4.png); - background-position: -309px 0px; + background-position: -327px 0px; width: 114px; height: 90px; } .shield_special_1 { background-image: url(spritesmith-main-4.png); - background-position: -1018px -546px; + background-position: -1033px -364px; width: 90px; height: 90px; } .shield_special_goldenknight { background-image: url(spritesmith-main-4.png); - background-position: -224px -394px; + background-position: -554px -182px; width: 111px; height: 90px; } .shield_special_moonpearlShield { background-image: url(spritesmith-main-4.png); - background-position: -1018px -364px; + background-position: -91px -879px; width: 90px; height: 90px; } .shield_warrior_1 { background-image: url(spritesmith-main-4.png); - background-position: -1018px -273px; + background-position: -1488px -1274px; width: 90px; height: 90px; } .shield_warrior_2 { background-image: url(spritesmith-main-4.png); - background-position: -1018px -182px; + background-position: -1488px -910px; width: 90px; height: 90px; } .shield_warrior_3 { background-image: url(spritesmith-main-4.png); - background-position: -1018px -91px; + background-position: -1488px -819px; width: 90px; height: 90px; } .shield_warrior_4 { background-image: url(spritesmith-main-4.png); - background-position: -1018px 0px; + background-position: -182px -1334px; width: 90px; height: 90px; } .shield_warrior_5 { background-image: url(spritesmith-main-4.png); - background-position: -910px -879px; + background-position: -1092px -1243px; width: 90px; height: 90px; } .shop_shield_healer_1 { background-image: url(spritesmith-main-4.png); - background-position: -574px -1557px; + background-position: -1670px -656px; width: 40px; height: 40px; } .shop_shield_healer_2 { background-image: url(spritesmith-main-4.png); - background-position: -615px -1557px; + background-position: -1670px -697px; width: 40px; height: 40px; } .shop_shield_healer_3 { background-image: url(spritesmith-main-4.png); - background-position: -656px -1557px; + background-position: -1670px -738px; width: 40px; height: 40px; } -.shop_shield_healer_4 { - background-image: url(spritesmith-main-4.png); - background-position: -697px -1557px; - width: 40px; - height: 40px; -} -.shop_shield_healer_5 { - background-image: url(spritesmith-main-4.png); - background-position: -738px -1557px; - width: 40px; - height: 40px; -} -.shop_shield_rogue_0 { - background-image: url(spritesmith-main-4.png); - background-position: -779px -1557px; - width: 40px; - height: 40px; -} -.shop_shield_rogue_1 { - background-image: url(spritesmith-main-4.png); - background-position: -820px -1557px; - width: 40px; - height: 40px; -} -.shop_shield_rogue_2 { - background-image: url(spritesmith-main-4.png); - background-position: -861px -1557px; - width: 40px; - height: 40px; -} -.shop_shield_rogue_3 { - background-image: url(spritesmith-main-4.png); - background-position: -902px -1557px; - width: 40px; - height: 40px; -} -.shop_shield_rogue_4 { - background-image: url(spritesmith-main-4.png); - background-position: -943px -1557px; - width: 40px; - height: 40px; -} -.shop_shield_rogue_5 { - background-image: url(spritesmith-main-4.png); - background-position: -984px -1557px; - width: 40px; - height: 40px; -} -.shop_shield_rogue_6 { - background-image: url(spritesmith-main-4.png); - background-position: -1025px -1557px; - width: 40px; - height: 40px; -} -.shop_shield_special_0 { - background-image: url(spritesmith-main-4.png); - background-position: -1066px -1557px; - width: 40px; - height: 40px; -} -.shop_shield_special_1 { - background-image: url(spritesmith-main-4.png); - background-position: -1107px -1557px; - width: 40px; - height: 40px; -} -.shop_shield_special_goldenknight { - background-image: url(spritesmith-main-4.png); - background-position: -1148px -1557px; - width: 40px; - height: 40px; -} -.shop_shield_special_moonpearlShield { - background-image: url(spritesmith-main-4.png); - background-position: -1189px -1557px; - width: 40px; - height: 40px; -} -.shop_shield_warrior_1 { - background-image: url(spritesmith-main-4.png); - background-position: -1230px -1557px; - width: 40px; - height: 40px; -} -.shop_shield_warrior_2 { - background-image: url(spritesmith-main-4.png); - background-position: -1271px -1557px; - width: 40px; - height: 40px; -} -.shop_shield_warrior_3 { - background-image: url(spritesmith-main-4.png); - background-position: -1312px -1557px; - width: 40px; - height: 40px; -} -.shop_shield_warrior_4 { - background-image: url(spritesmith-main-4.png); - background-position: -1353px -1557px; - width: 40px; - height: 40px; -} -.shop_shield_warrior_5 { - background-image: url(spritesmith-main-4.png); - background-position: -1394px -1557px; - width: 40px; - height: 40px; -} -.shop_weapon_healer_0 { - background-image: url(spritesmith-main-4.png); - background-position: -1435px -1557px; - width: 40px; - height: 40px; -} -.shop_weapon_healer_1 { - background-image: url(spritesmith-main-4.png); - background-position: -1476px -1557px; - width: 40px; - height: 40px; -} -.shop_weapon_healer_2 { - background-image: url(spritesmith-main-4.png); - background-position: -1517px -1557px; - width: 40px; - height: 40px; -} -.shop_weapon_healer_3 { - background-image: url(spritesmith-main-4.png); - background-position: -1558px -1557px; - width: 40px; - height: 40px; -} -.shop_weapon_healer_4 { - background-image: url(spritesmith-main-4.png); - background-position: -1599px -1557px; - width: 40px; - height: 40px; -} -.shop_weapon_healer_5 { - background-image: url(spritesmith-main-4.png); - background-position: 0px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_healer_6 { - background-image: url(spritesmith-main-4.png); - background-position: -41px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_rogue_0 { - background-image: url(spritesmith-main-4.png); - background-position: -82px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_rogue_1 { - background-image: url(spritesmith-main-4.png); - background-position: -123px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_rogue_2 { - background-image: url(spritesmith-main-4.png); - background-position: -164px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_rogue_3 { - background-image: url(spritesmith-main-4.png); - background-position: -205px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_rogue_4 { - background-image: url(spritesmith-main-4.png); - background-position: -246px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_rogue_5 { - background-image: url(spritesmith-main-4.png); - background-position: -287px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_rogue_6 { - background-image: url(spritesmith-main-4.png); - background-position: -328px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_special_0 { - background-image: url(spritesmith-main-4.png); - background-position: -369px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_special_1 { - background-image: url(spritesmith-main-4.png); - background-position: -410px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_special_2 { - background-image: url(spritesmith-main-4.png); - background-position: -451px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_special_3 { - background-image: url(spritesmith-main-4.png); - background-position: -492px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_special_critical { - background-image: url(spritesmith-main-4.png); - background-position: -533px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_special_tridentOfCrashingTides { - background-image: url(spritesmith-main-4.png); - background-position: -574px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_warrior_0 { - background-image: url(spritesmith-main-4.png); - background-position: -615px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_warrior_1 { - background-image: url(spritesmith-main-4.png); - background-position: -656px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_warrior_2 { - background-image: url(spritesmith-main-4.png); - background-position: -697px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_warrior_3 { - background-image: url(spritesmith-main-4.png); - background-position: -738px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_warrior_4 { - background-image: url(spritesmith-main-4.png); - background-position: -779px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_warrior_5 { - background-image: url(spritesmith-main-4.png); - background-position: -820px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_warrior_6 { - background-image: url(spritesmith-main-4.png); - background-position: -861px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_wizard_0 { - background-image: url(spritesmith-main-4.png); - background-position: -902px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_wizard_1 { - background-image: url(spritesmith-main-4.png); - background-position: -943px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_wizard_2 { - background-image: url(spritesmith-main-4.png); - background-position: -984px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_wizard_3 { - background-image: url(spritesmith-main-4.png); - background-position: -1025px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_wizard_4 { - background-image: url(spritesmith-main-4.png); - background-position: -1066px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_wizard_5 { - background-image: url(spritesmith-main-4.png); - background-position: -1107px -1598px; - width: 40px; - height: 40px; -} -.shop_weapon_wizard_6 { - background-image: url(spritesmith-main-4.png); - background-position: -1148px -1598px; - width: 40px; - height: 40px; -} -.weapon_healer_0 { - background-image: url(spritesmith-main-4.png); - background-position: -819px -879px; - width: 90px; - height: 90px; -} -.weapon_healer_1 { - background-image: url(spritesmith-main-4.png); - background-position: -728px -879px; - width: 90px; - height: 90px; -} -.weapon_healer_2 { - background-image: url(spritesmith-main-4.png); - background-position: -637px -879px; - width: 90px; - height: 90px; -} -.weapon_healer_3 { - background-image: url(spritesmith-main-4.png); - background-position: -546px -879px; - width: 90px; - height: 90px; -} -.weapon_healer_4 { - background-image: url(spritesmith-main-4.png); - background-position: -830px -637px; - width: 90px; - height: 90px; -} -.weapon_healer_5 { - background-image: url(spritesmith-main-4.png); - background-position: -830px -546px; - width: 90px; - height: 90px; -} -.weapon_healer_6 { - background-image: url(spritesmith-main-4.png); - background-position: -830px -455px; - width: 90px; - height: 90px; -} -.weapon_rogue_0 { - background-image: url(spritesmith-main-4.png); - background-position: -1183px -1425px; - width: 90px; - height: 90px; -} -.weapon_rogue_1 { - background-image: url(spritesmith-main-4.png); - background-position: -1473px -273px; - width: 90px; - height: 90px; -} -.weapon_rogue_2 { - background-image: url(spritesmith-main-4.png); - background-position: -1473px -182px; - width: 90px; - height: 90px; -} -.weapon_rogue_3 { - background-image: url(spritesmith-main-4.png); - background-position: -1473px -91px; - width: 90px; - height: 90px; -} -.weapon_rogue_4 { - background-image: url(spritesmith-main-4.png); - background-position: -1274px -1334px; - width: 90px; - height: 90px; -} -.weapon_rogue_5 { - background-image: url(spritesmith-main-4.png); - background-position: -819px -1334px; - width: 90px; - height: 90px; -} -.weapon_rogue_6 { - background-image: url(spritesmith-main-4.png); - background-position: -273px -1334px; - width: 90px; - height: 90px; -} -.weapon_special_1 { - background-image: url(spritesmith-main-4.png); - background-position: -208px -697px; - width: 102px; - height: 90px; -} -.weapon_special_2 { - background-image: url(spritesmith-main-4.png); - background-position: -1291px -637px; - width: 90px; - height: 90px; -} -.weapon_special_3 { - background-image: url(spritesmith-main-4.png); - background-position: -1291px -273px; - width: 90px; - height: 90px; -} -.weapon_special_tridentOfCrashingTides { - background-image: url(spritesmith-main-4.png); - background-position: -1291px -182px; - width: 90px; - height: 90px; -} -.weapon_warrior_0 { - background-image: url(spritesmith-main-4.png); - background-position: -1092px -1152px; - width: 90px; - height: 90px; -} -.weapon_warrior_1 { - background-image: url(spritesmith-main-4.png); - background-position: -1001px -1152px; - width: 90px; - height: 90px; -} -.weapon_warrior_2 { - background-image: url(spritesmith-main-4.png); - background-position: -455px -1152px; - width: 90px; - height: 90px; -} -.weapon_warrior_3 { - background-image: url(spritesmith-main-4.png); - background-position: -364px -1152px; - width: 90px; - height: 90px; -} -.weapon_warrior_4 { - background-image: url(spritesmith-main-4.png); - background-position: -91px -1152px; - width: 90px; - height: 90px; -} -.weapon_warrior_5 { - background-image: url(spritesmith-main-4.png); - background-position: 0px -1152px; - width: 90px; - height: 90px; -} -.weapon_warrior_6 { - background-image: url(spritesmith-main-4.png); - background-position: -1200px -546px; - width: 90px; - height: 90px; -} -.weapon_wizard_0 { - background-image: url(spritesmith-main-4.png); - background-position: -1200px -455px; - width: 90px; - height: 90px; -} -.weapon_wizard_1 { - background-image: url(spritesmith-main-4.png); - background-position: -1018px -819px; - width: 90px; - height: 90px; -} -.weapon_wizard_2 { - background-image: url(spritesmith-main-4.png); - background-position: -1018px -728px; - width: 90px; - height: 90px; -} -.weapon_wizard_3 { - background-image: url(spritesmith-main-4.png); - background-position: -1291px -819px; - width: 90px; - height: 90px; -} -.weapon_wizard_4 { - background-image: url(spritesmith-main-4.png); - background-position: -1291px -728px; - width: 90px; - height: 90px; -} -.weapon_wizard_5 { - background-image: url(spritesmith-main-4.png); - background-position: -1291px 0px; - width: 90px; - height: 90px; -} -.weapon_wizard_6 { - background-image: url(spritesmith-main-4.png); - background-position: -1183px -1152px; - width: 90px; - height: 90px; -} -.GrimReaper { - background-image: url(spritesmith-main-4.png); - background-position: -1564px -91px; - width: 57px; - height: 66px; -} -.Pet_Currency_Gem { - background-image: url(spritesmith-main-4.png); - background-position: -1564px -314px; - width: 45px; - height: 39px; -} -.Pet_Currency_Gem1x { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -1093px; - width: 15px; - height: 13px; -} -.Pet_Currency_Gem2x { - background-image: url(spritesmith-main-4.png); - background-position: -1655px -1066px; - width: 30px; - height: 26px; -} -.PixelPaw-Gold { - background-image: url(spritesmith-main-4.png); - background-position: -1564px -262px; - width: 51px; - height: 51px; -} -.PixelPaw { - background-image: url(spritesmith-main-4.png); - background-position: -1564px -210px; - width: 51px; - height: 51px; -} -.PixelPaw002 { - background-image: url(spritesmith-main-4.png); - background-position: -1564px -158px; - width: 51px; - height: 51px; -} diff --git a/common/dist/sprites/spritesmith-main-4.png b/common/dist/sprites/spritesmith-main-4.png index 0e82e7466d..a8d273407f 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 4ae35af2e5..8e3c776394 100644 --- a/common/dist/sprites/spritesmith-main-5.css +++ b/common/dist/sprites/spritesmith-main-5.css @@ -1,750 +1,1284 @@ +.shop_shield_healer_4 { + background-image: url(spritesmith-main-5.png); + background-position: -1525px -367px; + width: 40px; + height: 40px; +} +.shop_shield_healer_5 { + background-image: url(spritesmith-main-5.png); + background-position: -1711px -1377px; + width: 40px; + height: 40px; +} +.shop_shield_rogue_0 { + background-image: url(spritesmith-main-5.png); + background-position: -1711px -1459px; + width: 40px; + height: 40px; +} +.shop_shield_rogue_1 { + background-image: url(spritesmith-main-5.png); + background-position: -1711px -1623px; + width: 40px; + height: 40px; +} +.shop_shield_rogue_2 { + background-image: url(spritesmith-main-5.png); + background-position: -1525px -326px; + width: 40px; + height: 40px; +} +.shop_shield_rogue_3 { + background-image: url(spritesmith-main-5.png); + background-position: -421px -1704px; + width: 40px; + height: 40px; +} +.shop_shield_rogue_4 { + background-image: url(spritesmith-main-5.png); + background-position: -503px -1704px; + width: 40px; + height: 40px; +} +.shop_shield_rogue_5 { + background-image: url(spritesmith-main-5.png); + background-position: -667px -1704px; + width: 40px; + height: 40px; +} +.shop_shield_rogue_6 { + background-image: url(spritesmith-main-5.png); + background-position: -708px -1704px; + width: 40px; + height: 40px; +} +.shop_shield_special_0 { + background-image: url(spritesmith-main-5.png); + background-position: -749px -1704px; + width: 40px; + height: 40px; +} +.shop_shield_special_1 { + background-image: url(spritesmith-main-5.png); + background-position: -790px -1704px; + width: 40px; + height: 40px; +} +.shop_shield_special_goldenknight { + background-image: url(spritesmith-main-5.png); + background-position: -831px -1704px; + width: 40px; + height: 40px; +} +.shop_shield_special_moonpearlShield { + background-image: url(spritesmith-main-5.png); + background-position: -1760px -82px; + width: 40px; + height: 40px; +} +.shop_shield_warrior_1 { + background-image: url(spritesmith-main-5.png); + background-position: -1760px -41px; + width: 40px; + height: 40px; +} +.shop_shield_warrior_2 { + background-image: url(spritesmith-main-5.png); + background-position: -1760px 0px; + width: 40px; + height: 40px; +} +.shop_shield_warrior_3 { + background-image: url(spritesmith-main-5.png); + background-position: -1692px -1704px; + width: 40px; + height: 40px; +} +.shop_shield_warrior_4 { + background-image: url(spritesmith-main-5.png); + background-position: -1651px -1704px; + width: 40px; + height: 40px; +} +.shop_shield_warrior_5 { + background-image: url(spritesmith-main-5.png); + background-position: -1610px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_healer_0 { + background-image: url(spritesmith-main-5.png); + background-position: -1569px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_healer_1 { + background-image: url(spritesmith-main-5.png); + background-position: -1528px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_healer_2 { + background-image: url(spritesmith-main-5.png); + background-position: -1487px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_healer_3 { + background-image: url(spritesmith-main-5.png); + background-position: -1446px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_healer_4 { + background-image: url(spritesmith-main-5.png); + background-position: -1405px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_healer_5 { + background-image: url(spritesmith-main-5.png); + background-position: -1364px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_healer_6 { + background-image: url(spritesmith-main-5.png); + background-position: -1323px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_rogue_0 { + background-image: url(spritesmith-main-5.png); + background-position: -1282px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_rogue_1 { + background-image: url(spritesmith-main-5.png); + background-position: -1241px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_rogue_2 { + background-image: url(spritesmith-main-5.png); + background-position: -1200px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_rogue_3 { + background-image: url(spritesmith-main-5.png); + background-position: -1159px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_rogue_4 { + background-image: url(spritesmith-main-5.png); + background-position: -1118px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_rogue_5 { + background-image: url(spritesmith-main-5.png); + background-position: -1077px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_rogue_6 { + background-image: url(spritesmith-main-5.png); + background-position: -1036px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_special_0 { + background-image: url(spritesmith-main-5.png); + background-position: -995px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_special_1 { + background-image: url(spritesmith-main-5.png); + background-position: -954px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_special_2 { + background-image: url(spritesmith-main-5.png); + background-position: -913px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_special_3 { + background-image: url(spritesmith-main-5.png); + background-position: -872px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_special_critical { + background-image: url(spritesmith-main-5.png); + background-position: -380px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_special_tridentOfCrashingTides { + background-image: url(spritesmith-main-5.png); + background-position: -339px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_warrior_0 { + background-image: url(spritesmith-main-5.png); + background-position: -257px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_warrior_1 { + background-image: url(spritesmith-main-5.png); + background-position: -216px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_warrior_2 { + background-image: url(spritesmith-main-5.png); + background-position: -175px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_warrior_3 { + background-image: url(spritesmith-main-5.png); + background-position: -134px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_warrior_4 { + background-image: url(spritesmith-main-5.png); + background-position: -93px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_warrior_5 { + background-image: url(spritesmith-main-5.png); + background-position: -52px -1704px; + width: 40px; + height: 40px; +} +.shop_weapon_warrior_6 { + background-image: url(spritesmith-main-5.png); + background-position: -1666px -1652px; + width: 40px; + height: 40px; +} +.shop_weapon_wizard_0 { + background-image: url(spritesmith-main-5.png); + background-position: -1262px -811px; + width: 40px; + height: 40px; +} +.shop_weapon_wizard_1 { + background-image: url(spritesmith-main-5.png); + background-position: -1221px -811px; + width: 40px; + height: 40px; +} +.shop_weapon_wizard_2 { + background-image: url(spritesmith-main-5.png); + background-position: -1528px -770px; + width: 40px; + height: 40px; +} +.shop_weapon_wizard_3 { + background-image: url(spritesmith-main-5.png); + background-position: -1528px -729px; + width: 40px; + height: 40px; +} +.shop_weapon_wizard_4 { + background-image: url(spritesmith-main-5.png); + background-position: -1528px -688px; + width: 40px; + height: 40px; +} +.shop_weapon_wizard_5 { + background-image: url(spritesmith-main-5.png); + background-position: -1525px -449px; + width: 40px; + height: 40px; +} +.shop_weapon_wizard_6 { + background-image: url(spritesmith-main-5.png); + background-position: -1525px -408px; + width: 40px; + height: 40px; +} +.weapon_healer_0 { + background-image: url(spritesmith-main-5.png); + background-position: -1302px -1469px; + width: 90px; + height: 90px; +} +.weapon_healer_1 { + background-image: url(spritesmith-main-5.png); + background-position: -1571px -728px; + width: 90px; + height: 90px; +} +.weapon_healer_2 { + background-image: url(spritesmith-main-5.png); + background-position: -1571px -819px; + width: 90px; + height: 90px; +} +.weapon_healer_3 { + background-image: url(spritesmith-main-5.png); + background-position: -1571px -910px; + width: 90px; + height: 90px; +} +.weapon_healer_4 { + background-image: url(spritesmith-main-5.png); + background-position: -1571px -1001px; + width: 90px; + height: 90px; +} +.weapon_healer_5 { + background-image: url(spritesmith-main-5.png); + background-position: -1571px -1092px; + width: 90px; + height: 90px; +} +.weapon_healer_6 { + background-image: url(spritesmith-main-5.png); + background-position: -1571px -1274px; + width: 90px; + height: 90px; +} +.weapon_rogue_0 { + background-image: url(spritesmith-main-5.png); + background-position: -1571px -1365px; + width: 90px; + height: 90px; +} +.weapon_rogue_1 { + background-image: url(spritesmith-main-5.png); + background-position: -1571px -1456px; + width: 90px; + height: 90px; +} +.weapon_rogue_2 { + background-image: url(spritesmith-main-5.png); + background-position: 0px -1561px; + width: 90px; + height: 90px; +} +.weapon_rogue_3 { + background-image: url(spritesmith-main-5.png); + background-position: -119px -1469px; + width: 90px; + height: 90px; +} +.weapon_rogue_4 { + background-image: url(spritesmith-main-5.png); + background-position: -483px -1469px; + width: 90px; + height: 90px; +} +.weapon_rogue_5 { + background-image: url(spritesmith-main-5.png); + background-position: -301px -1469px; + width: 90px; + height: 90px; +} +.weapon_rogue_6 { + background-image: url(spritesmith-main-5.png); + background-position: -392px -1469px; + width: 90px; + height: 90px; +} +.weapon_special_1 { + background-image: url(spritesmith-main-5.png); + background-position: -1137px -1287px; + width: 102px; + height: 90px; +} +.weapon_special_2 { + background-image: url(spritesmith-main-5.png); + background-position: -574px -1469px; + width: 90px; + height: 90px; +} +.weapon_special_3 { + background-image: url(spritesmith-main-5.png); + background-position: -665px -1469px; + width: 90px; + height: 90px; +} +.weapon_special_tridentOfCrashingTides { + background-image: url(spritesmith-main-5.png); + background-position: -756px -1469px; + width: 90px; + height: 90px; +} +.weapon_warrior_0 { + background-image: url(spritesmith-main-5.png); + background-position: -847px -1469px; + width: 90px; + height: 90px; +} +.weapon_warrior_1 { + background-image: url(spritesmith-main-5.png); + background-position: -938px -1469px; + width: 90px; + height: 90px; +} +.weapon_warrior_2 { + background-image: url(spritesmith-main-5.png); + background-position: -1029px -1469px; + width: 90px; + height: 90px; +} +.weapon_warrior_3 { + background-image: url(spritesmith-main-5.png); + background-position: -1120px -1469px; + width: 90px; + height: 90px; +} +.weapon_warrior_4 { + background-image: url(spritesmith-main-5.png); + background-position: -1211px -1469px; + width: 90px; + height: 90px; +} +.weapon_warrior_5 { + background-image: url(spritesmith-main-5.png); + background-position: -182px -1561px; + width: 90px; + height: 90px; +} +.weapon_warrior_6 { + background-image: url(spritesmith-main-5.png); + background-position: -1393px -1469px; + width: 90px; + height: 90px; +} +.weapon_wizard_0 { + background-image: url(spritesmith-main-5.png); + background-position: -1571px 0px; + width: 90px; + height: 90px; +} +.weapon_wizard_1 { + background-image: url(spritesmith-main-5.png); + background-position: -1571px -91px; + width: 90px; + height: 90px; +} +.weapon_wizard_2 { + background-image: url(spritesmith-main-5.png); + background-position: -1571px -182px; + width: 90px; + height: 90px; +} +.weapon_wizard_3 { + background-image: url(spritesmith-main-5.png); + background-position: -1571px -273px; + width: 90px; + height: 90px; +} +.weapon_wizard_4 { + background-image: url(spritesmith-main-5.png); + background-position: -1571px -364px; + width: 90px; + height: 90px; +} +.weapon_wizard_5 { + background-image: url(spritesmith-main-5.png); + background-position: -1571px -455px; + width: 90px; + height: 90px; +} +.weapon_wizard_6 { + background-image: url(spritesmith-main-5.png); + background-position: -1571px -546px; + width: 90px; + height: 90px; +} +.GrimReaper { + background-image: url(spritesmith-main-5.png); + background-position: -1511px -504px; + width: 57px; + height: 66px; +} +.Pet_Currency_Gem { + background-image: url(spritesmith-main-5.png); + background-position: -1711px -1337px; + width: 45px; + height: 39px; +} +.Pet_Currency_Gem1x { + background-image: url(spritesmith-main-5.png); + background-position: -1760px -422px; + width: 15px; + height: 13px; +} +.Pet_Currency_Gem2x { + background-image: url(spritesmith-main-5.png); + background-position: -1760px -326px; + width: 30px; + height: 26px; +} +.PixelPaw-Gold { + background-image: url(spritesmith-main-5.png); + background-position: -1516px -966px; + width: 51px; + height: 51px; +} +.PixelPaw { + background-image: url(spritesmith-main-5.png); + background-position: -1516px -879px; + width: 51px; + height: 51px; +} +.PixelPaw002 { + background-image: url(spritesmith-main-5.png); + background-position: -1516px -827px; + width: 51px; + height: 51px; +} .avatar_floral_healer { background-image: url(spritesmith-main-5.png); - background-position: -200px -1487px; + background-position: -837px -1287px; width: 99px; height: 99px; } .avatar_floral_rogue { background-image: url(spritesmith-main-5.png); - background-position: -100px -1487px; + background-position: -937px -1287px; width: 99px; height: 99px; } .avatar_floral_warrior { background-image: url(spritesmith-main-5.png); - background-position: 0px -1487px; + background-position: -1037px -1287px; width: 99px; height: 99px; } .avatar_floral_wizard { background-image: url(spritesmith-main-5.png); - background-position: -300px -1487px; + background-position: -737px -1287px; width: 99px; height: 99px; } +.empty_bottles { + background-image: url(spritesmith-main-5.png); + background-position: -273px -1561px; + width: 64px; + height: 54px; +} .inventory_present { background-image: url(spritesmith-main-5.png); - background-position: -1225px -1635px; + background-position: -1350px -1561px; width: 48px; height: 51px; } .inventory_present_01 { background-image: url(spritesmith-main-5.png); - background-position: -1274px -1635px; + background-position: -1301px -1561px; width: 48px; height: 51px; } .inventory_present_02 { background-image: url(spritesmith-main-5.png); - background-position: -1470px -1635px; + background-position: -1252px -1561px; width: 48px; height: 51px; } .inventory_present_03 { background-image: url(spritesmith-main-5.png); - background-position: -1519px -1635px; + background-position: -1203px -1561px; width: 48px; height: 51px; } .inventory_present_04 { background-image: url(spritesmith-main-5.png); - background-position: -1617px -1635px; + background-position: -1154px -1561px; width: 48px; height: 51px; } .inventory_present_05 { background-image: url(spritesmith-main-5.png); - background-position: -1666px -1635px; + background-position: -1105px -1561px; width: 48px; height: 51px; } .inventory_present_06 { background-image: url(spritesmith-main-5.png); - background-position: -1728px 0px; + background-position: -1056px -1561px; width: 48px; height: 51px; } .inventory_present_07 { background-image: url(spritesmith-main-5.png); - background-position: -1728px -52px; + background-position: -958px -1561px; width: 48px; height: 51px; } .inventory_present_08 { background-image: url(spritesmith-main-5.png); - background-position: -1728px -104px; + background-position: -909px -1561px; width: 48px; height: 51px; } .inventory_present_09 { background-image: url(spritesmith-main-5.png); - background-position: -1728px -156px; + background-position: -860px -1561px; width: 48px; height: 51px; } .inventory_present_10 { background-image: url(spritesmith-main-5.png); - background-position: -1728px -208px; + background-position: -1516px -1157px; width: 48px; height: 51px; } .inventory_present_11 { background-image: url(spritesmith-main-5.png); - background-position: -1728px -260px; + background-position: -1516px -1105px; width: 48px; height: 51px; } .inventory_present_12 { background-image: url(spritesmith-main-5.png); - background-position: -1728px -312px; + background-position: -1497px -1561px; width: 48px; height: 51px; } .inventory_quest_scroll { background-image: url(spritesmith-main-5.png); - background-position: -1728px -364px; + background-position: -1448px -1561px; width: 48px; height: 51px; } .inventory_quest_scroll_locked { background-image: url(spritesmith-main-5.png); - background-position: -1728px -416px; + background-position: -1399px -1561px; width: 48px; height: 51px; } .inventory_special_fortify { background-image: url(spritesmith-main-5.png); - background-position: -1637px -657px; + background-position: -802px -1561px; width: 57px; height: 54px; } .inventory_special_greeting { background-image: url(spritesmith-main-5.png); - background-position: -1637px -492px; + background-position: -1511px -626px; width: 57px; height: 54px; } .inventory_special_nye { background-image: url(spritesmith-main-5.png); - background-position: -1637px -712px; + background-position: -744px -1561px; width: 57px; height: 54px; } .inventory_special_opaquePotion { background-image: url(spritesmith-main-5.png); - background-position: -1777px -815px; + background-position: -1711px -1582px; width: 40px; height: 40px; } .inventory_special_seafoam { background-image: url(spritesmith-main-5.png); - background-position: -1637px -547px; + background-position: -628px -1561px; width: 57px; height: 54px; } .inventory_special_shinySeed { background-image: url(spritesmith-main-5.png); - background-position: -1637px -602px; + background-position: -570px -1561px; width: 57px; height: 54px; } .inventory_special_snowball { background-image: url(spritesmith-main-5.png); - background-position: -1637px -987px; + background-position: -512px -1561px; width: 57px; height: 54px; } .inventory_special_spookDust { background-image: url(spritesmith-main-5.png); - background-position: -1637px -437px; + background-position: -454px -1561px; width: 57px; height: 54px; } .inventory_special_thankyou { background-image: url(spritesmith-main-5.png); - background-position: -1637px -767px; + background-position: -396px -1561px; width: 57px; height: 54px; } .inventory_special_trinket { background-image: url(spritesmith-main-5.png); - background-position: -784px -1687px; + background-position: -1007px -1561px; width: 48px; height: 51px; } .inventory_special_valentine { background-image: url(spritesmith-main-5.png); - background-position: -1637px -822px; + background-position: -338px -1561px; width: 57px; height: 54px; } .knockout { background-image: url(spritesmith-main-5.png); - background-position: 0px -1587px; + background-position: -1100px -811px; width: 120px; height: 47px; } .pet_key { background-image: url(spritesmith-main-5.png); - background-position: -1637px -932px; + background-position: -1511px -571px; width: 57px; height: 54px; } .rebirth_orb { background-image: url(spritesmith-main-5.png); - background-position: -1637px -877px; + background-position: -686px -1561px; width: 57px; height: 54px; } .seafoam_star { background-image: url(spritesmith-main-5.png); - background-position: -1637px 0px; + background-position: -1571px -637px; width: 90px; height: 90px; } .shop_armoire { background-image: url(spritesmith-main-5.png); - background-position: -1777px -1102px; + background-position: -1711px -1541px; width: 40px; height: 40px; } .snowman { background-image: url(spritesmith-main-5.png); - background-position: -1637px -182px; + background-position: -91px -1561px; width: 90px; height: 90px; } .spookman { background-image: url(spritesmith-main-5.png); - background-position: -1637px -91px; + background-position: -1571px -1183px; width: 90px; height: 90px; } .zzz { background-image: url(spritesmith-main-5.png); - background-position: -1777px -1061px; + background-position: -1711px -1500px; width: 40px; height: 40px; } .zzz_light { background-image: url(spritesmith-main-5.png); - background-position: -1777px -979px; + background-position: -1711px -1418px; width: 40px; height: 40px; } .npc_alex { background-image: url(spritesmith-main-5.png); - background-position: -314px -1230px; + background-position: -190px -1287px; width: 162px; height: 138px; } .npc_bailey { background-image: url(spritesmith-main-5.png); - background-position: -1637px -364px; + background-position: -1484px -1469px; width: 60px; height: 72px; } .npc_daniel { background-image: url(spritesmith-main-5.png); - background-position: -1317px -1093px; + background-position: -516px -1287px; width: 135px; height: 123px; } -.npc_daniel_broken { - background-image: url(spritesmith-main-5.png); - background-position: -1100px -763px; - width: 135px; - height: 123px; -} -.npc_ian { - background-image: url(spritesmith-main-5.png); - background-position: -1531px -1060px; - width: 75px; - height: 135px; -} -.npc_ian_broken { - background-image: url(spritesmith-main-5.png); - background-position: -1531px -1196px; - width: 75px; - height: 135px; -} .npc_justin { background-image: url(spritesmith-main-5.png); - background-position: -1531px -1332px; + background-position: -652px -1287px; width: 84px; height: 120px; } .npc_justin_head { background-image: url(spritesmith-main-5.png); - background-position: -1777px -1184px; + background-position: -1760px -123px; width: 36px; height: 39px; } .npc_matt { background-image: url(spritesmith-main-5.png); - background-position: -1317px -676px; + background-position: -1320px -966px; width: 195px; height: 138px; } .npc_timetravelers { background-image: url(spritesmith-main-5.png); - background-position: -1317px -815px; + background-position: -1320px -1105px; width: 195px; height: 138px; } .npc_timetravelers_active { background-image: url(spritesmith-main-5.png); - background-position: -1317px -954px; + background-position: -1320px -827px; width: 195px; height: 138px; } .npc_tyler { background-image: url(spritesmith-main-5.png); - background-position: -1637px -273px; + background-position: -210px -1469px; width: 90px; height: 90px; } -.seasonalshop_broken { - background-image: url(spritesmith-main-5.png); - background-position: -1106px -1079px; - width: 162px; - height: 138px; -} .seasonalshop_closed { background-image: url(spritesmith-main-5.png); - background-position: -151px -1230px; - width: 162px; - height: 138px; -} -.seasonalshop_open { - background-image: url(spritesmith-main-5.png); - background-position: -943px -1079px; + background-position: -353px -1287px; width: 162px; height: 138px; } .inventory_quest_scroll_atom1 { background-image: url(spritesmith-main-5.png); - background-position: -882px -1635px; + background-position: -1662px -416px; width: 48px; height: 51px; } .inventory_quest_scroll_atom1_locked { background-image: url(spritesmith-main-5.png); - background-position: -833px -1635px; + background-position: -1662px -468px; width: 48px; height: 51px; } .inventory_quest_scroll_atom2 { background-image: url(spritesmith-main-5.png); - background-position: -784px -1635px; + background-position: -1662px -520px; width: 48px; height: 51px; } .inventory_quest_scroll_atom2_locked { background-image: url(spritesmith-main-5.png); - background-position: -735px -1635px; + background-position: -1662px -572px; width: 48px; height: 51px; } .inventory_quest_scroll_atom3 { background-image: url(spritesmith-main-5.png); - background-position: -686px -1635px; + background-position: -1662px -624px; width: 48px; height: 51px; } .inventory_quest_scroll_atom3_locked { background-image: url(spritesmith-main-5.png); - background-position: -637px -1635px; + background-position: -1662px -676px; width: 48px; height: 51px; } .inventory_quest_scroll_basilist { background-image: url(spritesmith-main-5.png); - background-position: -588px -1635px; + background-position: -1662px -728px; width: 48px; height: 51px; } .inventory_quest_scroll_bunny { background-image: url(spritesmith-main-5.png); - background-position: -539px -1635px; + background-position: -1711px -1196px; width: 48px; height: 51px; } .inventory_quest_scroll_cheetah { background-image: url(spritesmith-main-5.png); - background-position: -392px -1635px; + background-position: -1662px -832px; width: 48px; height: 51px; } .inventory_quest_scroll_dilatoryDistress1 { background-image: url(spritesmith-main-5.png); - background-position: -343px -1635px; + background-position: -1662px -884px; width: 48px; height: 51px; } .inventory_quest_scroll_dilatoryDistress2 { background-image: url(spritesmith-main-5.png); - background-position: -294px -1635px; + background-position: -1662px -936px; width: 48px; height: 51px; } .inventory_quest_scroll_dilatoryDistress2_locked { background-image: url(spritesmith-main-5.png); - background-position: -196px -1635px; + background-position: -1662px -988px; width: 48px; height: 51px; } .inventory_quest_scroll_dilatoryDistress3 { background-image: url(spritesmith-main-5.png); - background-position: -147px -1635px; + background-position: -1662px -1040px; width: 48px; height: 51px; } .inventory_quest_scroll_dilatoryDistress3_locked { background-image: url(spritesmith-main-5.png); - background-position: -98px -1635px; + background-position: -1662px -1092px; width: 48px; height: 51px; } .inventory_quest_scroll_dilatory_derby { background-image: url(spritesmith-main-5.png); - background-position: -1444px -1282px; + background-position: -1662px -1144px; width: 48px; height: 51px; } .inventory_quest_scroll_egg { background-image: url(spritesmith-main-5.png); - background-position: -1444px -1230px; + background-position: -1662px -1196px; width: 48px; height: 51px; } .inventory_quest_scroll_evilsanta { background-image: url(spritesmith-main-5.png); - background-position: -1236px -815px; + background-position: -1662px -1248px; width: 48px; height: 51px; } .inventory_quest_scroll_evilsanta2 { background-image: url(spritesmith-main-5.png); - background-position: -1453px -1093px; + background-position: -1662px -1300px; + width: 48px; + height: 51px; +} +.inventory_quest_scroll_frog { + background-image: url(spritesmith-main-5.png); + background-position: -1662px -1352px; width: 48px; height: 51px; } .inventory_quest_scroll_ghost_stag { background-image: url(spritesmith-main-5.png); - background-position: -1637px -1507px; + background-position: -1662px -1404px; width: 48px; height: 51px; } .inventory_quest_scroll_goldenknight1 { background-image: url(spritesmith-main-5.png); - background-position: -1637px -1455px; + background-position: -1662px -1456px; width: 48px; height: 51px; } .inventory_quest_scroll_goldenknight1_locked { background-image: url(spritesmith-main-5.png); - background-position: -1637px -1250px; + background-position: -1662px -1508px; width: 48px; height: 51px; } .inventory_quest_scroll_goldenknight2 { background-image: url(spritesmith-main-5.png); - background-position: -1637px -1198px; + background-position: -1662px -1560px; width: 48px; height: 51px; } .inventory_quest_scroll_goldenknight2_locked { background-image: url(spritesmith-main-5.png); - background-position: -1637px -1146px; + background-position: 0px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_goldenknight3 { background-image: url(spritesmith-main-5.png); - background-position: -1637px -1094px; + background-position: -49px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_goldenknight3_locked { background-image: url(spritesmith-main-5.png); - background-position: -1637px -1042px; + background-position: -98px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_gryphon { background-image: url(spritesmith-main-5.png); - background-position: -1777px -260px; + background-position: -1516px -1018px; width: 48px; height: 51px; } .inventory_quest_scroll_harpy { background-image: url(spritesmith-main-5.png); - background-position: -1777px -208px; + background-position: -196px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_hedgehog { background-image: url(spritesmith-main-5.png); - background-position: -1777px -156px; + background-position: -245px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_horse { background-image: url(spritesmith-main-5.png); - background-position: -1728px -572px; + background-position: -294px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_kraken { background-image: url(spritesmith-main-5.png); - background-position: -1637px -1302px; + background-position: -343px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_moonstone1 { background-image: url(spritesmith-main-5.png); - background-position: -1453px -1145px; + background-position: -392px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_moonstone1_locked { background-image: url(spritesmith-main-5.png); - background-position: 0px -1635px; + background-position: -441px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_moonstone2 { background-image: url(spritesmith-main-5.png); - background-position: -245px -1635px; + background-position: -490px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_moonstone2_locked { background-image: url(spritesmith-main-5.png); - background-position: -441px -1635px; + background-position: -539px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_moonstone3 { background-image: url(spritesmith-main-5.png); - background-position: -490px -1635px; + background-position: -588px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_moonstone3_locked { background-image: url(spritesmith-main-5.png); - background-position: -931px -1635px; + background-position: -637px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_octopus { background-image: url(spritesmith-main-5.png); - background-position: -980px -1635px; + background-position: -686px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_owl { background-image: url(spritesmith-main-5.png); - background-position: -1029px -1635px; + background-position: -735px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_penguin { background-image: url(spritesmith-main-5.png); - background-position: -1078px -1635px; + background-position: -784px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_rat { background-image: url(spritesmith-main-5.png); - background-position: -1127px -1635px; + background-position: -833px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_rock { background-image: url(spritesmith-main-5.png); - background-position: -1176px -1635px; + background-position: -882px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_rooster { background-image: url(spritesmith-main-5.png); - background-position: -1323px -1635px; + background-position: -931px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_sheep { background-image: url(spritesmith-main-5.png); - background-position: -1372px -1635px; + background-position: -980px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_slime { background-image: url(spritesmith-main-5.png); - background-position: -1421px -1635px; + background-position: -1029px -1652px; + width: 48px; + height: 51px; +} +.inventory_quest_scroll_snake { + background-image: url(spritesmith-main-5.png); + background-position: -1078px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_spider { background-image: url(spritesmith-main-5.png); - background-position: -1568px -1635px; + background-position: -1127px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_trex { background-image: url(spritesmith-main-5.png); - background-position: -392px -1687px; + background-position: -1176px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_trex_undead { background-image: url(spritesmith-main-5.png); - background-position: -441px -1687px; + background-position: -1225px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_vice1 { background-image: url(spritesmith-main-5.png); - background-position: -490px -1687px; + background-position: -1274px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_vice1_locked { background-image: url(spritesmith-main-5.png); - background-position: -539px -1687px; + background-position: -1323px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_vice2 { background-image: url(spritesmith-main-5.png); - background-position: -588px -1687px; + background-position: -1372px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_vice2_locked { background-image: url(spritesmith-main-5.png); - background-position: -637px -1687px; + background-position: -1421px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_vice3 { background-image: url(spritesmith-main-5.png); - background-position: -686px -1687px; + background-position: -1470px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_vice3_locked { background-image: url(spritesmith-main-5.png); - background-position: -735px -1687px; + background-position: -1519px -1652px; width: 48px; height: 51px; } .inventory_quest_scroll_whale { background-image: url(spritesmith-main-5.png); - background-position: -833px -1687px; + background-position: -1568px -1652px; width: 48px; height: 51px; } .quest_TEMPLATE_FOR_MISSING_IMAGE { background-image: url(spritesmith-main-5.png); - background-position: -1288px -1487px; + background-position: -1240px -1287px; width: 221px; height: 39px; } .quest_atom1 { background-image: url(spritesmith-main-5.png); - background-position: 0px -1079px; + background-position: -902px -1106px; width: 250px; height: 150px; } .quest_atom2 { background-image: url(spritesmith-main-5.png); - background-position: -1317px -537px; + background-position: -1320px -688px; width: 207px; height: 138px; } .quest_atom3 { background-image: url(spritesmith-main-5.png); - background-position: -1100px -404px; + background-position: 0px -1106px; width: 216px; height: 180px; } .quest_basilist { background-image: url(spritesmith-main-5.png); - background-position: -753px -1079px; + background-position: 0px -1287px; width: 189px; height: 141px; } .quest_bunny { background-image: url(spritesmith-main-5.png); - background-position: -1100px -217px; + background-position: -1100px -624px; width: 210px; height: 186px; } .quest_cheetah { background-image: url(spritesmith-main-5.png); - background-position: -440px 0px; + background-position: 0px -672px; width: 219px; height: 219px; } .quest_dilatory { background-image: url(spritesmith-main-5.png); - background-position: 0px -232px; + background-position: -880px -440px; width: 219px; height: 219px; } .quest_dilatoryDistress1 { background-image: url(spritesmith-main-5.png); - background-position: -400px -1487px; + background-position: -1320px -1244px; width: 221px; height: 39px; } .quest_dilatoryDistress1_blueFins { background-image: url(spritesmith-main-5.png); - background-position: -1637px -1354px; + background-position: 0px -1704px; width: 51px; height: 48px; } .quest_dilatoryDistress1_fireCoral { background-image: url(spritesmith-main-5.png); - background-position: -1637px -1403px; + background-position: -1711px -416px; width: 48px; height: 51px; } .quest_dilatoryDistress2 { background-image: url(spritesmith-main-5.png); - background-position: 0px -1230px; + background-position: -1153px -1106px; width: 150px; height: 150px; } .quest_dilatoryDistress3 { background-image: url(spritesmith-main-5.png); - background-position: -220px -232px; + background-position: -220px 0px; width: 219px; height: 219px; } .quest_dilatory_derby { background-image: url(spritesmith-main-5.png); - background-position: -440px -232px; + background-position: -440px -452px; width: 219px; height: 219px; } .quest_egg { background-image: url(spritesmith-main-5.png); - background-position: -1066px -1487px; + background-position: -1240px -1327px; width: 221px; height: 39px; } .quest_egg_plainEgg { background-image: url(spritesmith-main-5.png); - background-position: -1236px -763px; + background-position: -1711px -676px; width: 48px; height: 51px; } .quest_evilsanta { background-image: url(spritesmith-main-5.png); - background-position: -477px -1230px; + background-position: 0px -1429px; width: 118px; height: 131px; } @@ -754,27 +1288,33 @@ width: 219px; height: 219px; } +.quest_frog { + background-image: url(spritesmith-main-5.png); + background-position: 0px -892px; + width: 221px; + height: 213px; +} .quest_ghost_stag { background-image: url(spritesmith-main-5.png); - background-position: -220px -452px; + background-position: -440px -232px; width: 219px; height: 219px; } .quest_goldenknight1 { background-image: url(spritesmith-main-5.png); - background-position: -844px -1487px; + background-position: -341px -1429px; width: 221px; height: 39px; } .quest_goldenknight1_testimony { background-image: url(spritesmith-main-5.png); - background-position: -49px -1635px; + background-position: -1711px -988px; width: 48px; height: 51px; } .quest_goldenknight2 { background-image: url(spritesmith-main-5.png); - background-position: -502px -1079px; + background-position: -651px -1106px; width: 250px; height: 150px; } @@ -786,805 +1326,457 @@ } .quest_gryphon { background-image: url(spritesmith-main-5.png); - background-position: -1100px -585px; + background-position: -879px -892px; width: 216px; height: 177px; } .quest_harpy { background-image: url(spritesmith-main-5.png); - background-position: -440px -452px; + background-position: -220px -452px; width: 219px; height: 219px; } .quest_hedgehog { background-image: url(spritesmith-main-5.png); - background-position: 0px -892px; + background-position: -1100px -437px; width: 219px; height: 186px; } .quest_horse { background-image: url(spritesmith-main-5.png); - background-position: -880px -220px; + background-position: -440px 0px; width: 219px; height: 219px; } .quest_kraken { background-image: url(spritesmith-main-5.png); - background-position: -1094px -892px; + background-position: -662px -892px; width: 216px; height: 177px; } .quest_moonstone1 { background-image: url(spritesmith-main-5.png); - background-position: -622px -1487px; + background-position: -119px -1429px; width: 221px; height: 39px; } .quest_moonstone1_moonstone { background-image: url(spritesmith-main-5.png); - background-position: -1777px -1356px; + background-position: -1760px -295px; width: 30px; height: 30px; } .quest_moonstone2 { background-image: url(spritesmith-main-5.png); - background-position: 0px -672px; + background-position: 0px -232px; width: 219px; height: 219px; } .quest_moonstone3 { background-image: url(spritesmith-main-5.png); - background-position: -220px -672px; + background-position: -660px -452px; width: 219px; height: 219px; } .quest_octopus { background-image: url(spritesmith-main-5.png); - background-position: -220px -892px; + background-position: -222px -892px; width: 222px; height: 177px; } .quest_owl { background-image: url(spritesmith-main-5.png); - background-position: -440px -672px; + background-position: -220px -232px; width: 219px; height: 219px; } .quest_penguin { background-image: url(spritesmith-main-5.png); - background-position: -1317px -353px; + background-position: -1320px -504px; width: 190px; height: 183px; } .quest_rat { background-image: url(spritesmith-main-5.png); - background-position: -220px 0px; + background-position: 0px -452px; width: 219px; height: 219px; } .quest_rock { background-image: url(spritesmith-main-5.png); - background-position: -1100px 0px; + background-position: -1100px -220px; width: 216px; height: 216px; } .quest_rooster { background-image: url(spritesmith-main-5.png); - background-position: -1317px 0px; + background-position: -1320px -151px; width: 213px; height: 174px; } .quest_sheep { background-image: url(spritesmith-main-5.png); - background-position: -660px -672px; + background-position: -880px 0px; width: 219px; height: 219px; } .quest_slime { background-image: url(spritesmith-main-5.png); - background-position: -880px -440px; + background-position: -880px -220px; width: 219px; height: 219px; } +.quest_snake { + background-image: url(spritesmith-main-5.png); + background-position: -445px -892px; + width: 216px; + height: 177px; +} .quest_spider { background-image: url(spritesmith-main-5.png); - background-position: -251px -1079px; + background-position: -1320px 0px; width: 250px; height: 150px; } .quest_stressbeast { background-image: url(spritesmith-main-5.png); - background-position: -880px 0px; + background-position: -220px -672px; width: 219px; height: 219px; } .quest_stressbeast_bailey { background-image: url(spritesmith-main-5.png); - background-position: -660px -452px; + background-position: -440px -672px; width: 219px; height: 219px; } .quest_stressbeast_guide { background-image: url(spritesmith-main-5.png); - background-position: 0px -452px; + background-position: -660px -672px; width: 219px; height: 219px; } .quest_stressbeast_stables { background-image: url(spritesmith-main-5.png); - background-position: -660px 0px; + background-position: -880px -672px; width: 219px; height: 219px; } .quest_trex { background-image: url(spritesmith-main-5.png); - background-position: -1317px -175px; + background-position: -1320px -326px; width: 204px; height: 177px; } .quest_trex_undead { background-image: url(spritesmith-main-5.png); - background-position: -877px -892px; + background-position: -217px -1106px; width: 216px; height: 177px; } .quest_vice1 { background-image: url(spritesmith-main-5.png); - background-position: -660px -892px; + background-position: -434px -1106px; width: 216px; height: 177px; } .quest_vice2 { background-image: url(spritesmith-main-5.png); - background-position: -400px -1527px; - width: 221px; - height: 39px; + background-position: -1100px 0px; + width: 219px; + height: 219px; } .quest_vice2_lightCrystal { background-image: url(spritesmith-main-5.png); - background-position: -1777px -1143px; + background-position: -298px -1704px; width: 40px; height: 40px; } .quest_vice3 { background-image: url(spritesmith-main-5.png); - background-position: -443px -892px; + background-position: -1096px -892px; width: 216px; height: 177px; } .quest_whale { background-image: url(spritesmith-main-5.png); - background-position: -880px -672px; + background-position: -660px 0px; width: 219px; height: 219px; } .shop_copper { background-image: url(spritesmith-main-5.png); - background-position: -1777px -1387px; + background-position: -1760px -376px; width: 32px; height: 22px; } .shop_eyes { background-image: url(spritesmith-main-5.png); - background-position: -1777px -1020px; + background-position: -462px -1704px; width: 40px; height: 40px; } .shop_gold { background-image: url(spritesmith-main-5.png); - background-position: -1777px -1410px; + background-position: -1760px -399px; width: 32px; height: 22px; } .shop_opaquePotion { background-image: url(spritesmith-main-5.png); - background-position: -1777px -938px; + background-position: -544px -1704px; width: 40px; height: 40px; } .shop_potion { background-image: url(spritesmith-main-5.png); - background-position: -1777px -897px; + background-position: -585px -1704px; width: 40px; height: 40px; } .shop_reroll { background-image: url(spritesmith-main-5.png); - background-position: -1777px -856px; + background-position: -626px -1704px; width: 40px; height: 40px; } .shop_seafoam { background-image: url(spritesmith-main-5.png); - background-position: -1777px -1323px; + background-position: -1760px -262px; width: 32px; height: 32px; } .shop_shinySeed { background-image: url(spritesmith-main-5.png); - background-position: -1777px -1257px; + background-position: -1760px -229px; width: 32px; height: 32px; } .shop_silver { background-image: url(spritesmith-main-5.png); - background-position: -1777px -1433px; + background-position: -1760px -353px; width: 32px; height: 22px; } .shop_snowball { background-image: url(spritesmith-main-5.png); - background-position: -1777px -1224px; + background-position: -1760px -196px; width: 32px; height: 32px; } .shop_spookDust { background-image: url(spritesmith-main-5.png); - background-position: -1777px -1290px; + background-position: -1760px -163px; width: 32px; height: 32px; } .Pet_Egg_BearCub { background-image: url(spritesmith-main-5.png); - background-position: -1728px -468px; + background-position: -1546px -1561px; width: 48px; height: 51px; } .Pet_Egg_Bunny { background-image: url(spritesmith-main-5.png); - background-position: -1728px -520px; + background-position: -1595px -1561px; width: 48px; height: 51px; } .Pet_Egg_Cactus { background-image: url(spritesmith-main-5.png); - background-position: -1777px -312px; + background-position: -1662px 0px; width: 48px; height: 51px; } .Pet_Egg_Cheetah { background-image: url(spritesmith-main-5.png); - background-position: -1728px -624px; + background-position: -1662px -52px; width: 48px; height: 51px; } .Pet_Egg_Cuttlefish { background-image: url(spritesmith-main-5.png); - background-position: -1728px -676px; + background-position: -1662px -104px; width: 48px; height: 51px; } .Pet_Egg_Deer { background-image: url(spritesmith-main-5.png); - background-position: -1728px -728px; + background-position: -1662px -156px; width: 48px; height: 51px; } .Pet_Egg_Dragon { background-image: url(spritesmith-main-5.png); - background-position: -1728px -780px; + background-position: -1662px -208px; width: 48px; height: 51px; } .Pet_Egg_Egg { background-image: url(spritesmith-main-5.png); - background-position: -1728px -832px; + background-position: -1662px -260px; width: 48px; height: 51px; } .Pet_Egg_FlyingPig { background-image: url(spritesmith-main-5.png); - background-position: -1728px -884px; + background-position: -1662px -312px; width: 48px; height: 51px; } .Pet_Egg_Fox { background-image: url(spritesmith-main-5.png); - background-position: -1728px -936px; + background-position: -1662px -364px; + width: 48px; + height: 51px; +} +.Pet_Egg_Frog { + background-image: url(spritesmith-main-5.png); + background-position: -1662px -780px; width: 48px; height: 51px; } .Pet_Egg_Gryphon { background-image: url(spritesmith-main-5.png); - background-position: -1728px -988px; + background-position: -1617px -1652px; width: 48px; height: 51px; } .Pet_Egg_Hedgehog { background-image: url(spritesmith-main-5.png); - background-position: -1728px -1040px; + background-position: -1711px 0px; width: 48px; height: 51px; } .Pet_Egg_Horse { background-image: url(spritesmith-main-5.png); - background-position: -1728px -1092px; + background-position: -1711px -52px; width: 48px; height: 51px; } .Pet_Egg_LionCub { background-image: url(spritesmith-main-5.png); - background-position: -1728px -1144px; + background-position: -1711px -104px; width: 48px; height: 51px; } .Pet_Egg_Octopus { background-image: url(spritesmith-main-5.png); - background-position: -1728px -1196px; + background-position: -1711px -156px; width: 48px; height: 51px; } .Pet_Egg_Owl { background-image: url(spritesmith-main-5.png); - background-position: -1728px -1248px; + background-position: -1711px -208px; width: 48px; height: 51px; } .Pet_Egg_PandaCub { background-image: url(spritesmith-main-5.png); - background-position: -1728px -1300px; + background-position: -1711px -260px; width: 48px; height: 51px; } .Pet_Egg_Parrot { background-image: url(spritesmith-main-5.png); - background-position: -1728px -1352px; + background-position: -1711px -312px; width: 48px; height: 51px; } .Pet_Egg_Penguin { background-image: url(spritesmith-main-5.png); - background-position: -1728px -1404px; + background-position: -1711px -364px; width: 48px; height: 51px; } .Pet_Egg_PolarBear { background-image: url(spritesmith-main-5.png); - background-position: -1728px -1456px; + background-position: -1711px -468px; width: 48px; height: 51px; } .Pet_Egg_Rat { background-image: url(spritesmith-main-5.png); - background-position: -1728px -1508px; + background-position: -1711px -520px; width: 48px; height: 51px; } .Pet_Egg_Rock { background-image: url(spritesmith-main-5.png); - background-position: -1728px -1560px; + background-position: -1711px -572px; width: 48px; height: 51px; } .Pet_Egg_Rooster { background-image: url(spritesmith-main-5.png); - background-position: -1728px -1612px; + background-position: -1711px -624px; width: 48px; height: 51px; } .Pet_Egg_Seahorse { background-image: url(spritesmith-main-5.png); - background-position: 0px -1687px; + background-position: -1711px -728px; width: 48px; height: 51px; } .Pet_Egg_Sheep { background-image: url(spritesmith-main-5.png); - background-position: -49px -1687px; + background-position: -1711px -780px; width: 48px; height: 51px; } .Pet_Egg_Slime { background-image: url(spritesmith-main-5.png); - background-position: -98px -1687px; + background-position: -1711px -832px; + width: 48px; + height: 51px; +} +.Pet_Egg_Snake { + background-image: url(spritesmith-main-5.png); + background-position: -1711px -884px; width: 48px; height: 51px; } .Pet_Egg_Spider { background-image: url(spritesmith-main-5.png); - background-position: -147px -1687px; + background-position: -1711px -936px; width: 48px; height: 51px; } .Pet_Egg_TRex { background-image: url(spritesmith-main-5.png); - background-position: -196px -1687px; + background-position: -1711px -1040px; width: 48px; height: 51px; } .Pet_Egg_TigerCub { background-image: url(spritesmith-main-5.png); - background-position: -245px -1687px; + background-position: -1711px -1092px; width: 48px; height: 51px; } .Pet_Egg_Whale { background-image: url(spritesmith-main-5.png); - background-position: -294px -1687px; + background-position: -1711px -1144px; width: 48px; height: 51px; } .Pet_Egg_Wolf { background-image: url(spritesmith-main-5.png); - background-position: -343px -1687px; + background-position: -147px -1652px; width: 48px; height: 51px; } .Pet_Food_Cake_Base { background-image: url(spritesmith-main-5.png); - background-position: -1777px -683px; + background-position: -1711px -1248px; width: 43px; height: 43px; } .Pet_Food_Cake_CottonCandyBlue { background-image: url(spritesmith-main-5.png); - background-position: -1777px -727px; + background-position: -1711px -1292px; width: 42px; height: 44px; } -.Pet_Food_Cake_CottonCandyPink { - background-image: url(spritesmith-main-5.png); - background-position: -1777px -502px; - width: 43px; - height: 45px; -} -.Pet_Food_Cake_Desert { - background-image: url(spritesmith-main-5.png); - background-position: -1777px -593px; - width: 43px; - height: 44px; -} -.Pet_Food_Cake_Golden { - background-image: url(spritesmith-main-5.png); - background-position: -1777px -772px; - width: 43px; - height: 42px; -} -.Pet_Food_Cake_Red { - background-image: url(spritesmith-main-5.png); - background-position: -1777px -638px; - width: 43px; - height: 44px; -} -.Pet_Food_Cake_Shade { - background-image: url(spritesmith-main-5.png); - background-position: -1777px -548px; - width: 43px; - height: 44px; -} -.Pet_Food_Cake_Skeleton { - background-image: url(spritesmith-main-5.png); - background-position: -1777px -409px; - width: 42px; - height: 47px; -} -.Pet_Food_Cake_White { - background-image: url(spritesmith-main-5.png); - background-position: -1777px -457px; - width: 44px; - height: 44px; -} -.Pet_Food_Cake_Zombie { - background-image: url(spritesmith-main-5.png); - background-position: -1777px -364px; - width: 45px; - height: 44px; -} -.Pet_Food_Candy_Base { - background-image: url(spritesmith-main-5.png); - background-position: -882px -1687px; - width: 48px; - height: 51px; -} -.Pet_Food_Candy_CottonCandyBlue { - background-image: url(spritesmith-main-5.png); - background-position: -931px -1687px; - width: 48px; - height: 51px; -} -.Pet_Food_Candy_CottonCandyPink { - background-image: url(spritesmith-main-5.png); - background-position: -980px -1687px; - width: 48px; - height: 51px; -} -.Pet_Food_Candy_Desert { - background-image: url(spritesmith-main-5.png); - background-position: -1029px -1687px; - width: 48px; - height: 51px; -} -.Pet_Food_Candy_Golden { - background-image: url(spritesmith-main-5.png); - background-position: -1078px -1687px; - width: 48px; - height: 51px; -} -.Pet_Food_Candy_Red { - background-image: url(spritesmith-main-5.png); - background-position: -1127px -1687px; - width: 48px; - height: 51px; -} -.Pet_Food_Candy_Shade { - background-image: url(spritesmith-main-5.png); - background-position: -1176px -1687px; - width: 48px; - height: 51px; -} -.Pet_Food_Candy_Skeleton { - background-image: url(spritesmith-main-5.png); - background-position: -1225px -1687px; - width: 48px; - height: 51px; -} -.Pet_Food_Candy_White { - background-image: url(spritesmith-main-5.png); - background-position: -1274px -1687px; - width: 48px; - height: 51px; -} -.Pet_Food_Candy_Zombie { - background-image: url(spritesmith-main-5.png); - background-position: -1323px -1687px; - width: 48px; - height: 51px; -} -.Pet_Food_Chocolate { - background-image: url(spritesmith-main-5.png); - background-position: -1372px -1687px; - width: 48px; - height: 51px; -} -.Pet_Food_CottonCandyBlue { - background-image: url(spritesmith-main-5.png); - background-position: -1421px -1687px; - width: 48px; - height: 51px; -} -.Pet_Food_CottonCandyPink { - background-image: url(spritesmith-main-5.png); - background-position: -1470px -1687px; - width: 48px; - height: 51px; -} -.Pet_Food_Fish { - background-image: url(spritesmith-main-5.png); - background-position: -1519px -1687px; - width: 48px; - height: 51px; -} -.Pet_Food_Honey { - background-image: url(spritesmith-main-5.png); - background-position: -1568px -1687px; - width: 48px; - height: 51px; -} -.Pet_Food_Meat { - background-image: url(spritesmith-main-5.png); - background-position: -1617px -1687px; - width: 48px; - height: 51px; -} -.Pet_Food_Milk { - background-image: url(spritesmith-main-5.png); - background-position: -1666px -1687px; - width: 48px; - height: 51px; -} -.Pet_Food_Potatoe { - background-image: url(spritesmith-main-5.png); - background-position: -1715px -1687px; - width: 48px; - height: 51px; -} -.Pet_Food_RottenMeat { - background-image: url(spritesmith-main-5.png); - background-position: -1777px 0px; - width: 48px; - height: 51px; -} -.Pet_Food_Saddle { - background-image: url(spritesmith-main-5.png); - background-position: -1777px -52px; - width: 48px; - height: 51px; -} -.Pet_Food_Strawberry { - background-image: url(spritesmith-main-5.png); - background-position: -1777px -104px; - width: 48px; - height: 51px; -} -.Mount_Body_BearCub-Base { - background-image: url(spritesmith-main-5.png); - background-position: -742px -1381px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-CottonCandyBlue { - background-image: url(spritesmith-main-5.png); - background-position: -636px -1381px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-CottonCandyPink { - background-image: url(spritesmith-main-5.png); - background-position: -530px -1381px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-Desert { - background-image: url(spritesmith-main-5.png); - background-position: -424px -1381px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-Golden { - background-image: url(spritesmith-main-5.png); - background-position: -318px -1381px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-Polar { - background-image: url(spritesmith-main-5.png); - background-position: -212px -1381px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-Red { - background-image: url(spritesmith-main-5.png); - background-position: -106px -1381px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-Shade { - background-image: url(spritesmith-main-5.png); - background-position: 0px -1381px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-Skeleton { - background-image: url(spritesmith-main-5.png); - background-position: -1338px -1230px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-Spooky { - background-image: url(spritesmith-main-5.png); - background-position: -1232px -1230px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-White { - background-image: url(spritesmith-main-5.png); - background-position: -1126px -1230px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-Zombie { - background-image: url(spritesmith-main-5.png); - background-position: -1020px -1230px; - width: 105px; - height: 105px; -} -.Mount_Body_Bunny-Base { - background-image: url(spritesmith-main-5.png); - background-position: -914px -1230px; - width: 105px; - height: 105px; -} -.Mount_Body_Bunny-CottonCandyBlue { - background-image: url(spritesmith-main-5.png); - background-position: -808px -1230px; - width: 105px; - height: 105px; -} -.Mount_Body_Bunny-CottonCandyPink { - background-image: url(spritesmith-main-5.png); - background-position: -702px -1230px; - width: 105px; - height: 105px; -} -.Mount_Body_Bunny-Desert { - background-image: url(spritesmith-main-5.png); - background-position: -596px -1230px; - width: 105px; - height: 105px; -} -.Mount_Body_Bunny-Golden { - background-image: url(spritesmith-main-5.png); - background-position: -1531px -954px; - width: 105px; - height: 105px; -} -.Mount_Body_Bunny-Red { - background-image: url(spritesmith-main-5.png); - background-position: -1531px -848px; - width: 105px; - height: 105px; -} -.Mount_Body_Bunny-Shade { - background-image: url(spritesmith-main-5.png); - background-position: -1531px -742px; - width: 105px; - height: 105px; -} -.Mount_Body_Bunny-Skeleton { - background-image: url(spritesmith-main-5.png); - background-position: -1531px -636px; - width: 105px; - height: 105px; -} -.Mount_Body_Bunny-White { - background-image: url(spritesmith-main-5.png); - background-position: -1531px -530px; - width: 105px; - height: 105px; -} -.Mount_Body_Bunny-Zombie { - background-image: url(spritesmith-main-5.png); - background-position: -1531px -424px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-Base { - background-image: url(spritesmith-main-5.png); - background-position: -1531px -318px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-CottonCandyBlue { - background-image: url(spritesmith-main-5.png); - background-position: -1531px -212px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-CottonCandyPink { - background-image: url(spritesmith-main-5.png); - background-position: -1531px -106px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-Desert { - background-image: url(spritesmith-main-5.png); - background-position: -1531px 0px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-Golden { - background-image: url(spritesmith-main-5.png); - background-position: -1378px -1381px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-Red { - background-image: url(spritesmith-main-5.png); - background-position: -1272px -1381px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-Shade { - background-image: url(spritesmith-main-5.png); - background-position: -1166px -1381px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-Skeleton { - background-image: url(spritesmith-main-5.png); - background-position: -1060px -1381px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-Spooky { - background-image: url(spritesmith-main-5.png); - background-position: -954px -1381px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-White { - background-image: url(spritesmith-main-5.png); - background-position: -848px -1381px; - width: 105px; - height: 105px; -} diff --git a/common/dist/sprites/spritesmith-main-5.png b/common/dist/sprites/spritesmith-main-5.png index b79c1a9e72..721ff60622 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 f51004d601..4674923e8c 100644 --- a/common/dist/sprites/spritesmith-main-6.css +++ b/common/dist/sprites/spritesmith-main-6.css @@ -1,1464 +1,1602 @@ +.Pet_Food_Cake_CottonCandyPink { + background-image: url(spritesmith-main-6.png); + background-position: -680px -1635px; + width: 43px; + height: 45px; +} +.Pet_Food_Cake_Desert { + background-image: url(spritesmith-main-6.png); + background-position: -1484px -1378px; + width: 43px; + height: 44px; +} +.Pet_Food_Cake_Golden { + background-image: url(spritesmith-main-6.png); + background-position: -1422px -1272px; + width: 43px; + height: 42px; +} +.Pet_Food_Cake_Red { + background-image: url(spritesmith-main-6.png); + background-position: -1378px -1272px; + width: 43px; + height: 44px; +} +.Pet_Food_Cake_Shade { + background-image: url(spritesmith-main-6.png); + background-position: -1528px -1378px; + width: 43px; + height: 44px; +} +.Pet_Food_Cake_Skeleton { + background-image: url(spritesmith-main-6.png); + background-position: -637px -1635px; + width: 42px; + height: 47px; +} +.Pet_Food_Cake_White { + background-image: url(spritesmith-main-6.png); + background-position: -1636px -1484px; + width: 44px; + height: 44px; +} +.Pet_Food_Cake_Zombie { + background-image: url(spritesmith-main-6.png); + background-position: -1590px -1484px; + width: 45px; + height: 44px; +} +.Pet_Food_Candy_Base { + background-image: url(spritesmith-main-6.png); + background-position: -294px -1635px; + width: 48px; + height: 51px; +} +.Pet_Food_Candy_CottonCandyBlue { + background-image: url(spritesmith-main-6.png); + background-position: -588px -1635px; + width: 48px; + height: 51px; +} +.Pet_Food_Candy_CottonCandyPink { + background-image: url(spritesmith-main-6.png); + background-position: -539px -1635px; + width: 48px; + height: 51px; +} +.Pet_Food_Candy_Desert { + background-image: url(spritesmith-main-6.png); + background-position: -490px -1635px; + width: 48px; + height: 51px; +} +.Pet_Food_Candy_Golden { + background-image: url(spritesmith-main-6.png); + background-position: -441px -1635px; + width: 48px; + height: 51px; +} +.Pet_Food_Candy_Red { + background-image: url(spritesmith-main-6.png); + background-position: -392px -1635px; + width: 48px; + height: 51px; +} +.Pet_Food_Candy_Shade { + background-image: url(spritesmith-main-6.png); + background-position: -343px -1635px; + width: 48px; + height: 51px; +} +.Pet_Food_Candy_Skeleton { + background-image: url(spritesmith-main-6.png); + background-position: -1484px -1529px; + width: 48px; + height: 51px; +} +.Pet_Food_Candy_White { + background-image: url(spritesmith-main-6.png); + background-position: -245px -1635px; + width: 48px; + height: 51px; +} +.Pet_Food_Candy_Zombie { + background-image: url(spritesmith-main-6.png); + background-position: -196px -1635px; + width: 48px; + height: 51px; +} +.Pet_Food_Chocolate { + background-image: url(spritesmith-main-6.png); + background-position: -147px -1635px; + width: 48px; + height: 51px; +} +.Pet_Food_CottonCandyBlue { + background-image: url(spritesmith-main-6.png); + background-position: -98px -1635px; + width: 48px; + height: 51px; +} +.Pet_Food_CottonCandyPink { + background-image: url(spritesmith-main-6.png); + background-position: -49px -1635px; + width: 48px; + height: 51px; +} +.Pet_Food_Fish { + background-image: url(spritesmith-main-6.png); + background-position: 0px -1635px; + width: 48px; + height: 51px; +} +.Pet_Food_Honey { + background-image: url(spritesmith-main-6.png); + background-position: -1631px -1581px; + width: 48px; + height: 51px; +} +.Pet_Food_Meat { + background-image: url(spritesmith-main-6.png); + background-position: -1582px -1581px; + width: 48px; + height: 51px; +} +.Pet_Food_Milk { + background-image: url(spritesmith-main-6.png); + background-position: -1533px -1581px; + width: 48px; + height: 51px; +} +.Pet_Food_Potatoe { + background-image: url(spritesmith-main-6.png); + background-position: -1484px -1581px; + width: 48px; + height: 51px; +} +.Pet_Food_RottenMeat { + background-image: url(spritesmith-main-6.png); + background-position: -1631px -1529px; + width: 48px; + height: 51px; +} +.Pet_Food_Saddle { + background-image: url(spritesmith-main-6.png); + background-position: -1582px -1529px; + width: 48px; + height: 51px; +} +.Pet_Food_Strawberry { + background-image: url(spritesmith-main-6.png); + background-position: -1533px -1529px; + width: 48px; + height: 51px; +} +.Mount_Body_BearCub-Base { + background-image: url(spritesmith-main-6.png); + background-position: -636px 0px; + width: 105px; + height: 105px; +} +.Mount_Body_BearCub-CottonCandyBlue { + background-image: url(spritesmith-main-6.png); + background-position: -636px -106px; + width: 105px; + height: 105px; +} +.Mount_Body_BearCub-CottonCandyPink { + background-image: url(spritesmith-main-6.png); + background-position: -636px -212px; + width: 105px; + height: 105px; +} +.Mount_Body_BearCub-Desert { + background-image: url(spritesmith-main-6.png); + background-position: -636px -318px; + width: 105px; + height: 105px; +} +.Mount_Body_BearCub-Golden { + background-image: url(spritesmith-main-6.png); + background-position: -636px -424px; + width: 105px; + height: 105px; +} +.Mount_Body_BearCub-Peppermint { + background-image: url(spritesmith-main-6.png); + background-position: 0px -575px; + width: 105px; + height: 105px; +} +.Mount_Body_BearCub-Polar { + background-image: url(spritesmith-main-6.png); + background-position: -106px -575px; + width: 105px; + height: 105px; +} +.Mount_Body_BearCub-Red { + background-image: url(spritesmith-main-6.png); + background-position: -212px -575px; + width: 105px; + height: 105px; +} +.Mount_Body_BearCub-Shade { + background-image: url(spritesmith-main-6.png); + background-position: -318px -575px; + width: 105px; + height: 105px; +} +.Mount_Body_BearCub-Skeleton { + background-image: url(spritesmith-main-6.png); + background-position: -424px -575px; + width: 105px; + height: 105px; +} +.Mount_Body_BearCub-Spooky { + background-image: url(spritesmith-main-6.png); + background-position: -530px -575px; + width: 105px; + height: 105px; +} +.Mount_Body_BearCub-White { + background-image: url(spritesmith-main-6.png); + background-position: -636px -575px; + width: 105px; + height: 105px; +} +.Mount_Body_BearCub-Zombie { + background-image: url(spritesmith-main-6.png); + background-position: -742px 0px; + width: 105px; + height: 105px; +} +.Mount_Body_Bunny-Base { + background-image: url(spritesmith-main-6.png); + background-position: -742px -106px; + width: 105px; + height: 105px; +} +.Mount_Body_Bunny-CottonCandyBlue { + background-image: url(spritesmith-main-6.png); + background-position: -742px -212px; + width: 105px; + height: 105px; +} +.Mount_Body_Bunny-CottonCandyPink { + background-image: url(spritesmith-main-6.png); + background-position: -742px -318px; + width: 105px; + height: 105px; +} +.Mount_Body_Bunny-Desert { + background-image: url(spritesmith-main-6.png); + background-position: -742px -424px; + width: 105px; + height: 105px; +} +.Mount_Body_Bunny-Golden { + background-image: url(spritesmith-main-6.png); + background-position: -742px -530px; + width: 105px; + height: 105px; +} +.Mount_Body_Bunny-Red { + background-image: url(spritesmith-main-6.png); + background-position: 0px -681px; + width: 105px; + height: 105px; +} +.Mount_Body_Bunny-Shade { + background-image: url(spritesmith-main-6.png); + background-position: -106px -681px; + width: 105px; + height: 105px; +} +.Mount_Body_Bunny-Skeleton { + background-image: url(spritesmith-main-6.png); + background-position: -212px -681px; + width: 105px; + height: 105px; +} +.Mount_Body_Bunny-White { + background-image: url(spritesmith-main-6.png); + background-position: -318px -681px; + width: 105px; + height: 105px; +} +.Mount_Body_Bunny-Zombie { + background-image: url(spritesmith-main-6.png); + background-position: -424px -681px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-Base { + background-image: url(spritesmith-main-6.png); + background-position: -530px -681px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-CottonCandyBlue { + background-image: url(spritesmith-main-6.png); + background-position: -636px -681px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-CottonCandyPink { + background-image: url(spritesmith-main-6.png); + background-position: -742px -681px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-Desert { + background-image: url(spritesmith-main-6.png); + background-position: -848px 0px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-Golden { + background-image: url(spritesmith-main-6.png); + background-position: -848px -106px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-Peppermint { + background-image: url(spritesmith-main-6.png); + background-position: -848px -212px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-Red { + background-image: url(spritesmith-main-6.png); + background-position: -848px -318px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-Shade { + background-image: url(spritesmith-main-6.png); + background-position: -848px -424px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-Skeleton { + background-image: url(spritesmith-main-6.png); + background-position: -848px -530px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-Spooky { + background-image: url(spritesmith-main-6.png); + background-position: -848px -636px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-White { + background-image: url(spritesmith-main-6.png); + background-position: 0px -787px; + width: 105px; + height: 105px; +} .Mount_Body_Cactus-Zombie { background-image: url(spritesmith-main-6.png); - background-position: -1202px -424px; + background-position: -106px -787px; width: 105px; height: 105px; } .Mount_Body_Cheetah-Base { background-image: url(spritesmith-main-6.png); - background-position: -212px -1108px; + background-position: -212px -787px; width: 105px; height: 105px; } .Mount_Body_Cheetah-CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -1202px -848px; + background-position: -318px -787px; width: 105px; height: 105px; } .Mount_Body_Cheetah-CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: -1202px -954px; + background-position: -424px -787px; width: 105px; height: 105px; } .Mount_Body_Cheetah-Desert { background-image: url(spritesmith-main-6.png); - background-position: -454px -212px; + background-position: -530px -787px; width: 105px; height: 105px; } .Mount_Body_Cheetah-Golden { background-image: url(spritesmith-main-6.png); - background-position: 0px -366px; + background-position: -636px -787px; width: 105px; height: 105px; } .Mount_Body_Cheetah-Red { background-image: url(spritesmith-main-6.png); - background-position: -106px -366px; + background-position: -742px -787px; width: 105px; height: 105px; } .Mount_Body_Cheetah-Shade { background-image: url(spritesmith-main-6.png); - background-position: -212px -366px; + background-position: -848px -787px; width: 105px; height: 105px; } .Mount_Body_Cheetah-Skeleton { background-image: url(spritesmith-main-6.png); - background-position: -318px -366px; + background-position: -954px 0px; width: 105px; height: 105px; } .Mount_Body_Cheetah-White { background-image: url(spritesmith-main-6.png); - background-position: -424px -366px; + background-position: -954px -106px; width: 105px; height: 105px; } .Mount_Body_Cheetah-Zombie { background-image: url(spritesmith-main-6.png); - background-position: -566px 0px; + background-position: -954px -212px; width: 105px; height: 105px; } .Mount_Body_Cuttlefish-Base { background-image: url(spritesmith-main-6.png); - background-position: -348px -115px; + background-position: -530px 0px; width: 105px; height: 114px; } .Mount_Body_Cuttlefish-CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -242px 0px; + background-position: -318px -239px; width: 105px; height: 114px; } .Mount_Body_Cuttlefish-CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: 0px -136px; + background-position: -212px 0px; width: 105px; height: 114px; } .Mount_Body_Cuttlefish-Desert { background-image: url(spritesmith-main-6.png); - background-position: -106px -136px; + background-position: 0px -124px; width: 105px; height: 114px; } .Mount_Body_Cuttlefish-Golden { background-image: url(spritesmith-main-6.png); - background-position: -212px -136px; + background-position: -106px -124px; width: 105px; height: 114px; } .Mount_Body_Cuttlefish-Red { background-image: url(spritesmith-main-6.png); - background-position: -348px 0px; + background-position: -212px -124px; width: 105px; height: 114px; } .Mount_Body_Cuttlefish-Shade { background-image: url(spritesmith-main-6.png); - background-position: -318px -251px; + background-position: -318px 0px; width: 105px; height: 114px; } .Mount_Body_Cuttlefish-Skeleton { background-image: url(spritesmith-main-6.png); - background-position: 0px -251px; + background-position: -318px -115px; width: 105px; height: 114px; } .Mount_Body_Cuttlefish-White { background-image: url(spritesmith-main-6.png); - background-position: -106px -251px; + background-position: 0px -239px; width: 105px; height: 114px; } .Mount_Body_Cuttlefish-Zombie { background-image: url(spritesmith-main-6.png); - background-position: -212px -251px; + background-position: -106px -239px; width: 105px; height: 114px; } .Mount_Body_Deer-Base { background-image: url(spritesmith-main-6.png); - background-position: -566px -106px; + background-position: -530px -893px; width: 105px; height: 105px; } .Mount_Body_Deer-CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -566px -212px; + background-position: -636px -893px; width: 105px; height: 105px; } .Mount_Body_Deer-CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: -566px -318px; + background-position: -742px -893px; width: 105px; height: 105px; } .Mount_Body_Deer-Desert { background-image: url(spritesmith-main-6.png); - background-position: 0px -472px; + background-position: -848px -893px; width: 105px; height: 105px; } .Mount_Body_Deer-Golden { background-image: url(spritesmith-main-6.png); - background-position: -106px -472px; + background-position: -954px -893px; width: 105px; height: 105px; } .Mount_Body_Deer-Red { background-image: url(spritesmith-main-6.png); - background-position: -212px -472px; + background-position: -1060px 0px; width: 105px; height: 105px; } .Mount_Body_Deer-Shade { background-image: url(spritesmith-main-6.png); - background-position: -318px -472px; + background-position: -1060px -106px; width: 105px; height: 105px; } .Mount_Body_Deer-Skeleton { background-image: url(spritesmith-main-6.png); - background-position: -424px -472px; + background-position: -1060px -212px; width: 105px; height: 105px; } .Mount_Body_Deer-White { background-image: url(spritesmith-main-6.png); - background-position: -530px -472px; + background-position: -1060px -318px; width: 105px; height: 105px; } .Mount_Body_Deer-Zombie { background-image: url(spritesmith-main-6.png); - background-position: -672px 0px; + background-position: -1060px -424px; width: 105px; height: 105px; } .Mount_Body_Dragon-Base { background-image: url(spritesmith-main-6.png); - background-position: -672px -106px; + background-position: -1060px -530px; width: 105px; height: 105px; } .Mount_Body_Dragon-CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -672px -212px; + background-position: -1060px -636px; width: 105px; height: 105px; } .Mount_Body_Dragon-CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: -672px -318px; + background-position: -1060px -742px; width: 105px; height: 105px; } .Mount_Body_Dragon-Desert { background-image: url(spritesmith-main-6.png); - background-position: -672px -424px; + background-position: -1060px -848px; width: 105px; height: 105px; } .Mount_Body_Dragon-Golden { background-image: url(spritesmith-main-6.png); - background-position: 0px -578px; + background-position: 0px -999px; + width: 105px; + height: 105px; +} +.Mount_Body_Dragon-Peppermint { + background-image: url(spritesmith-main-6.png); + background-position: -106px -999px; width: 105px; height: 105px; } .Mount_Body_Dragon-Red { background-image: url(spritesmith-main-6.png); - background-position: -106px -578px; + background-position: -212px -999px; width: 105px; height: 105px; } .Mount_Body_Dragon-Shade { background-image: url(spritesmith-main-6.png); - background-position: -212px -578px; + background-position: -318px -999px; width: 105px; height: 105px; } .Mount_Body_Dragon-Skeleton { background-image: url(spritesmith-main-6.png); - background-position: -318px -578px; + background-position: -424px -999px; width: 105px; height: 105px; } .Mount_Body_Dragon-Spooky { background-image: url(spritesmith-main-6.png); - background-position: -424px -578px; + background-position: -530px -999px; width: 105px; height: 105px; } .Mount_Body_Dragon-White { background-image: url(spritesmith-main-6.png); - background-position: -530px -578px; + background-position: -636px -999px; width: 105px; height: 105px; } .Mount_Body_Dragon-Zombie { background-image: url(spritesmith-main-6.png); - background-position: -636px -578px; + background-position: -742px -999px; width: 105px; height: 105px; } .Mount_Body_Egg-Base { background-image: url(spritesmith-main-6.png); - background-position: -778px 0px; + background-position: -848px -999px; width: 105px; height: 105px; } .Mount_Body_Egg-CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -778px -106px; + background-position: -954px -999px; width: 105px; height: 105px; } .Mount_Body_Egg-CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: -778px -212px; + background-position: -1060px -999px; width: 105px; height: 105px; } .Mount_Body_Egg-Desert { background-image: url(spritesmith-main-6.png); - background-position: -778px -318px; + background-position: -1166px 0px; width: 105px; height: 105px; } .Mount_Body_Egg-Golden { background-image: url(spritesmith-main-6.png); - background-position: -778px -424px; + background-position: -1166px -106px; width: 105px; height: 105px; } .Mount_Body_Egg-Red { background-image: url(spritesmith-main-6.png); - background-position: -778px -530px; + background-position: -1166px -212px; width: 105px; height: 105px; } .Mount_Body_Egg-Shade { background-image: url(spritesmith-main-6.png); - background-position: 0px -684px; + background-position: -1166px -318px; width: 105px; height: 105px; } .Mount_Body_Egg-Skeleton { background-image: url(spritesmith-main-6.png); - background-position: -106px -684px; + background-position: -1166px -424px; width: 105px; height: 105px; } .Mount_Body_Egg-White { background-image: url(spritesmith-main-6.png); - background-position: -212px -684px; + background-position: -1166px -530px; width: 105px; height: 105px; } .Mount_Body_Egg-Zombie { background-image: url(spritesmith-main-6.png); - background-position: -318px -684px; + background-position: -1166px -636px; width: 105px; height: 105px; } .Mount_Body_FlyingPig-Base { background-image: url(spritesmith-main-6.png); - background-position: -424px -684px; + background-position: -1166px -742px; width: 105px; height: 105px; } .Mount_Body_FlyingPig-CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -530px -684px; + background-position: -1166px -848px; width: 105px; height: 105px; } .Mount_Body_FlyingPig-CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: -636px -684px; + background-position: -1166px -954px; width: 105px; height: 105px; } .Mount_Body_FlyingPig-Desert { background-image: url(spritesmith-main-6.png); - background-position: -742px -684px; + background-position: 0px -1105px; width: 105px; height: 105px; } .Mount_Body_FlyingPig-Golden { background-image: url(spritesmith-main-6.png); - background-position: -884px 0px; + background-position: -106px -1105px; + width: 105px; + height: 105px; +} +.Mount_Body_FlyingPig-Peppermint { + background-image: url(spritesmith-main-6.png); + background-position: -212px -1105px; width: 105px; height: 105px; } .Mount_Body_FlyingPig-Red { background-image: url(spritesmith-main-6.png); - background-position: -884px -106px; + background-position: -318px -1105px; width: 105px; height: 105px; } .Mount_Body_FlyingPig-Shade { background-image: url(spritesmith-main-6.png); - background-position: -884px -212px; + background-position: -424px -1105px; width: 105px; height: 105px; } .Mount_Body_FlyingPig-Skeleton { background-image: url(spritesmith-main-6.png); - background-position: -884px -318px; + background-position: -530px -1105px; width: 105px; height: 105px; } .Mount_Body_FlyingPig-Spooky { background-image: url(spritesmith-main-6.png); - background-position: -884px -424px; + background-position: -636px -1105px; width: 105px; height: 105px; } .Mount_Body_FlyingPig-White { background-image: url(spritesmith-main-6.png); - background-position: -884px -530px; + background-position: -742px -1105px; width: 105px; height: 105px; } .Mount_Body_FlyingPig-Zombie { background-image: url(spritesmith-main-6.png); - background-position: -884px -636px; + background-position: -848px -1105px; width: 105px; height: 105px; } .Mount_Body_Fox-Base { background-image: url(spritesmith-main-6.png); - background-position: 0px -790px; + background-position: -954px -1105px; width: 105px; height: 105px; } .Mount_Body_Fox-CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -106px -790px; + background-position: -1060px -1105px; width: 105px; height: 105px; } .Mount_Body_Fox-CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: -212px -790px; + background-position: -1166px -1105px; width: 105px; height: 105px; } .Mount_Body_Fox-Desert { background-image: url(spritesmith-main-6.png); - background-position: -318px -790px; + background-position: -1272px 0px; width: 105px; height: 105px; } .Mount_Body_Fox-Golden { background-image: url(spritesmith-main-6.png); - background-position: -424px -790px; + background-position: -1272px -106px; + width: 105px; + height: 105px; +} +.Mount_Body_Fox-Peppermint { + background-image: url(spritesmith-main-6.png); + background-position: -530px -115px; width: 105px; height: 105px; } .Mount_Body_Fox-Red { background-image: url(spritesmith-main-6.png); - background-position: -530px -790px; + background-position: -1272px -318px; width: 105px; height: 105px; } .Mount_Body_Fox-Shade { background-image: url(spritesmith-main-6.png); - background-position: -636px -790px; + background-position: -1272px -424px; width: 105px; height: 105px; } .Mount_Body_Fox-Skeleton { background-image: url(spritesmith-main-6.png); - background-position: -742px -790px; + background-position: -1272px -530px; width: 105px; height: 105px; } .Mount_Body_Fox-Spooky { background-image: url(spritesmith-main-6.png); - background-position: -848px -790px; + background-position: -1272px -636px; width: 105px; height: 105px; } .Mount_Body_Fox-White { background-image: url(spritesmith-main-6.png); - background-position: -990px 0px; + background-position: -1272px -742px; width: 105px; height: 105px; } .Mount_Body_Fox-Zombie { background-image: url(spritesmith-main-6.png); - background-position: -990px -106px; + background-position: -1272px -848px; width: 105px; height: 105px; } +.Mount_Body_Frog-Base { + background-image: url(spritesmith-main-6.png); + background-position: -212px -239px; + width: 105px; + height: 114px; +} +.Mount_Body_Frog-CottonCandyBlue { + background-image: url(spritesmith-main-6.png); + background-position: -106px 0px; + width: 105px; + height: 114px; +} +.Mount_Body_Frog-CottonCandyPink { + background-image: url(spritesmith-main-6.png); + background-position: -424px 0px; + width: 105px; + height: 114px; +} +.Mount_Body_Frog-Desert { + background-image: url(spritesmith-main-6.png); + background-position: -424px -115px; + width: 105px; + height: 114px; +} +.Mount_Body_Frog-Golden { + background-image: url(spritesmith-main-6.png); + background-position: -424px -230px; + width: 105px; + height: 114px; +} +.Mount_Body_Frog-Red { + background-image: url(spritesmith-main-6.png); + background-position: 0px -354px; + width: 105px; + height: 114px; +} +.Mount_Body_Frog-Shade { + background-image: url(spritesmith-main-6.png); + background-position: -106px -354px; + width: 105px; + height: 114px; +} +.Mount_Body_Frog-Skeleton { + background-image: url(spritesmith-main-6.png); + background-position: -212px -354px; + width: 105px; + height: 114px; +} +.Mount_Body_Frog-White { + background-image: url(spritesmith-main-6.png); + background-position: -318px -354px; + width: 105px; + height: 114px; +} +.Mount_Body_Frog-Zombie { + background-image: url(spritesmith-main-6.png); + background-position: -424px -354px; + width: 105px; + height: 114px; +} .Mount_Body_Gryphon-Base { background-image: url(spritesmith-main-6.png); - background-position: -990px -212px; + background-position: -848px -1211px; width: 105px; height: 105px; } .Mount_Body_Gryphon-CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -990px -318px; + background-position: -954px -1211px; width: 105px; height: 105px; } .Mount_Body_Gryphon-CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: -990px -424px; + background-position: -1060px -1211px; width: 105px; height: 105px; } .Mount_Body_Gryphon-Desert { background-image: url(spritesmith-main-6.png); - background-position: -990px -530px; + background-position: -1166px -1211px; width: 105px; height: 105px; } .Mount_Body_Gryphon-Golden { background-image: url(spritesmith-main-6.png); - background-position: -990px -636px; + background-position: -1272px -1211px; width: 105px; height: 105px; } .Mount_Body_Gryphon-Red { background-image: url(spritesmith-main-6.png); - background-position: -990px -742px; + background-position: -1378px 0px; width: 105px; height: 105px; } .Mount_Body_Gryphon-RoyalPurple { background-image: url(spritesmith-main-6.png); - background-position: 0px -896px; + background-position: -1378px -106px; width: 105px; height: 105px; } .Mount_Body_Gryphon-Shade { background-image: url(spritesmith-main-6.png); - background-position: -106px -896px; + background-position: -1378px -212px; width: 105px; height: 105px; } .Mount_Body_Gryphon-Skeleton { background-image: url(spritesmith-main-6.png); - background-position: -212px -896px; + background-position: -1378px -318px; width: 105px; height: 105px; } .Mount_Body_Gryphon-White { background-image: url(spritesmith-main-6.png); - background-position: -318px -896px; + background-position: -1378px -424px; width: 105px; height: 105px; } .Mount_Body_Gryphon-Zombie { background-image: url(spritesmith-main-6.png); - background-position: -424px -896px; + background-position: -1378px -530px; width: 105px; height: 105px; } .Mount_Body_Hedgehog-Base { background-image: url(spritesmith-main-6.png); - background-position: -530px -896px; + background-position: -1378px -636px; width: 105px; height: 105px; } .Mount_Body_Hedgehog-CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -636px -896px; + background-position: -1378px -742px; width: 105px; height: 105px; } .Mount_Body_Hedgehog-CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: -742px -896px; + background-position: -1378px -848px; width: 105px; height: 105px; } .Mount_Body_Hedgehog-Desert { background-image: url(spritesmith-main-6.png); - background-position: -848px -896px; + background-position: -1378px -954px; width: 105px; height: 105px; } .Mount_Body_Hedgehog-Golden { background-image: url(spritesmith-main-6.png); - background-position: -954px -896px; + background-position: -1378px -1060px; width: 105px; height: 105px; } .Mount_Body_Hedgehog-Red { background-image: url(spritesmith-main-6.png); - background-position: -1096px 0px; + background-position: -1378px -1166px; width: 105px; height: 105px; } .Mount_Body_Hedgehog-Shade { background-image: url(spritesmith-main-6.png); - background-position: -1096px -106px; + background-position: 0px -1317px; width: 105px; height: 105px; } .Mount_Body_Hedgehog-Skeleton { background-image: url(spritesmith-main-6.png); - background-position: -1096px -212px; + background-position: -106px -1317px; width: 105px; height: 105px; } .Mount_Body_Hedgehog-White { background-image: url(spritesmith-main-6.png); - background-position: -1096px -318px; + background-position: -212px -1317px; width: 105px; height: 105px; } .Mount_Body_Hedgehog-Zombie { background-image: url(spritesmith-main-6.png); - background-position: -1096px -424px; + background-position: -318px -1317px; width: 105px; height: 105px; } .Mount_Body_Horse-Base { background-image: url(spritesmith-main-6.png); - background-position: -1096px -530px; + background-position: -424px -1317px; width: 105px; height: 105px; } .Mount_Body_Horse-CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -1096px -636px; + background-position: -530px -1317px; width: 105px; height: 105px; } .Mount_Body_Horse-CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: -1096px -742px; + background-position: -636px -1317px; width: 105px; height: 105px; } .Mount_Body_Horse-Desert { background-image: url(spritesmith-main-6.png); - background-position: -1096px -848px; + background-position: -742px -1317px; width: 105px; height: 105px; } .Mount_Body_Horse-Golden { background-image: url(spritesmith-main-6.png); - background-position: 0px -1002px; + background-position: -848px -1317px; width: 105px; height: 105px; } .Mount_Body_Horse-Red { background-image: url(spritesmith-main-6.png); - background-position: -106px -1002px; + background-position: -954px -1317px; width: 105px; height: 105px; } .Mount_Body_Horse-Shade { background-image: url(spritesmith-main-6.png); - background-position: -212px -1002px; + background-position: -1060px -1317px; width: 105px; height: 105px; } .Mount_Body_Horse-Skeleton { background-image: url(spritesmith-main-6.png); - background-position: -318px -1002px; + background-position: -1166px -1317px; width: 105px; height: 105px; } .Mount_Body_Horse-White { background-image: url(spritesmith-main-6.png); - background-position: -424px -1002px; + background-position: -1272px -1317px; width: 105px; height: 105px; } .Mount_Body_Horse-Zombie { background-image: url(spritesmith-main-6.png); - background-position: -530px -1002px; + background-position: -1378px -1317px; width: 105px; height: 105px; } .Mount_Body_JackOLantern-Base { background-image: url(spritesmith-main-6.png); - background-position: -1732px -318px; + background-position: -539px -469px; width: 90px; height: 105px; } .Mount_Body_LionCub-Base { background-image: url(spritesmith-main-6.png); - background-position: -742px -1002px; + background-position: -1484px -106px; width: 105px; height: 105px; } .Mount_Body_LionCub-CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -848px -1002px; + background-position: -1484px -212px; width: 105px; height: 105px; } .Mount_Body_LionCub-CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: -954px -1002px; + background-position: -1484px -318px; width: 105px; height: 105px; } .Mount_Body_LionCub-Desert { background-image: url(spritesmith-main-6.png); - background-position: -1060px -1002px; + background-position: -1484px -424px; width: 105px; height: 105px; } .Mount_Body_LionCub-Ethereal { background-image: url(spritesmith-main-6.png); - background-position: -1202px 0px; + background-position: -1484px -530px; width: 105px; height: 105px; } .Mount_Body_LionCub-Golden { background-image: url(spritesmith-main-6.png); - background-position: -1202px -106px; + background-position: -1484px -636px; + width: 105px; + height: 105px; +} +.Mount_Body_LionCub-Peppermint { + background-image: url(spritesmith-main-6.png); + background-position: -1484px -742px; width: 105px; height: 105px; } .Mount_Body_LionCub-Red { background-image: url(spritesmith-main-6.png); - background-position: -1202px -212px; + background-position: -1484px -848px; width: 105px; height: 105px; } .Mount_Body_LionCub-Shade { background-image: url(spritesmith-main-6.png); - background-position: -1202px -318px; + background-position: -1484px -954px; width: 105px; height: 105px; } .Mount_Body_LionCub-Skeleton { background-image: url(spritesmith-main-6.png); - background-position: -454px 0px; + background-position: 0px -469px; width: 111px; height: 105px; } .Mount_Body_LionCub-Spooky { background-image: url(spritesmith-main-6.png); - background-position: -1202px -530px; + background-position: -1484px -1166px; width: 105px; height: 105px; } .Mount_Body_LionCub-White { background-image: url(spritesmith-main-6.png); - background-position: -1202px -636px; + background-position: -1484px -1272px; width: 105px; height: 105px; } .Mount_Body_LionCub-Zombie { background-image: url(spritesmith-main-6.png); - background-position: -1202px -742px; + background-position: 0px -1423px; width: 105px; height: 105px; } .Mount_Body_Mammoth-Base { background-image: url(spritesmith-main-6.png); - background-position: -136px 0px; + background-position: 0px 0px; width: 105px; height: 123px; } .Mount_Body_MantisShrimp-Base { background-image: url(spritesmith-main-6.png); - background-position: -454px -106px; + background-position: -112px -469px; width: 108px; height: 105px; } .Mount_Body_Octopus-Base { background-image: url(spritesmith-main-6.png); - background-position: 0px -1108px; + background-position: -318px -1423px; width: 105px; height: 105px; } .Mount_Body_Octopus-CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -106px -1108px; + background-position: -424px -1423px; width: 105px; height: 105px; } .Mount_Body_Octopus-CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: -1732px -212px; + background-position: -530px -1423px; width: 105px; height: 105px; } .Mount_Body_Octopus-Desert { background-image: url(spritesmith-main-6.png); - background-position: -318px -1108px; + background-position: -636px -1423px; width: 105px; height: 105px; } .Mount_Body_Octopus-Golden { background-image: url(spritesmith-main-6.png); - background-position: -424px -1108px; + background-position: -742px -1423px; width: 105px; height: 105px; } .Mount_Body_Octopus-Red { background-image: url(spritesmith-main-6.png); - background-position: -530px -1108px; + background-position: -848px -1423px; width: 105px; height: 105px; } .Mount_Body_Octopus-Shade { background-image: url(spritesmith-main-6.png); - background-position: -636px -1108px; + background-position: -954px -1423px; width: 105px; height: 105px; } .Mount_Body_Octopus-Skeleton { background-image: url(spritesmith-main-6.png); - background-position: -742px -1108px; + background-position: -1060px -1423px; width: 105px; height: 105px; } .Mount_Body_Octopus-White { background-image: url(spritesmith-main-6.png); - background-position: -848px -1108px; + background-position: -1166px -1423px; width: 105px; height: 105px; } .Mount_Body_Octopus-Zombie { background-image: url(spritesmith-main-6.png); - background-position: -954px -1108px; + background-position: -1272px -1423px; width: 105px; height: 105px; } .Mount_Body_Orca-Base { background-image: url(spritesmith-main-6.png); - background-position: -1060px -1108px; + background-position: -1378px -1423px; width: 105px; height: 105px; } .Mount_Body_Owl-Base { background-image: url(spritesmith-main-6.png); - background-position: -1166px -1108px; + background-position: -1484px -1423px; width: 105px; height: 105px; } .Mount_Body_Owl-CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -1308px 0px; + background-position: -1590px 0px; width: 105px; height: 105px; } .Mount_Body_Owl-CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: -1308px -106px; + background-position: -1590px -106px; width: 105px; height: 105px; } .Mount_Body_Owl-Desert { background-image: url(spritesmith-main-6.png); - background-position: -1308px -212px; + background-position: -1590px -212px; width: 105px; height: 105px; } .Mount_Body_Owl-Golden { background-image: url(spritesmith-main-6.png); - background-position: -1308px -318px; + background-position: -1590px -318px; width: 105px; height: 105px; } .Mount_Body_Owl-Red { background-image: url(spritesmith-main-6.png); - background-position: -1308px -424px; + background-position: -1590px -424px; width: 105px; height: 105px; } .Mount_Body_Owl-Shade { background-image: url(spritesmith-main-6.png); - background-position: -1308px -530px; + background-position: -1590px -530px; width: 105px; height: 105px; } .Mount_Body_Owl-Skeleton { background-image: url(spritesmith-main-6.png); - background-position: -1308px -636px; + background-position: -1590px -636px; width: 105px; height: 105px; } .Mount_Body_Owl-White { background-image: url(spritesmith-main-6.png); - background-position: -1308px -742px; + background-position: -1590px -742px; width: 105px; height: 105px; } .Mount_Body_Owl-Zombie { background-image: url(spritesmith-main-6.png); - background-position: -1308px -848px; + background-position: -1590px -848px; width: 105px; height: 105px; } .Mount_Body_PandaCub-Base { background-image: url(spritesmith-main-6.png); - background-position: -1308px -954px; + background-position: -1590px -954px; width: 105px; height: 105px; } .Mount_Body_PandaCub-CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -1308px -1060px; + background-position: -1590px -1060px; width: 105px; height: 105px; } .Mount_Body_PandaCub-CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: 0px -1214px; + background-position: -1590px -1166px; width: 105px; height: 105px; } .Mount_Body_PandaCub-Desert { background-image: url(spritesmith-main-6.png); - background-position: -106px -1214px; + background-position: -1590px -1272px; width: 105px; height: 105px; } .Mount_Body_PandaCub-Golden { background-image: url(spritesmith-main-6.png); - background-position: -212px -1214px; + background-position: -1590px -1378px; + width: 105px; + height: 105px; +} +.Mount_Body_PandaCub-Peppermint { + background-image: url(spritesmith-main-6.png); + background-position: 0px -1529px; width: 105px; height: 105px; } .Mount_Body_PandaCub-Red { background-image: url(spritesmith-main-6.png); - background-position: -318px -1214px; + background-position: -106px -1529px; width: 105px; height: 105px; } .Mount_Body_PandaCub-Shade { background-image: url(spritesmith-main-6.png); - background-position: -424px -1214px; + background-position: -212px -1529px; width: 105px; height: 105px; } .Mount_Body_PandaCub-Skeleton { background-image: url(spritesmith-main-6.png); - background-position: -530px -1214px; + background-position: -318px -1529px; width: 105px; height: 105px; } .Mount_Body_PandaCub-Spooky { background-image: url(spritesmith-main-6.png); - background-position: -636px -1214px; + background-position: -424px -1529px; width: 105px; height: 105px; } .Mount_Body_PandaCub-White { background-image: url(spritesmith-main-6.png); - background-position: -742px -1214px; + background-position: -530px -1529px; width: 105px; height: 105px; } .Mount_Body_PandaCub-Zombie { background-image: url(spritesmith-main-6.png); - background-position: -848px -1214px; + background-position: -636px -1529px; width: 105px; height: 105px; } .Mount_Body_Parrot-Base { background-image: url(spritesmith-main-6.png); - background-position: -954px -1214px; + background-position: -742px -1529px; width: 105px; height: 105px; } .Mount_Body_Parrot-CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -1060px -1214px; + background-position: -848px -1529px; width: 105px; height: 105px; } .Mount_Body_Parrot-CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: -1166px -1214px; + background-position: -954px -1529px; width: 105px; height: 105px; } .Mount_Body_Parrot-Desert { background-image: url(spritesmith-main-6.png); - background-position: -1272px -1214px; + background-position: -1060px -1529px; width: 105px; height: 105px; } .Mount_Body_Parrot-Golden { background-image: url(spritesmith-main-6.png); - background-position: -1414px 0px; + background-position: -1166px -1529px; width: 105px; height: 105px; } .Mount_Body_Parrot-Red { background-image: url(spritesmith-main-6.png); - background-position: -1414px -106px; + background-position: -1272px -1529px; width: 105px; height: 105px; } .Mount_Body_Parrot-Shade { background-image: url(spritesmith-main-6.png); - background-position: -1414px -212px; + background-position: -1378px -1529px; width: 105px; height: 105px; } .Mount_Body_Parrot-Skeleton { background-image: url(spritesmith-main-6.png); - background-position: -1414px -318px; + background-position: -1484px 0px; width: 105px; height: 105px; } .Mount_Body_Parrot-White { background-image: url(spritesmith-main-6.png); - background-position: -1414px -424px; + background-position: -1272px -212px; width: 105px; height: 105px; } .Mount_Body_Parrot-Zombie { background-image: url(spritesmith-main-6.png); - background-position: -1414px -530px; + background-position: -433px -469px; width: 105px; height: 105px; } .Mount_Body_Penguin-Base { background-image: url(spritesmith-main-6.png); - background-position: -1414px -636px; + background-position: -327px -469px; width: 105px; height: 105px; } .Mount_Body_Penguin-CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -1414px -742px; + background-position: -221px -469px; width: 105px; height: 105px; } .Mount_Body_Penguin-CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: -1414px -848px; + background-position: -530px -327px; width: 105px; height: 105px; } .Mount_Body_Penguin-Desert { background-image: url(spritesmith-main-6.png); - background-position: -1414px -954px; + background-position: -530px -221px; width: 105px; height: 105px; } .Mount_Body_Penguin-Golden { background-image: url(spritesmith-main-6.png); - background-position: -1414px -1060px; + background-position: -212px -1423px; width: 105px; height: 105px; } .Mount_Body_Penguin-Red { background-image: url(spritesmith-main-6.png); - background-position: -1414px -1166px; + background-position: -106px -1423px; width: 105px; height: 105px; } .Mount_Body_Penguin-Shade { background-image: url(spritesmith-main-6.png); - background-position: 0px -1320px; + background-position: -1484px -1060px; width: 105px; height: 105px; } .Mount_Body_Penguin-Skeleton { background-image: url(spritesmith-main-6.png); - background-position: -106px -1320px; + background-position: -742px -1211px; width: 105px; height: 105px; } .Mount_Body_Penguin-White { background-image: url(spritesmith-main-6.png); - background-position: -212px -1320px; + background-position: -636px -1211px; width: 105px; height: 105px; } .Mount_Body_Penguin-Zombie { background-image: url(spritesmith-main-6.png); - background-position: -318px -1320px; + background-position: -530px -1211px; width: 105px; height: 105px; } .Mount_Body_Phoenix-Base { background-image: url(spritesmith-main-6.png); - background-position: -424px -1320px; + background-position: -424px -1211px; width: 105px; height: 105px; } .Mount_Body_Rat-Base { background-image: url(spritesmith-main-6.png); - background-position: -530px -1320px; + background-position: -318px -1211px; width: 105px; height: 105px; } .Mount_Body_Rat-CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -636px -1320px; + background-position: -212px -1211px; width: 105px; height: 105px; } .Mount_Body_Rat-CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: -742px -1320px; + background-position: -106px -1211px; width: 105px; height: 105px; } .Mount_Body_Rat-Desert { background-image: url(spritesmith-main-6.png); - background-position: -848px -1320px; + background-position: 0px -1211px; width: 105px; height: 105px; } .Mount_Body_Rat-Golden { background-image: url(spritesmith-main-6.png); - background-position: -954px -1320px; + background-position: -1272px -1060px; width: 105px; height: 105px; } .Mount_Body_Rat-Red { background-image: url(spritesmith-main-6.png); - background-position: -1060px -1320px; + background-position: -1272px -954px; width: 105px; height: 105px; } .Mount_Body_Rat-Shade { background-image: url(spritesmith-main-6.png); - background-position: -1166px -1320px; + background-position: -424px -893px; width: 105px; height: 105px; } .Mount_Body_Rat-Skeleton { background-image: url(spritesmith-main-6.png); - background-position: -1272px -1320px; + background-position: -318px -893px; width: 105px; height: 105px; } .Mount_Body_Rat-White { background-image: url(spritesmith-main-6.png); - background-position: -1378px -1320px; + background-position: -212px -893px; width: 105px; height: 105px; } .Mount_Body_Rat-Zombie { background-image: url(spritesmith-main-6.png); - background-position: -1520px 0px; + background-position: -106px -893px; width: 105px; height: 105px; } .Mount_Body_Rock-Base { background-image: url(spritesmith-main-6.png); - background-position: -1520px -106px; + background-position: 0px -893px; width: 105px; height: 105px; } .Mount_Body_Rock-CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -1520px -212px; + background-position: -954px -742px; width: 105px; height: 105px; } .Mount_Body_Rock-CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: -1520px -318px; + background-position: -954px -636px; width: 105px; height: 105px; } .Mount_Body_Rock-Desert { background-image: url(spritesmith-main-6.png); - background-position: -1520px -424px; + background-position: -954px -530px; width: 105px; height: 105px; } .Mount_Body_Rock-Golden { background-image: url(spritesmith-main-6.png); - background-position: -1520px -530px; + background-position: -954px -424px; width: 105px; height: 105px; } .Mount_Body_Rock-Red { background-image: url(spritesmith-main-6.png); - background-position: -1520px -636px; + background-position: -954px -318px; width: 105px; height: 105px; } -.Mount_Body_Rock-Shade { - background-image: url(spritesmith-main-6.png); - background-position: -1520px -742px; - width: 105px; - height: 105px; -} -.Mount_Body_Rock-Skeleton { - background-image: url(spritesmith-main-6.png); - background-position: -1520px -848px; - width: 105px; - height: 105px; -} -.Mount_Body_Rock-White { - background-image: url(spritesmith-main-6.png); - background-position: -1520px -954px; - width: 105px; - height: 105px; -} -.Mount_Body_Rock-Zombie { - background-image: url(spritesmith-main-6.png); - background-position: -1520px -1060px; - width: 105px; - height: 105px; -} -.Mount_Body_Rooster-Base { - background-image: url(spritesmith-main-6.png); - background-position: -1520px -1166px; - width: 105px; - height: 105px; -} -.Mount_Body_Rooster-CottonCandyBlue { - background-image: url(spritesmith-main-6.png); - background-position: -1520px -1272px; - width: 105px; - height: 105px; -} -.Mount_Body_Rooster-CottonCandyPink { - background-image: url(spritesmith-main-6.png); - background-position: 0px -1426px; - width: 105px; - height: 105px; -} -.Mount_Body_Rooster-Desert { - background-image: url(spritesmith-main-6.png); - background-position: -106px -1426px; - width: 105px; - height: 105px; -} -.Mount_Body_Rooster-Golden { - background-image: url(spritesmith-main-6.png); - background-position: -212px -1426px; - width: 105px; - height: 105px; -} -.Mount_Body_Rooster-Red { - background-image: url(spritesmith-main-6.png); - background-position: -318px -1426px; - width: 105px; - height: 105px; -} -.Mount_Body_Rooster-Shade { - background-image: url(spritesmith-main-6.png); - background-position: -424px -1426px; - width: 105px; - height: 105px; -} -.Mount_Body_Rooster-Skeleton { - background-image: url(spritesmith-main-6.png); - background-position: -530px -1426px; - width: 105px; - height: 105px; -} -.Mount_Body_Rooster-White { - background-image: url(spritesmith-main-6.png); - background-position: -636px -1426px; - width: 105px; - height: 105px; -} -.Mount_Body_Rooster-Zombie { - background-image: url(spritesmith-main-6.png); - background-position: -742px -1426px; - width: 105px; - height: 105px; -} -.Mount_Body_Seahorse-Base { - background-image: url(spritesmith-main-6.png); - background-position: -848px -1426px; - width: 105px; - height: 105px; -} -.Mount_Body_Seahorse-CottonCandyBlue { - background-image: url(spritesmith-main-6.png); - background-position: -954px -1426px; - width: 105px; - height: 105px; -} -.Mount_Body_Seahorse-CottonCandyPink { - background-image: url(spritesmith-main-6.png); - background-position: -1060px -1426px; - width: 105px; - height: 105px; -} -.Mount_Body_Seahorse-Desert { - background-image: url(spritesmith-main-6.png); - background-position: -1166px -1426px; - width: 105px; - height: 105px; -} -.Mount_Body_Seahorse-Golden { - background-image: url(spritesmith-main-6.png); - background-position: -1272px -1426px; - width: 105px; - height: 105px; -} -.Mount_Body_Seahorse-Red { - background-image: url(spritesmith-main-6.png); - background-position: -1378px -1426px; - width: 105px; - height: 105px; -} -.Mount_Body_Seahorse-Shade { - background-image: url(spritesmith-main-6.png); - background-position: -1484px -1426px; - width: 105px; - height: 105px; -} -.Mount_Body_Seahorse-Skeleton { - background-image: url(spritesmith-main-6.png); - background-position: -1626px 0px; - width: 105px; - height: 105px; -} -.Mount_Body_Seahorse-White { - background-image: url(spritesmith-main-6.png); - background-position: -1626px -106px; - width: 105px; - height: 105px; -} -.Mount_Body_Seahorse-Zombie { - background-image: url(spritesmith-main-6.png); - background-position: -1626px -212px; - width: 105px; - height: 105px; -} -.Mount_Body_Sheep-Base { - background-image: url(spritesmith-main-6.png); - background-position: -1626px -318px; - width: 105px; - height: 105px; -} -.Mount_Body_Sheep-CottonCandyBlue { - background-image: url(spritesmith-main-6.png); - background-position: -1626px -424px; - width: 105px; - height: 105px; -} -.Mount_Body_Sheep-CottonCandyPink { - background-image: url(spritesmith-main-6.png); - background-position: -1626px -530px; - width: 105px; - height: 105px; -} -.Mount_Body_Sheep-Desert { - background-image: url(spritesmith-main-6.png); - background-position: -1626px -636px; - width: 105px; - height: 105px; -} -.Mount_Body_Sheep-Golden { - background-image: url(spritesmith-main-6.png); - background-position: -1626px -742px; - width: 105px; - height: 105px; -} -.Mount_Body_Sheep-Red { - background-image: url(spritesmith-main-6.png); - background-position: -1626px -848px; - width: 105px; - height: 105px; -} -.Mount_Body_Sheep-Shade { - background-image: url(spritesmith-main-6.png); - background-position: -1626px -954px; - width: 105px; - height: 105px; -} -.Mount_Body_Sheep-Skeleton { - background-image: url(spritesmith-main-6.png); - background-position: -1626px -1060px; - width: 105px; - height: 105px; -} -.Mount_Body_Sheep-White { - background-image: url(spritesmith-main-6.png); - background-position: -1626px -1166px; - width: 105px; - height: 105px; -} -.Mount_Body_Sheep-Zombie { - background-image: url(spritesmith-main-6.png); - background-position: -1626px -1272px; - width: 105px; - height: 105px; -} -.Mount_Body_Slime-Base { - background-image: url(spritesmith-main-6.png); - background-position: -1626px -1378px; - width: 105px; - height: 105px; -} -.Mount_Body_Slime-CottonCandyBlue { - background-image: url(spritesmith-main-6.png); - background-position: 0px -1532px; - width: 105px; - height: 105px; -} -.Mount_Body_Slime-CottonCandyPink { - background-image: url(spritesmith-main-6.png); - background-position: -106px -1532px; - width: 105px; - height: 105px; -} -.Mount_Body_Slime-Desert { - background-image: url(spritesmith-main-6.png); - background-position: -212px -1532px; - width: 105px; - height: 105px; -} -.Mount_Body_Slime-Golden { - background-image: url(spritesmith-main-6.png); - background-position: -318px -1532px; - width: 105px; - height: 105px; -} -.Mount_Body_Slime-Red { - background-image: url(spritesmith-main-6.png); - background-position: -424px -1532px; - width: 105px; - height: 105px; -} -.Mount_Body_Slime-Shade { - background-image: url(spritesmith-main-6.png); - background-position: -530px -1532px; - width: 105px; - height: 105px; -} -.Mount_Body_Slime-Skeleton { - background-image: url(spritesmith-main-6.png); - background-position: -636px -1532px; - width: 105px; - height: 105px; -} -.Mount_Body_Slime-White { - background-image: url(spritesmith-main-6.png); - background-position: -742px -1532px; - width: 105px; - height: 105px; -} -.Mount_Body_Slime-Zombie { - background-image: url(spritesmith-main-6.png); - background-position: -848px -1532px; - width: 105px; - height: 105px; -} -.Mount_Body_Spider-Base { - background-image: url(spritesmith-main-6.png); - background-position: -954px -1532px; - width: 105px; - height: 105px; -} -.Mount_Body_Spider-CottonCandyBlue { - background-image: url(spritesmith-main-6.png); - background-position: -1060px -1532px; - width: 105px; - height: 105px; -} -.Mount_Body_Spider-CottonCandyPink { - background-image: url(spritesmith-main-6.png); - background-position: -1166px -1532px; - width: 105px; - height: 105px; -} -.Mount_Body_Spider-Desert { - background-image: url(spritesmith-main-6.png); - background-position: -1272px -1532px; - width: 105px; - height: 105px; -} -.Mount_Body_Spider-Golden { - background-image: url(spritesmith-main-6.png); - background-position: -1378px -1532px; - width: 105px; - height: 105px; -} -.Mount_Body_Spider-Red { - background-image: url(spritesmith-main-6.png); - background-position: -1484px -1532px; - width: 105px; - height: 105px; -} -.Mount_Body_Spider-Shade { - background-image: url(spritesmith-main-6.png); - background-position: -1590px -1532px; - width: 105px; - height: 105px; -} -.Mount_Body_Spider-Skeleton { - background-image: url(spritesmith-main-6.png); - background-position: -1732px 0px; - width: 105px; - height: 105px; -} -.Mount_Body_Spider-White { - background-image: url(spritesmith-main-6.png); - background-position: -1732px -106px; - width: 105px; - height: 105px; -} -.Mount_Body_Spider-Zombie { - background-image: url(spritesmith-main-6.png); - background-position: -636px -1002px; - width: 105px; - height: 105px; -} -.Mount_Body_TRex-Base { - background-image: url(spritesmith-main-6.png); - background-position: 0px 0px; - width: 135px; - height: 135px; -} diff --git a/common/dist/sprites/spritesmith-main-6.png b/common/dist/sprites/spritesmith-main-6.png index 1ea9053aa3..e0d6bf563a 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 7138dd454a..962608e9e1 100644 --- a/common/dist/sprites/spritesmith-main-7.css +++ b/common/dist/sprites/spritesmith-main-7.css @@ -1,522 +1,936 @@ -.Mount_Body_TRex-CottonCandyBlue { - background-image: url(spritesmith-main-7.png); - background-position: -136px 0px; - width: 135px; - height: 135px; -} -.Mount_Body_TRex-CottonCandyPink { - background-image: url(spritesmith-main-7.png); - background-position: -544px -408px; - width: 135px; - height: 135px; -} -.Mount_Body_TRex-Desert { - background-image: url(spritesmith-main-7.png); - background-position: -544px 0px; - width: 135px; - height: 135px; -} -.Mount_Body_TRex-Golden { - background-image: url(spritesmith-main-7.png); - background-position: 0px -136px; - width: 135px; - height: 135px; -} -.Mount_Body_TRex-Red { - background-image: url(spritesmith-main-7.png); - background-position: -136px -136px; - width: 135px; - height: 135px; -} -.Mount_Body_TRex-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -272px 0px; - width: 135px; - height: 135px; -} -.Mount_Body_TRex-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: -272px -136px; - width: 135px; - height: 135px; -} -.Mount_Body_TRex-White { - background-image: url(spritesmith-main-7.png); - background-position: 0px -272px; - width: 135px; - height: 135px; -} -.Mount_Body_TRex-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -136px -272px; - width: 135px; - height: 135px; -} -.Mount_Body_TigerCub-Base { - background-image: url(spritesmith-main-7.png); - background-position: -1528px -848px; - width: 105px; - height: 105px; -} -.Mount_Body_TigerCub-CottonCandyBlue { - background-image: url(spritesmith-main-7.png); - background-position: -215px -668px; - width: 105px; - height: 105px; -} -.Mount_Body_TigerCub-CottonCandyPink { - background-image: url(spritesmith-main-7.png); - background-position: -321px -668px; - width: 105px; - height: 105px; -} -.Mount_Body_TigerCub-Desert { - background-image: url(spritesmith-main-7.png); - background-position: -427px -668px; - width: 105px; - height: 105px; -} -.Mount_Body_TigerCub-Golden { - background-image: url(spritesmith-main-7.png); - background-position: -533px -668px; - width: 105px; - height: 105px; -} -.Mount_Body_TigerCub-Red { - background-image: url(spritesmith-main-7.png); - background-position: -639px -668px; - width: 105px; - height: 105px; -} -.Mount_Body_TigerCub-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -786px 0px; - width: 105px; - height: 105px; -} -.Mount_Body_TigerCub-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: -786px -106px; - width: 105px; - height: 105px; -} -.Mount_Body_TigerCub-Spooky { - background-image: url(spritesmith-main-7.png); - background-position: -786px -212px; - width: 105px; - height: 105px; -} -.Mount_Body_TigerCub-White { - background-image: url(spritesmith-main-7.png); - background-position: -786px -318px; - width: 105px; - height: 105px; -} -.Mount_Body_TigerCub-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -636px -991px; - width: 105px; - height: 105px; -} -.Mount_Body_Turkey-Base { - background-image: url(spritesmith-main-7.png); - background-position: -742px -991px; - width: 105px; - height: 105px; -} -.Mount_Body_Whale-Base { - background-image: url(spritesmith-main-7.png); - background-position: -848px -991px; - width: 105px; - height: 105px; -} -.Mount_Body_Whale-CottonCandyBlue { - background-image: url(spritesmith-main-7.png); - background-position: -954px -991px; - width: 105px; - height: 105px; -} -.Mount_Body_Whale-CottonCandyPink { - background-image: url(spritesmith-main-7.png); - background-position: -1104px 0px; - width: 105px; - height: 105px; -} -.Mount_Body_Whale-Desert { - background-image: url(spritesmith-main-7.png); - background-position: -1104px -106px; - width: 105px; - height: 105px; -} -.Mount_Body_Whale-Golden { - background-image: url(spritesmith-main-7.png); - background-position: -1104px -212px; - width: 105px; - height: 105px; -} -.Mount_Body_Whale-Red { - background-image: url(spritesmith-main-7.png); - background-position: -1104px -318px; - width: 105px; - height: 105px; -} -.Mount_Body_Whale-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -1104px -424px; - width: 105px; - height: 105px; -} -.Mount_Body_Whale-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: -1104px -530px; - width: 105px; - height: 105px; -} -.Mount_Body_Whale-White { - background-image: url(spritesmith-main-7.png); - background-position: -1210px -742px; - width: 105px; - height: 105px; -} -.Mount_Body_Whale-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -1528px -318px; - width: 105px; - height: 105px; -} -.Mount_Body_Wolf-Base { - background-image: url(spritesmith-main-7.png); - background-position: -272px -272px; - width: 135px; - height: 135px; -} -.Mount_Body_Wolf-CottonCandyBlue { - background-image: url(spritesmith-main-7.png); - background-position: -408px 0px; - width: 135px; - height: 135px; -} -.Mount_Body_Wolf-CottonCandyPink { - background-image: url(spritesmith-main-7.png); - background-position: -408px -136px; - width: 135px; - height: 135px; -} -.Mount_Body_Wolf-Desert { - background-image: url(spritesmith-main-7.png); - background-position: -408px -272px; - width: 135px; - height: 135px; -} -.Mount_Body_Wolf-Golden { - background-image: url(spritesmith-main-7.png); - background-position: 0px -408px; - width: 135px; - height: 135px; -} -.Mount_Body_Wolf-Red { - background-image: url(spritesmith-main-7.png); - background-position: -136px -408px; - width: 135px; - height: 135px; -} -.Mount_Body_Wolf-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -272px -408px; - width: 135px; - height: 135px; -} -.Mount_Body_Wolf-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: -408px -408px; - width: 135px; - height: 135px; -} -.Mount_Body_Wolf-Spooky { - background-image: url(spritesmith-main-7.png); - background-position: 0px 0px; - width: 135px; - height: 135px; -} -.Mount_Body_Wolf-White { - background-image: url(spritesmith-main-7.png); - background-position: -544px -136px; - width: 135px; - height: 135px; -} -.Mount_Body_Wolf-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -544px -272px; - width: 135px; - height: 135px; -} -.Mount_Head_BearCub-Base { - background-image: url(spritesmith-main-7.png); - background-position: -786px -424px; - width: 105px; - height: 105px; -} -.Mount_Head_BearCub-CottonCandyBlue { - background-image: url(spritesmith-main-7.png); - background-position: -786px -530px; - width: 105px; - height: 105px; -} -.Mount_Head_BearCub-CottonCandyPink { - background-image: url(spritesmith-main-7.png); - background-position: -786px -636px; - width: 105px; - height: 105px; -} -.Mount_Head_BearCub-Desert { - background-image: url(spritesmith-main-7.png); - background-position: 0px -779px; - width: 105px; - height: 105px; -} -.Mount_Head_BearCub-Golden { - background-image: url(spritesmith-main-7.png); - background-position: -106px -779px; - width: 105px; - height: 105px; -} -.Mount_Head_BearCub-Polar { - background-image: url(spritesmith-main-7.png); - background-position: -212px -779px; - width: 105px; - height: 105px; -} -.Mount_Head_BearCub-Red { - background-image: url(spritesmith-main-7.png); - background-position: -318px -779px; - width: 105px; - height: 105px; -} -.Mount_Head_BearCub-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -424px -779px; - width: 105px; - height: 105px; -} -.Mount_Head_BearCub-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: -530px -779px; - width: 105px; - height: 105px; -} -.Mount_Head_BearCub-Spooky { - background-image: url(spritesmith-main-7.png); - background-position: -636px -779px; - width: 105px; - height: 105px; -} -.Mount_Head_BearCub-White { - background-image: url(spritesmith-main-7.png); - background-position: -742px -779px; - width: 105px; - height: 105px; -} -.Mount_Head_BearCub-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -892px 0px; - width: 105px; - height: 105px; -} -.Mount_Head_Bunny-Base { - background-image: url(spritesmith-main-7.png); - background-position: -892px -106px; - width: 105px; - height: 105px; -} -.Mount_Head_Bunny-CottonCandyBlue { - background-image: url(spritesmith-main-7.png); - background-position: -892px -212px; - width: 105px; - height: 105px; -} -.Mount_Head_Bunny-CottonCandyPink { - background-image: url(spritesmith-main-7.png); - background-position: -892px -318px; - width: 105px; - height: 105px; -} -.Mount_Head_Bunny-Desert { - background-image: url(spritesmith-main-7.png); - background-position: -892px -424px; - width: 105px; - height: 105px; -} -.Mount_Head_Bunny-Golden { - background-image: url(spritesmith-main-7.png); - background-position: -892px -530px; - width: 105px; - height: 105px; -} -.Mount_Head_Bunny-Red { - background-image: url(spritesmith-main-7.png); - background-position: -892px -636px; - width: 105px; - height: 105px; -} -.Mount_Head_Bunny-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -892px -742px; - width: 105px; - height: 105px; -} -.Mount_Head_Bunny-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: 0px -885px; - width: 105px; - height: 105px; -} -.Mount_Head_Bunny-White { - background-image: url(spritesmith-main-7.png); - background-position: -106px -885px; - width: 105px; - height: 105px; -} -.Mount_Head_Bunny-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -212px -885px; - width: 105px; - height: 105px; -} -.Mount_Head_Cactus-Base { - background-image: url(spritesmith-main-7.png); - background-position: -318px -885px; - width: 105px; - height: 105px; -} -.Mount_Head_Cactus-CottonCandyBlue { - background-image: url(spritesmith-main-7.png); - background-position: -424px -885px; - width: 105px; - height: 105px; -} -.Mount_Head_Cactus-CottonCandyPink { - background-image: url(spritesmith-main-7.png); - background-position: -530px -885px; - width: 105px; - height: 105px; -} -.Mount_Head_Cactus-Desert { - background-image: url(spritesmith-main-7.png); - background-position: -636px -885px; - width: 105px; - height: 105px; -} -.Mount_Head_Cactus-Golden { - background-image: url(spritesmith-main-7.png); - background-position: -742px -885px; - width: 105px; - height: 105px; -} -.Mount_Head_Cactus-Red { - background-image: url(spritesmith-main-7.png); - background-position: -848px -885px; - width: 105px; - height: 105px; -} -.Mount_Head_Cactus-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -998px 0px; - width: 105px; - height: 105px; -} -.Mount_Head_Cactus-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: -998px -106px; - width: 105px; - height: 105px; -} -.Mount_Head_Cactus-Spooky { - background-image: url(spritesmith-main-7.png); - background-position: -998px -212px; - width: 105px; - height: 105px; -} -.Mount_Head_Cactus-White { - background-image: url(spritesmith-main-7.png); - background-position: -998px -318px; - width: 105px; - height: 105px; -} -.Mount_Head_Cactus-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -998px -424px; - width: 105px; - height: 105px; -} -.Mount_Head_Cheetah-Base { +.Mount_Body_Rock-Shade { background-image: url(spritesmith-main-7.png); background-position: -998px -530px; width: 105px; height: 105px; } -.Mount_Head_Cheetah-CottonCandyBlue { +.Mount_Body_Rock-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: -954px -1113px; + width: 105px; + height: 105px; +} +.Mount_Body_Rock-White { background-image: url(spritesmith-main-7.png); background-position: -998px -636px; width: 105px; height: 105px; } -.Mount_Head_Cheetah-CottonCandyPink { +.Mount_Body_Rock-Zombie { background-image: url(spritesmith-main-7.png); background-position: -998px -742px; width: 105px; height: 105px; } +.Mount_Body_Rooster-Base { + background-image: url(spritesmith-main-7.png); + background-position: 0px -901px; + width: 105px; + height: 105px; +} +.Mount_Body_Rooster-CottonCandyBlue { + background-image: url(spritesmith-main-7.png); + background-position: -106px -901px; + width: 105px; + height: 105px; +} +.Mount_Body_Rooster-CottonCandyPink { + background-image: url(spritesmith-main-7.png); + background-position: -212px -901px; + width: 105px; + height: 105px; +} +.Mount_Body_Rooster-Desert { + background-image: url(spritesmith-main-7.png); + background-position: -318px -901px; + width: 105px; + height: 105px; +} +.Mount_Body_Rooster-Golden { + background-image: url(spritesmith-main-7.png); + background-position: -424px -901px; + width: 105px; + height: 105px; +} +.Mount_Body_Rooster-Red { + background-image: url(spritesmith-main-7.png); + background-position: -530px -901px; + width: 105px; + height: 105px; +} +.Mount_Body_Rooster-Shade { + background-image: url(spritesmith-main-7.png); + background-position: -636px -901px; + width: 105px; + height: 105px; +} +.Mount_Body_Rooster-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: -1210px 0px; + width: 105px; + height: 105px; +} +.Mount_Body_Rooster-White { + background-image: url(spritesmith-main-7.png); + background-position: -1210px -106px; + width: 105px; + height: 105px; +} +.Mount_Body_Rooster-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -1210px -212px; + width: 105px; + height: 105px; +} +.Mount_Body_Seahorse-Base { + background-image: url(spritesmith-main-7.png); + background-position: -1210px -318px; + width: 105px; + height: 105px; +} +.Mount_Body_Seahorse-CottonCandyBlue { + background-image: url(spritesmith-main-7.png); + background-position: -1210px -424px; + width: 105px; + height: 105px; +} +.Mount_Body_Seahorse-CottonCandyPink { + background-image: url(spritesmith-main-7.png); + background-position: -1210px -530px; + width: 105px; + height: 105px; +} +.Mount_Body_Seahorse-Desert { + background-image: url(spritesmith-main-7.png); + background-position: -1210px -636px; + width: 105px; + height: 105px; +} +.Mount_Body_Seahorse-Golden { + background-image: url(spritesmith-main-7.png); + background-position: -1210px -742px; + width: 105px; + height: 105px; +} +.Mount_Body_Seahorse-Red { + background-image: url(spritesmith-main-7.png); + background-position: -1210px -848px; + width: 105px; + height: 105px; +} +.Mount_Body_Seahorse-Shade { + background-image: url(spritesmith-main-7.png); + background-position: -1210px -954px; + width: 105px; + height: 105px; +} +.Mount_Body_Seahorse-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: 0px -1113px; + width: 105px; + height: 105px; +} +.Mount_Body_Seahorse-White { + background-image: url(spritesmith-main-7.png); + background-position: -106px -1113px; + width: 105px; + height: 105px; +} +.Mount_Body_Seahorse-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -1422px -1166px; + width: 105px; + height: 105px; +} +.Mount_Body_Sheep-Base { + background-image: url(spritesmith-main-7.png); + background-position: 0px -1325px; + width: 105px; + height: 105px; +} +.Mount_Body_Sheep-CottonCandyBlue { + background-image: url(spritesmith-main-7.png); + background-position: -106px -1325px; + width: 105px; + height: 105px; +} +.Mount_Body_Sheep-CottonCandyPink { + background-image: url(spritesmith-main-7.png); + background-position: -212px -1325px; + width: 105px; + height: 105px; +} +.Mount_Body_Sheep-Desert { + background-image: url(spritesmith-main-7.png); + background-position: -318px -1325px; + width: 105px; + height: 105px; +} +.Mount_Body_Sheep-Golden { + background-image: url(spritesmith-main-7.png); + background-position: -424px -1325px; + width: 105px; + height: 105px; +} +.Mount_Body_Sheep-Red { + background-image: url(spritesmith-main-7.png); + background-position: -530px -1325px; + width: 105px; + height: 105px; +} +.Mount_Body_Sheep-Shade { + background-image: url(spritesmith-main-7.png); + background-position: -636px -1325px; + width: 105px; + height: 105px; +} +.Mount_Body_Sheep-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: -742px -1325px; + width: 105px; + height: 105px; +} +.Mount_Body_Sheep-White { + background-image: url(spritesmith-main-7.png); + background-position: -848px -1325px; + width: 105px; + height: 105px; +} +.Mount_Body_Sheep-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -954px -1537px; + width: 105px; + height: 105px; +} +.Mount_Body_Slime-Base { + background-image: url(spritesmith-main-7.png); + background-position: -1060px -1537px; + width: 105px; + height: 105px; +} +.Mount_Body_Slime-CottonCandyBlue { + background-image: url(spritesmith-main-7.png); + background-position: -1166px -1537px; + width: 105px; + height: 105px; +} +.Mount_Body_Slime-CottonCandyPink { + background-image: url(spritesmith-main-7.png); + background-position: -1272px -1537px; + width: 105px; + height: 105px; +} +.Mount_Body_Slime-Desert { + background-image: url(spritesmith-main-7.png); + background-position: -1378px -1537px; + width: 105px; + height: 105px; +} +.Mount_Body_Slime-Golden { + background-image: url(spritesmith-main-7.png); + background-position: -1484px -1537px; + width: 105px; + height: 105px; +} +.Mount_Body_Slime-Red { + background-image: url(spritesmith-main-7.png); + background-position: -1590px -1537px; + width: 105px; + height: 105px; +} +.Mount_Body_Slime-Shade { + background-image: url(spritesmith-main-7.png); + background-position: -1740px 0px; + width: 105px; + height: 105px; +} +.Mount_Body_Slime-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: -1740px -106px; + width: 105px; + height: 105px; +} +.Mount_Body_Slime-White { + background-image: url(spritesmith-main-7.png); + background-position: -1740px -212px; + width: 105px; + height: 105px; +} +.Mount_Body_Slime-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -892px 0px; + width: 105px; + height: 105px; +} +.Mount_Body_Snake-Base { + background-image: url(spritesmith-main-7.png); + background-position: -892px -106px; + width: 105px; + height: 105px; +} +.Mount_Body_Snake-CottonCandyBlue { + background-image: url(spritesmith-main-7.png); + background-position: -892px -212px; + width: 105px; + height: 105px; +} +.Mount_Body_Snake-CottonCandyPink { + background-image: url(spritesmith-main-7.png); + background-position: -892px -318px; + width: 105px; + height: 105px; +} +.Mount_Body_Snake-Desert { + background-image: url(spritesmith-main-7.png); + background-position: -892px -424px; + width: 105px; + height: 105px; +} +.Mount_Body_Snake-Golden { + background-image: url(spritesmith-main-7.png); + background-position: -892px -530px; + width: 105px; + height: 105px; +} +.Mount_Body_Snake-Red { + background-image: url(spritesmith-main-7.png); + background-position: -892px -636px; + width: 105px; + height: 105px; +} +.Mount_Body_Snake-Shade { + background-image: url(spritesmith-main-7.png); + background-position: 0px -795px; + width: 105px; + height: 105px; +} +.Mount_Body_Snake-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: -106px -795px; + width: 105px; + height: 105px; +} +.Mount_Body_Snake-White { + background-image: url(spritesmith-main-7.png); + background-position: -212px -795px; + width: 105px; + height: 105px; +} +.Mount_Body_Snake-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -318px -795px; + width: 105px; + height: 105px; +} +.Mount_Body_Spider-Base { + background-image: url(spritesmith-main-7.png); + background-position: -424px -795px; + width: 105px; + height: 105px; +} +.Mount_Body_Spider-CottonCandyBlue { + background-image: url(spritesmith-main-7.png); + background-position: -530px -795px; + width: 105px; + height: 105px; +} +.Mount_Body_Spider-CottonCandyPink { + background-image: url(spritesmith-main-7.png); + background-position: -636px -795px; + width: 105px; + height: 105px; +} +.Mount_Body_Spider-Desert { + background-image: url(spritesmith-main-7.png); + background-position: -742px -795px; + width: 105px; + height: 105px; +} +.Mount_Body_Spider-Golden { + background-image: url(spritesmith-main-7.png); + background-position: -848px -795px; + width: 105px; + height: 105px; +} +.Mount_Body_Spider-Red { + background-image: url(spritesmith-main-7.png); + background-position: -998px 0px; + width: 105px; + height: 105px; +} +.Mount_Body_Spider-Shade { + background-image: url(spritesmith-main-7.png); + background-position: -998px -106px; + width: 105px; + height: 105px; +} +.Mount_Body_Spider-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: -998px -212px; + width: 105px; + height: 105px; +} +.Mount_Body_Spider-White { + background-image: url(spritesmith-main-7.png); + background-position: -998px -318px; + width: 105px; + height: 105px; +} +.Mount_Body_Spider-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -998px -424px; + width: 105px; + height: 105px; +} +.Mount_Body_TRex-Base { + background-image: url(spritesmith-main-7.png); + background-position: 0px -544px; + width: 135px; + height: 135px; +} +.Mount_Body_TRex-CottonCandyBlue { + background-image: url(spritesmith-main-7.png); + background-position: -408px -272px; + width: 135px; + height: 135px; +} +.Mount_Body_TRex-CottonCandyPink { + background-image: url(spritesmith-main-7.png); + background-position: 0px -136px; + width: 135px; + height: 135px; +} +.Mount_Body_TRex-Desert { + background-image: url(spritesmith-main-7.png); + background-position: -136px -136px; + width: 135px; + height: 135px; +} +.Mount_Body_TRex-Golden { + background-image: url(spritesmith-main-7.png); + background-position: -272px 0px; + width: 135px; + height: 135px; +} +.Mount_Body_TRex-Red { + background-image: url(spritesmith-main-7.png); + background-position: -272px -136px; + width: 135px; + height: 135px; +} +.Mount_Body_TRex-Shade { + background-image: url(spritesmith-main-7.png); + background-position: 0px -272px; + width: 135px; + height: 135px; +} +.Mount_Body_TRex-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: -136px -272px; + width: 135px; + height: 135px; +} +.Mount_Body_TRex-White { + background-image: url(spritesmith-main-7.png); + background-position: -272px -272px; + width: 135px; + height: 135px; +} +.Mount_Body_TRex-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -408px 0px; + width: 135px; + height: 135px; +} +.Mount_Body_TigerCub-Base { + background-image: url(spritesmith-main-7.png); + background-position: -742px -901px; + width: 105px; + height: 105px; +} +.Mount_Body_TigerCub-CottonCandyBlue { + background-image: url(spritesmith-main-7.png); + background-position: -848px -901px; + width: 105px; + height: 105px; +} +.Mount_Body_TigerCub-CottonCandyPink { + background-image: url(spritesmith-main-7.png); + background-position: -954px -901px; + width: 105px; + height: 105px; +} +.Mount_Body_TigerCub-Desert { + background-image: url(spritesmith-main-7.png); + background-position: -1104px 0px; + width: 105px; + height: 105px; +} +.Mount_Body_TigerCub-Golden { + background-image: url(spritesmith-main-7.png); + background-position: -1104px -106px; + width: 105px; + height: 105px; +} +.Mount_Body_TigerCub-Peppermint { + background-image: url(spritesmith-main-7.png); + background-position: -1104px -212px; + width: 105px; + height: 105px; +} +.Mount_Body_TigerCub-Red { + background-image: url(spritesmith-main-7.png); + background-position: -1104px -318px; + width: 105px; + height: 105px; +} +.Mount_Body_TigerCub-Shade { + background-image: url(spritesmith-main-7.png); + background-position: -1104px -424px; + width: 105px; + height: 105px; +} +.Mount_Body_TigerCub-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: -1104px -530px; + width: 105px; + height: 105px; +} +.Mount_Body_TigerCub-Spooky { + background-image: url(spritesmith-main-7.png); + background-position: -1104px -636px; + width: 105px; + height: 105px; +} +.Mount_Body_TigerCub-White { + background-image: url(spritesmith-main-7.png); + background-position: -1104px -742px; + width: 105px; + height: 105px; +} +.Mount_Body_TigerCub-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -1104px -848px; + width: 105px; + height: 105px; +} +.Mount_Body_Turkey-Base { + background-image: url(spritesmith-main-7.png); + background-position: 0px -1007px; + width: 105px; + height: 105px; +} +.Mount_Body_Whale-Base { + background-image: url(spritesmith-main-7.png); + background-position: -106px -1007px; + width: 105px; + height: 105px; +} +.Mount_Body_Whale-CottonCandyBlue { + background-image: url(spritesmith-main-7.png); + background-position: -212px -1007px; + width: 105px; + height: 105px; +} +.Mount_Body_Whale-CottonCandyPink { + background-image: url(spritesmith-main-7.png); + background-position: -318px -1007px; + width: 105px; + height: 105px; +} +.Mount_Body_Whale-Desert { + background-image: url(spritesmith-main-7.png); + background-position: -424px -1007px; + width: 105px; + height: 105px; +} +.Mount_Body_Whale-Golden { + background-image: url(spritesmith-main-7.png); + background-position: -530px -1007px; + width: 105px; + height: 105px; +} +.Mount_Body_Whale-Red { + background-image: url(spritesmith-main-7.png); + background-position: -636px -1007px; + width: 105px; + height: 105px; +} +.Mount_Body_Whale-Shade { + background-image: url(spritesmith-main-7.png); + background-position: -742px -1007px; + width: 105px; + height: 105px; +} +.Mount_Body_Whale-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: -848px -1007px; + width: 105px; + height: 105px; +} +.Mount_Body_Whale-White { + background-image: url(spritesmith-main-7.png); + background-position: -954px -1007px; + width: 105px; + height: 105px; +} +.Mount_Body_Whale-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -1060px -1007px; + width: 105px; + height: 105px; +} +.Mount_Body_Wolf-Base { + background-image: url(spritesmith-main-7.png); + background-position: -408px -136px; + width: 135px; + height: 135px; +} +.Mount_Body_Wolf-CottonCandyBlue { + background-image: url(spritesmith-main-7.png); + background-position: 0px 0px; + width: 135px; + height: 135px; +} +.Mount_Body_Wolf-CottonCandyPink { + background-image: url(spritesmith-main-7.png); + background-position: 0px -408px; + width: 135px; + height: 135px; +} +.Mount_Body_Wolf-Desert { + background-image: url(spritesmith-main-7.png); + background-position: -136px -408px; + width: 135px; + height: 135px; +} +.Mount_Body_Wolf-Golden { + background-image: url(spritesmith-main-7.png); + background-position: -272px -408px; + width: 135px; + height: 135px; +} +.Mount_Body_Wolf-Peppermint { + background-image: url(spritesmith-main-7.png); + background-position: -408px -408px; + width: 135px; + height: 135px; +} +.Mount_Body_Wolf-Red { + background-image: url(spritesmith-main-7.png); + background-position: -544px 0px; + width: 135px; + height: 135px; +} +.Mount_Body_Wolf-Shade { + background-image: url(spritesmith-main-7.png); + background-position: -544px -136px; + width: 135px; + height: 135px; +} +.Mount_Body_Wolf-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: -544px -272px; + width: 135px; + height: 135px; +} +.Mount_Body_Wolf-Spooky { + background-image: url(spritesmith-main-7.png); + background-position: -544px -408px; + width: 135px; + height: 135px; +} +.Mount_Body_Wolf-White { + background-image: url(spritesmith-main-7.png); + background-position: -136px 0px; + width: 135px; + height: 135px; +} +.Mount_Body_Wolf-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -136px -544px; + width: 135px; + height: 135px; +} +.Mount_Head_BearCub-Base { + background-image: url(spritesmith-main-7.png); + background-position: -212px -1113px; + width: 105px; + height: 105px; +} +.Mount_Head_BearCub-CottonCandyBlue { + background-image: url(spritesmith-main-7.png); + background-position: -318px -1113px; + width: 105px; + height: 105px; +} +.Mount_Head_BearCub-CottonCandyPink { + background-image: url(spritesmith-main-7.png); + background-position: -424px -1113px; + width: 105px; + height: 105px; +} +.Mount_Head_BearCub-Desert { + background-image: url(spritesmith-main-7.png); + background-position: -530px -1113px; + width: 105px; + height: 105px; +} +.Mount_Head_BearCub-Golden { + background-image: url(spritesmith-main-7.png); + background-position: -636px -1113px; + width: 105px; + height: 105px; +} +.Mount_Head_BearCub-Peppermint { + background-image: url(spritesmith-main-7.png); + background-position: -742px -1113px; + width: 105px; + height: 105px; +} +.Mount_Head_BearCub-Polar { + background-image: url(spritesmith-main-7.png); + background-position: -848px -1113px; + width: 105px; + height: 105px; +} +.Mount_Head_BearCub-Red { + background-image: url(spritesmith-main-7.png); + background-position: -742px -680px; + width: 105px; + height: 105px; +} +.Mount_Head_BearCub-Shade { + background-image: url(spritesmith-main-7.png); + background-position: -1060px -1113px; + width: 105px; + height: 105px; +} +.Mount_Head_BearCub-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: -1166px -1113px; + width: 105px; + height: 105px; +} +.Mount_Head_BearCub-Spooky { + background-image: url(spritesmith-main-7.png); + background-position: -1316px 0px; + width: 105px; + height: 105px; +} +.Mount_Head_BearCub-White { + background-image: url(spritesmith-main-7.png); + background-position: -1316px -106px; + width: 105px; + height: 105px; +} +.Mount_Head_BearCub-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -1316px -212px; + width: 105px; + height: 105px; +} +.Mount_Head_Bunny-Base { + background-image: url(spritesmith-main-7.png); + background-position: -1316px -318px; + width: 105px; + height: 105px; +} +.Mount_Head_Bunny-CottonCandyBlue { + background-image: url(spritesmith-main-7.png); + background-position: -1316px -424px; + width: 105px; + height: 105px; +} +.Mount_Head_Bunny-CottonCandyPink { + background-image: url(spritesmith-main-7.png); + background-position: -1316px -530px; + width: 105px; + height: 105px; +} +.Mount_Head_Bunny-Desert { + background-image: url(spritesmith-main-7.png); + background-position: -1316px -636px; + width: 105px; + height: 105px; +} +.Mount_Head_Bunny-Golden { + background-image: url(spritesmith-main-7.png); + background-position: -1316px -742px; + width: 105px; + height: 105px; +} +.Mount_Head_Bunny-Red { + background-image: url(spritesmith-main-7.png); + background-position: -1316px -848px; + width: 105px; + height: 105px; +} +.Mount_Head_Bunny-Shade { + background-image: url(spritesmith-main-7.png); + background-position: -1316px -954px; + width: 105px; + height: 105px; +} +.Mount_Head_Bunny-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: -1316px -1060px; + width: 105px; + height: 105px; +} +.Mount_Head_Bunny-White { + background-image: url(spritesmith-main-7.png); + background-position: 0px -1219px; + width: 105px; + height: 105px; +} +.Mount_Head_Bunny-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -106px -1219px; + width: 105px; + height: 105px; +} +.Mount_Head_Cactus-Base { + background-image: url(spritesmith-main-7.png); + background-position: -212px -1219px; + width: 105px; + height: 105px; +} +.Mount_Head_Cactus-CottonCandyBlue { + background-image: url(spritesmith-main-7.png); + background-position: -318px -1219px; + width: 105px; + height: 105px; +} +.Mount_Head_Cactus-CottonCandyPink { + background-image: url(spritesmith-main-7.png); + background-position: -424px -1219px; + width: 105px; + height: 105px; +} +.Mount_Head_Cactus-Desert { + background-image: url(spritesmith-main-7.png); + background-position: -530px -1219px; + width: 105px; + height: 105px; +} +.Mount_Head_Cactus-Golden { + background-image: url(spritesmith-main-7.png); + background-position: -636px -1219px; + width: 105px; + height: 105px; +} +.Mount_Head_Cactus-Peppermint { + background-image: url(spritesmith-main-7.png); + background-position: -742px -1219px; + width: 105px; + height: 105px; +} +.Mount_Head_Cactus-Red { + background-image: url(spritesmith-main-7.png); + background-position: -848px -1219px; + width: 105px; + height: 105px; +} +.Mount_Head_Cactus-Shade { + background-image: url(spritesmith-main-7.png); + background-position: -954px -1219px; + width: 105px; + height: 105px; +} +.Mount_Head_Cactus-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: -1060px -1219px; + width: 105px; + height: 105px; +} +.Mount_Head_Cactus-Spooky { + background-image: url(spritesmith-main-7.png); + background-position: -1166px -1219px; + width: 105px; + height: 105px; +} +.Mount_Head_Cactus-White { + background-image: url(spritesmith-main-7.png); + background-position: -1272px -1219px; + width: 105px; + height: 105px; +} +.Mount_Head_Cactus-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -1422px 0px; + width: 105px; + height: 105px; +} +.Mount_Head_Cheetah-Base { + background-image: url(spritesmith-main-7.png); + background-position: -1422px -106px; + width: 105px; + height: 105px; +} +.Mount_Head_Cheetah-CottonCandyBlue { + background-image: url(spritesmith-main-7.png); + background-position: -1422px -212px; + width: 105px; + height: 105px; +} +.Mount_Head_Cheetah-CottonCandyPink { + background-image: url(spritesmith-main-7.png); + background-position: -1422px -318px; + width: 105px; + height: 105px; +} .Mount_Head_Cheetah-Desert { background-image: url(spritesmith-main-7.png); - background-position: -998px -848px; + background-position: -1422px -424px; width: 105px; height: 105px; } .Mount_Head_Cheetah-Golden { background-image: url(spritesmith-main-7.png); - background-position: 0px -991px; + background-position: -1422px -530px; width: 105px; height: 105px; } .Mount_Head_Cheetah-Red { background-image: url(spritesmith-main-7.png); - background-position: -106px -991px; + background-position: -1422px -636px; width: 105px; height: 105px; } .Mount_Head_Cheetah-Shade { background-image: url(spritesmith-main-7.png); - background-position: -212px -991px; + background-position: -1422px -742px; width: 105px; height: 105px; } .Mount_Head_Cheetah-Skeleton { background-image: url(spritesmith-main-7.png); - background-position: -318px -991px; + background-position: -1422px -848px; width: 105px; height: 105px; } .Mount_Head_Cheetah-White { background-image: url(spritesmith-main-7.png); - background-position: -424px -991px; + background-position: -1422px -954px; width: 105px; height: 105px; } .Mount_Head_Cheetah-Zombie { background-image: url(spritesmith-main-7.png); - background-position: -530px -991px; + background-position: -1422px -1060px; width: 105px; height: 105px; } .Mount_Head_Cuttlefish-Base { background-image: url(spritesmith-main-7.png); - background-position: -680px -345px; + background-position: -378px -544px; width: 105px; height: 114px; } .Mount_Head_Cuttlefish-CottonCandyBlue { background-image: url(spritesmith-main-7.png); - background-position: -680px -460px; + background-position: -484px -544px; width: 105px; height: 114px; } @@ -528,883 +942,451 @@ } .Mount_Head_Cuttlefish-Desert { background-image: url(spritesmith-main-7.png); - background-position: -212px -544px; + background-position: -680px -115px; width: 105px; height: 114px; } .Mount_Head_Cuttlefish-Golden { background-image: url(spritesmith-main-7.png); - background-position: -318px -544px; + background-position: -680px -230px; width: 105px; height: 114px; } .Mount_Head_Cuttlefish-Red { background-image: url(spritesmith-main-7.png); - background-position: -424px -544px; + background-position: -680px -345px; width: 105px; height: 114px; } .Mount_Head_Cuttlefish-Shade { background-image: url(spritesmith-main-7.png); - background-position: -530px -544px; + background-position: -680px -460px; width: 105px; height: 114px; } .Mount_Head_Cuttlefish-Skeleton { background-image: url(spritesmith-main-7.png); - background-position: -106px -544px; + background-position: -786px 0px; width: 105px; height: 114px; } .Mount_Head_Cuttlefish-White { background-image: url(spritesmith-main-7.png); - background-position: -680px -115px; + background-position: -786px -115px; width: 105px; height: 114px; } .Mount_Head_Cuttlefish-Zombie { background-image: url(spritesmith-main-7.png); - background-position: -680px -230px; + background-position: -786px -230px; width: 105px; height: 114px; } .Mount_Head_Deer-Base { background-image: url(spritesmith-main-7.png); - background-position: -1104px -636px; + background-position: -954px -1325px; width: 105px; height: 105px; } .Mount_Head_Deer-CottonCandyBlue { background-image: url(spritesmith-main-7.png); - background-position: -1104px -742px; + background-position: -1060px -1325px; width: 105px; height: 105px; } .Mount_Head_Deer-CottonCandyPink { background-image: url(spritesmith-main-7.png); - background-position: -1104px -848px; + background-position: -1166px -1325px; width: 105px; height: 105px; } .Mount_Head_Deer-Desert { background-image: url(spritesmith-main-7.png); - background-position: -1104px -954px; + background-position: -1272px -1325px; width: 105px; height: 105px; } .Mount_Head_Deer-Golden { background-image: url(spritesmith-main-7.png); - background-position: 0px -1097px; + background-position: -1378px -1325px; width: 105px; height: 105px; } .Mount_Head_Deer-Red { background-image: url(spritesmith-main-7.png); - background-position: -106px -1097px; + background-position: -1528px 0px; width: 105px; height: 105px; } .Mount_Head_Deer-Shade { background-image: url(spritesmith-main-7.png); - background-position: -212px -1097px; + background-position: -1528px -106px; width: 105px; height: 105px; } .Mount_Head_Deer-Skeleton { background-image: url(spritesmith-main-7.png); - background-position: -318px -1097px; + background-position: -1528px -212px; width: 105px; height: 105px; } .Mount_Head_Deer-White { background-image: url(spritesmith-main-7.png); - background-position: -424px -1097px; + background-position: -1528px -318px; width: 105px; height: 105px; } .Mount_Head_Deer-Zombie { background-image: url(spritesmith-main-7.png); - background-position: -530px -1097px; + background-position: -1528px -424px; width: 105px; height: 105px; } .Mount_Head_Dragon-Base { background-image: url(spritesmith-main-7.png); - background-position: -636px -1097px; + background-position: -1528px -530px; width: 105px; height: 105px; } .Mount_Head_Dragon-CottonCandyBlue { background-image: url(spritesmith-main-7.png); - background-position: -742px -1097px; + background-position: -1528px -636px; width: 105px; height: 105px; } .Mount_Head_Dragon-CottonCandyPink { background-image: url(spritesmith-main-7.png); - background-position: -848px -1097px; + background-position: -1528px -742px; width: 105px; height: 105px; } .Mount_Head_Dragon-Desert { background-image: url(spritesmith-main-7.png); - background-position: -954px -1097px; + background-position: -1528px -848px; width: 105px; height: 105px; } .Mount_Head_Dragon-Golden { - background-image: url(spritesmith-main-7.png); - background-position: -1060px -1097px; - width: 105px; - height: 105px; -} -.Mount_Head_Dragon-Red { - background-image: url(spritesmith-main-7.png); - background-position: -1210px 0px; - width: 105px; - height: 105px; -} -.Mount_Head_Dragon-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -1210px -106px; - width: 105px; - height: 105px; -} -.Mount_Head_Dragon-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: -1210px -212px; - width: 105px; - height: 105px; -} -.Mount_Head_Dragon-Spooky { - background-image: url(spritesmith-main-7.png); - background-position: -1210px -318px; - width: 105px; - height: 105px; -} -.Mount_Head_Dragon-White { - background-image: url(spritesmith-main-7.png); - background-position: -1210px -424px; - width: 105px; - height: 105px; -} -.Mount_Head_Dragon-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -1210px -530px; - width: 105px; - height: 105px; -} -.Mount_Head_Egg-Base { - background-image: url(spritesmith-main-7.png); - background-position: -1210px -636px; - width: 105px; - height: 105px; -} -.Mount_Head_Egg-CottonCandyBlue { - background-image: url(spritesmith-main-7.png); - background-position: -424px -1627px; - width: 105px; - height: 105px; -} -.Mount_Head_Egg-CottonCandyPink { - background-image: url(spritesmith-main-7.png); - background-position: -1210px -848px; - width: 105px; - height: 105px; -} -.Mount_Head_Egg-Desert { - background-image: url(spritesmith-main-7.png); - background-position: -1210px -954px; - width: 105px; - height: 105px; -} -.Mount_Head_Egg-Golden { - background-image: url(spritesmith-main-7.png); - background-position: -1210px -1060px; - width: 105px; - height: 105px; -} -.Mount_Head_Egg-Red { - background-image: url(spritesmith-main-7.png); - background-position: 0px -1203px; - width: 105px; - height: 105px; -} -.Mount_Head_Egg-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -106px -1203px; - width: 105px; - height: 105px; -} -.Mount_Head_Egg-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: -212px -1203px; - width: 105px; - height: 105px; -} -.Mount_Head_Egg-White { - background-image: url(spritesmith-main-7.png); - background-position: -318px -1203px; - width: 105px; - height: 105px; -} -.Mount_Head_Egg-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -424px -1203px; - width: 105px; - height: 105px; -} -.Mount_Head_FlyingPig-Base { - background-image: url(spritesmith-main-7.png); - background-position: -530px -1203px; - width: 105px; - height: 105px; -} -.Mount_Head_FlyingPig-CottonCandyBlue { - background-image: url(spritesmith-main-7.png); - background-position: -636px -1203px; - width: 105px; - height: 105px; -} -.Mount_Head_FlyingPig-CottonCandyPink { - background-image: url(spritesmith-main-7.png); - background-position: -742px -1203px; - width: 105px; - height: 105px; -} -.Mount_Head_FlyingPig-Desert { - background-image: url(spritesmith-main-7.png); - background-position: -848px -1203px; - width: 105px; - height: 105px; -} -.Mount_Head_FlyingPig-Golden { - background-image: url(spritesmith-main-7.png); - background-position: -954px -1203px; - width: 105px; - height: 105px; -} -.Mount_Head_FlyingPig-Red { - background-image: url(spritesmith-main-7.png); - background-position: -1060px -1203px; - width: 105px; - height: 105px; -} -.Mount_Head_FlyingPig-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -1166px -1203px; - width: 105px; - height: 105px; -} -.Mount_Head_FlyingPig-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: -1316px 0px; - width: 105px; - height: 105px; -} -.Mount_Head_FlyingPig-Spooky { - background-image: url(spritesmith-main-7.png); - background-position: -1316px -106px; - width: 105px; - height: 105px; -} -.Mount_Head_FlyingPig-White { - background-image: url(spritesmith-main-7.png); - background-position: -1316px -212px; - width: 105px; - height: 105px; -} -.Mount_Head_FlyingPig-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -1316px -318px; - width: 105px; - height: 105px; -} -.Mount_Head_Fox-Base { - background-image: url(spritesmith-main-7.png); - background-position: -1316px -424px; - width: 105px; - height: 105px; -} -.Mount_Head_Fox-CottonCandyBlue { - background-image: url(spritesmith-main-7.png); - background-position: -1316px -530px; - width: 105px; - height: 105px; -} -.Mount_Head_Fox-CottonCandyPink { - background-image: url(spritesmith-main-7.png); - background-position: -1316px -636px; - width: 105px; - height: 105px; -} -.Mount_Head_Fox-Desert { - background-image: url(spritesmith-main-7.png); - background-position: -1316px -742px; - width: 105px; - height: 105px; -} -.Mount_Head_Fox-Golden { - background-image: url(spritesmith-main-7.png); - background-position: -1316px -848px; - width: 105px; - height: 105px; -} -.Mount_Head_Fox-Red { - background-image: url(spritesmith-main-7.png); - background-position: -1316px -954px; - width: 105px; - height: 105px; -} -.Mount_Head_Fox-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -1316px -1060px; - width: 105px; - height: 105px; -} -.Mount_Head_Fox-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: -1316px -1166px; - width: 105px; - height: 105px; -} -.Mount_Head_Fox-Spooky { - background-image: url(spritesmith-main-7.png); - background-position: 0px -1309px; - width: 105px; - height: 105px; -} -.Mount_Head_Fox-White { - background-image: url(spritesmith-main-7.png); - background-position: -106px -1309px; - width: 105px; - height: 105px; -} -.Mount_Head_Fox-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -212px -1309px; - width: 105px; - height: 105px; -} -.Mount_Head_Gryphon-Base { - background-image: url(spritesmith-main-7.png); - background-position: -318px -1309px; - width: 105px; - height: 105px; -} -.Mount_Head_Gryphon-CottonCandyBlue { - background-image: url(spritesmith-main-7.png); - background-position: -424px -1309px; - width: 105px; - height: 105px; -} -.Mount_Head_Gryphon-CottonCandyPink { - background-image: url(spritesmith-main-7.png); - background-position: -530px -1309px; - width: 105px; - height: 105px; -} -.Mount_Head_Gryphon-Desert { - background-image: url(spritesmith-main-7.png); - background-position: -636px -1309px; - width: 105px; - height: 105px; -} -.Mount_Head_Gryphon-Golden { - background-image: url(spritesmith-main-7.png); - background-position: -742px -1309px; - width: 105px; - height: 105px; -} -.Mount_Head_Gryphon-Red { - background-image: url(spritesmith-main-7.png); - background-position: -848px -1309px; - width: 105px; - height: 105px; -} -.Mount_Head_Gryphon-RoyalPurple { - background-image: url(spritesmith-main-7.png); - background-position: -954px -1309px; - width: 105px; - height: 105px; -} -.Mount_Head_Gryphon-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -1060px -1309px; - width: 105px; - height: 105px; -} -.Mount_Head_Gryphon-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: -1166px -1309px; - width: 105px; - height: 105px; -} -.Mount_Head_Gryphon-White { - background-image: url(spritesmith-main-7.png); - background-position: -1272px -1309px; - width: 105px; - height: 105px; -} -.Mount_Head_Gryphon-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -1422px 0px; - width: 105px; - height: 105px; -} -.Mount_Head_Hedgehog-Base { - background-image: url(spritesmith-main-7.png); - background-position: -1422px -106px; - width: 105px; - height: 105px; -} -.Mount_Head_Hedgehog-CottonCandyBlue { - background-image: url(spritesmith-main-7.png); - background-position: -1422px -212px; - width: 105px; - height: 105px; -} -.Mount_Head_Hedgehog-CottonCandyPink { - background-image: url(spritesmith-main-7.png); - background-position: -1422px -318px; - width: 105px; - height: 105px; -} -.Mount_Head_Hedgehog-Desert { - background-image: url(spritesmith-main-7.png); - background-position: -1422px -424px; - width: 105px; - height: 105px; -} -.Mount_Head_Hedgehog-Golden { - background-image: url(spritesmith-main-7.png); - background-position: -1422px -530px; - width: 105px; - height: 105px; -} -.Mount_Head_Hedgehog-Red { - background-image: url(spritesmith-main-7.png); - background-position: -1422px -636px; - width: 105px; - height: 105px; -} -.Mount_Head_Hedgehog-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -1422px -742px; - width: 105px; - height: 105px; -} -.Mount_Head_Hedgehog-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: -1422px -848px; - width: 105px; - height: 105px; -} -.Mount_Head_Hedgehog-White { - background-image: url(spritesmith-main-7.png); - background-position: -1422px -954px; - width: 105px; - height: 105px; -} -.Mount_Head_Hedgehog-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -1422px -1060px; - width: 105px; - height: 105px; -} -.Mount_Head_Horse-Base { - background-image: url(spritesmith-main-7.png); - background-position: -1422px -1166px; - width: 105px; - height: 105px; -} -.Mount_Head_Horse-CottonCandyBlue { - background-image: url(spritesmith-main-7.png); - background-position: -1422px -1272px; - width: 105px; - height: 105px; -} -.Mount_Head_Horse-CottonCandyPink { - background-image: url(spritesmith-main-7.png); - background-position: 0px -1415px; - width: 105px; - height: 105px; -} -.Mount_Head_Horse-Desert { - background-image: url(spritesmith-main-7.png); - background-position: -106px -1415px; - width: 105px; - height: 105px; -} -.Mount_Head_Horse-Golden { - background-image: url(spritesmith-main-7.png); - background-position: -212px -1415px; - width: 105px; - height: 105px; -} -.Mount_Head_Horse-Red { - background-image: url(spritesmith-main-7.png); - background-position: -318px -1415px; - width: 105px; - height: 105px; -} -.Mount_Head_Horse-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -424px -1415px; - width: 105px; - height: 105px; -} -.Mount_Head_Horse-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: -530px -1415px; - width: 105px; - height: 105px; -} -.Mount_Head_Horse-White { - background-image: url(spritesmith-main-7.png); - background-position: -636px -1415px; - width: 105px; - height: 105px; -} -.Mount_Head_Horse-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -742px -1415px; - width: 105px; - height: 105px; -} -.Mount_Head_JackOLantern-Base { - background-image: url(spritesmith-main-7.png); - background-position: -530px -1627px; - width: 90px; - height: 105px; -} -.Mount_Head_LionCub-Base { - background-image: url(spritesmith-main-7.png); - background-position: -954px -1415px; - width: 105px; - height: 105px; -} -.Mount_Head_LionCub-CottonCandyBlue { - background-image: url(spritesmith-main-7.png); - background-position: -1060px -1415px; - width: 105px; - height: 105px; -} -.Mount_Head_LionCub-CottonCandyPink { - background-image: url(spritesmith-main-7.png); - background-position: -1166px -1415px; - width: 105px; - height: 105px; -} -.Mount_Head_LionCub-Desert { - background-image: url(spritesmith-main-7.png); - background-position: -1272px -1415px; - width: 105px; - height: 105px; -} -.Mount_Head_LionCub-Ethereal { - background-image: url(spritesmith-main-7.png); - background-position: -1378px -1415px; - width: 105px; - height: 105px; -} -.Mount_Head_LionCub-Golden { - background-image: url(spritesmith-main-7.png); - background-position: -1528px 0px; - width: 105px; - height: 105px; -} -.Mount_Head_LionCub-Red { - background-image: url(spritesmith-main-7.png); - background-position: -1528px -106px; - width: 105px; - height: 105px; -} -.Mount_Head_LionCub-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -1528px -212px; - width: 105px; - height: 105px; -} -.Mount_Head_LionCub-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: 0px -668px; - width: 105px; - height: 110px; -} -.Mount_Head_LionCub-Spooky { - background-image: url(spritesmith-main-7.png); - background-position: -1528px -424px; - width: 105px; - height: 105px; -} -.Mount_Head_LionCub-White { - background-image: url(spritesmith-main-7.png); - background-position: -1528px -530px; - width: 105px; - height: 105px; -} -.Mount_Head_LionCub-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -1528px -636px; - width: 105px; - height: 105px; -} -.Mount_Head_Mammoth-Base { - background-image: url(spritesmith-main-7.png); - background-position: 0px -544px; - width: 105px; - height: 123px; -} -.Mount_Head_MantisShrimp-Base { - background-image: url(spritesmith-main-7.png); - background-position: -106px -668px; - width: 108px; - height: 105px; -} -.Mount_Head_Octopus-Base { background-image: url(spritesmith-main-7.png); background-position: -1528px -954px; width: 105px; height: 105px; } -.Mount_Head_Octopus-CottonCandyBlue { +.Mount_Head_Dragon-Peppermint { background-image: url(spritesmith-main-7.png); background-position: -1528px -1060px; width: 105px; height: 105px; } -.Mount_Head_Octopus-CottonCandyPink { +.Mount_Head_Dragon-Red { background-image: url(spritesmith-main-7.png); background-position: -1528px -1166px; width: 105px; height: 105px; } -.Mount_Head_Octopus-Desert { +.Mount_Head_Dragon-Shade { background-image: url(spritesmith-main-7.png); background-position: -1528px -1272px; width: 105px; height: 105px; } -.Mount_Head_Octopus-Golden { +.Mount_Head_Dragon-Skeleton { background-image: url(spritesmith-main-7.png); - background-position: -1528px -1378px; + background-position: 0px -1431px; width: 105px; height: 105px; } -.Mount_Head_Octopus-Red { +.Mount_Head_Dragon-Spooky { background-image: url(spritesmith-main-7.png); - background-position: 0px -1521px; + background-position: -106px -1431px; width: 105px; height: 105px; } -.Mount_Head_Octopus-Shade { +.Mount_Head_Dragon-White { background-image: url(spritesmith-main-7.png); - background-position: -106px -1521px; + background-position: -212px -1431px; width: 105px; height: 105px; } -.Mount_Head_Octopus-Skeleton { +.Mount_Head_Dragon-Zombie { background-image: url(spritesmith-main-7.png); - background-position: -212px -1521px; + background-position: -318px -1431px; width: 105px; height: 105px; } -.Mount_Head_Octopus-White { +.Mount_Head_Egg-Base { background-image: url(spritesmith-main-7.png); - background-position: -318px -1521px; + background-position: -424px -1431px; width: 105px; height: 105px; } -.Mount_Head_Octopus-Zombie { +.Mount_Head_Egg-CottonCandyBlue { background-image: url(spritesmith-main-7.png); - background-position: -424px -1521px; + background-position: -530px -1431px; width: 105px; height: 105px; } -.Mount_Head_Orca-Base { +.Mount_Head_Egg-CottonCandyPink { background-image: url(spritesmith-main-7.png); - background-position: -530px -1521px; + background-position: -636px -1431px; width: 105px; height: 105px; } -.Mount_Head_Owl-Base { +.Mount_Head_Egg-Desert { background-image: url(spritesmith-main-7.png); - background-position: -636px -1521px; + background-position: -742px -1431px; width: 105px; height: 105px; } -.Mount_Head_Owl-CottonCandyBlue { +.Mount_Head_Egg-Golden { background-image: url(spritesmith-main-7.png); - background-position: -742px -1521px; + background-position: -848px -1431px; width: 105px; height: 105px; } -.Mount_Head_Owl-CottonCandyPink { +.Mount_Head_Egg-Red { background-image: url(spritesmith-main-7.png); - background-position: -848px -1521px; + background-position: -954px -1431px; width: 105px; height: 105px; } -.Mount_Head_Owl-Desert { +.Mount_Head_Egg-Shade { background-image: url(spritesmith-main-7.png); - background-position: -954px -1521px; + background-position: -1060px -1431px; width: 105px; height: 105px; } -.Mount_Head_Owl-Golden { +.Mount_Head_Egg-Skeleton { background-image: url(spritesmith-main-7.png); - background-position: -1060px -1521px; + background-position: -1166px -1431px; width: 105px; height: 105px; } -.Mount_Head_Owl-Red { +.Mount_Head_Egg-White { background-image: url(spritesmith-main-7.png); - background-position: -1166px -1521px; + background-position: -1272px -1431px; width: 105px; height: 105px; } -.Mount_Head_Owl-Shade { +.Mount_Head_Egg-Zombie { background-image: url(spritesmith-main-7.png); - background-position: -1272px -1521px; + background-position: -1378px -1431px; width: 105px; height: 105px; } -.Mount_Head_Owl-Skeleton { +.Mount_Head_FlyingPig-Base { background-image: url(spritesmith-main-7.png); - background-position: -1378px -1521px; + background-position: -1484px -1431px; width: 105px; height: 105px; } -.Mount_Head_Owl-White { - background-image: url(spritesmith-main-7.png); - background-position: -1484px -1521px; - width: 105px; - height: 105px; -} -.Mount_Head_Owl-Zombie { +.Mount_Head_FlyingPig-CottonCandyBlue { background-image: url(spritesmith-main-7.png); background-position: -1634px 0px; width: 105px; height: 105px; } -.Mount_Head_PandaCub-Base { +.Mount_Head_FlyingPig-CottonCandyPink { background-image: url(spritesmith-main-7.png); background-position: -1634px -106px; width: 105px; height: 105px; } -.Mount_Head_PandaCub-CottonCandyBlue { +.Mount_Head_FlyingPig-Desert { background-image: url(spritesmith-main-7.png); background-position: -1634px -212px; width: 105px; height: 105px; } -.Mount_Head_PandaCub-CottonCandyPink { +.Mount_Head_FlyingPig-Golden { background-image: url(spritesmith-main-7.png); background-position: -1634px -318px; width: 105px; height: 105px; } -.Mount_Head_PandaCub-Desert { +.Mount_Head_FlyingPig-Peppermint { background-image: url(spritesmith-main-7.png); background-position: -1634px -424px; width: 105px; height: 105px; } -.Mount_Head_PandaCub-Golden { +.Mount_Head_FlyingPig-Red { background-image: url(spritesmith-main-7.png); background-position: -1634px -530px; width: 105px; height: 105px; } -.Mount_Head_PandaCub-Red { +.Mount_Head_FlyingPig-Shade { background-image: url(spritesmith-main-7.png); background-position: -1634px -636px; width: 105px; height: 105px; } -.Mount_Head_PandaCub-Shade { +.Mount_Head_FlyingPig-Skeleton { background-image: url(spritesmith-main-7.png); background-position: -1634px -742px; width: 105px; height: 105px; } -.Mount_Head_PandaCub-Skeleton { +.Mount_Head_FlyingPig-Spooky { background-image: url(spritesmith-main-7.png); background-position: -1634px -848px; width: 105px; height: 105px; } -.Mount_Head_PandaCub-Spooky { +.Mount_Head_FlyingPig-White { background-image: url(spritesmith-main-7.png); background-position: -1634px -954px; width: 105px; height: 105px; } -.Mount_Head_PandaCub-White { +.Mount_Head_FlyingPig-Zombie { background-image: url(spritesmith-main-7.png); background-position: -1634px -1060px; width: 105px; height: 105px; } -.Mount_Head_PandaCub-Zombie { +.Mount_Head_Fox-Base { background-image: url(spritesmith-main-7.png); background-position: -1634px -1166px; width: 105px; height: 105px; } -.Mount_Head_Parrot-Base { +.Mount_Head_Fox-CottonCandyBlue { background-image: url(spritesmith-main-7.png); background-position: -1634px -1272px; width: 105px; height: 105px; } -.Mount_Head_Parrot-CottonCandyBlue { +.Mount_Head_Fox-CottonCandyPink { background-image: url(spritesmith-main-7.png); background-position: -1634px -1378px; width: 105px; height: 105px; } -.Mount_Head_Parrot-CottonCandyPink { +.Mount_Head_Fox-Desert { background-image: url(spritesmith-main-7.png); - background-position: -1634px -1484px; + background-position: 0px -1537px; width: 105px; height: 105px; } -.Mount_Head_Parrot-Desert { +.Mount_Head_Fox-Golden { background-image: url(spritesmith-main-7.png); - background-position: 0px -1627px; + background-position: -106px -1537px; width: 105px; height: 105px; } -.Mount_Head_Parrot-Golden { +.Mount_Head_Fox-Peppermint { background-image: url(spritesmith-main-7.png); - background-position: -106px -1627px; + background-position: -212px -1537px; width: 105px; height: 105px; } -.Mount_Head_Parrot-Red { +.Mount_Head_Fox-Red { background-image: url(spritesmith-main-7.png); - background-position: -212px -1627px; + background-position: -318px -1537px; width: 105px; height: 105px; } -.Mount_Head_Parrot-Shade { +.Mount_Head_Fox-Shade { background-image: url(spritesmith-main-7.png); - background-position: -318px -1627px; + background-position: -424px -1537px; width: 105px; height: 105px; } -.Mount_Head_Parrot-Skeleton { +.Mount_Head_Fox-Skeleton { background-image: url(spritesmith-main-7.png); - background-position: -848px -1415px; + background-position: -530px -1537px; width: 105px; height: 105px; } -.Mount_Head_Parrot-White { +.Mount_Head_Fox-Spooky { background-image: url(spritesmith-main-7.png); - background-position: -1528px -742px; + background-position: -636px -1537px; + width: 105px; + height: 105px; +} +.Mount_Head_Fox-White { + background-image: url(spritesmith-main-7.png); + background-position: -742px -1537px; + width: 105px; + height: 105px; +} +.Mount_Head_Fox-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -848px -1537px; + width: 105px; + height: 105px; +} +.Mount_Head_Frog-Base { + background-image: url(spritesmith-main-7.png); + background-position: -786px -345px; + width: 105px; + height: 114px; +} +.Mount_Head_Frog-CottonCandyBlue { + background-image: url(spritesmith-main-7.png); + background-position: -786px -460px; + width: 105px; + height: 114px; +} +.Mount_Head_Frog-CottonCandyPink { + background-image: url(spritesmith-main-7.png); + background-position: 0px -680px; + width: 105px; + height: 114px; +} +.Mount_Head_Frog-Desert { + background-image: url(spritesmith-main-7.png); + background-position: -106px -680px; + width: 105px; + height: 114px; +} +.Mount_Head_Frog-Golden { + background-image: url(spritesmith-main-7.png); + background-position: -212px -680px; + width: 105px; + height: 114px; +} +.Mount_Head_Frog-Red { + background-image: url(spritesmith-main-7.png); + background-position: -318px -680px; + width: 105px; + height: 114px; +} +.Mount_Head_Frog-Shade { + background-image: url(spritesmith-main-7.png); + background-position: -424px -680px; + width: 105px; + height: 114px; +} +.Mount_Head_Frog-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: -530px -680px; + width: 105px; + height: 114px; +} +.Mount_Head_Frog-White { + background-image: url(spritesmith-main-7.png); + background-position: -636px -680px; + width: 105px; + height: 114px; +} +.Mount_Head_Frog-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -272px -544px; + width: 105px; + height: 114px; +} +.Mount_Head_Gryphon-Base { + background-image: url(spritesmith-main-7.png); + background-position: -1740px -318px; + width: 105px; + height: 105px; +} +.Mount_Head_Gryphon-CottonCandyBlue { + background-image: url(spritesmith-main-7.png); + background-position: -1740px -424px; width: 105px; height: 105px; } diff --git a/common/dist/sprites/spritesmith-main-7.png b/common/dist/sprites/spritesmith-main-7.png index c74a279be2..5957f4c8aa 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 151bb6384f..373d862b7f 100644 --- a/common/dist/sprites/spritesmith-main-8.css +++ b/common/dist/sprites/spritesmith-main-8.css @@ -1,1632 +1,1428 @@ -.Mount_Head_Parrot-Zombie { - background-image: url(spritesmith-main-8.png); - background-position: -106px -998px; - width: 105px; - height: 105px; -} -.Mount_Head_Penguin-Base { - background-image: url(spritesmith-main-8.png); - background-position: -212px -1210px; - width: 105px; - height: 105px; -} -.Mount_Head_Penguin-CottonCandyBlue { - background-image: url(spritesmith-main-8.png); - background-position: 0px -892px; - width: 105px; - height: 105px; -} -.Mount_Head_Penguin-CottonCandyPink { - background-image: url(spritesmith-main-8.png); - background-position: -212px -998px; - width: 105px; - height: 105px; -} -.Mount_Head_Penguin-Desert { - background-image: url(spritesmith-main-8.png); - background-position: -318px -998px; - width: 105px; - height: 105px; -} -.Mount_Head_Penguin-Golden { - background-image: url(spritesmith-main-8.png); - background-position: -424px -998px; - width: 105px; - height: 105px; -} -.Mount_Head_Penguin-Red { - background-image: url(spritesmith-main-8.png); - background-position: -530px -998px; - width: 105px; - height: 105px; -} -.Mount_Head_Penguin-Shade { - background-image: url(spritesmith-main-8.png); - background-position: -636px -998px; - width: 105px; - height: 105px; -} -.Mount_Head_Penguin-Skeleton { - background-image: url(spritesmith-main-8.png); - background-position: -742px -998px; - width: 105px; - height: 105px; -} -.Mount_Head_Penguin-White { - background-image: url(spritesmith-main-8.png); - background-position: -848px -998px; - width: 105px; - height: 105px; -} -.Mount_Head_Penguin-Zombie { - background-image: url(spritesmith-main-8.png); - background-position: -954px -998px; - width: 105px; - height: 105px; -} -.Mount_Head_Phoenix-Base { - background-image: url(spritesmith-main-8.png); - background-position: -1104px 0px; - width: 105px; - height: 105px; -} -.Mount_Head_Rat-Base { - background-image: url(spritesmith-main-8.png); - background-position: -1210px -212px; - width: 105px; - height: 105px; -} -.Mount_Head_Rat-CottonCandyBlue { - background-image: url(spritesmith-main-8.png); - background-position: -1210px -318px; - width: 105px; - height: 105px; -} -.Mount_Head_Rat-CottonCandyPink { - background-image: url(spritesmith-main-8.png); - background-position: -1210px -424px; - width: 105px; - height: 105px; -} -.Mount_Head_Rat-Desert { - background-image: url(spritesmith-main-8.png); - background-position: -1210px -530px; - width: 105px; - height: 105px; -} -.Mount_Head_Rat-Golden { - background-image: url(spritesmith-main-8.png); - background-position: -1210px -636px; - width: 105px; - height: 105px; -} -.Mount_Head_Rat-Red { - background-image: url(spritesmith-main-8.png); - background-position: -1210px -742px; - width: 105px; - height: 105px; -} -.Mount_Head_Rat-Shade { - background-image: url(spritesmith-main-8.png); - background-position: -1210px -848px; - width: 105px; - height: 105px; -} -.Mount_Head_Rat-Skeleton { - background-image: url(spritesmith-main-8.png); - background-position: -1210px -954px; - width: 105px; - height: 105px; -} -.Mount_Head_Rat-White { - background-image: url(spritesmith-main-8.png); - background-position: -1210px -1060px; - width: 105px; - height: 105px; -} -.Mount_Head_Rat-Zombie { - background-image: url(spritesmith-main-8.png); - background-position: 0px -1210px; - width: 105px; - height: 105px; -} -.Mount_Head_Rock-Base { - background-image: url(spritesmith-main-8.png); - background-position: -106px -1210px; - width: 105px; - height: 105px; -} -.Mount_Head_Rock-CottonCandyBlue { - background-image: url(spritesmith-main-8.png); - background-position: -242px -544px; - width: 105px; - height: 105px; -} -.Mount_Head_Rock-CottonCandyPink { - background-image: url(spritesmith-main-8.png); - background-position: -348px -544px; - width: 105px; - height: 105px; -} -.Mount_Head_Rock-Desert { - background-image: url(spritesmith-main-8.png); - background-position: -454px -544px; - width: 105px; - height: 105px; -} -.Mount_Head_Rock-Golden { - background-image: url(spritesmith-main-8.png); - background-position: -560px -544px; - width: 105px; - height: 105px; -} -.Mount_Head_Rock-Red { - background-image: url(spritesmith-main-8.png); - background-position: -680px 0px; - width: 105px; - height: 105px; -} -.Mount_Head_Rock-Shade { - background-image: url(spritesmith-main-8.png); - background-position: -680px -106px; - width: 105px; - height: 105px; -} -.Mount_Head_Rock-Skeleton { - background-image: url(spritesmith-main-8.png); - background-position: -680px -212px; - width: 105px; - height: 105px; -} -.Mount_Head_Rock-White { - background-image: url(spritesmith-main-8.png); - background-position: -680px -318px; - width: 105px; - height: 105px; -} -.Mount_Head_Rock-Zombie { +.Mount_Head_Gryphon-CottonCandyPink { background-image: url(spritesmith-main-8.png); background-position: -680px -424px; width: 105px; height: 105px; } -.Mount_Head_Rooster-Base { +.Mount_Head_Gryphon-Desert { background-image: url(spritesmith-main-8.png); - background-position: -680px -530px; + background-position: -1210px -954px; width: 105px; height: 105px; } -.Mount_Head_Rooster-CottonCandyBlue { - background-image: url(spritesmith-main-8.png); - background-position: 0px -680px; - width: 105px; - height: 105px; -} -.Mount_Head_Rooster-CottonCandyPink { - background-image: url(spritesmith-main-8.png); - background-position: -106px -680px; - width: 105px; - height: 105px; -} -.Mount_Head_Rooster-Desert { - background-image: url(spritesmith-main-8.png); - background-position: -212px -680px; - width: 105px; - height: 105px; -} -.Mount_Head_Rooster-Golden { - background-image: url(spritesmith-main-8.png); - background-position: -318px -680px; - width: 105px; - height: 105px; -} -.Mount_Head_Rooster-Red { - background-image: url(spritesmith-main-8.png); - background-position: -424px -680px; - width: 105px; - height: 105px; -} -.Mount_Head_Rooster-Shade { - background-image: url(spritesmith-main-8.png); - background-position: -530px -680px; - width: 105px; - height: 105px; -} -.Mount_Head_Rooster-Skeleton { - background-image: url(spritesmith-main-8.png); - background-position: -636px -680px; - width: 105px; - height: 105px; -} -.Mount_Head_Rooster-White { - background-image: url(spritesmith-main-8.png); - background-position: -786px 0px; - width: 105px; - height: 105px; -} -.Mount_Head_Rooster-Zombie { +.Mount_Head_Gryphon-Golden { background-image: url(spritesmith-main-8.png); background-position: -786px -106px; width: 105px; height: 105px; } -.Mount_Head_Seahorse-Base { - background-image: url(spritesmith-main-8.png); - background-position: -786px -212px; - width: 105px; - height: 105px; -} -.Mount_Head_Seahorse-CottonCandyBlue { - background-image: url(spritesmith-main-8.png); - background-position: -786px -318px; - width: 105px; - height: 105px; -} -.Mount_Head_Seahorse-CottonCandyPink { - background-image: url(spritesmith-main-8.png); - background-position: -786px -424px; - width: 105px; - height: 105px; -} -.Mount_Head_Seahorse-Desert { +.Mount_Head_Gryphon-Red { background-image: url(spritesmith-main-8.png); background-position: -786px -530px; width: 105px; height: 105px; } -.Mount_Head_Seahorse-Golden { +.Mount_Head_Gryphon-RoyalPurple { background-image: url(spritesmith-main-8.png); background-position: -786px -636px; width: 105px; height: 105px; } -.Mount_Head_Seahorse-Red { +.Mount_Head_Gryphon-Shade { + background-image: url(spritesmith-main-8.png); + background-position: -848px -1422px; + width: 105px; + height: 105px; +} +.Mount_Head_Gryphon-Skeleton { + background-image: url(spritesmith-main-8.png); + background-position: -954px -1422px; + width: 105px; + height: 105px; +} +.Mount_Head_Gryphon-White { + background-image: url(spritesmith-main-8.png); + background-position: -1060px -1422px; + width: 105px; + height: 105px; +} +.Mount_Head_Gryphon-Zombie { + background-image: url(spritesmith-main-8.png); + background-position: -1166px -1422px; + width: 105px; + height: 105px; +} +.Mount_Head_Hedgehog-Base { + background-image: url(spritesmith-main-8.png); + background-position: -1272px -1422px; + width: 105px; + height: 105px; +} +.Mount_Head_Hedgehog-CottonCandyBlue { + background-image: url(spritesmith-main-8.png); + background-position: -1378px -1422px; + width: 105px; + height: 105px; +} +.Mount_Head_Hedgehog-CottonCandyPink { + background-image: url(spritesmith-main-8.png); + background-position: -1528px 0px; + width: 105px; + height: 105px; +} +.Mount_Head_Hedgehog-Desert { + background-image: url(spritesmith-main-8.png); + background-position: -1528px -106px; + width: 105px; + height: 105px; +} +.Mount_Head_Hedgehog-Golden { + background-image: url(spritesmith-main-8.png); + background-position: -1528px -212px; + width: 105px; + height: 105px; +} +.Mount_Head_Hedgehog-Red { + background-image: url(spritesmith-main-8.png); + background-position: -1528px -318px; + width: 105px; + height: 105px; +} +.Mount_Head_Hedgehog-Shade { + background-image: url(spritesmith-main-8.png); + background-position: -1378px -1528px; + width: 105px; + height: 105px; +} +.Mount_Head_Hedgehog-Skeleton { + background-image: url(spritesmith-main-8.png); + background-position: -1484px -1528px; + width: 105px; + height: 105px; +} +.Mount_Head_Hedgehog-White { + background-image: url(spritesmith-main-8.png); + background-position: -1634px 0px; + width: 105px; + height: 105px; +} +.Mount_Head_Hedgehog-Zombie { + background-image: url(spritesmith-main-8.png); + background-position: -1634px -106px; + width: 105px; + height: 105px; +} +.Mount_Head_Horse-Base { + background-image: url(spritesmith-main-8.png); + background-position: -1634px -212px; + width: 105px; + height: 105px; +} +.Mount_Head_Horse-CottonCandyBlue { + background-image: url(spritesmith-main-8.png); + background-position: -1634px -318px; + width: 105px; + height: 105px; +} +.Mount_Head_Horse-CottonCandyPink { + background-image: url(spritesmith-main-8.png); + background-position: -1634px -424px; + width: 105px; + height: 105px; +} +.Mount_Head_Horse-Desert { + background-image: url(spritesmith-main-8.png); + background-position: -1634px -530px; + width: 105px; + height: 105px; +} +.Mount_Head_Horse-Golden { + background-image: url(spritesmith-main-8.png); + background-position: -1634px -636px; + width: 105px; + height: 105px; +} +.Mount_Head_Horse-Red { + background-image: url(spritesmith-main-8.png); + background-position: -1634px -742px; + width: 105px; + height: 105px; +} +.Mount_Head_Horse-Shade { + background-image: url(spritesmith-main-8.png); + background-position: -1634px -848px; + width: 105px; + height: 105px; +} +.Mount_Head_Horse-Skeleton { + background-image: url(spritesmith-main-8.png); + background-position: -680px -106px; + width: 105px; + height: 105px; +} +.Mount_Head_Horse-White { + background-image: url(spritesmith-main-8.png); + background-position: -680px -212px; + width: 105px; + height: 105px; +} +.Mount_Head_Horse-Zombie { + background-image: url(spritesmith-main-8.png); + background-position: -680px -318px; + width: 105px; + height: 105px; +} +.Mount_Head_JackOLantern-Base { + background-image: url(spritesmith-main-8.png); + background-position: -1634px -954px; + width: 90px; + height: 105px; +} +.Mount_Head_LionCub-Base { + background-image: url(spritesmith-main-8.png); + background-position: -680px -530px; + width: 105px; + height: 105px; +} +.Mount_Head_LionCub-CottonCandyBlue { + background-image: url(spritesmith-main-8.png); + background-position: 0px -680px; + width: 105px; + height: 105px; +} +.Mount_Head_LionCub-CottonCandyPink { + background-image: url(spritesmith-main-8.png); + background-position: -106px -680px; + width: 105px; + height: 105px; +} +.Mount_Head_LionCub-Desert { + background-image: url(spritesmith-main-8.png); + background-position: -212px -680px; + width: 105px; + height: 105px; +} +.Mount_Head_LionCub-Ethereal { + background-image: url(spritesmith-main-8.png); + background-position: -318px -680px; + width: 105px; + height: 105px; +} +.Mount_Head_LionCub-Golden { + background-image: url(spritesmith-main-8.png); + background-position: -424px -680px; + width: 105px; + height: 105px; +} +.Mount_Head_LionCub-Peppermint { + background-image: url(spritesmith-main-8.png); + background-position: -530px -680px; + width: 105px; + height: 105px; +} +.Mount_Head_LionCub-Red { + background-image: url(spritesmith-main-8.png); + background-position: -636px -680px; + width: 105px; + height: 105px; +} +.Mount_Head_LionCub-Shade { + background-image: url(spritesmith-main-8.png); + background-position: -786px 0px; + width: 105px; + height: 105px; +} +.Mount_Head_LionCub-Skeleton { + background-image: url(spritesmith-main-8.png); + background-position: -378px -544px; + width: 105px; + height: 110px; +} +.Mount_Head_LionCub-Spooky { + background-image: url(spritesmith-main-8.png); + background-position: -786px -212px; + width: 105px; + height: 105px; +} +.Mount_Head_LionCub-White { + background-image: url(spritesmith-main-8.png); + background-position: -786px -318px; + width: 105px; + height: 105px; +} +.Mount_Head_LionCub-Zombie { + background-image: url(spritesmith-main-8.png); + background-position: -786px -424px; + width: 105px; + height: 105px; +} +.Mount_Head_Mammoth-Base { + background-image: url(spritesmith-main-8.png); + background-position: -272px -544px; + width: 105px; + height: 123px; +} +.Mount_Head_MantisShrimp-Base { + background-image: url(spritesmith-main-8.png); + background-position: -484px -544px; + width: 108px; + height: 105px; +} +.Mount_Head_Octopus-Base { background-image: url(spritesmith-main-8.png); background-position: 0px -786px; width: 105px; height: 105px; } -.Mount_Head_Seahorse-Shade { +.Mount_Head_Octopus-CottonCandyBlue { background-image: url(spritesmith-main-8.png); background-position: -106px -786px; width: 105px; height: 105px; } -.Mount_Head_Seahorse-Skeleton { +.Mount_Head_Octopus-CottonCandyPink { background-image: url(spritesmith-main-8.png); background-position: -212px -786px; width: 105px; height: 105px; } -.Mount_Head_Seahorse-White { +.Mount_Head_Octopus-Desert { background-image: url(spritesmith-main-8.png); background-position: -318px -786px; width: 105px; height: 105px; } -.Mount_Head_Seahorse-Zombie { +.Mount_Head_Octopus-Golden { background-image: url(spritesmith-main-8.png); background-position: -424px -786px; width: 105px; height: 105px; } -.Mount_Head_Sheep-Base { +.Mount_Head_Octopus-Red { background-image: url(spritesmith-main-8.png); background-position: -530px -786px; width: 105px; height: 105px; } -.Mount_Head_Sheep-CottonCandyBlue { +.Mount_Head_Octopus-Shade { background-image: url(spritesmith-main-8.png); background-position: -636px -786px; width: 105px; height: 105px; } -.Mount_Head_Sheep-CottonCandyPink { +.Mount_Head_Octopus-Skeleton { background-image: url(spritesmith-main-8.png); background-position: -742px -786px; width: 105px; height: 105px; } -.Mount_Head_Sheep-Desert { +.Mount_Head_Octopus-White { background-image: url(spritesmith-main-8.png); background-position: -892px 0px; width: 105px; height: 105px; } -.Mount_Head_Sheep-Golden { +.Mount_Head_Octopus-Zombie { background-image: url(spritesmith-main-8.png); background-position: -892px -106px; width: 105px; height: 105px; } -.Mount_Head_Sheep-Red { +.Mount_Head_Orca-Base { background-image: url(spritesmith-main-8.png); background-position: -892px -212px; width: 105px; height: 105px; } -.Mount_Head_Sheep-Shade { +.Mount_Head_Owl-Base { background-image: url(spritesmith-main-8.png); background-position: -892px -318px; width: 105px; height: 105px; } -.Mount_Head_Sheep-Skeleton { +.Mount_Head_Owl-CottonCandyBlue { background-image: url(spritesmith-main-8.png); background-position: -892px -424px; width: 105px; height: 105px; } -.Mount_Head_Sheep-White { +.Mount_Head_Owl-CottonCandyPink { background-image: url(spritesmith-main-8.png); background-position: -892px -530px; width: 105px; height: 105px; } -.Mount_Head_Sheep-Zombie { +.Mount_Head_Owl-Desert { background-image: url(spritesmith-main-8.png); background-position: -892px -636px; width: 105px; height: 105px; } -.Mount_Head_Slime-Base { +.Mount_Head_Owl-Golden { background-image: url(spritesmith-main-8.png); background-position: -892px -742px; width: 105px; height: 105px; } -.Mount_Head_Slime-CottonCandyBlue { +.Mount_Head_Owl-Red { background-image: url(spritesmith-main-8.png); - background-position: -136px -544px; + background-position: 0px -892px; width: 105px; height: 105px; } -.Mount_Head_Slime-CottonCandyPink { +.Mount_Head_Owl-Shade { background-image: url(spritesmith-main-8.png); background-position: -106px -892px; width: 105px; height: 105px; } -.Mount_Head_Slime-Desert { +.Mount_Head_Owl-Skeleton { background-image: url(spritesmith-main-8.png); background-position: -212px -892px; width: 105px; height: 105px; } -.Mount_Head_Slime-Golden { +.Mount_Head_Owl-White { background-image: url(spritesmith-main-8.png); background-position: -318px -892px; width: 105px; height: 105px; } -.Mount_Head_Slime-Red { +.Mount_Head_Owl-Zombie { background-image: url(spritesmith-main-8.png); background-position: -424px -892px; width: 105px; height: 105px; } -.Mount_Head_Slime-Shade { +.Mount_Head_PandaCub-Base { background-image: url(spritesmith-main-8.png); background-position: -530px -892px; width: 105px; height: 105px; } -.Mount_Head_Slime-Skeleton { +.Mount_Head_PandaCub-CottonCandyBlue { background-image: url(spritesmith-main-8.png); background-position: -636px -892px; width: 105px; height: 105px; } -.Mount_Head_Slime-White { +.Mount_Head_PandaCub-CottonCandyPink { background-image: url(spritesmith-main-8.png); background-position: -742px -892px; width: 105px; height: 105px; } -.Mount_Head_Slime-Zombie { +.Mount_Head_PandaCub-Desert { background-image: url(spritesmith-main-8.png); background-position: -848px -892px; width: 105px; height: 105px; } -.Mount_Head_Spider-Base { +.Mount_Head_PandaCub-Golden { background-image: url(spritesmith-main-8.png); background-position: -998px 0px; width: 105px; height: 105px; } -.Mount_Head_Spider-CottonCandyBlue { +.Mount_Head_PandaCub-Peppermint { background-image: url(spritesmith-main-8.png); background-position: -998px -106px; width: 105px; height: 105px; } -.Mount_Head_Spider-CottonCandyPink { +.Mount_Head_PandaCub-Red { background-image: url(spritesmith-main-8.png); background-position: -998px -212px; width: 105px; height: 105px; } -.Mount_Head_Spider-Desert { +.Mount_Head_PandaCub-Shade { background-image: url(spritesmith-main-8.png); background-position: -998px -318px; width: 105px; height: 105px; } -.Mount_Head_Spider-Golden { +.Mount_Head_PandaCub-Skeleton { background-image: url(spritesmith-main-8.png); background-position: -998px -424px; width: 105px; height: 105px; } -.Mount_Head_Spider-Red { +.Mount_Head_PandaCub-Spooky { background-image: url(spritesmith-main-8.png); background-position: -998px -530px; width: 105px; height: 105px; } -.Mount_Head_Spider-Shade { +.Mount_Head_PandaCub-White { background-image: url(spritesmith-main-8.png); background-position: -998px -636px; width: 105px; height: 105px; } -.Mount_Head_Spider-Skeleton { +.Mount_Head_PandaCub-Zombie { background-image: url(spritesmith-main-8.png); background-position: -998px -742px; width: 105px; height: 105px; } -.Mount_Head_Spider-White { +.Mount_Head_Parrot-Base { background-image: url(spritesmith-main-8.png); background-position: -998px -848px; width: 105px; height: 105px; } -.Mount_Head_Spider-Zombie { +.Mount_Head_Parrot-CottonCandyBlue { background-image: url(spritesmith-main-8.png); background-position: 0px -998px; width: 105px; height: 105px; } -.Mount_Head_TRex-Base { +.Mount_Head_Parrot-CottonCandyPink { background-image: url(spritesmith-main-8.png); - background-position: -408px -272px; - width: 135px; - height: 135px; + background-position: -106px -998px; + width: 105px; + height: 105px; } -.Mount_Head_TRex-CottonCandyBlue { +.Mount_Head_Parrot-Desert { background-image: url(spritesmith-main-8.png); - background-position: 0px -136px; - width: 135px; - height: 135px; + background-position: -212px -998px; + width: 105px; + height: 105px; } -.Mount_Head_TRex-CottonCandyPink { +.Mount_Head_Parrot-Golden { background-image: url(spritesmith-main-8.png); - background-position: -136px -136px; - width: 135px; - height: 135px; + background-position: -318px -998px; + width: 105px; + height: 105px; } -.Mount_Head_TRex-Desert { +.Mount_Head_Parrot-Red { background-image: url(spritesmith-main-8.png); - background-position: -272px 0px; - width: 135px; - height: 135px; + background-position: -424px -998px; + width: 105px; + height: 105px; } -.Mount_Head_TRex-Golden { +.Mount_Head_Parrot-Shade { background-image: url(spritesmith-main-8.png); - background-position: -272px -136px; - width: 135px; - height: 135px; + background-position: -530px -998px; + width: 105px; + height: 105px; } -.Mount_Head_TRex-Red { +.Mount_Head_Parrot-Skeleton { background-image: url(spritesmith-main-8.png); - background-position: 0px -272px; - width: 135px; - height: 135px; + background-position: -636px -998px; + width: 105px; + height: 105px; } -.Mount_Head_TRex-Shade { +.Mount_Head_Parrot-White { background-image: url(spritesmith-main-8.png); - background-position: -136px -272px; - width: 135px; - height: 135px; + background-position: -742px -998px; + width: 105px; + height: 105px; } -.Mount_Head_TRex-Skeleton { +.Mount_Head_Parrot-Zombie { background-image: url(spritesmith-main-8.png); - background-position: -272px -272px; - width: 135px; - height: 135px; + background-position: -848px -998px; + width: 105px; + height: 105px; } -.Mount_Head_TRex-White { +.Mount_Head_Penguin-Base { background-image: url(spritesmith-main-8.png); - background-position: -408px 0px; - width: 135px; - height: 135px; + background-position: -954px -998px; + width: 105px; + height: 105px; } -.Mount_Head_TRex-Zombie { +.Mount_Head_Penguin-CottonCandyBlue { background-image: url(spritesmith-main-8.png); - background-position: -408px -136px; - width: 135px; - height: 135px; + background-position: -1104px 0px; + width: 105px; + height: 105px; } -.Mount_Head_TigerCub-Base { +.Mount_Head_Penguin-CottonCandyPink { background-image: url(spritesmith-main-8.png); background-position: -1104px -106px; width: 105px; height: 105px; } -.Mount_Head_TigerCub-CottonCandyBlue { +.Mount_Head_Penguin-Desert { background-image: url(spritesmith-main-8.png); background-position: -1104px -212px; width: 105px; height: 105px; } -.Mount_Head_TigerCub-CottonCandyPink { +.Mount_Head_Penguin-Golden { background-image: url(spritesmith-main-8.png); background-position: -1104px -318px; width: 105px; height: 105px; } -.Mount_Head_TigerCub-Desert { +.Mount_Head_Penguin-Red { background-image: url(spritesmith-main-8.png); background-position: -1104px -424px; width: 105px; height: 105px; } -.Mount_Head_TigerCub-Golden { +.Mount_Head_Penguin-Shade { background-image: url(spritesmith-main-8.png); background-position: -1104px -530px; width: 105px; height: 105px; } -.Mount_Head_TigerCub-Red { +.Mount_Head_Penguin-Skeleton { background-image: url(spritesmith-main-8.png); background-position: -1104px -636px; width: 105px; height: 105px; } -.Mount_Head_TigerCub-Shade { +.Mount_Head_Penguin-White { background-image: url(spritesmith-main-8.png); background-position: -1104px -742px; width: 105px; height: 105px; } -.Mount_Head_TigerCub-Skeleton { +.Mount_Head_Penguin-Zombie { background-image: url(spritesmith-main-8.png); background-position: -1104px -848px; width: 105px; height: 105px; } -.Mount_Head_TigerCub-Spooky { +.Mount_Head_Phoenix-Base { background-image: url(spritesmith-main-8.png); background-position: -1104px -954px; width: 105px; height: 105px; } -.Mount_Head_TigerCub-White { +.Mount_Head_Rat-Base { background-image: url(spritesmith-main-8.png); background-position: 0px -1104px; width: 105px; height: 105px; } -.Mount_Head_TigerCub-Zombie { +.Mount_Head_Rat-CottonCandyBlue { background-image: url(spritesmith-main-8.png); background-position: -106px -1104px; width: 105px; height: 105px; } -.Mount_Head_Turkey-Base { +.Mount_Head_Rat-CottonCandyPink { background-image: url(spritesmith-main-8.png); background-position: -212px -1104px; width: 105px; height: 105px; } -.Mount_Head_Whale-Base { +.Mount_Head_Rat-Desert { background-image: url(spritesmith-main-8.png); background-position: -318px -1104px; width: 105px; height: 105px; } -.Mount_Head_Whale-CottonCandyBlue { +.Mount_Head_Rat-Golden { background-image: url(spritesmith-main-8.png); background-position: -424px -1104px; width: 105px; height: 105px; } -.Mount_Head_Whale-CottonCandyPink { +.Mount_Head_Rat-Red { background-image: url(spritesmith-main-8.png); background-position: -530px -1104px; width: 105px; height: 105px; } -.Mount_Head_Whale-Desert { +.Mount_Head_Rat-Shade { background-image: url(spritesmith-main-8.png); background-position: -636px -1104px; width: 105px; height: 105px; } -.Mount_Head_Whale-Golden { +.Mount_Head_Rat-Skeleton { background-image: url(spritesmith-main-8.png); background-position: -742px -1104px; width: 105px; height: 105px; } -.Mount_Head_Whale-Red { +.Mount_Head_Rat-White { background-image: url(spritesmith-main-8.png); background-position: -848px -1104px; width: 105px; height: 105px; } -.Mount_Head_Whale-Shade { +.Mount_Head_Rat-Zombie { background-image: url(spritesmith-main-8.png); background-position: -954px -1104px; width: 105px; height: 105px; } -.Mount_Head_Whale-Skeleton { +.Mount_Head_Rock-Base { background-image: url(spritesmith-main-8.png); background-position: -1060px -1104px; width: 105px; height: 105px; } -.Mount_Head_Whale-White { +.Mount_Head_Rock-CottonCandyBlue { background-image: url(spritesmith-main-8.png); background-position: -1210px 0px; width: 105px; height: 105px; } -.Mount_Head_Whale-Zombie { +.Mount_Head_Rock-CottonCandyPink { background-image: url(spritesmith-main-8.png); background-position: -1210px -106px; width: 105px; height: 105px; } -.Mount_Head_Wolf-Base { +.Mount_Head_Rock-Desert { background-image: url(spritesmith-main-8.png); - background-position: 0px 0px; + background-position: -1210px -212px; + width: 105px; + height: 105px; +} +.Mount_Head_Rock-Golden { + background-image: url(spritesmith-main-8.png); + background-position: -1210px -318px; + width: 105px; + height: 105px; +} +.Mount_Head_Rock-Red { + background-image: url(spritesmith-main-8.png); + background-position: -1210px -424px; + width: 105px; + height: 105px; +} +.Mount_Head_Rock-Shade { + background-image: url(spritesmith-main-8.png); + background-position: -1210px -530px; + width: 105px; + height: 105px; +} +.Mount_Head_Rock-Skeleton { + background-image: url(spritesmith-main-8.png); + background-position: -1210px -636px; + width: 105px; + height: 105px; +} +.Mount_Head_Rock-White { + background-image: url(spritesmith-main-8.png); + background-position: -1210px -742px; + width: 105px; + height: 105px; +} +.Mount_Head_Rock-Zombie { + background-image: url(spritesmith-main-8.png); + background-position: -1210px -848px; + width: 105px; + height: 105px; +} +.Mount_Head_Rooster-Base { + background-image: url(spritesmith-main-8.png); + background-position: -680px 0px; + width: 105px; + height: 105px; +} +.Mount_Head_Rooster-CottonCandyBlue { + background-image: url(spritesmith-main-8.png); + background-position: -1210px -1060px; + width: 105px; + height: 105px; +} +.Mount_Head_Rooster-CottonCandyPink { + background-image: url(spritesmith-main-8.png); + background-position: 0px -1210px; + width: 105px; + height: 105px; +} +.Mount_Head_Rooster-Desert { + background-image: url(spritesmith-main-8.png); + background-position: -106px -1210px; + width: 105px; + height: 105px; +} +.Mount_Head_Rooster-Golden { + background-image: url(spritesmith-main-8.png); + background-position: -212px -1210px; + width: 105px; + height: 105px; +} +.Mount_Head_Rooster-Red { + background-image: url(spritesmith-main-8.png); + background-position: -318px -1210px; + width: 105px; + height: 105px; +} +.Mount_Head_Rooster-Shade { + background-image: url(spritesmith-main-8.png); + background-position: -424px -1210px; + width: 105px; + height: 105px; +} +.Mount_Head_Rooster-Skeleton { + background-image: url(spritesmith-main-8.png); + background-position: -530px -1210px; + width: 105px; + height: 105px; +} +.Mount_Head_Rooster-White { + background-image: url(spritesmith-main-8.png); + background-position: -636px -1210px; + width: 105px; + height: 105px; +} +.Mount_Head_Rooster-Zombie { + background-image: url(spritesmith-main-8.png); + background-position: -742px -1210px; + width: 105px; + height: 105px; +} +.Mount_Head_Seahorse-Base { + background-image: url(spritesmith-main-8.png); + background-position: -848px -1210px; + width: 105px; + height: 105px; +} +.Mount_Head_Seahorse-CottonCandyBlue { + background-image: url(spritesmith-main-8.png); + background-position: -954px -1210px; + width: 105px; + height: 105px; +} +.Mount_Head_Seahorse-CottonCandyPink { + background-image: url(spritesmith-main-8.png); + background-position: -1060px -1210px; + width: 105px; + height: 105px; +} +.Mount_Head_Seahorse-Desert { + background-image: url(spritesmith-main-8.png); + background-position: -1166px -1210px; + width: 105px; + height: 105px; +} +.Mount_Head_Seahorse-Golden { + background-image: url(spritesmith-main-8.png); + background-position: -1316px 0px; + width: 105px; + height: 105px; +} +.Mount_Head_Seahorse-Red { + background-image: url(spritesmith-main-8.png); + background-position: -1316px -106px; + width: 105px; + height: 105px; +} +.Mount_Head_Seahorse-Shade { + background-image: url(spritesmith-main-8.png); + background-position: -1316px -212px; + width: 105px; + height: 105px; +} +.Mount_Head_Seahorse-Skeleton { + background-image: url(spritesmith-main-8.png); + background-position: -1316px -318px; + width: 105px; + height: 105px; +} +.Mount_Head_Seahorse-White { + background-image: url(spritesmith-main-8.png); + background-position: -1316px -424px; + width: 105px; + height: 105px; +} +.Mount_Head_Seahorse-Zombie { + background-image: url(spritesmith-main-8.png); + background-position: -1316px -530px; + width: 105px; + height: 105px; +} +.Mount_Head_Sheep-Base { + background-image: url(spritesmith-main-8.png); + background-position: -1316px -636px; + width: 105px; + height: 105px; +} +.Mount_Head_Sheep-CottonCandyBlue { + background-image: url(spritesmith-main-8.png); + background-position: -1316px -742px; + width: 105px; + height: 105px; +} +.Mount_Head_Sheep-CottonCandyPink { + background-image: url(spritesmith-main-8.png); + background-position: -1316px -848px; + width: 105px; + height: 105px; +} +.Mount_Head_Sheep-Desert { + background-image: url(spritesmith-main-8.png); + background-position: -1316px -954px; + width: 105px; + height: 105px; +} +.Mount_Head_Sheep-Golden { + background-image: url(spritesmith-main-8.png); + background-position: -1316px -1060px; + width: 105px; + height: 105px; +} +.Mount_Head_Sheep-Red { + background-image: url(spritesmith-main-8.png); + background-position: -1316px -1166px; + width: 105px; + height: 105px; +} +.Mount_Head_Sheep-Shade { + background-image: url(spritesmith-main-8.png); + background-position: 0px -1316px; + width: 105px; + height: 105px; +} +.Mount_Head_Sheep-Skeleton { + background-image: url(spritesmith-main-8.png); + background-position: -106px -1316px; + width: 105px; + height: 105px; +} +.Mount_Head_Sheep-White { + background-image: url(spritesmith-main-8.png); + background-position: -212px -1316px; + width: 105px; + height: 105px; +} +.Mount_Head_Sheep-Zombie { + background-image: url(spritesmith-main-8.png); + background-position: -318px -1316px; + width: 105px; + height: 105px; +} +.Mount_Head_Slime-Base { + background-image: url(spritesmith-main-8.png); + background-position: -424px -1316px; + width: 105px; + height: 105px; +} +.Mount_Head_Slime-CottonCandyBlue { + background-image: url(spritesmith-main-8.png); + background-position: -530px -1316px; + width: 105px; + height: 105px; +} +.Mount_Head_Slime-CottonCandyPink { + background-image: url(spritesmith-main-8.png); + background-position: -636px -1316px; + width: 105px; + height: 105px; +} +.Mount_Head_Slime-Desert { + background-image: url(spritesmith-main-8.png); + background-position: -742px -1316px; + width: 105px; + height: 105px; +} +.Mount_Head_Slime-Golden { + background-image: url(spritesmith-main-8.png); + background-position: -848px -1316px; + width: 105px; + height: 105px; +} +.Mount_Head_Slime-Red { + background-image: url(spritesmith-main-8.png); + background-position: -954px -1316px; + width: 105px; + height: 105px; +} +.Mount_Head_Slime-Shade { + background-image: url(spritesmith-main-8.png); + background-position: -1060px -1316px; + width: 105px; + height: 105px; +} +.Mount_Head_Slime-Skeleton { + background-image: url(spritesmith-main-8.png); + background-position: -1166px -1316px; + width: 105px; + height: 105px; +} +.Mount_Head_Slime-White { + background-image: url(spritesmith-main-8.png); + background-position: -1272px -1316px; + width: 105px; + height: 105px; +} +.Mount_Head_Slime-Zombie { + background-image: url(spritesmith-main-8.png); + background-position: -1422px 0px; + width: 105px; + height: 105px; +} +.Mount_Head_Snake-Base { + background-image: url(spritesmith-main-8.png); + background-position: -1422px -106px; + width: 105px; + height: 105px; +} +.Mount_Head_Snake-CottonCandyBlue { + background-image: url(spritesmith-main-8.png); + background-position: -1422px -212px; + width: 105px; + height: 105px; +} +.Mount_Head_Snake-CottonCandyPink { + background-image: url(spritesmith-main-8.png); + background-position: -1422px -318px; + width: 105px; + height: 105px; +} +.Mount_Head_Snake-Desert { + background-image: url(spritesmith-main-8.png); + background-position: -1422px -424px; + width: 105px; + height: 105px; +} +.Mount_Head_Snake-Golden { + background-image: url(spritesmith-main-8.png); + background-position: -1422px -530px; + width: 105px; + height: 105px; +} +.Mount_Head_Snake-Red { + background-image: url(spritesmith-main-8.png); + background-position: -1422px -636px; + width: 105px; + height: 105px; +} +.Mount_Head_Snake-Shade { + background-image: url(spritesmith-main-8.png); + background-position: -1422px -742px; + width: 105px; + height: 105px; +} +.Mount_Head_Snake-Skeleton { + background-image: url(spritesmith-main-8.png); + background-position: -1422px -848px; + width: 105px; + height: 105px; +} +.Mount_Head_Snake-White { + background-image: url(spritesmith-main-8.png); + background-position: -1422px -954px; + width: 105px; + height: 105px; +} +.Mount_Head_Snake-Zombie { + background-image: url(spritesmith-main-8.png); + background-position: -1422px -1060px; + width: 105px; + height: 105px; +} +.Mount_Head_Spider-Base { + background-image: url(spritesmith-main-8.png); + background-position: -1422px -1166px; + width: 105px; + height: 105px; +} +.Mount_Head_Spider-CottonCandyBlue { + background-image: url(spritesmith-main-8.png); + background-position: -1422px -1272px; + width: 105px; + height: 105px; +} +.Mount_Head_Spider-CottonCandyPink { + background-image: url(spritesmith-main-8.png); + background-position: 0px -1422px; + width: 105px; + height: 105px; +} +.Mount_Head_Spider-Desert { + background-image: url(spritesmith-main-8.png); + background-position: -106px -1422px; + width: 105px; + height: 105px; +} +.Mount_Head_Spider-Golden { + background-image: url(spritesmith-main-8.png); + background-position: -212px -1422px; + width: 105px; + height: 105px; +} +.Mount_Head_Spider-Red { + background-image: url(spritesmith-main-8.png); + background-position: -318px -1422px; + width: 105px; + height: 105px; +} +.Mount_Head_Spider-Shade { + background-image: url(spritesmith-main-8.png); + background-position: -424px -1422px; + width: 105px; + height: 105px; +} +.Mount_Head_Spider-Skeleton { + background-image: url(spritesmith-main-8.png); + background-position: -530px -1422px; + width: 105px; + height: 105px; +} +.Mount_Head_Spider-White { + background-image: url(spritesmith-main-8.png); + background-position: -636px -1422px; + width: 105px; + height: 105px; +} +.Mount_Head_Spider-Zombie { + background-image: url(spritesmith-main-8.png); + background-position: -742px -1422px; + width: 105px; + height: 105px; +} +.Mount_Head_TRex-Base { + background-image: url(spritesmith-main-8.png); + background-position: -272px -136px; width: 135px; height: 135px; } -.Mount_Head_Wolf-CottonCandyBlue { +.Mount_Head_TRex-CottonCandyBlue { + background-image: url(spritesmith-main-8.png); + background-position: 0px -272px; + width: 135px; + height: 135px; +} +.Mount_Head_TRex-CottonCandyPink { + background-image: url(spritesmith-main-8.png); + background-position: -136px -272px; + width: 135px; + height: 135px; +} +.Mount_Head_TRex-Desert { + background-image: url(spritesmith-main-8.png); + background-position: -272px -272px; + width: 135px; + height: 135px; +} +.Mount_Head_TRex-Golden { + background-image: url(spritesmith-main-8.png); + background-position: -408px 0px; + width: 135px; + height: 135px; +} +.Mount_Head_TRex-Red { + background-image: url(spritesmith-main-8.png); + background-position: -408px -136px; + width: 135px; + height: 135px; +} +.Mount_Head_TRex-Shade { + background-image: url(spritesmith-main-8.png); + background-position: -408px -272px; + width: 135px; + height: 135px; +} +.Mount_Head_TRex-Skeleton { background-image: url(spritesmith-main-8.png); background-position: 0px -408px; width: 135px; height: 135px; } -.Mount_Head_Wolf-CottonCandyPink { +.Mount_Head_TRex-White { background-image: url(spritesmith-main-8.png); - background-position: -136px -408px; + background-position: 0px 0px; width: 135px; height: 135px; } -.Mount_Head_Wolf-Desert { +.Mount_Head_TRex-Zombie { background-image: url(spritesmith-main-8.png); background-position: -272px -408px; width: 135px; height: 135px; } -.Mount_Head_Wolf-Golden { +.Mount_Head_TigerCub-Base { + background-image: url(spritesmith-main-8.png); + background-position: -1528px -424px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-CottonCandyBlue { + background-image: url(spritesmith-main-8.png); + background-position: -1528px -530px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-CottonCandyPink { + background-image: url(spritesmith-main-8.png); + background-position: -1528px -636px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-Desert { + background-image: url(spritesmith-main-8.png); + background-position: -1528px -742px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-Golden { + background-image: url(spritesmith-main-8.png); + background-position: -1528px -848px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-Peppermint { + background-image: url(spritesmith-main-8.png); + background-position: -1528px -954px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-Red { + background-image: url(spritesmith-main-8.png); + background-position: -1528px -1060px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-Shade { + background-image: url(spritesmith-main-8.png); + background-position: -1528px -1166px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-Skeleton { + background-image: url(spritesmith-main-8.png); + background-position: -1528px -1272px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-Spooky { + background-image: url(spritesmith-main-8.png); + background-position: -1528px -1378px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-White { + background-image: url(spritesmith-main-8.png); + background-position: 0px -1528px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-Zombie { + background-image: url(spritesmith-main-8.png); + background-position: -106px -1528px; + width: 105px; + height: 105px; +} +.Mount_Head_Turkey-Base { + background-image: url(spritesmith-main-8.png); + background-position: -212px -1528px; + width: 105px; + height: 105px; +} +.Mount_Head_Whale-Base { + background-image: url(spritesmith-main-8.png); + background-position: -318px -1528px; + width: 105px; + height: 105px; +} +.Mount_Head_Whale-CottonCandyBlue { + background-image: url(spritesmith-main-8.png); + background-position: -424px -1528px; + width: 105px; + height: 105px; +} +.Mount_Head_Whale-CottonCandyPink { + background-image: url(spritesmith-main-8.png); + background-position: -530px -1528px; + width: 105px; + height: 105px; +} +.Mount_Head_Whale-Desert { + background-image: url(spritesmith-main-8.png); + background-position: -636px -1528px; + width: 105px; + height: 105px; +} +.Mount_Head_Whale-Golden { + background-image: url(spritesmith-main-8.png); + background-position: -742px -1528px; + width: 105px; + height: 105px; +} +.Mount_Head_Whale-Red { + background-image: url(spritesmith-main-8.png); + background-position: -848px -1528px; + width: 105px; + height: 105px; +} +.Mount_Head_Whale-Shade { + background-image: url(spritesmith-main-8.png); + background-position: -954px -1528px; + width: 105px; + height: 105px; +} +.Mount_Head_Whale-Skeleton { + background-image: url(spritesmith-main-8.png); + background-position: -1060px -1528px; + width: 105px; + height: 105px; +} +.Mount_Head_Whale-White { + background-image: url(spritesmith-main-8.png); + background-position: -1166px -1528px; + width: 105px; + height: 105px; +} +.Mount_Head_Whale-Zombie { + background-image: url(spritesmith-main-8.png); + background-position: -1272px -1528px; + width: 105px; + height: 105px; +} +.Mount_Head_Wolf-Base { background-image: url(spritesmith-main-8.png); background-position: -408px -408px; width: 135px; height: 135px; } -.Mount_Head_Wolf-Red { +.Mount_Head_Wolf-CottonCandyBlue { background-image: url(spritesmith-main-8.png); background-position: -544px 0px; width: 135px; height: 135px; } -.Mount_Head_Wolf-Shade { +.Mount_Head_Wolf-CottonCandyPink { background-image: url(spritesmith-main-8.png); background-position: -544px -136px; width: 135px; height: 135px; } -.Mount_Head_Wolf-Skeleton { +.Mount_Head_Wolf-Desert { background-image: url(spritesmith-main-8.png); background-position: -544px -272px; width: 135px; height: 135px; } -.Mount_Head_Wolf-Spooky { +.Mount_Head_Wolf-Golden { background-image: url(spritesmith-main-8.png); background-position: -544px -408px; width: 135px; height: 135px; } -.Mount_Head_Wolf-White { +.Mount_Head_Wolf-Peppermint { background-image: url(spritesmith-main-8.png); background-position: 0px -544px; width: 135px; height: 135px; } -.Mount_Head_Wolf-Zombie { +.Mount_Head_Wolf-Red { + background-image: url(spritesmith-main-8.png); + background-position: -136px -544px; + width: 135px; + height: 135px; +} +.Mount_Head_Wolf-Shade { + background-image: url(spritesmith-main-8.png); + background-position: -272px 0px; + width: 135px; + height: 135px; +} +.Mount_Head_Wolf-Skeleton { + background-image: url(spritesmith-main-8.png); + background-position: -136px -136px; + width: 135px; + height: 135px; +} +.Mount_Head_Wolf-Spooky { + background-image: url(spritesmith-main-8.png); + background-position: 0px -136px; + width: 135px; + height: 135px; +} +.Mount_Head_Wolf-White { background-image: url(spritesmith-main-8.png); background-position: -136px 0px; width: 135px; height: 135px; } -.Pet-BearCub-Base { +.Mount_Head_Wolf-Zombie { background-image: url(spritesmith-main-8.png); - background-position: -318px -1210px; - width: 81px; - height: 99px; -} -.Pet-BearCub-CottonCandyBlue { - background-image: url(spritesmith-main-8.png); - background-position: -400px -1210px; - width: 81px; - height: 99px; -} -.Pet-BearCub-CottonCandyPink { - background-image: url(spritesmith-main-8.png); - background-position: -482px -1210px; - width: 81px; - height: 99px; -} -.Pet-BearCub-Desert { - background-image: url(spritesmith-main-8.png); - background-position: -564px -1210px; - width: 81px; - height: 99px; -} -.Pet-BearCub-Golden { - background-image: url(spritesmith-main-8.png); - background-position: -646px -1210px; - width: 81px; - height: 99px; -} -.Pet-BearCub-Polar { - background-image: url(spritesmith-main-8.png); - background-position: -728px -1210px; - width: 81px; - height: 99px; -} -.Pet-BearCub-Red { - background-image: url(spritesmith-main-8.png); - background-position: -810px -1210px; - width: 81px; - height: 99px; -} -.Pet-BearCub-Shade { - background-image: url(spritesmith-main-8.png); - background-position: -892px -1210px; - width: 81px; - height: 99px; -} -.Pet-BearCub-Skeleton { - background-image: url(spritesmith-main-8.png); - background-position: -974px -1210px; - width: 81px; - height: 99px; -} -.Pet-BearCub-Spooky { - background-image: url(spritesmith-main-8.png); - background-position: -1056px -1210px; - width: 81px; - height: 99px; -} -.Pet-BearCub-White { - background-image: url(spritesmith-main-8.png); - background-position: -1138px -1210px; - width: 81px; - height: 99px; -} -.Pet-BearCub-Zombie { - background-image: url(spritesmith-main-8.png); - background-position: -492px -1616px; - width: 81px; - height: 99px; -} -.Pet-Bunny-Base { - background-image: url(spritesmith-main-8.png); - background-position: -1316px 0px; - width: 81px; - height: 99px; -} -.Pet-Bunny-CottonCandyBlue { - background-image: url(spritesmith-main-8.png); - background-position: -1316px -100px; - width: 81px; - height: 99px; -} -.Pet-Bunny-CottonCandyPink { - background-image: url(spritesmith-main-8.png); - background-position: -1316px -200px; - width: 81px; - height: 99px; -} -.Pet-Bunny-Desert { - background-image: url(spritesmith-main-8.png); - background-position: -1316px -300px; - width: 81px; - height: 99px; -} -.Pet-Bunny-Golden { - background-image: url(spritesmith-main-8.png); - background-position: -1316px -400px; - width: 81px; - height: 99px; -} -.Pet-Bunny-Red { - background-image: url(spritesmith-main-8.png); - background-position: -1316px -500px; - width: 81px; - height: 99px; -} -.Pet-Bunny-Shade { - background-image: url(spritesmith-main-8.png); - background-position: -1316px -600px; - width: 81px; - height: 99px; -} -.Pet-Bunny-Skeleton { - background-image: url(spritesmith-main-8.png); - background-position: -1316px -700px; - width: 81px; - height: 99px; -} -.Pet-Bunny-White { - background-image: url(spritesmith-main-8.png); - background-position: -1316px -800px; - width: 81px; - height: 99px; -} -.Pet-Bunny-Zombie { - background-image: url(spritesmith-main-8.png); - background-position: -1316px -900px; - width: 81px; - height: 99px; -} -.Pet-Cactus-Base { - background-image: url(spritesmith-main-8.png); - background-position: -1316px -1000px; - width: 81px; - height: 99px; -} -.Pet-Cactus-CottonCandyBlue { - background-image: url(spritesmith-main-8.png); - background-position: -1316px -1100px; - width: 81px; - height: 99px; -} -.Pet-Cactus-CottonCandyPink { - background-image: url(spritesmith-main-8.png); - background-position: -1316px -1200px; - width: 81px; - height: 99px; -} -.Pet-Cactus-Desert { - background-image: url(spritesmith-main-8.png); - background-position: -1398px 0px; - width: 81px; - height: 99px; -} -.Pet-Cactus-Golden { - background-image: url(spritesmith-main-8.png); - background-position: -1398px -100px; - width: 81px; - height: 99px; -} -.Pet-Cactus-Red { - background-image: url(spritesmith-main-8.png); - background-position: -1398px -200px; - width: 81px; - height: 99px; -} -.Pet-Cactus-Shade { - background-image: url(spritesmith-main-8.png); - background-position: -1398px -300px; - width: 81px; - height: 99px; -} -.Pet-Cactus-Skeleton { - background-image: url(spritesmith-main-8.png); - background-position: -1398px -400px; - width: 81px; - height: 99px; -} -.Pet-Cactus-Spooky { - background-image: url(spritesmith-main-8.png); - background-position: -1398px -500px; - width: 81px; - height: 99px; -} -.Pet-Cactus-White { - background-image: url(spritesmith-main-8.png); - background-position: -1398px -600px; - width: 81px; - height: 99px; -} -.Pet-Cactus-Zombie { - background-image: url(spritesmith-main-8.png); - background-position: -1398px -700px; - width: 81px; - height: 99px; -} -.Pet-Cheetah-Base { - background-image: url(spritesmith-main-8.png); - background-position: -1398px -800px; - width: 81px; - height: 99px; -} -.Pet-Cheetah-CottonCandyBlue { - background-image: url(spritesmith-main-8.png); - background-position: -1398px -900px; - width: 81px; - height: 99px; -} -.Pet-Cheetah-CottonCandyPink { - background-image: url(spritesmith-main-8.png); - background-position: -1398px -1000px; - width: 81px; - height: 99px; -} -.Pet-Cheetah-Desert { - background-image: url(spritesmith-main-8.png); - background-position: -1398px -1100px; - width: 81px; - height: 99px; -} -.Pet-Cheetah-Golden { - background-image: url(spritesmith-main-8.png); - background-position: -1398px -1200px; - width: 81px; - height: 99px; -} -.Pet-Cheetah-Red { - background-image: url(spritesmith-main-8.png); - background-position: 0px -1316px; - width: 81px; - height: 99px; -} -.Pet-Cheetah-Shade { - background-image: url(spritesmith-main-8.png); - background-position: -82px -1316px; - width: 81px; - height: 99px; -} -.Pet-Cheetah-Skeleton { - background-image: url(spritesmith-main-8.png); - background-position: -164px -1316px; - width: 81px; - height: 99px; -} -.Pet-Cheetah-White { - background-image: url(spritesmith-main-8.png); - background-position: -246px -1316px; - width: 81px; - height: 99px; -} -.Pet-Cheetah-Zombie { - background-image: url(spritesmith-main-8.png); - background-position: -328px -1316px; - width: 81px; - height: 99px; -} -.Pet-Cuttlefish-Base { - background-image: url(spritesmith-main-8.png); - background-position: -410px -1316px; - width: 81px; - height: 99px; -} -.Pet-Cuttlefish-CottonCandyBlue { - background-image: url(spritesmith-main-8.png); - background-position: -492px -1316px; - width: 81px; - height: 99px; -} -.Pet-Cuttlefish-CottonCandyPink { - background-image: url(spritesmith-main-8.png); - background-position: -574px -1316px; - width: 81px; - height: 99px; -} -.Pet-Cuttlefish-Desert { - background-image: url(spritesmith-main-8.png); - background-position: -656px -1316px; - width: 81px; - height: 99px; -} -.Pet-Cuttlefish-Golden { - background-image: url(spritesmith-main-8.png); - background-position: -738px -1316px; - width: 81px; - height: 99px; -} -.Pet-Cuttlefish-Red { - background-image: url(spritesmith-main-8.png); - background-position: -820px -1316px; - width: 81px; - height: 99px; -} -.Pet-Cuttlefish-Shade { - background-image: url(spritesmith-main-8.png); - background-position: -902px -1316px; - width: 81px; - height: 99px; -} -.Pet-Cuttlefish-Skeleton { - background-image: url(spritesmith-main-8.png); - background-position: -984px -1316px; - width: 81px; - height: 99px; -} -.Pet-Cuttlefish-White { - background-image: url(spritesmith-main-8.png); - background-position: -1066px -1316px; - width: 81px; - height: 99px; -} -.Pet-Cuttlefish-Zombie { - background-image: url(spritesmith-main-8.png); - background-position: -1148px -1316px; - width: 81px; - height: 99px; -} -.Pet-Deer-Base { - background-image: url(spritesmith-main-8.png); - background-position: -1230px -1316px; - width: 81px; - height: 99px; -} -.Pet-Deer-CottonCandyBlue { - background-image: url(spritesmith-main-8.png); - background-position: -1312px -1316px; - width: 81px; - height: 99px; -} -.Pet-Deer-CottonCandyPink { - background-image: url(spritesmith-main-8.png); - background-position: -1394px -1316px; - width: 81px; - height: 99px; -} -.Pet-Deer-Desert { - background-image: url(spritesmith-main-8.png); - background-position: -1480px 0px; - width: 81px; - height: 99px; -} -.Pet-Deer-Golden { - background-image: url(spritesmith-main-8.png); - background-position: -1480px -100px; - width: 81px; - height: 99px; -} -.Pet-Deer-Red { - background-image: url(spritesmith-main-8.png); - background-position: -1480px -200px; - width: 81px; - height: 99px; -} -.Pet-Deer-Shade { - background-image: url(spritesmith-main-8.png); - background-position: -1480px -300px; - width: 81px; - height: 99px; -} -.Pet-Deer-Skeleton { - background-image: url(spritesmith-main-8.png); - background-position: -1480px -400px; - width: 81px; - height: 99px; -} -.Pet-Deer-White { - background-image: url(spritesmith-main-8.png); - background-position: -1480px -500px; - width: 81px; - height: 99px; -} -.Pet-Deer-Zombie { - background-image: url(spritesmith-main-8.png); - background-position: -1480px -600px; - width: 81px; - height: 99px; -} -.Pet-Dragon-Base { - background-image: url(spritesmith-main-8.png); - background-position: -1480px -700px; - width: 81px; - height: 99px; -} -.Pet-Dragon-CottonCandyBlue { - background-image: url(spritesmith-main-8.png); - background-position: -1480px -800px; - width: 81px; - height: 99px; -} -.Pet-Dragon-CottonCandyPink { - background-image: url(spritesmith-main-8.png); - background-position: -1480px -900px; - width: 81px; - height: 99px; -} -.Pet-Dragon-Desert { - background-image: url(spritesmith-main-8.png); - background-position: -1480px -1000px; - width: 81px; - height: 99px; -} -.Pet-Dragon-Golden { - background-image: url(spritesmith-main-8.png); - background-position: -1480px -1100px; - width: 81px; - height: 99px; -} -.Pet-Dragon-Hydra { - background-image: url(spritesmith-main-8.png); - background-position: -1480px -1200px; - width: 81px; - height: 99px; -} -.Pet-Dragon-Red { - background-image: url(spritesmith-main-8.png); - background-position: -1480px -1300px; - width: 81px; - height: 99px; -} -.Pet-Dragon-Shade { - background-image: url(spritesmith-main-8.png); - background-position: 0px -1416px; - width: 81px; - height: 99px; -} -.Pet-Dragon-Skeleton { - background-image: url(spritesmith-main-8.png); - background-position: -82px -1416px; - width: 81px; - height: 99px; -} -.Pet-Dragon-Spooky { - background-image: url(spritesmith-main-8.png); - background-position: -164px -1416px; - width: 81px; - height: 99px; -} -.Pet-Dragon-White { - background-image: url(spritesmith-main-8.png); - background-position: -246px -1416px; - width: 81px; - height: 99px; -} -.Pet-Dragon-Zombie { - background-image: url(spritesmith-main-8.png); - background-position: -328px -1416px; - width: 81px; - height: 99px; -} -.Pet-Egg-Base { - background-image: url(spritesmith-main-8.png); - background-position: -410px -1416px; - width: 81px; - height: 99px; -} -.Pet-Egg-CottonCandyBlue { - background-image: url(spritesmith-main-8.png); - background-position: -492px -1416px; - width: 81px; - height: 99px; -} -.Pet-Egg-CottonCandyPink { - background-image: url(spritesmith-main-8.png); - background-position: -574px -1416px; - width: 81px; - height: 99px; -} -.Pet-Egg-Desert { - background-image: url(spritesmith-main-8.png); - background-position: -656px -1416px; - width: 81px; - height: 99px; -} -.Pet-Egg-Golden { - background-image: url(spritesmith-main-8.png); - background-position: -738px -1416px; - width: 81px; - height: 99px; -} -.Pet-Egg-Red { - background-image: url(spritesmith-main-8.png); - background-position: -820px -1416px; - width: 81px; - height: 99px; -} -.Pet-Egg-Shade { - background-image: url(spritesmith-main-8.png); - background-position: -902px -1416px; - width: 81px; - height: 99px; -} -.Pet-Egg-Skeleton { - background-image: url(spritesmith-main-8.png); - background-position: -984px -1416px; - width: 81px; - height: 99px; -} -.Pet-Egg-White { - background-image: url(spritesmith-main-8.png); - background-position: -1066px -1416px; - width: 81px; - height: 99px; -} -.Pet-Egg-Zombie { - background-image: url(spritesmith-main-8.png); - background-position: -1148px -1416px; - width: 81px; - height: 99px; -} -.Pet-FlyingPig-Base { - background-image: url(spritesmith-main-8.png); - background-position: -1230px -1416px; - width: 81px; - height: 99px; -} -.Pet-FlyingPig-CottonCandyBlue { - background-image: url(spritesmith-main-8.png); - background-position: -1312px -1416px; - width: 81px; - height: 99px; -} -.Pet-FlyingPig-CottonCandyPink { - background-image: url(spritesmith-main-8.png); - background-position: -1394px -1416px; - width: 81px; - height: 99px; -} -.Pet-FlyingPig-Desert { - background-image: url(spritesmith-main-8.png); - background-position: -1476px -1416px; - width: 81px; - height: 99px; -} -.Pet-FlyingPig-Golden { - background-image: url(spritesmith-main-8.png); - background-position: -1562px 0px; - width: 81px; - height: 99px; -} -.Pet-FlyingPig-Red { - background-image: url(spritesmith-main-8.png); - background-position: -1562px -100px; - width: 81px; - height: 99px; -} -.Pet-FlyingPig-Shade { - background-image: url(spritesmith-main-8.png); - background-position: -1562px -200px; - width: 81px; - height: 99px; -} -.Pet-FlyingPig-Skeleton { - background-image: url(spritesmith-main-8.png); - background-position: -1562px -300px; - width: 81px; - height: 99px; -} -.Pet-FlyingPig-Spooky { - background-image: url(spritesmith-main-8.png); - background-position: -1562px -400px; - width: 81px; - height: 99px; -} -.Pet-FlyingPig-White { - background-image: url(spritesmith-main-8.png); - background-position: -1562px -500px; - width: 81px; - height: 99px; -} -.Pet-FlyingPig-Zombie { - background-image: url(spritesmith-main-8.png); - background-position: -1562px -600px; - width: 81px; - height: 99px; -} -.Pet-Fox-Base { - background-image: url(spritesmith-main-8.png); - background-position: -1562px -700px; - width: 81px; - height: 99px; -} -.Pet-Fox-CottonCandyBlue { - background-image: url(spritesmith-main-8.png); - background-position: -1562px -800px; - width: 81px; - height: 99px; -} -.Pet-Fox-CottonCandyPink { - background-image: url(spritesmith-main-8.png); - background-position: -1562px -900px; - width: 81px; - height: 99px; -} -.Pet-Fox-Desert { - background-image: url(spritesmith-main-8.png); - background-position: -1562px -1000px; - width: 81px; - height: 99px; -} -.Pet-Fox-Golden { - background-image: url(spritesmith-main-8.png); - background-position: -1562px -1100px; - width: 81px; - height: 99px; -} -.Pet-Fox-Red { - background-image: url(spritesmith-main-8.png); - background-position: -1562px -1200px; - width: 81px; - height: 99px; -} -.Pet-Fox-Shade { - background-image: url(spritesmith-main-8.png); - background-position: -1562px -1300px; - width: 81px; - height: 99px; -} -.Pet-Fox-Skeleton { - background-image: url(spritesmith-main-8.png); - background-position: -1562px -1400px; - width: 81px; - height: 99px; -} -.Pet-Fox-Spooky { - background-image: url(spritesmith-main-8.png); - background-position: 0px -1516px; - width: 81px; - height: 99px; -} -.Pet-Fox-White { - background-image: url(spritesmith-main-8.png); - background-position: -82px -1516px; - width: 81px; - height: 99px; -} -.Pet-Fox-Zombie { - background-image: url(spritesmith-main-8.png); - background-position: -164px -1516px; - width: 81px; - height: 99px; -} -.Pet-Gryphon-Base { - background-image: url(spritesmith-main-8.png); - background-position: -246px -1516px; - width: 81px; - height: 99px; -} -.Pet-Gryphon-CottonCandyBlue { - background-image: url(spritesmith-main-8.png); - background-position: -328px -1516px; - width: 81px; - height: 99px; -} -.Pet-Gryphon-CottonCandyPink { - background-image: url(spritesmith-main-8.png); - background-position: -410px -1516px; - width: 81px; - height: 99px; -} -.Pet-Gryphon-Desert { - background-image: url(spritesmith-main-8.png); - background-position: -492px -1516px; - width: 81px; - height: 99px; -} -.Pet-Gryphon-Golden { - background-image: url(spritesmith-main-8.png); - background-position: -574px -1516px; - width: 81px; - height: 99px; -} -.Pet-Gryphon-Red { - background-image: url(spritesmith-main-8.png); - background-position: -656px -1516px; - width: 81px; - height: 99px; -} -.Pet-Gryphon-Shade { - background-image: url(spritesmith-main-8.png); - background-position: -738px -1516px; - width: 81px; - height: 99px; -} -.Pet-Gryphon-Skeleton { - background-image: url(spritesmith-main-8.png); - background-position: -820px -1516px; - width: 81px; - height: 99px; -} -.Pet-Gryphon-White { - background-image: url(spritesmith-main-8.png); - background-position: -902px -1516px; - width: 81px; - height: 99px; -} -.Pet-Gryphon-Zombie { - background-image: url(spritesmith-main-8.png); - background-position: -984px -1516px; - width: 81px; - height: 99px; -} -.Pet-Hedgehog-Base { - background-image: url(spritesmith-main-8.png); - background-position: -1066px -1516px; - width: 81px; - height: 99px; -} -.Pet-Hedgehog-CottonCandyBlue { - background-image: url(spritesmith-main-8.png); - background-position: -1148px -1516px; - width: 81px; - height: 99px; -} -.Pet-Hedgehog-CottonCandyPink { - background-image: url(spritesmith-main-8.png); - background-position: -1230px -1516px; - width: 81px; - height: 99px; -} -.Pet-Hedgehog-Desert { - background-image: url(spritesmith-main-8.png); - background-position: -1312px -1516px; - width: 81px; - height: 99px; -} -.Pet-Hedgehog-Golden { - background-image: url(spritesmith-main-8.png); - background-position: -1394px -1516px; - width: 81px; - height: 99px; -} -.Pet-Hedgehog-Red { - background-image: url(spritesmith-main-8.png); - background-position: -1476px -1516px; - width: 81px; - height: 99px; -} -.Pet-Hedgehog-Shade { - background-image: url(spritesmith-main-8.png); - background-position: -1558px -1516px; - width: 81px; - height: 99px; -} -.Pet-Hedgehog-Skeleton { - background-image: url(spritesmith-main-8.png); - background-position: -1644px 0px; - width: 81px; - height: 99px; -} -.Pet-Hedgehog-White { - background-image: url(spritesmith-main-8.png); - background-position: -1644px -100px; - width: 81px; - height: 99px; -} -.Pet-Hedgehog-Zombie { - background-image: url(spritesmith-main-8.png); - background-position: -1644px -200px; - width: 81px; - height: 99px; -} -.Pet-Horse-Base { - background-image: url(spritesmith-main-8.png); - background-position: -1644px -300px; - width: 81px; - height: 99px; -} -.Pet-Horse-CottonCandyBlue { - background-image: url(spritesmith-main-8.png); - background-position: -1644px -400px; - width: 81px; - height: 99px; -} -.Pet-Horse-CottonCandyPink { - background-image: url(spritesmith-main-8.png); - background-position: -1644px -500px; - width: 81px; - height: 99px; -} -.Pet-Horse-Desert { - background-image: url(spritesmith-main-8.png); - background-position: -1644px -600px; - width: 81px; - height: 99px; -} -.Pet-Horse-Golden { - background-image: url(spritesmith-main-8.png); - background-position: -1644px -700px; - width: 81px; - height: 99px; -} -.Pet-Horse-Red { - background-image: url(spritesmith-main-8.png); - background-position: -1644px -800px; - width: 81px; - height: 99px; + background-position: -136px -408px; + width: 135px; + height: 135px; } -.Pet-Horse-Shade { +.Mount_Icon_BearCub-Base { background-image: url(spritesmith-main-8.png); - background-position: -1644px -900px; + background-position: 0px -1634px; width: 81px; height: 99px; } -.Pet-Horse-Skeleton { +.Mount_Icon_BearCub-CottonCandyBlue { background-image: url(spritesmith-main-8.png); - background-position: -1644px -1000px; + background-position: -1634px -1160px; width: 81px; height: 99px; } -.Pet-Horse-White { +.Mount_Icon_BearCub-CottonCandyPink { background-image: url(spritesmith-main-8.png); - background-position: -1644px -1100px; + background-position: -1634px -1260px; width: 81px; height: 99px; } -.Pet-Horse-Zombie { +.Mount_Icon_BearCub-Desert { background-image: url(spritesmith-main-8.png); - background-position: -1644px -1200px; + background-position: -1634px -1360px; width: 81px; height: 99px; } -.Pet-JackOLantern-Base { +.Mount_Icon_BearCub-Golden { background-image: url(spritesmith-main-8.png); - background-position: -1644px -1300px; + background-position: -1634px -1460px; width: 81px; height: 99px; } -.Pet-LionCub-Base { +.Mount_Icon_BearCub-Peppermint { background-image: url(spritesmith-main-8.png); - background-position: -1644px -1400px; + background-position: -593px -544px; width: 81px; height: 99px; } -.Pet-LionCub-CottonCandyBlue { +.Mount_Icon_BearCub-Polar { background-image: url(spritesmith-main-8.png); - background-position: -1644px -1500px; + background-position: -574px -1634px; width: 81px; height: 99px; } -.Pet-LionCub-CottonCandyPink { +.Mount_Icon_BearCub-Red { background-image: url(spritesmith-main-8.png); - background-position: 0px -1616px; + background-position: -82px -1634px; width: 81px; height: 99px; } -.Pet-LionCub-Desert { +.Mount_Icon_BearCub-Shade { background-image: url(spritesmith-main-8.png); - background-position: -82px -1616px; + background-position: -164px -1634px; width: 81px; height: 99px; } -.Pet-LionCub-Golden { +.Mount_Icon_BearCub-Skeleton { background-image: url(spritesmith-main-8.png); - background-position: -164px -1616px; + background-position: -246px -1634px; width: 81px; height: 99px; } -.Pet-LionCub-Red { +.Mount_Icon_BearCub-Spooky { background-image: url(spritesmith-main-8.png); - background-position: -246px -1616px; + background-position: -328px -1634px; width: 81px; height: 99px; } -.Pet-LionCub-Shade { +.Mount_Icon_BearCub-White { background-image: url(spritesmith-main-8.png); - background-position: -328px -1616px; + background-position: -410px -1634px; width: 81px; height: 99px; } -.Pet-LionCub-Skeleton { +.Mount_Icon_BearCub-Zombie { background-image: url(spritesmith-main-8.png); - background-position: -410px -1616px; + background-position: -492px -1634px; width: 81px; height: 99px; } -.Pet-LionCub-Spooky { +.Mount_Icon_Bunny-Base { background-image: url(spritesmith-main-8.png); - background-position: -1220px -1210px; + background-position: -1634px -1060px; width: 81px; height: 99px; } diff --git a/common/dist/sprites/spritesmith-main-8.png b/common/dist/sprites/spritesmith-main-8.png index d9b1530f53..f1557707c2 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 4ee6cefb10..14f680f091 100644 --- a/common/dist/sprites/spritesmith-main-9.css +++ b/common/dist/sprites/spritesmith-main-9.css @@ -1,1092 +1,1962 @@ -.Pet-LionCub-White { +.Mount_Icon_Bunny-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -82px 0px; + background-position: -328px -845px; width: 81px; height: 99px; } -.Pet-LionCub-Zombie { +.Mount_Icon_Bunny-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -246px -800px; + background-position: -1244px -100px; width: 81px; height: 99px; } -.Pet-Mammoth-Base { +.Mount_Icon_Bunny-Desert { background-image: url(spritesmith-main-9.png); - background-position: -164px 0px; + background-position: -410px -845px; width: 81px; height: 99px; } -.Pet-MantisShrimp-Base { +.Mount_Icon_Bunny-Golden { background-image: url(spritesmith-main-9.png); - background-position: 0px -100px; + background-position: -492px -845px; width: 81px; height: 99px; } -.Pet-Octopus-Base { +.Mount_Icon_Bunny-Red { background-image: url(spritesmith-main-9.png); - background-position: -82px -100px; + background-position: -574px -845px; width: 81px; height: 99px; } -.Pet-Octopus-CottonCandyBlue { +.Mount_Icon_Bunny-Shade { background-image: url(spritesmith-main-9.png); - background-position: -164px -100px; + background-position: -656px -845px; width: 81px; height: 99px; } -.Pet-Octopus-CottonCandyPink { +.Mount_Icon_Bunny-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -246px 0px; + background-position: -738px -845px; width: 81px; height: 99px; } -.Pet-Octopus-Desert { +.Mount_Icon_Bunny-White { background-image: url(spritesmith-main-9.png); - background-position: -246px -100px; + background-position: -820px -845px; width: 81px; height: 99px; } -.Pet-Octopus-Golden { +.Mount_Icon_Bunny-Zombie { background-image: url(spritesmith-main-9.png); - background-position: 0px -200px; + background-position: -902px -845px; width: 81px; height: 99px; } -.Pet-Octopus-Red { +.Mount_Icon_Cactus-Base { background-image: url(spritesmith-main-9.png); - background-position: -82px -200px; + background-position: -998px 0px; width: 81px; height: 99px; } -.Pet-Octopus-Shade { +.Mount_Icon_Cactus-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -164px -200px; + background-position: -998px -100px; width: 81px; height: 99px; } -.Pet-Octopus-Skeleton { +.Mount_Icon_Cactus-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -246px -200px; + background-position: -82px -1045px; width: 81px; height: 99px; } -.Pet-Octopus-White { +.Mount_Icon_Cactus-Desert { background-image: url(spritesmith-main-9.png); - background-position: -328px 0px; + background-position: -492px -1245px; width: 81px; height: 99px; } -.Pet-Octopus-Zombie { +.Mount_Icon_Cactus-Golden { background-image: url(spritesmith-main-9.png); - background-position: -328px -100px; + background-position: -424px -100px; width: 81px; height: 99px; } -.Pet-Owl-Base { +.Mount_Icon_Cactus-Peppermint { background-image: url(spritesmith-main-9.png); - background-position: -328px -200px; + background-position: -424px -200px; width: 81px; height: 99px; } -.Pet-Owl-CottonCandyBlue { +.Mount_Icon_Cactus-Red { background-image: url(spritesmith-main-9.png); - background-position: 0px -300px; + background-position: 0px -345px; width: 81px; height: 99px; } -.Pet-Owl-CottonCandyPink { +.Mount_Icon_Cactus-Shade { background-image: url(spritesmith-main-9.png); - background-position: -82px -300px; + background-position: -82px -345px; width: 81px; height: 99px; } -.Pet-Owl-Desert { +.Mount_Icon_Cactus-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -164px -300px; + background-position: -164px -345px; width: 81px; height: 99px; } -.Pet-Owl-Golden { +.Mount_Icon_Cactus-Spooky { background-image: url(spritesmith-main-9.png); - background-position: -246px -300px; + background-position: -246px -345px; width: 81px; height: 99px; } -.Pet-Owl-Red { +.Mount_Icon_Cactus-White { background-image: url(spritesmith-main-9.png); - background-position: -328px -300px; + background-position: -328px -345px; width: 81px; height: 99px; } -.Pet-Owl-Shade { +.Mount_Icon_Cactus-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -410px 0px; + background-position: -410px -345px; width: 81px; height: 99px; } -.Pet-Owl-Skeleton { +.Mount_Icon_Cheetah-Base { background-image: url(spritesmith-main-9.png); - background-position: -410px -100px; + background-position: -506px 0px; width: 81px; height: 99px; } -.Pet-Owl-White { +.Mount_Icon_Cheetah-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -410px -200px; + background-position: -506px -100px; width: 81px; height: 99px; } -.Pet-Owl-Zombie { +.Mount_Icon_Cheetah-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -410px -300px; + background-position: -506px -200px; width: 81px; height: 99px; } -.Pet-PandaCub-Base { +.Mount_Icon_Cheetah-Desert { background-image: url(spritesmith-main-9.png); - background-position: -492px 0px; + background-position: -506px -300px; width: 81px; height: 99px; } -.Pet-PandaCub-CottonCandyBlue { +.Mount_Icon_Cheetah-Golden { background-image: url(spritesmith-main-9.png); - background-position: -492px -100px; + background-position: 0px -445px; width: 81px; height: 99px; } -.Pet-PandaCub-CottonCandyPink { +.Mount_Icon_Cheetah-Red { background-image: url(spritesmith-main-9.png); - background-position: -492px -200px; + background-position: -82px -445px; width: 81px; height: 99px; } -.Pet-PandaCub-Desert { +.Mount_Icon_Cheetah-Shade { background-image: url(spritesmith-main-9.png); - background-position: -492px -300px; + background-position: -164px -445px; width: 81px; height: 99px; } -.Pet-PandaCub-Golden { +.Mount_Icon_Cheetah-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: 0px -400px; + background-position: -246px -445px; width: 81px; height: 99px; } -.Pet-PandaCub-Red { +.Mount_Icon_Cheetah-White { background-image: url(spritesmith-main-9.png); - background-position: -82px -400px; + background-position: -328px -445px; width: 81px; height: 99px; } -.Pet-PandaCub-Shade { +.Mount_Icon_Cheetah-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -164px -400px; + background-position: -410px -445px; width: 81px; height: 99px; } -.Pet-PandaCub-Skeleton { +.Mount_Icon_Cuttlefish-Base { background-image: url(spritesmith-main-9.png); - background-position: -246px -400px; + background-position: -492px -445px; width: 81px; height: 99px; } -.Pet-PandaCub-Spooky { +.Mount_Icon_Cuttlefish-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -328px -400px; + background-position: -588px 0px; width: 81px; height: 99px; } -.Pet-PandaCub-White { +.Mount_Icon_Cuttlefish-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -410px -400px; + background-position: -588px -100px; width: 81px; height: 99px; } -.Pet-PandaCub-Zombie { +.Mount_Icon_Cuttlefish-Desert { background-image: url(spritesmith-main-9.png); - background-position: -492px -400px; + background-position: -588px -200px; width: 81px; height: 99px; } -.Pet-Parrot-Base { +.Mount_Icon_Cuttlefish-Golden { background-image: url(spritesmith-main-9.png); - background-position: -574px 0px; + background-position: -588px -300px; width: 81px; height: 99px; } -.Pet-Parrot-CottonCandyBlue { +.Mount_Icon_Cuttlefish-Red { background-image: url(spritesmith-main-9.png); - background-position: -574px -100px; + background-position: -588px -400px; width: 81px; height: 99px; } -.Pet-Parrot-CottonCandyPink { +.Mount_Icon_Cuttlefish-Shade { background-image: url(spritesmith-main-9.png); - background-position: -574px -200px; + background-position: 0px -545px; width: 81px; height: 99px; } -.Pet-Parrot-Desert { +.Mount_Icon_Cuttlefish-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -574px -300px; + background-position: -82px -545px; width: 81px; height: 99px; } -.Pet-Parrot-Golden { +.Mount_Icon_Cuttlefish-White { background-image: url(spritesmith-main-9.png); - background-position: -574px -400px; + background-position: -164px -545px; width: 81px; height: 99px; } -.Pet-Parrot-Red { +.Mount_Icon_Cuttlefish-Zombie { background-image: url(spritesmith-main-9.png); - background-position: 0px -500px; + background-position: -246px -545px; width: 81px; height: 99px; } -.Pet-Parrot-Shade { +.Mount_Icon_Deer-Base { background-image: url(spritesmith-main-9.png); - background-position: -82px -500px; + background-position: -328px -545px; width: 81px; height: 99px; } -.Pet-Parrot-Skeleton { +.Mount_Icon_Deer-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -164px -500px; + background-position: -410px -545px; width: 81px; height: 99px; } -.Pet-Parrot-White { +.Mount_Icon_Deer-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -246px -500px; + background-position: -492px -545px; width: 81px; height: 99px; } -.Pet-Parrot-Zombie { +.Mount_Icon_Deer-Desert { background-image: url(spritesmith-main-9.png); - background-position: -328px -500px; + background-position: -574px -545px; width: 81px; height: 99px; } -.Pet-Penguin-Base { +.Mount_Icon_Deer-Golden { background-image: url(spritesmith-main-9.png); - background-position: -410px -500px; + background-position: -670px 0px; width: 81px; height: 99px; } -.Pet-Penguin-CottonCandyBlue { +.Mount_Icon_Deer-Red { background-image: url(spritesmith-main-9.png); - background-position: -492px -500px; + background-position: -670px -100px; width: 81px; height: 99px; } -.Pet-Penguin-CottonCandyPink { +.Mount_Icon_Deer-Shade { background-image: url(spritesmith-main-9.png); - background-position: -574px -500px; + background-position: -670px -200px; width: 81px; height: 99px; } -.Pet-Penguin-Desert { +.Mount_Icon_Deer-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -656px 0px; + background-position: -670px -300px; width: 81px; height: 99px; } -.Pet-Penguin-Golden { +.Mount_Icon_Deer-White { background-image: url(spritesmith-main-9.png); - background-position: -656px -100px; + background-position: -670px -400px; width: 81px; height: 99px; } -.Pet-Penguin-Red { +.Mount_Icon_Deer-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -656px -200px; + background-position: -670px -500px; width: 81px; height: 99px; } -.Pet-Penguin-Shade { +.Mount_Icon_Dragon-Base { background-image: url(spritesmith-main-9.png); - background-position: -656px -300px; + background-position: 0px -645px; width: 81px; height: 99px; } -.Pet-Penguin-Skeleton { +.Mount_Icon_Dragon-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -656px -400px; + background-position: -82px -645px; width: 81px; height: 99px; } -.Pet-Penguin-White { +.Mount_Icon_Dragon-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -656px -500px; + background-position: -164px -645px; width: 81px; height: 99px; } -.Pet-Penguin-Zombie { +.Mount_Icon_Dragon-Desert { background-image: url(spritesmith-main-9.png); - background-position: 0px -600px; + background-position: -246px -645px; width: 81px; height: 99px; } -.Pet-Phoenix-Base { +.Mount_Icon_Dragon-Golden { background-image: url(spritesmith-main-9.png); - background-position: -82px -600px; + background-position: -328px -645px; width: 81px; height: 99px; } -.Pet-Rat-Base { +.Mount_Icon_Dragon-Peppermint { background-image: url(spritesmith-main-9.png); - background-position: -164px -600px; + background-position: -410px -645px; width: 81px; height: 99px; } -.Pet-Rat-CottonCandyBlue { +.Mount_Icon_Dragon-Red { background-image: url(spritesmith-main-9.png); - background-position: -246px -600px; + background-position: -492px -645px; width: 81px; height: 99px; } -.Pet-Rat-CottonCandyPink { +.Mount_Icon_Dragon-Shade { background-image: url(spritesmith-main-9.png); - background-position: -328px -600px; + background-position: -574px -645px; width: 81px; height: 99px; } -.Pet-Rat-Desert { +.Mount_Icon_Dragon-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -410px -600px; + background-position: -656px -645px; width: 81px; height: 99px; } -.Pet-Rat-Golden { +.Mount_Icon_Dragon-Spooky { background-image: url(spritesmith-main-9.png); - background-position: -492px -600px; + background-position: -752px 0px; width: 81px; height: 99px; } -.Pet-Rat-Red { +.Mount_Icon_Dragon-White { background-image: url(spritesmith-main-9.png); - background-position: -574px -600px; + background-position: -752px -100px; width: 81px; height: 99px; } -.Pet-Rat-Shade { +.Mount_Icon_Dragon-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -656px -600px; + background-position: -752px -200px; width: 81px; height: 99px; } -.Pet-Rat-Skeleton { +.Mount_Icon_Egg-Base { background-image: url(spritesmith-main-9.png); - background-position: -738px 0px; + background-position: -752px -300px; width: 81px; height: 99px; } -.Pet-Rat-White { +.Mount_Icon_Egg-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -738px -100px; + background-position: -752px -400px; width: 81px; height: 99px; } -.Pet-Rat-Zombie { +.Mount_Icon_Egg-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -738px -200px; + background-position: -752px -500px; width: 81px; height: 99px; } -.Pet-Rock-Base { +.Mount_Icon_Egg-Desert { background-image: url(spritesmith-main-9.png); - background-position: -738px -300px; + background-position: -752px -600px; width: 81px; height: 99px; } -.Pet-Rock-CottonCandyBlue { +.Mount_Icon_Egg-Golden { background-image: url(spritesmith-main-9.png); - background-position: -738px -400px; + background-position: -834px 0px; width: 81px; height: 99px; } -.Pet-Rock-CottonCandyPink { +.Mount_Icon_Egg-Red { background-image: url(spritesmith-main-9.png); - background-position: -738px -500px; + background-position: -834px -100px; width: 81px; height: 99px; } -.Pet-Rock-Desert { +.Mount_Icon_Egg-Shade { background-image: url(spritesmith-main-9.png); - background-position: -738px -600px; + background-position: -834px -200px; width: 81px; height: 99px; } -.Pet-Rock-Golden { +.Mount_Icon_Egg-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: 0px -700px; + background-position: -834px -300px; width: 81px; height: 99px; } -.Pet-Rock-Red { +.Mount_Icon_Egg-White { background-image: url(spritesmith-main-9.png); - background-position: -82px -700px; + background-position: -834px -400px; width: 81px; height: 99px; } -.Pet-Rock-Shade { +.Mount_Icon_Egg-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -164px -700px; + background-position: -834px -500px; width: 81px; height: 99px; } -.Pet-Rock-Skeleton { +.Mount_Icon_FlyingPig-Base { background-image: url(spritesmith-main-9.png); - background-position: -246px -700px; + background-position: -834px -600px; width: 81px; height: 99px; } -.Pet-Rock-White { +.Mount_Icon_FlyingPig-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -328px -700px; + background-position: 0px -745px; width: 81px; height: 99px; } -.Pet-Rock-Zombie { +.Mount_Icon_FlyingPig-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -410px -700px; + background-position: -82px -745px; width: 81px; height: 99px; } -.Pet-Rooster-Base { +.Mount_Icon_FlyingPig-Desert { background-image: url(spritesmith-main-9.png); - background-position: -492px -700px; + background-position: -164px -745px; width: 81px; height: 99px; } -.Pet-Rooster-CottonCandyBlue { +.Mount_Icon_FlyingPig-Golden { background-image: url(spritesmith-main-9.png); - background-position: -574px -700px; + background-position: -246px -745px; width: 81px; height: 99px; } -.Pet-Rooster-CottonCandyPink { +.Mount_Icon_FlyingPig-Peppermint { background-image: url(spritesmith-main-9.png); - background-position: -656px -700px; + background-position: -328px -745px; width: 81px; height: 99px; } -.Pet-Rooster-Desert { +.Mount_Icon_FlyingPig-Red { background-image: url(spritesmith-main-9.png); - background-position: -738px -700px; + background-position: -410px -745px; width: 81px; height: 99px; } -.Pet-Rooster-Golden { +.Mount_Icon_FlyingPig-Shade { background-image: url(spritesmith-main-9.png); - background-position: -820px 0px; + background-position: -492px -745px; width: 81px; height: 99px; } -.Pet-Rooster-Red { +.Mount_Icon_FlyingPig-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -820px -100px; + background-position: -574px -745px; width: 81px; height: 99px; } -.Pet-Rooster-Shade { +.Mount_Icon_FlyingPig-Spooky { background-image: url(spritesmith-main-9.png); - background-position: -820px -200px; + background-position: -656px -745px; width: 81px; height: 99px; } -.Pet-Rooster-Skeleton { +.Mount_Icon_FlyingPig-White { background-image: url(spritesmith-main-9.png); - background-position: -820px -300px; + background-position: -738px -745px; width: 81px; height: 99px; } -.Pet-Rooster-White { +.Mount_Icon_FlyingPig-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -820px -400px; + background-position: -820px -745px; width: 81px; height: 99px; } -.Pet-Rooster-Zombie { +.Mount_Icon_Fox-Base { background-image: url(spritesmith-main-9.png); - background-position: -820px -500px; + background-position: -916px 0px; width: 81px; height: 99px; } -.Pet-Seahorse-Base { +.Mount_Icon_Fox-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -820px -600px; + background-position: -916px -100px; width: 81px; height: 99px; } -.Pet-Seahorse-CottonCandyBlue { +.Mount_Icon_Fox-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -820px -700px; + background-position: -916px -200px; width: 81px; height: 99px; } -.Pet-Seahorse-CottonCandyPink { +.Mount_Icon_Fox-Desert { background-image: url(spritesmith-main-9.png); - background-position: 0px -800px; + background-position: -916px -300px; width: 81px; height: 99px; } -.Pet-Seahorse-Desert { +.Mount_Icon_Fox-Golden { background-image: url(spritesmith-main-9.png); - background-position: -82px -800px; + background-position: -916px -400px; width: 81px; height: 99px; } -.Pet-Seahorse-Golden { +.Mount_Icon_Fox-Peppermint { background-image: url(spritesmith-main-9.png); - background-position: -164px -800px; + background-position: -916px -500px; width: 81px; height: 99px; } -.Pet-Seahorse-Red { +.Mount_Icon_Fox-Red { + background-image: url(spritesmith-main-9.png); + background-position: -916px -600px; + width: 81px; + height: 99px; +} +.Mount_Icon_Fox-Shade { + background-image: url(spritesmith-main-9.png); + background-position: -916px -700px; + width: 81px; + height: 99px; +} +.Mount_Icon_Fox-Skeleton { + background-image: url(spritesmith-main-9.png); + background-position: 0px -845px; + width: 81px; + height: 99px; +} +.Mount_Icon_Fox-Spooky { + background-image: url(spritesmith-main-9.png); + background-position: -82px -845px; + width: 81px; + height: 99px; +} +.Mount_Icon_Fox-White { + background-image: url(spritesmith-main-9.png); + background-position: -164px -845px; + width: 81px; + height: 99px; +} +.Mount_Icon_Fox-Zombie { + background-image: url(spritesmith-main-9.png); + background-position: -246px -845px; + width: 81px; + height: 99px; +} +.Mount_Icon_Frog-Base { + background-image: url(spritesmith-main-9.png); + background-position: -212px -115px; + width: 105px; + height: 114px; +} +.Mount_Icon_Frog-CottonCandyBlue { + background-image: url(spritesmith-main-9.png); + background-position: -106px 0px; + width: 105px; + height: 114px; +} +.Mount_Icon_Frog-CottonCandyPink { + background-image: url(spritesmith-main-9.png); + background-position: -212px 0px; + width: 105px; + height: 114px; +} +.Mount_Icon_Frog-Desert { + background-image: url(spritesmith-main-9.png); + background-position: 0px -115px; + width: 105px; + height: 114px; +} +.Mount_Icon_Frog-Golden { + background-image: url(spritesmith-main-9.png); + background-position: -106px -115px; + width: 105px; + height: 114px; +} +.Mount_Icon_Frog-Red { background-image: url(spritesmith-main-9.png); background-position: 0px 0px; + width: 105px; + height: 114px; +} +.Mount_Icon_Frog-Shade { + background-image: url(spritesmith-main-9.png); + background-position: -318px 0px; + width: 105px; + height: 114px; +} +.Mount_Icon_Frog-Skeleton { + background-image: url(spritesmith-main-9.png); + background-position: -318px -115px; + width: 105px; + height: 114px; +} +.Mount_Icon_Frog-White { + background-image: url(spritesmith-main-9.png); + background-position: 0px -230px; + width: 105px; + height: 114px; +} +.Mount_Icon_Frog-Zombie { + background-image: url(spritesmith-main-9.png); + background-position: -106px -230px; + width: 105px; + height: 114px; +} +.Mount_Icon_Gryphon-Base { + background-image: url(spritesmith-main-9.png); + background-position: -998px -200px; + width: 81px; + height: 99px; +} +.Mount_Icon_Gryphon-CottonCandyBlue { + background-image: url(spritesmith-main-9.png); + background-position: -998px -300px; + width: 81px; + height: 99px; +} +.Mount_Icon_Gryphon-CottonCandyPink { + background-image: url(spritesmith-main-9.png); + background-position: -998px -400px; + width: 81px; + height: 99px; +} +.Mount_Icon_Gryphon-Desert { + background-image: url(spritesmith-main-9.png); + background-position: -998px -500px; + width: 81px; + height: 99px; +} +.Mount_Icon_Gryphon-Golden { + background-image: url(spritesmith-main-9.png); + background-position: -998px -600px; + width: 81px; + height: 99px; +} +.Mount_Icon_Gryphon-Red { + background-image: url(spritesmith-main-9.png); + background-position: -998px -700px; + width: 81px; + height: 99px; +} +.Mount_Icon_Gryphon-RoyalPurple { + background-image: url(spritesmith-main-9.png); + background-position: -998px -800px; + width: 81px; + height: 99px; +} +.Mount_Icon_Gryphon-Shade { + background-image: url(spritesmith-main-9.png); + background-position: 0px -945px; + width: 81px; + height: 99px; +} +.Mount_Icon_Gryphon-Skeleton { + background-image: url(spritesmith-main-9.png); + background-position: -82px -945px; + width: 81px; + height: 99px; +} +.Mount_Icon_Gryphon-White { + background-image: url(spritesmith-main-9.png); + background-position: -164px -945px; + width: 81px; + height: 99px; +} +.Mount_Icon_Gryphon-Zombie { + background-image: url(spritesmith-main-9.png); + background-position: -246px -945px; + width: 81px; + height: 99px; +} +.Mount_Icon_Hedgehog-Base { + background-image: url(spritesmith-main-9.png); + background-position: -328px -945px; + width: 81px; + height: 99px; +} +.Mount_Icon_Hedgehog-CottonCandyBlue { + background-image: url(spritesmith-main-9.png); + background-position: -410px -945px; + width: 81px; + height: 99px; +} +.Mount_Icon_Hedgehog-CottonCandyPink { + background-image: url(spritesmith-main-9.png); + background-position: -492px -945px; + width: 81px; + height: 99px; +} +.Mount_Icon_Hedgehog-Desert { + background-image: url(spritesmith-main-9.png); + background-position: -574px -945px; + width: 81px; + height: 99px; +} +.Mount_Icon_Hedgehog-Golden { + background-image: url(spritesmith-main-9.png); + background-position: -656px -945px; + width: 81px; + height: 99px; +} +.Mount_Icon_Hedgehog-Red { + background-image: url(spritesmith-main-9.png); + background-position: -738px -945px; + width: 81px; + height: 99px; +} +.Mount_Icon_Hedgehog-Shade { + background-image: url(spritesmith-main-9.png); + background-position: -820px -945px; + width: 81px; + height: 99px; +} +.Mount_Icon_Hedgehog-Skeleton { + background-image: url(spritesmith-main-9.png); + background-position: -902px -945px; + width: 81px; + height: 99px; +} +.Mount_Icon_Hedgehog-White { + background-image: url(spritesmith-main-9.png); + background-position: -984px -945px; + width: 81px; + height: 99px; +} +.Mount_Icon_Hedgehog-Zombie { + background-image: url(spritesmith-main-9.png); + background-position: -1080px 0px; + width: 81px; + height: 99px; +} +.Mount_Icon_Horse-Base { + background-image: url(spritesmith-main-9.png); + background-position: -1080px -100px; + width: 81px; + height: 99px; +} +.Mount_Icon_Horse-CottonCandyBlue { + background-image: url(spritesmith-main-9.png); + background-position: -1080px -200px; + width: 81px; + height: 99px; +} +.Mount_Icon_Horse-CottonCandyPink { + background-image: url(spritesmith-main-9.png); + background-position: -1080px -300px; + width: 81px; + height: 99px; +} +.Mount_Icon_Horse-Desert { + background-image: url(spritesmith-main-9.png); + background-position: -1080px -400px; + width: 81px; + height: 99px; +} +.Mount_Icon_Horse-Golden { + background-image: url(spritesmith-main-9.png); + background-position: -1080px -500px; + width: 81px; + height: 99px; +} +.Mount_Icon_Horse-Red { + background-image: url(spritesmith-main-9.png); + background-position: -1080px -600px; + width: 81px; + height: 99px; +} +.Mount_Icon_Horse-Shade { + background-image: url(spritesmith-main-9.png); + background-position: -1080px -700px; + width: 81px; + height: 99px; +} +.Mount_Icon_Horse-Skeleton { + background-image: url(spritesmith-main-9.png); + background-position: -1080px -800px; + width: 81px; + height: 99px; +} +.Mount_Icon_Horse-White { + background-image: url(spritesmith-main-9.png); + background-position: -1080px -900px; + width: 81px; + height: 99px; +} +.Mount_Icon_Horse-Zombie { + background-image: url(spritesmith-main-9.png); + background-position: 0px -1045px; + width: 81px; + height: 99px; +} +.Mount_Icon_JackOLantern-Base { + background-image: url(spritesmith-main-9.png); + background-position: -318px -230px; + width: 90px; + height: 105px; +} +.Mount_Icon_LionCub-Base { + background-image: url(spritesmith-main-9.png); + background-position: -164px -1045px; + width: 81px; + height: 99px; +} +.Mount_Icon_LionCub-CottonCandyBlue { + background-image: url(spritesmith-main-9.png); + background-position: -246px -1045px; + width: 81px; + height: 99px; +} +.Mount_Icon_LionCub-CottonCandyPink { + background-image: url(spritesmith-main-9.png); + background-position: -328px -1045px; + width: 81px; + height: 99px; +} +.Mount_Icon_LionCub-Desert { + background-image: url(spritesmith-main-9.png); + background-position: -410px -1045px; + width: 81px; + height: 99px; +} +.Mount_Icon_LionCub-Ethereal { + background-image: url(spritesmith-main-9.png); + background-position: -492px -1045px; + width: 81px; + height: 99px; +} +.Mount_Icon_LionCub-Golden { + background-image: url(spritesmith-main-9.png); + background-position: -574px -1045px; + width: 81px; + height: 99px; +} +.Mount_Icon_LionCub-Peppermint { + background-image: url(spritesmith-main-9.png); + background-position: -656px -1045px; + width: 81px; + height: 99px; +} +.Mount_Icon_LionCub-Red { + background-image: url(spritesmith-main-9.png); + background-position: -738px -1045px; + width: 81px; + height: 99px; +} +.Mount_Icon_LionCub-Shade { + background-image: url(spritesmith-main-9.png); + background-position: -820px -1045px; + width: 81px; + height: 99px; +} +.Mount_Icon_LionCub-Skeleton { + background-image: url(spritesmith-main-9.png); + background-position: -902px -1045px; + width: 81px; + height: 99px; +} +.Mount_Icon_LionCub-Spooky { + background-image: url(spritesmith-main-9.png); + background-position: -984px -1045px; + width: 81px; + height: 99px; +} +.Mount_Icon_LionCub-White { + background-image: url(spritesmith-main-9.png); + background-position: -1066px -1045px; + width: 81px; + height: 99px; +} +.Mount_Icon_LionCub-Zombie { + background-image: url(spritesmith-main-9.png); + background-position: -1162px 0px; + width: 81px; + height: 99px; +} +.Mount_Icon_Mammoth-Base { + background-image: url(spritesmith-main-9.png); + background-position: -1162px -100px; + width: 81px; + height: 99px; +} +.Mount_Icon_MantisShrimp-Base { + background-image: url(spritesmith-main-9.png); + background-position: -1162px -200px; + width: 81px; + height: 99px; +} +.Mount_Icon_Octopus-Base { + background-image: url(spritesmith-main-9.png); + background-position: -1162px -300px; + width: 81px; + height: 99px; +} +.Mount_Icon_Octopus-CottonCandyBlue { + background-image: url(spritesmith-main-9.png); + background-position: -1162px -400px; + width: 81px; + height: 99px; +} +.Mount_Icon_Octopus-CottonCandyPink { + background-image: url(spritesmith-main-9.png); + background-position: -1162px -500px; + width: 81px; + height: 99px; +} +.Mount_Icon_Octopus-Desert { + background-image: url(spritesmith-main-9.png); + background-position: -1162px -600px; + width: 81px; + height: 99px; +} +.Mount_Icon_Octopus-Golden { + background-image: url(spritesmith-main-9.png); + background-position: -1162px -700px; + width: 81px; + height: 99px; +} +.Mount_Icon_Octopus-Red { + background-image: url(spritesmith-main-9.png); + background-position: -1162px -800px; + width: 81px; + height: 99px; +} +.Mount_Icon_Octopus-Shade { + background-image: url(spritesmith-main-9.png); + background-position: -1162px -900px; + width: 81px; + height: 99px; +} +.Mount_Icon_Octopus-Skeleton { + background-image: url(spritesmith-main-9.png); + background-position: -1162px -1000px; + width: 81px; + height: 99px; +} +.Mount_Icon_Octopus-White { + background-image: url(spritesmith-main-9.png); + background-position: -1244px 0px; + width: 81px; + height: 99px; +} +.Mount_Icon_Octopus-Zombie { + background-image: url(spritesmith-main-9.png); + background-position: -424px 0px; + width: 81px; + height: 99px; +} +.Mount_Icon_Orca-Base { + background-image: url(spritesmith-main-9.png); + background-position: -1244px -200px; + width: 81px; + height: 99px; +} +.Mount_Icon_Owl-Base { + background-image: url(spritesmith-main-9.png); + background-position: -1244px -300px; + width: 81px; + height: 99px; +} +.Mount_Icon_Owl-CottonCandyBlue { + background-image: url(spritesmith-main-9.png); + background-position: -1244px -400px; + width: 81px; + height: 99px; +} +.Mount_Icon_Owl-CottonCandyPink { + background-image: url(spritesmith-main-9.png); + background-position: -1244px -500px; + width: 81px; + height: 99px; +} +.Mount_Icon_Owl-Desert { + background-image: url(spritesmith-main-9.png); + background-position: -1244px -600px; + width: 81px; + height: 99px; +} +.Mount_Icon_Owl-Golden { + background-image: url(spritesmith-main-9.png); + background-position: -1244px -700px; + width: 81px; + height: 99px; +} +.Mount_Icon_Owl-Red { + background-image: url(spritesmith-main-9.png); + background-position: -1244px -800px; + width: 81px; + height: 99px; +} +.Mount_Icon_Owl-Shade { + background-image: url(spritesmith-main-9.png); + background-position: -1244px -900px; + width: 81px; + height: 99px; +} +.Mount_Icon_Owl-Skeleton { + background-image: url(spritesmith-main-9.png); + background-position: -1244px -1000px; + width: 81px; + height: 99px; +} +.Mount_Icon_Owl-White { + background-image: url(spritesmith-main-9.png); + background-position: 0px -1145px; + width: 81px; + height: 99px; +} +.Mount_Icon_Owl-Zombie { + background-image: url(spritesmith-main-9.png); + background-position: -82px -1145px; + width: 81px; + height: 99px; +} +.Mount_Icon_PandaCub-Base { + background-image: url(spritesmith-main-9.png); + background-position: -164px -1145px; + width: 81px; + height: 99px; +} +.Mount_Icon_PandaCub-CottonCandyBlue { + background-image: url(spritesmith-main-9.png); + background-position: -246px -1145px; + width: 81px; + height: 99px; +} +.Mount_Icon_PandaCub-CottonCandyPink { + background-image: url(spritesmith-main-9.png); + background-position: -328px -1145px; width: 81px; height: 99px; } -.Pet-Seahorse-Shade { +.Mount_Icon_PandaCub-Desert { background-image: url(spritesmith-main-9.png); - background-position: -328px -800px; + background-position: -410px -1145px; width: 81px; height: 99px; } -.Pet-Seahorse-Skeleton { +.Mount_Icon_PandaCub-Golden { background-image: url(spritesmith-main-9.png); - background-position: -410px -800px; + background-position: -492px -1145px; width: 81px; height: 99px; } -.Pet-Seahorse-White { +.Mount_Icon_PandaCub-Peppermint { background-image: url(spritesmith-main-9.png); - background-position: -492px -800px; + background-position: -574px -1145px; width: 81px; height: 99px; } -.Pet-Seahorse-Zombie { +.Mount_Icon_PandaCub-Red { background-image: url(spritesmith-main-9.png); - background-position: -574px -800px; + background-position: -656px -1145px; width: 81px; height: 99px; } -.Pet-Sheep-Base { +.Mount_Icon_PandaCub-Shade { background-image: url(spritesmith-main-9.png); - background-position: -656px -800px; + background-position: -738px -1145px; width: 81px; height: 99px; } -.Pet-Sheep-CottonCandyBlue { +.Mount_Icon_PandaCub-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -738px -800px; + background-position: -820px -1145px; width: 81px; height: 99px; } -.Pet-Sheep-CottonCandyPink { +.Mount_Icon_PandaCub-Spooky { background-image: url(spritesmith-main-9.png); - background-position: -820px -800px; + background-position: -902px -1145px; width: 81px; height: 99px; } -.Pet-Sheep-Desert { +.Mount_Icon_PandaCub-White { background-image: url(spritesmith-main-9.png); - background-position: -902px 0px; + background-position: -984px -1145px; width: 81px; height: 99px; } -.Pet-Sheep-Golden { +.Mount_Icon_PandaCub-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -902px -100px; + background-position: -1066px -1145px; width: 81px; height: 99px; } -.Pet-Sheep-Red { +.Mount_Icon_Parrot-Base { background-image: url(spritesmith-main-9.png); - background-position: -902px -200px; + background-position: -1148px -1145px; width: 81px; height: 99px; } -.Pet-Sheep-Shade { +.Mount_Icon_Parrot-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -902px -300px; + background-position: -1230px -1145px; width: 81px; height: 99px; } -.Pet-Sheep-Skeleton { +.Mount_Icon_Parrot-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -902px -400px; + background-position: -1326px 0px; width: 81px; height: 99px; } -.Pet-Sheep-White { +.Mount_Icon_Parrot-Desert { background-image: url(spritesmith-main-9.png); - background-position: -902px -500px; + background-position: -1326px -100px; width: 81px; height: 99px; } -.Pet-Sheep-Zombie { +.Mount_Icon_Parrot-Golden { background-image: url(spritesmith-main-9.png); - background-position: -902px -600px; + background-position: -1326px -200px; width: 81px; height: 99px; } -.Pet-Slime-Base { +.Mount_Icon_Parrot-Red { background-image: url(spritesmith-main-9.png); - background-position: -902px -700px; + background-position: -1326px -300px; width: 81px; height: 99px; } -.Pet-Slime-CottonCandyBlue { +.Mount_Icon_Parrot-Shade { background-image: url(spritesmith-main-9.png); - background-position: -902px -800px; + background-position: -1326px -400px; width: 81px; height: 99px; } -.Pet-Slime-CottonCandyPink { +.Mount_Icon_Parrot-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -984px 0px; + background-position: -1326px -500px; width: 81px; height: 99px; } -.Pet-Slime-Desert { +.Mount_Icon_Parrot-White { background-image: url(spritesmith-main-9.png); - background-position: -984px -100px; + background-position: -1326px -600px; width: 81px; height: 99px; } -.Pet-Slime-Golden { +.Mount_Icon_Parrot-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -984px -200px; + background-position: -1326px -700px; width: 81px; height: 99px; } -.Pet-Slime-Red { +.Mount_Icon_Penguin-Base { background-image: url(spritesmith-main-9.png); - background-position: -984px -300px; + background-position: -1326px -800px; width: 81px; height: 99px; } -.Pet-Slime-Shade { +.Mount_Icon_Penguin-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -984px -400px; + background-position: -1326px -900px; width: 81px; height: 99px; } -.Pet-Slime-Skeleton { +.Mount_Icon_Penguin-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -984px -500px; + background-position: -1326px -1000px; width: 81px; height: 99px; } -.Pet-Slime-White { +.Mount_Icon_Penguin-Desert { background-image: url(spritesmith-main-9.png); - background-position: -984px -600px; + background-position: -1326px -1100px; width: 81px; height: 99px; } -.Pet-Slime-Zombie { +.Mount_Icon_Penguin-Golden { background-image: url(spritesmith-main-9.png); - background-position: -984px -700px; + background-position: 0px -1245px; width: 81px; height: 99px; } -.Pet-Spider-Base { +.Mount_Icon_Penguin-Red { background-image: url(spritesmith-main-9.png); - background-position: -984px -800px; + background-position: -82px -1245px; width: 81px; height: 99px; } -.Pet-Spider-CottonCandyBlue { +.Mount_Icon_Penguin-Shade { background-image: url(spritesmith-main-9.png); - background-position: 0px -900px; + background-position: -164px -1245px; width: 81px; height: 99px; } -.Pet-Spider-CottonCandyPink { +.Mount_Icon_Penguin-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -82px -900px; + background-position: -246px -1245px; width: 81px; height: 99px; } -.Pet-Spider-Desert { +.Mount_Icon_Penguin-White { background-image: url(spritesmith-main-9.png); - background-position: -164px -900px; + background-position: -328px -1245px; width: 81px; height: 99px; } -.Pet-Spider-Golden { +.Mount_Icon_Penguin-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -246px -900px; + background-position: -410px -1245px; width: 81px; height: 99px; } -.Pet-Spider-Red { +.Mount_Icon_Phoenix-Base { background-image: url(spritesmith-main-9.png); - background-position: -328px -900px; + background-position: -212px -230px; + width: 105px; + height: 105px; +} +.Mount_Icon_Rat-Base { + background-image: url(spritesmith-main-9.png); + background-position: -574px -1245px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rat-CottonCandyBlue { + background-image: url(spritesmith-main-9.png); + background-position: -656px -1245px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rat-CottonCandyPink { + background-image: url(spritesmith-main-9.png); + background-position: -738px -1245px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rat-Desert { + background-image: url(spritesmith-main-9.png); + background-position: -820px -1245px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rat-Golden { + background-image: url(spritesmith-main-9.png); + background-position: -902px -1245px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rat-Red { + background-image: url(spritesmith-main-9.png); + background-position: -984px -1245px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rat-Shade { + background-image: url(spritesmith-main-9.png); + background-position: -1066px -1245px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rat-Skeleton { + background-image: url(spritesmith-main-9.png); + background-position: -1148px -1245px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rat-White { + background-image: url(spritesmith-main-9.png); + background-position: -1230px -1245px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rat-Zombie { + background-image: url(spritesmith-main-9.png); + background-position: -1312px -1245px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rock-Base { + background-image: url(spritesmith-main-9.png); + background-position: -1408px 0px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rock-CottonCandyBlue { + background-image: url(spritesmith-main-9.png); + background-position: -1408px -100px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rock-CottonCandyPink { + background-image: url(spritesmith-main-9.png); + background-position: -1408px -200px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rock-Desert { + background-image: url(spritesmith-main-9.png); + background-position: -1408px -300px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rock-Golden { + background-image: url(spritesmith-main-9.png); + background-position: -1408px -400px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rock-Red { + background-image: url(spritesmith-main-9.png); + background-position: -1408px -500px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rock-Shade { + background-image: url(spritesmith-main-9.png); + background-position: -1408px -600px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rock-Skeleton { + background-image: url(spritesmith-main-9.png); + background-position: -1408px -700px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rock-White { + background-image: url(spritesmith-main-9.png); + background-position: -1408px -800px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rock-Zombie { + background-image: url(spritesmith-main-9.png); + background-position: -1408px -900px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rooster-Base { + background-image: url(spritesmith-main-9.png); + background-position: -1408px -1000px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rooster-CottonCandyBlue { + background-image: url(spritesmith-main-9.png); + background-position: -1408px -1100px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rooster-CottonCandyPink { + background-image: url(spritesmith-main-9.png); + background-position: -1408px -1200px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rooster-Desert { + background-image: url(spritesmith-main-9.png); + background-position: 0px -1345px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rooster-Golden { + background-image: url(spritesmith-main-9.png); + background-position: -82px -1345px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rooster-Red { + background-image: url(spritesmith-main-9.png); + background-position: -164px -1345px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rooster-Shade { + background-image: url(spritesmith-main-9.png); + background-position: -246px -1345px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rooster-Skeleton { + background-image: url(spritesmith-main-9.png); + background-position: -328px -1345px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rooster-White { + background-image: url(spritesmith-main-9.png); + background-position: -410px -1345px; + width: 81px; + height: 99px; +} +.Mount_Icon_Rooster-Zombie { + background-image: url(spritesmith-main-9.png); + background-position: -492px -1345px; + width: 81px; + height: 99px; +} +.Mount_Icon_Seahorse-Base { + background-image: url(spritesmith-main-9.png); + background-position: -574px -1345px; + width: 81px; + height: 99px; +} +.Mount_Icon_Seahorse-CottonCandyBlue { + background-image: url(spritesmith-main-9.png); + background-position: -656px -1345px; + width: 81px; + height: 99px; +} +.Mount_Icon_Seahorse-CottonCandyPink { + background-image: url(spritesmith-main-9.png); + background-position: -738px -1345px; + width: 81px; + height: 99px; +} +.Mount_Icon_Seahorse-Desert { + background-image: url(spritesmith-main-9.png); + background-position: -820px -1345px; + width: 81px; + height: 99px; +} +.Mount_Icon_Seahorse-Golden { + background-image: url(spritesmith-main-9.png); + background-position: -902px -1345px; + width: 81px; + height: 99px; +} +.Mount_Icon_Seahorse-Red { + background-image: url(spritesmith-main-9.png); + background-position: -984px -1345px; + width: 81px; + height: 99px; +} +.Mount_Icon_Seahorse-Shade { + background-image: url(spritesmith-main-9.png); + background-position: -1066px -1345px; + width: 81px; + height: 99px; +} +.Mount_Icon_Seahorse-Skeleton { + background-image: url(spritesmith-main-9.png); + background-position: -1148px -1345px; + width: 81px; + height: 99px; +} +.Mount_Icon_Seahorse-White { + background-image: url(spritesmith-main-9.png); + background-position: -1230px -1345px; + width: 81px; + height: 99px; +} +.Mount_Icon_Seahorse-Zombie { + background-image: url(spritesmith-main-9.png); + background-position: -1312px -1345px; + width: 81px; + height: 99px; +} +.Mount_Icon_Sheep-Base { + background-image: url(spritesmith-main-9.png); + background-position: -1394px -1345px; + width: 81px; + height: 99px; +} +.Mount_Icon_Sheep-CottonCandyBlue { + background-image: url(spritesmith-main-9.png); + background-position: -1490px 0px; + width: 81px; + height: 99px; +} +.Mount_Icon_Sheep-CottonCandyPink { + background-image: url(spritesmith-main-9.png); + background-position: -1490px -100px; + width: 81px; + height: 99px; +} +.Mount_Icon_Sheep-Desert { + background-image: url(spritesmith-main-9.png); + background-position: -1490px -200px; + width: 81px; + height: 99px; +} +.Mount_Icon_Sheep-Golden { + background-image: url(spritesmith-main-9.png); + background-position: -1490px -300px; + width: 81px; + height: 99px; +} +.Mount_Icon_Sheep-Red { + background-image: url(spritesmith-main-9.png); + background-position: -1490px -400px; + width: 81px; + height: 99px; +} +.Mount_Icon_Sheep-Shade { + background-image: url(spritesmith-main-9.png); + background-position: -1490px -500px; + width: 81px; + height: 99px; +} +.Mount_Icon_Sheep-Skeleton { + background-image: url(spritesmith-main-9.png); + background-position: -1490px -600px; + width: 81px; + height: 99px; +} +.Mount_Icon_Sheep-White { + background-image: url(spritesmith-main-9.png); + background-position: -1490px -700px; + width: 81px; + height: 99px; +} +.Mount_Icon_Sheep-Zombie { + background-image: url(spritesmith-main-9.png); + background-position: -1490px -800px; + width: 81px; + height: 99px; +} +.Mount_Icon_Slime-Base { + background-image: url(spritesmith-main-9.png); + background-position: -1490px -900px; + width: 81px; + height: 99px; +} +.Mount_Icon_Slime-CottonCandyBlue { + background-image: url(spritesmith-main-9.png); + background-position: -1490px -1000px; + width: 81px; + height: 99px; +} +.Mount_Icon_Slime-CottonCandyPink { + background-image: url(spritesmith-main-9.png); + background-position: -1490px -1100px; + width: 81px; + height: 99px; +} +.Mount_Icon_Slime-Desert { + background-image: url(spritesmith-main-9.png); + background-position: -1490px -1200px; + width: 81px; + height: 99px; +} +.Mount_Icon_Slime-Golden { + background-image: url(spritesmith-main-9.png); + background-position: -1490px -1300px; + width: 81px; + height: 99px; +} +.Mount_Icon_Slime-Red { + background-image: url(spritesmith-main-9.png); + background-position: 0px -1445px; + width: 81px; + height: 99px; +} +.Mount_Icon_Slime-Shade { + background-image: url(spritesmith-main-9.png); + background-position: -82px -1445px; + width: 81px; + height: 99px; +} +.Mount_Icon_Slime-Skeleton { + background-image: url(spritesmith-main-9.png); + background-position: -164px -1445px; + width: 81px; + height: 99px; +} +.Mount_Icon_Slime-White { + background-image: url(spritesmith-main-9.png); + background-position: -246px -1445px; width: 81px; height: 99px; } -.Pet-Spider-Shade { +.Mount_Icon_Slime-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -410px -900px; + background-position: -328px -1445px; width: 81px; height: 99px; } -.Pet-Spider-Skeleton { +.Mount_Icon_Snake-Base { background-image: url(spritesmith-main-9.png); - background-position: -492px -900px; + background-position: -410px -1445px; width: 81px; height: 99px; } -.Pet-Spider-White { +.Mount_Icon_Snake-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -574px -900px; + background-position: -492px -1445px; width: 81px; height: 99px; } -.Pet-Spider-Zombie { +.Mount_Icon_Snake-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -656px -900px; + background-position: -574px -1445px; width: 81px; height: 99px; } -.Pet-TRex-Base { +.Mount_Icon_Snake-Desert { background-image: url(spritesmith-main-9.png); - background-position: -738px -900px; + background-position: -656px -1445px; width: 81px; height: 99px; } -.Pet-TRex-CottonCandyBlue { +.Mount_Icon_Snake-Golden { background-image: url(spritesmith-main-9.png); - background-position: -820px -900px; + background-position: -738px -1445px; width: 81px; height: 99px; } -.Pet-TRex-CottonCandyPink { +.Mount_Icon_Snake-Red { background-image: url(spritesmith-main-9.png); - background-position: -902px -900px; + background-position: -820px -1445px; width: 81px; height: 99px; } -.Pet-TRex-Desert { +.Mount_Icon_Snake-Shade { background-image: url(spritesmith-main-9.png); - background-position: -984px -900px; + background-position: -902px -1445px; width: 81px; height: 99px; } -.Pet-TRex-Golden { +.Mount_Icon_Snake-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -1066px 0px; + background-position: -984px -1445px; width: 81px; height: 99px; } -.Pet-TRex-Red { +.Mount_Icon_Snake-White { background-image: url(spritesmith-main-9.png); - background-position: -1066px -100px; + background-position: -1066px -1445px; width: 81px; height: 99px; } -.Pet-TRex-Shade { +.Mount_Icon_Snake-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -1066px -200px; + background-position: -1148px -1445px; width: 81px; height: 99px; } -.Pet-TRex-Skeleton { +.Mount_Icon_Spider-Base { background-image: url(spritesmith-main-9.png); - background-position: -1066px -300px; + background-position: -1230px -1445px; width: 81px; height: 99px; } -.Pet-TRex-White { +.Mount_Icon_Spider-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -1066px -400px; + background-position: -1312px -1445px; width: 81px; height: 99px; } -.Pet-TRex-Zombie { +.Mount_Icon_Spider-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -1066px -500px; + background-position: -1394px -1445px; width: 81px; height: 99px; } -.Pet-Tiger-Veteran { +.Mount_Icon_Spider-Desert { background-image: url(spritesmith-main-9.png); - background-position: -1066px -600px; + background-position: -1476px -1445px; width: 81px; height: 99px; } -.Pet-TigerCub-Base { +.Mount_Icon_Spider-Golden { background-image: url(spritesmith-main-9.png); - background-position: -1066px -700px; + background-position: -1572px 0px; width: 81px; height: 99px; } -.Pet-TigerCub-CottonCandyBlue { +.Mount_Icon_Spider-Red { background-image: url(spritesmith-main-9.png); - background-position: -1066px -800px; + background-position: -1572px -100px; width: 81px; height: 99px; } -.Pet-TigerCub-CottonCandyPink { +.Mount_Icon_Spider-Shade { background-image: url(spritesmith-main-9.png); - background-position: -1066px -900px; + background-position: -1572px -200px; width: 81px; height: 99px; } -.Pet-TigerCub-Desert { +.Mount_Icon_Spider-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: 0px -1000px; + background-position: -1572px -300px; width: 81px; height: 99px; } -.Pet-TigerCub-Golden { +.Mount_Icon_Spider-White { background-image: url(spritesmith-main-9.png); - background-position: -82px -1000px; + background-position: -1572px -400px; width: 81px; height: 99px; } -.Pet-TigerCub-Red { +.Mount_Icon_Spider-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -164px -1000px; + background-position: -1572px -500px; width: 81px; height: 99px; } -.Pet-TigerCub-Shade { +.Mount_Icon_TRex-Base { background-image: url(spritesmith-main-9.png); - background-position: -246px -1000px; + background-position: -1572px -600px; width: 81px; height: 99px; } -.Pet-TigerCub-Skeleton { +.Mount_Icon_TRex-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -328px -1000px; + background-position: -1572px -700px; width: 81px; height: 99px; } -.Pet-TigerCub-Spooky { +.Mount_Icon_TRex-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -410px -1000px; + background-position: -1572px -800px; width: 81px; height: 99px; } -.Pet-TigerCub-White { +.Mount_Icon_TRex-Desert { background-image: url(spritesmith-main-9.png); - background-position: -492px -1000px; + background-position: -1572px -900px; width: 81px; height: 99px; } -.Pet-TigerCub-Zombie { +.Mount_Icon_TRex-Golden { background-image: url(spritesmith-main-9.png); - background-position: -574px -1000px; + background-position: -1572px -1000px; width: 81px; height: 99px; } -.Pet-Turkey-Base { +.Mount_Icon_TRex-Red { background-image: url(spritesmith-main-9.png); - background-position: -656px -1000px; + background-position: -1572px -1100px; width: 81px; height: 99px; } -.Pet-Whale-Base { +.Mount_Icon_TRex-Shade { background-image: url(spritesmith-main-9.png); - background-position: -738px -1000px; + background-position: -1572px -1200px; width: 81px; height: 99px; } -.Pet-Whale-CottonCandyBlue { +.Mount_Icon_TRex-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -820px -1000px; + background-position: -1572px -1300px; width: 81px; height: 99px; } -.Pet-Whale-CottonCandyPink { +.Mount_Icon_TRex-White { background-image: url(spritesmith-main-9.png); - background-position: -902px -1000px; + background-position: -1572px -1400px; width: 81px; height: 99px; } -.Pet-Whale-Desert { +.Mount_Icon_TRex-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -984px -1000px; + background-position: 0px -1545px; width: 81px; height: 99px; } -.Pet-Whale-Golden { +.Mount_Icon_TigerCub-Base { background-image: url(spritesmith-main-9.png); - background-position: -1066px -1000px; + background-position: -82px -1545px; width: 81px; height: 99px; } -.Pet-Whale-Red { +.Mount_Icon_TigerCub-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -1148px 0px; + background-position: -164px -1545px; width: 81px; height: 99px; } -.Pet-Whale-Shade { +.Mount_Icon_TigerCub-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -1148px -100px; + background-position: -246px -1545px; width: 81px; height: 99px; } -.Pet-Whale-Skeleton { +.Mount_Icon_TigerCub-Desert { background-image: url(spritesmith-main-9.png); - background-position: -1148px -200px; + background-position: -328px -1545px; width: 81px; height: 99px; } -.Pet-Whale-White { +.Mount_Icon_TigerCub-Golden { background-image: url(spritesmith-main-9.png); - background-position: -1148px -300px; + background-position: -410px -1545px; width: 81px; height: 99px; } -.Pet-Whale-Zombie { +.Mount_Icon_TigerCub-Peppermint { background-image: url(spritesmith-main-9.png); - background-position: -1148px -400px; + background-position: -492px -1545px; width: 81px; height: 99px; } -.Pet-Wolf-Base { +.Mount_Icon_TigerCub-Red { background-image: url(spritesmith-main-9.png); - background-position: -1148px -500px; + background-position: -574px -1545px; width: 81px; height: 99px; } -.Pet-Wolf-CottonCandyBlue { +.Mount_Icon_TigerCub-Shade { background-image: url(spritesmith-main-9.png); - background-position: -1148px -600px; + background-position: -656px -1545px; width: 81px; height: 99px; } -.Pet-Wolf-CottonCandyPink { +.Mount_Icon_TigerCub-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -1148px -700px; + background-position: -738px -1545px; width: 81px; height: 99px; } -.Pet-Wolf-Desert { +.Mount_Icon_TigerCub-Spooky { background-image: url(spritesmith-main-9.png); - background-position: -1148px -800px; + background-position: -820px -1545px; width: 81px; height: 99px; } -.Pet-Wolf-Golden { +.Mount_Icon_TigerCub-White { background-image: url(spritesmith-main-9.png); - background-position: -1148px -900px; + background-position: -902px -1545px; width: 81px; height: 99px; } -.Pet-Wolf-Red { +.Mount_Icon_TigerCub-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -1148px -1000px; + background-position: -984px -1545px; width: 81px; height: 99px; } -.Pet-Wolf-Shade { +.Mount_Icon_Turkey-Base { background-image: url(spritesmith-main-9.png); - background-position: 0px -1100px; + background-position: -1066px -1545px; width: 81px; height: 99px; } -.Pet-Wolf-Skeleton { +.Mount_Icon_Whale-Base { background-image: url(spritesmith-main-9.png); - background-position: -82px -1100px; + background-position: -1148px -1545px; width: 81px; height: 99px; } -.Pet-Wolf-Spooky { +.Mount_Icon_Whale-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -164px -1100px; + background-position: -1230px -1545px; width: 81px; height: 99px; } -.Pet-Wolf-Veteran { +.Mount_Icon_Whale-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -246px -1100px; + background-position: -1312px -1545px; width: 81px; height: 99px; } -.Pet-Wolf-White { +.Mount_Icon_Whale-Desert { background-image: url(spritesmith-main-9.png); - background-position: -328px -1100px; + background-position: -1394px -1545px; width: 81px; height: 99px; } -.Pet-Wolf-Zombie { +.Mount_Icon_Whale-Golden { background-image: url(spritesmith-main-9.png); - background-position: -410px -1100px; + background-position: -1476px -1545px; width: 81px; height: 99px; } -.Pet_HatchingPotion_Base { +.Mount_Icon_Whale-Red { background-image: url(spritesmith-main-9.png); - background-position: -541px -1100px; - width: 48px; - height: 51px; + background-position: -1558px -1545px; + width: 81px; + height: 99px; } -.Pet_HatchingPotion_CottonCandyBlue { +.Mount_Icon_Whale-Shade { background-image: url(spritesmith-main-9.png); - background-position: -737px -1100px; - width: 48px; - height: 51px; + background-position: -1654px 0px; + width: 81px; + height: 99px; } -.Pet_HatchingPotion_CottonCandyPink { +.Mount_Icon_Whale-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -590px -1100px; - width: 48px; - height: 51px; + background-position: -1654px -100px; + width: 81px; + height: 99px; } -.Pet_HatchingPotion_Desert { +.Mount_Icon_Whale-White { background-image: url(spritesmith-main-9.png); - background-position: -639px -1100px; - width: 48px; - height: 51px; + background-position: -1654px -200px; + width: 81px; + height: 99px; } -.Pet_HatchingPotion_Golden { +.Mount_Icon_Whale-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -688px -1100px; - width: 48px; - height: 51px; + background-position: -1654px -300px; + width: 81px; + height: 99px; } -.Pet_HatchingPotion_Red { +.Mount_Icon_Wolf-Base { background-image: url(spritesmith-main-9.png); - background-position: -492px -1100px; - width: 48px; - height: 51px; + background-position: -1654px -400px; + width: 81px; + height: 99px; } -.Pet_HatchingPotion_Shade { +.Mount_Icon_Wolf-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -786px -1100px; - width: 48px; - height: 51px; + background-position: -1654px -500px; + width: 81px; + height: 99px; } -.Pet_HatchingPotion_Skeleton { +.Mount_Icon_Wolf-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -835px -1100px; - width: 48px; - height: 51px; + background-position: -1654px -600px; + width: 81px; + height: 99px; } -.Pet_HatchingPotion_Spooky { +.Mount_Icon_Wolf-Desert { background-image: url(spritesmith-main-9.png); - background-position: -884px -1100px; - width: 48px; - height: 51px; + background-position: -1654px -700px; + width: 81px; + height: 99px; } -.Pet_HatchingPotion_White { +.Mount_Icon_Wolf-Golden { background-image: url(spritesmith-main-9.png); - background-position: -933px -1100px; - width: 48px; - height: 51px; + background-position: -1654px -800px; + width: 81px; + height: 99px; } -.Pet_HatchingPotion_Zombie { +.Mount_Icon_Wolf-Peppermint { background-image: url(spritesmith-main-9.png); - background-position: -982px -1100px; - width: 48px; - height: 51px; + background-position: -1654px -900px; + width: 81px; + height: 99px; } diff --git a/common/dist/sprites/spritesmith-main-9.png b/common/dist/sprites/spritesmith-main-9.png index ac28737791..bd13af3e17 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/achievements/achievement-alien2x.png b/common/img/sprites/spritesmith/achievements/achievement-alien2x.png new file mode 100644 index 0000000000..d5dc79626d Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-alien2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-armor2x.png b/common/img/sprites/spritesmith/achievements/achievement-armor2x.png new file mode 100644 index 0000000000..6bcdf108f4 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-armor2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-boot2x.png b/common/img/sprites/spritesmith/achievements/achievement-boot2x.png new file mode 100644 index 0000000000..ce74be14e1 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-boot2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-bow2x.png b/common/img/sprites/spritesmith/achievements/achievement-bow2x.png new file mode 100644 index 0000000000..e5f0c0ea72 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-bow2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-burnout2x.png b/common/img/sprites/spritesmith/achievements/achievement-burnout2x.png new file mode 100644 index 0000000000..fafe41ebaa Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-burnout2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-cactus2x.png b/common/img/sprites/spritesmith/achievements/achievement-cactus2x.png new file mode 100644 index 0000000000..d5afa3aa4c Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-cactus2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-cake2x.png b/common/img/sprites/spritesmith/achievements/achievement-cake2x.png new file mode 100644 index 0000000000..4d448777da Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-cake2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-cave2x.png b/common/img/sprites/spritesmith/achievements/achievement-cave2x.png new file mode 100644 index 0000000000..4fc1391439 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-cave2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-comment2x.png b/common/img/sprites/spritesmith/achievements/achievement-comment2x.png new file mode 100644 index 0000000000..9bff80d427 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-comment2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-costumeContest2x.png b/common/img/sprites/spritesmith/achievements/achievement-costumeContest2x.png new file mode 100644 index 0000000000..af09e641d3 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-costumeContest2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-greeting2x.png b/common/img/sprites/spritesmith/achievements/achievement-greeting2x.png new file mode 100644 index 0000000000..c58c84fbb7 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-greeting2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-habitBirthday2x.png b/common/img/sprites/spritesmith/achievements/achievement-habitBirthday2x.png new file mode 100644 index 0000000000..ea41f885df Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-habitBirthday2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-habiticaDay2x.png b/common/img/sprites/spritesmith/achievements/achievement-habiticaDay2x.png new file mode 100644 index 0000000000..3cefab2d9e Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-habiticaDay2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-heart2x.png b/common/img/sprites/spritesmith/achievements/achievement-heart2x.png new file mode 100644 index 0000000000..3af053f976 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-heart2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-karaoke-2x.png b/common/img/sprites/spritesmith/achievements/achievement-karaoke-2x.png new file mode 100644 index 0000000000..a859f46562 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-karaoke-2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-ninja2x.png b/common/img/sprites/spritesmith/achievements/achievement-ninja2x.png new file mode 100644 index 0000000000..ac169cee2e Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-ninja2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-nye2x.png b/common/img/sprites/spritesmith/achievements/achievement-nye2x.png new file mode 100644 index 0000000000..33d1f2ff19 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-nye2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-perfect2x.png b/common/img/sprites/spritesmith/achievements/achievement-perfect2x.png new file mode 100644 index 0000000000..c1f0a6d4d5 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-perfect2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-rat2x.png b/common/img/sprites/spritesmith/achievements/achievement-rat2x.png new file mode 100644 index 0000000000..67d81d0ef9 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-rat2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-seafoam2x.png b/common/img/sprites/spritesmith/achievements/achievement-seafoam2x.png new file mode 100644 index 0000000000..019a703248 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-seafoam2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-shield2x.png b/common/img/sprites/spritesmith/achievements/achievement-shield2x.png new file mode 100644 index 0000000000..89cf5455e5 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-shield2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-shinySeed2x.png b/common/img/sprites/spritesmith/achievements/achievement-shinySeed2x.png new file mode 100644 index 0000000000..3a3d2d5779 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-shinySeed2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-snowball2x.png b/common/img/sprites/spritesmith/achievements/achievement-snowball2x.png new file mode 100644 index 0000000000..e4f65a5cc6 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-snowball2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-spookDust2x.png b/common/img/sprites/spritesmith/achievements/achievement-spookDust2x.png new file mode 100644 index 0000000000..3e700dd72c Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-spookDust2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-sun2x.png b/common/img/sprites/spritesmith/achievements/achievement-sun2x.png new file mode 100644 index 0000000000..7579d4f6ed Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-sun2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-sword2x.png b/common/img/sprites/spritesmith/achievements/achievement-sword2x.png new file mode 100644 index 0000000000..58984a5dc1 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-sword2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-thankyou2x.png b/common/img/sprites/spritesmith/achievements/achievement-thankyou2x.png new file mode 100644 index 0000000000..e24378b27d Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-thankyou2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-thermometer2x.png b/common/img/sprites/spritesmith/achievements/achievement-thermometer2x.png new file mode 100644 index 0000000000..34c160e785 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-thermometer2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-tree2x.png b/common/img/sprites/spritesmith/achievements/achievement-tree2x.png new file mode 100644 index 0000000000..4c04c10e5d Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-tree2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-triadbingo2x.png b/common/img/sprites/spritesmith/achievements/achievement-triadbingo2x.png new file mode 100644 index 0000000000..499eacce3e Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-triadbingo2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-ultimate-healer2x.png b/common/img/sprites/spritesmith/achievements/achievement-ultimate-healer2x.png new file mode 100644 index 0000000000..8330151a96 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-ultimate-healer2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-ultimate-mage2x.png b/common/img/sprites/spritesmith/achievements/achievement-ultimate-mage2x.png new file mode 100644 index 0000000000..f5779c6040 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-ultimate-mage2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-ultimate-rogue2x.png b/common/img/sprites/spritesmith/achievements/achievement-ultimate-rogue2x.png new file mode 100644 index 0000000000..e325a2d2cd Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-ultimate-rogue2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-ultimate-warrior2x.png b/common/img/sprites/spritesmith/achievements/achievement-ultimate-warrior2x.png new file mode 100644 index 0000000000..2ca079f0c8 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-ultimate-warrior2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-valentine2x.png b/common/img/sprites/spritesmith/achievements/achievement-valentine2x.png new file mode 100644 index 0000000000..8e4d7a53db Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-valentine2x.png differ diff --git a/common/img/sprites/spritesmith/achievements/achievement-wolf2x.png b/common/img/sprites/spritesmith/achievements/achievement-wolf2x.png new file mode 100644 index 0000000000..b6c458c907 Binary files /dev/null and b/common/img/sprites/spritesmith/achievements/achievement-wolf2x.png differ diff --git a/common/img/sprites/spritesmith/backgrounds/background_alpine_slopes.png b/common/img/sprites/spritesmith/backgrounds/background_alpine_slopes.png new file mode 100644 index 0000000000..c7f871a7a5 Binary files /dev/null and b/common/img/sprites/spritesmith/backgrounds/background_alpine_slopes.png differ diff --git a/common/img/sprites/spritesmith/backgrounds/background_floating_islands.png b/common/img/sprites/spritesmith/backgrounds/background_floating_islands.png new file mode 100644 index 0000000000..6f797a8c7a Binary files /dev/null and b/common/img/sprites/spritesmith/backgrounds/background_floating_islands.png differ diff --git a/common/img/sprites/spritesmith/backgrounds/background_night_dunes.png b/common/img/sprites/spritesmith/backgrounds/background_night_dunes.png new file mode 100644 index 0000000000..58fb0ff4ff Binary files /dev/null and b/common/img/sprites/spritesmith/backgrounds/background_night_dunes.png differ diff --git a/common/img/sprites/spritesmith/backgrounds/background_snowy_sunrise.png b/common/img/sprites/spritesmith/backgrounds/background_snowy_sunrise.png new file mode 100644 index 0000000000..a33bfb479e Binary files /dev/null and b/common/img/sprites/spritesmith/backgrounds/background_snowy_sunrise.png differ diff --git a/common/img/sprites/spritesmith/backgrounds/background_sunset_oasis.png b/common/img/sprites/spritesmith/backgrounds/background_sunset_oasis.png new file mode 100644 index 0000000000..1ac11dfc31 Binary files /dev/null and b/common/img/sprites/spritesmith/backgrounds/background_sunset_oasis.png differ diff --git a/common/img/sprites/spritesmith/backgrounds/background_winter_town.png b/common/img/sprites/spritesmith/backgrounds/background_winter_town.png new file mode 100644 index 0000000000..07fdd16192 Binary files /dev/null and b/common/img/sprites/spritesmith/backgrounds/background_winter_town.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/broad_armor_armoire_crystalCrescentRobes.png b/common/img/sprites/spritesmith/gear/armoire/broad_armor_armoire_crystalCrescentRobes.png new file mode 100644 index 0000000000..e534a2d382 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/broad_armor_armoire_crystalCrescentRobes.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/broad_armor_armoire_royalRobes.png b/common/img/sprites/spritesmith/gear/armoire/broad_armor_armoire_royalRobes.png new file mode 100644 index 0000000000..e46f3f2b33 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/broad_armor_armoire_royalRobes.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/broad_armor_armoire_shepherdRobes.png b/common/img/sprites/spritesmith/gear/armoire/broad_armor_armoire_shepherdRobes.png new file mode 100644 index 0000000000..6bd73dfdd3 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/broad_armor_armoire_shepherdRobes.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/head_armoire_blueFloppyHat.png b/common/img/sprites/spritesmith/gear/armoire/head_armoire_blueFloppyHat.png new file mode 100644 index 0000000000..b635903ca5 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/head_armoire_blueFloppyHat.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/head_armoire_crystalCrescentHat.png b/common/img/sprites/spritesmith/gear/armoire/head_armoire_crystalCrescentHat.png new file mode 100644 index 0000000000..dc984780ed Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/head_armoire_crystalCrescentHat.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/head_armoire_shepherdHeaddress.png b/common/img/sprites/spritesmith/gear/armoire/head_armoire_shepherdHeaddress.png new file mode 100644 index 0000000000..87fec9f651 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/head_armoire_shepherdHeaddress.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/shield_armoire_royalCane.png b/common/img/sprites/spritesmith/gear/armoire/shield_armoire_royalCane.png new file mode 100644 index 0000000000..fed8ae0fce Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/shield_armoire_royalCane.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/shop/shop_armor_armoire_crystalCrescentRobes.png b/common/img/sprites/spritesmith/gear/armoire/shop/shop_armor_armoire_crystalCrescentRobes.png new file mode 100644 index 0000000000..0b86a2be34 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/shop/shop_armor_armoire_crystalCrescentRobes.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/shop/shop_armor_armoire_royalRobes.png b/common/img/sprites/spritesmith/gear/armoire/shop/shop_armor_armoire_royalRobes.png new file mode 100644 index 0000000000..9eaebed0de Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/shop/shop_armor_armoire_royalRobes.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/shop/shop_armor_armoire_shepherdRobes.png b/common/img/sprites/spritesmith/gear/armoire/shop/shop_armor_armoire_shepherdRobes.png new file mode 100644 index 0000000000..7d054b0c23 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/shop/shop_armor_armoire_shepherdRobes.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/shop/shop_head_armoire_blueFloppyHat.png b/common/img/sprites/spritesmith/gear/armoire/shop/shop_head_armoire_blueFloppyHat.png new file mode 100644 index 0000000000..2fe6b17332 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/shop/shop_head_armoire_blueFloppyHat.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/shop/shop_head_armoire_crystalCrescentHat.png b/common/img/sprites/spritesmith/gear/armoire/shop/shop_head_armoire_crystalCrescentHat.png new file mode 100644 index 0000000000..36df5d828b Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/shop/shop_head_armoire_crystalCrescentHat.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/shop/shop_head_armoire_shepherdHeaddress.png b/common/img/sprites/spritesmith/gear/armoire/shop/shop_head_armoire_shepherdHeaddress.png new file mode 100644 index 0000000000..fa1619160c Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/shop/shop_head_armoire_shepherdHeaddress.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/shop/shop_shield_armoire_royalCane.png b/common/img/sprites/spritesmith/gear/armoire/shop/shop_shield_armoire_royalCane.png new file mode 100644 index 0000000000..e16063cb07 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/shop/shop_shield_armoire_royalCane.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/shop/shop_weapon_armoire_blueLongbow.png b/common/img/sprites/spritesmith/gear/armoire/shop/shop_weapon_armoire_blueLongbow.png new file mode 100644 index 0000000000..a0fe1c08e1 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/shop/shop_weapon_armoire_blueLongbow.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/shop/shop_weapon_armoire_crystalCrescentStaff.png b/common/img/sprites/spritesmith/gear/armoire/shop/shop_weapon_armoire_crystalCrescentStaff.png new file mode 100644 index 0000000000..bcc92165ab Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/shop/shop_weapon_armoire_crystalCrescentStaff.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/shop/shop_weapon_armoire_shepherdsCrook.png b/common/img/sprites/spritesmith/gear/armoire/shop/shop_weapon_armoire_shepherdsCrook.png new file mode 100644 index 0000000000..39a1353c60 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/shop/shop_weapon_armoire_shepherdsCrook.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/slim_armor_armoire_crystalCrescentRobes.png b/common/img/sprites/spritesmith/gear/armoire/slim_armor_armoire_crystalCrescentRobes.png new file mode 100644 index 0000000000..0f0a9d47fd Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/slim_armor_armoire_crystalCrescentRobes.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/slim_armor_armoire_royalRobes.png b/common/img/sprites/spritesmith/gear/armoire/slim_armor_armoire_royalRobes.png new file mode 100644 index 0000000000..ce40038720 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/slim_armor_armoire_royalRobes.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/slim_armor_armoire_shepherdRobes.png b/common/img/sprites/spritesmith/gear/armoire/slim_armor_armoire_shepherdRobes.png new file mode 100644 index 0000000000..716dda57c0 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/slim_armor_armoire_shepherdRobes.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/weapon_armoire_blueLongbow.png b/common/img/sprites/spritesmith/gear/armoire/weapon_armoire_blueLongbow.png new file mode 100644 index 0000000000..f831544647 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/weapon_armoire_blueLongbow.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/weapon_armoire_crystalCrescentStaff.png b/common/img/sprites/spritesmith/gear/armoire/weapon_armoire_crystalCrescentStaff.png new file mode 100644 index 0000000000..beb4412411 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/weapon_armoire_crystalCrescentStaff.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/weapon_armoire_shepherdsCrook.png b/common/img/sprites/spritesmith/gear/armoire/weapon_armoire_shepherdsCrook.png new file mode 100644 index 0000000000..7f74676a8c Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/weapon_armoire_shepherdsCrook.png differ diff --git a/common/img/sprites/spritesmith/npcs/npc_daniel_broken.png b/common/img/sprites/spritesmith/gear/events/mystery_201510/back_mystery_201510.png similarity index 57% rename from common/img/sprites/spritesmith/npcs/npc_daniel_broken.png rename to common/img/sprites/spritesmith/gear/events/mystery_201510/back_mystery_201510.png index fc1515b755..c807640624 100644 Binary files a/common/img/sprites/spritesmith/npcs/npc_daniel_broken.png and b/common/img/sprites/spritesmith/gear/events/mystery_201510/back_mystery_201510.png differ diff --git a/common/img/sprites/spritesmith/gear/events/mystery_201510/headAccessory_mystery_201510.png b/common/img/sprites/spritesmith/gear/events/mystery_201510/headAccessory_mystery_201510.png new file mode 100644 index 0000000000..b702a56c29 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/events/mystery_201510/headAccessory_mystery_201510.png differ diff --git a/common/img/sprites/spritesmith/gear/events/mystery_201510/shop_back_mystery_201510.png b/common/img/sprites/spritesmith/gear/events/mystery_201510/shop_back_mystery_201510.png new file mode 100644 index 0000000000..9501d15ef7 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/events/mystery_201510/shop_back_mystery_201510.png differ diff --git a/common/img/sprites/spritesmith/gear/events/mystery_201510/shop_headAccessory_mystery_201510.png b/common/img/sprites/spritesmith/gear/events/mystery_201510/shop_headAccessory_mystery_201510.png new file mode 100644 index 0000000000..8b2be0cbfb Binary files /dev/null and b/common/img/sprites/spritesmith/gear/events/mystery_201510/shop_headAccessory_mystery_201510.png differ diff --git a/common/img/sprites/spritesmith/gear/events/mystery_201511/broad_armor_mystery_201511.png b/common/img/sprites/spritesmith/gear/events/mystery_201511/broad_armor_mystery_201511.png new file mode 100644 index 0000000000..d854dade51 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/events/mystery_201511/broad_armor_mystery_201511.png differ diff --git a/common/img/sprites/spritesmith/gear/events/mystery_201511/head_mystery_201511.png b/common/img/sprites/spritesmith/gear/events/mystery_201511/head_mystery_201511.png new file mode 100644 index 0000000000..f587343d83 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/events/mystery_201511/head_mystery_201511.png differ diff --git a/common/img/sprites/spritesmith/gear/events/mystery_201511/shop_armor_mystery_201511.png b/common/img/sprites/spritesmith/gear/events/mystery_201511/shop_armor_mystery_201511.png new file mode 100644 index 0000000000..aa5e46c418 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/events/mystery_201511/shop_armor_mystery_201511.png differ diff --git a/common/img/sprites/spritesmith/gear/events/mystery_201511/shop_head_mystery_201511.png b/common/img/sprites/spritesmith/gear/events/mystery_201511/shop_head_mystery_201511.png new file mode 100644 index 0000000000..c1f43f0ae3 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/events/mystery_201511/shop_head_mystery_201511.png differ diff --git a/common/img/sprites/spritesmith/gear/events/mystery_201511/slim_armor_mystery_201511.png b/common/img/sprites/spritesmith/gear/events/mystery_201511/slim_armor_mystery_201511.png new file mode 100644 index 0000000000..858ced1671 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/events/mystery_201511/slim_armor_mystery_201511.png differ diff --git a/common/img/sprites/spritesmith/misc/empty_bottles.png b/common/img/sprites/spritesmith/misc/empty_bottles.png new file mode 100644 index 0000000000..b7fb090f00 Binary files /dev/null and b/common/img/sprites/spritesmith/misc/empty_bottles.png differ diff --git a/common/img/sprites/spritesmith/npcs/npc_alex.png b/common/img/sprites/spritesmith/npcs/npc_alex.png index ec058943e5..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 8159b7c77f..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 71521414f8..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 7989a21bec..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_ian_broken.png b/common/img/sprites/spritesmith/npcs/npc_ian_broken.png deleted file mode 100644 index d1f256d8a8..0000000000 Binary files a/common/img/sprites/spritesmith/npcs/npc_ian_broken.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 d8fd3bc8a5..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 b8ecc03d34..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/seasonalshop_broken.png b/common/img/sprites/spritesmith/npcs/seasonalshop_broken.png deleted file mode 100644 index 891609ee6f..0000000000 Binary files a/common/img/sprites/spritesmith/npcs/seasonalshop_broken.png and /dev/null differ diff --git a/common/img/sprites/spritesmith/npcs/seasonalshop_open.png b/common/img/sprites/spritesmith/npcs/seasonalshop_open.png deleted file mode 100644 index cfbcc5bddd..0000000000 Binary files a/common/img/sprites/spritesmith/npcs/seasonalshop_open.png and /dev/null differ diff --git a/common/img/sprites/spritesmith/quests/inventory_quest_scroll_frog.png b/common/img/sprites/spritesmith/quests/inventory_quest_scroll_frog.png new file mode 100644 index 0000000000..f81dc4f20a Binary files /dev/null and b/common/img/sprites/spritesmith/quests/inventory_quest_scroll_frog.png differ diff --git a/common/img/sprites/spritesmith/quests/inventory_quest_scroll_snake.png b/common/img/sprites/spritesmith/quests/inventory_quest_scroll_snake.png new file mode 100644 index 0000000000..ccf8356fc5 Binary files /dev/null and b/common/img/sprites/spritesmith/quests/inventory_quest_scroll_snake.png differ diff --git a/common/img/sprites/spritesmith/quests/quest_frog.png b/common/img/sprites/spritesmith/quests/quest_frog.png new file mode 100644 index 0000000000..b29d1c04dd Binary files /dev/null and b/common/img/sprites/spritesmith/quests/quest_frog.png differ diff --git a/common/img/sprites/spritesmith/quests/quest_snake.png b/common/img/sprites/spritesmith/quests/quest_snake.png new file mode 100644 index 0000000000..fa85c99137 Binary files /dev/null and b/common/img/sprites/spritesmith/quests/quest_snake.png differ diff --git a/common/img/sprites/spritesmith/quests/quest_vice2.png b/common/img/sprites/spritesmith/quests/quest_vice2.png index f4dae86ecd..3293b042b6 100644 Binary files a/common/img/sprites/spritesmith/quests/quest_vice2.png and b/common/img/sprites/spritesmith/quests/quest_vice2.png differ diff --git a/common/img/sprites/spritesmith/stable/eggs/Pet_Egg_Frog.png b/common/img/sprites/spritesmith/stable/eggs/Pet_Egg_Frog.png new file mode 100644 index 0000000000..3b2dbdc239 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/eggs/Pet_Egg_Frog.png differ diff --git a/common/img/sprites/spritesmith/stable/eggs/Pet_Egg_Snake.png b/common/img/sprites/spritesmith/stable/eggs/Pet_Egg_Snake.png new file mode 100644 index 0000000000..086464d76b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/eggs/Pet_Egg_Snake.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_BearCub-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_BearCub-Peppermint.png new file mode 100644 index 0000000000..5a11f6501f Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_BearCub-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Cactus-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Cactus-Peppermint.png new file mode 100644 index 0000000000..91c4c465ea Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Cactus-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Dragon-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Dragon-Peppermint.png new file mode 100644 index 0000000000..339d92da67 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Dragon-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_FlyingPig-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_FlyingPig-Peppermint.png new file mode 100644 index 0000000000..43c378179b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_FlyingPig-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Fox-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Fox-Peppermint.png new file mode 100644 index 0000000000..7043113cfc Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Fox-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Base.png new file mode 100644 index 0000000000..fc381cf64d Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-CottonCandyBlue.png new file mode 100644 index 0000000000..4d1bb4bd2b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-CottonCandyPink.png new file mode 100644 index 0000000000..e81c29ad49 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Desert.png new file mode 100644 index 0000000000..f5dff14094 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Golden.png new file mode 100644 index 0000000000..57fec93878 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Red.png new file mode 100644 index 0000000000..974e2546f8 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Shade.png new file mode 100644 index 0000000000..5b1497841e Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Skeleton.png new file mode 100644 index 0000000000..dd47d9bda7 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-White.png new file mode 100644 index 0000000000..8c650260f7 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Zombie.png new file mode 100644 index 0000000000..38a87f3b48 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Frog-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_LionCub-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_LionCub-Peppermint.png new file mode 100644 index 0000000000..3811cb57bf Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_LionCub-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_PandaCub-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_PandaCub-Peppermint.png new file mode 100644 index 0000000000..5c585d4e1a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_PandaCub-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Base.png new file mode 100644 index 0000000000..79bfd16cd3 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-CottonCandyBlue.png new file mode 100644 index 0000000000..0ec34f8913 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-CottonCandyPink.png new file mode 100644 index 0000000000..e72518694d Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Desert.png new file mode 100644 index 0000000000..d8182632ba Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Golden.png new file mode 100644 index 0000000000..b3cef57d41 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Red.png new file mode 100644 index 0000000000..db243d12b9 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Shade.png new file mode 100644 index 0000000000..1e6a6a3529 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Skeleton.png new file mode 100644 index 0000000000..13253c9961 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-White.png new file mode 100644 index 0000000000..9d22af74ac Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Zombie.png new file mode 100644 index 0000000000..56492812df Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Snake-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_TigerCub-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_TigerCub-Peppermint.png new file mode 100644 index 0000000000..16003b7b7e Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_TigerCub-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Wolf-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Wolf-Peppermint.png new file mode 100644 index 0000000000..3ae28ef71a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Body_Wolf-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_BearCub-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_BearCub-Peppermint.png new file mode 100644 index 0000000000..7b2b044870 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_BearCub-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Cactus-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Cactus-Peppermint.png new file mode 100644 index 0000000000..688c0e9b7c Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Cactus-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Dragon-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Dragon-Peppermint.png new file mode 100644 index 0000000000..10f92e6f46 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Dragon-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_FlyingPig-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_FlyingPig-Peppermint.png new file mode 100644 index 0000000000..051a6ccb0a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_FlyingPig-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Fox-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Fox-Peppermint.png new file mode 100644 index 0000000000..e5f475e649 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Fox-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Base.png new file mode 100644 index 0000000000..f92e8de63c Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-CottonCandyBlue.png new file mode 100644 index 0000000000..5abeee7f00 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-CottonCandyPink.png new file mode 100644 index 0000000000..012cb7379b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Desert.png new file mode 100644 index 0000000000..c1c6413657 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Golden.png new file mode 100644 index 0000000000..2fc5146e1b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Red.png new file mode 100644 index 0000000000..af9663eca0 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Shade.png new file mode 100644 index 0000000000..3e8a0fc2c5 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Skeleton.png new file mode 100644 index 0000000000..ddb4ab2829 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-White.png new file mode 100644 index 0000000000..c37579df3b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Zombie.png new file mode 100644 index 0000000000..411124e2e9 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Frog-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_LionCub-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_LionCub-Peppermint.png new file mode 100644 index 0000000000..7ae43239e4 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_LionCub-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_PandaCub-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_PandaCub-Peppermint.png new file mode 100644 index 0000000000..6f9103d4a9 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_PandaCub-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Phoenix-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Phoenix-Base.png index 58c4be9c2f..9373310922 100644 Binary files a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Phoenix-Base.png and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Phoenix-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Base.png new file mode 100644 index 0000000000..2b837a7a4f Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-CottonCandyBlue.png new file mode 100644 index 0000000000..316426fc71 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-CottonCandyPink.png new file mode 100644 index 0000000000..e0c427fc0e Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Desert.png new file mode 100644 index 0000000000..a387b58ffa Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Golden.png new file mode 100644 index 0000000000..2d47edbca3 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Red.png new file mode 100644 index 0000000000..e0aa7eade4 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Shade.png new file mode 100644 index 0000000000..9aa3cb8640 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Skeleton.png new file mode 100644 index 0000000000..906dd3c7a1 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-White.png new file mode 100644 index 0000000000..a94d0b29c1 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Zombie.png new file mode 100644 index 0000000000..a29e7b00cc Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Snake-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_TigerCub-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_TigerCub-Peppermint.png new file mode 100644 index 0000000000..ed1e3b217e Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_TigerCub-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Wolf-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Wolf-Peppermint.png new file mode 100644 index 0000000000..4c7fe3438e Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Head_Wolf-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Base.png new file mode 100644 index 0000000000..b2ecc3a6a3 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-CottonCandyBlue.png new file mode 100644 index 0000000000..595a2a75c4 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-CottonCandyPink.png new file mode 100644 index 0000000000..eafdeb5e34 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Desert.png new file mode 100644 index 0000000000..f2a66eab86 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Golden.png new file mode 100644 index 0000000000..fb5d5307d6 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Peppermint.png new file mode 100644 index 0000000000..dbf5e1fef3 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Polar.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Polar.png new file mode 100644 index 0000000000..c72f80cb9e Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Polar.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Red.png new file mode 100644 index 0000000000..b4b499fae3 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Shade.png new file mode 100644 index 0000000000..583b36a1c8 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Skeleton.png new file mode 100644 index 0000000000..03300fc525 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Spooky.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Spooky.png new file mode 100644 index 0000000000..c5bf146ff1 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Spooky.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-White.png new file mode 100644 index 0000000000..a4d74c6ffc Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Zombie.png new file mode 100644 index 0000000000..bdcd68de81 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_BearCub-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Base.png new file mode 100644 index 0000000000..e8efd34709 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-CottonCandyBlue.png new file mode 100644 index 0000000000..9c540c245c Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-CottonCandyPink.png new file mode 100644 index 0000000000..5635b544c3 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Desert.png new file mode 100644 index 0000000000..c5314d04ab Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Golden.png new file mode 100644 index 0000000000..ef5fd81137 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Red.png new file mode 100644 index 0000000000..0a48a826db Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Shade.png new file mode 100644 index 0000000000..e1e2b01b84 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Skeleton.png new file mode 100644 index 0000000000..37e78b977c Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-White.png new file mode 100644 index 0000000000..53e70420f5 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Zombie.png new file mode 100644 index 0000000000..fdcb6f75b9 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Bunny-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Base.png new file mode 100644 index 0000000000..b0e4d8ebdb Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-CottonCandyBlue.png new file mode 100644 index 0000000000..d92e2cc4c0 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-CottonCandyPink.png new file mode 100644 index 0000000000..269d95aa7a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Desert.png new file mode 100644 index 0000000000..f490fb1df2 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Golden.png new file mode 100644 index 0000000000..2c568347ea Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Peppermint.png new file mode 100644 index 0000000000..95cc9bc6e8 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Red.png new file mode 100644 index 0000000000..9f136795c9 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Shade.png new file mode 100644 index 0000000000..2cdbc26ec8 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Skeleton.png new file mode 100644 index 0000000000..015c880eac Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Spooky.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Spooky.png new file mode 100644 index 0000000000..e70126d86a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Spooky.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-White.png new file mode 100644 index 0000000000..107ac48c1a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Zombie.png new file mode 100644 index 0000000000..af05e3ae9b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cactus-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Base.png new file mode 100644 index 0000000000..15714c8cad Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-CottonCandyBlue.png new file mode 100644 index 0000000000..8636e9ba25 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-CottonCandyPink.png new file mode 100644 index 0000000000..8d94df75d0 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Desert.png new file mode 100644 index 0000000000..0dcc56b407 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Golden.png new file mode 100644 index 0000000000..ddcdef45cd Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Red.png new file mode 100644 index 0000000000..8a874a0246 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Shade.png new file mode 100644 index 0000000000..598e70eaca Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Skeleton.png new file mode 100644 index 0000000000..196b944406 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-White.png new file mode 100644 index 0000000000..e40bebbe49 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Zombie.png new file mode 100644 index 0000000000..52d512b50c Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cheetah-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Base.png new file mode 100644 index 0000000000..abad17246a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-CottonCandyBlue.png new file mode 100644 index 0000000000..d569f22780 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-CottonCandyPink.png new file mode 100644 index 0000000000..641587a1dd Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Desert.png new file mode 100644 index 0000000000..35cae16e89 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Golden.png new file mode 100644 index 0000000000..d29e37c22e Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Red.png new file mode 100644 index 0000000000..a9fbbd5da4 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Shade.png new file mode 100644 index 0000000000..26f90404e0 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Skeleton.png new file mode 100644 index 0000000000..42c75923ba Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-White.png new file mode 100644 index 0000000000..4e0844ebe3 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Zombie.png new file mode 100644 index 0000000000..ade7284239 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Cuttlefish-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Base.png new file mode 100644 index 0000000000..9e7d1acf42 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-CottonCandyBlue.png new file mode 100644 index 0000000000..c39f6e3eb1 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-CottonCandyPink.png new file mode 100644 index 0000000000..321c1505df Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Desert.png new file mode 100644 index 0000000000..0138e76607 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Golden.png new file mode 100644 index 0000000000..3ae26755f3 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Red.png new file mode 100644 index 0000000000..76ef070915 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Shade.png new file mode 100644 index 0000000000..354fcd9912 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Skeleton.png new file mode 100644 index 0000000000..3e3b4b789b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-White.png new file mode 100644 index 0000000000..e6d1baa2d4 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Zombie.png new file mode 100644 index 0000000000..0b3275b91a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Deer-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Base.png new file mode 100644 index 0000000000..f52e89ff32 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-CottonCandyBlue.png new file mode 100644 index 0000000000..57f63af962 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-CottonCandyPink.png new file mode 100644 index 0000000000..7b1d490524 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Desert.png new file mode 100644 index 0000000000..7fcfbc8d59 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Golden.png new file mode 100644 index 0000000000..08a111fed7 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Peppermint.png new file mode 100644 index 0000000000..2c0c1379fd Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Red.png new file mode 100644 index 0000000000..17e2bab581 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Shade.png new file mode 100644 index 0000000000..cf5e5ebea4 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Skeleton.png new file mode 100644 index 0000000000..6fcba30ec9 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Spooky.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Spooky.png new file mode 100644 index 0000000000..0c924d0b3a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Spooky.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-White.png new file mode 100644 index 0000000000..f1322f5675 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Zombie.png new file mode 100644 index 0000000000..06a0907b39 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Dragon-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Base.png new file mode 100644 index 0000000000..847ead69f3 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-CottonCandyBlue.png new file mode 100644 index 0000000000..62f2ae4571 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-CottonCandyPink.png new file mode 100644 index 0000000000..32c479bd40 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Desert.png new file mode 100644 index 0000000000..3494a204d3 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Golden.png new file mode 100644 index 0000000000..4e3d805504 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Red.png new file mode 100644 index 0000000000..734b1f562d Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Shade.png new file mode 100644 index 0000000000..c809f3e2c2 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Skeleton.png new file mode 100644 index 0000000000..209d595b3b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-White.png new file mode 100644 index 0000000000..b1c636ac8e Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Zombie.png new file mode 100644 index 0000000000..c3170a1c98 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Egg-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Base.png new file mode 100644 index 0000000000..92aead6658 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-CottonCandyBlue.png new file mode 100644 index 0000000000..a334b98889 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-CottonCandyPink.png new file mode 100644 index 0000000000..ec00e92cbd Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Desert.png new file mode 100644 index 0000000000..9c136e295a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Golden.png new file mode 100644 index 0000000000..ad16c065e0 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Peppermint.png new file mode 100644 index 0000000000..e967632fa0 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Red.png new file mode 100644 index 0000000000..3cea798945 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Shade.png new file mode 100644 index 0000000000..7785e3d840 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Skeleton.png new file mode 100644 index 0000000000..455e67977b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Spooky.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Spooky.png new file mode 100644 index 0000000000..aa8712f568 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Spooky.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-White.png new file mode 100644 index 0000000000..3288b41436 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Zombie.png new file mode 100644 index 0000000000..ca7cd2703e Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_FlyingPig-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Base.png new file mode 100644 index 0000000000..a432085e5a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-CottonCandyBlue.png new file mode 100644 index 0000000000..6b85079131 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-CottonCandyPink.png new file mode 100644 index 0000000000..26e2694662 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Desert.png new file mode 100644 index 0000000000..9952b70f46 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Golden.png new file mode 100644 index 0000000000..360a09f5e0 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Peppermint.png new file mode 100644 index 0000000000..e957801edd Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Red.png new file mode 100644 index 0000000000..2c21df98b5 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Shade.png new file mode 100644 index 0000000000..e5776c4099 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Skeleton.png new file mode 100644 index 0000000000..01a614ffa7 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Spooky.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Spooky.png new file mode 100644 index 0000000000..97a3e7a5de Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Spooky.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-White.png new file mode 100644 index 0000000000..258addb05e Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Zombie.png new file mode 100644 index 0000000000..9c694446f6 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Fox-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Base.png new file mode 100644 index 0000000000..f92e8de63c Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-CottonCandyBlue.png new file mode 100644 index 0000000000..5abeee7f00 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-CottonCandyPink.png new file mode 100644 index 0000000000..012cb7379b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Desert.png new file mode 100644 index 0000000000..c1c6413657 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Golden.png new file mode 100644 index 0000000000..2fc5146e1b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Red.png new file mode 100644 index 0000000000..af9663eca0 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Shade.png new file mode 100644 index 0000000000..3e8a0fc2c5 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Skeleton.png new file mode 100644 index 0000000000..ddb4ab2829 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-White.png new file mode 100644 index 0000000000..c37579df3b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Zombie.png new file mode 100644 index 0000000000..411124e2e9 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Frog-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Base.png new file mode 100644 index 0000000000..e540f87228 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-CottonCandyBlue.png new file mode 100644 index 0000000000..4a8a3498e1 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-CottonCandyPink.png new file mode 100644 index 0000000000..d13b73319c Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Desert.png new file mode 100644 index 0000000000..da2f171dee Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Golden.png new file mode 100644 index 0000000000..6b12b5b529 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Red.png new file mode 100644 index 0000000000..2a6c49b101 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-RoyalPurple.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-RoyalPurple.png new file mode 100644 index 0000000000..96b37c22e5 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-RoyalPurple.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Shade.png new file mode 100644 index 0000000000..3d362f4f46 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Skeleton.png new file mode 100644 index 0000000000..4c8f179a08 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-White.png new file mode 100644 index 0000000000..bd70eb107c Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Zombie.png new file mode 100644 index 0000000000..cb2384b23a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Gryphon-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Base.png new file mode 100644 index 0000000000..73e264fcc1 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-CottonCandyBlue.png new file mode 100644 index 0000000000..9c6b26ef8e Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-CottonCandyPink.png new file mode 100644 index 0000000000..54569ddf64 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Desert.png new file mode 100644 index 0000000000..70d596b627 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Golden.png new file mode 100644 index 0000000000..8da2e89b52 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Red.png new file mode 100644 index 0000000000..8a1016fc39 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Shade.png new file mode 100644 index 0000000000..129ccd4d59 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Skeleton.png new file mode 100644 index 0000000000..25a2ad3ca9 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-White.png new file mode 100644 index 0000000000..594c46bf16 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Zombie.png new file mode 100644 index 0000000000..12385e6527 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Hedgehog-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Base.png new file mode 100644 index 0000000000..69fb717f93 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-CottonCandyBlue.png new file mode 100644 index 0000000000..148d6b37f6 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-CottonCandyPink.png new file mode 100644 index 0000000000..141548078c Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Desert.png new file mode 100644 index 0000000000..180625e5a5 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Golden.png new file mode 100644 index 0000000000..7ef9eedfbe Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Red.png new file mode 100644 index 0000000000..07275024e5 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Shade.png new file mode 100644 index 0000000000..217b01fb1b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Skeleton.png new file mode 100644 index 0000000000..68837d8604 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-White.png new file mode 100644 index 0000000000..a45e649598 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Zombie.png new file mode 100644 index 0000000000..cae941f9fe Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Horse-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_JackOLantern-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_JackOLantern-Base.png new file mode 100644 index 0000000000..fc41e4581f Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_JackOLantern-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Base.png new file mode 100644 index 0000000000..b5fc0f7f72 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-CottonCandyBlue.png new file mode 100644 index 0000000000..ccb607c51b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-CottonCandyPink.png new file mode 100644 index 0000000000..dba1f267c5 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Desert.png new file mode 100644 index 0000000000..d40ad358a1 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Ethereal.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Ethereal.png new file mode 100644 index 0000000000..8e935c471d Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Ethereal.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Golden.png new file mode 100644 index 0000000000..997a52e406 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Peppermint.png new file mode 100644 index 0000000000..ad6fd23fee Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Red.png new file mode 100644 index 0000000000..4315f80229 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Shade.png new file mode 100644 index 0000000000..bf056f7f66 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Skeleton.png new file mode 100644 index 0000000000..1404235c8c Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Spooky.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Spooky.png new file mode 100644 index 0000000000..340c15d948 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Spooky.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-White.png new file mode 100644 index 0000000000..ad783963b2 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Zombie.png new file mode 100644 index 0000000000..775c430eba Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_LionCub-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Mammoth-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Mammoth-Base.png new file mode 100644 index 0000000000..44fabaa090 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Mammoth-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_MantisShrimp-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_MantisShrimp-Base.png new file mode 100644 index 0000000000..8c8752d609 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_MantisShrimp-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Base.png new file mode 100644 index 0000000000..9ec30f03fd Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-CottonCandyBlue.png new file mode 100644 index 0000000000..4c03a8e76c Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-CottonCandyPink.png new file mode 100644 index 0000000000..b1490ff2d7 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Desert.png new file mode 100644 index 0000000000..083750a86d Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Golden.png new file mode 100644 index 0000000000..5af554eb44 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Red.png new file mode 100644 index 0000000000..3dcb1904fe Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Shade.png new file mode 100644 index 0000000000..77879671ce Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Skeleton.png new file mode 100644 index 0000000000..72c47aa849 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-White.png new file mode 100644 index 0000000000..dd63df7d52 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Zombie.png new file mode 100644 index 0000000000..25a2f7314b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Octopus-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Orca-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Orca-Base.png new file mode 100644 index 0000000000..e38a5c5267 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Orca-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Base.png new file mode 100644 index 0000000000..2245a0f5b9 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-CottonCandyBlue.png new file mode 100644 index 0000000000..484c6ca692 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-CottonCandyPink.png new file mode 100644 index 0000000000..548f1bbf14 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Desert.png new file mode 100644 index 0000000000..73946a7faf Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Golden.png new file mode 100644 index 0000000000..6834f5640a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Red.png new file mode 100644 index 0000000000..599dfc0e1f Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Shade.png new file mode 100644 index 0000000000..e80bc271b9 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Skeleton.png new file mode 100644 index 0000000000..7336334dbf Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-White.png new file mode 100644 index 0000000000..7a0f19f5f1 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Zombie.png new file mode 100644 index 0000000000..14b871a707 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Owl-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Base.png new file mode 100644 index 0000000000..70a0204286 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-CottonCandyBlue.png new file mode 100644 index 0000000000..acfe67aa56 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-CottonCandyPink.png new file mode 100644 index 0000000000..6ca07e9c83 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Desert.png new file mode 100644 index 0000000000..8d494b19b7 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Golden.png new file mode 100644 index 0000000000..2693dde1ad Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Peppermint.png new file mode 100644 index 0000000000..e826ee89b1 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Red.png new file mode 100644 index 0000000000..b61901b891 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Shade.png new file mode 100644 index 0000000000..05ca6b66a9 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Skeleton.png new file mode 100644 index 0000000000..51cbc38d11 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Spooky.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Spooky.png new file mode 100644 index 0000000000..6a6a18dbc2 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Spooky.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-White.png new file mode 100644 index 0000000000..11c0a5c685 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Zombie.png new file mode 100644 index 0000000000..c240f26d22 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_PandaCub-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Base.png new file mode 100644 index 0000000000..4d3401e05a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-CottonCandyBlue.png new file mode 100644 index 0000000000..621e1eced9 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-CottonCandyPink.png new file mode 100644 index 0000000000..389d157115 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Desert.png new file mode 100644 index 0000000000..f00870c987 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Golden.png new file mode 100644 index 0000000000..9fb825815c Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Red.png new file mode 100644 index 0000000000..9a8f62088f Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Shade.png new file mode 100644 index 0000000000..48b687c429 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Skeleton.png new file mode 100644 index 0000000000..20d366820b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-White.png new file mode 100644 index 0000000000..c08b7962fb Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Zombie.png new file mode 100644 index 0000000000..e1f2e33bbd Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Parrot-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Base.png new file mode 100644 index 0000000000..bf2796b9e4 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-CottonCandyBlue.png new file mode 100644 index 0000000000..5131768934 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-CottonCandyPink.png new file mode 100644 index 0000000000..4db9265040 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Desert.png new file mode 100644 index 0000000000..c6cdd3f05f Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Golden.png new file mode 100644 index 0000000000..918a7c1f3c Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Red.png new file mode 100644 index 0000000000..ef318fcb31 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Shade.png new file mode 100644 index 0000000000..b01113bcfb Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Skeleton.png new file mode 100644 index 0000000000..5c4e1ca5c0 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-White.png new file mode 100644 index 0000000000..a8d014537a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Zombie.png new file mode 100644 index 0000000000..2c193386e0 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Penguin-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Phoenix-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Phoenix-Base.png new file mode 100644 index 0000000000..9373310922 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Phoenix-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Base.png new file mode 100644 index 0000000000..4c03dde374 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-CottonCandyBlue.png new file mode 100644 index 0000000000..6a9a51041a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-CottonCandyPink.png new file mode 100644 index 0000000000..38abd68d8c Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Desert.png new file mode 100644 index 0000000000..59c03b1c1f Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Golden.png new file mode 100644 index 0000000000..427a044571 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Red.png new file mode 100644 index 0000000000..b8fd0fd035 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Shade.png new file mode 100644 index 0000000000..ddd046e900 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Skeleton.png new file mode 100644 index 0000000000..349fd8639c Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-White.png new file mode 100644 index 0000000000..50575e9f57 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Zombie.png new file mode 100644 index 0000000000..f8d163b176 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rat-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Base.png new file mode 100644 index 0000000000..aa33a02acd Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-CottonCandyBlue.png new file mode 100644 index 0000000000..1b3d0edd70 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-CottonCandyPink.png new file mode 100644 index 0000000000..72e0b3a811 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Desert.png new file mode 100644 index 0000000000..6ab376a892 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Golden.png new file mode 100644 index 0000000000..d5a3b0bc33 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Red.png new file mode 100644 index 0000000000..741fcd144d Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Shade.png new file mode 100644 index 0000000000..ac5a7e6d50 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Skeleton.png new file mode 100644 index 0000000000..552bdb264b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-White.png new file mode 100644 index 0000000000..dd8fa7d045 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Zombie.png new file mode 100644 index 0000000000..28012fdb88 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rock-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Base.png new file mode 100644 index 0000000000..0624cde2ea Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-CottonCandyBlue.png new file mode 100644 index 0000000000..f5122f05af Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-CottonCandyPink.png new file mode 100644 index 0000000000..d5785d5d8b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Desert.png new file mode 100644 index 0000000000..d295707f05 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Golden.png new file mode 100644 index 0000000000..79d089be48 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Red.png new file mode 100644 index 0000000000..0fc8fe0d2c Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Shade.png new file mode 100644 index 0000000000..b5054ed528 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Skeleton.png new file mode 100644 index 0000000000..12eced2ef5 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-White.png new file mode 100644 index 0000000000..b4b5cf4d8b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Zombie.png new file mode 100644 index 0000000000..a15ea846bc Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Rooster-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Base.png new file mode 100644 index 0000000000..d85c2acee5 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-CottonCandyBlue.png new file mode 100644 index 0000000000..6e8f8c53fe Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-CottonCandyPink.png new file mode 100644 index 0000000000..37e96add0b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Desert.png new file mode 100644 index 0000000000..26cf30f28a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Golden.png new file mode 100644 index 0000000000..69eea48ddd Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Red.png new file mode 100644 index 0000000000..5eaa33e0c9 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Shade.png new file mode 100644 index 0000000000..be1944a05c Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Skeleton.png new file mode 100644 index 0000000000..253d5fb891 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-White.png new file mode 100644 index 0000000000..b1f59a8049 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Zombie.png new file mode 100644 index 0000000000..fd43b38306 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Seahorse-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Base.png new file mode 100644 index 0000000000..addc577b95 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-CottonCandyBlue.png new file mode 100644 index 0000000000..c368654ea6 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-CottonCandyPink.png new file mode 100644 index 0000000000..e1969c4d6b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Desert.png new file mode 100644 index 0000000000..dbf127d017 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Golden.png new file mode 100644 index 0000000000..cc085a27d3 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Red.png new file mode 100644 index 0000000000..0a93f1a160 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Shade.png new file mode 100644 index 0000000000..1c7a02f61a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Skeleton.png new file mode 100644 index 0000000000..3b29add4d9 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-White.png new file mode 100644 index 0000000000..ad8539b726 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Zombie.png new file mode 100644 index 0000000000..91ffe6cfbe Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Sheep-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Base.png new file mode 100644 index 0000000000..9ef4f54772 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-CottonCandyBlue.png new file mode 100644 index 0000000000..1b21f0c310 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-CottonCandyPink.png new file mode 100644 index 0000000000..791c2e0237 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Desert.png new file mode 100644 index 0000000000..6d69cc709c Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Golden.png new file mode 100644 index 0000000000..8f9ec4e1dc Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Red.png new file mode 100644 index 0000000000..db6c254d3a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Shade.png new file mode 100644 index 0000000000..e47eb2c1b5 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Skeleton.png new file mode 100644 index 0000000000..81b032154e Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-White.png new file mode 100644 index 0000000000..9822d64b9b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Zombie.png new file mode 100644 index 0000000000..5bf1229c99 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Slime-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Base.png new file mode 100644 index 0000000000..a29b8b5292 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-CottonCandyBlue.png new file mode 100644 index 0000000000..e9a956e4c2 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-CottonCandyPink.png new file mode 100644 index 0000000000..d0fde8eabd Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Desert.png new file mode 100644 index 0000000000..af96464f60 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Golden.png new file mode 100644 index 0000000000..8ba3f92b5b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Red.png new file mode 100644 index 0000000000..265e49b4ad Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Shade.png new file mode 100644 index 0000000000..5ddd35d974 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Skeleton.png new file mode 100644 index 0000000000..2359ee2677 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-White.png new file mode 100644 index 0000000000..5ed78863ca Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Zombie.png new file mode 100644 index 0000000000..1d0be885ae Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Snake-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Base.png new file mode 100644 index 0000000000..733275fe6a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-CottonCandyBlue.png new file mode 100644 index 0000000000..0d29a97d7f Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-CottonCandyPink.png new file mode 100644 index 0000000000..b24ecf7264 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Desert.png new file mode 100644 index 0000000000..8d362804cd Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Golden.png new file mode 100644 index 0000000000..56944097a9 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Red.png new file mode 100644 index 0000000000..54c3b51cb7 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Shade.png new file mode 100644 index 0000000000..f58b1cb7e4 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Skeleton.png new file mode 100644 index 0000000000..b36a858711 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-White.png new file mode 100644 index 0000000000..ec87c2efbf Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Zombie.png new file mode 100644 index 0000000000..8e505557ae Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Spider-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Base.png new file mode 100644 index 0000000000..4c8ef5ac16 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-CottonCandyBlue.png new file mode 100644 index 0000000000..2c232e3ab6 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-CottonCandyPink.png new file mode 100644 index 0000000000..ed365f8e67 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Desert.png new file mode 100644 index 0000000000..36eb4b3a58 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Golden.png new file mode 100644 index 0000000000..b485f26c45 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Red.png new file mode 100644 index 0000000000..8f028bb6cc Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Shade.png new file mode 100644 index 0000000000..e9af429b47 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Skeleton.png new file mode 100644 index 0000000000..7a8c84d2f4 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-White.png new file mode 100644 index 0000000000..a6c8063b88 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Zombie.png new file mode 100644 index 0000000000..45b1075b5f Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TRex-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Base.png new file mode 100644 index 0000000000..b0b56acab6 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-CottonCandyBlue.png new file mode 100644 index 0000000000..0fd2b9936d Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-CottonCandyPink.png new file mode 100644 index 0000000000..5c342990c7 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Desert.png new file mode 100644 index 0000000000..91c1e680ba Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Golden.png new file mode 100644 index 0000000000..3ae9496fbf Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Peppermint.png new file mode 100644 index 0000000000..06d98659f4 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Red.png new file mode 100644 index 0000000000..9f00a6e284 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Shade.png new file mode 100644 index 0000000000..7633618fb7 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Skeleton.png new file mode 100644 index 0000000000..3b6455a050 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Spooky.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Spooky.png new file mode 100644 index 0000000000..7032867167 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Spooky.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-White.png new file mode 100644 index 0000000000..5e08027689 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Zombie.png new file mode 100644 index 0000000000..849222357c Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_TigerCub-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Turkey-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Turkey-Base.png new file mode 100644 index 0000000000..aaedf47e03 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Turkey-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Base.png new file mode 100644 index 0000000000..25f29406ac Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-CottonCandyBlue.png new file mode 100644 index 0000000000..9e8766384a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-CottonCandyPink.png new file mode 100644 index 0000000000..c930009c22 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Desert.png new file mode 100644 index 0000000000..0765477f2a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Golden.png new file mode 100644 index 0000000000..428e0bdbde Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Red.png new file mode 100644 index 0000000000..14e3760112 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Shade.png new file mode 100644 index 0000000000..df1850b905 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Skeleton.png new file mode 100644 index 0000000000..d6ddc40bec Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-White.png new file mode 100644 index 0000000000..2848899b20 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Zombie.png new file mode 100644 index 0000000000..b63af6fcb1 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Whale-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Base.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Base.png new file mode 100644 index 0000000000..3195a1845f Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-CottonCandyBlue.png new file mode 100644 index 0000000000..fdde9d88e0 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-CottonCandyPink.png new file mode 100644 index 0000000000..0d3af60fb6 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Desert.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Desert.png new file mode 100644 index 0000000000..392275fda8 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Golden.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Golden.png new file mode 100644 index 0000000000..6b8da62eac Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Peppermint.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Peppermint.png new file mode 100644 index 0000000000..71940e0a9a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Red.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Red.png new file mode 100644 index 0000000000..1b8388fc6a Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Shade.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Shade.png new file mode 100644 index 0000000000..a99e48ba2e Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Skeleton.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Skeleton.png new file mode 100644 index 0000000000..ae69d8db79 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Spooky.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Spooky.png new file mode 100644 index 0000000000..cbd75453e4 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Spooky.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-White.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-White.png new file mode 100644 index 0000000000..815a208580 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-White.png differ diff --git a/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Zombie.png b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Zombie.png new file mode 100644 index 0000000000..ba58189d2f Binary files /dev/null and b/common/img/sprites/spritesmith/stable/mounts/Mount_Icon_Wolf-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-BearCub-Peppermint.png b/common/img/sprites/spritesmith/stable/pets/Pet-BearCub-Peppermint.png new file mode 100644 index 0000000000..5116e72500 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-BearCub-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Cactus-Peppermint.png b/common/img/sprites/spritesmith/stable/pets/Pet-Cactus-Peppermint.png new file mode 100644 index 0000000000..8479a2572f Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Cactus-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Dragon-Peppermint.png b/common/img/sprites/spritesmith/stable/pets/Pet-Dragon-Peppermint.png new file mode 100644 index 0000000000..454e79d9f2 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Dragon-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-FlyingPig-Peppermint.png b/common/img/sprites/spritesmith/stable/pets/Pet-FlyingPig-Peppermint.png new file mode 100644 index 0000000000..c6d85bfa9c Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-FlyingPig-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Fox-Peppermint.png b/common/img/sprites/spritesmith/stable/pets/Pet-Fox-Peppermint.png new file mode 100644 index 0000000000..8fd07b6b94 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Fox-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Base.png b/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Base.png new file mode 100644 index 0000000000..27bb2a52af Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Frog-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/pets/Pet-Frog-CottonCandyBlue.png new file mode 100644 index 0000000000..7894d6bd05 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Frog-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Frog-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/pets/Pet-Frog-CottonCandyPink.png new file mode 100644 index 0000000000..1e00e874bf Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Frog-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Desert.png b/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Desert.png new file mode 100644 index 0000000000..4ab6280109 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Golden.png b/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Golden.png new file mode 100644 index 0000000000..29ec0ff618 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Red.png b/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Red.png new file mode 100644 index 0000000000..523af858b7 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Shade.png b/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Shade.png new file mode 100644 index 0000000000..d0b76fcf57 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Skeleton.png b/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Skeleton.png new file mode 100644 index 0000000000..6596810fc0 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Frog-White.png b/common/img/sprites/spritesmith/stable/pets/Pet-Frog-White.png new file mode 100644 index 0000000000..918ab4db74 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Frog-White.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Zombie.png b/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Zombie.png new file mode 100644 index 0000000000..bd03952107 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Frog-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-LionCub-Peppermint.png b/common/img/sprites/spritesmith/stable/pets/Pet-LionCub-Peppermint.png new file mode 100644 index 0000000000..1d7e378a27 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-LionCub-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-PandaCub-Peppermint.png b/common/img/sprites/spritesmith/stable/pets/Pet-PandaCub-Peppermint.png new file mode 100644 index 0000000000..ba87082fbb Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-PandaCub-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Base.png b/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Base.png new file mode 100644 index 0000000000..5707a55f2b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Base.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Snake-CottonCandyBlue.png b/common/img/sprites/spritesmith/stable/pets/Pet-Snake-CottonCandyBlue.png new file mode 100644 index 0000000000..472dcd9b97 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Snake-CottonCandyBlue.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Snake-CottonCandyPink.png b/common/img/sprites/spritesmith/stable/pets/Pet-Snake-CottonCandyPink.png new file mode 100644 index 0000000000..aff9e3c098 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Snake-CottonCandyPink.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Desert.png b/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Desert.png new file mode 100644 index 0000000000..81ad100ee0 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Desert.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Golden.png b/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Golden.png new file mode 100644 index 0000000000..49c06ae489 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Golden.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Red.png b/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Red.png new file mode 100644 index 0000000000..5a86d2fd9f Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Red.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Shade.png b/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Shade.png new file mode 100644 index 0000000000..0bd286bd7b Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Shade.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Skeleton.png b/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Skeleton.png new file mode 100644 index 0000000000..dce396125f Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Skeleton.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Snake-White.png b/common/img/sprites/spritesmith/stable/pets/Pet-Snake-White.png new file mode 100644 index 0000000000..6a3b306034 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Snake-White.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Zombie.png b/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Zombie.png new file mode 100644 index 0000000000..ad7e4c4134 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Snake-Zombie.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-TigerCub-Peppermint.png b/common/img/sprites/spritesmith/stable/pets/Pet-TigerCub-Peppermint.png new file mode 100644 index 0000000000..866c303d36 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-TigerCub-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Turkey-Gilded.png b/common/img/sprites/spritesmith/stable/pets/Pet-Turkey-Gilded.png new file mode 100644 index 0000000000..e686b97a54 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Turkey-Gilded.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Wolf-Peppermint.png b/common/img/sprites/spritesmith/stable/pets/Pet-Wolf-Peppermint.png new file mode 100644 index 0000000000..0b62e70e08 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Wolf-Peppermint.png differ diff --git a/common/img/sprites/spritesmith/stable/potions/Pet_HatchingPotion_Peppermint.png b/common/img/sprites/spritesmith/stable/potions/Pet_HatchingPotion_Peppermint.png new file mode 100644 index 0000000000..32f926637f Binary files /dev/null and b/common/img/sprites/spritesmith/stable/potions/Pet_HatchingPotion_Peppermint.png differ diff --git a/common/img/sprites/spritesmith_large/promo/promo_android.png b/common/img/sprites/spritesmith_large/promo/promo_android.png new file mode 100644 index 0000000000..75bc0fbd6a Binary files /dev/null and b/common/img/sprites/spritesmith_large/promo/promo_android.png differ diff --git a/common/img/sprites/spritesmith_large/promo/promo_enchanted_armoire_201511.png b/common/img/sprites/spritesmith_large/promo/promo_enchanted_armoire_201511.png new file mode 100644 index 0000000000..71c445b12d Binary files /dev/null and b/common/img/sprites/spritesmith_large/promo/promo_enchanted_armoire_201511.png differ diff --git a/common/img/sprites/spritesmith_large/promo/promo_habitica.png b/common/img/sprites/spritesmith_large/promo/promo_habitica.png index add0006924..8dbc55c1d9 100644 Binary files a/common/img/sprites/spritesmith_large/promo/promo_habitica.png and b/common/img/sprites/spritesmith_large/promo/promo_habitica.png differ diff --git a/common/img/sprites/spritesmith_large/promo/promo_habitica_sticker.png b/common/img/sprites/spritesmith_large/promo/promo_habitica_sticker.png new file mode 100644 index 0000000000..8ef82d7d00 Binary files /dev/null and b/common/img/sprites/spritesmith_large/promo/promo_habitica_sticker.png differ diff --git a/common/img/sprites/spritesmith_large/promo/promo_mystery_201510.png b/common/img/sprites/spritesmith_large/promo/promo_mystery_201510.png new file mode 100644 index 0000000000..d43dc6dba1 Binary files /dev/null and b/common/img/sprites/spritesmith_large/promo/promo_mystery_201510.png differ diff --git a/common/img/sprites/spritesmith_large/promo/promo_mystery_201511.png b/common/img/sprites/spritesmith_large/promo/promo_mystery_201511.png new file mode 100644 index 0000000000..6072ccf2a1 Binary files /dev/null and b/common/img/sprites/spritesmith_large/promo/promo_mystery_201511.png differ diff --git a/common/img/sprites/spritesmith_large/scenes/avatar_variety.png b/common/img/sprites/spritesmith_large/scenes/avatar_variety.png new file mode 100644 index 0000000000..42010384fc Binary files /dev/null and b/common/img/sprites/spritesmith_large/scenes/avatar_variety.png differ diff --git a/common/index.js b/common/index.js index 6594ecc720..e6a9c9fb98 100644 --- a/common/index.js +++ b/common/index.js @@ -1,4 +1,4 @@ -module.exports = require('./script/index.coffee'); +module.exports = require('./script/index'); var _ = require('lodash'); var moment = require('moment'); diff --git a/common/locales/cs/backgrounds.json b/common/locales/cs/backgrounds.json index 837c0023dd..61515f27de 100644 --- a/common/locales/cs/backgrounds.json +++ b/common/locales/cs/backgrounds.json @@ -106,17 +106,31 @@ "backgroundTwinklyPartyLightsText": "Třpytivá party světýlka", "backgroundTwinklyPartyLightsNotes": "Zatancuj si po třpytivými party světýlky", "backgrounds092015": "SET 16: Vydán v září 2015", - "backgroundMarketText": "Tržiště Habitica", + "backgroundMarketText": "Tržiště města Habitica", "backgroundMarketNotes": "Nakupuj na Tržišti Habitica", - "backgroundStableText": "Stáje Habitica", - "backgroundStableNotes": "Starej se o zvířata ve Stájích Habitica.", - "backgroundTavernText": "Krčma Habitica", - "backgroundTavernNotes": "Navštiv Krčmu Habitica.", - "backgrounds102015": "SET 17: Released October 2015", - "backgroundHarvestMoonText": "Harvest Moon", - "backgroundHarvestMoonNotes": "Cackle under the Harvest Moon.", - "backgroundSlimySwampText": "Slimy Swamp", - "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", - "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgroundStableText": "Stáje města Habitica", + "backgroundStableNotes": "Starej se o zvířata ve Stájích města Habitica.", + "backgroundTavernText": "Krčma města Habitica", + "backgroundTavernNotes": "Navštiv Krčmu města Habitica.", + "backgrounds102015": "SET 17: Vydán v říjnu 2015", + "backgroundHarvestMoonText": "Měsíc při sklizni", + "backgroundHarvestMoonNotes": "Zasměj se po měsícem při sklizni", + "backgroundSlimySwampText": "Slizká bažina", + "backgroundSlimySwampNotes": "Přebroď se slizkou bažinou", + "backgroundSwarmingDarknessText": "Valící se temnota", + "backgroundSwarmingDarknessNotes": "Třes se před valící se temnotou", + "backgrounds112015": "SET 18: Released November 2015", + "backgroundFloatingIslandsText": "Floating Islands", + "backgroundFloatingIslandsNotes": "Hop across the Floating Islands.", + "backgroundNightDunesText": "Night Dunes", + "backgroundNightDunesNotes": "Walk peacefully through the Night Dunes.", + "backgroundSunsetOasisText": "Sunset Oasis", + "backgroundSunsetOasisNotes": "Bask in the Sunset Oasis.", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/cs/challenge.json b/common/locales/cs/challenge.json index 37695fcb16..4fce2a869c 100644 --- a/common/locales/cs/challenge.json +++ b/common/locales/cs/challenge.json @@ -36,15 +36,15 @@ "prizePop": "Pokud někdo může ';vyhrát'; tvou výzvu, můžeš jej odměnit drahokamy. Maximum drahokamů do výhry je počet tvých drahokamů (+ drahokamy cechu, pokud jsi tvůrcem výzvy tohoto cechu). Poznámka: Výhra nemůže být později změněna.", "prizePopTavern": "Pokud někdo může 'vyhrát' tvou výzvu, můžeš jej odměnit drahokamy. Maximum = počet tvých drahokamů. Poznámka: Výhra nemůže být později změněna a výhra z výzev v Krčmě se nevrací, pokud je výzva zrušena.", "publicChallenges": "Minimálně 1 drahokam za veřejné výzvy (opravdu to eliminuje spam).", - "officialChallenge": "Oficiální výzva Habitiky", + "officialChallenge": "Oficiální výzva země Habitica", "by": "od", "participants": "<%= membercount %> účastníků", "join": "Přidat se", "exportChallengeCSV": "Exportovat do CSV", "selectGroup": "Prosím, vyber skupinu", "challengeCreated": "Výzva vytvořena", - "sureDelCha": "Are you sure you want to delete this challenge?", - "sureDelChaTavern": "Are you sure you want to delete this challenge? Your gems will not be refunded.", + "sureDelCha": "Jsi si jistý, že chceš tuto výzvu smazat?", + "sureDelChaTavern": "Jsi si jistý, že chceš tuto výzvu smazat? Nedostaneš zpět Drahokamy.", "removeTasks": "Odstranit úkoly", "keepTasks": "Ponechat úkoly", "closeCha": "Zavřít výzvu a...", @@ -57,7 +57,11 @@ "prizeValue": "<%= gemcount %> <%= gemicon %> Cena", "clone": "Naklonuj", "challengeNotEnoughGems": "Nemáš dostatek Drahokamů, abys mohl uveřejnit tuto výzvu.", - "noPermissionEditChallenge": "You don't have permissions to edit this challenge", - "noPermissionDeleteChallenge": "You don't have permissions to delete this challenge", - "noPermissionCloseChallenge": "You don't have permissions to close this challenge" + "noPermissionEditChallenge": "Nemáš oprávnění k upravování této výzvy", + "noPermissionDeleteChallenge": "Nemáš oprávnění ke smazání této výzvy", + "noPermissionCloseChallenge": "Nemáš oprávnění k ukončení této výzvy", + "congratulations": "Congratulations!", + "hurray": "Hurray!", + "noChallengeOwner": "bez majitele", + "noChallengeOwnerPopover": "Tato Výzva nemá majitele, jelikož uživatel, který ji vytvořil, si smazal účet." } \ No newline at end of file diff --git a/common/locales/cs/character.json b/common/locales/cs/character.json index a28772d8e9..01ccd15da7 100644 --- a/common/locales/cs/character.json +++ b/common/locales/cs/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "Bonus třídy", "battleGear": "Bojová výzbroj", "battleGearText": "Tohle je tvé vybavení, které máš na sobě do bitvy; ovlivňuje čísla, když pracuješ se svými úkoly.", + "autoEquipBattleGear": "Automaticky použít nové vybavení", "costume": "Kostým", "costumeText": "Pokud se ti více líbí vzhled jiného vybavení, než toho, které máš na sobě, zaškrtni \"použít kostým\". Kostým se ti zobrazí na tvém právě používaném vybavení, které tak hezky schová.", "useCostume": "Použít kostým", @@ -64,6 +65,10 @@ "ultimGearText": "Vylepšil na maximální zbraň a set brnění pro následující povolání:", "level": "Úroveň", "levelUp": "Další úroveň!", + "gainedLevel": "You gained a level!", + "leveledUp": "By accomplishing your real-life goals, you've grown to Level <%= level %>!", + "fullyHealed": "You have been fully healed!", + "huzzah": "Huzzah!", "mana": "Mana", "hp": "Zdraví", "mp": "MP", @@ -80,7 +85,7 @@ "noMoreAllocate": "Nyní, když jsi dosáhl úrovně 100, už nebudeš dostávat žádné body atributů. Můžeš pokračovat v dosahování dalších úrovní, nebo můžeš začít nové dobrodružství na úrovni 1, když použiješ Orb Znovuzrození, který nyní najdeš zdarma na Trhu.", "stats": "Statistiky", "strength": "Síla", - "strengthText": "Síla zvyšuje šanci náhodných \"kritických zásahů\" a díky tomu i bonus ke zlaťákům, zkušenosti a nalézání předmětů. Také ovlivňuje vážnost zranění bosse.", + "strengthText": "Síla zvyšuje šanci náhodných \"kritických zásahů\" a díky tomu i bonus ke zlaťákům, zkušenosti a nalézání předmětů. Také ovlivňuje vážnost zranění příšery.", "constitution": "Obrana", "conText": "Obrana snižuje újmu ze zlozvyků a nesplněných denních úkolů.", "perception": "Vnímání", @@ -116,7 +121,7 @@ "taskAllocationPop": "Přiřadí body podle Fyzické (síla), Mentální (Inteligence), Sociální (Obrana) a Další (Vnímání) kategorie přiřazené k úkolům, které splníš.", "distributePoints": "Přiřaď nevyužité body.", "distributePointsPop": "Přiřadí všechny nepřidělené body v závislosti na zvoleném režimu přidělování.", - "warriorText": "Válečníci získávají lepší \"kritické zásahy\", které náhodně dávají bonusové zlaťáky a zkušenosti a zvyšují šanci na nalezení předmětů při splnění úkolu. Také způsobují větší újmu bossům. Hraj za válečníka, pokud tě motivují nepředvídatelné odměny nebo to chceš pořádně nandat bossům při Výpravách!", + "warriorText": "Válečníci získávají lepší \"kritické zásahy\", které náhodně dávají bonusové zlaťáky a zkušenosti a zvyšují šanci na nalezení předmětů při splnění úkolu. Také způsobují větší újmu příšerám. Hraj za válečníka, pokud tě motivují nepředvídatelné odměny nebo to chceš pořádně nandat příšerám při Výpravách!", "mageText": "Mágové se rychle učí, získávají zkušenosti a postupují na vyšší úrovně rychleji než ostatní povolání. Mají také opravdu hodně many na používání speciálních schopností. Hraj za Mága, pokud si chceš užít taktický aspekt Habitica, nebo pokud tě motivuje postup na vyšší úrovně a odemykání nových pokročilých funkcí.", "rogueText": "Zloděj miluje střádání bohatství, získávání více zlata než mají ostatní, a je adeptem na nalezení náhodných předmětů. Jeho pověstná lstivost mu umožňuje uniknout důsledkům promeškání Denních úkolů. Buď zlodějem, pokud nacházíš silnou motivaci v odměnách a úspěších a usiluješ o kořist a ocenění!", "healerText": "Léčitel je nezranitelný a ochraňuje i ostatní. Promeškané Denní úkoly a špatné Zvyky jim moc neublíží a mají možnosti jak se zahojit. Buď léčitelem a užij si pomoc ostatním v družině, nebo pokud tě inspiruje myšlenka ošidit smrt tak, že budeš pořádně dřít!", @@ -126,7 +131,7 @@ "stealth": "Lstivost", "stealthNewDay": "Když začne nový den, vyhneš se újmě z tolika zmeškaných Denních úkolů.", "streaksFrozen": "Šnůra úspěšnosti zmrazena", - "streaksFrozenText": "Šňůra úspěšnosti na promeškaných Denních úkolech nebude na konci dne vynulována.", + "streaksFrozenText": "Série úspěšnosti na promeškaných Denních úkolech nebude na konci dne vynulována.", "respawn": "Oživení!", "youDied": "Zemřel jsi!", "dieText": "Propadl jsi o úroveň níž a přišel jsi o všechny zlaťáky a náhodný kus vybavení. Povstaň, Habiťane, a zkus to znovu! Zbav se zlozvyků, poctivě plň denní úkoly a v případě zaváhání se vyhni smrti pomocí léčivého lektvaru.", diff --git a/common/locales/cs/content.json b/common/locales/cs/content.json index b9addc408e..d2683788ef 100644 --- a/common/locales/cs/content.json +++ b/common/locales/cs/content.json @@ -6,7 +6,7 @@ "armoireLastItem": "Našel jsi poslední kousek vzácného Vybavení v Začarované almaře.", "armoireNotesEmpty": "Almara bude ukrývat nové Vybavení každý první týden v měsíci. Do té doby na ni můžeš klikat a získáš Zkušenostní body a Jídlo!", "dropEggWolfText": "vlk", - "dropEggWolfMountText": "Wolf", + "dropEggWolfMountText": "vlk", "dropEggWolfAdjective": "věrný", "dropEggTigerCubText": "tygřík", "dropEggTigerCubMountText": "tygr", @@ -18,83 +18,89 @@ "dropEggLionCubMountText": "lev", "dropEggLionCubAdjective": "vznešený", "dropEggFoxText": "lišák", - "dropEggFoxMountText": "Fox", - "dropEggFoxAdjective": "lstivá", + "dropEggFoxMountText": "lišák", + "dropEggFoxAdjective": "lstivý", "dropEggFlyingPigText": "létající čuník", - "dropEggFlyingPigMountText": "Flying Pig", - "dropEggFlyingPigAdjective": "náladový", + "dropEggFlyingPigMountText": "létající čuník", + "dropEggFlyingPigAdjective": "kouzelný", "dropEggDragonText": "drak", - "dropEggDragonMountText": "Dragon", + "dropEggDragonMountText": "drak", "dropEggDragonAdjective": "mocný", "dropEggCactusText": "kaktus", - "dropEggCactusMountText": "Cactus", + "dropEggCactusMountText": "kaktus", "dropEggCactusAdjective": "pichlavý", "dropEggBearCubText": "medvídek", "dropEggBearCubMountText": "medvěd", "dropEggBearCubAdjective": "mazlivý", "questEggGryphonText": "gryf", - "questEggGryphonMountText": "Gryphon", + "questEggGryphonMountText": "gryf", "questEggGryphonAdjective": "hrdý", "questEggHedgehogText": "ježek", - "questEggHedgehogMountText": "Hedgehog", - "questEggHedgehogAdjective": "ostnatý", + "questEggHedgehogMountText": "ježek", + "questEggHedgehogAdjective": "pichlavý", "questEggDeerText": "jelen", - "questEggDeerMountText": "Deer", + "questEggDeerMountText": "jelen", "questEggDeerAdjective": "elegantní", "questEggEggText": "Vejce", - "questEggEggMountText": "Košík vajíček", - "questEggEggAdjective": "pestré", - "questEggRatText": "Myšák", - "questEggRatMountText": "Rat", - "questEggRatAdjective": "špinavá", - "questEggOctopusText": "Chobotnice", - "questEggOctopusMountText": "Octopus", - "questEggOctopusAdjective": "kluzká", - "questEggSeahorseText": "Mořský koník", - "questEggSeahorseMountText": "Seahorse", + "questEggEggMountText": "košík vajíček", + "questEggEggAdjective": "pestrý", + "questEggRatText": "myšák", + "questEggRatMountText": "myšák", + "questEggRatAdjective": "špinavý", + "questEggOctopusText": "chobotničák", + "questEggOctopusMountText": "chobotničák", + "questEggOctopusAdjective": "kluzký", + "questEggSeahorseText": "mořský koník", + "questEggSeahorseMountText": "mořský koník", "questEggSeahorseAdjective": "vzácný", - "questEggParrotText": "Papoušek", - "questEggParrotMountText": "Parrot", + "questEggParrotText": "papoušek", + "questEggParrotMountText": "papoušek", "questEggParrotAdjective": "energický", - "questEggRoosterText": "Kohout", - "questEggRoosterMountText": "Rooster", + "questEggRoosterText": "kohout", + "questEggRoosterMountText": "kohout", "questEggRoosterAdjective": "vykračující si", - "questEggSpiderText": "Pavouk", - "questEggSpiderMountText": "Spider", + "questEggSpiderText": "pavouk", + "questEggSpiderMountText": "pavouk", "questEggSpiderAdjective": "strašidelný", - "questEggOwlText": "Sýček", - "questEggOwlMountText": "Owl", - "questEggOwlAdjective": "moudrá", - "questEggPenguinText": "Tučňák", - "questEggPenguinMountText": "Penguin", + "questEggOwlText": "sýček", + "questEggOwlMountText": "sýček", + "questEggOwlAdjective": "moudrý", + "questEggPenguinText": "tučňák", + "questEggPenguinMountText": "tučňák", "questEggPenguinAdjective": "bystrý", "questEggTRexText": "Tyranosaur", - "questEggTRexMountText": "Tyrannosaur", + "questEggTRexMountText": "Tyranosaur", "questEggTRexAdjective": "krátkoruký", - "questEggRockText": "Kámen", - "questEggRockMountText": "Rock", + "questEggRockText": "kámen", + "questEggRockMountText": "kámen", "questEggRockAdjective": "živý", - "questEggBunnyText": "Králíček", - "questEggBunnyMountText": "Bunny", + "questEggBunnyText": "králíček", + "questEggBunnyMountText": "králíček", "questEggBunnyAdjective": "mazlivý", - "questEggSlimeText": "Marshmallow želé", - "questEggSlimeMountText": "Marshmallow Slime", + "questEggSlimeText": "Marshmallow", + "questEggSlimeMountText": "Marshmallow", "questEggSlimeAdjective": "roztomilý", - "questEggSheepText": "Beran", - "questEggSheepMountText": "Sheep", - "questEggSheepAdjective": "huňatá", - "questEggCuttlefishText": "Sépiák", - "questEggCuttlefishMountText": "Cuttlefish", + "questEggSheepText": "beran", + "questEggSheepMountText": "beran", + "questEggSheepAdjective": "huňatý", + "questEggCuttlefishText": "sépiák", + "questEggCuttlefishMountText": "sépiák", "questEggCuttlefishAdjective": "mazlivý", - "questEggWhaleText": "Plejtvák", - "questEggWhaleMountText": "Whale", - "questEggWhaleAdjective": "šplouchavá", - "questEggCheetahText": "Gepard", - "questEggCheetahMountText": "Cheetah", + "questEggWhaleText": "plejtvák", + "questEggWhaleMountText": "plejtvák", + "questEggWhaleAdjective": "šplouchající", + "questEggCheetahText": "gepard", + "questEggCheetahMountText": "gepard", "questEggCheetahAdjective": "upřímný", "questEggHorseText": "kůň", - "questEggHorseMountText": "Horse", + "questEggHorseMountText": "kůň", "questEggHorseAdjective": "cválající", + "questEggFrogText": "žabák", + "questEggFrogMountText": "žabák", + "questEggFrogAdjective": "princ", + "questEggSnakeText": "Snake", + "questEggSnakeMountText": "Snake", + "questEggSnakeAdjective": "a slithering", "eggNotes": "Najdi líhnoucí lektvar, nalij ho na vejce a to se vylíhne v <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "Základní", "hatchingPotionWhite": "Bílý", @@ -111,7 +117,7 @@ "premiumPotionAddlNotes": "Nelze použít na vejce mazlíčků z výprav.", "foodMeat": "Maso", "foodMilk": "Mléko", - "foodPotatoe": "Brambora", + "foodPotatoe": "Brambor", "foodStrawberry": "Jahoda", "foodChocolate": "Čokoláda", "foodFish": "Ryba", diff --git a/common/locales/cs/contrib.json b/common/locales/cs/contrib.json index c525ec5ac9..4917a757b7 100644 --- a/common/locales/cs/contrib.json +++ b/common/locales/cs/contrib.json @@ -1,6 +1,6 @@ { "friend": "Přítel", - "friendFirst": "Když je tvůj první set zlepšováků zaveden, obdržíš odznak přispěvatele Habitice. Tvoje jméno v chatu v krčme bude pyšně ukazovat, že jsi přispěvatel. Jako kořist za svou práci také obdržíš 3 drahokamy.", + "friendFirst": "Když je tvůj první set zlepšováků zaveden, obdržíš odznak přispěvatele programu Habitica. Tvoje jméno v chatu v krčme bude pyšně ukazovat, že jsi přispěvatel. Jako kořist za svou práci také obdržíš 3 drahokamy.", "friendSecond": "Když je tvůj druhý set zlepšováků zaveden, budeš mít možnost koupit si Křišťálové brnění v obchodě s Odměnami. Jako kořist za svou práci také obdržíš 3 drahokamy.", "elite": "Elita", "eliteThird": "Když je tvůj třetí set zlepšováků zaveden, budeš mít možnost koupit si Křišťálovou helmu v obchodě s Odměnami. Jako kořist za svou práci také obdržíš 3 drahokamy.", @@ -9,24 +9,24 @@ "championFifth": "Když je tvůj pátý set zlepšováků zaveden, budeš mít možnost koupit si Křišťálový štít v obchodě s Odměnami. Jako kořist za svou práci také obdržíš 4 drahokamy.", "championSixth": "Když je tvůj šestý set zlepšováků zaveden, obdržíš Hydru. Také obdržíš 4 drahokamy.", "legendary": "Legenda", - "legSeventh": "Když je tvůj sedmý set zlepšováků zaveden, obdržíš 4 drahokamy a staneš se ctěným členem Cechu Přispěvatelů a budeš zasvěcen do detailů za oponou Habitiky! Další příspěvky ti nebudou zvyšovat úroveň, ale mohou ti dále vydělávat Drahokamy a tituly.", + "legSeventh": "Když je tvůj sedmý set zlepšováků zaveden, obdržíš 4 drahokamy a staneš se ctěným členem Cechu Přispěvatelů a budeš zasvěcen do detailů za oponou programu Habitica! Další příspěvky ti nebudou zvyšovat úroveň, ale mohou ti dále vydělávat Drahokamy a tituly.", "moderator": "Moderátor", "guardian": "Ochránce", "guardianText": "Moderátoři byly pečlivě vybráni z řad přispěvatelů na vysokých úrovních, tak jim, prosím, ukazujte respekt a naslouchejte jejich radám.", "staff": "Hůl", "heroic": "Hrdina", - "heroicText": "Mezi hrdiny patří personál Habitiky a přispěvatelé na úrovni personálu. Pokud máš tento titul, byl ti udělen (nebo jsme tě najali!).", + "heroicText": "Mezi hrdiny patří personál země Habitica a přispěvatelé na úrovni personálu. Pokud máš tento titul, byl ti udělen (nebo jsme tě najali!).", "npcText": "NPC podpořily hru nejvyšší částkou na Kickstarteru. Můžeš je najít, jak stráží funkce stránky!", "modalContribAchievement": "Ocenění pomocníka", - "contribModal": "<%= name %>, ty úžasná osobo! Nyní jsi za pomoc Habit RPG na úrovni přispěvatele <%= name %> . Podívej se", + "contribModal": "<%= name %>, ty úžasná osobo! Nyní jsi za pomoc programu Habitica na úrovni přispěvatele <%= name %> . Podívej se", "contribLink": "jaké ceny jsi za svou pomoc získal!", "contribName": "Přispěvatel", - "contribText": "Pomohl si Habitice (programování, design, pixel art, právní pomoc, dokumentace, atd.). Chceš toto ocenění?", + "contribText": "Pomohl si programu Habitica (programování, design, pixel art, právní pomoc, dokumentace, atd.). Chceš toto ocenění?", "readMore": "Číst dál", "kickstartName": "Podporovatel z Kickstarteru ve výši - $<%= tier %>", "kickstartText": "Podpořil projekt na Kickstarteru", "helped": "Pomohl Habitu růst", - "helpedText1": "Pomohl Habitice růst vyplněním", + "helpedText1": "Pomohl programu Habitica růst vyplněním", "helpedText2": "tohoto dotazníku.", "hall": "Síň slávy", "contribTitle": "Přispěvatelský titul (např. \"Kovář\")", @@ -51,14 +51,14 @@ "tier": "Úroveň", "visitHeroes": "Navštiv Sál hrdinů (pomocníci a přispěvatelé)", "conLearn": "Dozvi se více o odměnách přispěvatelům.", - "conLearnHow": "Jak přispět Habitice", - "surveysSingle": "Pomohl Habitice vyplněním dotazníku. Nejsou žádné aktivní dotazníky.", - "surveysMultiple": "Pomohl Habitice růst vyplněním <%= surveys %> dotazníků. Nejsou žádné aktivní dotazníky.", + "conLearnHow": "Jak přispět programu Habitica", + "surveysSingle": "Pomohl programu Habitica vyplněním dotazníku. Nejsou žádné aktivní dotazníky.", + "surveysMultiple": "Pomohl zemi Habitica růst vyplněním <%= surveys %> dotazníků. Nejsou žádné aktivní dotazníky.", "currentSurvey": "Aktuální dotazník", "surveyWhen": "Odznaky budou rozdány všem účastníkům poté, co budou všechny dotazníky zpracovány ke konci března.", "blurbInbox": "Tady se ti ukládají soukromé zprávy! Zprávu někomu odešleš tak, že klikneš na ikonku obálky vedle jejich jména v Krčmě, Družině, nebo chatu v Cechu.", "blurbGuildsPage": "Cechy jsou chatovací skupiny s podobnými zájmy, které jsou tvořené hráči pro hráče. Můžeš si vyhledat témata, která tě zajímají!", "blurbChallenges": "Výzvy jsou tvořeny tvými spoluhráči. Když se účastníš Výzvy, přidají se ti úkoly na tvou stránku s úkoly, a když Výzvu vyhraješ, dostaneš ocenění a často i Drahokamy!", - "blurbHallPatrons": "Toto je Síň Patronů, ve které oslavujeme vznešené dobrodruhy, kteří podpořili Habitiku na Kickstarteru. Jsme jim vděční za to, že pomohli Habitiku přivést k životu!", - "blurbHallHeroes": "Toto je Síň Hrdinů, kde oslavujeme open-source přispěvatele Habitiky. Ať už za kód, kresby, hudbu, psaní, nebo jen prostě za pomoc, vysloužili si Drahokamy, exkluzivní vybavení a prestižní tituly. Také můžeš Habitice přispět! Více informací najdeš zde." + "blurbHallPatrons": "Toto je Síň Patronů, ve které oslavujeme vznešené dobrodruhy, kteří podpořili program Habitica na Kickstarteru. Jsme jim vděční za to, že pomohli zemiHabitica přivést k životu!", + "blurbHallHeroes": "Toto je Síň Hrdinů, kde oslavujeme open-source přispěvatele programu Habitica. Ať už za kód, kresby, hudbu, psaní, nebo jen prostě za pomoc, vysloužili si Drahokamy, exkluzivní vybavení a prestižní tituly. Také můžeš programu Habitica přispět! Více informací najdeš zde." } \ No newline at end of file diff --git a/common/locales/cs/faq.json b/common/locales/cs/faq.json index d0211d8508..afc0e7bc22 100644 --- a/common/locales/cs/faq.json +++ b/common/locales/cs/faq.json @@ -1,41 +1,44 @@ { "frequentlyAskedQuestions": "Nejčastější otázky", "faqQuestion0": "Jsem zmatený. Kde najdu přehled?", - "iosFaqAnswer0": "Nejprve si zadáš nějaký úkol, který chceš splnit (ve škole, v práci, etc.). Až ho splníš a odškrtneš, dostaneš Zkušenostní body a zlato. Zlato se používá na nákup vybavení nebo jiných předmětů a vlastních odměn. Díky zkušenosti budeš získávat vyšší a vyšší úrovně a odemykat obsah, jakým jsou třeba Mazlíčci, Dovednosti, nebo Výpravy! Svou postavu si můžeš upravit v Menu > Upravit postavu.\n\nPár základních rad jak se tu pohybovat: když chceš přidat úkol klikni na (+) v pravém horním rohu", - "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, the wiki has an excellent step-by-step overview of the game [right here](http://habitica.wikia.com/wiki/Habitica_Wiki).", - "faqQuestion1": "How do I set up my tasks?", - "iosFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.", - "webFaqAnswer1": "Good Habits (the ones with a ) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a ) are tasks that you should avoid, like biting nails. Habits with a and a have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n

\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n

\n To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.", - "faqQuestion2": "What are some sample tasks?", - "iosFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n

\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", - "webFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", - "faqQuestion3": "Why do my tasks change color?", - "iosFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it's a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", - "webFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it’s a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", - "faqQuestion4": "Why did my avatar lose health, and how do I regain it?", - "iosFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you tap a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your Party and one of your Party mates did not complete all their Dailies, the Boss will attack you.\n\n The main way to heal is to gain a level, which restores all your health. You can also buy a Health Potion with gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a Party with a Healer, they can heal you as well.", - "webFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you click a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your party and one of your party mates did not complete all their Dailies, the Boss will attack you.\n

\n The main way to heal is to gain a level, which restores all your Health. You can also buy a Health Potion with Gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a party (under Social > Party) with a Healer, they can heal you as well.", - "faqQuestion5": "How do I play Habitica with my friends?", - "iosFaqAnswer5": "The best way is to invite them to a Party with you, via the [website](https://habitica.com/#/options/groups/party)! We'll add the ability to create a Party from this app soon, but in the meantime you can use the [website](https://habitica.com/#/options/groups/party). Parties can go on quests, battle monsters, and cast skills to support each other. On the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", - "webFaqAnswer5": "The best way is to invite them to a party with you, under Social > Party! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n

\n For more detailed info, check out the wiki pages on [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).", - "faqQuestion6": "How do I get a Pet or Mount?", - "iosFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch Egg.\" Then choose a hatching potion to determine its color! Go to Menu > Pets to equip your new Pet to your avatar by clicking on it. \n\n You can also grow your Pets into Mounts by feeding them under Menu > Pets. Tap on a Pet, and then select \"Feed Pet\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Menu > Mounts and tap on it to equip it to your avatar.\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", - "webFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Inventory > Market.\n

\n To hatch a Pet, you'll need an egg and a hatching potion. Click on the egg to determine the species you want to hatch, and then click on the hatching potion to determine its color! Go to Inventory > Pets to equip it to your avatar by clicking on it.\n

\n You can also grow your Pets into Mounts by feeding them under Inventory > Pets. Click on a Pet, and then click on a piece of food from the right-hand menu to feed it! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Inventory > Mounts and click on it to equip it to your avatar.\n

\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", - "faqQuestion7": "How do I become a Warrior, Mage, Rogue, or Healer?", - "iosFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their Party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most gold and find the most item drops, and they can help their Party do the same. Finally, Healers can heal themselves and their Party members.\n\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click “Decide Later” and choose later under Menu > Choose Class.", - "webFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most Gold and find the most item drops, and they can help their party do the same. Finally, Healers can heal themselves and their party members.\n

\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click \"Opt Out\" and re-enable it later under User > Stats.", - "faqQuestion8": "What is the blue stat bar that appears in the Header after level 10?", - "iosFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Use Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", - "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in a special section in the Rewards Column. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You’ll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", - "faqQuestion9": "How do I fight monsters and go on Quests?", - "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party on the [website](https://habitica.com/#/options/groups/party), you'll be rewarded with the Basi-List Scroll! (We will add this feature to the app in a future update.)\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for gold and gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "webFaqAnswer9": "First, you need to join or start a party (under Social > Party). Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n

\n Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are three ways to get a scroll:\n

\n * When you invite people to your party, you’ll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Page (Inventory > Quests) for Gold and Gems.\n

\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your party at the same time that you damage the Boss.\n

\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "faqQuestion10": "What are gems, and how do I get them?", - "iosFaqAnswer10": "Gems are purchased with real money by tapping on the gem icon in the header. When people buy gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying gems directly, there are three other ways players can gain gems:\n\n * Win a Challenge on the [website](https://habitica.com) that has been set up by another player under Social > Challenges. (We will be adding Challenges to the app in a future update!)\n * Subscribe on the [website](https://habitica.com/#/options/settings/subscription) and unlock the ability to buy a certain number of gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with gems do not offer any statistical advantages, so players can still make use of the app without them!", - "webFaqAnswer10": "Gems are [purchased with real money](https://habitica.com/#/options/settings/subscription), although [subscribers](https://habitica.com/#/options/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n

\n In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n

\n * Win a Challenge that has been set up by another player under Social > Challenges.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", - "faqQuestion11": "How do I report a bug or request a feature?", - "iosFaqAnswer11": "You can report a bug, request a feature, or send feedback under Menu > Report a Bug and Menu > Send Feedback! We'll do everything we can to assist you.", - "webFaqAnswer11": "Bug reports are collected on GitHub. Go to [Help > Report a Bug](https://github.com/HabitRPG/habitrpg/issues/2760) and follow the instructions. Don't worry, we'll get you fixed up soon!\n

\n Feature requests are collected on Trello. Go to [Help > Request a Feature](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) and follow the instructions. Ta-da!", - "iosFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the Tavern chat under Menu > Tavern! We're happy to help.", - "webFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the [Newbies Guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help." + "iosFaqAnswer0": "Nejprve si zadáš nějaký úkol, který chceš splnit (ve škole, v práci, etc.). Až ho splníš a odškrtneš, dostaneš Zkušenostní body a zlato. Zlato se používá na nákup vybavení nebo jiných předmětů a vlastních odměn. Díky zkušenosti budeš získávat vyšší a vyšší úrovně a odemykat obsah, jakým jsou třeba Mazlíčci, Dovednosti, nebo Výpravy! Svou postavu si můžeš upravit v Menu > Upravit postavu.\n\nPár základních rad jak se tu pohybovat: když chceš přidat úkol klikni na (+) v pravém horním rohu. Ťuknutím na již existující úkol ho můžeš měnit, a když s ním pohneš doleva, vymaže se. Můžeš si úkoly řadit pomocí tagů v horním pravém rohu, a rozbalovat a zabalovat seznamy kliknutím na bublinu seznamu.", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", + "faqQuestion1": "Jak si přidám úkoly?", + "iosFaqAnswer1": "Dobré zvyky (ty s +), jsou věci, které můžeš plnit kolikrát chceš, například jedení zeleniny. Zlozvyky (ty s -) jsou věci, kterým se chceš vyhnout, třeba kousání nehtů. Zvyky s + a - jsou takové věci, kde můžeš udělat dobré či špatné rozhodnutí, jako třeba když jdeš po schodech vs. jízda výtahem. Dobré zvyky tě za splnění odmění Zkušenostmi a zlatem. Zlozvyky ti uberou Zdraví.\n\nDenní úkoly jsou věci, které musíš dělat každý den, jako třeba čištění zubů nebo kontrola emailu. Můžeš si nastavit ve které dny máš plnit které denní úkoly tak, že na ně ťukneš. Pokud naplánovaný Denní úkol nesplníš, odečte se ti přes noc Zdraví. Dávej pozor, aby sis nepřidal moc Denních úkolů najednou!\n\nÚkolníček obsahuje tvoje naplánované úkoly. Když je splníš, přinesou ti Zkušenost a zlato. Za nesplněné úkoly v Úkolníčku nikdy neztratíš Zdraví. Můžeš jim přiřadit datum splnění tím, že na ně ťukneš.", + "webFaqAnswer1": "Dobré zvyky (ty s ), jsou věci, které můžeš plnit kolikrát chceš, například jedení zeleniny. Zlozvyky (ty s ) jsou věci, kterým se chceš vyhnout, třeba kousání nehtů. Zvyky s a jsou takové věci, kde můžeš udělat dobré či špatné rozhodnutí, jako třeba když jdeš po schodech vs. jízda výtahem. Dobré zvyky tě za splnění odmění Zkušenostmi a zlatem. Zlozvyky ti uberou Zdraví.\n

\nDenní úkoly jsou věci, které musíš dělat každý den, jako třeba čištění zubů nebo kontrola emailu. Můžeš si nastavit ve které dny máš plnit které denní úkoly tak, že na ně ťukneš. Pokud naplánovaný Denní úkol nesplníš, odečte se ti přes noc Zdraví. Dávej pozor, aby sis nepřidal moc Denních úkolů najednou!\n

\nÚkolníček obsahuje tvoje naplánované úkoly. Když je splníš, přinesou ti Zkušenost a zlato. Za nesplněné úkoly v Úkolníčku nikdy neztratíš Zdraví. Můžeš jim přiřadit datum splnění tím, že na ně ťukneš.", + "faqQuestion2": "Co jsou ukázkové úkoly?", + "iosFaqAnswer2": "Wiki má čtyři seznamy ukázkových úkolů, kterými se můžeš inspirovat:\n

\n* [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n* [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n* [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n* [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", + "webFaqAnswer2": "Wiki má čtyři seznamy ukázkových úkolů, kterými se můžeš inspirovat:\n [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n* [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n* [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n* [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", + "faqQuestion3": "Proč moje úkoly mění barvu?", + "iosFaqAnswer3": "Tvé úkoly mění barvu v závislosti na tom, jak dobře si v nich vedeš! Každý nový úkol začíná na neutrální žluté. Plň Denní úkoly a Zvyky často a začnou modrat. Když nesplníš Denní úkol nebo se poddáš zlozvyku, začnou tvé úkoly červenat. Čím červenější úkol bude, tím více odměn za něj získáš, ale pokud to je Denní úkol nebo Zvyk, tak tím více ti ublíží! Tento systém tě pomáhá motivovat a plnit úkoly, se kterými máš problém.", + "webFaqAnswer3": "Tvé úkoly mění barvu v závislosti na tom, jak dobře si v nich vedeš! Každý nový úkol začíná na neutrální žluté. Plň Denní úkoly a Zvyky často a začnou modrat. Když nesplníš Denní úkol nebo se poddáš zlozvyku, začnou tvé úkoly červenat. Čím červenější úkol bude, tím více odměn za něj získáš, ale pokud to je Denní úkol nebo Zvyk, tak tím více ti ublíží! Tento systém tě pomáhá motivovat a plnit úkoly, se kterými máš problém.", + "faqQuestion4": "Proč má postava ztratila Zdraví a jak ho mohu získat zpátky?", + "iosFaqAnswer4": "Je několik věcí, které ti můžou ublížit. První z nich je, když do půlnoci nesplníš naplánovaný denní úkol. Druhou věcí je, když si odklikneš zlozvyk. A poslední věcí je, když bojuješ proti příšeře s družinou a někdo z tvých přátel nesplní všechny své Denní úkoly.\n\nNejdůležitějším způsobem, jak si obnovit zdraví, je dostat se na další úroveň. Také si můžeš ve sloupečku s Odměnami a zlaťáky koupit Lektvar zdraví. Navíc, od 10. úrovně se můžeš stát Léčitelem a budeš moci používat své léčitelské schopnosti. Pokud máš léčitele v družině, může ti vrátit zdraví i on.", + "webFaqAnswer4": "Je několik věcí, které ti můžou ublížit. První z nich je, když do půlnoci nesplníš naplánovaný denní úkol. Druhou věcí je, když si odklikneš zlozvyk. A poslední věcí je, když bojuješ proti příšeře s družinou a někdo z tvých přátel nesplní všechny své Denní úkoly.\n

\nNejdůležitějším způsobem, jak si obnovit zdraví, je dostat se na další úroveň. Také si můžeš ve sloupečku s Odměnami a zlaťáky koupit Lektvar zdraví. Navíc, od 10. úrovně se můžeš stát Léčitelem a budeš moci používat své léčitelské schopnosti. Pokud máš léčitele v družině (Komunita > Družina), může ti vrátit zdraví i on.", + "faqQuestion5": "Jak můžu hrát s přáteli?", + "iosFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on quests, battle monsters, and cast skills to support each other. Go to Menu > Party and click \"Create New Party\" if you don't already have a Party. Then tap on the Members list, and tap Invite in the upper right-hand corner to invite your friends by entering their User ID (a string of numbers and letters that they can find under Settings > Account Details on the app, and Settings > API on the website). On the website, you can also invite friends via email, which we will add to the app in a future update.\n\nOn the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", + "webFaqAnswer5": "Nejlepším způsobem, jak přátele pozvat do své družiny, je přes Komunita > Družina! Družiny se mohou vydávat na výpravy, bojovat s příšerami, a jejich členové se mohou navzájem podporovat. Také se ty a tvoji přátelé můžete přidat k různým Cechům (Komunita > Cechy) Cechy jsou veřejné chaty, které se zaměřují na společné zájmy nebo na společné cíle, a mohou být veřejné nebo soukromé. Můžeš se přidat ke kolika cechům chceš, ale můžeš být pouze v jedné družině.\n

\nVíce informací najdeš na stránce [Družiny](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds) na wiki.", + "faqQuestion6": "Jak získám Mazlíčka nebo Zvíře?", + "iosFaqAnswer6": "Ve 3. úrovni odemkneš systém nálezů. Pokaždé, když splní úkol, naskytne se ti náhodná šance nalézt vejce, líhnoucí lektvar, nebo jídlo. Budou se ti ukládat v Menu > Předměty.\n\nAbys mohl vylíhnout mazlíčka, musíš mít vejce a líhnoucí lektvar. Ťukni na vejce, aby bylo jasné, kterého mazlíčka chceš vylíhnout, a vyber \"Vylíhnout vejce\". Poté si vyber líhnoucí lektvar a tím zvolíš bravu mazlíčka! Jdi do Menu > Mazlíčci a kliknutím můžeš svého mazlíčka přidat ke své postavě.\n\nTaké můžeš z mazlíčků vykrmit Zvířata v Menu > Mazlíčci. Ťukni na mazlíčka a poté vyber \"Nakrmit mazlíčka!\" Budeš ho muset nakrmit několikrát, aby vyrostl ve velké zvíře, ale když zjistíš, které jídlo mu chutná, poroste rychleji. Zkus metodu pokus a omyl, nebo [použij tenhle tahák](http://habitica.wikia.com/wiki/Food#Food_Preferences). Jakmile zvíře vykrmíš, jdi do Menu > Zvířata a ťuknutím si ho tvoje postava osedlá.\n\nTaké můžeš získat vejce z výprav po jejich dokončení. (O výpravách více níže.)", + "webFaqAnswer6": "Ve 3. úrovni odemkneš systém nálezů. Pokaždé, když splní úkol, naskytne se ti náhodná šance nalézt vejce, líhnoucí lektvar, nebo jídlo. Budou se ti ukládat v Inventář > Trh.\n

\nAbys mohl vylíhnout mazlíčka, musíš mít vejce a líhnoucí lektvar. Ťukni na vejce, aby bylo jasné, kterého mazlíčka chceš vylíhnout, a vyber \"Vylíhnout vejce\". Poté si vyber líhnoucí lektvar a tím zvolíš bravu mazlíčka! Jdi do Inventář > Mazlíčci a kliknutím můžeš svého mazlíčka přidat ke své postavě.\n

\nTaké můžeš z mazlíčků vykrmit Zvířata v Inventář > Mazlíčci. Ťukni na mazlíčka a poté vyber \"Nakrmit mazlíčka!\" Budeš ho muset nakrmit několikrát, aby vyrostl ve velké zvíře, ale když zjistíš, které jídlo mu chutná, poroste rychleji. Zkus metodu pokus a omyl, nebo [použij tenhle tahák](http://habitica.wikia.com/wiki/Food#Food_Preferences). Jakmile zvíře vykrmíš, jdi do Menu > Stáj a ťuknutím si ho tvoje postava osedlá.\n

\nTaké můžeš získat vejce z výprav po jejich dokončení. (O výpravách více níže.)", + "faqQuestion7": "Jak se stanu Válečníkem, Mágem, Zlodějem, nebo Léčitelem?", + "iosFaqAnswer7": "Na 10. úrovni si můžeš vybrat mezi Válečníkem, Mágem, Zlodějem, nebo Léčitelem. (Všichni hráči začínají jako Válečníci). Každé povolání má různé možnosti vybavení, různé dovednosti, které mohou používat od 11. úrovně, a různé výhody. Válečníci snadno ublíží příšerám, vydrží více a zocelují družinu. Mágové také snadno ublíží příšerám a rychle získávají další úrovně a doplňují Manu pro družinu. Zloději získávají nejvíce zlata, nachází nejvíce předmětů a mohou pomoci družině ke stejným nálezům. Nakonec, léčitelé mohou uzdravit sebe a členy své družiny.\n\nPokud si nechceš povolání vybrat hned - například pokud sis ještě nenakoupil všechno vybavení pro své stávající povolání - můžeš kliknout na \"Rozhodnout se později\" a vybrat si později v Menu > Vybrat povolání.", + "webFaqAnswer7": "Na 10. úrovni si můžeš vybrat mezi Válečníkem, Mágem, Zlodějem, nebo Léčitelem. (Všichni hráči začínají jako Válečníci). Každé povolání má různé možnosti vybavení, různé dovednosti, které mohou používat od 11. úrovně, a různé výhody. Válečníci snadno ublíží příšerám, vydrží více a zocelují družinu. Mágové také snadno ublíží příšerám a rychle získávají další úrovně a doplňují Manu pro družinu. Zloději získávají nejvíce zlata, nachází nejvíce předmětů a mohou pomoci družině ke stejným nálezům. Nakonec, léčitelé mohou uzdravit sebe a členy své družiny.\n

\nPokud si nechceš povolání vybrat hned - například pokud sis ještě nenakoupil všechno vybavení pro své stávající povolání - můžeš kliknout na \"Odhlásit\" a vybrat si později v Uživatel > Statistiky.", + "faqQuestion8": "Co je ta modrá lišta, která se objeví v postavy po 10. úrovni?", + "iosFaqAnswer8": "Ta modrá lišta, která se objevila když jsi dosáhl úrovně 10 a vybral si povolání, je lišta Many. S každou další úrovní budeš odemykat speciální dovednosti, za jejichž použití platíš Manou. Každé povolání má jiné dovednosti, které se objeví po 11. úrovni v Menu > Použít dovednosti. Na rozdíl od lišty Zdraví se lišta Many nedoplní s každou novou úrovní. Místo toho se doplňuje když plníš dobré zvyky, denní úkoly, a úkoly v Úkolníčku a naopak ubývá při podlehnutí zlozvyku. Také se ti trocha doplní přes noc - čím více denních úkolů splníš, tím více se ti jí doplní.", + "webFaqAnswer8": "Ta modrá lišta, která se objevila když jsi dosáhl úrovně 10 a vybral si povolání, je lišta Many. S každou další úrovní budeš odemykat speciální dovednosti, za jejichž použití platíš Manou. Každé povolání má jiné dovednosti, které se objeví po 11. úrovni dole ve sloupečku s Odměnami. Na rozdíl od lišty Zdraví se lišta Many nedoplní s každou novou úrovní. Místo toho se doplňuje když plníš dobré zvyky, denní úkoly, a úkoly v Úkolníčku a naopak ubývá při podlehnutí zlozvyku. Také se ti trocha doplní přes noc - čím více denních úkolů splníš, tím více se ti jí doplní.", + "faqQuestion9": "Jak můžu bojovat s příšerami a vydávat se na výpravy?", + "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for Gold and Gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", + "webFaqAnswer9": "Nejprve se musíš přidat k družině ( v Komunita > Družina). I když můžeš s příšerami bojovat sám, doporučujeme hrát ve skupině, protože tak budou výpravy mnohem snadnější. Navíc, mít u sebe přátele, kteří tě povzbuzují, může být hodně motivující!\n

\nDále budeš potřebovat svitek s výpravou, který najdeš v Inventář > Výpravy. Jsou tři způsoby jak získat svitek:\n

\n* Když přizveš lidi do družiny, získáš svitek s Bazilístkem!\n* Při dosažení úrovně 15 dostaneš soupravy výprav, neboli tři spojené výpravy. Další soupravy výprav odemkneš na úrovních 30, 40 a 60.\n* Můžeš si výpravy koupit na jejich stránce (Inventář > Výpravy) za zlato a drahokamy.\n

\nBoj s příšerami nebo sběr předmětů z výprav probíhá normálním plněním tvých úkolů a body za ně se přes noc sečtou. (Někdy musíš znovu načíst stránku aby příšeře ubylo zdraví). Pokud bojuješ s příšerou a nesplníš denní úkol, příšera ublíží nejen tobě, ale i tvým přátelům, i když ublížíte i vy jemu.\n

\nPo úrovni 11 získají Mágové a Válečníci dovednosti, kterými mohou příšerám ublížit ještě více, takže to jsou ta nejlepší povolání, která si na 10. úrovni můžeš vybrat, pokud chceš postupovat rychle.", + "faqQuestion10": "What are Gems, and how do I get them?", + "iosFaqAnswer10": "Drahokamy se kupují za reálné peníze ťuknutím na ikonku v horní liště. Když si lidé kupují drahokamy, pomáhají nám tím udržovat tuhle stránku v chodu. Jsme vděčni za každou pomoc!\n\nMimo přímou koupi drahokamů existují tři další možnosti jak je získat:\n\n* Vyhrát výzvu na [stránce](https://habitica.com), která byla založena jiným hráčem v Komunita > Výzvy. (Do aplikace budou Výzvy přidány v budoucnu!)\n* Předplatným na [stránce](https://habitica.com/#/options/settings/subscription), které odemkne možnost nakoupit si určitý počet drahokamů za měsíc\n* Přispěním programu Habitica. Více informací najdeš na [Přispění programu Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n\nPředměty, které si můžeš za drahokamy koupit nedávají žádnou statistickou výhodu a tak se hráči bez nich dokáží obejít!", + "webFaqAnswer10": "Drahokamy se [kupují za reálné peníze](https://habitica.com/#/options/settings/subscription), i když [předplatitelé](https://habitica.com/#/options/settings/subscription) si je mohou koupit za Zlaťáky. Když si lidé kupují drahokamy, pomáhají nám tím udržovat tuhle stránku v chodu. Jsme vděčni za každou pomoc!\n

\nMimo přímou koupi drahokamů existují tři další možnosti jak je získat:\n

\n* Vyhrát výzvu, která byla založena jiným hráčem v Komunita > Výzvy. \n* Přispěním programu Habitica. Více informací najdeš na [Přispění programu Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\nPředměty, které si můžeš za drahokamy koupit nedávají žádnou statistickou výhodu a tak se hráči bez nich dokáží obejít!", + "faqQuestion11": "Jak mohu nahlásit chybu nebo zažádat o funkci?", + "iosFaqAnswer11": "Můžeš nahlásit chybu, zažádat o funkci, nebo poslat zpětnou vazbu přes Menu > Nahlásit chybu a Menu > Poslat zpětnou vazbu! Uděláme vše co můžeme, abychom ti pomohli.", + "webFaqAnswer11": "Zprávy o chybách se shromažďují na GitHub. Jdi na [Nápověda > Nahlásit chybu](https://github.com/HabitRPG/habitrpg/issues/2760) a pokračuj podle instrukcí. Neboj, brzo to spravíme!\n

\nŽádosti o nové funkce se shromažďují na Trello. Jdi na [Nápověda > Zažádat o funkci](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) a pokračuj podle instrukcí. Tadá!", + "faqQuestion12": "Jak mám bojovat se Světovou příšerou?", + "iosFaqAnswer12": "Světové příšery jsou speciální příšery, které se objevují v Krčmě. Všichni aktivní uživatelé automaticky s touto příšerou bojují a jejich úkoly a dovednosti příšeře ublíží jako vždy.\n\nV té době se také můžete vydat na normální výpravu. Tvé úkoly a dovednosti se budou počítat do obou bojů, jak na výpravě, tak se světovou příšerou.\n\nSvětová příšera ti nikdy nijak neublíží. Místo toho má lištu vzteku, která se plní, když uživatelé neplní své Denní úkoly. Když se lišta vzteku naplní, příšera zaútočí na jednu z postav v naší zemi a její obrázek se změní.\n\nPokud se chceš dočíst něco o [minulých světových příšerách](http://habitica.wikia.com/wiki/World_Bosses), koukni na wiki.", + "webFaqAnswer12": "Světové příšery jsou speciální příšery, které se objevují v Krčmě. Všichni aktivní uživatelé automaticky s touto příšerou bojují a jejich úkoly a dovednosti příšeře ublíží jako vždy.\n

\nV té době se také můžete vydat na normální výpravu. Tvé úkoly a dovednosti se budou počítat do obou bojů, jak na výpravě, tak se světovou příšerou.\n

\nSvětová příšera ti nikdy nijak neublíží. Místo toho má lištu vzteku, která se plní, když uživatelé neplní své Denní úkoly. Když se lišta vzteku naplní, příšera zaútočí na jednu z postav v naší zemi a její obrázek se změní.\n

\nPokud se chceš dočíst něco o [minulých světových příšerách](http://habitica.wikia.com/wiki/World_Bosses), koukni na wiki.", + "iosFaqStillNeedHelp": "Pokud máš otázku, kterou jsme nezodpověděli, přijď se zeptat do Krčmy v Menu > Krčma! Rádi ti pomůžeme.", + "webFaqStillNeedHelp": "Pokud máš otázku, kterou jsme nezodpověděli, přijď se zeptat do [Cechu pro nováčky - Newbies Guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! Rádi ti pomůžeme." } \ No newline at end of file diff --git a/common/locales/cs/front.json b/common/locales/cs/front.json index 4cdaf6c070..ad17f4fb2d 100644 --- a/common/locales/cs/front.json +++ b/common/locales/cs/front.json @@ -74,7 +74,7 @@ "infhQuote": "[Program Habitica] mi opravdu pomohla dát mému životu nějakou strukturu.", "invalidEmail": "Aby mohlo proběhnout resetování hesla, musí být zadán platný email.", "irishfeet123Quote": "Měla jsem problém s úklidem. Nechávala jsem všude nádobí a skleničky. [Program Habitica] mi pomohla!", - "joinOthers": "Přidej se k 250 000 lidí, kteří dosahují svých cílů zábavným způsobem!", + "joinOthers": "Join <%= userCount %> people making it fun to achieve goals!", "kazuiQuote": "Před tím, než jsem objevila [program Habitica] jsem se zasekla s diplomkou a byla jsem nespokojena se svou disciplínou ohledně domácích prací a věcí, jako učením se slovíček. Ukázalo se, že když si tyhle cíle rozdělím na menší, je mnohem snazší se motivovat a neustále pracovat.", "landingadminlink": "administrační balíčky", "landingend": "Stále nejsi přesvědčen?", @@ -102,8 +102,8 @@ "marketing1Lead3Title": "Najdi náhodné ceny", "marketing2Header": "Soutěž s přáteli. Připoj se do zájmových skupin.", "marketing2Lead1": "I když se můžeš toulat zemí Habitica sám, dostane to grády až když začneš spolupracovat a soutěžit s ostatními a svalovat vinu jeden na druhého. Nejefektivnější část jakéhokoliv sebezlepšovacího programu je sociální odpovědnost. A jaké je lepší prostředí pro odpovědnost a soutěživost než video hra?", - "marketing2Lead2": "Bojuj s bossy. Co by byla hra bez bojů? Bojuj s bossy se svou družinou. Bossové jsou \"super odpovědný mód\" - den, kdy prošvihneš posilovnu je dnem, kdy Boss uškodí všem.", - "marketing2Lead2Title": "Bossové", + "marketing2Lead2": "Bojuj s příšerami. Co by byla hra bez bojů? Bojuj s příšerami se svou družinou. Příšery jsou \"super odpovědný mód\" - den, kdy prošvihneš posilovnu je dnem, kdy Boss uškodí všem.", + "marketing2Lead2Title": "Příšery", "marketing2Lead3": "Výzvy ti umožňují soutěžit s přáteli a neznámými lidmi. Ten, kdo ze sebe při výzvě vydá to nejlepší, vyhrává speciální ceny.", "marketing3Header": "Aplikace", "marketing3Lead1": "Aplikace pro iPhone a Android ti umožňují postarat se o vše na cestách. Uvědomujeme si, že přihlášení se na stránku, abys odklikal úkoly, může být otrava.", @@ -179,5 +179,14 @@ "businessInquiries": "Obchodní poptávka", "merchandiseInquiries": "Poptávka po zboží", "marketingInquiries": "Poptávka marketing/sociální média", - "tweet": "Tweet" + "tweet": "Tweet", + "apps": "Apps", + "notifyAndroidApp": "Want us to notify you when the Android app is ready? Sign up for this mailing list!", + "checkOutIOSApp": "Check out our new iOS App!", + "imagine1": "Imagine if improving your life were as fun as playing a game.", + "landingCopy1": "Advance in the game by completing your real-life tasks.", + "landingCopy2": "Battle monsters with friends to stay accountable to your goals.", + "landingCopy3": "Join over <%= userCount %> people having fun as they improve their lives.", + "alreadyHaveAccount": "I already have an account!", + "getStartedNow": "Get Started Now!" } \ No newline at end of file diff --git a/common/locales/cs/gear.json b/common/locales/cs/gear.json index f4e461368c..9fe754b2e2 100644 --- a/common/locales/cs/gear.json +++ b/common/locales/cs/gear.json @@ -87,7 +87,7 @@ "weaponSpecialSpringHealerText": "Půvabná Kost", "weaponSpecialSpringHealerNotes": "Přines! Přidá <%= int %> bodů k Inteligenci. Limitovaná edice 2014 Jarní výbava.", "weaponSpecialSummerRogueText": "Pirátská palaš", - "weaponSpecialSummerRogueNotes": "Avast! You'll make those Dailies walk the plank! Increases Strength by <%= str %>. Limited Edition 2014 Summer Gear.", + "weaponSpecialSummerRogueNotes": "Zadrž! Všechny Denní úkoly půjdou přes palubu! Přidá <%= str %> bodů k Síle. Limitovaná Edice 2014 Letní Výbava.", "weaponSpecialSummerWarriorText": "Mořeplavecký kráječ", "weaponSpecialSummerWarriorNotes": "V žádném Úkolníčku neexistuje úkol odvážný tolik, aby se zapletl s tímto nožem! Přidá <%= str %> bodů k Síle. Limitovaná Edice 2014 Letní Výbava.", "weaponSpecialSummerMageText": "Chaluhový chytač", @@ -115,7 +115,7 @@ "weaponSpecialSpring2015WarriorText": "Kostěný kyj", "weaponSpecialSpring2015WarriorNotes": "Je to pravý kostěný kyj pro divoké pejsky a rozhodně to není hračka na žvýkání, kterou ti dali Sezonní mudrcové, protože kdo je hodný pejsek? Kdooo je hodný pejsek? Ty jsi!!!! Ty jsi hodný pejsek!!! Zvyšuje Sílu o <%= str %>. Limitovaná edice Jarní výbavy 2015.", "weaponSpecialSpring2015MageText": "Mágova hůlka", - "weaponSpecialSpring2015MageNotes": "Conjure up a carrot for yourself with this fancy wand. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2015 Spring Gear.", + "weaponSpecialSpring2015MageNotes": "Vykouzli si mrkev s touhle super hůlkou. Zvyšuje Inteligenci o <%= int %> a Vnímání o <%= per %>. Limitovaná edice Jarní výbavy 2015.", "weaponSpecialSpring2015HealerText": "Kočičí chrastítko", "weaponSpecialSpring2015HealerNotes": "Když s ním zamáváš, vydává fascinující chřestivý zvuk, který zabaví KOHOKOLIV na hodiny. Zvyšuje Inteligenci o <%= int %>. Limitovaná edice Jarní výbavy 2015.", "weaponSpecialSummer2015RogueText": "Střílející korál", @@ -126,14 +126,14 @@ "weaponSpecialSummer2015MageNotes": "V kamenech tohoto žezla se blyští skrytá síla. Zvyšuje Inteligenci o <%= int %> a Vnímání o <%= per %>. Limitovaná edice letní výbavy 2015.", "weaponSpecialSummer2015HealerText": "Hůlka vln", "weaponSpecialSummer2015HealerNotes": "Léčí mořské nemoci i mořskou nemoc! Zvyšuje Inteligenci o <%= int %>. Limitovaná edice letní výbavy 2015.", - "weaponSpecialFall2015RogueText": "Bat-tle Ax", - "weaponSpecialFall2015RogueNotes": "Fearsome To-Dos cower before the flapping of this ax. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "weaponSpecialFall2015WarriorText": "Wooden Plank", - "weaponSpecialFall2015WarriorNotes": "Great for elevating things in cornfields and/or smacking tasks. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "weaponSpecialFall2015MageText": "Enchanted Thread", - "weaponSpecialFall2015MageNotes": "A powerful Stitch Witch can control this enchanted thread without even touching it! Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "weaponSpecialFall2015HealerText": "Swamp-Slime Potion", - "weaponSpecialFall2015HealerNotes": "Brewed to perfection! Now you just have to convince yourself to drink it. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", + "weaponSpecialFall2015RogueText": "Netopýří sekera", + "weaponSpecialFall2015RogueNotes": "Úkoly se zbaběle třesou před plácáním této sekery. Zvyšuje Sílu o <%= str %>. Limitovaná edice podzimní výbavy 2015.", + "weaponSpecialFall2015WarriorText": "Dřevěné prkno", + "weaponSpecialFall2015WarriorNotes": "Výborné pro vyzvedávání věcí v kukuřičných polích a/nebo plácání úkolů Zvyšuje Sílu o <%= str %>. Limitovaná edice podzimní výbavy 2015.", + "weaponSpecialFall2015MageText": "Začarovaná nit", + "weaponSpecialFall2015MageNotes": "Mocná čarodějka šití dokáže tuto nit ovládat aniž by se jí dotkla! Zvyšuje Inteligenci o <%= int %> a Vnímání i <%= per %>. Limitovaná edice podzimní výbavy 2015.", + "weaponSpecialFall2015HealerText": "Lektvar ze slizu z bažiny", + "weaponSpecialFall2015HealerNotes": "Uvařen k dokonalosti. Nyní se už jen musíš přesvědčit ho vypít. Zvyšuje Inteligenci o <%= int %>. Limitovaná edice podzimní výbavy 2015.", "weaponMystery201411Text": "Vidle hodů", "weaponMystery201411Notes": "Píchni své nepřátele nebo se pusť do svého oblíbeného jídla - tyhle všestranné vidle zvládnou všechno! Nepřináší žádný benefit.", "weaponMystery201502Text": "Třpytivá okřídlená hůl lásky a také pravdy", @@ -149,13 +149,19 @@ "weaponArmoireRancherLassoText": "Rančerské laso", "weaponArmoireRancherLassoNotes": "Lasa: ideální nástroj na nahánění. Zvyšuje Sílu o <%= str %>, Vnímání o <%= per %> a Inteligenci o <%= int %>. Začarovaná almara: Rančerský set (předmět 3 ze 3).", "weaponArmoireMythmakerSwordText": "Meč tvořičů mýtů", - "weaponArmoireMythmakerSwordNotes": "I když vypadá skromně, tento meč doprovázel mnoho mýtických hrdinů. Zvyšuje Vnímání a Sílu o <%= attrs %> každou. Začarovaná almara: Set zlaté tógy (předmět 3 ze 3)", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Železná hůl", - "weaponArmoireIronCrookNotes": "Zprudka ukuta z oceli, tato hůl je vynikající k nahánění ovcí. Zvyšuje Vnímání a Sílu o <%= attrs %> každou. Začarovaná almara: Set helmy s rohy (předmět 3 ze 3)", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Zlatokřídlá Hůl", "weaponArmoireGoldWingStaffNotes": "Křídla této hole se neustále třepetají a kroutí. Zvyšuje všechny vlastnosti, každou o <%= attrs %>. Začarovaná almara: Nezávislý předmět.", - "weaponArmoireBatWandText": "Bat Wand", - "weaponArmoireBatWandNotes": "This wand can turn any task into a bat! Wave it about and watch them fly away. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireBatWandText": "Netopýří hůlka", + "weaponArmoireBatWandNotes": "Tato hůlka dokáže přeměnit jakýkoliv úkol v netopýra! Máchni jí a sleduj, jak úkoly odlétají. Zvyšuje Inteligenci o <%= int %> a Vnímání o <%= per %>. Začarovaná almara: Nezávislý předmět.", + "weaponArmoireShepherdsCrookText": "Shepherd's Crook", + "weaponArmoireShepherdsCrookNotes": "Useful for herding gryphons. Increases Constitution by <%= con %>. Enchanted Armoire: Shepherd Set (Item 1 of 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "zbroj", "armorBase0Text": "Obyčejné oblečení", "armorBase0Notes": "Běžné oblečení. Nenabízí žádný bonus.", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "Komické párty kostýmy", "armorSpecialBirthday2015Notes": "Vše nejlepší té nejlepší zemi, Habitica! Oblečte Absurdní Party Kostýmy, a oslavte tento báječný den. Neposkytuje žádný bonus.", "armorSpecialGaymerxText": "Zbroj duhového bojovníka", - "armorSpecialGaymerxNotes": "Ku příležitosti oslav sezóny Gay Pride a GaymerX je tato speciální zbroj zdobená zářivým barevným duhovým vzorem! GaymerX je herní veletrh oslavující LGBTQ a hry a je otevřený všem. Koná se v InterContinentalu v centru San Francisca 11.-13. července! Nepřináší žádné výhody.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "Elegantní kočičí oblek", "armorSpecialSpringRogueNotes": "Bezvadně udržovaný. Přidá <%= per %> bodů k Vnímání. Limitovaná edice 2014 Jarní výbava.", "armorSpecialSpringWarriorText": "Zbroj z jetelové oceli", @@ -269,14 +275,14 @@ "armorSpecialSummer2015MageNotes": "Moc se skrývá v nadýchaných rukávech. Zvyšuje Inteligenci o <%= int %>. Limitovaná edice letní výbavy 2015.", "armorSpecialSummer2015HealerText": "Námořníkovo brnění", "armorSpecialSummer2015HealerNotes": "Toto brnění dává všem najevo, že jsi čestný námořní kupec, který by se nikdy nechoval jako křivák. Zvyšuje Obranu o <%= con %>. Limitovaná edice letní výbavy 2015.", - "armorSpecialFall2015RogueText": "Bat-tle Armor", - "armorSpecialFall2015RogueNotes": "Fly into bat-tle! Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "armorSpecialFall2015WarriorText": "Scarecrow Armor", - "armorSpecialFall2015WarriorNotes": "Despite being stuffed with straw, this armor is extremely hefty! Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", - "armorSpecialFall2015MageText": "Stitched Robes", - "armorSpecialFall2015MageNotes": "Every stitch in this armor shimmers with enchantment. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", - "armorSpecialFall2015HealerText": "Potioner Robes", - "armorSpecialFall2015HealerNotes": "What? Of course that was a potion of constitution. No, you are definitely not turning into a frog! Don't be ribbiticulous. Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", + "armorSpecialFall2015RogueText": "Netopýří brnění", + "armorSpecialFall2015RogueNotes": "Odleť do bitvy. Zvyšuje Vnímání o <%= per %>. Limitovaná edice podzimní výbavy 2015.", + "armorSpecialFall2015WarriorText": "Strašákovo brnění", + "armorSpecialFall2015WarriorNotes": "I přes to, že je vycpané slámou, je toto brnění extrémně odolné! Zvyšuje Obranu o <%= con %>. Limitovaná edice podzimní výbavy 2015.", + "armorSpecialFall2015MageText": "Sešívaný oděv", + "armorSpecialFall2015MageNotes": "Každý steh na tomto oděvu září magií. Zvyšuje Inteligenci o <%= int %>. Limitovaná edice podzimní výbavy 2015:", + "armorSpecialFall2015HealerText": "Oděv lektvarníka", + "armorSpecialFall2015HealerNotes": "Cože? No samozřejmě, že to byl lektvar obrany. Ne, rozhodně se právě neměníš na žábu! nebuď směšný. Zvyšuje Obranu o <%= con %>. Limitovaná edice podzimní výbavy 2015.", "armorMystery201402Text": "Oděv poslíčka", "armorMystery201402Notes": "Třpytivý a silný, tento oděv má spoustu kapes na dopisy. Nepřináší žádný benefit. Výbava pro předplatitele únor 2014", "armorMystery201403Text": "Zbroj lesáka", @@ -305,8 +311,10 @@ "armorMystery201506Notes": "Zašnorchluj si u korálového útesu v tomto zářivě barevném úboru! Nepřináší žádný benefit. Předmět pro předplatitele červen 2015.", "armorMystery201508Text": "Kostým geparda", "armorMystery201508Notes": "Utíkej rychle jako blesk s tímhle huňatým kostýmem geparda! Nepřináší žádný benefit. Předmět pro předplatitele srpen 2015.", - "armorMystery201509Text": "Werewolf Costume", - "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201509Text": "Kostým vlkodlaka", + "armorMystery201509Notes": "Tohle JE kostým, že jo? Nepřináší žádný benefit. Předmět pro předplatitele září 2015.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Steampunk oblek", "armorMystery301404Notes": "Elegantní a fešácký, joj! Nepřináší žádný benefit. Předmět pro předplatitele únor 3015.", "armorArmoireLunarArmorText": "Uklidňující měsíční brnění", @@ -320,7 +328,13 @@ "armorArmoireHornedIronArmorText": "Železné brnění s rohy", "armorArmoireHornedIronArmorNotes": "Zprudka ukuto z oceli, toto brnění je skoro nerozbitné. Zvyšuje Obranu o <%= con %> a Vnímání o <%= per %>. Začarovaná almara: Set helmy s rohy (předmět 2 ze 3)", "armorArmoirePlagueDoctorOvercoatText": "Zimník Morového Lékaře", - "armorArmoirePlagueDoctorOvercoatNotes": "Autentický zimník opotřebovaný doktory, kteří vzdorují Moru Otálení! Zvyšuje Inteligenci o <%= int %>, Sílu o <%= str %> a Obranu o <%= con %>. Začarovaná almara: Set Morových Lékařů (Předmět 3 ze 3).", + "armorArmoirePlagueDoctorOvercoatNotes": "Autentický zimník nošený doktory, kteří vzdorují Moru Otálení! Zvyšuje Inteligenci o <%= int %>, Sílu o <%= str %> a Obranu o <%= con %>. Začarovaná almara: Set Morových Lékařů (Předmět 3 ze 3).", + "armorArmoireShepherdRobesText": "Shepherd Robes", + "armorArmoireShepherdRobesNotes": "The fabric is cool and breathable, perfect for a hot day herding gryphons in the desert. Increases Strength and Perception by <%= attrs %> each. Enchanted Armoire: Shepherd Set (Item 2 of 3).", + "armorArmoireRoyalRobesText": "Royal Robes", + "armorArmoireRoyalRobesNotes": "Wonderful ruler, rule all day long! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 3 of 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "Pokrývka hlavy", "headBase0Text": "Žádná přilba", "headBase0Notes": "Žádná pokrývka hlavy", @@ -432,16 +446,16 @@ "headSpecialSummer2015MageNotes": "Ukrytá moc září v každé niti této šály. Zvyšuje Vnímání o <%= per %>. Limitovaná edice letní výbavy 2015.", "headSpecialSummer2015HealerText": "Námořnická čapka", "headSpecialSummer2015HealerNotes": "S námořnickou čapkou pevně nasazenou na hlavě můžeš proplout i těmi nejbouřlivějšími moři! Zvyšuje Inteligenci o <%= int %>. Limitovaná edice letní výbavy 2015.", - "headSpecialFall2015RogueText": "Bat-tle Wings", - "headSpecialFall2015RogueNotes": "Echolocate your enemies with this powerful helm! Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "headSpecialFall2015WarriorText": "Scarecrow Hat", - "headSpecialFall2015WarriorNotes": "Everyone would want this hat--if they only had a brain. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "headSpecialFall2015MageText": "Stitched Hat", - "headSpecialFall2015MageNotes": "Every stitch in this hat augments its power. Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "headSpecialFall2015HealerText": "Hat of Frog", - "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", + "headSpecialFall2015RogueText": "Netopýří křídla", + "headSpecialFall2015RogueNotes": "Změř své nepřátele touto mocnou helmou! Zvyšuje Vnímání o <%= per %>. Limitovaná edice podzimní výbavy 2015.", + "headSpecialFall2015WarriorText": "Strašákův klobouk", + "headSpecialFall2015WarriorNotes": "Každý by chtěl tenhle klobouk - pokud by měli mozek. Zvyšuje Sílu o <%= str %>. Limitovaná edice pozdimní výbavy 2015.", + "headSpecialFall2015MageText": "Sešívaný klobouk", + "headSpecialFall2015MageNotes": "Každý steh na tomto klobouku vyzařuje sílu. Zvyšuje Vnímání o <%= per %>. Limitovaná edice podzimní výbavy 2015.", + "headSpecialFall2015HealerText": "Klobouk žáby", + "headSpecialFall2015HealerNotes": "Tohle je opravdu vážný klobouk nošený jen těmi nejpokročilejšími lektvaráři. Zvyšuje Inteligenci o <%= int %>. limitovaná edice podzimní výbavy 2015.", "headSpecialGaymerxText": "Helma duhového bojovníka", - "headSpecialGaymerxNotes": "Ku příležitosti oslav sezóny Gay Pride a GaymerX je tato speciální helma zdobená zářivým barevným duhovým vzorem! GaymerX je herní veletrh oslavující LGBTQ a hry a je otevřený všem. Koná se v InterContinentalu v centru San Francisca 11.-13. července! Nepřináší žádné výhody.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "Okřídlená přilba", "headMystery201402Notes": "Tato okřídlená čelenka propůjčuje svému nositeli rychlost větru! Výbava pro předplatitele únor 2014.", "headMystery201405Text": "Plamen mysli", @@ -462,8 +476,10 @@ "headMystery201505Notes": "Zelená chocholka na této železné helmě se hrdě třepotá. Nepřináší žádný benefit. Předmět pro předplatitele květen 2015.", "headMystery201508Text": "Gepardí klobouk", "headMystery201508Notes": "Tenhle příjemný klobouk je pořádně huňatý! Nepřináší žádný benefit. Předmět pro předplatitele srpen 2015.", - "headMystery201509Text": "Werewolf Mask", - "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201509Text": "Maska vlkodlaka", + "headMystery201509Notes": "Tohle JE maska, že jo? Nepřináší žádný benefit. Předmět pro předplatitele září 2015.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 Subscriber Item.", "headMystery301404Text": "Fešný cylindr", "headMystery301404Notes": "Fešný cylindr pro ty největší džentlmeny. Předmět pro předplatitele leden 2015. Nepřináší žádný benefit.", "headMystery301405Text": "Obyčejný cylindr", @@ -481,7 +497,7 @@ "headArmoireBlueHairbowText": "Modrá mašle do vlasů", "headArmoireBlueHairbowNotes": "Staň se vnímavým, neoblomným a chytrým díky této nádherné modré mašli do vlasů! Zvyšuje Vnímání o <%= per %>, Obranu o <%= con %> a Inteligenci o <%= int %>. Začarovaná almara: Nezávislý předmět.", "headArmoireRoyalCrownText": "Královská koruna", - "headArmoireRoyalCrownNotes": "Sláva vládci, mocnému a silnému! Zvyšuje Sílu o <%= str %>. Začarovaná almara: Nezávislý předmět.", + "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Royal Set (Item 1 of 3).", "headArmoireGoldenLaurelsText": "Zlaté vavříny", "headArmoireGoldenLaurelsNotes": "Tyto zlaté vavříny odměňují ty, kteří pokořili zlozvyky. Zvyšuje Vnímání a Obranu o <%= attrs %> každou. Začarovaná almara: Set zlaté tógy (předmět 2 ze 3).", "headArmoireHornedIronHelmText": "Železná helma s rohy", @@ -492,10 +508,16 @@ "headArmoireRedFloppyHatNotes": "Mnoho kouzel bylo zašito do tohoto jednoduchého klobouku. Dodávají mu zářivou červenou barvu. Zvyšuje Obranu, Inteligenci a Vnímání, vše o <%= attrs %>. Začarovaná almara: Nezávislý předmět.", "headArmoirePlagueDoctorHatText": "Klobouk Morového Lékaře", "headArmoirePlagueDoctorHatNotes": "Autentický klobouk nošený doktory, kteří zápasí s Morem Otálení! Zvyšuje Sílu o <%= str %>, Inteligenci o <%= int %> a Obranu o <%= con %>. Začarovaná almara: Set Morových Lékařů (Předmět 1 ze 3).", - "headArmoireBlackCatText": "Black Cat Hat", - "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", - "headArmoireOrangeCatText": "Orange Cat Hat", - "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireBlackCatText": "Klobouk černé kočky", + "headArmoireBlackCatNotes": "Tenhle klobouk... přede. A mrská ocasem. A dýchá? No, prostě ti na hlavě spí kočka. Zvyšuje Inteligenci a Vnímání o <%= attrs %> každé. Začarovaná almara: Nezávislý předmět.", + "headArmoireOrangeCatText": "Klobouk rezavé kočky", + "headArmoireOrangeCatNotes": "Tenhle klobouk... přede. A mrská ocasem. A dýchá? No, prostě ti na hlavě spí kočka. Zvyšuje Sílu a Obranu o <%= attrs %> každé. Začarovaná almara: Nezávislý předmět.", + "headArmoireBlueFloppyHatText": "Blue Floppy Hat", + "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireShepherdHeaddressText": "Shepherd Headdress", + "headArmoireShepherdHeaddressNotes": "Sometimes the gryphons that you herd like to chew on this headdress, but it makes you seem more intelligent nonetheless. Increases Intelligence by <%= int %>. Enchanted Armoire: Shepherd Set (Item 3 of 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "štít v ruce", "shieldBase0Text": "Bez štítu v ruce", "shieldBase0Notes": "Bez štítu nebo druhé zbraně.", @@ -567,18 +589,20 @@ "shieldSpecialSummer2015WarriorNotes": "Tento štít, vyroben z hlubinných kovů řemeslníky z Liknavosti, září jako písek a moře. Zvyšuje Obranu o <%= con %>. Limitovaná edice letní výbavy 2015.", "shieldSpecialSummer2015HealerText": "Štít z řemínků", "shieldSpecialSummer2015HealerNotes": "Použij tento štít k vyhnání krys z podpalubí. Zvyšuje Obranu o <%= con %>. Limitovaná edice letní výbavy 2015.", - "shieldSpecialFall2015RogueText": "Bat-tle Ax", - "shieldSpecialFall2015RogueNotes": "Fearsome To-Dos cower before the flapping of this ax. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "shieldSpecialFall2015WarriorText": "Birdseed Bag", - "shieldSpecialFall2015WarriorNotes": "It's true that you're supposed to be SCARING the crows, but there's nothing wrong with making friends! Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", - "shieldSpecialFall2015HealerText": "Stirring Stick", - "shieldSpecialFall2015HealerNotes": "This stick can stir anything without melting, dissolving, or bursting into flame! It can also be used to fiercely poke enemy tasks. Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", + "shieldSpecialFall2015RogueText": "Netopýří sekera", + "shieldSpecialFall2015RogueNotes": "Úkoly se zbaběle třesou před plácáním této sekery. Zvyšuje Sílu o <%= str %>. Limitovaná edice podzimní výbavy 2015.", + "shieldSpecialFall2015WarriorText": "Sáček na ptačí zob", + "shieldSpecialFall2015WarriorNotes": "Je pravda, že máš plašit vrány, ale není nic špatného na tom, když si člověk udělá pár nových přátel! Zvyšuje Obranu o <%= con %>. limitovaná edice podzimní výbavy 2015.", + "shieldSpecialFall2015HealerText": "Míchací klacek", + "shieldSpecialFall2015HealerNotes": "Tenhle klacek zamíchá vše aniž by se roztavil, rozpustil nebo vzplál! Také jím můžeš šťouchat do úkolů protivníků. Zvyšuje Obranu o <%= con %>. Limitovaná edice podzimní výbavy 2015.", "shieldMystery301405Text": "Štít z hodin", "shieldMystery301405Notes": "Čas je na tvé straně s tímhle štítem z hodin! Nepřináší žádný benefit. Předmět pro předplatitele červen 3015.", "shieldArmoireGladiatorShieldText": "Štít gladiátora", "shieldArmoireGladiatorShieldNotes": "Abys mohl být gladiátorem, musíš... ale kecy, prostě je flákni svým štítem. Zvyšuje Obranu o <%= con %> a Sílu o <%= str %>. Začarovaná almara: Set gladiátora (předmět 3 ze 3).", - "shieldArmoireMidnightShieldText": "Midnight Shield", - "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "shieldArmoireMidnightShieldText": "Půlnoční štít", + "shieldArmoireMidnightShieldNotes": "Tento štít je nejmocnější úderem půlnoci! Zvyšuje Obranu o <%= con %> a Sílu o <%= str %>. Začarovaná almara: Nezávislý předmět.", + "shieldArmoireRoyalCaneText": "Royal Cane", + "shieldArmoireRoyalCaneNotes": "Hooray for the ruler, worthy of song! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 2 of 3).", "back": "Příslušenství na záda", "backBase0Text": "Bez příslušenství na zádech", "backBase0Notes": "Bez příslušenství na zádech.", @@ -592,6 +616,8 @@ "backMystery201504Notes": "Bzzzz! Poctivě od úkolu k úkolu. Nepřináší žádný benefit. Předmět pro předplatitele Duben 2015.", "backMystery201507Text": "Čupr surfařské prkno", "backMystery201507Notes": "Zasurfuj si od Svědomitých doků a prožeň vlny v Zátoce Nekompletnosti! Nepřináší žádný benefit. Předmět pro předplatitele červenec 2015.", + "backMystery201510Text": "Ocas goblina", + "backMystery201510Notes": "Chápavý a mocný! Nepřináší žádný bonus. Výbava pro předplatitele říjen 2015.", "backSpecialWonderconRedText": "Mocná kápě", "backSpecialWonderconRedNotes": "Skví se silou a krásou. Speciální edice běžné zbroje. Nepřináší žádný benefit.", "backSpecialWonderconBlackText": "Záludná kápě", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "Toto mocné paroží mění barvu stejně jako listí. Nepřináší žádný benefit. Výbava pro předplatitele září 2014.", "headAccessoryMystery201502Text": "Křídla myšlenky", "headAccessoryMystery201502Notes": "Nech svou představivost létat! Nepřináší žádný benefit. Předmět pro předplatitele únor 2015.", + "headAccessoryMystery201510Text": "Rohy goblina", + "headAccessoryMystery201510Notes": "Tyto strašlivé rohy jsou trochu od slizu. Nepřináší žádný bonus. Výbava pro předplatitele říjen 2015.", "headAccessoryMystery301405Text": "Brýle na čele", "headAccessoryMystery301405Notes": "\"Brýle jsou na oči,\" říkali. \"Nikdo nechce nosit brýle na čele,\" říkali. Ha! Teď jsi jim to natřel! Nepřináší žádný benefit. Předmět pro předplatitele srpen 3015.", "eyewear": "Brýle", diff --git a/common/locales/cs/generic.json b/common/locales/cs/generic.json index d9d4726842..d546f112f6 100644 --- a/common/locales/cs/generic.json +++ b/common/locales/cs/generic.json @@ -28,7 +28,7 @@ "market": "Trh", "subscriberItem": "Záhadný předmět", "newSubscriberItem": "Nový záhadný předmět", - "subscriberItemText": "Předplatitelé obdrží každý měsíc záhadný předmět. Ten je zpravidla představen týden před koncem měsíce. Podívej se na stránku 'Mystery Item' na wiki, pokud chceš znát přesný termín.", + "subscriberItemText": "Předplatitelé obdrží každý měsíc záhadný předmět. Ten je zpravidla představen týden před koncem měsíce. Pro více informací mrkni na stránku 'Mystery Item' na wiki.", "all": "Vše", "none": "Žádné", "or": "Nebo", @@ -69,8 +69,9 @@ "habiticaDayPluralText": "Oslavil <%= number %> jmenin! Díky, že jsi tak fantastický uživatel.", "achievementDilatory": "Zachránce Liknavosti", "achievementDilatoryText": "Pomohl přemoci obávaného Drag'ona z Liknavosti v průběhu letní Šplouch akce 2014!", - "costumeContest": "Soutěž kostýmů 2014", - "costumeContestText": "Zúčastnil se Soutěže halloweenských kostýmů 2014. Obrázky ze soutěže najdeš na blog.habitica.com/tagged/cosplay!", + "costumeContest": "Costume Contestant", + "costumeContestText": "Participated in the Habitoween Costume Contest. See some of the entries on the Habitica blog!", + "costumeContestTextPlural": "Participated in <%= number %> Habitoween Costume Contests. See some of the entries on the Habitica blog!", "memberSince": "- Členem od", "lastLoggedIn": "- Naposledy přihlášen", "notPorted": "Tato funkce zatím nebyla převedena z původní stránky.", @@ -79,6 +80,7 @@ "errorUpCase": "CHYBA:", "newPassSent": "Nové heslo odesláno.", "serverUnreach": "Server je momentálně nedostupný.", + "requestError": "Jéje, chybka! Prosíme, načti stránku znovu, tvé poslední akce se nemusely uložit správně.", "seeConsole": "Pokud chyba přetrvává, prosíme, nahlaš jí přes Nápověda > Nahlásit chybu. Pokud znáš konzoli svého prohlížeče, prosíme, připoj k hlášení všechny chybové hlášky z ní,", "error": "Chyba", "menu": "Menu", @@ -91,7 +93,7 @@ "audioTheme_danielTheBard": "Bard Daniel", "audioTheme_wattsTheme": "Watts' téma", "audioTheme_gokulTheme": "Gokul téma", - "audioTheme_luneFoxTheme": "LuneFox téma", + "audioTheme_luneFoxTheme": "Téma od LuneFox", "askQuestion": "Položit otázku", "reportBug": "Nahlásit chybu", "contributeToHRPG": "Přispět Habitica", @@ -110,9 +112,9 @@ "December": "Prosinec", "dateFormat": "Formát data", "achievementStressbeast": "Zachránce Stoïkalmu", - "achievementStressbeastText": "Helped defeat the Abominable Stressbeast during the 2014 Winter Wonderland Event!", - "achievementBurnout": "Savior of the Flourishing Fields", - "achievementBurnoutText": "Helped defeat Burnout and restore the Exhaust Spirits during the 2015 Fall Festival Event!", + "achievementStressbeastText": "Pomož přemoci Zavrženíhodnou Strespříšeru při příležitosti Zimní říše divů 2014!", + "achievementBurnout": "Vychutnej si kvetoucí pole", + "achievementBurnoutText": "Pomož přemoci Vyhoření a obnovit Vyčerpané duchy během Podzimního festivalu 2015!", "checkOutProgress": "Koukejte, jaký pokrok se mi povedl v zemi Habitica!", "cardReceived": "Obdržel jsi přání!", "cardReceivedFrom": "<%= cardType %> od <%= userName %>", @@ -133,5 +135,17 @@ "thankyou2": "Posílám Ti tisíce díků.", "thankyou3": "Jsem velmi vděčný - děkuji!", "thankyouCardAchievementTitle": "Velmi vděčný", - "thankyouCardAchievementText": "Díky za vděčnost! Poslal nebo odeslal <%= cards %> děkovných přání." + "thankyouCardAchievementText": "Díky za vděčnost! Poslal nebo odeslal <%= cards %> děkovných přání.", + "streakAchievement": "You earned a streak achievement!", + "firstStreakAchievement": "21-Day Streak", + "streakAchievementCount": "<%= streaks %> 21-Day Streaks", + "twentyOneDays": "You've completed your Daily for 21 days in a row!", + "dontBreakStreak": "Amazing job. Don't break the streak!", + "dontStop": "Don't Stop Now!", + "levelUpShare": "I leveled up in Habitica by improving my real-life habits!", + "questUnlockShare": "I unlocked a new quest in Habitica!", + "hatchPetShare": "I hatched a new pet by completing my real-life tasks!", + "raisePetShare": "I raised a pet into a mount by completing my real-life tasks!", + "wonChallengeShare": "I won a challenge in Habitica!", + "achievementShare": "I earned a new achievement in Habitica!" } \ No newline at end of file diff --git a/common/locales/cs/groups.json b/common/locales/cs/groups.json index 1bca207c81..6754367eba 100644 --- a/common/locales/cs/groups.json +++ b/common/locales/cs/groups.json @@ -2,7 +2,8 @@ "tavern": "Krčma", "innCheckOut": "Odhlásit se z hostince", "innCheckIn": "Odpočívat v hostinci", - "innText": "Odpočíváš v Hostinci! Zatímco tu budeš, tvé Denní úkoly ti na konci dne nijak neublíží, ale vždy se resetují. Ale pozor: pokud jsi v boji s Bossem, ublíží ti nesplněné úkoly tvých přátel v družině, pokud také nejsou v Hostinci! Navíc, jakákoliv újma, kterou uštědříš Bossovi (nebo nasbírané předměty) se ti nepřipíšou dokud se z Hostince neodhlásíš.", + "innText": "Odpočíváš v Hostinci! Zatímco tu budeš, tvé Denní úkoly ti na konci dne nijak neublíží, ale vždy se resetují. Ale pozor: pokud jsi v boji s příšerou, ublíží ti nesplněné úkoly tvých přátel v družině, pokud také nejsou v Hostinci! Navíc, jakákoliv újma, kterou uštědříš příšeře (nebo nasbírané předměty) se ti nepřipíšou dokud se z Hostince neodhlásíš.", + "innTextBroken": "Odpočíváš v Hostinci, asi... Zatímco tu budeš, tvé Denní úkoly ti na konci dne nijak neublíží, ale vždy se resetují... Pokud jsi v boji s příšerou, ublíží ti nesplněné úkoly tvých přátel v družině... Pokud také nejsou v Hostinci... Navíc, jakákoliv újma, kterou uštědříš příšeře (nebo nasbírané předměty) se ti nepřipíšou dokud se z Hostince neodhlásíš... Jsem tak unavený...", "lfgPosts": "Hledá se skupina (družina)", "tutorial": "Průvodce", "glossary": "Slovník", @@ -12,7 +13,7 @@ "community": "Fórum", "dataTool": "Nástroj zobrazení dat", "resources": "Zdroje", - "askQuestionNewbiesGuild": "Ask a Question (Newbies Guild)", + "askQuestionNewbiesGuild": "Položit otázku (Cech nováčků - Newbies Guild)", "tavernTalk": "Rozhovory v krčmě", "tavernAlert1": "Poznámka: Pokud chceš nahlásit chybu, nedělej to tady, vývojáři to neuvidí. Prosím", "tavernAlert2": "použij místo toho GitHub", @@ -25,8 +26,8 @@ "updatedParty": "Nastavení družiny aktualizováno.", "noPartyText": "Nejsi členem družiny nebo načítání tvé družiny trvá déle než obvykle. Můžeš družinu založit a pozvat do ní přátele, nebo se stát členem už existující družiny, v tom případě je nech zadat následující Uživatelské ID a poté se sem vrať přijmout pozvánku:", "LFG": "K prezentování tvé družiny, nebo abys našel novou, ke které se přidáš, navštiv cech <%= linkStart %>Hledaná družina (Hledáme skupinu)<%= linkEnd %>.", - "wantExistingParty": "Chceš se připojit k existující družině? Navštiv cech <%= linkStart %>Party Wanted Guild<%= linkEnd %> a použij své Uživatelské ID:", - "joinExistingParty": "Přidej se k jiné družině", + "wantExistingParty": "Chceš se připojit k existující družině? Navštiv cech <%= linkStart %>Party Wanted Guild<%= linkEnd %> a uveřejni tam toto Uživatelské ID:", + "joinExistingParty": "Přidej se k družině někoho jiného", "create": "Vytvořit", "userId": "Uživatelské ID", "invite": "Pozvat", @@ -113,11 +114,11 @@ "leaderOnlyChallenges": "Pouze velitel družiny může vytvářet Výzvy", "sendGift": "Poslat dárek", "inviteFriends": "Pozvat přátele", - "inviteByEmail": "Pozvi přátele pomocí emailu", - "inviteByEmailExplanation": "Když se k Habitica přidá přítel z tvého e-mailu, bude automaticky pozván do tvé družiny!", + "inviteByEmail": "Pozvi přátele přes email", + "inviteByEmailExplanation": "Když se do země Habitica přidá přítel z tvého e-mailu, bude automaticky pozván do tvé družiny!", "inviteFriendsNow": "Pozvi přátele teď", "inviteFriendsLater": "Pozvi přátele později", - "inviteAlertInfo": "Pokud už máš přátele tady na Habitica, pozvi je svým Uživatelským ID zde.", + "inviteAlertInfo": "Pokud už máš přátele tady, v zemi Habitica, pozvi je svým Uživatelským ID zde.", "inviteExistUser": "Pozvi existující uživatele", "byColon": "Od:", "inviteNewUsers": "Pozvi nové uživatele", @@ -136,14 +137,15 @@ "startAParty": "Založ družinu", "addToParty": "Přidej někoho do své družiny", "likePost": "Klikni sem, pokud se ti tenhle příspěvek líbí!", - "partyExplanation1": "Pro odpovědnost hraj Habitica s přáteli!", + "partyExplanation1": "Vydej se do země Habitica s přáteli a nauč se zodpovědnosti!", "partyExplanation2": "Bojuj s příšerami a vytvářej Výzvy!", "partyExplanation3": "Pozvi přátele teď a získáš Svitek Výpravy!", "wantToStartParty": "Chceš založit družinu?", "exclusiveQuestScroll": "Pozvání přítele do své družiny ti zaručí získání jedinečného Svitku Výpravy ke společné bitvě s Baziliškem!", "nameYourParty": "Pojmenuj svou novou družinu!", "partyEmpty": "Jsi ve své družině sám. Pozvi přátele!", - "partyChatEmpty": "Tvůj družinový chat je prázdný! Napiš zprávu do okna nahoře a začni si povídat.", + "partyChatEmpty": "Chat tvé družiny je prázdný! Napiš zprávu do okna nahoře a začni si povídat.", "guildChatEmpty": "Chat této družiny je prázdný! Napiš zprávu do okna nahoře a začni si povídat.", - "possessiveParty": "Družina <%= name %>" + "possessiveParty": "Družina <%= name %>", + "requestAcceptGuidelines": "If you would like to post messages in the Tavern or any party or guild chat, please first read our <%= linkStart %>Community Guidelines<%= linkEnd %> and then click the button below to indicate that you accept them." } \ No newline at end of file diff --git a/common/locales/cs/limited.json b/common/locales/cs/limited.json index cd86069725..1d2b37217c 100644 --- a/common/locales/cs/limited.json +++ b/common/locales/cs/limited.json @@ -21,6 +21,7 @@ "valentineCardAchievementText": "Jůů, se svými přáteli musíš opravdu dobře vycházet! Odeslal jsi anebo jsi přijal <%= cards %> Valentýnských přání.", "polarBear": "Lední medvěd", "turkey": "Krocan", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "Lední medvídě", "jackolantern": "Jack-O-Lantern", "seasonalShop": "Sezónní obchod", @@ -28,8 +29,9 @@ "seasonalShopTitle": "<%= linkStart %>Sezónní mudrci<%= linkEnd %>", "seasonalShopClosedText": "Sezónní obchod je momentálně zavřený!! Nevím, kde se momentálně Sezonní Kouzelnice nachází, ale vsadím se, že bude zpět na další Velkolepé Gala!", "seasonalShopText": "Vítej v Sezonním obchodě! Zrovna tu máme jarní Sezonní edici zboží. Všechno zde je možné zakoupit v průběhu Jarního flámu každý rok, ale máme otevřeno pouze do 30. dubna, tak si nakup teď nebo budeš muset čekat další rok!", - "seasonalShopSummerText": "Vítej v Sezonním obchodě! Zrovna tu máme jarní Sezonní edici zboží. Všechno zde je možné zakoupit v průběhu Letního šplouchání každý rok, ale máme otevřeno pouze do 31. července, tak si nakup teď, nebo budeš muset čekat další rok!", - "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31, so be sure to stock up now, or you'll have to wait a year to buy these items again!", + "seasonalShopSummerText": "Vítej v Sezonním obchodě! Zrovna tu máme letní Sezonní edici zboží. Všechno zde je možné zakoupit v průběhu Letního šplouchání každý rok, ale máme otevřeno pouze do 31. července, tak si nakup teď, nebo budeš muset čekat další rok!", + "seasonalShopFallText": "Vítej v Sezonním obchodě! Zrovna tu máme podzimní Sezonní edici zboží. Všechno zde je možné zakoupit v průběhu Podzimního estivalu každý rok, ale máme otevřeno pouze do 31. října, tak si nakup teď, nebo budeš muset čekat další rok!", + "seasonalShopFallTextBroken": "Eh... vítej v Sezonním obchodě... Zrovna tu máme podzimní Sezonní edici zboží nebo tak... Všechno zde je možné zakoupit v průběhu Podzimního estivalu každý rok, ale máme otevřeno pouze do 31. října... asi si nakup teď, nebo budeš muset čekat... a čekat... a čekat *ugh*", "seasonalShopRebirth": "Pokud jsi použil Kouli znovuzrození, můžeš si znovu zakoupit toto vybavení ve sloupci s odměnami, jakmile odemkneš Obchod. Ze začátku si budeš moci koupit pouze vybavení pro tvou momentální třídu (výchozí je Válečník), ale neboj, další vybavení pro další třídy bude přístupné jakmile si tuto třídu vybereš.", "candycaneSet": "Cukrátková hůl (mág)", "skiSet": "Lyžovrah (zloděj)", @@ -56,9 +58,9 @@ "emeraldMermageSet": "Smaragdový mořský mág (Mág)", "reefSeahealerSet": "Útesový mořský léčitel (Léčitel)", "roguishPirateSet": "Ničemný pirát (Zloděj)", - "monsterOfScienceSet": "Monster of Science (Warrior)", - "witchyWizardSet": "Witchy Wizard (Mage)", - "mummyMedicSet": "Mummy Medic (Healer)", - "vampireSmiterSet": "Vampire Smiter (Rogue)", + "monsterOfScienceSet": "Monstrum vědy (Válečník)", + "witchyWizardSet": "Čarodějný čaroděj (Mág)", + "mummyMedicSet": "Mumie medika (Léčitel)", + "vampireSmiterSet": "Lovec upírů (Zloděj)", "fallEventAvailability": "Dostupné do 31. října" } \ No newline at end of file diff --git a/common/locales/cs/messages.json b/common/locales/cs/messages.json index a5b463166b..b4b938d594 100644 --- a/common/locales/cs/messages.json +++ b/common/locales/cs/messages.json @@ -20,7 +20,7 @@ "messageHatched": "Tvé vejce se vylíhlo! Navštiv svou stáj, abys svého mazlíčka mohl vybavit.", "messageNotEnoughGold": "Nedostatek zlaťáků", "messageTwoHandled": "<%= gearText %> je dvouruční.", - "messageDropFood": "Copak to je? A hele, <%= dropArticle %><%= dropText %>! <%= dropNotes %>", + "messageDropFood": "Copak to je? A hele, <%= dropText %>! <%= dropNotes %>", "messageDropEgg": "Našel jsi vejce, ze kterého se vylíhne <%= dropText %> ! <%= dropNotes %>", "messageDropPotion": "Našel jsi <%= dropText %> líhnoucí lektvar! <%= dropNotes %>", "messageDropQuest": "Našel jsi Výpravu!", @@ -28,7 +28,28 @@ "messageFoundQuest": "Našel jsi výpravu \"<%= questText %>\"!", "messageAlreadyPurchasedGear": "Tohle vybavení jsi si koupil už v minulosti, ale momentálně ho nevlastníš. Můžeš si ho koupit znovu ve sloupečku odměnu na stránce s úkoly.", "messageAlreadyOwnGear": "Tento předmět už máš. Vybav se jím na stránce s Vybavením.", - "armoireEquipment": "<%= image %> Ve zbrojnici jsi našel kus vzácného vybavení ve Zbrojnici: <%= dropText %>! Skvělé!", - "armoireFood": "<%= image %> Prohledáváš zbrojnici a nacházíš <%= dropArticle %><%= dropText %>. Co to tu dělá?", - "armoireExp": "Zápasíš se Zbrojnicí a získáváš zkušenost. To jsi jí to nandal!" + "armoireEquipment": "<%= image %> V almaře jsi našel kus vzácného vybavení ve Zbrojnici: <%= dropText %>! Skvělé!", + "armoireFood": "<%= image %> Prohledáváš almaru a nacházíš <%= dropText %>. Co to tu dělá?", + "armoireExp": "Zápasíš s Almarou a získáváš zkušenost. To jsi jí to nandal!", + "messageInsufficientGems": "Nedostatek drahokamů!", + "messageAuthPasswordMustMatch": ":password a :confirmPassword se neshodují", + "messageAuthCredentialsRequired": "Je vyžadováno :username, :email, :password, :confirmPassword ", + "messageAuthUsernameTaken": "Toto jméno již existuje.", + "messageAuthEmailTaken": "Email se již používá", + "messageAuthNoUserFound": "Uživatel nenalezen.", + "messageAuthMustBeLoggedIn": "Musíš být přihlášen.", + "messageAuthMustIncludeTokens": "Ve svém požadavku musíš uvést token a uid (uživatelské id)", + "messageGroupNotFound": "Družina nenalezena, nebo do ní nemáš přístup.", + "messageGroupAlreadyInParty": "Již jsi ve skupině, zkus znovu načíst stránku.", + "messageGroupOnlyLeaderCanUpdate": "Pouze velitel družiny může jí může upravovat!", + "messageGroupRequiresInvite": "Nemůžeš se přidat do družiny, do které nejsi pozván.", + "messageGroupCannotRemoveSelf": "Nemůžeš se sám odebrat!", + "messageGroupChatBlankMessage": "You cannot send a blank message", + "messageGroupChatLikeOwnMessage": "Can't like your own message. Don't be that person.", + "messageGroupChatFlagOwnMessage": "Can't report your own message.", + "messageGroupChatFlagAlreadyReported": "You have already reported this message", + "messageGroupChatNotFound": "Message not found!", + "messageGroupChatAdminClearFlagCount": "Only an admin can clear the flag count!", + "messageUserOperationProtected": "cesta `<%= operation %>` nebyla uložena, protože je chráněná.", + "messageUserOperationNotFound": "<%= operation %> operace nebyla nalezena" } \ No newline at end of file diff --git a/common/locales/cs/noscript.json b/common/locales/cs/noscript.json new file mode 100644 index 0000000000..6057268ef2 --- /dev/null +++ b/common/locales/cs/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Alas! Your browser doesn't have JavaScript enabled", + "jsDisabledHeadingFull": "Alas! Your browser doesn't have JavaScript enabled and without it, Habitica can't work properly", + "jsDisabledText": "Habitica can't properly display the site without it!", + "jsDisabledLink": "Please enable JavaScript to continue!" +} \ No newline at end of file diff --git a/common/locales/cs/npc.json b/common/locales/cs/npc.json index df81055602..1747309ae0 100644 --- a/common/locales/cs/npc.json +++ b/common/locales/cs/npc.json @@ -6,22 +6,26 @@ "mattBochText1": "Vítej ve Stáji! Jsem Matt, Pán šelem. Až dosáhneš úrovně 3, budeš moci pomocí lektvarů líhnout vajíčka. Když se ti na Trhu vylíhne mazlíček, objeví se tady! Klikni na něj a objeví se u tvé postavy. Krm ho jídlem, které budeš nacházet, a on pak vyroste a budeš se na něm moci projet.", "daniel": "Daniel", "danielText": "Vítej v krčmě. Chvilku se zdrž a poznej místní. Pokud si potřebuješ odpočinout (jedeš na dovolenou? náhlá nemoc?), nabízím ti pokoj v Hostinci. Zatímco tu budeš přihlášen, tvé denní úkoly ti na konci dne neublíží, ale klidně si je můžeš odškrtnout .", - "danielText2": "Dej pozor: Pokud se účastníš boje s bossem, ublíží ti i za nesplněné denní úkoly ostatních členů tvé družiny! Navíc, jakákoliv újma, kterou uštědříš Bossovi (nebo nasbírané předměty) se ti nepřipíšou dokud se z Hostince neodhlásíš.", + "danielText2": "Dej pozor: Pokud se účastníš boje s příšerou, ublíží ti i za nesplněné denní úkoly ostatních členů tvé družiny! Navíc, jakákoliv újma, kterou uštědříš příšeře (nebo nasbírané předměty) se ti nepřipíšou dokud se z Hostince neodhlásíš.", + "danielTextBroken": "Tak asi vítej v krčmě... Pokud si potřebuješ odpočinout, nabízím ti pokoj v Hostinci... Zatímco tu budeš přihlášen, tvé denní úkoly ti na konci dne neublíží, ale klidně si je můžeš odškrtnout... Jestli na to máš energii", + "danielText2Broken": "Eh... Jestli se účastníš boje s příšerou, ublíží ti i za nesplněné denní úkoly ostatních členů tvé družiny... Navíc, jakákoliv újma, kterou uštědříš příšeře (nebo nasbírané předměty) se ti nepřipíšou dokud se z Hostince neodhlásíš...", "alexander": "Obchodník Alexander", "welcomeMarket": "Vítej na trhu! Kup si vzácná vejce a lektvary! Prodej, co máš navíc! Objednej si užitečné služby! Přijď se podívat, co všechno nabízíme.", - "sellForGold": "Prodej <%= item %> za <%= gold %> zlaťáků", - "sellEggForGold": "Prodej vejce <%= itemType %>a za <%= gold %> zlaťáky.", - "sellPotionForGold": "Prodej <%= itemType %> lektvar za <%= gold %> zlaťáky.", + "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?", + "sellForGold": "Sell it for <%= gold %> Gold", "buyGems": "Kup drahokamy", "justin": "Justin", "ian": "Ian", "ianText": "Vítej v obchodě s Výpravami! Můžeš tu s přáteli využít svitky s výpravami k bojům s monstry. V klidu si prohlédni všechny Výpravy, které tu prodáváme!", + "ianBrokenText": "Vítej v obchodě s Výpravami... Můžeš tu s přáteli využít svitky s výpravami k bojům s monstry... V klidu si prohlédni všechny Výpravy, které tu prodáváme...", "USD": "dolar/ů", "newStuff": "Nové věci", "cool": "Připomeň mi to později", "dismissAlert": "Zavřít toto oznámení", "donateText1": "Přidá 20 drahokamů na tvůj účet. Drahokamy se používají pro nákup speciálních herních předmětů, jako například košil a vlasů.", - "donateText2": "Pomož podpořit Habitica", + "donateText2": "Pomož podpořit program Habitica", "donateText3": "Habitica je open source projekt, který závisí na podpoře našich uživatelů. Peníze, které utratíš za drahokamy, nám pomáhají udržet v provozu servery, mít pár zaměstnanců, vyvíjet nové funkce a motivovat naše dobrovolné programátory. Děkujeme za tvojí štědrost!", "donationDesc": "20 drahokamů, Příspěvek vývojářům", "payWithCard": "Zaplatit kartou", @@ -38,7 +42,7 @@ "spellsText": "Nyní můžeš odemknout kouzla specifická pro toto povolání. První uvidíš po dosažení úrovně 11. Tvá mana se dobíjí o 10 bodů denně, plus 1 bod při splnění", "toDo": "úkolu", "moreClass": "Pro více informací o systému povolání, přejdi na", - "tourWelcome": "Vítej v Habitice! Tohle tvůj Úkolníček. Odškrtni si úkol abys mohl pokračovat!", + "tourWelcome": "Vítej v zemi Habitica! Tohle tvůj Úkolníček. Odškrtni si úkol abys mohl pokračovat!", "tourExp": "Skvělá práce! Odškrtnutí úkolu ti přidává Zkušenost a Zlaťáky!", "tourDailies": "Tohle je sloupeček pro Denní úkoly. Abys mohl pokračovat, přidej sem úkol, který bys měl plnit každý den! Příklady Denních úkolů: Ustlat postel, Vypláchnout pusu, Zkontrolovat pracovní email", "tourCron": "Úžasné! Tvé Denní úkoly se budou resetovat každý den.", @@ -52,10 +56,10 @@ "tourStatsPage": "Tohle je stránka s tvými statistikami! Získej ocenění za splnění vyjmenovaných úkolů.", "tourTavernPage": "Vítej v Krčmě, chatu pro všechny věkové kategorie! V případě nemoci, nebo třeba dovolené, se můžeš ochránit proti postihu za nesplněné Denní úkoly kliknutím na \"Odpočívat v hostinci\". Přijď nás pozdravit!", "tourPartyPage": "Tvá družina ti pomůže dodržovat cíle. Pozvi své přátele a odemkni Svitek výpravy!", - "tourGuildsPage": "Cechy jsou chatovací skupiny s podobnými zájmy, které jsou tvořené hráči pro hráče. Můžeš si vyhledat témata, která tě zajímají! Doporučujeme Newbies Guild neboli Cech pro nováčky, kde se může každý ptát na věci o Habitice.", + "tourGuildsPage": "Cechy jsou chatovací skupiny s podobnými zájmy, které jsou tvořené hráči pro hráče. Můžeš si vyhledat témata, která tě zajímají! Doporučujeme Newbies Guild neboli Cech pro nováčky, kde se může každý ptát na věci o zemi Habitica.", "tourChallengesPage": "Výzvy jsou seznamy tématických úkolů vytvořené uživateli! Přidání se k výzvě ti přidá úkoly do tvých listů. Soutěž proti ostatním uživatelům a vyhraj cenné drahokamy!", "tourMarketPage": "Když dosáhneš úrovně 3, začneš po splnění úkolů náhodně nacházet vejce a lektvary. Budou se objevovat tady - použij je k vylíhnutí mazlíčků! Můžeš si je také koupi na Trhu.", - "tourHallPage": "Vítej v Síni hrdinů, kde jsou oslavování open-source přispěvatelé. Vysloužili si Drahokamy, exkluzivní vybavení a prestižní tituly ať už za kódování, obrázky, hudbu, psaní, nebo za pomoc. Také můžeš Habitice přispět!", + "tourHallPage": "Vítej v Síni hrdinů, kde jsou oslavování open-source přispěvatelé. Vysloužili si Drahokamy, exkluzivní vybavení a prestižní tituly ať už za kódování, obrázky, hudbu, psaní, nebo za pomoc. Také můžeš programu Habitica přispět!", "tourPetsPage": "Tohle je Stáj! Po 3. úrovni si tu budeš moci líhnout Mazlíčky za pomocí vajíček a líhnoucích lektvarů. Když si vylíhneš Mazlíčka na Trhu, objeví se tady! Klikni na Mazlíčka a přidáš si ho ke svému avataru. Krm ho jídlem, které budeš nacházet po 3. úrovni, a oni vyrostou v silná zvířata, na kterých se budeš moci projet.", "tourMountsPage": "Jakmile dostatečně nakrmíš mazlíčka, objeví se tady a budeš se na něm moci projet. (Mazlíčci, zvířata k osedlání a jídlo jsou k dispozici po 3. úrovni.) Klikni na zvíře, které si chceš osedlat!", "tourEquipmentPage": "Tady se ti ukládá vybavení! Tvá Bojová zbroj ovlivňuje tvé statistiky. Pokud chceš, aby se ti zobrazovalo jiné vybavení na tvém avataru aniž by se ti statistiky nějak ovlivnily, klikni na \"Povolit kostým.\"", @@ -71,14 +75,14 @@ "tourHabitsProceed": "To dává smysl!", "tourRewardsBrief": "Seznam odměn
  • Tady můžeš utratit své těžce vydělané Zlaťáky!
  • Nakup si vybavení pro svého avatara, nebo si můžeš přidat své vlastní odměny.
", "tourRewardsProceed": "To je vše!", - "welcomeToHabit": "Welcome to Habitica!", - "welcome1": "Create a basic avatar.", - "welcome1notes": "This avatar will represent you as you progress.", - "welcome2": "Set up your tasks.", - "welcome2notes": "How well you do on your real-life tasks will control how well you do in the game!", - "welcome3": "Progress in life and the game!", - "welcome3notes": "As you improve your life, your avatar will level up and unlock pets, quests, equipment, and more!", + "welcomeToHabit": "Vítej v zemi Habitica!", + "welcome1": "Vytvoř si základní postavu.", + "welcome1notes": "Tato postava tě bude reprezentovat na tvé cestě.", + "welcome2": "Zadej úkoly.", + "welcome2notes": "Jak dobře si povedeš se svými úkoly se odrazí na tvém postupu ve hře!", + "welcome3": "Dělej pokroky a vyvíjej se v životě i ve hře!", + "welcome3notes": "S každým krokem vpřed bude tvá postava dosahovat vyšších a vyšších úrovní, odemkne mazlíčky, výpravy, vybavení a mnohem víc!", "welcome4": "Vyvaruj se zlozvyků, které ti ubírají Zdraví (HP), nebo tvůj avatar zemře!", "welcome5": "Nyní si upravíš svůj avatar a zadáš úkoly...", - "imReady": "Enter Habitica" + "imReady": "Vstup do země Habitica" } \ No newline at end of file diff --git a/common/locales/cs/pets.json b/common/locales/cs/pets.json index b71bb7058a..f70032750e 100644 --- a/common/locales/cs/pets.json +++ b/common/locales/cs/pets.json @@ -1,13 +1,13 @@ { "pets": "Mazlíčci", "petsFound": "nalezených mazlíčků", - "magicPets": "Magic Potion Pets", + "magicPets": "Mazlíčci z magického líhnoucího lektvaru", "rarePets": "Vzácní mazlíčci", "questPets": "Mazlíčci z výprav", "mounts": "Stáj", "mountsTamed": "zkrocených zvířat", "questMounts": "Zkrocená zvířata z výprav", - "magicMounts": "Magic Potion Mounts", + "magicMounts": "Zvířata z magického líhnoucího lektvaru", "rareMounts": "Vzácná zkrocená zvířata", "etherealLion": "Éterický lev", "veteranWolf": "Vlk veterán", @@ -18,7 +18,7 @@ "mammoth": "Huňatý mamut", "orca": "Kosatka", "royalPurpleGryphon": "Vznešený fialový gryf", - "phoenix": "Phoenix", + "phoenix": "Fénix", "rarePetPop1": "Klikni na zlatou packu pro více informací o tom, jak získat toto vzácné zvíře za přispívání programu Habitica!", "rarePetPop2": "Jak získat toto zvíře!", "potion": "<%= potionType %> lektvar", @@ -27,15 +27,15 @@ "eggSingular": "vejce", "noEggs": "Nemáš žádná vejce.", "hatchingPotions": "Líhnoucí lektvary", - "magicHatchingPotions": "Magic Hatching Potions", + "magicHatchingPotions": "Magické líhnoucí lektvary", "hatchingPotion": "líhnoucí lektvar", "noHatchingPotions": "Nemáš žádné líhnoucí lektvary.", "inventoryText": "Po kliknutí na vejce se zeleně zvýrazní použitelné lektvary. Poté klikni na jeden z nich pro vylíhnutí mazlíčka. Pokud nejsou žádné lektvary zvýrazněny, klikni na vejce znovu pro zrušení jeho výběru a místo toho klikni nejprve na lektvar, aby se označila použitelná vejce. Také můžeš nechtěné nalezené předměty prodat obchodníku Alexanderovi.", "foodText": "jídlo", "food": "Jídlo a sedla", "noFood": "Nemáš žádné jídlo ani žádná sedla.", - "dropsExplanation": "Get these items faster with Gems if you don't want to wait for them to drop when completing a task. Learn more about the drop system.", - "premiumPotionNoDropExplanation": "Magic Hatching Potions cannot be used on eggs received from Quests. The only way to get Magic Hatching Potions is by buying them below, not from random drops.", + "dropsExplanation": "Tyto předměty můžeš získat rychleji, když si je koupíš za Drahokamy, a nemusíš tak čekat, až je najdeš po splnění úkolu. Zjisti více o nalézání předmětů.", + "premiumPotionNoDropExplanation": "Magické líhnoucí lektvary nemohou být použity na vejce z Výprav. Můžeš si je pouze koupit, nenajdeš je.", "beastMasterProgress": "Pokrok Pána šelem", "stableBeastMasterProgress": "Pokrok Pána šelem: nalezl <%= number %> mazlíčků", "beastAchievement": "Získal jsi ocenění \"Pán šelem\" za získání všech mazlíčků!", @@ -58,8 +58,16 @@ "firstDrop": "Odemknuto nalézání předmětů! Od teď máš malou šanci nalézt předmět při dokončení úkolů, včetně vajec, lektvarů a jídla! Právě nalezeno vejce zvířátka <%= eggText %>! <%= eggNotes %>", "useGems": "Pokud ti padlo oko na zvířátko a nemůžeš se dočkat až ti padne, použij Drahokamy v Inventář > Trh a kup si ho!", "hatchAPot": "<%= potion %> <%= egg %>, jsi si jistý?", + "hatchedPet": "You hatched a <%= potion %> <%= egg %>!", + "displayNow": "Display Now", + "displayLater": "Display Later", + "earnedCompanion": "With all your productivity, you've earned a new companion. Feed it to make it grow!", "feedPet": "Myslíš, že <%= name %> si pochutná na něčem takovém jako je <%= article %><%= text %> ?", "useSaddle": "Koho osedláme? Bude to <%= pet %>?", + "raisedPet": "You grew a <%= pet %>!", + "earnedSteed": "By completing your tasks, you've earned a faithful steed!", + "rideNow": "Ride Now", + "rideLater": "Ride Later", "petName": "<%= potion %> <%= egg %>", "mountName": "<%= potion %> <%= mount %>", "petKeyName": "Klíč ke kotcům", diff --git a/common/locales/cs/quests.json b/common/locales/cs/quests.json index 04dab74ee8..1b82fa4068 100644 --- a/common/locales/cs/quests.json +++ b/common/locales/cs/quests.json @@ -13,6 +13,7 @@ "youReceived": "Získal jsi", "dropQuestCongrats": "Blahopřejeme ti k tomuto svitku s Výpravou! Můžeš pozvat svou družinu a začít s ní hned, nebo se k ní můžeš kdykoliv vrátit v Inventář > Výpravy.", "questSend": "Kliknutí na \"Pozvat\" odešle pozvánku členům Družiny. Poté, co všichni členové přijali nebo odmítli, může výprava začít. Stav si můžeš zobrazit v Možnosti > Komunita > Družina.", + "questSendBroken": "Kliknutí na \"Pozvat\" odešle pozvánku členům Družiny... Poté, co všichni členové přijali nebo odmítli, může výprava začít... Stav si můžeš zobrazit v Možnosti > Komunita > Družina...", "inviteParty": "Přizvi družinu k Výpravě", "questInvitation": "Pozvánka na výpravu:", "questInvitationTitle": "Pozvánka na Výpravu", @@ -24,22 +25,28 @@ "rejected": "Odmítnuto", "pending": "Nerozhodnuto", "questStart": "Výprava začíná jakmile všichni členové výzvu přijmou či odmítnou. Pouze ti, kteří klikli na \"Přijmout\" se mohou výpravy zúčastnit a obdrží ceny. Pokud to některým uživatelům trvá příliš dlouho (nejsou aktivní?), majitel výpravy může začít bez nich kliknutím na \"Začít\". Majitel výpravy začal také může výpravu přerušit a získat tak zpět svitek výpravy kliknutím na \"Zrušit\".", + "questStartBroken": "Výprava začíná jakmile všichni členové výzvu přijmou či odmítnou... Pouze ti, kteří klikli na \"Přijmout\" se mohou výpravy zúčastnit a obdrží ceny... Pokud to některým uživatelům trvá příliš dlouho (nejsou aktivní?), majitel výpravy může začít bez nich kliknutím na \"Začít\"... Majitel výpravy začal také může výpravu přerušit a získat tak zpět svitek výpravy kliknutím na \"Zrušit\"...", "begin": "Začít", - "bossHP": "Zdraví bosse", - "bossStrength": "Síla bosse", - "rage": "Rage", + "bossHP": "Zdraví příšery", + "bossStrength": "Síla příšery", + "rage": "Zuřivost", "collect": "Sbírat", "collected": "Získáno", "collectionItems": "<%= number %> <%= items %>", "itemsToCollect": "Předměty ke sbírání", - "bossDmg1": "Každý splnění Denní úkol, úkol z Úkolníčku a každý pozitivní zvyk zraní Bosse. Zraň ho víc červenějšími úkoly nebo Brutální ranou nebo Vzplanutím ohňů. Boss zraní každého účastníka výpravy za každý nesplněný Denní úkol (újma je násobena jeho Silou) navíc k normálnímu zranění, takže udržuj skupinu zdravou plněním úkolů. Veškerá zranění bossovi i vám se přičítají na kronu (na konci dne).", - "bossDmg2": "Jen ti, kteří přijmou pozvání, budou bojovat proti bossovi a rozdělí si odměnu za výpravu.", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1": "Každý splnění Denní úkol, úkol z Úkolníčku a každý pozitivní zvyk zraní Bosse. Zraň ho víc červenějšími úkoly nebo Brutální ranou nebo Vzplanutím ohňů. Boss zraní každého účastníka výpravy za každý nesplněný Denní úkol (újma je násobena jeho Silou) navíc k normálnímu zranění, takže udržuj skupinu zdravou plněním úkolů. Veškerá zranění příšeře i vám se přičítají na kronu (na konci dne).", + "bossDmg2": "Jen ti, kteří přijmou pozvání, budou bojovat proti příšeře a rozdělí si odměnu za výpravu.", + "bossDmg1Broken": "Každý splnění Denní úkol, úkol z Úkolníčku a každý pozitivní zvyk zraní příšeru... Zraň jí víc červenějšími úkoly nebo Brutální ranou nebo Vzplanutím ohňů... Příšera zraní každého účastníka výpravy za každý nesplněný Denní úkol (újma je násobena jeho Silou) navíc k normálnímu zranění, takže udržuj skupinu zdravou plněním úkolů. Veškerá zranění příšeře i vám se přičítají na kronu (na konci dne).", + "bossDmg2Broken": "Jen ti, kteří přijmou pozvání, budou bojovat proti příšeře a rozdělí si odměnu za výpravu...", + "tavernBossInfo": "Splň denní úkoly a úkoly v Úkolníčku a zraň tak Světovou příšeru! Nesplněné denní úkoly naplní lištu Výpadu. Když se tato lišta naplní, příšera zaútočí na nějakou nehráčskou postavu. Světová příšera nikdy nezraní jednotlivé hráče. Pouze aktivní hráči, kteří neodpočívají v Hostinci se mohou podílet na zranění příšery.", + "tavernBossInfoBroken": "Splň denní úkoly a úkoly v Úkolníčku a zraň tak Světovou příšeru... Nesplněné denní úkoly naplní lištu Výpadu... Když se tato lišta naplní, příšera zaútočí na nějakou nehráčskou postavu... Světová příšera nikdy nezraní jednotlivé hráče... Pouze aktivní hráči, kteří neodpočívají v Hostinci se mohou podílet na zranění příšery...", "bossColl1": "Pro získání předmětů plň své pozitivní úkoly. Předměty z výpravy budeš nacházet stejně jako normální předměty, uvidíš je však až další den, kdy se vše, co jste našli, shromáždí a přidá na hromadu.", "bossColl2": "Jen ti, kteří přijmou pozvání, mohou sbírat předměty a rozdělit si odměnu za výpravu.", + "bossColl1Broken": "Pro získání předmětů plň své pozitivní úkoly... Předměty z výpravy budeš nacházet stejně jako normální předměty, uvidíš je však až další den, kdy se vše, co jste našli, shromáždí a přidá na hromadu...", + "bossColl2Broken": "Jen ti, kteří přijmou pozvání, mohou sbírat předměty a rozdělit si odměnu za výpravu...", "abort": "Ukončit", "leaveQuest": "Opustit Výpravu", - "sureLeave": "Jsi si jistý, že chceš opustit aktivní výpravu? Ztratíš všechen svůj pokrok v této výpravě.", + "sureLeave": "Jsi si jistý, že chceš opustit aktivní výpravu? Ztratíš v ní všechen svůj pokrok.", "questOwner": "Majitel výpravy", "questOwnerNotInPendingQuest": "Majitel výpravy výpravu opustil a nemůže ji již začít. Doporučujeme ji zrušit. Majitel výpravy získá zpět svitek.", "questOwnerNotInRunningQuest": "Majitel výpravy výpravu opustil. Můžete výpravu ukončit, pokud chcete. Můžete však pokračovat dále a všichni zbývající účastnici si po jejím skončení rozdělí kořist.", @@ -63,10 +70,13 @@ "sureAbort": "Jsi si jistý, že chceš ukončit výpravu? Bude ukončena pro všechny v družině a všechen pokrok bude ztracen. Svitek bude navrácen svému majiteli.", "doubleSureAbort": "Jsi si určitě jistý? Ujisti se, že tě pak ostatní nebudou do smrti nenávidět!", "questWarning": "Pokud se před začátkem výpravy do družiny připojí noví hráči, dostanou také pozvánku. Jakmile však výprava začne, žádní noví členové družiny se nemohou k výpravě připojit.", + "questWarningBroken": "Pokud se k družině přidají noví hráči před tím, než začne výprava, tito hráči také obdrží pozvánku... Avšak jakmile výprava začne, žádní noví hráči se k ní přidat nemohou...", "bossRageTitle": "Zuřivost", - "bossRageDescription": "Když se tato lišta naplní, boss předvede speciální útok!", + "bossRageDescription": "Když se tato lišta naplní, příšera předvede speciální útok!", "startAQuest": "VYDEJ SE NA VÝPRAVU", - "startQuest": "Započít Výpravu", + "startQuest": "Začít Výpravu", "whichQuestStart": "Na kterou výpravu se chceš vydat?", - "getMoreQuests": "Získej více výprav" + "getMoreQuests": "Získej více výprav", + "unlockedAQuest": "You unlocked a quest!", + "leveledUpReceivedQuest": "You leveled up to Level <%= level %> and received a quest scroll!" } \ No newline at end of file diff --git a/common/locales/cs/questscontent.json b/common/locales/cs/questscontent.json index feeb4f2669..d9c3126204 100644 --- a/common/locales/cs/questscontent.json +++ b/common/locales/cs/questscontent.json @@ -154,7 +154,7 @@ "questPenguinDropPenguinEgg": "Tučňák (vejce)", "questPenguinUnlockText": "Odemyká vejce tučňáka na Trhu", "questStressbeastText": "Zavrženíhodná Strespříšera ze Stoïkalmských stepí", - "questStressbeastNotes": "Splň své Denní úkoly a úkoly z Úkolníčku aby jsi ublížil světovému bossovi! Nedokončené Denní úkoly naplní lištu stresového útoku. Když je lišta stresového útoku plná, světový boss zaútočí na nějakou herní postavu. Světový boss nikdy neublíží jednotlivým hráčům nebo účtům. Pouze aktivní účty, které zrovna neodpočívají v Krčmě, mohou být započítány do celkové újmy.

~*~

První věc, kterou slyšíme, jsou kroky, pomalejší a více hřmící než dusot kopyt splašeného stáda. jeden za druhým, Habiťané vykukují ze dveří a jsou úplně oněmělí. .

Už jsme pár Stresoblud viděli, samozřejmě - malá zákeřná stvoření, jež útočí v krušných časech. Ale tohle? Toto se tyčí nad budovy, s tlapami, které by lehce rozdrtily draka. Led se houpá na rousech smrdící srsti a s každým řevem trhá mrazivý útok střechy z domů. Monstrum takového stupně je známo pouze z legend. .

\"Mějte se na pozoru, Habiťané!\" křičí SabreCat. \"Zabarikádujte se doma - toto je Zavrženíhodná Stresobluda!\" .

\"Ta věc musí být z celých století stresu!\" říká Kiwibot a zamyká dveře ke Krčmě a zavírá okenice..

\"Stoïkalmské stepi\" říká Lemoness se zachmuřenou tváří. \"Celou tu dobu jsme mysleli, že jsou klidné a bez problémů, ale nejspíš svůj stres dobře schovávaly. Po generace rostl do této podoby a nyní utekl a napadl je - a nás!\"

Je pouze jediný způsob jak Stresobludu odehnat, Zavrženíhodnou nebo ne, a to je zaútočit na ní dokončenými Denními úkoly a úkoly z Úkolníčku! Spojme se a společně poražme tohoto proklatého nepřítele - ale pozor, ať neflákáte úkoly, nebo ho naše nesplněné úkoly naštvou a zaútočí na nás znovu...", + "questStressbeastNotes": "Splň své Denní úkoly a úkoly z Úkolníčku aby jsi ublížil světovému příšeře! Nedokončené Denní úkoly naplní lištu stresového útoku. Když je lišta stresového útoku plná, světový příšera zaútočí na nějakou herní postavu. Světový příšera nikdy neublíží jednotlivým hráčům nebo účtům. Pouze aktivní účty, které zrovna neodpočívají v Krčmě, mohou být započítány do celkové újmy.

~*~

První věc, kterou slyšíme, jsou kroky, pomalejší a více hřmící než dusot kopyt splašeného stáda. jeden za druhým, Habiťané vykukují ze dveří a jsou úplně oněmělí. .

Už jsme pár Stresoblud viděli, samozřejmě - malá zákeřná stvoření, jež útočí v krušných časech. Ale tohle? Toto se tyčí nad budovy, s tlapami, které by lehce rozdrtily draka. Led se houpá na rousech smrdící srsti a s každým řevem trhá mrazivý útok střechy z domů. Monstrum takového stupně je známo pouze z legend. .

\"Mějte se na pozoru, Habiťané!\" křičí SabreCat. \"Zabarikádujte se doma - toto je Zavrženíhodná Stresobluda!\" .

\"Ta věc musí být z celých století stresu!\" říká Kiwibot a zamyká dveře ke Krčmě a zavírá okenice..

\"Stoïkalmské stepi\" říká Lemoness se zachmuřenou tváří. \"Celou tu dobu jsme mysleli, že jsou klidné a bez problémů, ale nejspíš svůj stres dobře schovávaly. Po generace rostl do této podoby a nyní utekl a napadl je - a nás!\"

Je pouze jediný způsob jak Stresobludu odehnat, Zavrženíhodnou nebo ne, a to je zaútočit na ní dokončenými Denními úkoly a úkoly z Úkolníčku! Spojme se a společně poražme tohoto proklatého nepřítele - ale pozor, ať neflákáte úkoly, nebo ho naše nesplněné úkoly naštvou a zaútočí na nás znovu...", "questStressbeastBoss": "Zavrženíhodná Stresobluda", "questStressbeastBossRageTitle": "Stresútok", "questStressbeastBossRageDescription": "Pokud se tahle lišta naplní, Zavrženíhodná Stresobluda na nás zaútočí Stresútokem!", @@ -245,21 +245,33 @@ "questCheetahDropCheetahEgg": "Gepard (vejce)", "questCheetahUnlockText": "Odemyká vejce geparda na Trhu", "questHorseText": "Vyjeď si na Noční Můře", - "questHorseNotes": "Při odpočinku v Krčmě s @beffymarroo a @JessicaChase stočilo se vyprávění k bodré chvále tvých dobrodružných zásluh. Pyšný na své skutky ses možná nechal trošku unést a vychloubáš se, že zkrotíš jakýkoliv úkol široko daleko. Ciyinec, sedící vedle, se k tobě náhle otočí a usměje se. Mrkne na tebe.\n\"Dokaž to. Projeď se na mém koni.\"\nCestou ke stájím ti @UncommonCriminal pošeptá: \"Možná sis ukousl víc než zvládneš spolknout. To není kůň - to je Noční Můra!\"\nPři pohledu na její bušící kopyta začínáš svých slov litovat...", - "questHorseCompletion": "Chce to všechny tvé dovednosti, ale nakonec kůň párkrát dupne, otře se ti o rameno a nechá tě nasednout. Krátce leč pyšně se za nadšeného povzbuzování přátel projedeš kolem Krčmy. Cizinec se široce zašklebí.\n\"Vidím, že to nebyly jen plané řeči! Tvé odhodlání je skutečně působivé. Vezmi si tyhle vejce, vychovej si vlastní koně a možná se jednoho dne opět setkáme.\"\nKdyž si od něj vezmeš vejce, dotkne se špičkami prstů svého klobouku... a zmizí.", + "questHorseNotes": "Při odpočinku v Krčmě s @beffymarroo a @JessicaChase se vyprávění stočilo k bodré chvále tvých dobrodružných zásluh. Pyšný na své skutky ses možná nechal trošku unést a vychloubáš se, že zkrotíš jakýkoliv úkol široko daleko. Cizinec, sedící vedle, se k tobě náhle otočí a usměje se. Mrkne na tebe a pozve tě, abys dostál svým slovům a projel se na jeho koni.\nCestou ke stájím ti @UncommonCriminal pošeptá: \"Možná sis ukousl víc než zvládneš spolknout. To není kůň - to je Noční Můra!\" Když vidíš, jak divoce hrabe kopyty, začínáš svých slov litovat...", + "questHorseCompletion": "Chce to všechny tvé dovednosti, ale nakonec kůň párkrát dupne, otře se ti o rameno a nechá tě nasednout. Krátce leč pyšně se za nadšeného povzbuzování přátel projedeš kolem Krčmy. Cizinec se široce zašklebí.\n\"Vidím, že to nebyly jen plané řeči! Tvé odhodlání je skutečně působivé. Vezmi si tato vejce, vychovej si vlastní koně, a možná se jednoho dne opět setkáme.\" Když si od něj vezmeš vejce, smekne před tebou klobou... a zmizí.", "questHorseBoss": "Noční Můra", "questHorseDropHorseEgg": "Kůň (Vejce)", "questHorseUnlockText": "Odemyká vejce koně na Trhu", - "questBurnoutText": "Burnout and the Exhaust Spirits", - "questBurnoutNotes": "It is well past midnight, still and stiflingly hot, when Redphoenix and scout captain Kiwibot abruptly burst through the city gates. \"We need to evacuate all the wooden buildings!\" Redphoenix shouts. \"Hurry!\"

Kiwibot grips the wall as she catches her breath. \"It's draining people and turning them into Exhaust Spirits! That's why everything was delayed. That's where the missing people have gone. It's been stealing their energy!\"

\"'It'?'\" asks Lemoness.

And then the heat takes form.

It rises from the earth in a billowing, twisting mass, and the air chokes with the scent of smoke and sulphur. Flames lick across the molten ground and contort into limbs, writhing to horrific heights. Smoldering eyes snap open, and the creature lets out a deep and crackling cackle.

Kiwibot whispers a single word.

\"Burnout.\"", - "questBurnoutCompletion": "Burnout is DEFEATED!

With a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.

Ian, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!

\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!

One of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"

Her tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"

She claps her hands. \"Now - let's celebrate!\"", - "questBurnoutCompletionChat": "`Burnout is DEFEATED!`\n\nWith a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.\n\nIan, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!\n\n\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!\n\nOne of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"\n\nHer tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"\n\nShe claps her hands. \"Now - let's celebrate!\"\n\nAll Habiticans receive:\n\nPhoenix Pet\nPhoenix Mount\nAchievement: Savior of the Flourishing Fields\nBasic Candy\nVanilla Candy\nSand Candy\nCinnamon Candy\nChocolate Candy\nRotten Candy\nSour Pink Candy\nSour Blue Candy\nHoney Candy", - "questBurnoutBoss": "Burnout", - "questBurnoutBossRageTitle": "Exhaust Strike", - "questBurnoutBossRageDescription": "When this gauge fills, Burnout will unleash its Exhaust Strike on Habitica!", - "questBurnoutDropPhoenixPet": "Phoenix (Pet)", - "questBurnoutDropPhoenixMount": "Phoenix (Mount)", - "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", - "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutText": "Vyhoření a Vyčerpaní duchové", + "questBurnoutNotes": "Je dlouho po půlnoci, horký vzduch se ani nehne, když v tom Redphoenix a kapitán průzkumníků Kiwibot vtrhnou do městské brány. \"Musíme evakuovat všechny dřevěné budovy!\" křičí Redphoenix. \"Rychle!\"

Kiwibot se chytá zdi aby popadla dech. \"Vysává to lidi a mění je ve Vyčerpané duchy! Proto vše tak trvá. To se stalo se všemi pohřešovanými lidmi. Krade to jejich energii!\"

\"To?\" ptá se Lemoness.

A najednou se horko zhmotní.

Vstává ze země jako kroutící se masa a vzduch je prosycen pachem kouře a sýry. Plameny olizují tavící se zemi a formují se do pařátů obrovských rozměrů. Kouřící oči se otevřou a příšera ze sebe vydá hluboký a praskavý smích.

Kiwibot zašeptá jediné slovo

\"Vyhoření.\"", + "questBurnoutCompletion": "Vyhoření je PORAŽENO!

V hlasitém ale jemném povzdechu Vyhoření pomalu vypustí žhnoucí energii, která přiživovala jeho plamen. Příšera se tiše rozpadne na popel, její energie se třpyt ve vzduchu a znovu oživuje Vyčerpané duchy a vrací jim jejich původní formu.

Ian, Daniel, a mudrci ze Sezonního obchodu jásají a Habiťané je běží pozdravit, všichni pohřešovaní Habiťané z Kvetoucích polí objímají své přátele a rodiny. Poslední Vyčerpaný duch se přeměnil na samotnou Veselou smrtku!

\"Podívej!\" šeptá @Baconsaur když se popel začne blyštit. Pomalu se blyštivý popel přemění na stovky třpytivých fénixů!

Jeden ze zářících ptáků přistane na ruce Veselé smrtky a ona se na něj zašklebí. \"Je to tak dávno, co jsem viděla totoho úžasného fénixe na Kvetoucích polích,\" říká. \"I když za těchto okolností to je opravdu tématické!\"

Její tón se vyjasní, ale její škleb (přirozeně) zůstává. \"Jsme známí pro svou píli, ale také pro naše festivaly a slavnosti. Trochu ironické, řekla bych, že i při plánování párty jsme si nedovolili žádný oddechový čas. Takovou chybu už znovu neuděláme!\"

Tleskne. \"Tak - a jdeme slavit!\"", + "questBurnoutCompletionChat": "Vyhoření je PORAŽENO!\n\nV hlasitém ale jemném povzdechu Vyhoření pomalu vypustí žhnoucí energii, která přiživovala jeho plamen. Příšera se tiše rozpadne na popel, její energie se třpyt ve vzduchu a znovu oživuje Vyčerpané duchy a vrací jim jejich původní formu.\n\nIan, Daniel, a mudrci ze Sezonního obchodu jásají a Habiťané je běží pozdravit, všichni pohřešovaní Habiťané z Kvetoucích polí objímají své přátele a rodiny. Poslední Vyčerpaný duch se přeměnil na samotnou Veselou smrtku!\n\n\"Podívej!\" šeptá @Baconsaur když se popel začne blyštit. Pomalu se blyštivý popel přemění na stovky třpytivých fénixů!\n\nJeden ze zářících ptáků přistane na ruce Veselé smrtky a ona se na něj zašklebí. \"Je to tak dávno, co jsem viděla totoho úžasného fénixe na Kvetoucích polích,\" říká. \"I když za těchto okolností to je opravdu tématické!\"\n\nJejí tón se vyjasní, ale její škleb (přirozeně) zůstává. \"Jsme známí pro svou píli, ale také pro naše festivaly a slavnosti. Trochu ironické, řekla bych, že i při plánování párty jsme si nedovolili žádný oddechový čas. Takovou chybu už znovu neuděláme!\"\n\nTleskne. \"Tak - a jdeme slavit!\"\n\nVšichni Habiťané získají:\n\nMazlíčka fénixe\nZvíře fénixe\nOcenění: Zachránce Kvetoucích polí\nZákladní cukrátko\nVanilkové cukrátko\nPísečné cukrátko\nSkořicové cukrátko\nČokoládové cukrátko\nZkažené cukrátko\nKyselé růžové cukrátko\nKyselé modré cukrátko\nMedové cukrátko", + "questBurnoutBoss": "Vyhoření", + "questBurnoutBossRageTitle": "Vyčerpaní duchové", + "questBurnoutBossRageDescription": "Když se tato lišta naplní, Vyhoření napadne Vyčerpanými duchy město Habitica!", + "questBurnoutDropPhoenixPet": "Fénix (mazlíček)", + "questBurnoutDropPhoenixMount": "Fénix (zvíře)", + "questBurnoutBossRageQuests": "`Vyhoření použilo VYČERPANÝ ÚDER!`\n\nAle ne! I přes naše nejlepší snahy nám uniklo několik denních úkolů a nyní je Vyhoření posilněno jejich energií! S chraplavým úšklebkem se zmocní Iana, pána Výprav, kterého zachvátí přízračné plameny. Popel ze svitků výprav se usadí, kouř se rozplyne a vidíte, že z Iana byla vysáta všechna energie a stal se z něj Vyčerpaný duch!\n\nPouze poražením Vyhoření můžete zlomit toto kouzlo a vrátit našeho milovaného pána Výprav mezi živé. Splňme všechny denní úkoly a poražme tuto příšeru dřív, než stihne znovu zaútočit!", + "questBurnoutBossRageSeasonalShop": "`Vyhoření použilo VYČERPANÝ ÚDER!`\n\nÁáá!!! Naše nesplněné denní úkoly přiživují plamen Vyhoření a znovu načerpal dostatek síly k úderu! Zapaluje Sezonní obchod. Vyděšeně přihlížíte jak jsou Sezonní mudrci přeměněni na Vyčerpané duchy.\n\nMusíme naše nehráčské postavy zachránit! Rychle Habiťané, splňte své úkoly a přemožte Vyhoření dřív, než zaútočí potřetí!", + "questBurnoutBossRageTavern": "`Vyhoření použilo VYČERPANÝ ÚDER!`\n\nMnoho Habiťanů se před Vyhořením schovávalo v Krčmě, ale už ne! S hrozivým řevem vezme Vyhoření Krčmu do svých doběla rozpálených pařátů. Všichni utíkají, ale Daniel je chycen ve spárech té obludy a přemění se ve Vyčerpaného ducha přímo před tebou!\n\nTento zbrklý horor trvá již příliš dlouho. Nevzdávej to... jsme už tak blízko jeho poražení navždy!", + "questFrogText": "Bažina nepořádného žabáka", + "questFrogNotes": "Když se s přáteli brodíte bažinami Stagnace, @starsystemic ukáže na velkou ceduli. \"Držte se vyznačené cesty - pokud můžete\"

\"To přeci nebude těžké!\" říká @RosemonkeyCT. \"Je široká a přehledná.\"

Ale jak po cestě pokračujete, začíná se cesta zaplňovat bahnem z bažiny, ve kterém vidíte modrou suť a harampádí, a zanedlouho je nemožné v cestě pokračovat.

Rozhlížíte se kolem přemýšlejíc jak se z téhle šlamastiky dostanete, když v tom @Jon Arjinborn zakřičí \"Pozor!\" Nazlobený žabák pokrytý špinavým prádlem a žhnoucí modrým plamenem vyskočí z bažiny. Abyste mohli pokračovat, musíte tohoto nepořádného žabáka přemoci!", + "questFrogCompletion": "Poražený žabák se vrátí zpět do bažiny. Spolu s ním se z cesty stáhne i modrý sliz a cesta vpřed je volná.

Uprostřed cesty sedí tři dokonale čistá vejce. \"Jé, dokonce jsou v něm vidět pulci!\" říká @Breadstrings. \"Na, vezmi si je.\"", + "questFrogBoss": "Nepořádný žabák", + "questFrogDropFrogEgg": "Žabák (vejce)", + "questFrogUnlockText": "Odemyká vejce žabáka na Trhu", + "questSnakeText": "The Serpent of Distraction", + "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveler astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", + "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", + "questSnakeBoss": "Serpent of Distraction", + "questSnakeDropSnakeEgg": "Snake (Egg)", + "questSnakeUnlockText": "Unlocks purchasable Snake eggs in the Market" } \ No newline at end of file diff --git a/common/locales/cs/rebirth.json b/common/locales/cs/rebirth.json index 18198104e2..507e5bb119 100644 --- a/common/locales/cs/rebirth.json +++ b/common/locales/cs/rebirth.json @@ -1,11 +1,11 @@ { "rebirthNew": "Znovuzrození: Je dostupné nové dobrodružství !", - "rebirthUnlock": "Odemkl jsi znovuzrození! Tento speciální předmět ti umožňuje začít novou hru na úrovni 1, zatímco ti zůstanou všechny úkoly, úspěchy, mazlíčci a ostatní věci. Pokud máš pocit, že už jsi zvládl vše, použij ho pro vdechnutí nového života do Habitiky anebo pro vyzkoušení nových funkcí s novou postavou a s čistým štítem.", + "rebirthUnlock": "Odemkl jsi znovuzrození! Tento speciální předmět ti umožňuje začít novou hru na úrovni 1, zatímco ti zůstanou všechny úkoly, úspěchy, mazlíčci a ostatní věci. Pokud máš pocit, že už jsi zvládl vše, použij ho pro vdechnutí nového života do programu Habitica anebo pro vyzkoušení nových funkcí s novou postavou a s čistým štítem.", "rebirthBegin": "Znovuzrození: Začni nové dobrodružství", - "rebirthStartOver": "Rebirth starts your character over from Level 1.", + "rebirthStartOver": "Znovuzrození obnoví tvou postavu na úrovni 1.", "rebirthAdvList1": "Bylo ti obnoveno plné zdraví.", - "rebirthAdvList2": "You have no Experience, Gold, or Equipment (with the exception of free items like Mystery items).", - "rebirthAdvList3": "Tvé zvyky, denní úkoly a úkoly v úkolníčku se resetují na žluté a šňůry úspěšnosti se resetují také.", + "rebirthAdvList2": "Nemáš žádné zkušenosti, zlaťáky, ani vybavení (kromě předmětů zdarma, jako například Záhadné předměty).", + "rebirthAdvList3": "Tvé zvyky, denní úkoly a úkoly v úkolníčku se resetují na žluté a série úspěšnosti se resetují také.", "rebirthAdvList4": "Začínáš s povoláním válečníka, dokud nezískáš novou třídu.", "rebirthInherit": "Tvá nová postava zdědila pár věcí od svého předchůdce:", "rebirthInList1": "Úkoly, historie a nastavení zůstavají stejné.", @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "Také dostaneš ocenění za začátek nového dobrodružství.", "beReborn": "Buď znovuzrozen", "rebirthAchievement": "Začal jsi nové dobrodružství! Tohle je Znovuzrození číslo <%= number %> a nejvyšší úroveň, které jsi dosáhl je <%= level %>. K dosažení dalšího ocenění začni nové dobrodružství až dosáhneš ještě vyšší úrovně!", + "rebirthAchievement100": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is 100 or higher. To stack this Achievement, begin your next new adventure when you've reached at least 100!", "rebirthBegan": "Začal nové dobrodružství", "rebirthText": "Začal <%= rebirths %> nových dobrodružství", "rebirthOrb": "Použil Kouli znovuzrození, aby začal odznovu po dosažení úrovně", + "rebirthOrb100": "Used an Orb of Rebirth to start over after attaining Level 100 or higher", "rebirthPop": "Začni s novou postavou na úrovni 1 a přitom si zachovej ocenění, sběratelské předměty a úkoly s historií.", "rebirthName": "Koule znovuzrození", "reborn": "Znovuzrozen, maximální úroveň <%= reLevel %>" diff --git a/common/locales/cs/settings.json b/common/locales/cs/settings.json index 80692e63b1..4bac2fa03d 100644 --- a/common/locales/cs/settings.json +++ b/common/locales/cs/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "Pokud je tato volba nastavena, seznam štítků bude skryt, když poprvé otevřeš úkol pro úpravu.", "startAdvCollapsed": "Pokročilé možnosti se v úkolu zobrazí zabalené.", "startAdvCollapsedPop": "Pokud je tato volba nastavena, pokročilé možnosti budou skryté, když poprvé otevřeš úkol pro úpravu.", + "dontShowAgain": "Don't show this again", + "suppressLevelUpModal": "Don't show popup when gaining a level", + "suppressHatchPetModal": "Don't show popup when hatching a pet", + "suppressRaisePetModal": "Don't show popup when raising a pet into a mount", + "suppressStreakModal": "Don't show popup when attaining a Streak achievement", "showTour": "Zobrazit průvodce", "restartTour": "Restartovat instruktážního průvodce od bodu, kdy jsi se do země Habitica vydal.", "showBailey": "Zobraz Baileyho", @@ -41,8 +46,8 @@ "customDayStart": "Vlastní začátek dne", "changeCustomDayStart": "Změnit vlastní začátek dne?", "sureChangeCustomDayStart": "Jsi si jistý, že chceš změnit svůj vlastní začátek dne?", - "nextCron": "Tve Denní úkoly se resetují ve chvíli, kdy po <%= time %> poprvé použiješ Habitica. Ujisti se, že jsi je všechny stihnul dokončit před tímto časem!", - "customDayStartInfo1": "V základu Habitica kontroluje a resetuje tvé Denní úkoly každý den o půlnoci tvé časové zóny. Tento čas můžeš změnit zde.", + "nextCron": "Tve Denní úkoly se resetují ve chvíli, kdy se po <%= time %> vrátíš do země Habitica. Ujisti se, že jsi je všechny stihnul dokončit před tímto časem!", + "customDayStartInfo1": "Při základním nastavení program Habitica kontroluje a resetuje tvé Denní úkoly každý den o půlnoci ve tvé časové zóně. Tento čas můžeš změnit zde.", "misc": "Ostatní", "showHeader": "Zobrazit horní info panel", "changePass": "Změnit heslo", @@ -63,9 +68,9 @@ "resetDo": "Udělej to, zresetuj můj účet!", "fixValues": "Opravit hodnoty", "fixValuesText1": "Pokud narazíš na chybu nebo uděláš chybu, která nespravedlivě ovlivní tvou postavu (újma, kterou si nezasloužíš, zlaťáky, které jsi neměl získat, atd.), zde můžeš ručně opravit hodnoty. Ano, je díky tomu možné podvádět, ale podvedl bys jen sám sebe!", - "fixValuesText2": "Všimni si, že zde není možné obnovit šňůry úspěšnosti za jednotlivé úkoly. To se dá udělat v rozšířeném nastavení denního úkolu, kde najdeš Obnovit šňůru.", + "fixValuesText2": "Všimni si, že zde není možné obnovit série úspěšnosti za jednotlivé úkoly. To se dá udělat v rozšířeném nastavení denního úkolu, kde najdeš Obnovit šňůru.", "disabledWinterEvent": "Zakázáno během 4. části Zimní Země divů (protože odměny se dají koupit za zlaťáky).", - "fix21Streaks": "21-denní šňůra úspěšnosti", + "fix21Streaks": "21-denní série úspěšnosti", "discardChanges": "Zahodit změny", "deleteDo": "Udělej to, vymaž můj účet!", "enterNumber": "Prosím, zadej číslo mezi 0 a 24", @@ -81,7 +86,6 @@ "emailChange1": "Ke změně emailu, prosím, pošli email na", "emailChange2": "admin@habitica.com", "emailChange3": "spolu s tvým starým a novým emailem a tvým uživatelským ID.", - "username": "Přihlašovací jméno", "usernameOrEmail": "Přihlašovací jméno nebo email", "email": "Email", "registeredWithFb": "Registrovaný přes Facebook", @@ -89,7 +93,7 @@ "loginNameDescription2": "Uživatel -> Profil", "loginNameDescription3": "aby sis změnil jméno, které se objevuje u tvého avataru a zpráv v chatu.", "emailNotifications": "Emailová upozornění", - "wonChallenge": "Vyhrál jsi Výzvu", + "wonChallenge": "You won a Challenge!", "newPM": "Obdržena soukromá zpráva", "giftedGems": "Darované drahokamy", "giftedGemsInfo": "<%= amount %> Drahokamů - od <%= name %>", @@ -118,5 +122,29 @@ "promoCode": "Promo kód", "promoCodeApplied": "Promo kód zadán! Koukni do Inventáře", "promoPlaceholder": "Vlož promo kód", - "displayInviteToPartyWhenPartyIs1": "Zobrazit tlačítko \"Pozvat do družiny\", když má družina 1 člena." + "displayInviteToPartyWhenPartyIs1": "Zobrazit tlačítko \"Pozvat do družiny\", když má družina 1 člena.", + "saveCustomDayStart": "Uložit vlastní začátek dne", + "registration": "Registrace", + "addLocalAuth": "Přidat lokální ověření:", + "generateCodes": "Generovat kódy", + "generate": "Generovat", + "getCodes": "Získat kódy", + "webhooks": "Webhooks", + "enabled": "Povoleno", + "webhookURL": "Webhook URL", + "add": "Přidat", + "buyGemsGoldCap": "Strop zvýšen na <%= amount %>", + "mysticHourglass": "<%= amount %> Mystických přesýpacích hodin", + "mysticHourglassText": "Mystické přesýpací hodiny ti umožní koupit si záhadné sety předmětů z předchozích měsíců.", + "purchasedPlanId": "Opakovaně $<%= price %> každý/é <%= months %> měsíc(e) (<%= plan %>)", + "purchasedPlanExtraMonths": "Máš <%= months %> měsíců kreditu předplatného.", + "consecutiveSubscription": "Nepřetržité předplatné", + "consecutiveMonths": "Počet po sobě jdoucích měsíců:", + "gemCapExtra": "Strop drahokamů extra:", + "mysticHourglasses": "Mystické přesýpací hodiny:", + "paypal": "PayPal", + "amazonPayments": "Amazon platby", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/cs/spells.json b/common/locales/cs/spells.json index 23df4c1c24..67ebf729bd 100644 --- a/common/locales/cs/spells.json +++ b/common/locales/cs/spells.json @@ -1,12 +1,12 @@ { "spellWizardFireballText": "Vzplanutí ohňů", - "spellWizardFireballNotes": "Plameny ti vyšlehnou z rukou. Získáš zkušenostní body a uštědříš extra zásah Bossovi! Klikni na úkol, na který toto kouzlo chceš seslat. (vypočteno na základě: INT)", + "spellWizardFireballNotes": "Plameny ti vyšlehnou z rukou. Získáš zkušenostní body a uštědříš extra zásah příšeře! Klikni na úkol, na který toto kouzlo chceš seslat. (vypočteno na základě: INT)", "spellWizardMPHealText": "Éterický příval", "spellWizardMPHealNotes": "Obětuješ manu, abys pomohl svým přátelům. Ostatní členové družiny získají manu! (vypočteno na základě: INT)", "spellWizardEarthText": "Zemětřesení", "spellWizardEarthNotes": "Tvá psychická síla otřásá zemi. Celá tvá družina získává bonus k Inteligenci! (vypočteno na základě: INT před přidáním)", "spellWizardFrostText": "Ledový mráz", - "spellWizardFrostNotes": "Led pokrývá tvé úkoly. Žádný z tvých šňůr se zítra nezresetuje! (Jedno seslání ovlivní všechny šňůry.)", + "spellWizardFrostNotes": "Led pokrývá tvé úkoly. Žádný z tvých sérií se zítra nezresetuje! (Jedno seslání ovlivní všechny šňůry.)", "spellWarriorSmashText": "Brutální rána", "spellWarriorSmashNotes": "Zasáhneš úkol vší silou. Zmodrá/červená vybledne, a zasadíš Bossům extra rány! Klikni na úkol, na který toto kouzlo chceš seslat. (vypočteno na základě: SÍL)", "spellWarriorDefensiveStanceText": "Obranný postoj", @@ -22,10 +22,10 @@ "spellRogueToolsOfTradeText": "Nástroje k obchodování", "spellRogueToolsOfTradeNotes": "Podělíš se o své talenty s přáteli. Celá tvá družina získává bonus k Vnímání. (vypočteno na základě: VNM před bonusem)", "spellRogueStealthText": "Plížení", - "spellRogueStealthNotes": "Jsi velice hbitý a nikdo se tě nevšimne. Některé z tvých nesplněných denních úkolů ti dnes v noci neublíží a jejich šňůry/barva se nezmění. (Sešli vícekrát, abys ovlivnil více denních úkolů)", + "spellRogueStealthNotes": "Jsi velice hbitý a nikdo se tě nevšimne. Některé z tvých nesplněných denních úkolů ti dnes v noci neublíží a jejich série/barva se nezmění. (Sešli vícekrát, abys ovlivnil více denních úkolů)", "spellHealerHealText": "Léčivé světlo", "spellHealerHealNotes": "Světlo obklopuje tvé tělo a léčí tvá zranění. Získáváš zpět své zdraví! (vypočteno na základě: OBR a INT)", - "spellHealerBrightnessText": " Spalující záře", + "spellHealerBrightnessText": "Spalující záře", "spellHealerBrightnessNotes": "Záblesk světla oslepí tvé úkoly. Jsou více modré a méně červené! (vypočteno na základě: INT)", "spellHealerProtectAuraText": "Ochranná aura", "spellHealerProtectAuraNotes": "Chráníš svou družinu před újmou. Celá tvá družina získá bonus k Obraně! (vypočteno na základě: OBR před bonusem)", @@ -47,4 +47,4 @@ "spellSpecialSeafoamNotes": "Přeměň svého kamaráda na mořskou příšerku!", "spellSpecialSandText": "Písek", "spellSpecialSandNotes": "Zvrať efekt mořské pěny." -} +} \ No newline at end of file diff --git a/common/locales/cs/subscriber.json b/common/locales/cs/subscriber.json index 111a452ba1..b3b375e026 100644 --- a/common/locales/cs/subscriber.json +++ b/common/locales/cs/subscriber.json @@ -59,21 +59,21 @@ "timeTravelers": "Cestovatelé časem", "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> a <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitle": "Záhadní cestovatelé časem", - "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.", - "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 <%= linkStart %>here<%= linkEnd %>! 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!", + "timeTravelersPopoverNoSub": "Abys svolal záhadné cestovatele časem, potřebuješ mystické přesýpací hodiny! <%= linkStart %>Předplatitelé<%= linkEnd %> dostanou jedny mystické přesýpací hodiny za každé tři měsíce nepřetržitého předplaceného období. Vrať se až budeš mít mystické přesýpací hodiny a cestovatelé časem ti přinesou vzácného mazlíčka, zvíře, nebo se předmětů pro předplatitele z minulosti.... anebo i z budoucnosti.", + "timeTravelersPopover": "Vidíme, že máš mystické přesýpací hodiny, tak pro Tebe rádi budeme cestovat časem! Prosím, vyber si mazlíčka, zvíře, nebo záhadný set předmětů, který se ti líbí. Můžeš si vybrat z minulých setů tady! Pokud se ti nelíbí, možná by sis vybral z našich trendy futuristických setů Steampunk předmětů?", + "timeTravelersAlreadyOwned": "Gratulujeme! Teď máš vše, co cestovatelé časem nabízejí. Děkujeme za podporu stránek!", + "mysticHourglassPopover": "Díky Mystickým Přesýpacím hodinám si můžeš koupit limitované předměty, jako záhadné předměty měsíce nebo odměny z boje se světovými příšerami, z minulosti!", "subUpdateCard": "Karta s aktualizacemi", "subUpdateTitle": "Aktualizace", "subUpdateDescription": "Aktualizuj kartu, aby se nabila.", - "notEnoughHourglasses": "You don't have enough Mystic Hourglasses.", - "hourglassBuyEquipSetConfirm": "Buy this full set of items for 1 Mystic Hourglass?", - "hourglassBuyItemConfirm": "Buy this item for 1 Mystic Hourglass?", - "petsAlreadyOwned": "Pet already owned.", - "mountsAlreadyOwned": "Mount already owned.", - "typeNotAllowedHourglass": "Item type not supported for purchase with Mystic Hourglass. Allowed types:", - "petsNotAllowedHourglass": "Pet not available for purchase with Mystic Hourglass.", - "mountsNotAllowedHourglass": "Mount not available for purchase with Mystic Hourglass.", - "hourglassPurchase": "Purchased an item using a Mystic Hourglass!", - "hourglassPurchaseSet": "Purchased an item set using a Mystic Hourglass!" + "notEnoughHourglasses": "Nemáš dostatek mystických přesýpacích hodin.", + "hourglassBuyEquipSetConfirm": "Koupit celý tento set za 1 přesýpací hodiny?", + "hourglassBuyItemConfirm": "Koupit tento předmět za 1 přesýpací hodiny?", + "petsAlreadyOwned": "Tohoto mazlíčka již máš.", + "mountsAlreadyOwned": "Toto zvíře již máš.", + "typeNotAllowedHourglass": "Tento typ předmětu nelze koupit za mystické přesýpací hodiny. Za ně si můžeš koupit:", + "petsNotAllowedHourglass": "Mazlíčka si nelze koupit za mystické přesýpací hodiny.", + "mountsNotAllowedHourglass": "Zvíře si nelze koupit za mystické přesýpací hodiny-", + "hourglassPurchase": "Koupil sis předmět za mystické přesýpací hodiny.", + "hourglassPurchaseSet": "Koupil sis set předmětů za mystické přesýpací hodiny!" } \ No newline at end of file diff --git a/common/locales/cs/tasks.json b/common/locales/cs/tasks.json index 4f295e6b15..251164c84e 100644 --- a/common/locales/cs/tasks.json +++ b/common/locales/cs/tasks.json @@ -35,7 +35,7 @@ "dailies": "Denní úkoly", "newDaily": "Nový denní úkol", "newDailyBulk": "Nové Denní úkoly (jeden na řádek)", - "streakCounter": "Počítadlo šňůr úspěšnosti", + "streakCounter": "Počítadlo sérií úspěšnosti", "repeat": "Opakovat", "repeatEvery": "Opakovat každé", "repeatHelpTitle": "Jak často by se měl tento úkol opakovat?", @@ -45,7 +45,7 @@ "repeatWeek": "V určité dny v týdnu", "day": "Den", "days": "Dny", - "restoreStreak": "Obnov šňůru", + "restoreStreak": "Obnov sérii", "todos": "Úkolníček", "newTodo": "Nový Úkol", "newTodoBulk": "Nové Úkoly (jeden na řádek)", @@ -73,23 +73,22 @@ "startDate": "Datum začátku", "startDateHelpTitle": "Kdy by měl tento úkol začít?", "startDateHelp": "Nastav datum, ve kterém začne úkol platit. Nebude muset být splněn dříve.", - "streakName": "Ocenění za šňůry úspěšnosti", - "streakText": "Má na kontě <%= streaks %> 21-denních šňůr úspěšnosti v Denních úkolech", - "streakSingular": "Šňůrař", - "streakSingularText": "Právě završil 21 dní dlouhou šňůru úspěšnosti na denním úkolu", + "streakName": "Ocenění za série úspěšnosti", + "streakText": "Má na kontě <%= streaks %> 21-denních sérií úspěšnosti v Denních úkolech", + "streakSingular": "Sériář", + "streakSingularText": "Právě završil 21 dní dlouhou sérii úspěšnosti na denním úkolu", "perfectName": "Perfektní dny", - "perfectText": "Completed all active Dailies on <%= perfects %> days. With this achievement you get a +level/2 buff to all attributes for the next day. Levels greater than 100 don't have any additional effects on buffs.", + "perfectText": "Dokončil všechny aktivní denní úkoly za <%= perfects %> dní. S tímto úspěchem získáváš následující den bonus +úroveň/2 ke všem vlastnostem. Úrovně vyšší než 100 žádný bonus neobdrží.", "perfectSingular": "Perfektní den", - "perfectSingularText": "Completed all active Dailies in one day. With this achievement you get a +level/2 buff to all attributes for the next day. Levels greater than 100 don't have any additional effects on buffs.", - "streakerAchievement": "Dosáhl jsi ocenění \"Šňůrař\"! Těch 21 dní je důležitým milníkem při formování zvyku. Můžeš získávat toto ocenění za každých dalších 21 dní, ať už na tomto denním úkolu, nebo na jiném!", + "perfectSingularText": "Dokončil všechny aktivní denní úkoly v jeden den. S tímto úspěchem získáváš následující den bonus +úroveň/2 ke všem vlastnostem. Úrovně vyšší než 100 žádný bonus neobdrží.", + "streakerAchievement": "Dosáhl jsi ocenění \"Sériář\"! Těch 21 dní je důležitým milníkem při formování zvyku. Můžeš získávat toto ocenění za každých dalších 21 dní, ať už na tomto denním úkolu, nebo na jiném!", "fortifyName": "Posilňující lektvar", "fortifyPop": "Obnoví všechny úkoly do neutrální (žluté) barvy a obnoví ztracené zdraví.", "fortify": "Posilnění", "fortifyText": "Posilnění vrátí všechny tvé úkoly do neutrálního (žlutého) stavu, ve kterém byly v okamžiku přidání, a doplní zdraví na maximum. Považuj to za poslední možnou variantu. Červené úkoly poskytují dobrou motivaci ke zlepšení. Ale pokud tě všechna ta červená naplňuje zoufalstvím a začátek každého dne se ukáže jako smrtící, investuj drahokamy a oddechni si.", "sureDelete": "Určitě chceš odstranit tento úkol?", - "streakCoins": "Bonus za šňůru!", - "pushTaskToTop": "Přesunout úkol na vrchol", - "pushTaskToBottom": "Posunout úkol na spodek", + "streakCoins": "Bonus za sérii!", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "Nejdřív zadej název úkolu.", "dailiesRestingInInn": "Odpočíváš v Hostinci! Tvé Denní úkoly ti dnes NEUBLÍŽÍ, ale BUDOU se resetovat každý den. Pokud jsi na Výpravě, neuštědříš žádný úder/nebudeš sbírat předměty dokud se z Hostince neodhlásíš, ale stále ti může ublížit Boss, pokud tví přátelé v Družině nebudou plnit své Denní úkoly.", "habitHelp1": "Dobré zvyky jsou věci, které děláš často. Získáš za ně Zlaťáky a Zkušenost pokaždé, když klikneš na <%= plusIcon %>.", diff --git a/common/locales/da/backgrounds.json b/common/locales/da/backgrounds.json index 16026a7a99..b61e7883dc 100644 --- a/common/locales/da/backgrounds.json +++ b/common/locales/da/backgrounds.json @@ -112,11 +112,25 @@ "backgroundStableNotes": "Pas ridedyrene i Habiticas Stald.", "backgroundTavernText": "Habiticas Værtshus", "backgroundTavernNotes": "Besøg Habiticas Værtshus.", - "backgrounds102015": "SET 17: Released October 2015", - "backgroundHarvestMoonText": "Harvest Moon", - "backgroundHarvestMoonNotes": "Cackle under the Harvest Moon.", - "backgroundSlimySwampText": "Slimy Swamp", - "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", - "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgrounds102015": "SÆT 17: Udgivet Oktober 2015", + "backgroundHarvestMoonText": "Høstmåne", + "backgroundHarvestMoonNotes": "Kagl under Høstmånen.", + "backgroundSlimySwampText": "Slimet Sump", + "backgroundSlimySwampNotes": "Slæb dig gennem en Slimet Sump.", + "backgroundSwarmingDarknessText": "Sværmende Mørke", + "backgroundSwarmingDarknessNotes": "Skælv i det Sværmende Mørke.", + "backgrounds112015": "SET 18: Released November 2015", + "backgroundFloatingIslandsText": "Floating Islands", + "backgroundFloatingIslandsNotes": "Hop across the Floating Islands.", + "backgroundNightDunesText": "Night Dunes", + "backgroundNightDunesNotes": "Walk peacefully through the Night Dunes.", + "backgroundSunsetOasisText": "Sunset Oasis", + "backgroundSunsetOasisNotes": "Bask in the Sunset Oasis.", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/da/challenge.json b/common/locales/da/challenge.json index 8c16799b0a..144a039d99 100644 --- a/common/locales/da/challenge.json +++ b/common/locales/da/challenge.json @@ -43,8 +43,8 @@ "exportChallengeCSV": "Eksporter til CSV", "selectGroup": "Vælg gruppe", "challengeCreated": "Udfordring oprettet", - "sureDelCha": "Are you sure you want to delete this challenge?", - "sureDelChaTavern": "Are you sure you want to delete this challenge? Your gems will not be refunded.", + "sureDelCha": "Er du sikker på, at du vil slette udfordringen?", + "sureDelChaTavern": "Er du sikker på, at du vil slette denne udfordring? Du får ikke dine ædelsten tilbage.", "removeTasks": "Slet opgaver", "keepTasks": "Behold opgaver", "closeCha": "Luk udfordringen og...", @@ -57,7 +57,11 @@ "prizeValue": "<%= gemcount %> <%= gemicon %> Præmie", "clone": "Klon", "challengeNotEnoughGems": "Du har ikke nok ædelsten til at oprette denne udfordring.", - "noPermissionEditChallenge": "You don't have permissions to edit this challenge", - "noPermissionDeleteChallenge": "You don't have permissions to delete this challenge", - "noPermissionCloseChallenge": "You don't have permissions to close this challenge" + "noPermissionEditChallenge": "Du har ikke rettigheder til at ændre denne udfordring", + "noPermissionDeleteChallenge": "Du har ikke rettigheder til at slette denne udfordring", + "noPermissionCloseChallenge": "Du har ikke rettigheder til at afslutte denne udfordring", + "congratulations": "Congratulations!", + "hurray": "Hurray!", + "noChallengeOwner": "no owner", + "noChallengeOwnerPopover": "This challenge does not have an owner because the person who created the challenge deleted their account." } \ No newline at end of file diff --git a/common/locales/da/character.json b/common/locales/da/character.json index 5938ff9537..ac38ebfc3e 100644 --- a/common/locales/da/character.json +++ b/common/locales/da/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "Klassebonus", "battleGear": "Kampudstyr", "battleGearText": "Dette er den udrustning du bærer i kamp. Den påvirker resultaterne når du interagerer med dine opgaver.", + "autoEquipBattleGear": "Auto-equip new gear", "costume": "Kostume", "costumeText": "Hvis du foretrækker udseendet af andet udstyr end hvad du bærer, tjek \"Brug Kostume\"-feltet for at visuelt bære et kostume, mens du bærer dit kampudstyr nedenunder.", "useCostume": "Brug kostume", @@ -64,6 +65,10 @@ "ultimGearText": "Har opgraderet til det maksimale våben- og rustningssæt for de følgende klasser:", "level": "Niveau", "levelUp": "Niveau op!", + "gainedLevel": "You gained a level!", + "leveledUp": "By accomplishing your real-life goals, you've grown to Level <%= level %>!", + "fullyHealed": "You have been fully healed!", + "huzzah": "Huzzah!", "mana": "Mana", "hp": "HP", "mp": "MP", diff --git a/common/locales/da/content.json b/common/locales/da/content.json index 6396f813ad..ac0de91c5c 100644 --- a/common/locales/da/content.json +++ b/common/locales/da/content.json @@ -95,6 +95,12 @@ "questEggHorseText": "Hest", "questEggHorseMountText": "Hest", "questEggHorseAdjective": "en galoperende", + "questEggFrogText": "Frog", + "questEggFrogMountText": "Frog", + "questEggFrogAdjective": "a princely", + "questEggSnakeText": "Snake", + "questEggSnakeMountText": "Snake", + "questEggSnakeAdjective": "a slithering", "eggNotes": "Find en udrugningseliksir til at hælde på dit æg, og det vil udklække <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "Almindelig", "hatchingPotionWhite": "Hvid", diff --git a/common/locales/da/faq.json b/common/locales/da/faq.json index b1d594e652..9144c9eb77 100644 --- a/common/locales/da/faq.json +++ b/common/locales/da/faq.json @@ -2,7 +2,7 @@ "frequentlyAskedQuestions": "Ofte Stillede Spørgsmål", "faqQuestion0": "Jeg er forvirret. Hvor får jeg et overblik?", "iosFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn experience and gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as Pets, Skills, and Quests! You can customize your character under Menu > Customize Avatar.\n\n Some basic ways to interact: click the (+) in the upper-right-hand corner to add a new task. Tap on an existing task to edit it, and swipe left on a task to delete it. You can sort tasks using Tags in the upper-left-hand corner, and expand and contract checklists by clicking on the checklist bubble.", - "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, the wiki has an excellent step-by-step overview of the game [right here](http://habitica.wikia.com/wiki/Habitica_Wiki).", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", "faqQuestion1": "Hvordan opretter jeg mine egne opgaver?", "iosFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.", "webFaqAnswer1": "Good Habits (the ones with a ) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a ) are tasks that you should avoid, like biting nails. Habits with a and a have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n

\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n

\n To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.", @@ -16,7 +16,7 @@ "iosFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you tap a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your Party and one of your Party mates did not complete all their Dailies, the Boss will attack you.\n\n The main way to heal is to gain a level, which restores all your health. You can also buy a Health Potion with gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a Party with a Healer, they can heal you as well.", "webFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you click a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your party and one of your party mates did not complete all their Dailies, the Boss will attack you.\n

\n The main way to heal is to gain a level, which restores all your Health. You can also buy a Health Potion with Gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a party (under Social > Party) with a Healer, they can heal you as well.", "faqQuestion5": "Hvordan spiller jeg Habitica med mine venner?", - "iosFaqAnswer5": "The best way is to invite them to a Party with you, via the [website](https://habitica.com/#/options/groups/party)! We'll add the ability to create a Party from this app soon, but in the meantime you can use the [website](https://habitica.com/#/options/groups/party). Parties can go on quests, battle monsters, and cast skills to support each other. On the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", + "iosFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on quests, battle monsters, and cast skills to support each other. Go to Menu > Party and click \"Create New Party\" if you don't already have a Party. Then tap on the Members list, and tap Invite in the upper right-hand corner to invite your friends by entering their User ID (a string of numbers and letters that they can find under Settings > Account Details on the app, and Settings > API on the website). On the website, you can also invite friends via email, which we will add to the app in a future update.\n\nOn the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", "webFaqAnswer5": "The best way is to invite them to a party with you, under Social > Party! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n

\n For more detailed info, check out the wiki pages on [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).", "faqQuestion6": "Hvordan får jeg et kæledyr eller ridedyr?", "iosFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch Egg.\" Then choose a hatching potion to determine its color! Go to Menu > Pets to equip your new Pet to your avatar by clicking on it. \n\n You can also grow your Pets into Mounts by feeding them under Menu > Pets. Tap on a Pet, and then select \"Feed Pet\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Menu > Mounts and tap on it to equip it to your avatar.\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", @@ -28,14 +28,17 @@ "iosFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Use Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in a special section in the Rewards Column. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You’ll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "faqQuestion9": "Hvordan bekæmper jeg monstre og tager på Quests?", - "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party on the [website](https://habitica.com/#/options/groups/party), you'll be rewarded with the Basi-List Scroll! (We will add this feature to the app in a future update.)\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for gold and gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", + "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for Gold and Gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "webFaqAnswer9": "First, you need to join or start a party (under Social > Party). Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n

\n Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are three ways to get a scroll:\n

\n * When you invite people to your party, you’ll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Page (Inventory > Quests) for Gold and Gems.\n

\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your party at the same time that you damage the Boss.\n

\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "faqQuestion10": "Hvad er ædelsten, og hvordan får jeg dem?", + "faqQuestion10": "What are Gems, and how do I get them?", "iosFaqAnswer10": "Gems are purchased with real money by tapping on the gem icon in the header. When people buy gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying gems directly, there are three other ways players can gain gems:\n\n * Win a Challenge on the [website](https://habitica.com) that has been set up by another player under Social > Challenges. (We will be adding Challenges to the app in a future update!)\n * Subscribe on the [website](https://habitica.com/#/options/settings/subscription) and unlock the ability to buy a certain number of gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with gems do not offer any statistical advantages, so players can still make use of the app without them!", "webFaqAnswer10": "Gems are [purchased with real money](https://habitica.com/#/options/settings/subscription), although [subscribers](https://habitica.com/#/options/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n

\n In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n

\n * Win a Challenge that has been set up by another player under Social > Challenges.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", "faqQuestion11": "Hvordan rapporterer jeg en fejl, eller foreslår en ny funktion?", "iosFaqAnswer11": "You can report a bug, request a feature, or send feedback under Menu > Report a Bug and Menu > Send Feedback! We'll do everything we can to assist you.", "webFaqAnswer11": "Bug reports are collected on GitHub. Go to [Help > Report a Bug](https://github.com/HabitRPG/habitrpg/issues/2760) and follow the instructions. Don't worry, we'll get you fixed up soon!\n

\n Feature requests are collected on Trello. Go to [Help > Request a Feature](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) and follow the instructions. Ta-da!", + "faqQuestion12": "How do I battle a World Boss?", + "iosFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", + "webFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n

\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n

\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n

\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", "iosFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the Tavern chat under Menu > Tavern! We're happy to help.", "webFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the [Newbies Guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help." } \ No newline at end of file diff --git a/common/locales/da/front.json b/common/locales/da/front.json index 94e1002540..be59bc0e86 100644 --- a/common/locales/da/front.json +++ b/common/locales/da/front.json @@ -74,7 +74,7 @@ "infhQuote": "[Habitica] har virkelig hjulpet mig med at indføre struktur i min studietid på universitetet.", "invalidEmail": "Det kræver en valid emailadresse for at få nulstillet dit kodeord.", "irishfeet123Quote": "Jeg havde en forfærdelig vane med ikke at rydde ud efter jeg havde spist. Jeg efterlod tallerkener og glas alle vegne. Den dårlige vane har [Habitica] hjulpet mig med af med!", - "joinOthers": "Slut dig til 250.000 mennesker, der har det sjovt mens de opnår deres mål!", + "joinOthers": "Join <%= userCount %> people making it fun to achieve goals!", "kazuiQuote": "Inden jeg opdagede [Habitica] var jeg gået i stå i min afhandling. Jeg var også utilfreds med min manglende disciplin omkring huslige pligter og ting som at udvide mit ordforråd eller dykke ned i skak-teori. Det viste sig, at det holder mig motiveret at bryde disse opgaver ned i mindre Tjeklister, der er mere overskuelige.", "landingadminlink": "administrative pakker", "landingend": "Ikke overbevist endnu?", @@ -179,5 +179,14 @@ "businessInquiries": "Erhvervs-henvendelser", "merchandiseInquiries": "Merchandise-henvendelser", "marketingInquiries": "Marketing/Social Media-henvendelser", - "tweet": "Tweet" + "tweet": "Tweet", + "apps": "Apps", + "notifyAndroidApp": "Want us to notify you when the Android app is ready? Sign up for this mailing list!", + "checkOutIOSApp": "Check out our new iOS App!", + "imagine1": "Imagine if improving your life were as fun as playing a game.", + "landingCopy1": "Advance in the game by completing your real-life tasks.", + "landingCopy2": "Battle monsters with friends to stay accountable to your goals.", + "landingCopy3": "Join over <%= userCount %> people having fun as they improve their lives.", + "alreadyHaveAccount": "I already have an account!", + "getStartedNow": "Get Started Now!" } \ No newline at end of file diff --git a/common/locales/da/gear.json b/common/locales/da/gear.json index 5963183ad9..182637eb89 100644 --- a/common/locales/da/gear.json +++ b/common/locales/da/gear.json @@ -149,13 +149,19 @@ "weaponArmoireRancherLassoText": "Ranch-ejerens Lasso", "weaponArmoireRancherLassoNotes": "Lassoer: det ideelle værktøj til at drive og indfange kvæg. Øger Styrke med <%= str %>, Opfattelse med <%= per %> og Intelligens med <%= int %>. Fortryllet Klædeskab: Ranch-ejerens Sæt (Genstand 3 af 3).", "weaponArmoireMythmakerSwordText": "Mytemagersværd", - "weaponArmoireMythmakerSwordNotes": "Omend det ser simpelt ud, så har dette sværd skabt mange legendariske helte. Øger Opfattelse og Styrke med <%= attrs %> hver. Fortryllet Klædeskab: Gyldent Togasæt (Genstand 3 af 3).", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Jernhyrdestav", - "weaponArmoireIronCrookNotes": "Denne heftigt hamrede jernhyrdestav er god til at hyrde får. Øger Opfattelse og Styrke med <%= attrs %> hver. Fortryllet Klædeskab: Hornet Jernsæt (Genstand 3 af 3).", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Gylden Vingestav", "weaponArmoireGoldWingStaffNotes": "Vingerne på denne stav flagrer og drejer sig konstant. Øger alle attributter med <%= attrs %> hver. Fortryllet Klædeskab: Ikke en del af et sæt.", "weaponArmoireBatWandText": "Flagermusestav", "weaponArmoireBatWandNotes": "This wand can turn any task into a bat! Wave it about and watch them fly away. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireShepherdsCrookText": "Shepherd's Crook", + "weaponArmoireShepherdsCrookNotes": "Useful for herding gryphons. Increases Constitution by <%= con %>. Enchanted Armoire: Shepherd Set (Item 1 of 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "rustning", "armorBase0Text": "Almindeligt tøj", "armorBase0Notes": "Helt normalt tøj. Giver ingen bonusser.", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "Fjollet Festkostume", "armorSpecialBirthday2015Notes": "Tillykke med Fødselsdagen, Habitica! Brug dette Fjollede Festkostume til at fejre denne skønne dag! Giver ingen bonusser.", "armorSpecialGaymerxText": "Regnbuekrigers Rustning", - "armorSpecialGaymerxNotes": "For at fejre Pride-sæsonen og GaymerX er denne specielle rustning dekoreret med en lysende og farverig regnbue! GaymerX er en spil-messe, der fejrer LGBTQ og gaming, og den er åben for alle. Den foregår på InterContinental i San Fransisco 11-13 juli! Giver ingen bonusser.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "Elegant Kattedragt", "armorSpecialSpringRogueNotes": "Velsoigneret. Øger Opfattelse med <%= per %>. Specielt 2014 Forårsudstyr.", "armorSpecialSpringWarriorText": "Kløverståls-rustning", @@ -307,6 +313,8 @@ "armorMystery201508Notes": "Løb hurtigt som vinden i et blødt Gepardkostume! Giver ingen bonusser. August 2015 Abonnentting.", "armorMystery201509Text": "Varulvskostume", "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Steampunk-dragt", "armorMystery301404Notes": "Nydelig og elegant, selvfølgelig! Giver ingen bonusser. Februar 3015 Abonnentting.", "armorArmoireLunarArmorText": "Beroligende Måne-rustning", @@ -321,6 +329,12 @@ "armorArmoireHornedIronArmorNotes": "Denne heftigt hamrede jernrustning er næsten umulig at ødelægge. Øger Konstitution med <%= con %> og Opfattelse med <%= per %>. Fortryllet Klædeskab: Hornet Jernsæt (Genstand 2 af 3).", "armorArmoirePlagueDoctorOvercoatText": "Pestlægefrakke", "armorArmoirePlagueDoctorOvercoatNotes": "En autentisk frakke båret af de læger, der bekæmper udsættelsespesten! Øger Intelligens med <%= int %>, Styrke med <%= str %>, og Konstitution med <%= con %>. Fortryllet Klædeskab: Pestlægesæt (Genstand 3 af 3).", + "armorArmoireShepherdRobesText": "Shepherd Robes", + "armorArmoireShepherdRobesNotes": "The fabric is cool and breathable, perfect for a hot day herding gryphons in the desert. Increases Strength and Perception by <%= attrs %> each. Enchanted Armoire: Shepherd Set (Item 2 of 3).", + "armorArmoireRoyalRobesText": "Royal Robes", + "armorArmoireRoyalRobesNotes": "Wonderful ruler, rule all day long! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 3 of 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "hovedbeklædning", "headBase0Text": "Ingen Hjelm", "headBase0Notes": "Ingen hovedbeklædning", @@ -441,7 +455,7 @@ "headSpecialFall2015HealerText": "Frøhat", "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", "headSpecialGaymerxText": "Regnbuekrigerhjelm", - "headSpecialGaymerxNotes": "For at fejre Pride-sæsonen og GaymerX er denne specielle hjelm dekoreret med en lysende og farverig regnbue! GaymerX er en spil-messe, der fejrer LGBTQ og gaming, og den er åben for alle. Den foregår på InterContinental i San Fransisco 11-13 juli! Giver ingen bonusser.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "Bevinget Hjelm", "headMystery201402Notes": "Denne bevingede krone gør bæreren hurtig som vinden! Giver ingen bonusser. Februar 2014 Abonnentting.", "headMystery201405Text": "Sindets Flamme", @@ -464,6 +478,8 @@ "headMystery201508Notes": "Denne rare gepardhat er meget blød. Giver ingen bonusser. August 2015 Abonnentting.", "headMystery201509Text": "Varulvmaske", "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 Subscriber Item.", "headMystery301404Text": "Smart Tophat", "headMystery301404Notes": "En smart tophat for de fineste folk! Giver ingen bonusser. Januar 3015 Abonnentting.", "headMystery301405Text": "Simpel Tophat", @@ -481,7 +497,7 @@ "headArmoireBlueHairbowText": "Blå Hårsløjfe", "headArmoireBlueHairbowNotes": "Bliv skarpsindig, sej og smart når du har denne smukke Blå Hårsløjfe på! Øger Opfattelse med <%= per %>, Konstitution med <%= con %>, og Intelligens med <%= int %>. Fortryllet Klædeskab: Ikke del af et sæt.", "headArmoireRoyalCrownText": "Royal Krone", - "headArmoireRoyalCrownNotes": "Hurra for herskeren, stor og stærk! Øger Styrke med <%= str %>. Fortryllet Klædeskab: Ikke en del af et sæt.", + "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Royal Set (Item 1 of 3).", "headArmoireGoldenLaurelsText": "Gyldne Laurbær", "headArmoireGoldenLaurelsNotes": "Disse gyldne laurbær belønner dem, der har overvundet dårlige vaner. Øger Opfattelse og Konstitution med <%= attrs %> hver. Fortryllet Klædeskab: Gyldent Togasæt (Genstand 2 af 3).", "headArmoireHornedIronHelmText": "Hornet Jernhjelm", @@ -496,6 +512,12 @@ "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", "headArmoireOrangeCatText": "Orange Kattehat", "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireBlueFloppyHatText": "Blue Floppy Hat", + "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireShepherdHeaddressText": "Shepherd Headdress", + "headArmoireShepherdHeaddressNotes": "Sometimes the gryphons that you herd like to chew on this headdress, but it makes you seem more intelligent nonetheless. Increases Intelligence by <%= int %>. Enchanted Armoire: Shepherd Set (Item 3 of 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "skjoldhånds-udstyr", "shieldBase0Text": "Intet Skjoldhånds-udstyr", "shieldBase0Notes": "Intet skjold eller andet våben.", @@ -579,6 +601,8 @@ "shieldArmoireGladiatorShieldNotes": "For at være en gladiator skal du ikke bare være... whatever, bare slå dem med dit skjold. Øger Konstitution med <%= con %> og Styrke med <%= str %>. Fortryllet Klædeskab: Gladiatorsæt (Genstand 3 af 3)", "shieldArmoireMidnightShieldText": "Midnatsskjold", "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "shieldArmoireRoyalCaneText": "Royal Cane", + "shieldArmoireRoyalCaneNotes": "Hooray for the ruler, worthy of song! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 2 of 3).", "back": "Ryg-udstyr", "backBase0Text": "Intet Ryg-udstyr", "backBase0Notes": "Intet Ryg-udstyr.", @@ -592,6 +616,8 @@ "backMystery201504Notes": "Brum brum brum. Flyv fra opgave til opgave. Giver ingen bonusser. April 2015 Abonnentting.", "backMystery201507Text": "Sejt Surfbræt", "backMystery201507Notes": "Surf fra Forhalingens Kaj og rid på bølgerne i Ufærdighedsbugten! Giver ingen bonusser. Juli 2015 Abonnentting.", + "backMystery201510Text": "Goblin Tail", + "backMystery201510Notes": "Prehensile and powerful! Confers no benefit. October 2015 Subscriber Item.", "backSpecialWonderconRedText": "Mægtig Kappe", "backSpecialWonderconRedNotes": "Rasler af styrke og skønhed. Giver ingen bonusser. Specielt Messeudstyr.", "backSpecialWonderconBlackText": "Lusket Kappe", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "Dette kraftige gevir skifter farve med bladene. Giver ingen bonusser. September 2014 Abonnentting.", "headAccessoryMystery201502Text": "Tankevinger", "headAccessoryMystery201502Notes": "Lad din fantasi flyve frit! Giver ingen bonusser. Februar 2015 Abonnentting.", + "headAccessoryMystery201510Text": "Goblin Horns", + "headAccessoryMystery201510Notes": "These fearsome horns are slightly slimy. Confers no benefit. October 2015 Subscriber Item.", "headAccessoryMystery301405Text": "Hoved-goggles", "headAccessoryMystery301405Notes": "\"Briller er til øjnene,\" sagde de. \"Ingen vil have briller, som du kun kan have på hovedet,\" sagde de. Ha! Dér viste du dem! Giver ingen bonusser. August 3015 Abonnentting.", "eyewear": "Øjenbeklædning", diff --git a/common/locales/da/generic.json b/common/locales/da/generic.json index 038d43941f..856fa311ba 100644 --- a/common/locales/da/generic.json +++ b/common/locales/da/generic.json @@ -28,7 +28,7 @@ "market": "Marked", "subscriberItem": "Mystisk Vare", "newSubscriberItem": "Ny Mystisk Vare", - "subscriberItemText": "Hver måned får abonnenter en mystisk vare. Denne bliver normalt frigivet ca. en uge før slutningen af måneden. Se 'Mystery Item' siden på Wikien for den præcise dato.", + "subscriberItemText": "Each month, subscribers will receive a mystery item. This is usually released about one week before the end of the month. See the wiki's 'Mystery Item' page for more information.", "all": "Alle", "none": "Ingen", "or": "Eller", @@ -69,8 +69,9 @@ "habiticaDayPluralText": "Fejrede Habiticas Navnedag <%= number %> gange! Tak for at være en fantastisk bruger.", "achievementDilatory": "Frelser af Forhaling", "achievementDilatoryText": "Var med til at vinde over Den Frygtelige Drag'e af Forhaling i 2014 Sommer Plaske-Eventet!", - "costumeContest": "2014 Kostumekonkurrence", - "costumeContestText": "Deltog i Halloweenkostumekonkurrencen 2014. See nogen af kostumerne på blog.habitica.com/tagged/cosplay!", + "costumeContest": "Costume Contestant", + "costumeContestText": "Participated in the Habitoween Costume Contest. See some of the entries on the Habitica blog!", + "costumeContestTextPlural": "Participated in <%= number %> Habitoween Costume Contests. See some of the entries on the Habitica blog!", "memberSince": "- Medlem siden", "lastLoggedIn": "- Sidst logget ind", "notPorted": "Denne funktion er ikke blevet konvertet fra den originale side endnu.", @@ -79,6 +80,7 @@ "errorUpCase": "FEJL:", "newPassSent": "Nyt kodeord tilsendt.", "serverUnreach": "Serveren er p.t. utilgængelig.", + "requestError": "Yikes, an error occurred! Please reload the page, your last action may not have been saved correctly.", "seeConsole": "Rapporter under Hjælp > Rapporter en Fejl, hvis fejlen fortsætter. Hvis du er vant til konsollen i din browser, må du gerne inkludere eventuelle fejlbeskeder.", "error": "Fejl", "menu": "Menu", @@ -110,9 +112,9 @@ "December": "December", "dateFormat": "Datoformat", "achievementStressbeast": "Frelser af Stoiskro", - "achievementStressbeastText": "Helped defeat the Abominable Stressbeast during the 2014 Winter Wonderland Event!", - "achievementBurnout": "Savior of the Flourishing Fields", - "achievementBurnoutText": "Helped defeat Burnout and restore the Exhaust Spirits during the 2015 Fall Festival Event!", + "achievementStressbeastText": "Var med til at overvinde Det Afskyelige Stressbæst i 2014 Vintereventyr-eventet!", + "achievementBurnout": "Trivselsmarkernes Redning", + "achievementBurnoutText": "Var med til at overvinde Udbrand og genskabe Udmattelsesånderne i Efterårsfestival-eventet 2015!", "checkOutProgress": "Tjek mine fremskridt i Habitica!", "cardReceived": "Modtog et kort!", "cardReceivedFrom": "<%= cardType %> fra <%= userName %>", @@ -133,5 +135,17 @@ "thankyou2": "Tusind tak!", "thankyou3": "Jeg er virkelig taknemmelig - tak!", "thankyouCardAchievementTitle": "Temmelig Taknemmelig", - "thankyouCardAchievementText": "Tak for at være taknemmelig! Har sendt eller modtaget <%= cards %> Takkekort." + "thankyouCardAchievementText": "Tak for at være taknemmelig! Har sendt eller modtaget <%= cards %> Takkekort.", + "streakAchievement": "You earned a streak achievement!", + "firstStreakAchievement": "21-Day Streak", + "streakAchievementCount": "<%= streaks %> 21-Day Streaks", + "twentyOneDays": "You've completed your Daily for 21 days in a row!", + "dontBreakStreak": "Amazing job. Don't break the streak!", + "dontStop": "Don't Stop Now!", + "levelUpShare": "I leveled up in Habitica by improving my real-life habits!", + "questUnlockShare": "I unlocked a new quest in Habitica!", + "hatchPetShare": "I hatched a new pet by completing my real-life tasks!", + "raisePetShare": "I raised a pet into a mount by completing my real-life tasks!", + "wonChallengeShare": "I won a challenge in Habitica!", + "achievementShare": "I earned a new achievement in Habitica!" } \ No newline at end of file diff --git a/common/locales/da/groups.json b/common/locales/da/groups.json index 3e11aebe27..763c258944 100644 --- a/common/locales/da/groups.json +++ b/common/locales/da/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "Forlad Kroen", "innCheckIn": "Slap af på Kroen", "innText": "Du hviler på Kroen. Mens du hviler på Kroen tager du ikke skade fra Daglige, men de bliver stadig nulstillet hver dag. Advarsel: Hvis du deltager i en Boss Quest vil du stadig tage skade fra de Daglige de andre i gruppen ikke får udført, med mindre de også er på Kroen. Derudover kan du ikke skade Bossen eller samle ting før du forlader Kroen.", + "innTextBroken": "You're resting in the Inn, I guess... While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day... If you are participating in a Boss Quest, the Boss will still damage you for your party mates' missed Dailies... unless they are also in the Inn... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn... so tired...", "lfgPosts": "Leder efter Gruppe (Gruppe Søges) Poster", "tutorial": "Vejledning", "glossary": "Ordliste", @@ -145,5 +146,6 @@ "partyEmpty": "Du er det eneste medlem i din gruppe. Invitér dine venner!", "partyChatEmpty": "Din gruppechat er tom! Skriv en besked i boksen ovenover for at begynde at chatte.", "guildChatEmpty": "Denne klanchat er tom! Skriv en besked i boksen ovenover for at begynde at chatte.", - "possessiveParty": "<%= name %>s Gruppe" + "possessiveParty": "<%= name %>s Gruppe", + "requestAcceptGuidelines": "If you would like to post messages in the Tavern or any party or guild chat, please first read our <%= linkStart %>Community Guidelines<%= linkEnd %> and then click the button below to indicate that you accept them." } \ No newline at end of file diff --git a/common/locales/da/limited.json b/common/locales/da/limited.json index 55a7ee02f9..2b45c400d1 100644 --- a/common/locales/da/limited.json +++ b/common/locales/da/limited.json @@ -21,6 +21,7 @@ "valentineCardAchievementText": "Åååh, du og din ven kan virkelig godt lide hinanden! Sendte eller modtog <%= cards %> Valentinsdagskort.", "polarBear": "Isbjørn", "turkey": "Kalkun", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "Isbjørneunge", "jackolantern": "Græskarlygte", "seasonalShop": "Sæson-marked", @@ -29,7 +30,8 @@ "seasonalShopClosedText": "Sæson-markedet er lukket! Jeg ved ikke hvor Sæson-heksen er lige nu, men hun kommer sikkert tilbage til den næste Store Fest!", "seasonalShopText": "Velkommen til Sæson-markedet! Vi har forårs-sæson godter lige nu. Alt her kan købes under Forårsflirt-eventet hvert år, men vi holder kun åbent indtil 30. april, så husk at købe ind nu, ellers må du vente et helt år for igen at kunne købe disse ting!", "seasonalShopSummerText": "Velkommen til Sæson-markedet! Vi har sommer-sæson godter lige nu. Alt her kan købes under Sommerplask-eventet hvert år, men vi holder kun åbent indtil 31. juli, så husk at købe ind nu, ellers må du vente et helt år for igen at kunne købe disse ting!", - "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31, so be sure to stock up now, or you'll have to wait a year to buy these items again!", + "seasonalShopFallText": "Velkommen til Sæson-markedet! Vi har efterårs-sæson godter lige nu. Alting her kan købes under Efterårsfestival-eventet hvert år, men vi holder kun åbent indtil 31. oktober, så husk at købe ind nu, ellers må du vente et helt år for igen at kunne købe disse ting!", + "seasonalShopFallTextBroken": "Oh.... Welcome to the Seasonal Shop... We're stocking autumn Seasonal Edition goodies, or something... Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31... I guess you should to stock up now, or you'll have to wait... and wait... and wait... *sigh*", "seasonalShopRebirth": "Hvis du har brugt Genfødselskuglen kan du genkøbe dette udstyr i Belønningskolonnen efter du har fået adgang til Udstyrsbutikken. I starten vil du kun kunne købe tingene, der passer til din nuværende klasse (Kriger som standard), men frygt ej, de andre klasse-specifikke varer bliver tilgængelige hvis du skifter til den klasse.", "candycaneSet": "Slikstok (Magiker)", "skiSet": "Ski-morder (Slyngel)", diff --git a/common/locales/da/messages.json b/common/locales/da/messages.json index 430a74dc09..1941c9f658 100644 --- a/common/locales/da/messages.json +++ b/common/locales/da/messages.json @@ -30,5 +30,26 @@ "messageAlreadyOwnGear": "Du ejer allerede denne ting. Tag det på ved at gå til udstyrssiden.", "armoireEquipment": "<%= image %> Du har fundet sjældent Udstyr i Klædeskabet: <%= dropText %>! Fantastisk!", "armoireFood": "<%= image %> Du roder rundt i bunden af Klædeskabet. Pludselig finder du <%= dropText %>. Gad vide hvad den laver her?", - "armoireExp": "Du kæmper med Klædeskabet og får Erfaring. Sådan!" + "armoireExp": "Du kæmper med Klædeskabet og får Erfaring. Sådan!", + "messageInsufficientGems": "Not enough gems!", + "messageAuthPasswordMustMatch": ":password and :confirmPassword don't match", + "messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword required", + "messageAuthUsernameTaken": "Username already taken", + "messageAuthEmailTaken": "Email already taken", + "messageAuthNoUserFound": "No user found.", + "messageAuthMustBeLoggedIn": "You must be logged in.", + "messageAuthMustIncludeTokens": "You must include a token and uid (user id) in your request", + "messageGroupNotFound": "Group not found or you don't have access.", + "messageGroupAlreadyInParty": "Already in a party, try refreshing.", + "messageGroupOnlyLeaderCanUpdate": "Only the group leader can update the group!", + "messageGroupRequiresInvite": "Can't join a group you're not invited to.", + "messageGroupCannotRemoveSelf": "You cannot remove yourself!", + "messageGroupChatBlankMessage": "You cannot send a blank message", + "messageGroupChatLikeOwnMessage": "Can't like your own message. Don't be that person.", + "messageGroupChatFlagOwnMessage": "Can't report your own message.", + "messageGroupChatFlagAlreadyReported": "You have already reported this message", + "messageGroupChatNotFound": "Message not found!", + "messageGroupChatAdminClearFlagCount": "Only an admin can clear the flag count!", + "messageUserOperationProtected": "path `<%= operation %>` was not saved, as it's a protected path.", + "messageUserOperationNotFound": "<%= operation %> operation not found" } \ No newline at end of file diff --git a/common/locales/da/noscript.json b/common/locales/da/noscript.json new file mode 100644 index 0000000000..6057268ef2 --- /dev/null +++ b/common/locales/da/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Alas! Your browser doesn't have JavaScript enabled", + "jsDisabledHeadingFull": "Alas! Your browser doesn't have JavaScript enabled and without it, Habitica can't work properly", + "jsDisabledText": "Habitica can't properly display the site without it!", + "jsDisabledLink": "Please enable JavaScript to continue!" +} \ No newline at end of file diff --git a/common/locales/da/npc.json b/common/locales/da/npc.json index eee9ccb7d6..c72dcd66ed 100644 --- a/common/locales/da/npc.json +++ b/common/locales/da/npc.json @@ -7,15 +7,19 @@ "daniel": "Daniel", "danielText": "Velkommen til Værtshuset! Hæng ud og mød de lokale. Hvis du har brug for at slappe af (ferie? sygdom?), så er der plads på Kroen. Mens du er tjekket ind på Kroen vil dine Daglige ikke skade dig, men du kan stadig markere dem som udført.", "danielText2": "Advarsel: Hvis du deltager i en Boss-quest vil bossen stadig skade dig for de andre gruppemedlemmers oversprungne Daglige! Desuden kan du ikke skade Bossen (eller samle ting) før du tjekker ud af Kroen.", + "danielTextBroken": "Welcome to the Tavern... I guess... If you need to rest, I'll set you up at the Inn... While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off... if you have the energy...", + "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": "Købmanden Alexander", "welcomeMarket": "Velkommen til Markedet! Her kan du købe æg og eliksirer, der er svære at finde, eller sælge dine overskydende! Bestil nyttige tjenester! Kom og se hvad vi har at tilbyde.", - "sellForGold": "Sælg <%= item %> for <%= gold %> Guld", - "sellEggForGold": "Sælg <%= itemType %> Æg for <%= gold %> Guld", - "sellPotionForGold": "Sælg <%= itemType %> Eliksir for <%= gold %> Guld", + "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?", + "sellForGold": "Sell it for <%= gold %> Gold", "buyGems": "Køb Ædelsten", "justin": "Justin", "ian": "Ian", "ianText": "Velkommen til Quest-butikken! Her kan du aktivere Quest-skriftruller for at kæmpe mod monstre sammen med dine venner. Husk at gennemse det fine udvalg af Quest-skriftruller til højre.", + "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...", "USD": "US$", "newStuff": "Nye Ting", "cool": "Fortæl Mig Senere", diff --git a/common/locales/da/pets.json b/common/locales/da/pets.json index b4cb9716a7..78bd44534d 100644 --- a/common/locales/da/pets.json +++ b/common/locales/da/pets.json @@ -18,7 +18,7 @@ "mammoth": "Ulden Mammut", "orca": "Spækhugger", "royalPurpleGryphon": "Royal Lilla Grif", - "phoenix": "Phoenix", + "phoenix": "Føniks", "rarePetPop1": "Klik på den gyldne pote for at læse om, hvordan du kan opnå dette sjældne kæledyr ved at bidrage til Habitica!", "rarePetPop2": "Sådan får du dette kæledyr!", "potion": "<%= potionType %> Eliksir", @@ -58,8 +58,16 @@ "firstDrop": "Du har nu adgang til dropsystemet! Når du nu fuldender opgaver, har du en lille chance for at finde en ting, bl.a. æg, eliksirer og mad. Du har lige fundet et <%= eggText %>-æg! <%= eggNotes %>", "useGems": "Hvis du gerne vil have et bestemt kæledyr, men ikke vil vente på at du finder det, så brug ædelsten i Inventar > Marked til at købe det!", "hatchAPot": "Vil du udruge et <%= potion %> <%= egg %>?", + "hatchedPet": "You hatched a <%= potion %> <%= egg %>!", + "displayNow": "Display Now", + "displayLater": "Display Later", + "earnedCompanion": "With all your productivity, you've earned a new companion. Feed it to make it grow!", "feedPet": "Giv <%= text %> til <%= name %>?", "useSaddle": "Giv <%= pet %> sadel på?", + "raisedPet": "You grew a <%= pet %>!", + "earnedSteed": "By completing your tasks, you've earned a faithful steed!", + "rideNow": "Ride Now", + "rideLater": "Ride Later", "petName": "<%= potion %> <%= egg %>", "mountName": "<%= potion %> <%= mount %>", "petKeyName": "Nøglen til Kennelen", diff --git a/common/locales/da/quests.json b/common/locales/da/quests.json index 85292fb757..5557b5c2d0 100644 --- a/common/locales/da/quests.json +++ b/common/locales/da/quests.json @@ -13,6 +13,7 @@ "youReceived": "Du har modtaget", "dropQuestCongrats": "Tillykke med denne quest-skriftrulle! Du kan invitere venner for at starte questen nu, eller vende tilbage til den når som helst i Inventar > Quests.", "questSend": "Ved at klikke \"Invitér\" sender du en invitation til alle gruppemedlemmer. Når alle medlemmer har accepteret eller afvist vil questen begynde. Se status under Social > Gruppe.", + "questSendBroken": "Clicking \"Invite\" will send an invitation to your party members... When all members have accepted or denied, the quest begins... See status under Social > Party...", "inviteParty": "Invitér Gruppe til Quest", "questInvitation": "Quest-invitation:", "questInvitationTitle": "Quest-invitation", @@ -24,19 +25,25 @@ "rejected": "Afvist", "pending": "Afventer", "questStart": "Når alle medlemmer har enten accepteret eller afvist vil questen begynde. Kun dem, der har klikket \"acceptér\" vil kunne deltage i questen og modtage præmierne. Hvis medlemmer afventer for længe (måske er de inaktive?) kan quest-lederen starte questen uden dem ved at klikke \"Begynd\". Quest-lederen kan også afbryde questen og få quest-skriftrullen tilbage ved at klikke \"Afbryd\"", + "questStartBroken": "Once all members have either accepted or rejected, the quest begins... Only those that clicked \"accept\" will be able to participate in the quest and receive the drops... If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\"... The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\"...", "begin": "Begynd", "bossHP": "Boss Liv", "bossStrength": "Boss-styrke", - "rage": "Rage", + "rage": "Vrede", "collect": "Saml", "collected": "Indsamlet", "collectionItems": "<%= number %> <%= items %>", "itemsToCollect": "Udstyr at Samle", "bossDmg1": "For at skade en boss skal du færdiggøre dine Daglige og Gøremål. Jo mere skade du gør på opgaver, des mere skade tager Bossen (færdiggørelse af røde opgaver, Magikeres fortryllelser, Krigeres angreb osv.). Bossen vil give skade til alle quest-deltagere for hver Daglig du springer over (ganget med bossens Styrke) oveni din sædvanlige skade, så hold din gruppe i live ved at færdiggøre dine Daglige! Al skade på og fra bossen bliver opgjort ved cron (når din dag skifter).", "bossDmg2": "Kun deltagere vil kæmpe mod bossen og få del i quest-byttet.", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "Each completed Daily and To-Do and each positive Habit hurts the boss... Hurt it more with redder tasks or Brutal Smash and Burst of Flames... The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies... All damage to and from a boss is tallied on cron (your day roll-over)...", + "bossDmg2Broken": "Only participants will fight the boss and share in the quest loot...", + "tavernBossInfo": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "tavernBossInfoBroken": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss... Incomplete Dailies fill the Exhaust Strike Bar... When the Exhaust Strike bar is full, the World Boss will attack an NPC... A World Boss will never damage individual players or accounts in any way... Only active accounts not resting in the Inn will have their tasks tallied...", "bossColl1": "Udfør dine positive opgaver for at samle ting. Quest-ting dropper som normale ting, men du vil ikke se drops før næste dag, hvor alt hvad du har fundet vil blive opgjort og lagt i bunken.", "bossColl2": "Kun deltagere kan samle ting og få del i quest-byttet.", + "bossColl1Broken": "To collect items, do your positive tasks... Quest items drop just like normal items; however, you won't see the drops until the next day, then everything you've found will be tallied up and contributed to the pile...", + "bossColl2Broken": "Only participants can collect items and share in the quest loot...", "abort": "Afbryd", "leaveQuest": "Forlad Quest", "sureLeave": "Er du sikker på at du vil forlade den aktive quest? Alt dit questfremskridt vil gå tabt.", @@ -63,10 +70,13 @@ "sureAbort": "Er du sikker på at du vil afbryde missionen? Det vil afbryde den for alle i gruppen og al fremskridt vil gå tabt. Quest-skriftrullen vil blive returneret til quest-lederen.", "doubleSureAbort": "Er du helt sikker? Tjek lige at de ikke vil hade dig for evigt!", "questWarning": "Hvis nye spillere melder sig ind i gruppen før questen begynder vil de også modtage en invitation. Dog kan nye medlemmer ikke deltage i questen hvis den allerede er startet.", + "questWarningBroken": "If new players join the party before the quest starts, they will also receive an invitation... However once the quest has started, no new party members can join the quest...", "bossRageTitle": "Vrede", "bossRageDescription": "Når denne bar bliver fyldt vil bossen udføre et specielt angreb!", "startAQuest": "START EN QUEST", "startQuest": "Start Quest", "whichQuestStart": "Hvilken quest vil du starte?", - "getMoreQuests": "Få flere quests" + "getMoreQuests": "Få flere quests", + "unlockedAQuest": "You unlocked a quest!", + "leveledUpReceivedQuest": "You leveled up to Level <%= level %> and received a quest scroll!" } \ No newline at end of file diff --git a/common/locales/da/questscontent.json b/common/locales/da/questscontent.json index 07cb307bc3..1bcc27f969 100644 --- a/common/locales/da/questscontent.json +++ b/common/locales/da/questscontent.json @@ -250,16 +250,28 @@ "questHorseBoss": "Ride-Mare", "questHorseDropHorseEgg": "Hest (Æg)", "questHorseUnlockText": "Åbner for køb af hesteæg på Markedet", - "questBurnoutText": "Burnout and the Exhaust Spirits", + "questBurnoutText": "Udbrand og Udmattelsesånderne", "questBurnoutNotes": "It is well past midnight, still and stiflingly hot, when Redphoenix and scout captain Kiwibot abruptly burst through the city gates. \"We need to evacuate all the wooden buildings!\" Redphoenix shouts. \"Hurry!\"

Kiwibot grips the wall as she catches her breath. \"It's draining people and turning them into Exhaust Spirits! That's why everything was delayed. That's where the missing people have gone. It's been stealing their energy!\"

\"'It'?'\" asks Lemoness.

And then the heat takes form.

It rises from the earth in a billowing, twisting mass, and the air chokes with the scent of smoke and sulphur. Flames lick across the molten ground and contort into limbs, writhing to horrific heights. Smoldering eyes snap open, and the creature lets out a deep and crackling cackle.

Kiwibot whispers a single word.

\"Burnout.\"", "questBurnoutCompletion": "Burnout is DEFEATED!

With a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.

Ian, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!

\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!

One of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"

Her tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"

She claps her hands. \"Now - let's celebrate!\"", "questBurnoutCompletionChat": "`Burnout is DEFEATED!`\n\nWith a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.\n\nIan, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!\n\n\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!\n\nOne of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"\n\nHer tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"\n\nShe claps her hands. \"Now - let's celebrate!\"\n\nAll Habiticans receive:\n\nPhoenix Pet\nPhoenix Mount\nAchievement: Savior of the Flourishing Fields\nBasic Candy\nVanilla Candy\nSand Candy\nCinnamon Candy\nChocolate Candy\nRotten Candy\nSour Pink Candy\nSour Blue Candy\nHoney Candy", - "questBurnoutBoss": "Burnout", - "questBurnoutBossRageTitle": "Exhaust Strike", - "questBurnoutBossRageDescription": "When this gauge fills, Burnout will unleash its Exhaust Strike on Habitica!", - "questBurnoutDropPhoenixPet": "Phoenix (Pet)", - "questBurnoutDropPhoenixMount": "Phoenix (Mount)", + "questBurnoutBoss": "Udbrand", + "questBurnoutBossRageTitle": "Udmattelsesangreb", + "questBurnoutBossRageDescription": "Når denne måler fyldes helt vil Udbrand udføre sit Udmattelsesangreb på Habitica!", + "questBurnoutDropPhoenixPet": "Føniks (Kæledyr)", + "questBurnoutDropPhoenixMount": "Føniks (Ridedyr)", "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!", + "questFrogText": "Swamp of the Clutter Frog", + "questFrogNotes": "As you and your friends are slogging through the Swamps of Stagnation, @starsystemic points at a large sign. \"Stay on the path -- if you can.\"

\"Surely that isn't hard!\" @RosemonkeyCT says. \"It's broad and clear.\"

But as you continue, you notice that path is gradually overtaken by the muck of the swamp, laced with bits of strange blue debris and clutter, until it's impossible to proceed.

As you look around, wondering how it got this messy, @Jon Arjinborn shouts, \"Look out!\" An angry frog leaps from the sludge, clad in dirty laundry and lit by blue fire. You will have to overcome this poisonous Clutter Frog to progress!", + "questFrogCompletion": "The frog cowers back into the muck, defeated. As it slinks away, the blue slime fades, leaving the way ahead clear.

Sitting in the middle of the path are three pristine eggs. \"You can even see the tiny tadpoles and through the clear casing!\" @Breadstrings says. \"Here, you should take them.\"", + "questFrogBoss": "Clutter Frog", + "questFrogDropFrogEgg": "Frog (Egg)", + "questFrogUnlockText": "Unlocks purchasable Frog eggs in the Market", + "questSnakeText": "The Serpent of Distraction", + "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveler astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", + "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", + "questSnakeBoss": "Serpent of Distraction", + "questSnakeDropSnakeEgg": "Snake (Egg)", + "questSnakeUnlockText": "Unlocks purchasable Snake eggs in the Market" } \ No newline at end of file diff --git a/common/locales/da/rebirth.json b/common/locales/da/rebirth.json index de0930b444..6669c9aab5 100644 --- a/common/locales/da/rebirth.json +++ b/common/locales/da/rebirth.json @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "Du får også en Præstation for at begynde et nyt eventyr!", "beReborn": "Bliv Genfødt", "rebirthAchievement": "Du har begyndt et nyt eventyr! Dette er Genfødsel nummer <%= number %> for dig, og det højeste Niveau du har opnået er <%= level %>. Hvis du vil slå denne Præstation skal du først begynde et nyt eventyr, når du har opnået et endnu højere Niveau!", + "rebirthAchievement100": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is 100 or higher. To stack this Achievement, begin your next new adventure when you've reached at least 100!", "rebirthBegan": "Begyndte et Nyt Eventyr", "rebirthText": "Begyndte <%= rebirths %> Nye Eventyr", "rebirthOrb": "Brugte en Genfødselskugle til at starte forfra efter at have opnået Niveau", + "rebirthOrb100": "Used an Orb of Rebirth to start over after attaining Level 100 or higher", "rebirthPop": "Begynd en ny karakter på Niveau 1 mens du beholder præstationer, samlerobjekter, og opgaver med historik.", "rebirthName": "Genfødselskugle", "reborn": "Genfødt, højeste Niveau <%= reLevel %>" diff --git a/common/locales/da/settings.json b/common/locales/da/settings.json index 894c17cd33..17487f05e8 100644 --- a/common/locales/da/settings.json +++ b/common/locales/da/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "Hvis valgt vil listen af opgavetags være skjult når du åbner en opgave for at rette den.", "startAdvCollapsed": "Avancerede Indstillinger i opgaver starter lukket", "startAdvCollapsedPop": "Hvis valgt vil Avancerede Indstillinger være skjult når du åbner en opgave for at rette den.", + "dontShowAgain": "Don't show this again", + "suppressLevelUpModal": "Don't show popup when gaining a level", + "suppressHatchPetModal": "Don't show popup when hatching a pet", + "suppressRaisePetModal": "Don't show popup when raising a pet into a mount", + "suppressStreakModal": "Don't show popup when attaining a Streak achievement", "showTour": "Vis Rundvisning", "restartTour": "Genstart rundvisningen fra da du blev medlem af Habitica.", "showBailey": "Vis Bailey", @@ -81,7 +86,6 @@ "emailChange1": "For at ændre din email-adresse bedes du sende en email til", "emailChange2": "admin@habitica.com", "emailChange3": "hvor du inkluderer både din gamle og nye email-adresse, samt tid BrugerID", - "username": "Loginnavn", "usernameOrEmail": "Loginnavn eller Email", "email": "Email", "registeredWithFb": "Registreret via Facebook", @@ -89,7 +93,7 @@ "loginNameDescription2": "Bruger->Profil", "loginNameDescription3": "for at ændre det navn, der vises på din avatar og i dine chatbeskeder.", "emailNotifications": "Mail-notifikationer", - "wonChallenge": "Du vandt en Udfordring", + "wonChallenge": "You won a Challenge!", "newPM": "Modtaget Privatbesked", "giftedGems": "Ædelstensgave", "giftedGemsInfo": "<%= amount %> Ædelsten - af <%= name %>", @@ -118,5 +122,29 @@ "promoCode": "Promo-kode", "promoCodeApplied": "Promo-kode anvendt. Tjek dit inventar", "promoPlaceholder": "Indtast Promo-kode", - "displayInviteToPartyWhenPartyIs1": "Vis Invitér til Gruppe-knap når gruppen har 1 medlem." + "displayInviteToPartyWhenPartyIs1": "Vis Invitér til Gruppe-knap når gruppen har 1 medlem.", + "saveCustomDayStart": "Save Custom Day Start", + "registration": "Registration", + "addLocalAuth": "Add local authentication:", + "generateCodes": "Generate Codes", + "generate": "Generate", + "getCodes": "Get Codes", + "webhooks": "Webhooks", + "enabled": "Enabled", + "webhookURL": "Webhook URL", + "add": "Add", + "buyGemsGoldCap": "Cap raised to <%= amount %>", + "mysticHourglass": "<%= amount %> Mystic Hourglass", + "mysticHourglassText": "Mystic Hourglasses allow purchasing a previous month's Mystery Item set.", + "purchasedPlanId": "Recurring $<%= price %> each <%= months %> Month(s) (<%= plan %>)", + "purchasedPlanExtraMonths": "You have <%= months %> months of subscription credit.", + "consecutiveSubscription": "Consecutive Subscription", + "consecutiveMonths": "Consecutive Months:", + "gemCapExtra": "Gem Cap Extra:", + "mysticHourglasses": "Mystic Hourglasses:", + "paypal": "PayPal", + "amazonPayments": "Amazon Payments", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/da/subscriber.json b/common/locales/da/subscriber.json index bec48ed649..56a793832c 100644 --- a/common/locales/da/subscriber.json +++ b/common/locales/da/subscriber.json @@ -60,7 +60,7 @@ "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> og <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitle": "Mystiske Tidsrejsende", "timeTravelersPopoverNoSub": "Du skal bruge et Mystisk Timeglas for at hidkalde de Mystiske Tidsrejsende! <%= linkStart %>Abonnenter<%= linkEnd %> tjener et Mystisk Timeglas for hver tre måneder i streg, de abonnerer. Kom tilbage når du har et Mystisk Timeglas, så vil de Tidsrejsende hente et sjældent kæledyr, ridedyr eller et helt sæt Abonnentting til dig fra fortiden... eller måske endda fra fremtiden.", - "timeTravelersPopover": "Vi kan se du har et Mystisk Timeglas, så vi vil gerne rejse tilbage i tiden for dig! Vælg venligst hvilket kæledyr, ridedyr eller Mystisk Sæt du vil have. Du kan se en liste af tidligere sæt <%= linkStart %>her<%= linkEnd %>! Hvis det ikke er nok kan du måske interesseres i et af vores moderigtige futuristiske Steampunk-sæt?", + "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": "Tillykke! Du ejer allerede alting de Tidsrejsende kan få fat i. Tak for at støtte siden!", "mysticHourglassPopover": "Mystiske Timeglas giver dig adgang til at købe visse tidsbegrænsede varer, såsom tidligere måneders Abonnent-sæt og præmier fra tidligere verdensbosser.", "subUpdateCard": "Opdatér Kort", diff --git a/common/locales/da/tasks.json b/common/locales/da/tasks.json index e661b342d1..33906e3955 100644 --- a/common/locales/da/tasks.json +++ b/common/locales/da/tasks.json @@ -88,8 +88,7 @@ "fortifyText": "Forstærk vil returnere alle dine opgaver til en neutral (gul) værdi, som om du lige har tilføjet dem, og give dig fuldt Liv tilbage. Dette er godt hvis alle dine røde opgaver gør spillet for hårdt, eller alle dine blå opgaver gør det for nemt. Hvis du hellere vil starte forfra, så brug Ædelsten og bliv benådiget!", "sureDelete": "Er du sikker på, at du vil slette denne opgave?", "streakCoins": "Stribebonus!", - "pushTaskToTop": "Flyt opgave til toppen", - "pushTaskToBottom": "Flyt opgave til bunden", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "Indtast først opgavens titel.", "dailiesRestingInInn": "Du slapper af på Kroen. Dine Daglige kan IKKE skade dig, men de vil stadig blive nulstillet hver dag. Hvis du er i gang med en quest, kan du ikke give skade/samle ting før du forlader Kroen, men du kan stadig blive skadet af Bossen, hvis dine gruppemedlemmer ikke udfører deres Daglige.", "habitHelp1": "Gode Vaner er noget du ofte gør. De giver Guld og Erfaring hver gang du klikker på <%= plusIcon %>.", diff --git a/common/locales/de/backgrounds.json b/common/locales/de/backgrounds.json index a6ff35f615..1ebcba725a 100644 --- a/common/locales/de/backgrounds.json +++ b/common/locales/de/backgrounds.json @@ -112,11 +112,25 @@ "backgroundStableNotes": "Pflege Reittiere im Habitica Stall.", "backgroundTavernText": "Habitica Gasthaus", "backgroundTavernNotes": "Besuche das Habitica Gasthaus", - "backgrounds102015": "SET 17: Released October 2015", - "backgroundHarvestMoonText": "Harvest Moon", - "backgroundHarvestMoonNotes": "Cackle under the Harvest Moon.", - "backgroundSlimySwampText": "Slimy Swamp", - "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", - "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgrounds102015": "Set 17: Veröffentlich im Oktober 2015", + "backgroundHarvestMoonText": "Erntemond", + "backgroundHarvestMoonNotes": "Kichern unter der Harvest Moon.", + "backgroundSlimySwampText": "Schleimiger Sumpf", + "backgroundSlimySwampNotes": "Wate durch einen Schleimigen Sumpf. ", + "backgroundSwarmingDarknessText": "Wimmelnde Dunkelheit", + "backgroundSwarmingDarknessNotes": "Zittre in der Wimmelnden Dunkelheit.", + "backgrounds112015": "Set 18: Veröffentlicht im November 2015", + "backgroundFloatingIslandsText": "Schwebende Inseln", + "backgroundFloatingIslandsNotes": "Hüpfe über die Schwebenden Inseln.", + "backgroundNightDunesText": "Nachtdünen", + "backgroundNightDunesNotes": "Spaziere friedlich durch die Nachtdünen.", + "backgroundSunsetOasisText": "Oase im Abendrot", + "backgroundSunsetOasisNotes": "Sonne in der Oase im Abendrot.", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/de/challenge.json b/common/locales/de/challenge.json index bc634013f3..ad853d61bf 100644 --- a/common/locales/de/challenge.json +++ b/common/locales/de/challenge.json @@ -59,5 +59,9 @@ "challengeNotEnoughGems": "Du besitzt nicht genügend Edelsteine, um diesen Wettbewerb zu erstellen.", "noPermissionEditChallenge": "Du hast keine Berechtigung, um diesen Wettbewerb zu ändern.", "noPermissionDeleteChallenge": "Du hast keine Berechtigung, um diesen Wettbewerb zu löschen.", - "noPermissionCloseChallenge": "Du hast keine Berechtigung, um diesen Wettbewerb zu schließen." + "noPermissionCloseChallenge": "Du hast keine Berechtigung, um diesen Wettbewerb zu schließen.", + "congratulations": "Gratulation!", + "hurray": "Hurra!", + "noChallengeOwner": "Kein Besitzer", + "noChallengeOwnerPopover": "Dieser Wettbewerb hat keinen Besitzer, da der Spieler, der den Wettbewerb erstellt hat, sein Benutzerkonto gelöscht hat." } \ No newline at end of file diff --git a/common/locales/de/character.json b/common/locales/de/character.json index 05c71c40b4..f76fb50546 100644 --- a/common/locales/de/character.json +++ b/common/locales/de/character.json @@ -19,7 +19,7 @@ "bodySlim": "Dünn", "bodyBroad": "Kräftig", "unlockSet": "Set freischalten - <%= cost %>", - "locked": "verschlossen", + "locked": "Stück", "shirts": "Shirts", "specialShirts": "Besondere Shirts", "bodyHead": "Frisuren und Haarfarben", @@ -52,6 +52,7 @@ "classEquipBonus": "Klassenbonus", "battleGear": "Kampfausrüstung", "battleGearText": "Das ist deine Kampfausrüstung; sie beeinflusst Zahlen, wenn du mit deinen Aufgaben interagierst.", + "autoEquipBattleGear": "Neue Ausrüstung automatisch verwenden", "costume": "Verkleidung", "costumeText": "Wenn Du das Aussehen einer anderen Ausrüstung Deiner Kampfausrüstung vorziehst, dann klicke auf die \"Verkleidung tragen\" Box um über Deiner Kampfausrüstung andere Ausrüstungsgegenstände zu tragen.", "useCostume": "Verkleidung tragen", @@ -64,6 +65,10 @@ "ultimGearText": "Hat auf die besten Waffen und Rüstung der folgenden Klassen aufgerüstet:", "level": "Level", "levelUp": "Aufgestiegen!", + "gainedLevel": "Du bist ein Level aufgestiegen!", + "leveledUp": "Das Erfüllen Deiner Lebensziele hat Dich auf Level <%= level %> aufsteigen lassen!", + "fullyHealed": "Du wurdest vollständig geheilt!", + "huzzah": "Hurra!", "mana": "Mana", "hp": "LP", "mp": "MP", diff --git a/common/locales/de/communityguidelines.json b/common/locales/de/communityguidelines.json index 4dfa348378..b98a9d625b 100644 --- a/common/locales/de/communityguidelines.json +++ b/common/locales/de/communityguidelines.json @@ -31,15 +31,15 @@ "commGuideHeadingPublicSpaces": "Öffentliche Orte in Habitica", "commGuidePara015": "Habitica hat zwei Arten von sozialen Bereichen: öffentlich und privat. Öffentliche Bereiche umfassen das Gasthaus, öffentliche Gilden, GitHub, Trello und das Wiki. Private Bereiche sind private Gilden, der Chat von Gruppen und private Nachrichten.", "commGuidePara016": "Wenn du dich durch die öffentlichen Orte in Habitica bewegst, gibt es ein paar allgemeine Regeln, damit jeder sicher und glücklich ist. Diese sollten für einen Abenteurer wie dich einfach sein!", - "commGuidePara017": "Respektiert einander. Sei höflich, nett und hilfsbereit. Vergiss nicht: Habiticaner haben die verschiedensten Hintergründe und haben sehr unterschiedliche Erfahrungen gemacht. Das macht Habitica so besonders! Eine Gemeinschaft aufzubauen bedeutet, sich gegenseitig zu respektieren und unsere Unterschiede genauso zu feiern wie unsere Gemeinsamkeiten. Hier sind ein paar einfache Möglichkeiten, Respekt zu zeigen:", + "commGuidePara017": "Respektiert einander. Seit höflich, nett und hilfsbereit. Vergesst nicht: Habiticaner haben die verschiedensten Hintergründe und haben sehr unterschiedliche Erfahrungen gemacht. Das macht Habitica so besonders! Eine Gemeinschaft aufzubauen bedeutet, sich gegenseitig zu respektieren und unsere Unterschiede genauso zu feiern wie unsere Gemeinsamkeiten. Hier sind ein paar einfache Möglichkeiten, Respekt zu zeigen:", "commGuideList02A": "Befolge alle allgemeinen Geschäftsbedingungen.", "commGuideList02B": "Poste bitte keine Bilder und keine Texte, die Gewalt darstellen, andere einschüchtern, oder eindeutige/andeutend sexuell sind, nichts diskriminierendes, fanatisches, rassistisches, sexistisches, keinen Hass und keine Belästigung, sowie nichts was Individuen oder Gruppen schadet. Auch nicht als Scherz. Das bezieht sowohl Sprüche als auch Stellungnahmen mit ein. Nicht jeder hat den gleichen Humor, so könnte etwas, dass Du als Witz wahrnimmst für jemand anderen verletzend sein. Attackiert eure täglichen Aufgaben, nicht einander.", "commGuideList02C": "Haltet Gespräche für alle Altersgruppen angemessen. Wir haben viele junge Habiticaner, die diese Seite benutzen! Wir wollen sie nicht ihrer Unschuld berauben oder Habiticaner an der Erreichung ihrer Ziele hindern.", "commGuideList02D": " Vermeide vulgäre Ausdrücke. Dazu gehören auch mildere, religiöse Verwünschungen, die anderweitig akzeptabel gewesen wären. Wir haben Menschen aus allen religiösen und kulturellen Hintergründen und wünschen uns, dass sich alle im öffentlichen Raum wohl fühlen. Verbale Angriffe jeder Art werden strenge Konsequenzen haben, insbesondere auch, da sie unsere Nutzungsbedingungen verletzen.", - "commGuideList02E": " Meide heftig umstrittene Diskussionen außerhalb der Back Corner. Wenn jemand deiner Meinung nach etwas unhöfliches oder schmerzliches gesagt hat, gehe nicht auf ihn ein. Ein einziges, höfliches Kommentar wie \"Dieser Witz war unangebracht\" ist in Ordnung, aber unfreundlich auf Kommentare zu reagieren steigert nur die Anspannung und macht Habitica zu einem negativem Ort. Nettigkeit und Höflichkeit helfen anderen zu verstehen von wo du kommst.", + "commGuideList02E": " Meidet heftig umstrittene Diskussionen außerhalb der Back Corner. Wenn jemand eurer Meinung nach etwas unhöfliches oder schmerzliches gesagt hat, geht nicht auf ihn ein. Ein einziges, höfliches Kommentar wie \"Dieser Witz war unangebracht\" ist in Ordnung, aber unfreundlich auf Kommentare zu reagieren steigert nur die Anspannung und macht Habitica zu einem negativem Ort. Nettigkeit und Höflichkeit helfen anderen zu verstehen von wo ihr kommt.", "commGuideList02F": "Befolge unmittelbar jegliche Anliegen der Moderatoren um eine Diskussion zu beenden oder um es zur Back Corner zu verschieben. Letzte Bemerkungen, Abschiedsworte und endgültige Fazite sollten dann abschließend an eurem \"Tisch\" in der Back Corner (höflich) abgegeben werden, falls erlaubt.", "commGuideList02G": "Denk erst mal gründlich nach bevor du wütend reagierst wenn dir jemand sagt, dass etwas was du getan oder gesagt hast ihm/ihr nicht gefallen hat. Es zeigt große Stärke, sich ehrlich bei jemandem zu entschuldigen. Wenn du findest, dass die Art, wie er/sie dir geantwortet hat unangemessen war, kontaktiere einen Mod statt ihn/sie öffentlich damit zu konfrontieren.", - "commGuideList02H": "Heftig umstrittene Konversationen sollten den Moderatoren gemeldet werden. Wenn du der Meinung bist, dass eine Diskussion anfängt auszuarten und überaus emotional, oder sogar verletzend wird, verwickle dich nicht noch weiter in das Gespräch. Schreibe stattdessen eine E-Mail an leslie@habitica.com, um es uns wissen zu lassen. Es ist unsere Aufgabe euch sicher zu halten.", + "commGuideList02H": "Heftig umstrittene Konversationen sollten den Moderatoren gemeldet werden. Wenn ihr der Meinung seit, dass eine Diskussion anfängt auszuarten und überaus emotional, oder sogar verletzend wird, verwickelt euch nicht noch weiter in das Gespräch. Schreibt stattdessen eine E-Mail an leslie@habitica.com, um es uns wissen zu lassen. Es ist unsere Aufgabe euch sicher zu halten.", "commGuideList02I": "Poste keinen Spam. Spamming ist unter anderem, aber nicht ausschließlich: das gleiche Kommentar/die gleiche Anfrage mehrmals an verschiedenen Orten posten, Links ohne Erklärung oder Kontext posten, Nachrichten ohne Sinn posten, die gleiche Nachricht mehrmals hintereinander posten. Wiederholt nach Edelsteinen oder einem Abonnement zu betteln, kann ebenfalls als Spamming betrachtet werden.", "commGuidePara019": "In privaten Orten haben Nutzer mehr Freiheiten, über alle Themen zu sprechen, die sie interessieren, aber sie dürfen trotzdem nicht die allgemeinen Geschäftsbedingungen verletzen und unter anderem auch dort keine diskriminierenden, gewalttätigen oder bedrohlichen Inhalte posten.", "commGuidePara020": "Für private Nachrichten (PNs/PMs) gibt es einige zusätzliche Richtlinien. Falls Dich jemand geblockt hat, kontaktiere ihn nicht über andere Wege, um ihn oder sie zu bitten dich nicht mehr zu blocken. Außerdem solltest Du keine PNs schicken, wenn Du Hilfe mit der Seite, also \"Support\" brauchst (allgemein zugängliche Antworten auf diese Fragen im Gasthaus oder Forum kommen der Gemeinschaft zu gute). Schließlich schicke bitte keine PNs in denen Du um Edelsteine oder ein Abonnement bettelst, dies kann als Spamming betrachtet werden.", @@ -48,7 +48,7 @@ "commGuidePara022": "Das Gasthaus ist der Treffpunkt für Habiticaner, um sich unter die Leute zu mischen. Daniel der Barkeeper hält diesen Ort sauber und Lemoness zaubert dir gerne ein Glas Limonade während du dich entspannst und chattest. Und denk dran...", "commGuidePara023": "Die Gespräche sind meist lockere Unterhaltungen oder drehen sich um Produktivität und Life Improvement.", "commGuidePara024": "Da der Gasthaus-Chat nur 200 Nachrichten halten kann ist er kein guter Ort für lange Gespräche über bestimmte Themen, besonders sensible Themen (z.B. Politik, Religion, Depression, ob Koboldjagen verboten werden sollte, usw.). Diese Gespräche sollten woanders geführt werden, z.B. in einer passenden Gilde oder in der Back Corner (mehr Information unten).", - "commGuidePara027": "Sprich im Gasthaus nicht über irgendwelche suchterzeugenden Dinge. Viele Menschen benutzen Habitica, um zu versuchen, ihre schlechten Gewohnheiten zu beenden. Zu hören, wie andere über suchterzeugende/illegale Substanzen sprechen, kann das für sie viel schwerer machen! Respektiere die anderen Gasthaus-Gäste und berücksichtige das. Dies gilt u.a. für Rauchen, Alkohol, Pornografie, Glücksspiel und Drogen.", + "commGuidePara027": "Sprecht im Gasthaus nicht über irgendwelche suchterzeugenden Dinge. Viele Menschen benutzen Habitica, um zu versuchen, ihre schlechten Gewohnheiten zu beenden. Zu hören, wie andere über suchterzeugende/illegale Substanzen sprechen, kann das für sie viel schwerer machen! Respektiert die anderen Gasthaus-Gäste und berücksichtige das. Dies gilt u.a. für Rauchen, Alkohol, Pornografie, Glücksspiel und Drogen.", "commGuideHeadingPublicGuilds": "Öffentliche Gilden", "commGuidePara029": "Öffentliche Gilden sind ziemlich ähnlich wie das Gasthaus, außer dass die Gespräche dort nicht so allgemein sind, sondern sich um ein bestimmtes Thema drehen. Der öffentliche Gildenchat sollte sich auf dieses Thema konzentrieren. Zum Beispiel könnte es sein, dass Mitglieder der Wordsmith-Gilde genervt sind, wenn sich das Gespräch plötzlich um Gärtnern statt um Schreiben dreht, und eine Drachenliebhaber-Gilde interessiert sich wahrscheinlich nicht dafür, antike Runen zu entziffern. Manche Gilden sind dabei lockerer als andere, aber versuch generell beim Thema zu bleiben!", "commGuidePara031": "Manche öffentlichen Gilden werden sensible Themen enthalten, z.B. Depression, Religion, Politik, usw. Das ist ok solang die Gespräche darüber keine der AGB oder der Regeln für öffentliche Orte brechen und solange sie beim Thema bleiben.", @@ -71,7 +71,7 @@ "commGuidePara043": "Habitica verwendet GitHub um Bugs zu verfolgen und Code beizutragen. In dieser Schmiede formen die unermüdlichen Schmiede die Features! Alle Regeln für öffentliche Orte gelten auch hier. Achte darauf, höflich zu den Schmieden zu sein - sie haben viel damit zu tun, die Seite am Laufen zu halten! Ein Hoch auf die Schmiede!", "commGuidePara044": "Folgende Benutzer sind Mitwirkende an der Habitica repo:", "commGuideHeadingWiki": "Wiki", - "commGuidePara045": " Das Habitica Wiki sammelt Informationen zur Seite. Sie beinhaltet einige Foren ähnlich wie die der Gilden auf Habitica. Daher gelten die gleichen Regeln wie an öffentlichen Orten.", + "commGuidePara045": " Das Habitica Wiki sammelt Informationen zur Seite. Es beinhaltet einige Foren ähnlich wie die der Gilden auf Habitica. Daher gelten die gleichen Regeln wie an öffentlichen Orten.", "commGuidePara046": "Das Habitica Wiki kann als Datenbank aller Dinge in Habitica angesehen werden. Sie stellt Informationen über Features der Seite, Hilfen zum Spiel, Tipps wie man Habitica helfen kann und ist zusätzlich ein Platz um die eigene Gilde oder Gruppe vorzustellen und an Umfragen teilzunehmen.", "commGuidePara047": "Da das Wiki von Wikia gehostet wird, gelten zusätzlich zu den Regeln von Habitica und der Habitica Wikiseite die Allgemeinen Geschäftsbedingungen von Wikia", "commGuidePara048": "Das Wiki ist ausschließlich eine Kollaboration aller Verfasser und dazu gelten einige zusätzliche Regeln. Diese umfassen:", @@ -139,7 +139,7 @@ "commGuidePara062": "Die E-Mail, die du bekommst, in der die Konsequenzen deiner Handlungen erklärt werden (oder bei geringfügigen Konsequenzen, die Ansage des Mods/Mitarbeiters), ist eine gute Informationsquelle. Kooperiere mit allen verhängten Einschränkungen und versuche die Voraussetzungen zu erfüllen, um mögliche Strafen wieder aufzuheben.", "commGuidePara063": "Wenn Du Deine Konsequenzen oder die Art deiner Regelverletzung nicht verstehst, frage die Mitarbeiter/Moderatoren um Hilfe, sodass du in Zukunft vermeiden kannst, Regelverletzungen zu begehen.", "commGuideHeadingContributing": "In Habitica mitwirken", - "commGuidePara064": "Habitica ist ein quell-offenes Projekt. Das heißt, dass alle Habitica gerne mit einsteigen können. Diejenigen, die das tun werden belohnt werden entsprechend den folgenden Rängen für Mithelfende:", + "commGuidePara064": "Habitica ist ein quell-offenes Projekt. Das heißt, dass alle Habiticaner gerne mit einsteigen können. Diejenigen, die das tun werden entsprechend den folgenden Rängen für Mithelfende belohnt werden:", "commGuideList12A": "Habitica-Mitwirkende(r)-Abzeichen, plus 3 Edelsteine.", "commGuideList12B": "Mitwirkende(r)-Rüstung, plus 3 Edelsteine.", "commGuideList12C": "Mitwirkende(r)-Helm, plus 3 Edelsteine.", @@ -154,7 +154,7 @@ "commGuideList13C": " Levels fangen nicht einfach \"von Neu an\". Beim Festlegen der Schwierigkeit, schauen wir auf alle deine Beiträge, sodass Leute, die ein bisschen Pixel Art machen, dann einen kleinen Bug beheben, dann noch mit der Wiki plätschern nicht weiter voranschreiten wie Leute, die hart an einer Aufgabe arbeiten. Damit bleibt alles fair!", "commGuideList13D": "Nutzer, die auf Bewährung sind können nicht zum nächsten Rang aufsteigen. Sofern Verstöße vorliegen, haben Moderatoren das Recht das Aufsteigen eines Nutzers einzuschränken. Sollte dieser Fall eintreten, wird der Benutzer immer über diese Entscheidung informiert werden und auch darüber, mit welchen Schritten er sich bewähren kann. Durch Verstöße und Bewährung können Ränge auch entzogen werden.", "commGuideHeadingFinal": "Der Letzte Absatz", - "commGuidePara067": "Hier hast du sie, tapferer Habiticaner -- die Community-Richtlinien! Wische dir den Schweiß aus dem Gesicht und gib dir einige Erfahrungspunkte fürs Durchlesen. Wenn du irgendwelche Fragen oder Anliegen bezüglich der Community-Richtlinien hast, schreibe Lemoness (leslie@habitica.com) eine Email. Sie hilft dir gerne dein Anliegen zu klären.", + "commGuidePara067": "Hier habt Ihr sie, tapfere Habiticaner -- die Community-Richtlinien! Wischt euch den Schweiß aus dem Gesicht und gebt euch einige Erfahrungspunkte fürs Durchlesen. Wenn ihr irgendwelche Fragen oder Anliegen bezüglich der Community-Richtlinien hast, schreibt Lemoness (leslie@habitica.com) eine Email. Sie hilft euch gerne euer Anliegen zu klären.", "commGuidePara068": "Nun voran, mutiger Abendteurer und besiege einige täglichen Aufgaben!", "commGuideHeadingLinks": "Nützliche Links", "commGuidePara069": "Die folgenden talentierten Künstler haben bei diesen Illustrationen mitgewirkt:", diff --git a/common/locales/de/content.json b/common/locales/de/content.json index dca8f884e2..910aa5afed 100644 --- a/common/locales/de/content.json +++ b/common/locales/de/content.json @@ -25,13 +25,13 @@ "dropEggFlyingPigAdjective": "ein launenhafter", "dropEggDragonText": "Drache", "dropEggDragonMountText": "Drache", - "dropEggDragonAdjective": "ein maechtiger", + "dropEggDragonAdjective": "ein mächtiger", "dropEggCactusText": "Kaktus", "dropEggCactusMountText": "Kaktus", "dropEggCactusAdjective": "ein stacheliger", "dropEggBearCubText": "Jungbär", "dropEggBearCubMountText": "Bär", - "dropEggBearCubAdjective": "ein tintiger", + "dropEggBearCubAdjective": "ein knuddeliger", "questEggGryphonText": "Greif", "questEggGryphonMountText": "Greif", "questEggGryphonAdjective": "ein stolzer", @@ -95,6 +95,12 @@ "questEggHorseText": "Hengst", "questEggHorseMountText": "Hengst", "questEggHorseAdjective": "ein galoppierender", + "questEggFrogText": "Frosch", + "questEggFrogMountText": "Frosch", + "questEggFrogAdjective": "ein prinzlicher", + "questEggSnakeText": "Taipan", + "questEggSnakeMountText": "Taipan", + "questEggSnakeAdjective": "ein schlängelnder", "eggNotes": "Finde einen Schlüpftrank, den du über dieses Ei gießen kannst, damit ein <%= eggAdjective(locale) %> <%= eggText(locale) %> schlüpfen kann.", "hatchingPotionBase": "Normaler", "hatchingPotionWhite": "Weißer", diff --git a/common/locales/de/contrib.json b/common/locales/de/contrib.json index 73cb0968b7..3052a270a7 100644 --- a/common/locales/de/contrib.json +++ b/common/locales/de/contrib.json @@ -1,11 +1,11 @@ { "friend": "Freund", - "friendFirst": "Wenn dein erster Beitrag angenommen wird, erhältst du ein Habitica Mitwirkende(r) Abzeichen. Im Gasthaus wird dein Name, dafür dass du ein Mitwirkender bist, stolz angezeigt. Als Belohnung für deine Bemühungen erhältst du außerdem 3 Edelsteine.", + "friendFirst": "Wenn \nDein erster Beitrag angenommen wird, erhältst Du ein Habitica Mitwirkende(r) Abzeichen. Im Gasthaus wird Dein Name, dafür dass Du ein Mitwirkender bist, stolz angezeigt. Als Belohnung für Deine Bemühungen erhältst du außerdem 3 Edelsteine.", "friendSecond": "Wenn das zweite Bündel deiner Beiträge angenommen wurde, kannst du die Kristallrüstung im Belohnungs-Shop kaufen. Als Belohnung deiner fortwährenden Arbeit erhälst du außerdem 3 Edelsteine.", "elite": "Elite", "eliteThird": "Wenn das dritte Bündel deiner Beiträge angenommen wurde, kannst du den Kristallhelm im Belohnungs-Shop kaufen. Als Belohnung deiner fortwährenden Arbeit erhälst du außerdem 3 Edelsteine.", "eliteFourth": "Wenn das vierte Bündel deiner Beiträge angenommen wurde, kannst du das Kristallschwert im Belohnungs-Shop kaufen. Als Belohnung deiner fortwährenden Arbeit erhälst du außerdem 4 Edelsteine.", - "champion": "Meister", + "champion": "Champion", "championFifth": "Wenn das fünfte Bündel deiner Beiträge angenommen wurde, kannst du den Kristallschild im Belohnungs-Shop kaufen. Als Belohnung deiner fortwährenden Arbeit erhälst du außerdem 4 Edelsteine.", "championSixth": "Wenn das sechste Bündel deiner Beiträge angenommen wurde, erhälst du ein Hydra Haustier. Außerdem erhälst du 4 Edelsteine.", "legendary": "Legendär", @@ -18,10 +18,10 @@ "heroicText": "Den Helden Rang tragen Habitica-Mitarbeiter und Mitwirkende auf Mitarbeiter-Level. Hast Du diesen Titel errungen, dann wurdest Du dazu berufen (oder von uns angestellt!).", "npcText": "NPCs haben Habitica über Kickstarter mitfinanziert. Du kannst ihre Avatare sehen, wie sie über die Features des Spiels wachen.", "modalContribAchievement": "Erfolg als Mitwirkender!", - "contribModal": "<%= name %>, Du bist fantastisch! Du hast den Rang <%= level %> Mitwirkender errungen, weil Du bei Habitica mithilfst. Sieh", - "contribLink": "Preise hast Du für Deinen Beitrag verdient!", + "contribModal": "<%= name %>, Du bist fantastisch! Du hast den Rang <%= level %> als Mitwirkender errungen, weil Du bei Habitica mithilfst. Sieh", + "contribLink": "welche Preise hast Du für Deinen Beitrag verdient!", "contribName": "Mitwirkender", - "contribText": "Hat zu Habitica beigetragen (Code, Design, Pixel Art, Rechtsrat, Dokumentationen, etc.). Willst Du dieses Abzeichen auch haben?", + "contribText": "Hat zu Habitica beigetragen (Code, Design, Pixelkunst, Rechtsrat, Dokumentationen, etc.). Willst Du dieses Abzeichen auch haben?", "readMore": "Lies mehr", "kickstartName": "Kickstarter Träger - Level $<%= tier %>", "kickstartText": "Hat das Kickstarter Project mitfinanziert", @@ -41,7 +41,7 @@ "moreDetails": "Mehr Details (1-7)", "moreDetails2": "mehr Details (8-9)", "contributions": "Beiträge", - "admin": "Verwaltung", + "admin": "Verwalter", "notGems": "ist in US-Dollar nicht in Edelsteinen. Ist diese Zahl zum Beispiel 1, bedeutet das 4 Edelsteine. Benutze diese Option nur, wenn Du Spielern von Hand Edelsteine verleihen willst, nicht wenn Du Mitwirkenden Ränge vergibst. Beim Vergeben der Ränge werden dem Spieler automatisch Edelsteine hinzugefügt.", "gamemaster": "Spielleiter (Mitarbeiter/Moderator)", "backerTier": "Träger Stufe", @@ -51,14 +51,14 @@ "tier": "Level", "visitHeroes": "Besuche die Halle der Helden (Mitwirkende und Träger)", "conLearn": "Erfahre mehr über Belohnungen für Mitwirkende", - "conLearnHow": "Erfahre mehr, wie du bei Habitica mitwirken kannst.", + "conLearnHow": "Erfahre mehr, wie Du bei Habitica mitwirken kannst.", "surveysSingle": "Hat Habitica durch die Teilnahme an einer Umfrage geholfen zu wachsen. Es gibt keine aktuellen Umfragen.", "surveysMultiple": "Hat Habitica durch Teilnahme an <%= surveys %> Umfragen geholfen zu wachsen. Es gibt keine aktiven Umfragen.", "currentSurvey": "Aktuelle Umfrage", "surveyWhen": "Das Abzeichen wird gegen Ende März verliehen, wenn alle Umfragen bearbeitet wurden.", - "blurbInbox": "Hier werden deine privaten Nachrichten gespeichert! Du kannst Nachrichten verschicken, indem du auf den kleinen Briefumschlag neben den Namen im Gasthaus-, Gruppen- oder Gildenchat klickst.", + "blurbInbox": "Hier werden Deine privaten Nachrichten gespeichert! Du kannst Nachrichten verschicken, indem Du auf den kleinen Briefumschlag neben den Namen im Gasthaus-, Gruppen- oder Gildenchat klickst.", "blurbGuildsPage": "Gilden sind Chatgruppen mit einem gemeinsamen Interesse. Sie sind von Spielern für Spieler erstellt worden. Durchblättere die Liste und tritt den Gilden bei, die dich interessieren.", - "blurbChallenges": "Wettbewerbe werden von anderen Spielern erstellt. Wenn du einem Wettbewerb beitrittst, werden seine Aufgaben deinem Aufgabenmenü hinzugefügt, und wenn du einen Wettbewerb gewinnst erhälst du einen Erfolg und oft auch einen Edelstein-Preis!", + "blurbChallenges": "Wettbewerbe werden von anderen Spielern erstellt. Wenn Du einem Wettbewerb beitrittst, werden seine Aufgaben deinem Aufgabenmenü hinzugefügt, und wenn Du einen Wettbewerb gewinnst erhälst Du einen Erfolg und oft auch einen Edelstein-Preis!", "blurbHallPatrons": "Dies ist die Halle der Unterstützer, in der wir die edlen Abenteurer ehren, die Habitica's ursprüngliche Kickstarter-Kampagne unterstützt haben. Wir danken ihnen für die Hilfe Habitica zum Leben zu erwecken!", - "blurbHallHeroes": "Dies ist die Halle der Helden, in der Open-Source Unterstützter von Habitica geehrt werden. Durch Code, Kunst, Musik, schreiben, oder auch nur Hilfsbereitschaft haben sie Edelsteine, exklusive Ausstattung verdient und angesehene Titel erlangt. Auch du kannst Habitica unterstützen! Hier erfährst du mehr dazu." + "blurbHallHeroes": "Dies ist die Halle der Helden, in der Open-Source Unterstützter von Habitica geehrt werden. Durch Code, Kunst, Musik, schreiben, oder auch nur Hilfsbereitschaft haben sie Edelsteine, exklusive Ausstattung verdient und angesehene Titel erlangt. Auch du kannst Habitica unterstützen! Hier erfährst Du mehr dazu." } \ No newline at end of file diff --git a/common/locales/de/death.json b/common/locales/de/death.json index b0ba690087..0af326aa0d 100644 --- a/common/locales/de/death.json +++ b/common/locales/de/death.json @@ -1,16 +1,16 @@ { - "lostAllHealth": "Du hast deine gesamte Lebensenergie verbraucht!", + "lostAllHealth": "Du hast alle Deine Lebenspunkte verloren!", "dontDespair": "Nicht verzweifeln!", - "deathPenaltyDetails": "Du hast einen Level, dein Gold und ein Stück Ausrüstung verloren, aber du kannst alles durch harte Arbeit wieder zurückbekommen! Viel Glück -- Du schaffst das.", - "refillHealthTryAgain": "Leben wieder auffüllen & Nochmal versuchen", + "deathPenaltyDetails": "Du hast ein Level, Dein Gold und ein Stück Ausrüstung verloren, aber Du kannst alles durch harte Arbeit wieder zurückbekommen! Viel Glück -- Du schaffst das.", + "refillHealthTryAgain": "Lebenspunkte wiederherstellen & Nochmal versuchen", "dyingOftenTips": "Passiert das öfters? Hier gibt es einige Tipps!", - "losingHealthWarning": "Vorsicht - Du verlierst Leben!", - "losingHealthWarning2": "Lass Deine Lebensenergie nicht auf null fallen! Sollte das passieren wirst Du ein Level, Dein Gold und einen Gegenstand Deiner Ausrüstung verlieren.", - "toRegainHealth": "Um Deine Lebensenergie aufzufüllen:", - "lowHealthTips1": "Steige ein Level auf um Dich voll zu heilen!", - "lowHealthTips2": "Kaufe Dir einen Heiltrank aus der Spalte Belohnungen um 15 Lebenspunkte zurück zu erhalten.", - "losingHealthQuickly": "Verlierst Du Deine Lebensenergie zu schnell?", - "lowHealthTips3": "Unnvollständige Tägliche Aufgaben schaden Dir über Nacht, sei vorsichtig und füge anfangs nicht zu viele hinzu!", + "losingHealthWarning": "Vorsicht - Du verlierst Lebenspunkte!", + "losingHealthWarning2": "Lass Deine Lebenspunkte nicht auf null fallen! Sollte das passieren wirst Du ein Level, Dein Gold und einen Gegenstand Deiner Ausrüstung verlieren.", + "toRegainHealth": "Um Deine Lebenspunkte wiederherzustellen:", + "lowHealthTips1": "Steige ein Level auf um Dich vollständig zu heilen!", + "lowHealthTips2": "Kaufe Dir einen Heiltrank aus der Belohnungsspalte um 15 Lebenspunkte wiederherzustellen.", + "losingHealthQuickly": "Verlierst Du Deine Lebenspunkte zu schnell?", + "lowHealthTips3": "Unnvollständige Tägliche Aufgaben schaden Dir über Nacht, also sei vorsichtig und füge anfangs nicht zu viele hinzu!", "lowHealthTips4": "Wenn eine Tägliche Aufgabe an einem gewissen Tag nicht erledigt werden muss, kannst Du sie deaktivieren, indem Du auf das Bleistiftsymbol klickst.", "goodLuck": "Viel Glück!" } \ No newline at end of file diff --git a/common/locales/de/faq.json b/common/locales/de/faq.json index 5f329ea664..40049fbe31 100644 --- a/common/locales/de/faq.json +++ b/common/locales/de/faq.json @@ -2,7 +2,7 @@ "frequentlyAskedQuestions": "Häufig gestellte Fragen", "faqQuestion0": "Ich bin verwirrt. Wo bekomme ich einen Überblick?", "iosFaqAnswer0": "Als erstes, erstellst du Aufgaben, die du täglich erledigen möchtest. Wenn du diese Aufgaben erledigt hast, hake sie ab und du erhälst Erfahrung und Gold. Gold wird verwendet, um Ausrüstung und Gegenstände, sowie gewöhnliche Belohnung, zu kaufen. Erfahrung veranlasst deinen Charakter im Level aufzusteigen und entsperrt Inhalte, wie Haustiere, Fähigkeiten und Aufgaben! Du kannst deinen Charakter im Menü > Customize Avatar gestalten. \n\nEinige grundsätzliche Wege zu kommunzieren: klicke das (+) in der oberen rechten Ecke um eine neue Aufgabe hinzuzufügen. Klicke auf eine existierende Aufgabe um sie zu bearbeiten undstreiche darüber um sie zu löschen. Du kannst auch Aufgaben sortieren, indem du die Schilder in der oberen linken Ecke verwendest, sowie das Erweitern und Verkürzen der Checklisten, indem du auf die Checklist Blase klickst.", - "webFaqAnswer0": "Als erstes, erstellst du Aufgaben, die du täglich erledigen möchtest. Wenn du diese Aufgaben erledigt hast, hake sie ab und du verdienst Erfahrung und Gold. Gold wird verwendet, um Ausrüstung und Gegenstände, sowie gewöhnliche Belohnungen, zu kaufen. Erfahrung lässt deinen Charakter im Level aufsteigen und entsperrt Inhalte, wie Haustiere, Fähigkeiten und Aufgaben! Für weitere Details, hat das Wiki eine Schritt-für-Schritt Anleitung des Spiels [right here] (http://habitica.wikia.com/wiki/Habitica_Wiki).", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", "faqQuestion1": "Wie erstelle ich meine Aufgaben?", "iosFaqAnswer1": "Gute Gewohnheiten (die, die ein + haben) sind Aufgaben, die du mehrmals am Tag wiederholen kannst, wie Gemüse essen. Schlechte Angewohnheiten (die, die ein - haben) sind Aufgaben, die man vermeiden sollte, wie Fingernägel kauen. Gewohnheiten mit einem + und einem - haben eine gute und eine schlechte Seite, wie die Treppe zu nehmen vs den Aufzug zu nehmen. Gute Gewohnheiten gewähren Erfahrung und Gold. Schlechte Gewohnheiten ziehen Gesundheit ab.\n\nDailies sind Aufgaben, die du jeden Tag machen musst, wie die Zähne zu putzen oder deine E-Mails abzurufen. Du kannst die Tage an denen eine Daily fällig ist, anpassen, indem du bearbeiten klickst. Wenn du eine Daily auslässt, die fällig ist, wird deinem Charakter über Nacht Schaden zugefügt. Sei vorsichtig und füge nicht zu viele Dailies auf einmal hinzu. \n\nTo-Dos ist deine Aufgabenliste. Ein To-Do zu erledigen, bringt dir Gold und Erfahrung. Du verlierst niemals Gesundheit bei To-Dos. Du kannst ein Ablaufdatum bei jedem To-Do hinzufügen, indem du bearbeiten klickst.", "webFaqAnswer1": "Gute Gewohnheiten (die, die ein haben) sind Aufgaben, die du mehrmals am Tag wiederholen kannst, wie Gemüse essen. Schlechte Angewohnheiten (die, die ein haben) sind Aufgaben, die man vermeiden sollte, wie Fingernägel kauen. Gewohnheiten mit einem und einem haben eine gute und eine schlechte Seite, wie die Treppe zu nehmen vs den Aufzug zu nehmen. Gute Gewohnheiten gewähren Erfahrung und Gold. Schlechte Gewohnheiten ziehen Gesundheit ab.\n

\nDailies sind Aufgaben, die du jeden Tag machen musst, wie die Zähne zu putzen oder deine E-Mails abzurufen. Du kannst die Tage an denen eine Daily fällig ist, anpassen, indem du bearbeiten klickst. Wenn du eine Daily auslässt, die fällig ist, wird deinem Charakter über Nacht Schaden zugefügt. Sei vorsichtig und füge nicht zu viele Dailies auf einmal hinzu. \n

To-Dos ist deine Aufgabenliste. Ein To-Do zu erledigen, bringt dir Gold und Erfahrung. Du verlierst niemals Gesundheit bei To-Dos. Du kannst ein Ablaufdatum bei jedem To-Do hinzufügen, indem du bearbeiten klickst.", @@ -14,28 +14,31 @@ "webFaqAnswer3": "Deine Aufgaben verändern die Farbe je nachdem wie gut du diese zur Zeit erfüllst! Jede neue Aufgabe besitzt anfangs die neutrale Farbe Gelb. Erledigst du tägliche Aufgaben oder gute Gewohnheiten regelmäßig, werden diese blau. Verfehlst du eine tägliche Aufgabe oder gibst du einer schlechten Gewohnheit nach, werden die Aufgaben rot. Je röter die Aufgabe ist, desto mehr Belohnung bekommst du für sie, allerdings verletzen dich tägliche Aufgaben und schlechte Gewohnheiten umso mehr! Das hilft dir dich zu motivieren diese Aufgaben zu erledigen.", "faqQuestion4": "Warum hat mein Avatar Leben verloren und kann ich es wieder auffüllen?", "iosFaqAnswer4": "Es gibt verschiedene Dinge, die verursachen, dass du Schaden erleidest. Als erstes, wenn du tägliche Aufgaben über Nacht unerledigt, sie werden dir Schaden zufügen. Zweitens, wenn du eine schlechte Gewohnheit anklickst, fügt es dir auch Schaden zu. Zuletzt, wenn du in einem Bosskampf mit deiner Gruppe bist und einer deiner Gruppenmitglieder hat seine täglichen Aufgaben nicht erledigt, dann wird dich der Boss angreifen.\n\nDer gewöhnliche Weg, um Leben zu gewinnen, ist im Level aufzusteigen, was deine komplette Gesundheit wieder herstellt. Du kannst auch Heiltränke mit Gold in Shop kaufen. Dazu kommt, ab Level 10 oder höher, kannst du wählen, ob du ein Heiler werden möchtest, dann lernst du Heilfähigkeiten. Wenn du in einer Gruppe mit einem Heiler bist, kann dieser dich genauso heilen. ", - "webFaqAnswer4": "Es gibt verschiedene Dinge, die verursachen, dass du Schaden erleidest. Als erstes, wenn du tägliche Aufgaben über Nacht unerledigt, sie werden dir Schaden zufügen. Zweitens, wenn du eine schlechte Gewohnheit anklickst, fügt es dir auch Schaden zu. Zuletzt, wenn du in einem Bosskampf mit deiner Gruppe bist und einer deiner Gruppenmitglieder hat seine täglichen Aufgaben nicht erledigt, dann wird dich der Boss angreifen.\n

\nDer gewöhnliche Weg, um Leben zu gewinnen, ist im Level aufzusteigen, was deine komplette Gesundheit wieder herstellt. Du kannst auch Heiltränke mit Gold in Shop kaufen. Dazu kommt, ab Level 10 oder höher, kannst du wählen, ob du ein Heiler werden möchtest, dann lernst du Heilfähigkeiten. Wenn du in einer Gruppe (under Social > Party) mit einem Heiler bist, kann dieser dich genauso heilen. ", + "webFaqAnswer4": "Es gibt verschiedene Dinge, die verursachen, dass du Schaden erleidest. Als erstes fügen dir tägliche Aufgaben, die über Nacht unerledigt bleiben, Schaden zu. Zweitens fügt es dir auch Schaden zu, wenn du eine schlechte Gewohnheit anklickst. Drittens wird dich in einem Bosskampf mit deiner Gruppe der Boss angreifen, wenn eines deiner Gruppenmitglieder seine täglichen Aufgaben nicht erledigt hat.\n

\nDer gewöhnliche Weg um Leben zu gewinnen ist im Level aufzusteigen, was deine komplette Gesundheit wiederherstellt. Du kannst auch Heiltränke mit Gold in Shop kaufen. Dazu kommt, dass du ab Level 10 oder höher wählen kannst, ob du ein Heiler werden möchtest, dann lernst du Heilfähigkeiten. Wenn du in einer Gruppe (under Social > Party) mit einem Heiler bist, kann dieser dich genauso heilen. ", "faqQuestion5": "Wie spiele ich Habitica mit meinen Freunden?", - "iosFaqAnswer5": "Die beste weise dieses zu erzeugen ist sie in eine Gruppe einzuladen! Das geht zurzeit nur ueber die [Website](https://habitica.com/#/options/groups/party) aber demnaechst wird die Funktion auch zum App hinzugefuegt. Gruppen koennen zusammen Quests antreten, Monster schlachten, und Fähigkeit benutzen um einander zu helfen. Auf der Website koennt ihr auch Gilden beitreten. Gilden sind oeffentliche Chat-Räume. Gilden werden in der zukunft auch zum App hinzugefuegt.", - "webFaqAnswer5": "The best way is to invite them to a party with you, under Social > Party! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n

\n For more detailed info, check out the wiki pages on [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).", - "faqQuestion6": "Wie erhalte ich Haustiere und Reittiere?", + "iosFaqAnswer5": "Am Besten lädst du sie in eine Party mit dir ein! Parties können zusammen Quest beschreiten, Monster bekämpfen und einender mit zaubern unterstützen. Geh ins Menü < Party und klicke \"Neue Party erstellen\" wenn du noch keine Party hast. Dann tippst du auf die Mitglieder liste und tippst du oben rechts auf einladen. Um deine Freunde einzuladen brauchst du ihre User ID(welche aus einer langen zahlen, Buchstaben Kombination besteht).", + "webFaqAnswer5": "Am besten lädst du sie ein eine Gruppe mit dir ein (unter Social > Party)! Gruppen können zusammen Quests antreten, Monster bekämpfen und Fähigkeiten benutzen um einander zu helfen. Ihr könnt außerdem gemeinsam einer Gilde beitreten (unter Social > Guilds). Gilden sind Chat-Räume, deren Mitglieder gemeinsame Ziele verfolgen, und können privat oder öffentlich sein. Du kannst in sovielen Gilden sein, wie du möchtest, aber nur in einer Gruppe.\n

\nGenauere Informationen findest du auf den Wiki Seiten für [Parties](http://habitrpg.wikia.com/wiki/Party) und [Guilds](http://habitrpg.wikia.com/wiki/Guilds).", + "faqQuestion6": "Wie erhalte ich Haustiere oder Reittiere?", "iosFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch Egg.\" Then choose a hatching potion to determine its color! Go to Menu > Pets to equip your new Pet to your avatar by clicking on it. \n\n You can also grow your Pets into Mounts by feeding them under Menu > Pets. Tap on a Pet, and then select \"Feed Pet\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Menu > Mounts and tap on it to equip it to your avatar.\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", - "webFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Inventory > Market.\n

\n To hatch a Pet, you'll need an egg and a hatching potion. Click on the egg to determine the species you want to hatch, and then click on the hatching potion to determine its color! Go to Inventory > Pets to equip it to your avatar by clicking on it.\n

\n You can also grow your Pets into Mounts by feeding them under Inventory > Pets. Click on a Pet, and then click on a piece of food from the right-hand menu to feed it! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Inventory > Mounts and click on it to equip it to your avatar.\n

\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", + "webFaqAnswer6": "Wenn du Level 3 erreichst, wirst du das Beutesystem freischalten. Jedes Mal wenn du eine Aufgabe erledigst, hast du eine zufällige Chance ein Ei, einen Schlüpftrank oder Futter zu erhalten. Diese werden unter Inventar > Marktplatz gespeichert.\n

\nUm ein Haustier auszubrüten benötigst du ein Ei und einen Schlüpftrank. Klicke auf das Ei, um die Spezies auszuwählen, welche zu schlüpfen lassen möchtest, und clicke anschließend auf den Schlüpftrank, um die Farbe zu bestimmen! Um es deinem Avatar hinzuzufügen, gehe zu Inventar > Haustiere und klicke auf das gewünschte Tier.\n

\nDu kannst deine Haustiere unter Inventar > Haustiere auch füttern, sodass sie zu Reittieren heranwachsen. Klicke auf ein Haustier und dann auf das Futter aus dem Menü auf der rechten Seite, um es zu füttern! Damit es zu einem Reittier heranwächst, musst du dein Haustier mehrmals füttern, wenn du jedoch sein bevorzugtes Futter herausfindest, wächst es schneller. Dies kannst du entweder durch ausprobieren selbst herausfinden oder [im Wiki nachschauen Vorsicht: Spoiler!](http://de.habitica.wikia.com/wiki/Futter#Bevorzugtes_Futter). Wenn du ein Reittier erhalten hast, gehe zu Inventar > Mounts und clicke das Tier an, um es deinem Avatar hinzuzufügen.\n

\nDu kannst auch Eier für Quest-Haustiere erhalten, indem du bestimmte Quests abschließt. (Siehe weiter unten, um mehr über Quests zu erfahren.)", "faqQuestion7": "Wie werde ich ein Krieger, Magier, Schurke oder Heiler?", "iosFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their Party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most gold and find the most item drops, and they can help their Party do the same. Finally, Healers can heal themselves and their Party members.\n\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click “Decide Later” and choose later under Menu > Choose Class.", - "webFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most Gold and find the most item drops, and they can help their party do the same. Finally, Healers can heal themselves and their party members.\n

\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click \"Opt Out\" and re-enable it later under User > Stats.", + "webFaqAnswer7": "Wenn du Level 10 erreichst, kannst du wählen, ob du Krieger, Magier, Schurke oder Heiler werden möchtest. (Alle Spieler beginnen standardmäßig als Krieger.) Jede Klasse hat unterschiedliche Ausrüstungsoptionen, unterschiedliche Fähigkeiten, die sie ab Level 11 verwenden können, und unterschiedliche Vorteile. Krieger fügen Bossen leicht Schaden zu, halten mehr Schaden von ihren Aufgaben aus und helfen ihrer Gruppe widerstandsfähiger zu werden. Magier schaden Bossen ebenfalls leicht, steigen schnell Level auf und können Mana für sich und ihre Gruppe wiederherstellen. Schurken erhalten das meiste Geld, finden die meiste Beute und können ihrer Gruppe helfen, dies ebenfalls zu tun. Heiler können sich selbst und ihre Gruppe heilen.\n

\nWenn du nicht direkt eine Klasse auswählen möchtest -- zum Beispiel, wenn du gerade dabei bist die gesamte Ausrüstung für deine aktuelle Klasse zu kaufen -- kannst du \"Opt Out\" klicken und die Klasse unter Benutzer > Werte später aktivieren.", "faqQuestion8": "Was ist die blaue Statistik-Leiste, die in der Kopfzeile nach Level 10 erscheint?", - "iosFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Use Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", + "iosFaqAnswer8": "Der blaue Balken, der erschienen ist, als du Level 10 erreicht hast und eine Klasse gewählt hast, ist dein Manabalken. Mit dem Erreichen weiterer Level wirst du spezielle Fähigkeiten freischalten, die dich Mana kosten. Jede Klasse hat verschiedene Fähigkeiten, die du nach Level 11 unter Menu > Use Skills erscheinen. Im Gegensatz zu deinem Lebensbalken füllt sich dein Mana nicht automatisch beim Stufenanstieg wieder auf. Stattdessen füllt sich dein Mana durch das Erfüllen von täglichen und einmaligen Aufgaben und Gewohnheiten wieder auf. Gehst du schlechten Gewohnheiten nach, verlierst du dafür Mana. Außerdem regenerierst du etwas Mana über Nacht -- abhängig von der Anzahl der täglichen Aufgaben, die du erfüllt hast. Je mehr Aufgaben, desto mehr Mana regenerierst du. ", "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in a special section in the Rewards Column. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You’ll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", - "faqQuestion9": "Wie kämpfe ich Monster und gehe auf Quests?", - "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party on the [website](https://habitica.com/#/options/groups/party), you'll be rewarded with the Basi-List Scroll! (We will add this feature to the app in a future update.)\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for gold and gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "webFaqAnswer9": "First, you need to join or start a party (under Social > Party). Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n

\n Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are three ways to get a scroll:\n

\n * When you invite people to your party, you’ll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Page (Inventory > Quests) for Gold and Gems.\n

\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your party at the same time that you damage the Boss.\n

\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "faqQuestion10": "Was sind Edelsteine und wie bekomme ich welche?", + "faqQuestion9": "Wie bekämpfe ich Monster und gehe auf Quests?", + "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for Gold and Gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", + "webFaqAnswer9": "Zuerst musst du eine Gruppe gründen oder einer Gruppe beitreten (unter Soziales > Gruppe). Obwohl du Monster auch alleine bekämpfen kannst, empfehlen wir in einer Gruppe mit anderen Mitspielern zu spielen, da dies die Quests viel einfacher macht. Zusätzlich ist es sehr motivierend einen Freund zu haben, der einen anspornt seine Aufgaben zu erledigen.\n

\nAls nächstes benötigst du eine Questrolle, welche unter Inventar > Quests gespeichert sind. Es gibt drei Möglichkeiten an Rollen zu kommen:\n

\n* Wenn du Mitspieler zu deiner Gruppe einlädst, erhälst du die Basi-List-Rolle.\n* Bei Erreichen von Level 15 erhälst du eine Questreihe, d.h. drei zusammenhängende Quests. Weitere Questreihen werden bei den Leveln 30, 40 und 60 freigeschaltet.\n* Du kanst Quests auf der Quest-Seite (Inventar > Quests) für Gold und Edelsteine kaufen.\n

\nUm den Boss zu bekämpfen oder Gegenstände bei einer Sammelquest zu sammeln, musst du einfach deine Aufgaben normal erledigen und sie werden über Nacht in Schaden umgerechnet. (Möglicherweise ist es erforderlich die Seite neu zu laden, um den Effekt auf den Lebensbalken des Bosses zu sehen.) Wenn du einen Boss bekämpfst und tägliche Aufgaben nicht erledigst, wird der Boss eurer Gruppe zur gleichen Zeit Schaden zufügen wie ihr dem Boss.\n

\nAb Level 11 erhalten Magier und Krieger Fäghigkeiten, welche dem Boss zusätzlichen Schaden zufügen, also sind dies ausgezeichnete Klassen, welche du ab Level 10 wählen sollte, wenn du viel Bossen viel Schaden zufügen möchtest.", + "faqQuestion10": "Was sind Edelsteine und wie erhalte ich welche?", "iosFaqAnswer10": "Gems are purchased with real money by tapping on the gem icon in the header. When people buy gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying gems directly, there are three other ways players can gain gems:\n\n * Win a Challenge on the [website](https://habitica.com) that has been set up by another player under Social > Challenges. (We will be adding Challenges to the app in a future update!)\n * Subscribe on the [website](https://habitica.com/#/options/settings/subscription) and unlock the ability to buy a certain number of gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with gems do not offer any statistical advantages, so players can still make use of the app without them!", - "webFaqAnswer10": "Gems are [purchased with real money](https://habitica.com/#/options/settings/subscription), although [subscribers](https://habitica.com/#/options/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n

\n In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n

\n * Win a Challenge that has been set up by another player under Social > Challenges.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", + "webFaqAnswer10": "Edelsteine werden [mit realem Geld gekauft](https://habitica.com/#/options/settings/subscription), jedoch können [Abonnenten](https://habitica.com/#/options/settings/subscription) sie mit Gold kaufen. Wenn Menschen abonnieren oder Edelsteine kaufen, helfen sie uns die Seite zu betreiben. Wir sind sehr dankbar für ihre Unterstützung!\n

\nZusätzlich zum Kaufen von Edelsteinen oder Abonnieren gibt es zwei andere Möglichkeiten für einen Spieler an Edelsteine zu kommen.\n

\n* Gewinne einen Wettbewerb eines anderen Spielers unter Soziales > Wettbewerbe.\n* Trage mit deinen Fähigkeiten zum Habitica Projekt bei. Für mehr Details, sieh im Wiki nach: [An Habitica mitarbeiten](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\nBeachte, dass Gegenstände, die mit Edelsteinen gekauft werden keine statistischen Vorteile bringen, sodass Spieler die Seite auch ohne sie benutzen können!", "faqQuestion11": "Wie melde ich einen Fehler oder schlage ein Feature vor?", - "iosFaqAnswer11": "Um einen Fehler zu melden, ein Feature vorzuschlagen oder Feedback zu senden gehe im Menü unter Hilfe > Melde einen Fehler und Hilfe > Feature vorschlagen! Wir werden alles tun, um dir zu helfen.", + "iosFaqAnswer11": "Um einen Fehler zu melden, ein Feature vorzuschlagen oder Feedback zu senden, gehe im Menü unter Hilfe > Melde einen Fehler und Hilfe > Feature vorschlagen! Wir werden alles tun, um dir zu helfen.", "webFaqAnswer11": "Gemeldete Fehler werden in GitHub gesammelt. Gehe zu [Hilfe > Melde einen Fehler](https://github.com/HabitRPG/habitrpg/issues/2760) und folge den Anweisungen. Keine Sorge, wir werden ihn so bald wie möglich beheben!\n

\nVorgeschlagene Features werden in Trello gesammelt. Gehe zu [Hilfe > Feature vorschlagen](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) und folge den Anweisungen. Tadaa!", + "faqQuestion12": "Wie bekämpfe ich einen Weltboss?", + "iosFaqAnswer12": "Welt-Bosse sind spezielle Monster, welche im Gasthaus erscheinen. Alle aktiven Benutzer kämpfen automatisch gegen den Boss und ihre Aufgaben und Fähigkeiten werden dem Boss wie üblich schaden.\n\nDu kannst dich gleichzeitig in einer normalen Quest befinden. Deine Aufgaben und Fähigkeiten werden sowohl dem Welt-Boss wie auch dem Boss/der Sammelquest schaden.\n\nEin Welt-Boss wird niemals dich oder deinen Account verletzten. Stattdessen hat es einen Wutbalken, welcher sich füllt, wenn Benutzer ihre täglichen Aufgaben überspringen. Falls der Wutbalken gefüllt ist, wird der Welt-Boss einen der Nicht-Spieler-Charakter der Seite angreifen und ihr Aussehen wird sich verändern.\n\n Du kannst mehr über [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) in der Wiki erfahren", + "webFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n

\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n

\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n

\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", "iosFaqStillNeedHelp": "Wenn du eine Frage hast, die hier nicht beantwortet wurde, stelle sie im Chat im Gasthaus unter Soziales > Gasthaus! Wir helfen dir gerne.", "webFaqStillNeedHelp": "Wenn du eine Frage hast, die hier nicht beantwortet wurde, stelle sie in der [Newbies Gilde](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! Wir helfen dir gerne." } \ No newline at end of file diff --git a/common/locales/de/front.json b/common/locales/de/front.json index 8ae465ab11..2b320e9f2f 100644 --- a/common/locales/de/front.json +++ b/common/locales/de/front.json @@ -74,7 +74,7 @@ "infhQuote": "[Habitica] hat mir geholfen Struktur in mein Leben an der Universität zu bringen.", "invalidEmail": "Um das Passwort zurückzusetzen, ist eine gültige Email-Adresse notwendig.", "irishfeet123Quote": "Ich hatte die schrecklichen Angewohnheiten, nach Mahlzeiten nicht aufzuräumen und Tassen in der ganzen Wohnung stehen zu lassen. [Habitica] hat mich davon geheilt!", - "joinOthers": "Schließe dich 250.000 Leuten an, die Spaß dabei haben, ihre Ziele zu erreichen!", + "joinOthers": "Schließe dich <%= userCount %> Leuten an, die Spaß dabei haben, ihre Ziele zu erreichen!", "kazuiQuote": "Vor [Habitica] kam ich mit meiner Dissertation nicht weiter und war unzufrieden mit meiner Selbstdisziplin bei Hausarbeiten, Vokabellernen und dem Studium der Go-Theorie. Es hat sich herausgestellt, dass das Aufteilen der Aufgaben in kleinere, machbare Checklisten etwas ist, das mich motiviert und zum konstanten Arbeiten anregt.", "landingadminlink": "Verwaltungspakete", "landingend": "Noch nicht überzeugt?", @@ -179,5 +179,14 @@ "businessInquiries": "Geschäftsanfragen.", "merchandiseInquiries": "Anfragen zu Handelswaren und Vermarktung", "marketingInquiries": "Marketing-/Soziale Netzwerke Anfragen", - "tweet": "Tweet" + "tweet": "Tweet", + "apps": "Apps", + "notifyAndroidApp": "Möchtest du, dass wir dir mitteilen, wenn die Android app fertig ist? Trage dich in unsere E-Mail-Liste ein!", + "checkOutIOSApp": "Schau dir unsere neue iOS App an!", + "imagine1": "Stell dir vor dein Leben zu verbessern wäre so unterhaltsam wie ein Spiel zu spielen.", + "landingCopy1": "Mache Fortschritte im Spiel, indem du deine Aufgaben im echten Leben erledigst.", + "landingCopy2": "Wenn du mit Freunden Monster bekämpfst, bleibst du für das Erreichen deiner Ziele verantwortlich.", + "landingCopy3": "Schließe dich <%= userCount %> Leuten an, die Spaß dabei haben, ihr Leben zu verbessern.", + "alreadyHaveAccount": "Ich habe bereits ein Konto!", + "getStartedNow": "Jetzt loslegen!" } \ No newline at end of file diff --git a/common/locales/de/gear.json b/common/locales/de/gear.json index 5fa6e000fb..988d404390 100644 --- a/common/locales/de/gear.json +++ b/common/locales/de/gear.json @@ -87,7 +87,7 @@ "weaponSpecialSpringHealerText": "Wurfknochen", "weaponSpecialSpringHealerNotes": "Hol' Stöckchen! Fügt <%= int %> Punkte zu Intelligenz hinzu. Limited Edition 2014 Frühlingsausrüstung.", "weaponSpecialSummerRogueText": "Piratensäbel", - "weaponSpecialSummerRogueNotes": "Avast! You'll make those Dailies walk the plank! Increases Strength by <%= str %>. Limited Edition 2014 Summer Gear.", + "weaponSpecialSummerRogueNotes": "Genug! Du wirst diese täglichen Aufgaben über die Planke gehen lassen! Erhöht Stärke um <%= str %>. Limited Edition 2014 Sommer-Ausrüstung.", "weaponSpecialSummerWarriorText": "Seefahrermesser", "weaponSpecialSummerWarriorNotes": "Es gibt keine Aufgabe auf irgendeiner To-Do-Liste die es wagen würde, sich mit diesem rauen Messer anzulegen! Fügt Stärke <%= str %> Punkte hinzu. Limited Edition 2014 Sommer-Ausrüstung.", "weaponSpecialSummerMageText": "Algenfänger", @@ -115,7 +115,7 @@ "weaponSpecialSpring2015WarriorText": "Knochenkeule", "weaponSpecialSpring2015WarriorNotes": "Es ist eine echte, richtige Knochenkeule für echt kämpferische Hundis und es ist definitiv kein Kauspielzeug, das Du von der Jahreszeitenzauberin erhalten hast, denn wer ist ein guter Hund? Weeeeer ist ein guter Hund? Genau!!! Du bist ein guter Hund!!! Erhöht Stärke um <%= str %>. Limited Edition 2015 Frühlingsausrüstung.", "weaponSpecialSpring2015MageText": "Zauberstab eines Magiers", - "weaponSpecialSpring2015MageNotes": "Conjure up a carrot for yourself with this fancy wand. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2015 Spring Gear.", + "weaponSpecialSpring2015MageNotes": "Beschwöre Dir eine Karotte mit diesem schicken Zauberstab. Erhöht Intelligenz um <%= int %> und Wahrnehmung um <%= per %>. Limited Edition 2015 Frühlings-Ausrüstung.", "weaponSpecialSpring2015HealerText": "Katzenrassel", "weaponSpecialSpring2015HealerNotes": "Wenn Du sie schüttelst macht sie ein faszinierendes Klimpergeräusch, was JEDEN über Stunden hinweg unterhalten würde. Erhöht Intelligenz um <%= int %>. Limited Edition 2015 Frühlingsausrüstung.", "weaponSpecialSummer2015RogueText": "Feuernde Koralle", @@ -126,14 +126,14 @@ "weaponSpecialSummer2015MageNotes": "Versteckte Kräfte schimmern in den Juwelen dieses Stabs. Erhöht Intelligenz um <%= int %> und Wahrnehmung um <%= per %>. Limited Edition 2015 Sommer-Ausrüstung.", "weaponSpecialSummer2015HealerText": "Zauberstab der Wellen", "weaponSpecialSummer2015HealerNotes": "Heilt Seekrankheit und Reiseübelkeit! Erhöht Intelligenz um <%= int %>. Limited Edition 2015 Sommer-Ausrüstung.", - "weaponSpecialFall2015RogueText": "Bat-tle Ax", - "weaponSpecialFall2015RogueNotes": "Fearsome To-Dos cower before the flapping of this ax. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", + "weaponSpecialFall2015RogueText": "Kampfaxt", + "weaponSpecialFall2015RogueNotes": "Furchterregende tägliche Aufgaben ducken sich unter den Schlägen dieser Axt. Erhöht Stärke um <&=str %>. Limited Edition 2015 Herbst-Ausrüstung. ", "weaponSpecialFall2015WarriorText": "Holzplanke", - "weaponSpecialFall2015WarriorNotes": "Great for elevating things in cornfields and/or smacking tasks. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", + "weaponSpecialFall2015WarriorNotes": "Super um Dinge in Kornfeldern hochzuheben und/oder Aufgaben zu verprügeln. Erhöht die Stärke um <%=str%>. Begrenzte Auflage 2015 Herbst Ausrüstung", "weaponSpecialFall2015MageText": "Verzauberter Faden", - "weaponSpecialFall2015MageNotes": "A powerful Stitch Witch can control this enchanted thread without even touching it! Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "weaponSpecialFall2015HealerText": "Swamp-Slime Potion", - "weaponSpecialFall2015HealerNotes": "Brewed to perfection! Now you just have to convince yourself to drink it. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", + "weaponSpecialFall2015MageNotes": "Eine starke Stichhexe kann dieses verzauberte Gewinde kontrollieren, ohne es zu berühren. Es erhöht die Intelligenz von <%= int %> und die Wahrnehmung von <%= per %>. Limited Edition 2015 Herbst Ausrüstung.", + "weaponSpecialFall2015HealerText": "Sumpfschleimtrank", + "weaponSpecialFall2015HealerNotes": "Perfekt gebraut! Jetzt musst du nur noch dich selbst überzeugen ihn zu trinken. Erhöht Intelligenz um <%= int %>, Limited Edition 2015 Herbst-Ausrüstung.", "weaponMystery201411Text": "Forke des Feierns", "weaponMystery201411Notes": "Ersteche deine Feinde oder verschling dein Lieblingsessen - diese flexible Forke ist universell einsetzbar! Gewährt keinen Bonus. November 2014 Abonnenten-Gegenstand.", "weaponMystery201502Text": "Schimmernder Flügelstab der Liebe und auch der Wahrheit", @@ -147,15 +147,21 @@ "weaponArmoireLunarSceptreText": "Besänftigendes Mondzepter", "weaponArmoireLunarSceptreNotes": "Die heilende Kraft dieses Zauberstabs nimmt wie der Mond ab und zu. Erhöht Ausdauer um <%= con %> und Intelligenz um <%= int %>. Verzauberter Schrank: Beruhigendes Mondset (Gegenstand 3 von 3).", "weaponArmoireRancherLassoText": "Viehzüchterlasso", - "weaponArmoireRancherLassoNotes": "Lassos: das ideale Werkzeug zum Einfangen und Zäumen. Erhöht die Stärke um <%= str %>, Wahrnehmung um <%= pro %> und Intelligenz um <%= int %>. Verzauberter Schrank: Viehzüchter Set (Artikel 3 von 3).", + "weaponArmoireRancherLassoNotes": "Lassos: das ideale Werkzeug zum Einfangen und Zäumen. Erhöht Stärke um <%= str %>, Wahrnehmung um <%= per %> und Intelligenz um <%= int %>. Verzauberter Schrank: Viehzüchter Set (Gegenstand 3 von 3).", "weaponArmoireMythmakerSwordText": "Sagenumwobenes Schwert", - "weaponArmoireMythmakerSwordNotes": "Obwohl es möglicherweise unbedeutend aussieht, hat dieses Schwert viele Kämpfer zu mytische Helden gemacht. Erhöht Wahrnehmung und Stärke jeweils um <%= attrs %>. Verzauberter Schrank: Goldenes Toga Set (Gegenstand 3 von 3)", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Eiserner Hirtenstab", - "weaponArmoireIronCrookNotes": "Dieser mit Leidenschaft gehämmerte eiserne Hirtenstab ist nützlich zum Schafe hüten. Erhöht Wahrnehmung und Stärke jeweils um <%= attrs %>. Verzauberter Schrank: Gehörntes Eisenset (Gegenstand 3 von 3)", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Goldener geflügelter Stab", "weaponArmoireGoldWingStaffNotes": "Die Flügel dieses Stabes flattern und drehen sich ständig. Erhöht alle Attribute um <%= attrs %>. Verzauberter Schrank: Unabhängiger Gegenstand.", "weaponArmoireBatWandText": "Fledermaus Zauberstab", - "weaponArmoireBatWandNotes": "This wand can turn any task into a bat! Wave it about and watch them fly away. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireBatWandNotes": "Dieser Zauberstab kann jede Aufgabe in eine Fledermaus verwandeln. Schwinge ihn und schau zu wie sie davon fliegen. Erhöht Intelligenz um <%= int %> und Wahrnehmung um <%= per %>. Verzauberter Schrank: Unabhängiger Gegenstand. ", + "weaponArmoireShepherdsCrookText": "Hirtenstab", + "weaponArmoireShepherdsCrookNotes": "Nützlich um Greife zu hüten. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Hirten-Set (Gegenstand 1 von 3)", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "Rüstung", "armorBase0Text": "Schlichte Kleidung", "armorBase0Notes": "Gewöhnliches Kleidungsstück. Gewährt keinen Bonus zu Attributen.", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "Alberne Party Roben", "armorSpecialBirthday2015Notes": "Alles Gute zum Geburtstag, Habitica! Trage diese albernen Party Roben um diesen wundervollen Tag zu feiern. Sie geben keinen Attributbonus.", "armorSpecialGaymerxText": "Regenbogenkriegerrüstung", - "armorSpecialGaymerxNotes": "Dieser besondere Helm ist zur Feier der Pride-Zeit und GaymerX mit einem strahlenden, bunten Regenbogen verziert! GaymerX ist eine Game Convention, die LGBTQ und Gaming feiert und an der jeder teilnehmen kann. Sie findet im InterContinental in der Stadtmitte von San Francisco vom 11.-13. Juli statt. Kein Attributbonus.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "Geschmeidiger Katzenanzug", "armorSpecialSpringRogueNotes": "Perfekt gepflegt. Erhöht Wahrnehmung um <%= per %>. Limited Edition 2014 Frühlings-Ausrüstung.", "armorSpecialSpringWarriorText": "Hartkleerüstung", @@ -269,14 +275,14 @@ "armorSpecialSummer2015MageNotes": "Versteckte Macht liegt in diesen Puffärmeln. Erhöht Intelligenz um <%= int %>. Limited Edition 2015 Sommer-Ausrüstung.", "armorSpecialSummer2015HealerText": "Matrosenrüstung", "armorSpecialSummer2015HealerNotes": "Mit dieser Rüstung weiß jeder, dass du ein ehrlicher Handelsseemann bist, der niemals davon träumen würde sich wie ein Taugenichts zu benehmen. Erhöht Ausdauer um <%= con %>. Limited Edition 2015 Sommer-Ausrüstung.", - "armorSpecialFall2015RogueText": "Bat-tle Armor", - "armorSpecialFall2015RogueNotes": "Fly into bat-tle! Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", + "armorSpecialFall2015RogueText": "Kampfrüstung", + "armorSpecialFall2015RogueNotes": "Flieg in den Kampf! Erhöht Wahrnehmung um <%= per %>. Limited Edition 2015 Herbst-Ausrüstung.", "armorSpecialFall2015WarriorText": "Vogelscheuchenrüstung", - "armorSpecialFall2015WarriorNotes": "Despite being stuffed with straw, this armor is extremely hefty! Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", - "armorSpecialFall2015MageText": "Stitched Robes", - "armorSpecialFall2015MageNotes": "Every stitch in this armor shimmers with enchantment. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", - "armorSpecialFall2015HealerText": "Potioner Robes", - "armorSpecialFall2015HealerNotes": "What? Of course that was a potion of constitution. No, you are definitely not turning into a frog! Don't be ribbiticulous. Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", + "armorSpecialFall2015WarriorNotes": "Obwohl sie nur mit Stroh ausgestopft ist, ist diese Rüstung extrem mächtig! Erhöht Ausdauer um <%= con %>. Limited Edition 2015 Herbst-Ausrüstung.", + "armorSpecialFall2015MageText": "Genähte Roben", + "armorSpecialFall2015MageNotes": "Jede Masche dieser Rüstung schimmert mit Zauberei. Erhöht Intelligenz um <%= int %>. Limited Edition 2015 Herbst Ausrüstung.", + "armorSpecialFall2015HealerText": "Roben des Tränkebrauers", + "armorSpecialFall2015HealerNotes": "Wie bitte? Natürlich war das ein Trank der Ausdauer. Nein, du verwandelst dich definitiv nicht in einen Frosch! Sei nicht albern. Erhöht Ausdauer um <%= con %>. Limited Edition 2015 Herbst-Ausrüstung.", "armorMystery201402Text": "Robe des Nachrichtenbringers", "armorMystery201402Notes": "Schimmernd, stabil und mit vielen Taschen für Briefe. Gewährt keinen Bonus zu Attributen. Februar 2014 Abonnenten-Gegenstand.", "armorMystery201403Text": "Waldwanderer Rüstung", @@ -306,7 +312,9 @@ "armorMystery201508Text": "Geparden Kostüm", "armorMystery201508Notes": "Sei schnell wie der Blitz im flauschigen Geparden Kostüm! Gewährt keinen Attributbonus. Abonnentengegenstand August 2015", "armorMystery201509Text": "Werwolfverkleidung", - "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201509Notes": "Das IST doch ein Kostüm, nicht wahr? Kein Attributbonus. September 2015 Abonnenten-Gegenstand.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Steampunkanzug", "armorMystery301404Notes": "Adrett und schneidig, hoho! Februar 3015 Abonennten-Gegenstand. Kein Attributbonus.", "armorArmoireLunarArmorText": "Beruhigende Mondrüstung", @@ -321,6 +329,12 @@ "armorArmoireHornedIronArmorNotes": "Diese mit Leidenschaft aus Eisen gehämmerte, gehörnte Rüstung ist fast unzerbrechlich. Erhöht Ausdauer um <%= con %> und Wahrnehmung um <%= per %>. Verzauberter Schrank: Gehörntes Eisenset (Gegenstand 2 von 3)", "armorArmoirePlagueDoctorOvercoatText": "Pestarzt Umhang", "armorArmoirePlagueDoctorOvercoatNotes": "Ein authentischer Umhang wie ihn Ärzte tragen, die die Pest der Prokrastination bekämpfen! Steigert die Intelligenz um <%= int %>, Stärke um <%= str %>, und Ausdauer um <%= con %>. Verzauberter Schrank: Pestdoktor Set (Gegenstand 3 von 3).", + "armorArmoireShepherdRobesText": "Hirtengewand", + "armorArmoireShepherdRobesNotes": "Der Stoff ist kühl und atmungsaktiv, perfekt um an heißen Tagen Greife in der Wüste zu hüten. Erhöht Stärke und Wahrnehmung um je <%= attrs %>. Verzauberter Schrank: Hirten-Set (Gegenstand 2 von 3).", + "armorArmoireRoyalRobesText": "Königliche Gewänder", + "armorArmoireRoyalRobesNotes": "Wundervoller Herrscher, herrsche den ganzen Tag! Erhöht Ausdauer, intelligenz und Wahrnehmung um je <%= attrs %>. Verzauberter Schrank: Königsset (Gegenstand 3 von 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "Kopfschutz", "headBase0Text": "Kein Helm.", "headBase0Notes": "Keine Kopfbedeckung.", @@ -432,16 +446,16 @@ "headSpecialSummer2015MageNotes": "In den Fäden dieses Schals schlummert verborgene Kraft. Erhöht Wahrnehmung um <%= per %>. Limited Edition 2015 Sommer-Ausrüstung.", "headSpecialSummer2015HealerText": "Matrosenkappe", "headSpecialSummer2015HealerNotes": "Hast du die Matrosenkappe sicher auf deinem Kopf, kannst du sogar durch die stürmischsten Gewässer steuern! Erhöht Intelligenz um <%= int %>. Limited Edition 2015 Sommer-Ausrüstung.", - "headSpecialFall2015RogueText": "Bat-tle Wings", - "headSpecialFall2015RogueNotes": "Echolocate your enemies with this powerful helm! Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", + "headSpecialFall2015RogueText": "Geflügelter Kampfhelm", + "headSpecialFall2015RogueNotes": "Orte deine Feinde mit diesem mächtigen Helm durch Echos! Erhöht Wahrnehmung um <%= per %>. Limited Edition 2015 Herbst-Ausrüstung.", "headSpecialFall2015WarriorText": "Vogelscheuchenhut", - "headSpecialFall2015WarriorNotes": "Everyone would want this hat--if they only had a brain. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "headSpecialFall2015MageText": "Stitched Hat", - "headSpecialFall2015MageNotes": "Every stitch in this hat augments its power. Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "headSpecialFall2015HealerText": "Hat of Frog", - "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", + "headSpecialFall2015WarriorNotes": "Jeder würdet diesen Hut wollen, wenn sie ein Gehirn hätten. Es erhöht die Stärke von <%= str %>. Limited Edition 2015 Herbst Ausrüstung.", + "headSpecialFall2015MageText": "Genähter Hut", + "headSpecialFall2015MageNotes": "Dieser Hut wurde mit jedem Nadelstich stärker. Erhöht Wahrnehmung um <%= per %> Punkte. Limited Edition 2015 Herbst-Ausrüstung.", + "headSpecialFall2015HealerText": "Froschhut", + "headSpecialFall2015HealerNotes": "Das ist ein sehr ernster Hut, dass würdig den meisten erweiterten Zaubertranksmachern ist. Es erhöht Intelligeny von <%= int %>. Limited Edition 2015 Herbst Ausrüstung.", "headSpecialGaymerxText": "Regenbogenkriegerhelm", - "headSpecialGaymerxNotes": "Dieser besondere Helm ist zur Feier der Pride-Zeit und GaymerX mit einem strahlenden, bunten Regenbogen verziert! GaymerX ist eine Game Convention, die LGBTQ und Gaming feiert und an der jeder teilnehmen kann. Sie findet im InterContinental in der Stadtmitte von SanFrancisco vom 11.-13. Juli statt. Kein Attributbonus.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "Geflügelter Helm", "headMystery201402Notes": "Dieser geflügelte Helm verleiht seinem Träger die Geschwindigkeit des Windes. Kein Attributbonus. Februar 2014 Abonnenten-Gegenstand.", "headMystery201405Text": "Flamme des Geistes", @@ -463,7 +477,9 @@ "headMystery201508Text": "Geparden Hut", "headMystery201508Notes": "Dieser Gepardenhut ist sehr flauschig! Gewährt keinen Attributbonus. Abonnentengegenstand August 2015", "headMystery201509Text": "Werwolfmaske", - "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201509Notes": "Das IST doch eine Maske, nicht wahr? Kein Attributbonus. September 2015 Abonnenten-Gegenstand.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 Subscriber Item.", "headMystery301404Text": "Schicker Zylinder", "headMystery301404Notes": "Ein schicker Zylinder für die feinsten Gentlemänner und -frauen! Januar 3015 Abonennten-Gegenstand. Kein Attributbonus.", "headMystery301405Text": "Einfacher Zylinder", @@ -481,7 +497,7 @@ "headArmoireBlueHairbowText": "Blaue Haarschleife", "headArmoireBlueHairbowNotes": "Werde scharfsinnig, taff und klug, wenn du diese wunderschöne Blaue Haarschleife trägst! Erhöht Wahrnehmung um <%= per %>, Ausdauer um <%= con %> und Intelligenz um <%= int %>. Verzauberter Schrank: Unabhäniger Gegenstand.", "headArmoireRoyalCrownText": "Königliche Krone", - "headArmoireRoyalCrownNotes": "Ein Hoch auf den Herrscher, mächtig und stark! Erhöht Stärke um <%= str %>. Verzauberter Schrank: Unabhäniger Gegenstand.", + "headArmoireRoyalCrownNotes": "Ein Hoch auf den mächtigen und starken Herrscher! Erhöht Stärke um <%= str %>. Verzauberter Schrank: Königsset (Gegenstand 1 von 3).", "headArmoireGoldenLaurelsText": "Goldene Lorbeeren", "headArmoireGoldenLaurelsNotes": "Diese goldenen Lorbeeren dienen als Belohnung für diejenigen, die schlechte Gewohnheiten besiegt haben. Erhöht Wahrnehmung und Ausdauer jeweils um <%= attrs %>. Verzauberter Schrank: Goldenes Toga Set (Gegenstand 2 von 3)", "headArmoireHornedIronHelmText": "Gehörnter Eisenhelm", @@ -493,9 +509,15 @@ "headArmoirePlagueDoctorHatText": "Pestarzt Hut", "headArmoirePlagueDoctorHatNotes": "Ein authentischer Hut wie ihn Ärzte tragen, die die Pest der Prokrastination bekämpfen! Steigert die Stärke um <%= str %>, Intelligenz um <%= str %>, und Ausdauer um <%= con %>. Verzauberter Schrank: Pestdoktor Set (Gegenstand 1 von 3).", "headArmoireBlackCatText": "schwarzer Katzenhut", - "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireBlackCatNotes": "Dieser schwarze Hut ... schnurrt. Und sein Schwanz zuckt. Und er atmet? Okay, du hast einfach bloß eine schlafende Katze auf dem Kopf. Erhöht Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Unabhängiger Gegenstand.", "headArmoireOrangeCatText": "oranger Katzenhut", - "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireOrangeCatNotes": "Dieser orangene Hut ... schnurrt. Und sein Schwanz zuckt. Und er atmet? Okay, du hast einfach bloß eine schlafende Katze auf dem Kopf. Erhöht Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Unabhängiger Gegenstand.", + "headArmoireBlueFloppyHatText": "Blauer Schlapphut", + "headArmoireBlueFloppyHatNotes": "Viele Zaubersprüche wurden auf diesen Hut gewirkt, um ihm seine strahlend blaue Farbe zu geben. Erhöht Ausdauer, Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Unabhängiger Gegenstand", + "headArmoireShepherdHeaddressText": "Kopfschmuck des Hirten", + "headArmoireShepherdHeaddressNotes": "Manchmal lieben die Greifen, die du hütest, es auf dieser Kopfbedeckung herumzukauen, aber es scheint sie nichtsdestotrotz intelligenter zu machen. Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Hirten-Set (Gegenstand 3 von 3)", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "Schildhand-Gegenstand", "shieldBase0Text": "Keine Schildhand-Ausrüstung", "shieldBase0Notes": "Kein Schild oder keine zweite Waffe.", @@ -567,18 +589,20 @@ "shieldSpecialSummer2015WarriorNotes": "Dieser, wie Sand und Meer glänzende, Schild aus Tiefseemetall wurde von den Kunsthandwerkern aus Dilatory hergestellt. Erhöht Ausdauer um <%= con %>. Limited Edition 2015 Sommer-Ausrüstung.", "shieldSpecialSummer2015HealerText": "Eingefasster Schild", "shieldSpecialSummer2015HealerNotes": "Benutze dieses Schild um Bilgenratten wegzuschlagen. Erhöht Ausdauer um <%= con %>. Limited Edition 2015 Sommer-Ausrüstung.", - "shieldSpecialFall2015RogueText": "Bat-tle Ax", - "shieldSpecialFall2015RogueNotes": "Fearsome To-Dos cower before the flapping of this ax. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", + "shieldSpecialFall2015RogueText": "Kampfaxt", + "shieldSpecialFall2015RogueNotes": "Furchterregende tägliche Aufgaben ducken sich unter den Schlägen dieser Axt. Erhöht Stärke um <&=str %>. Limited Edition 2015 Herbst-Ausrüstung. ", "shieldSpecialFall2015WarriorText": "Vogelfutterbeutel", - "shieldSpecialFall2015WarriorNotes": "It's true that you're supposed to be SCARING the crows, but there's nothing wrong with making friends! Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", - "shieldSpecialFall2015HealerText": "Stirring Stick", - "shieldSpecialFall2015HealerNotes": "This stick can stir anything without melting, dissolving, or bursting into flame! It can also be used to fiercely poke enemy tasks. Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", + "shieldSpecialFall2015WarriorNotes": "Ja du solltest die Krähen ERSCHRECKEN, aber ein paar Freunde zu gewinnen kann nicht schaden! Erhöht Ausdauer um <%= con %>. Limited Edition 2015 Herbst-Ausrüstung.", + "shieldSpecialFall2015HealerText": "Rührstab", + "shieldSpecialFall2015HealerNotes": "Mit diesem Stab kannst du alles umrühren, ohne dass er schmilzt, sich auflöst oder in Flammen ausbricht. Er kann ebenso dazu benutzt werden heftig in bösen Aufgaben herumzustochern. Erhöht Ausdauer um <%= con %>. Limited Edition 2015 Herbst-Ausrüstung.", "shieldMystery301405Text": "Uhrenschild", "shieldMystery301405Notes": "Die Zeit ist auf deiner Seite mit diesem gewaltigen Uhrenschild! Juni 3015 Abonennten-Gegenstand. Kein Attributbonus.", "shieldArmoireGladiatorShieldText": "Gladiatorschild", "shieldArmoireGladiatorShieldNotes": "Um ein Gladiator zu sein, musst du ... naja, egal, schlag sie einfach mit deinem Schild. Erhöht Ausdauer um <%= con %> und Stärke um <%= str %>. Verzauberter Schrank: Gladiatorset (Gegenstand 3 von 3).", "shieldArmoireMidnightShieldText": "Mitternachtsschild", - "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "shieldArmoireMidnightShieldNotes": "Dieses Schild ist am mächtigsten um Punkt Mitternacht! Erhöht Ausdauer um <%= con %> und Stärke um <%= str %>. Verzauberter Schrank: Unabhängiger Gegenstand.", + "shieldArmoireRoyalCaneText": "Königlicher Stock", + "shieldArmoireRoyalCaneNotes": "Ein Hoch auf den besungenen Herrscher! Erhöht Ausdauer, intelligenz und Wahrnehmung um je <%= attrs %>. Verzauberter Schrank: Königsset (Gegenstand 2 von 3).", "back": "Rückenschmuck", "backBase0Text": "Kein Rückenschmuck", "backBase0Notes": "Kein Rückenschmuck.", @@ -592,6 +616,8 @@ "backMystery201504Notes": "Summ summ summ! Schwirre von Aufgabe zu Aufgabe. Verleiht keine Attributboni. April 2015 Abonnentengegenstand.", "backMystery201507Text": "Cooles Surfboard", "backMystery201507Notes": "Brande vor den Fleißigen Docks und reite die Wellen der Unvollständigkeitsbucht! gewährt keinen Attributbonus. Abonnentengegenstand Juli 2015", + "backMystery201510Text": "Koboldschwanz", + "backMystery201510Notes": "Zum Greifen geeignet und mächtig! Gewährt keinen Attributbonus. Oktober 2015 Abonenntengegenstand.", "backSpecialWonderconRedText": "Mächtiger Umhang", "backSpecialWonderconRedNotes": "Strotzt vor Stärke und Schönheit. Kein Attributbonus. Special Edition Convention-Gegenstand.", "backSpecialWonderconBlackText": "Tückischer Umhang", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "Dieses mächtige Geweih passt sich in seiner Farbe den Blättern an. Kein Attributbonus. September 2014 Abonnenten-Gegenstand.", "headAccessoryMystery201502Text": "Flügel der Gedanken", "headAccessoryMystery201502Notes": "Verleihe deiner Vorstellung Flügel! Gewährt keinen Attributbonus. Februar 2015 Abonnentengegenstand.", + "headAccessoryMystery201510Text": "Koboldhörner", + "headAccessoryMystery201510Notes": "Diese schreckenerregenden Hörner sind ein wenig schleimig. Gibt keine Verbesserung. Oktober 2015 Abonnementen Gegenstand.", "headAccessoryMystery301405Text": "Kopf-Brille", "headAccessoryMystery301405Notes": "\"Brillen sind für die Augen,\" haben sie gesagt. \"Niemand will Brillen, die man nur auf dem Kopf tragen kann,\" haben sie gesagt. Ha! Da hast du es ihnen aber ordentlich gezeigt! August 3015 Abonnenten-Gegenstand. Kein Attributbonus.", "eyewear": "Brillen", diff --git a/common/locales/de/generic.json b/common/locales/de/generic.json index f673b8ed21..26fc617ee8 100644 --- a/common/locales/de/generic.json +++ b/common/locales/de/generic.json @@ -28,7 +28,7 @@ "market": "Marktplatz", "subscriberItem": "Überraschungsgegenstand", "newSubscriberItem": "Neuer Überraschungsgegenstand", - "subscriberItemText": "Abonnenten erhalten jeden Monat einen Überraschungsgegenstand. Der Gegenstand wird üblicherweise ungefähr eine Woche vor Monatsende veröffentlicht. Das genaue Datum gibt es auf der 'Mystery Item' Seite des Wikis.", + "subscriberItemText": "Abonnenten bekommen jeden Monat einen Überraschungsgegenstand. Dieser wird üblicherweise ungefähr eine Woche vor Monatsende herausgegeben. Schaue auf der 'Überraschungsgegenstand'-Seite des Wikis für mehr Informationen nach.", "all": "Alle", "none": "Keine", "or": "Oder", @@ -69,8 +69,9 @@ "habiticaDayPluralText": "Hat <%= number %> Namenstage gefeiert! Danke, dass Du so ein toller Nutzer bist!", "achievementDilatory": "Retter von Dilatory", "achievementDilatoryText": "Hat beim 2014 Summer Splash Event dabei geholfen, den Schreckensdrachen von Dilatory zu besiegen!", - "costumeContest": "Kostüm-Contest 2014", - "costumeContestText": "Hat am Halloween-Kostüm-Contest 2014 teilgenommen. Lies dazu weitere Artikel im Blog!", + "costumeContest": "Kostümwettbewerbsteilnehmer", + "costumeContestText": "Hat am Habitoween Kostümwettbewerb teilgenommen. Schau einige Einträge im Habitica Blog an!", + "costumeContestTextPlural": "Hat an <%= number %> Habitoween Kostümwettbewerben teilgenommen. Schau einige Einträge im Habitica Blog an!", "memberSince": "- Teilnehmer seit", "lastLoggedIn": "- Zuletzt eingeloggt", "notPorted": "Dieses Feature wurde noch nicht von der ursprünglichen Seite geportet.", @@ -79,6 +80,7 @@ "errorUpCase": "FEHLER:", "newPassSent": "Neues Passwort wurde gesendet.", "serverUnreach": "Der Server ist momentan nicht erreichbar.", + "requestError": "Ojeh, ein Fehler ist aufgetreten! Bitte lade die Seite neu, deine letzte Aktion wurde vielleicht nicht korrekt gespeichert.", "seeConsole": "Tritt der Fehler weiterhin auf, bitte berichte ihn bei Hilfe > Berichte einen Bug. Falls du weißt, wie du die Konsole deines Internetbrowsers einsehen kannst, füge die entsprechenden Fehlernachrichten bei.", "error": "Fehler", "menu": "Menü", @@ -110,9 +112,9 @@ "December": "Dezember", "dateFormat": "Datumsformat", "achievementStressbeast": "Retter von Stoïkalm", - "achievementStressbeastText": "Helped defeat the Abominable Stressbeast during the 2014 Winter Wonderland Event!", - "achievementBurnout": "Savior of the Flourishing Fields", - "achievementBurnoutText": "Helped defeat Burnout and restore the Exhaust Spirits during the 2015 Fall Festival Event!", + "achievementStressbeastText": "Hat geholfen während des Winter Wunderland 2014 das Abscheuliche Stressbiest zu besiegen!", + "achievementBurnout": "Retter der Blühenden Felder", + "achievementBurnoutText": "Hat beim 2015 Herbstfestival Event dabei geholfen, Burnout zu besiegen und die Geister der Erschöpfung wiederherzustellen!", "checkOutProgress": "Schau dir meinen Fortschritt in Habitica an!", "cardReceived": "Du hast eine Karte erhalten!", "cardReceivedFrom": "<%= cardType %>, Von: <%= cardType %>", @@ -132,6 +134,18 @@ "thankyou1": "Danke, danke, danke!", "thankyou2": "Ich danke dir tausend mal.", "thankyou3": "Im bin sehr dankbar - danke!", - "thankyouCardAchievementTitle": "Danke vielmals.", - "thankyouCardAchievementText": "Danke für deine Dankbarkeit! Hat <%= cards %> Dankeskarten verschickt. " + "thankyouCardAchievementTitle": "Danke vielmals", + "thankyouCardAchievementText": "Danke für deine Dankbarkeit! Hat <%= cards %> Dankeskarten verschickt. ", + "streakAchievement": "Du hast einen Strähnen-Erfolg erzielt!", + "firstStreakAchievement": "21-Tage Strähne", + "streakAchievementCount": "<%= streaks %> 21-Tage Strähnen", + "twentyOneDays": "Du hast deine tägliche Aufgabe an 21 aufeinander folgenden Tagen erledigt!", + "dontBreakStreak": "Erstaunliche Leistung. Unterbrich die Strähne nicht!", + "dontStop": "Jetzt nicht aufhören!", + "levelUpShare": "Ich habe in Habitica ein neues Level erreicht, indem ich meine Gewohnheiten verbessert habe!", + "questUnlockShare": "Ich habe ein neues Quest in Habitica freigeschaltet!", + "hatchPetShare": "Ich habe ein neues Haustier ausgebrütet, indem ich meine Aufgaben im echten Leben erledigt habe!", + "raisePetShare": "Ich habe ein Haustier zu einem Reittier großgezogen, indem ich meine Aufgaben im echten Leben erledigt habe!", + "wonChallengeShare": "Ich habe in Habitica einen Wettbewerb gewonnen!", + "achievementShare": "Ich habe in Habitica einen neuen Erfolg verdient!" } \ No newline at end of file diff --git a/common/locales/de/groups.json b/common/locales/de/groups.json index 7f501e65b6..8ef4cb2b75 100644 --- a/common/locales/de/groups.json +++ b/common/locales/de/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "Das Gasthaus verlassen", "innCheckIn": "Im Gasthaus erholen", "innText": "Du erholst dich im Gasthaus! Während du dort verweilst, werden dir deine täglichen Aufgaben keinen Schaden zufügen, aber trotzdem täglich aktualisiert werden. Vorsicht: Wenn du an einem Bosskampf teilnimmst, erhältst du weiterhin Schaden für die verpassten Aufgaben deiner Gruppenmitglieder, sofern sich diese nicht auch im Gasthaus befinden! Außerdem wird der Schaden, den Du dem Boss zufügst, (und gefundene Gegenstände) erst angewendet, wenn du das Gasthaus verlässt.", + "innTextBroken": "Du erholst dich im Gasthaus, schätze ich... Während du dort verweilst, werden dir deine täglichen Aufgaben keinen Schaden zufügen, aber trotzdem täglich aktualisiert... Wenn du an einem Bosskampf teilnimmst, erhältst du weiterhin Schaden für die verpassten Aufgaben deiner Gruppenmitglieder... sofern sich diese nicht auch im Gasthaus befinden... Außerdem wird dein Schaden am Boss (oder gesammelte Gegenstände) nicht berücksichtigt, bis du das Gasthaus verlässt.... So müde...", "lfgPosts": "Nach Gruppeneinträgen suchen", "tutorial": "Anleitung", "glossary": "Nomenklatur", @@ -145,5 +146,6 @@ "partyEmpty": "Du bist alleine in Deiner Gruppe. Lade Freunde ein!", "partyChatEmpty": "Dein Gruppenchat ist leer. Tippe eine Nachricht in der Box und beginne mit dem Chat.", "guildChatEmpty": "Dieser Gildenchat ist leer. Gib eine Nachricht ein und beginne mit dem Chat.", - "possessiveParty": "<%= name %>s Gruppe" + "possessiveParty": "<%= name %>s Gruppe", + "requestAcceptGuidelines": "Wenn du Nachrichten in der Schenke oder in irgendeinem Gruppen- oder Gilden-Chat posten willst, bitte lies zuerst unsere <%= linkStart %>Community-Richtlinien<%= linkEnd %>. Klicke danach unten auf den Button, um sie zu akzeptieren." } \ No newline at end of file diff --git a/common/locales/de/limited.json b/common/locales/de/limited.json index 71454f7d37..c56dbca3cb 100644 --- a/common/locales/de/limited.json +++ b/common/locales/de/limited.json @@ -9,7 +9,7 @@ "agriculturalFriends": "Gartenbegeisterte Freunde", "agriculturalFriendsText": "Wurde <%= seeds %> mal von Gruppenmitgliedern in eine Blume verwandelt.", "aquaticFriends": "Wasserliebende Freunde", - "aquaticFriendsText": "Wurde <%= seafoam %> von Gruppenmitgliedern mit Meeresschaum nassgespritzt.", + "aquaticFriendsText": "Wurde <%= seafoam %> mal von Gruppenmitgliedern mit Meeresschaum nassgespritzt.", "valentineCard": "Valentinstagskarte", "valentineCardExplanation": "Dafür, dass ihr so ein zuckersüßes Gedicht ertragen habt, erhaltet ihr beide das \"Liebevolle Freunde\" Abzeichen", "valentineCardNotes": "Einem Gruppenmitglied eine Valentinskarte schicken.", @@ -21,6 +21,7 @@ "valentineCardAchievementText": "Ohh, deine Freunde und du, ihr müsst euch ja wirklich gern haben. Du hast insgesamt <%= cards %> Valentinstagskarten gesendet und bekommen.", "polarBear": "Eisbär", "turkey": "Truthahn", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "Eisbärenjunges", "jackolantern": "Halloweenkürbis", "seasonalShop": "Saisonaler Shop", @@ -29,8 +30,9 @@ "seasonalShopClosedText": "Der Saisonale Shop ist gerade geschlossen!! Ich weiß nicht, wo die Saisonzauberin gerade ist, aber ich wette sie wird während der nächsten Grand Gala wieder zurück sein!", "seasonalShopText": "Willkommen zum Jahreszeitenmarkt!! Momentan haben wir Frühlingsgegenstände auf Lager. Alles hier wird während des Frühlingsevents, das jedes Jahr stattfindet, verfügbar sein. Allerdings nur bis zum 30. April, also stocke jetzt auf, ansonsten musst du bis nächstes Jahr warten.", "seasonalShopSummerText": "Willkommen zum Jahreszeitenmarkt!! Momentan haben wir jahreszeitlich wechselnde Gegenstände auf Lager. Alles hier wird während des Sommerevents, das jedes Jahr stattfindet, verfügbar sein. Allerdings nur bis zum 31. Juli, also stocke jetzt auf, ansonsten musst du bis nächstes Jahr warten.", - "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31, so be sure to stock up now, or you'll have to wait a year to buy these items again!", - "seasonalShopRebirth": "If you've used the Orb of Rebirth, you can repurchase this equipment in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.", + "seasonalShopFallText": "Willkommen zum saisonalen Shop!! Momentan haben wir Herbstgegenstände auf Lager. Alles hier wird während des Herbstevents, das jedes Jahr stattfindet, verfügbar sein. Allerdings nur bis zum 31. October, also stocke jetzt deine Vorräte auf, ansonsten musst du bis nächstes Jahr warten.", + "seasonalShopFallTextBroken": "Willkommen zum saisonalen Shop!! Momentan haben wir herbst Gegenstände auf Lager. Alles hier wird während des Herbstevents, das jedes Jahr stattfindet, verfügbar sein. Allerdings nur bis zum 31. October, also stocke jetzt deine Vorräte auf, ansonsten musst du bis nächstes Jahr warten...*hach*", + "seasonalShopRebirth": "Wenn Du die Sphäre der Wiedergeburt benutzt hast, kannst du diesen Ausrüstungsgegenstand in der Belohnungsspalte erneut kaufen. Anfangs wirst Du nur Gegenstände für Deine momentane Klasse (Krieger) kaufen können, aber keine Sorge, die anderen klassenspezifischen Gegenstände werden verfügbar, sobald Du zu der jeweiligen Klasse wechselst. ", "candycaneSet": "Zuckerstange (Magier)", "skiSet": "Ski-Attentäter (Schurke)", "snowflakeSet": "Schneeflocke (Heiler)", @@ -56,9 +58,9 @@ "emeraldMermageSet": "Smaragdgrüner Meermagier (Magier)", "reefSeahealerSet": "Riff-Seeheiler (Heiler)", "roguishPirateSet": "Schurkischer Pirat (Schurke)", - "monsterOfScienceSet": "Monster of Science (Warrior)", - "witchyWizardSet": "Witchy Wizard (Mage)", + "monsterOfScienceSet": "Monster der Wissenschaft (Krieger)", + "witchyWizardSet": "Zauberhafter Zauberer (Magier)", "mummyMedicSet": "Mumien Sanitäter (Heiler)", - "vampireSmiterSet": "Vampire Smiter (Rogue)", - "fallEventAvailability": "Available until October 31" + "vampireSmiterSet": "Vampirjäger (Schurke)", + "fallEventAvailability": "Verfügbar bis zum 31. Oktober" } \ No newline at end of file diff --git a/common/locales/de/messages.json b/common/locales/de/messages.json index a249d74c48..8da8eef691 100644 --- a/common/locales/de/messages.json +++ b/common/locales/de/messages.json @@ -5,7 +5,7 @@ "messageTagNotFound": "Tag nicht gefunden.", "messagePetNotFound": ":pet in user.items.pets nicht gefunden", "messageFoodNotFound": ":food in user.items.food nicht gefunden", - "messageNotAvailable": "This item is not currently available for purchase.", + "messageNotAvailable": "Dieser Gegenstand steht momentan nicht zum Verkauf. ", "messageCannotFeedPet": "Dieses Haustier will und kann nicht gefüttert werden.", "messageAlreadyMount": "Du hast dieses Reittier bereits. Füttere lieber ein anderes Haustier.", "messageEvolve": "<%= egg %> wurde gezähmt, es ist an der Zeit aufzusitzen!", @@ -15,7 +15,7 @@ "messageEquipped": "<%= itemText %> angelegt.", "messageUnEquipped": "<%= itemText %> abgelegt.", "messageMissingEggPotion": "Dir fehlt entweder dieses Ei oder dieser Trank", - "messageInvalidEggPotionCombo": "You can't hatch Quest Pet Eggs with Magic Hatching Potions! Try a different egg.", + "messageInvalidEggPotionCombo": "Du kannst Quest Haustier-Eier nicht mit magischen Schlüftränken schlüpfen lassen! Versuche es mir einem anderen Ei. ", "messageAlreadyPet": "Du hast dieses Haustier bereits. Versuche doch eine andere Kombination.", "messageHatched": "Ein Ei ist ausgeschlüpft! Besichtige die Ställe um Dein Haustier auszuwählen.", "messageNotEnoughGold": "Nicht genug Gold", @@ -30,5 +30,26 @@ "messageAlreadyOwnGear": "Du besitzt den Gegenstand schon. Gehe zur Ausrüstungsseite, um ihn anzulegen.", "armoireEquipment": "<%= image %> Du hast ein Stück seltener Ausrüstung im verzauberten Schrank gefunden: <%= dropText %>! Wow!", "armoireFood": "<%= image %> Du wühlst im verzauberten Schrank herum und findest <%= dropArticle %><%= dropText %>. Was macht das denn da drin?", - "armoireExp": "Du ringst mit dem verzauberten Schrank und gewinnst Erfahrung. Nimm das!" + "armoireExp": "Du ringst mit dem verzauberten Schrank und gewinnst Erfahrung. Nimm das!", + "messageInsufficientGems": "Nicht genügend Edelsteine!", + "messageAuthPasswordMustMatch": ":password und :confirmPassword stimmen nicht überein", + "messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword erforderlich", + "messageAuthUsernameTaken": "Benutzername existiert bereits", + "messageAuthEmailTaken": "E-Mail existiert bereits", + "messageAuthNoUserFound": "Kein Benutzer gefunden", + "messageAuthMustBeLoggedIn": "Du musst angemeldet sein.", + "messageAuthMustIncludeTokens": "Deine Anfrage muss ein Token und eine UID (Benutzer-Kennung) beinhalten", + "messageGroupNotFound": "Gruppe nicht gefunden, oder du hast keine Zugriffsrechte.", + "messageGroupAlreadyInParty": "Der Gruppe bereits beigetreten, versuche neu zu laden.", + "messageGroupOnlyLeaderCanUpdate": "Nur der Gruppenleiter kann die Gruppe aktualisieren!", + "messageGroupRequiresInvite": "Du kannst keiner Gruppe beitreten, zu der du nicht eingeladen wurdest.", + "messageGroupCannotRemoveSelf": "Du kannst dich nicht selbst entfernen!", + "messageGroupChatBlankMessage": "Du kannst keine leere Nachricht versenden", + "messageGroupChatLikeOwnMessage": "\"Gefällt mir\" funktioniert nicht bei eigenen Nachrichten. Sei nicht so einer.", + "messageGroupChatFlagOwnMessage": "Du kannst deine eigene Nachricht nicht melden.", + "messageGroupChatFlagAlreadyReported": "Du hast diese Nachricht bereits gemeldet.", + "messageGroupChatNotFound": "Nachricht wurde nicht gefunden!", + "messageGroupChatAdminClearFlagCount": "Nur Admins können den Zählmarker zurücksetzen!", + "messageUserOperationProtected": "Pfad `<%= operation %>` nicht gespeichert, da dieser geschützt ist.", + "messageUserOperationNotFound": "<%= operation %> Operation nicht gefunden" } \ No newline at end of file diff --git a/common/locales/de/noscript.json b/common/locales/de/noscript.json new file mode 100644 index 0000000000..8b5b0a84c8 --- /dev/null +++ b/common/locales/de/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Oh je! Dein Browser erlaubt kein JavaScript", + "jsDisabledHeadingFull": "Oh je! Dein Browser erlaubt kein JavaScript und ohne dieses funktioniert Habitica nicht richtig", + "jsDisabledText": "Habitica kann die Seite sonst nicht richtig darstellen!", + "jsDisabledLink": "Bitte erlaube JavaScript um fortzufahren!" +} \ No newline at end of file diff --git a/common/locales/de/npc.json b/common/locales/de/npc.json index 916da86252..12c7d7b869 100644 --- a/common/locales/de/npc.json +++ b/common/locales/de/npc.json @@ -7,15 +7,19 @@ "daniel": "Daniel", "danielText": "Willkommen im Gasthaus! Setz dich und triff die Einheimischen. Willst du dich ausruhen (Urlaub? Krankheit?), dann besorge ich dir ein schönes Zimmer. Solange du dort eingecheckt bist, werden deine täglichen Aufgaben dir am Ende des Tages keinen Schaden zufügen, du kannst sie trotzdem noch abhaken.", "danielText2": "Sei gewarnt: Falls Du an einer Boss-Quest teilnimmst, wird Dir der Boss immer noch Schaden für die nicht abgehakten Aufgaben Deiner Gruppenmitglieder zufügen! Außerdem wird der Schaden, den Du dem Boss zufügst (sowie gefundene Gegenstände) erst angerechnet, wenn Du das Gasthaus verlässt.", + "danielTextBroken": "Willkommen im Gasthaus... Willst du dich ausruhen, dann besorge ich dir ein schönes Zimmer... Solange du dort eingecheckt bist, werden deine täglichen Aufgaben dir am Ende des Tages keinen Schaden zufügen, du kannst sie trotzdem noch abhaken... wenn du die Kraft dazu hast...", + "danielText2Broken": "Oh... Falls Du an einer Boss-Quest teilnimmst, wird Dir der Boss immer noch Schaden für die nicht abgehakten Aufgaben Deiner Gruppenmitglieder zufügen... Außerdem wird der Schaden, den Du dem Boss zufügst (sowie gefundene Gegenstände) erst angerechnet, wenn Du das Gasthaus verlässt...", "alexander": "Alexander der Händler", "welcomeMarket": "Willkommen auf dem Marktplatz! Kaufe schwer zu findende Eier und Tränke! Verkaufe Überflüssiges! Gib' wichtige Dienste in Auftrag! Komm' und schau', was wir anzubieten haben.", - "sellForGold": "Verkaufe <%= item %> für <%= gold %> Gold", - "sellEggForGold": "Verkaufe <%= itemType %> Ei für <%= gold %> Gold", - "sellPotionForGold": "Verkaufe <%= itemType %> Trank für <%= gold %> Gold", + "displayItemForGold": "Möchtest du ein <%= itemType %> verkaufen?", + "displayEggForGold": "Möchtest du ein <%= itemType %> Ei verkaufen?", + "displayPotionForGold": "Möchtest du einen <%= itemType %> Trank verkaufen?", + "sellForGold": "Verkauf es für <%= gold %> Gold", "buyGems": "Kaufe Edelsteine", "justin": "Justin", "ian": "Jan", "ianText": "Willkommen beim Quest Shop! Hier kannst du Questschriftrollen besorgen, um mit deinen Freunden Monster zu bekämpfen. Durchstöbere unsere große Anzahl an Schriftrollen und investiere in die Richtige!", + "ianBrokenText": "Willkommen beim Quest Shop... Hier kannst du Questschriftrollen besorgen, um mit deinen Freunden Monster zu bekämpfen... Durchstöbere unsere große Anzahl an Schriftrollen und investiere in die Richtige...", "USD": "USD ($)", "newStuff": "Neuigkeiten", "cool": "Erzähl es mir später", @@ -71,14 +75,14 @@ "tourHabitsProceed": "Das leuchtet ein!", "tourRewardsBrief": "Liste der Belohnungen
  • Gib dein hart verdientes Gold hier aus!
  • Kaufe Ausrüstung für deinen Avatar oder führe eigene Belohnungen ein.
", "tourRewardsProceed": "Das war's!", - "welcomeToHabit": "Welcome to Habitica!", - "welcome1": "Create a basic avatar.", - "welcome1notes": "This avatar will represent you as you progress.", - "welcome2": "Set up your tasks.", - "welcome2notes": "How well you do on your real-life tasks will control how well you do in the game!", - "welcome3": "Progress in life and the game!", - "welcome3notes": "As you improve your life, your avatar will level up and unlock pets, quests, equipment, and more!", + "welcomeToHabit": "Willkommen in Habitica!", + "welcome1": "Erstelle einen einfachen Avatar.", + "welcome1notes": "Der Avatar repräsentiert dich und deinen Fortschritt.", + "welcome2": "Erstelle deine Aufgaben.", + "welcome2notes": "Wie gut du deine Aufgaben im echten Leben erledigst, entscheidet wie gut du im Spiel bist! ", + "welcome3": "Mache Fortschritte in deinem Leben und dem Spiel!", + "welcome3notes": "Während du dein Leben verbesserst, steigt dein Avatar im Level auf und schaltet damit Haustiere, Quests, Ausrüstung und noch mehr frei! ", "welcome4": "Vermeide schlechte Gewohnheiten, die Lebenspunkte (HP) abziehen oder dein Avatar wird sterben!", "welcome5": "Jetzt kannst du deinen Avatar anpassen und deine Aufgaben einrichten...", - "imReady": "Enter Habitica" + "imReady": "Betrete Habitica" } \ No newline at end of file diff --git a/common/locales/de/pets.json b/common/locales/de/pets.json index 44a88c7565..593cb09fb1 100644 --- a/common/locales/de/pets.json +++ b/common/locales/de/pets.json @@ -1,15 +1,15 @@ { "pets": "Haustiere", "petsFound": "Haustiere gefunden", - "magicPets": "Magic Potion Pets", + "magicPets": "Magische Tiere", "rarePets": "Seltene Haustiere", "questPets": "Quest Haustiere", "mounts": "Reittiere", "mountsTamed": "Reittiere gezähmt", "questMounts": "Quest Reittiere", - "magicMounts": "Magic Potion Mounts", + "magicMounts": "Magische Reittiere", "rareMounts": "Seltene Reittiere", - "etherealLion": "Ethärischer Löwe", + "etherealLion": "Ätherischer Löwe", "veteranWolf": "Veteranwolf", "veteranTiger": "Veteranentiger", "cerberusPup": "Zerberuswelpe", @@ -18,7 +18,7 @@ "mammoth": "Wollhaarmammut", "orca": "Schwertwal", "royalPurpleGryphon": "Königlicher purpurfarbener Greif", - "phoenix": "Phoenix", + "phoenix": "Phönix", "rarePetPop1": "Klicke auf den goldenen Pfotenabdruck, um zu sehen, wie Du diese seltenen Haustiere erhalten kannst, indem Du bei Habitica mitwirkst!", "rarePetPop2": "Wie erhält man dieses Haustier?", "potion": "<%= potionType %> Trank", @@ -27,15 +27,15 @@ "eggSingular": "Ei", "noEggs": "Du hast im Moment keine Eier.", "hatchingPotions": "Schlüpftränke", - "magicHatchingPotions": "Magic Hatching Potions", + "magicHatchingPotions": "Magische Schlüpftränke", "hatchingPotion": "Schlüpftrank", "noHatchingPotions": "Du hast im Moment keine Schlüpftränke.", "inventoryText": "Klicke ein Ei um die anwendbaren Tränke grün hervorgehoben zu sehen und klicke auf einen hervorgehobenen Trank um Dein Haustier auszubrüten. Falls kein Trank hervorgehoben wird, klicke auf das Ei um es abzuwählen und klicke diesmal zuerst auf den Trank um die Eier hervorzuheben. Du kannst überflüssige Gegenstände auch an Alexander den Kaufmann verkaufen.", "foodText": "Futter", "food": "Futter und magische Sättel", "noFood": "Du hast im Moment weder Futter noch magische Sättel.", - "dropsExplanation": "Get these items faster with Gems if you don't want to wait for them to drop when completing a task. Learn more about the drop system.", - "premiumPotionNoDropExplanation": "Magic Hatching Potions cannot be used on eggs received from Quests. The only way to get Magic Hatching Potions is by buying them below, not from random drops.", + "dropsExplanation": "Erhalte diese Gegenständer schnelle mit Edelsteinen, wenn du nicht warten möchtest, bis du sie als Beute für erfüllte Aufgaben erhälst. Erfahre mehr über das Beutesystem.", + "premiumPotionNoDropExplanation": "Magische Schlüpftränke können nicht auf Eier, die du durch Quests erhalten hast, angewendet werden. Magische Schlüpftränke können nur gekauft und nicht durch zufällige Beute erworben werden. ", "beastMasterProgress": "\"Meister aller Bestien\" Fortschritt", "stableBeastMasterProgress": "Meister aller Bestien Forstschritt: <%= number %> Haustiere gefunden", "beastAchievement": "Du hast den \"Meister aller Bestien\" Erfolg dafür erhalten, dass Du alle Haustiere gesammelt hast!", @@ -58,8 +58,16 @@ "firstDrop": "Du hast das Beutesystem freigeschaltet! Ab jetzt hast du jedes mal wenn Du eine Aufgabe abhakst eine kleine Chance einen Gegenstand zu finden, wie zum Beispiel Eier, Schlüpftränke und Futter! Du hast eben ein <%= eggText %> Ei gefunden! <%= eggNotes %>", "useGems": "Du willst ein bestimmtes Haustier haben, möchtest aber nicht länger warten, bis Du die richtigen Gegenstände gefunden hast? Mit Edelsteinen kannst du im Inventar > Marktplatz die entsprechenden Gegenstände kaufen!", "hatchAPot": "Willst du ein <%= potion %> <%= egg %> ausbrüten?", + "hatchedPet": "Du hast ein <%= potion %> <%= egg %> ausgebrütet!", + "displayNow": "Jetzt anzeigen", + "displayLater": "Später anzeigen", + "earnedCompanion": "Durch deine Produktivität hast du einen neuen Begleiter erhalten. Füttere ihn, damit er wächst.", "feedPet": "'Verfüttere <%= article %> <%= text %> an <%= name %>?", "useSaddle": "Einen magischen Sattel auf <%= pet %> anwenden?", + "raisedPet": "Du hast einen <%= pet %> aufgezogen!", + "earnedSteed": "Durch das Erfüllen deiner Aufgaben hast du ein treues Reittier verdient!", + "rideNow": "Jetzt reiten", + "rideLater": "Später reiten", "petName": "<%= potion %> <%= egg %>", "mountName": "<%= potion %> <%= mount %>", "petKeyName": "Schlüssel zu den Zwingern.", diff --git a/common/locales/de/quests.json b/common/locales/de/quests.json index c32f9ef504..80038272bf 100644 --- a/common/locales/de/quests.json +++ b/common/locales/de/quests.json @@ -13,6 +13,7 @@ "youReceived": "Du hast folgendes erhalten:", "dropQuestCongrats": "Gratulation zum Erwerb dieser Questschriftrolle! Du kannst nun deine Gruppe dazu einladen die Quest zu starten oder du kommst irgendwann darauf zurück unter Inventar > Quests.", "questSend": "Ein Klick auf \"Einladen\" sendet eine Einladung an Deine Gruppenmitglieder. Sobald alle Mitglieder diese angenommen oder abgelehnt haben, beginnt die Quest. Der Status ist unter Optionen > Soziales > Gruppe einsehbar.", + "questSendBroken": "Ein Klick auf \"Einladen\" sendet eine Einladung an Deine Gruppenmitglieder. Sobald alle Mitglieder diese angenommen oder abgelehnt haben, beginnt die Quest ... Der Status ist unter Optionen > Soziales > Gruppe einsehbar.", "inviteParty": "Lade Gruppe zur Quest ein", "questInvitation": "Quest Einladung:", "questInvitationTitle": "Quest-Einladung", @@ -24,19 +25,25 @@ "rejected": "Abgelehnt", "pending": "Überlegt noch", "questStart": "Sobald alle Mitglieder die Einladung entweder angenommen oder abgelehnt haben beginnt die Quest. Nur diejenigen, die die Einladung \"angenommen\" haben können an der Quest teilnehmen und die Belohnungen kassieren. Wenn Mitglieder zu lange überlegen (inaktiv?), kannst Du die Quest ohne sie starten indem Du auf \"Beginnen\" klickst. Der Quest-Besitzer kann die Quest auch abbrechen und die Questrolle zurückerhalten indem er \"Abbrechen\" klickt.", + "questStartBroken": "Sobald alle Mitglieder die Einladung entweder angenommen oder abgelehnt haben beginnt das Quest... Nur diejenigen, die die Einladung \"angenommen\" haben können an dem Quest teilnehmen und die Belohnungen kassieren... Wenn Mitglieder zu lange überlegen (inaktiv?), kannst Du das Quest ohne sie starten indem Du auf \"Beginnen\" klickst... Der Quest-Besitzer kann die Quest auch abbrechen und die Questrolle zurückerhalten indem er \"Abbrechen\" klickt...", "begin": "Beginnen", "bossHP": "Boss Lebenspunkte", "bossStrength": "Boss Stärke", - "rage": "Rage", + "rage": "Wut", "collect": "Sammle ein", "collected": "Gesammelt", "collectionItems": "<%= number %> <%= items %>", "itemsToCollect": "Zu sammelnde Gegenstände", "bossDmg1": "Jede erledigte tägliche Aufgabe und Aufgabe und jede positive Gewohnheit fügt dem Boss Schaden zu. Mit röteren Aufgaben, Gewaltschlag oder Flammenstoß kannst du ihm noch stärkeren Schaden zufügen. Für jede tägliche Aufgabe, die du nicht erledigt hast, wird der Boss jedem Teilnehmer der Quest Schaden zufügen (multipliziert mit der Stärke des Bosses), der zu deinem normalen Schaden noch dazukommt. Deshalb sorge dafür, dass deine Gruppe gesund bleibt, indem du deine täglichen Aufgaben erledigst! Jeder Schaden, der dem Boss zugefügt wird und den er zufügt, wird zu Cron berechnet (dein individueller Tagesbeginn).", "bossDmg2": "Nur Teilnehmer kämpfen gegen den Boss und bekommen ihren Anteil an der Beute.", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "Jede erledigte tägliche und einmalige Aufgabe und jede positive Gewohnheit fügt dem Boss Schaden zu... Mit röteren Aufgaben, Gewaltschlag oder Flammenstoß kannst du ihm noch stärkeren Schaden zufügen... Für jede tägliche Aufgabe, die du nicht erledigt hast, wird der Boss jedem Teilnehmer der Quest Schaden zufügen (multipliziert mit der Stärke des Bosses), der zu deinem normalen Schaden noch dazukommt... Deshalb sorge dafür, dass deine Gruppe gesund bleibt, indem du deine täglichen Aufgaben erledigst... Jeder Schaden, der dem Boss zugefügt wird und den er zufügt, wird zu Cron berechnet (dein individueller Tagesbeginn)...", + "bossDmg2Broken": "Nur Teilnehmer kämpfen gegen den Boss und erhalten ihren Anteil an der Beute.", + "tavernBossInfo": "Erledige tägliche und einmalige Aufgaben und punkte mit guten Gewohnheiten, um dem Weltboss zu schaden! Unerledigte tägliche Aufgaben füllen die Erschöpfungsschlagleiste. Wenn sie voll ist, greift der Weltboss einen NPC an. Ein Weltboss wird niemals einzelnen Spielern oder Accounts auf irgendeine Weise schaden. Nur die Aufgaben aktiver Accounts, welche sich nicht im Gasthaus erholen, werden aufsummiert.", + "tavernBossInfoBroken": "Erledige tägliche und einmalige Aufgaben und punkte mit guten Gewohnheiten, um dem Weltboss zu schaden... Unerledigte tägliche Aufgaben füllen die Erschöpfungsschlagleiste... Wenn sie voll ist, greift der Weltboss einen NPC an... Ein Weltboss wird niemals einzelnen Spielern oder Accounts auf irgendeine Weise schaden... Nur die Aufgaben aktiver Accounts, welche sich nicht im Gasthaus erholen, werden aufsummiert...", "bossColl1": "Um Gegenstände zu sammeln musst Du Deine Aufgaben erfüllen. Quest Gegenstände sind genauso wie normale Gegenstände zu finden, aber Du kannst das Ergebnis erst zum Tageswechsel sehen. Dann wird alles, was jeder Teilnehmer gefunden hat zusammengerechnet und dem Quest zugerechnet.", "bossColl2": "Nur Teilnehmer können Gegenstände sammeln und erhalten ihren Anteil an der Beute.", + "bossColl1Broken": "Im Gegenstände zu sammeln müssen positive Aufgaben abgeschlossen werden... Quest Gegenstände erhält man genau wie normale Gegenstände; Egal welche du kannst sie nicht vor dem nächsten Tag sehen.\nthen everything you've found will be tallied up and contributed to the pile...", + "bossColl2Broken": "Nur Mitglieder können Gegenstände sammeln und sich die Quest-Beute teilen ...", "abort": "Abbrechen", "leaveQuest": "Quest verlassen", "sureLeave": "Willst Du die aktive Quest wirklich verlassen? Dein kompletter Questfortschritt wird verlorengehen.", @@ -55,7 +62,7 @@ "alreadyEarnedQuestReward": "Du hast diese Quest bereits durch Abschließen der Quest <%= priorQuest %> freigeschaltet.", "completedQuests": "Hat die folgenden Quests abgeschlossen", "mustComplete": "Du musst vorher das <%= quest %> Quest abschließen.", - "mustLevel": "Um diese Quest zu starten, musst Dein Level mindestens <%= level %> betragen.", + "mustLevel": "Du musst Level <%= level %> sein, um diese Quest zu starten.", "mustLvlQuest": "Du musst Level <%= level %> sein um dieses Quest zu erwerben!", "mustInviteFriend": "Um diese Quest freizuschalten, musst du einen Freund in deine Gruppe einladen. Jetzt jemanden einladen?", "unlockByQuesting": "Um diese Quest freizuschalten, schließe <%= title %> ab.", @@ -63,10 +70,13 @@ "sureAbort": "Bist du sicher, dass du diese Mission abbrechen willst? Das wird sie für alle in deiner Gruppe abbrechen und jeder Fortschritt wird verloren gehen. Die Questrolle wird dem Quest-Besitzer zurückgegeben.", "doubleSureAbort": "Bist Du wirklich wirklich sicher? Sei' ganz sicher, dass sie Dich nicht für immer hassen werden!", "questWarning": "Wenn neue Mitglieder der Gruppe beitreten, bevor das Quest anfängt, werden auch sie eine Einladung bekommen. Aber sobald das Quest angefangen hat, können neue Gruppenmitglieder dem Quest nicht mehr beitreten.", + "questWarningBroken": "Wenn neue Mitglieder der Gruppe beitreten, bevor die Quest beginnt, werden auch sie eine Einladung erhalten ... Aber sobald die Quest angefangen hat, können der Quest keine neuen Gruppenmitglieder mehr beitreten ...", "bossRageTitle": "Zorn", "bossRageDescription": "Wenn sich dieser Balken füllt, wird der Boss eine Spezialattacke ausführen", "startAQuest": "STARTE EINE QUEST", "startQuest": "Quest starten", "whichQuestStart": "Welche Quest willst Du starten?", - "getMoreQuests": "Erhalte mehr Quests" + "getMoreQuests": "Erhalte mehr Quests", + "unlockedAQuest": "Du hast ein Quest freigeschaltet!", + "leveledUpReceivedQuest": "Du hast Level <%= level %> erreicht und eine Questschriftrolle erhalten!" } \ No newline at end of file diff --git a/common/locales/de/questscontent.json b/common/locales/de/questscontent.json index bd1d8698f5..926ee2082f 100644 --- a/common/locales/de/questscontent.json +++ b/common/locales/de/questscontent.json @@ -10,54 +10,54 @@ "questEvilSanta2CollectTracks": "Spuren", "questEvilSanta2CollectBranches": "Zerbrochene Zweige", "questEvilSanta2DropBearCubPolarPet": "Eisbär (Haustier)", - "questGryphonText": "Der Feurige Greif", + "questGryphonText": "Der Feuergreif", "questGryphonNotes": "Der große Herr aller Bestien, baconsaur, kommt zu deiner Gruppe, denn er sucht nach Hilfe. \"Abenteurer, bitte, ihr müsst mir helfen! Mein preisgekrönter Greif ist ausgebrochen und terrorisiert nun Habit City! Wenn ihr sie aufhaltet, kann ich euch mit einigen von ihren Eiern belohnen!\"", - "questGryphonCompletion": "Das mächtige Tier schleigt besiegt zu seinem Meister zurück. \"Ich bin beeindruckt! Gut gemacht, Abenteurer!\" ruft baconsaur, \"Bitte nehmt ein paar Greifeneier als Dank an. Ich bin sicher, Ihr werdet Euch gut um sie kümmern!\"", - "questGryphonBoss": "Feuriger Greif", + "questGryphonCompletion": "Das mächtige Tier schleicht besiegt zu seinem Meister zurück. \"Ich bin beeindruckt! Gut gemacht, Abenteurer!\" ruft baconsaur, \"Bitte nehmt ein paar Greifeneier als Dank an. Ich bin sicher, Ihr werdet Euch gut um sie kümmern!\"", + "questGryphonBoss": "Feuergreif", "questGryphonDropGryphonEgg": "Greif (Ei)", - "questGryphonUnlockText": "Ermöglicht den Kauf von Greifeneiern auf dem Marktplatz.", + "questGryphonUnlockText": "Ermöglicht den Kauf von Greifeneiern auf dem Marktplatz", "questHedgehogText": "Das Igelmonster", "questHedgehogNotes": "Igel gehören einer kuriosen Gruppe von Tieren an. Zwar sind sie die liebevollsten Haustiere, die sich ein Habiteer wünschen kann, aber es gibt ein Gerücht wonach sie, wenn man sie nach Mitternacht mit Milch füttert, ein wenig gereizt werden. Und fünfzig mal größer. Und inventrix hat genau das gemacht - Hoppla.", - "questHedgehogCompletion": "Eure Gruppe hat das Igel Weibchen beruhigt! Es hoppelt zurück zu seinen Eiern, nachdem es auf seine normale Größe geschrumpft ist. Quietschend kehrt es mit einigen Eiern zurück und stupst sie vorsichtig in eure Richtung. Hoffentlich mögen Igel Milch!", + "questHedgehogCompletion": "Eure Gruppe hat das Igelweibchen beruhigt! Es hoppelt zurück zu seinen Eiern, nachdem es auf seine normale Größe geschrumpft ist. Quietschend kehrt es mit einigen Eiern zurück und stupst sie vorsichtig in eure Richtung. Hoffentlich mögen Igel Milch!", "questHedgehogBoss": "Igelmonster", "questHedgehogDropHedgehogEgg": "Igel (Ei)", - "questHedgehogUnlockText": "Ermöglicht den Kauf von Igeleiern auf dem Marktplatz.", + "questHedgehogUnlockText": "Ermöglicht den Kauf von Igeleiern auf dem Marktplatz", "questGhostStagText": "Die Seele des Frühlings", "questGhostStagNotes": "Ahh, Frühling. Die Zeit des Jahres, wenn die Landschaft wieder Farbe annimmt. Hinfort sind die Kälte, Schneeberge und Winter. Wo einst Frost war blüht jetzt neues Leben. Die Bäume schmücken sich mit sattem Grün, das Gras kehrt zu seiner gesunden Farbe zurück, ein wahrer Regenbogen von Blumen breitet sich über die Wiesen und Felder und ein mystischer weißer Nebel legt sich übers Land! ... Moment... Mystischer Nebel? \"Oh nein\", lässt lnventrix verlauten, \"Es scheint als wäre eine Art Geist die Ursache für diesen Nebel. Oh, und derselbe scheint gerade auf Dich loszugehen.\"", "questGhostStagCompletion": "Der Geist, scheinbar unverwundet, senkt seine Nase bis zur Erde hinab. Eine ruhige Stimme umfängt Deine Gruppe. \"Ich entschuldige mich für mein Benehmen. Ich bin gerade erst aus dem Winterschlaf erwacht und es scheint ich bin noch etwas verwirrt. Bitte nehmt dieses Zeichen meiner Entschuldigung an.\" Ein paar Eier materialisieren sich vor dem Geist im Gras. Ohne ein weiteres Wort zu sagen, verschwindet der Geist in den Wald, eine Spur aus Blumen hinterlassend.", "questGhostStagBoss": "Geisterhirsch", "questGhostStagDropDeerEgg": "Hirsch (Ei)", - "questGhostStagUnlockText": "Ermöglicht den Kauf von Hirscheiern auf dem Marktplatz.", + "questGhostStagUnlockText": "Ermöglicht den Kauf von Hirscheiern auf dem Marktplatz", "questRatText": "Der Rattenkönig", "questRatNotes": "Müll! Berge von unerfüllten täglichen Aufgaben häufen sich überall in Habitica. Das Problem ist mittlerweile so ernst geworden, dass ganze Horden von Ratten über das Land herfallen. Du bemerkst, dass @Pandah eines der Tierchen liebevoll streichelt. Sie erklärt, Ratten seien eigentlich sanfte Tierchen, die sich von unerfüllten täglichen Aufgaben ernähren. Das tatsächliche Problem ist, dass einige dieser Aufgaben in die Kanalisation gerutscht sind und sich ein großes, gefährliches Nest gebildet hat. Als Du nun tiefer in die Kanalisation hinabsteigst, wirst Du von einer riesigen Ratte mit blutroten Augen und übel zugerichteten, gelben Zähnen angegriffen, die das Nest verteidigt. Wirst Du fliehen, oder dem sagenumwobenen Rattenkönig entgegentreten?", "questRatCompletion": "Dein letzter Hieb entzieht der gewaltigen Ratte ihre Kraft, ihre Augen verblassen zu einem trüben Grau. Das Monster spaltet sich in viele kleine Ratten, die vor Angst hastig davonlaufen. Du bemerkst, dass @Pandah hinter Dir steht und auf die einst mächtige Kreatur blickt. Sie erklärt, dass die Bewohner von Habitica von Deinem Mut inspiriert wurden und daher all ihre unerledigten Aufgaben nun schnell erledigen. Sie ermahnt Dich dazu wachsam zu bleiben, denn wenn wir unachtsam werden, wird der Rattenkönig zurückkommen. Als Belohnung bietet Dir @Pandah einige Ratteneier an. Als sie Deinen besorgten Gesichtsausdruck bemerkt lächelt sie: \"Daraus werden wunderschöne Haustiere.\"", "questRatBoss": "Rattenkönig", "questRatDropRatEgg": "Ratte (Ei)", - "questRatUnlockText": "Ermöglicht den Kauf von Ratteneiern auf dem Marktplatz.", + "questRatUnlockText": "Ermöglicht den Kauf von Ratteneiern auf dem Marktplatz", "questOctopusText": "Der Ruf des Octothulu", "questOctopusNotes": "@Urse, ein junger Schreiber mit feurigem Blick, bittet euch um Hilfe bei der Erforschung einer mysteriösen Höhle an der Meeresküste. Zwischen den abendlichen Gezeitentümpeln steht ein massives Tor aus Stalaktiten und Stalagmiten. Wie Du Dich dem Tor näherst, beginnt ein dunkler Strudel an seinem Fuße zu wirbeln. Du blickst mit Ehrfurcht auf die tintenfischartige Drachenkreatur, die sich aus der Tiefe erhebt. \"Der klebrige Abkömmling der Sterne ist erwacht!\", ruft @Urse aus. \"Nach vigintillionen von Jahren ist der große Octothulu wieder losgebrochen und rasend nach Vergnügungen.", "questOctopusCompletion": "Erfüllung: Mit einem finalen Schlag entwischt die Kreatur in den Strudel, aus dem sie kam. Du kannst nicht sagen, ob @Urse glücklich über euren Sieg ist oder betrübt über den Verlust des Biestes. Wortlos zeigt Dein Begleiter auf drei schleimige, gewaltige Eier in einem nahen Gezeitentümpel, die sich in einem Nest aus Goldmünzen befinden. \"Wahrscheinlich nur Krakeneier\", sagst Du nervös. Als Du nach Hause zurückkehrst, kritzelt @Urse wild in einem Tagebuch herum und Du ahnst, dass dies nicht das letzte Mal ist, dass Du von dem großen Octothulu hörst.", "questOctopusBoss": "Octothulu", "questOctopusDropOctopusEgg": "Krake (Ei)", - "questOctopusUnlockText": "Ermöglicht den Kauf von Krakeneiern auf dem Marktplatz.", + "questOctopusUnlockText": "Ermöglicht den Kauf von Krakeneiern auf dem Marktplatz", "questHarpyText": "Hilfe! Harpyien!", "questHarpyNotes": "Der mutige Abenteurer @UncommonCriminal verschwand in den Wald, um der Spur eines geflügelten Monsters zu folgen, das vor einigen Tagen gesichtet wurde. Du bist gerade dabei, eine Suche zu starten, als ein verwundeter Papagei auf deinem Arm landet, eine unschöne Narbe stört sein sonst wunderschönes Federkleid. An sein Bein gebunden ist eine gekritzelte Notiz, die erklärt, dass @UncommonCriminal bei dem Versuch, die Papageien zu beschützen von einer bösartigen Harpyie gefangen genommen wurde und verzweifelt deine Hilfe braucht, um zu fliehen. Wirst du dem Vogel folgen, die Harpyie besiegen und @UncommonCriminal retten?", "questHarpyCompletion": "Mit einem vernichtenden Schlag fällt die Harpyie zu Boden und Federn fliegen in alle Richtungen. Nach einer kurzen Klettertour in das Nest der Harpyie findest du @UncommonCriminal, der von Papageieneiern umgeben ist. Gemeinsam bringt ihr die Eier unverzüglich zu den Nestern zurück. Doch der vernarbte Papagei, der dich vorher gefunden hatte, krächzt laut und lässt mehrere Eier in deine Arme fallen. \"Der Harpyienangriff lässt einige Eier ohne Nest zurück.\", erklärt @UncommonCriminal, \"Es scheint, dass du ein Ehrenpapagei geworden bist\".", "questHarpyBoss": "Harpyie", "questHarpyDropParrotEgg": "Papagei (Ei)", - "questHarpyUnlockText": "Ermöglicht den Kauf von Papageieneiern auf dem Marktplatz.", + "questHarpyUnlockText": "Ermöglicht den Kauf von Papageieneiern auf dem Marktplatz", "questRoosterText": "Hahnenkampf", "questRoosterNotes": "Jahrelang nutzte der Farmer @extrajordanary Hähne als Wecker. Doch nun ist ein riesiger Hahn aufgetaucht, der lauter kräht als je einer davor - und alle Einwohner Habitikas weckt! Die unausgeschlafenen Habitikaner mühen sich durch ihre täglichen Aufgaben. @Pandoro beschließt, dass nun die Zeit gekommen sei, dem ein Ende zu bereiten. \"Bitte, gibt es jemanden, der diesem Hahn beibringen kann, leise zu krähen?\" Du meldest dich freiwillig und näherst dich dem Hahn eines frühen Morgens - aber er dreht sich um, schlägt mit seinen gigantischen Flügeln, zeigt seine scharfen Krallen und kräht einen Schlachtruf.", "questRoosterCompletion": "Mit Raffinesse und Stärke ist es Dir gelungen, die wilde Bestie zu zähmen. Die Ohren des Hahnes, die bisher mit Federn und halbvergessenen Aufgaben verstopft waren, sind nun offen wie ein Scheunentor. Er kräht dich leise an und kuschelt seinen Schnabel an Deine Schulter. Am nächsten Tag willst Du wieder aufbrechen, aber @EmeraldOx rennt auf Dich zu, in der Hand einen bedeckten Korb. \"Warte! Als ich diesen Morgen ins Bauernhaus kam, hatte der Hahn dies hier an die Tür geschoben, hinter der Du geschlafen hast. Ich glaube, er will, dass Du sie kriegst.\"\nDu öffnest den Korb und siehst drei zierliche Eier.", "questRoosterBoss": "Hahn", "questRoosterDropRoosterEgg": "Hahn (Ei)", - "questRoosterUnlockText": "Ermöglicht den Kauf von Hahneiern auf dem Marktplatz.", + "questRoosterUnlockText": "Ermöglicht den Kauf von Hahneiern auf dem Marktplatz", "questSpiderText": "Die eisige Arachnoide", - "questSpiderNotes": "Das Wetter kühlt sich ab und leichter Frost beginnt auf den Fensterscheiben der Einwohner von Habitika in Form von filigranen Netzen zu erscheinen... außer bei @Arcosine, dessen Fenster komplett zugefroren sind und bei dem sich die Frostspinne eingenistet hat. Oh je!", + "questSpiderNotes": "Das Wetter kühlt sich ab und leichter Frost beginnt auf den Fensterscheiben der Einwohner von Habitica in Form von filigranen Netzen zu erscheinen ... außer bei @Arcosine, dessen Fenster komplett zugefroren sind und bei dem sich die Frostspinne eingenistet hat. Oh je!", "questSpiderCompletion": "Die Frostspinne bricht zusammen. Von ihr bleibt nur ein kleiner Haufen Frost und ein paar ihrer verzauberten Eiersäcke. @Arcosine bietet sie dir recht hastig als Belohnung an--vielleicht könntest du ein paar ungefährliche Spinnen als deine Haustiere aufziehen?", "questSpiderBoss": "Spinne", "questSpiderDropSpiderEgg": "Spinne (Ei)", - "questSpiderUnlockText": "Ermöglicht den Kauf von Spinneneiern auf dem Marktplatz.", + "questSpiderUnlockText": "Ermöglicht den Kauf von Spinneneiern auf dem Marktplatz", "questVice1Text": "Laster, Teil 1: Befreie dich vom Einfluss des Drachen", "questVice1Notes": "

Es heißt, dass in den Höhlen von Mount Habitica ein schreckliches Übel lauert. Das Monster ist ein Großdrache von gewaltiger Macht dessen bloße Gegenwart den Willen der stärksten Helden des Landes beugt und in schlechte Angewohnheiten und Faulheit verkehrt, Laster der Schattenwyrm. Tapfere Habiteers, erhebt Euch und erschlagt dieses Untier ein für allemal, aber nur, wenn Ihr Euch zutraut seiner gewaltigen Macht zu widerstehen.

Laster Teil 1:

Denn wie könntet Ihr es wagen gegen die Bestie anzutreten solange Ihr Euch in ihrem Bann befindet? Werdet nicht die Beute von Faulheit und schlechten Angewohnheiten! Strengt euch an um den dunklen Einfluss des Drachen der Euch umfängt zu bannen!

", "questVice1Boss": "Lasters Schatten", @@ -82,7 +82,7 @@ "questMoonstone2Boss": "Die Totenbeschwörerin", "questMoonstone2DropMoonstone3Quest": "Die Mondsteinkette Teil 3: Recidivate Transformiert (Rolle)", "questMoonstone3Text": "Die Mondsteinkette Teil 3: Recidivate transformiert", - "questMoonstone3Notes": "

Recidivate fällt zu Boden und Du schlägst mit der Mondsteinkette nach ihr. Zu deinem Entsetzen reißt Recidivate die Steine an sich und ihre Augen leuchten vor Triumph.


\"Törichte Kreatur des Fleisches!\", schreit sie. \"Es ist wahr, die Mondsteine werden mich wieder in eine körperliche Form zurückversetzen, aber anders, als Du dir vorgestellt hast. Wenn der volle Mond zunimmt, wächst auch meine Macht, und aus den Schatten rufe ich deinen gefürchtetsten Feind hervor!\"


Ein übler grüner Nebel steigt aus dem Sumpf auf und Recidivate's Körper windet und dreht sich und verzerrt sich in eine Form, die dich mit Schrecken erfüllt - der untote Körper von Vice, wiederauferstanden.

", + "questMoonstone3Notes": "

Recidivate fällt zu Boden und Du schlägst mit der Mondsteinkette nach ihr. Zu deinem Entsetzen reißt Recidivate die Steine an sich und ihre Augen leuchten vor Triumph.


\"Törichte Kreatur des Fleisches!\", schreit sie. \"Es ist wahr, die Mondsteine werden mich wieder in eine körperliche Form zurückversetzen, aber anders, als Du dir vorgestellt hast. Wenn der volle Mond zunimmt, wächst auch meine Macht, und aus den Schatten rufe ich deinen gefürchtetsten Feind hervor!\"


Ein übler grüner Nebel steigt aus dem Sumpf auf und Recidivate's Körper windet und dreht sich und verzerrt sich in eine Form, die dich mit Schrecken erfüllt - der untote Körper von Laster, wiederauferstanden.

", "questMoonstone3Completion": "

Du atmest schwer und Schweiß brennt in Deinen Augen als der untote Wyrm zusammenbricht. Die Überreste von Recidivate lösen sich in einen dünnen, grauen Nebel auf, der sich bald durch eine frisch aufkommende Brise zerstreut. In der Ferne hörst Du die Schlachtrufe von Habiticanern, die ihre schlechten Gewohnheiten ein für und allemal besiegen.


@Baconsaur, der Herr aller Bestien, landet mit seinem Greif neben Dir. \"Ich habe das Ende Deines Kampfes vom Himmel aus beobachtet und es hat mich sehr berührt. Bitte nimm diese verzauberte Tunika - Deine Tapferkeit zeugt von einem edlen Herzen und ich glaube, dass Du dazu bestimmt bist, sie zu bekommen.\"

", "questMoonstone3Boss": "Nekro-Laster", "questMoonstone3DropRottenMeat": "Verrottetes Fleisch (Futter)", @@ -96,7 +96,7 @@ "questGoldenknight2Boss": "Goldene Ritterin", "questGoldenknight2DropGoldenknight3Quest": "Die Goldene Ritterin-Kette Teil 3: Der Eiserne Ritter (Rolle)", "questGoldenknight3Text": "Der goldene Ritter, Teil 3: Der eiserne Ritter", - "questGoldenknight3Notes": "

@Jon Arinbjorn cries out to you to get your attention. In the aftermath of your battle, a new figure has appeared. A knight coated in stained-black iron slowly approaches you with sword in hand. The Golden Knight shouts to the figure, \"Father, no!\" but the knight shows no signs of stopping. She turns to you and says, \"I am sorry. I have been a fool, with a head too big to see how cruel I have been. But my father is crueler than I could ever be. If he isn't stopped he'll destroy us all. Here, use my morningstar and halt the Iron Knight!\"

", + "questGoldenknight3Notes": "

@Jon Arinbjorn ruft zu Dir, um deine Aufmerksamkeit zu erlangen. Im Nachspiel Deiner Schlacht ist eine neue Figur aufgetaucht. Ein Ritter, gerüstet in schwarz geflecktem Eisen, kommt Dir langsam mit einem Schwert in der Hand entgegen. Die goldene Ritterin ruft ihm zu: \"Vater, nein!\" Aber der Ritter zeigt keinerlei Anzeichen anzuhalten. Sie wendet sich an Dich: \"Es tut mir Leid. Ich war ein Narr und zu stolz zu erkennen, wie grausam ich war. Aber mein Vater ist noch viel grausamer als ich es je sein könnte. Wenn er nicht aufgehalten wird, dann wird er uns alle vernichten. Hier, nimm meinen Morgenstern und halte den eisernen Ritter auf!\"

", "questGoldenknight3Completion": "

Mit einem befriedigenden Geklirr fällt der Eiserne Ritter zu Knie und sackt zusammen. \"Du bist ziemlich stark,\" keucht er. \"Mir wurde heute Bescheidenheit gelehrt.\" Die Goldene Ritterin kommt zu dir und sagt, \"Ich danke dir. Ich glaube, wir beide haben aus der Begegnung mit dir etwas Bescheidenheit gelernt. Ich werde mit meinem Vater sprechen und ihm die Beschwerden über uns erklären. Vielleicht sollten wir damit anfangen, uns bei den anderen Habiticanern zu entschuldigen.\" Sie denkt darüber nach und wendet sich dann wieder dir zu. \"Hier: als ein Geschenk für dich gebe ich dir meinen Morgenstern. Er gehört jetzt dir.\"

", "questGoldenknight3Boss": "Der Eiserne Ritter", "questGoldenknight3DropHoney": "Honig (Futter)", @@ -112,13 +112,13 @@ "questEggHuntCollectPlainEgg": "Einfache Eier", "questEggHuntDropPlainEgg": "Einfaches Ei", "questDilatoryText": "Der Schreckensdrache von Dilatory", - "questDilatoryNotes": "

Wir hätten die Warnungen beachten sollen.


Dunkle, glänzende Augen. Uralte Schuppen. Ein riesiger Kiefer, und blitzende Zähne. Wir haben etwas schreckliches aus der Meeresspalte erweckt: den Schreckensdrachen von Dilatory! Schreiende Habiticaner flohen in alle Richtungen, als er sich aus dem Meer erhob und sein entsetzlich langer Hals hunderte Meter aus dem Wasser ragte und Fenster mit seinem durchdringenden Gebrüll zersplitterte.


\"Das muss es sein, was Dilatory hinuntergezogen hat!\" schreit Lemoness. \"Es war nicht das Gewicht der vernachlässigten Aufgaben - die dunkelroten täglichen Aufgaben haben nur seine Aufmerksamkeit auf sich gezogen!\"


\"Er ist voller magischer Energie!\" ruft @Baconsaur. \"Um so lang überlebt zu haben, muss er sich selbst heilen können! Wie können wir ihn besiegen?\"


Na, genauso wie wir alle Monster besiegen - mit Produktivität! Schnell, Habitica, vereint euch, erschlagt eure Aufgaben und wir alle werden dieses Monster gemeinsam bekämpfen. (Es ist nicht nötig, dafür frühere Quests aufzugeben - wir glauben an eure Fähigkeit zum Doppelschlag!) Er wird uns nicht einzeln angreifen, aber je mehr tägliche Aufgaben wir auslassen, desto höher ist das Risiko, dass wir seinen Vernachlässigungsschlag auslösen - und es gefällt mir gar nicht, wie es die Taverne anschaut....

", + "questDilatoryNotes": "

Wir hätten die Warnungen beachten sollen.


Dunkle, glänzende Augen. Uralte Schuppen. Ein riesiger Kiefer, und blitzende Zähne. Wir haben etwas Schreckliches aus der Meeresspalte erweckt: den Schreckensdrachen von Dilatory! Schreiende Habiticaner flohen in alle Richtungen, als er sich aus dem Meer erhob und sein entsetzlich langer Hals hunderte Meter aus dem Wasser ragte und Fenster mit seinem durchdringenden Gebrüll zersplitterte.


\"Das muss es sein, was Dilatory hinuntergezogen hat!\" schreit Lemoness. \"Es war nicht das Gewicht der vernachlässigten Aufgaben - die dunkelroten täglichen Aufgaben haben nur seine Aufmerksamkeit auf sich gezogen!\"


\"Er ist voller magischer Energie!\" ruft @Baconsaur. \"Um so lang überlebt zu haben, muss er sich selbst heilen können! Wie können wir ihn besiegen?\"


Na, genauso wie wir alle Monster besiegen - mit Produktivität! Schnell, Habitica, vereint euch, erschlagt eure Aufgaben und wir alle werden dieses Monster gemeinsam bekämpfen. (Es ist nicht nötig, dafür frühere Quests aufzugeben - wir glauben an eure Fähigkeit zum Doppelschlag!) Er wird uns nicht einzeln angreifen, aber je mehr tägliche Aufgaben wir auslassen, desto höher ist das Risiko, dass wir seinen Vernachlässigungsschlag auslösen - und es gefällt mir gar nicht, wie er das Gasthaus anschaut....

", "questDilatoryBoss": "Der Schreckensdrache von Dilatory", "questDilatoryBossRageTitle": "Vernachlässigungsschlag", "questDilatoryBossRageDescription": "Wenn sich dieser Balken gefüllt hat, dann wird der schreckliche Drache von Dilatory großes Unheil über Habitica bringen.", "questDilatoryDropMantisShrimpPet": "Fangschreckenkrebs (Haustier)", "questDilatoryDropMantisShrimpMount": "Fangschreckenkrebs (Reittier)", - "questDilatoryBossRageTavern": "Schreckensdrache attackiert mit VERNACHLÄSSIGUNGSSCHLAG!'\n\nOje! Obwohl wir unser Bestes gegeben haben, sind uns ein paar tägliche Aufgaben entwischt und ihre dunkelrote Farbe hat den Zorn des Drachen angezogen! Mit seiner entsetzlichen Vernachlässigungsschlag-Attacke hat er die Taverne dem Erdboden gleichgemacht! Glücklicherweise haben wir in einer benachbarten Stadt ein Gasthaus aufgebaut, sodass ihr euch weiterhin am Ufer unterhalten könnt... aber der arme Barkeeper Daniel musste gerade zusehen, wie sein geliebtes Gebäude um ihn zusammenstürzt! \n\nIch hoffe, das Biest greift nicht noch einmal an!", + "questDilatoryBossRageTavern": "Schreckensdrache attackiert mit VERNACHLÄSSIGUNGSSCHLAG!'\n\nOje! Obwohl wir unser Bestes gegeben haben, sind uns ein paar tägliche Aufgaben entwischt und ihre dunkelrote Farbe hat den Zorn des Drachen angezogen! Mit seiner entsetzlichen Vernachlässigungsschlag-Attacke hat er das Gasthaus dem Erdboden gleichgemacht! Glücklicherweise haben wir in einer benachbarten Stadt eine Herberge aufgebaut, sodass ihr euch weiterhin am Ufer unterhalten könnt... aber der arme Barkeeper Daniel musste gerade zusehen, wie sein geliebtes Gebäude um ihn zusammenstürzt! \n\nIch hoffe, das Biest greift nicht noch einmal an!", "questDilatoryBossRageStables": "'Schreckensdrache attackiert mit VERNACHLÄSSIGUNGSSCHLAG!'\n\nOh nein! Wir haben schon wieder zu viele unserer täglichen Aufgaben nicht erledigt. Der Drache hat seinen Vernachlässigungsschlag gegen Matt und die Ställe losgelassen! Die Haustiere sind in alle Richtungen geflohen. Glücklicherweise scheinen Deine alle sicher zu sein!\n\nArmes Habitica! Ich hoffe, das passiert nicht noch mal. Beeil dich und erledige alle Deine Aufgaben!", "questDilatoryBossRageMarket": "'Schreckensdrache attackiert mit VERNACHLÄSSIGUNGSSCHLAG!'\n\nAhhh!! Der Laden von Alex dem Händler wurde gerade vom Vernachlässigungsschlag des Drachen in tausend Stücke geschlagen! Aber es scheint, als würden wir das Biest langsam mürbe machen. Ich bezweifle, dass es genug Kraft für einen weiteren Schlag hat. \n\nAlso verzage nicht, Habitica! Lasst uns dieses Biest von unseren Küsten vertreiben!", "questDilatoryCompletion": "'Der Sieg über den Schreckensdrachen von Dilatory'\n\nWir haben es geschafft! Der Schreckensdrachen bricht mit einem allerletzten Gebrüll zusammen und schwimmt weit, weit fort. Gruppen jubelnder Habiticaner stehen an den Küsten! Wir haben Matt, Daniel und Alex gefunden, ihre Gebäude wieder aufzubauen. Aber was ist das? \n\n'Die Bürger kehren zurück!'\n\nJetzt wo der Drache geflohen ist, steigen im Meer tausende glitzernde Farben auf. Es ist ein Regenbogenschwarm von Fangschreckenkrebsen.. und zwischen ihnen, hunderte von Wassermenschen! \n\n\"Wir sind die verlorenen Bürger von Dilatory!\" erklärt ihr Anführer, Manta. \"Als Dilatory sank, verwandelten uns die Fangschreckenkrebse mit einem Zauberspruch in Wassermenschen, sodass wir überleben konnten. Aber in seinem Zorn fing uns der Schreckensdrache alle in der dunklen Meeresspalte. Wir waren dort hunderte Jahre gefangen - aber jetzt sind wir endlich frei und können unsere Stadt wieder aufbauen! \n\n\"Als Dankeschön,\" sagt @Ottl, \"Bitte nimm dieses Fangschreckenkrebs-Haustier, dieses Fangschreckenkrebs-Reittier und EXP, Gold und unsere ewige Dankbarkeit an!\"\n\n'Belohnungen'\n* Fangschreckenkrebs-Haustier\n* Fangschreckenkrebs-Reittier\n* Schokolade, blaue Zuckerwatte, pinke Zuckerwatte, Fisch, Honig, Fleisch, Milch, Kartoffel, verdorbenes Fleisch, Erdbeere", @@ -127,7 +127,7 @@ "questSeahorseCompletion": "Der jetzt zahme Seehengst schwimmt gefügig zu Dir. \"Oh, sieh doch!\" sagt Kiwibot. \"Er will, dass wir uns um seine Kinder kümmern.\" Sie gibt dir drei Eier. \"Zieh sie gut auf,\" sagt sie. \"Du bist beim Dilatory Derby jederzeit willkommen!\"", "questSeahorseBoss": "Seehengst", "questSeahorseDropSeahorseEgg": "Seehengst (Ei)", - "questSeahorseUnlockText": "Ermöglicht den Kauf von Seehengsteiern auf dem Marktplatz.", + "questSeahorseUnlockText": "Ermöglicht den Kauf von Seehengsteiern auf dem Marktplatz", "questAtom1Text": "Angriff des Banalen, Teil 1: Abwasch-Katastrophe!", "questAtom1Notes": "Du erreichst die Ufer des Waschbeckensees für eine wohlverdiente Auszeit... Aber der See ist verschmutzt mit nicht abgespültem Geschirr! Wie ist das passiert? Wie auch immer, Du kannst den See jedenfalls nicht in diesem Zustand lassen. Es gibt nur eine Sache die Du tun kannst: Abspülen und den Ferienort retten! Dazu musst Du aber Seife für den Abwasch finden. Viel Seife...", "questAtom1CollectSoapBars": "Seifenstücke", @@ -142,17 +142,17 @@ "questAtom3Boss": "Der Wäschebeschwörer", "questAtom3DropPotion": "Standard Schlüpftrank", "questOwlText": "Die Nachteule", - "questOwlNotes": "Das Gasthauslicht brennt bis zum in die Morgenstunden
Doch eine Nacht ist das Leuchten verschwunden!
Wo sollen denn jetzt alle Nachtschwärmern hin?
@Twitching ruft, \"Wir müssen in den Kampfe ziehn!\"
Siehst du diese Nachteule, den gefiederten Feind?
Kämpfe schnell, kämpfe gut, mach sie klein!
Wir werden ihren Schatten schnell verscheuchen,
und die Nacht wieder hell erleuchten!\"", + "questOwlNotes": "Das Gasthauslicht brennt bis in die Morgenstunden
doch eines Nachts ist das Leuchten verschwunden!
Wo sollen denn jetzt alle Nachtschwärmer hin?
@Twitching ruft, \"Wir müssen in den Kampfe ziehn!\"
Siehst du diese Nachteule, den gefiederten Feind?
Kämpfe schnell, kämpfe gut, mach sie klein!
Wir werden ihren Schatten schnell verscheuchen,
und die Nacht wieder hell erleuchten!\"", "questOwlCompletion": "Die Nachteul' verblasst, bevor die Nacht vergeht
Doch dennoch fühlst du, wie es in dir gähnt.
Vielleicht ist es Zeit, sich hinzulegen?
In deinem Bett siehst du ein Nestchen liegen!
Die Nachteul' weiß, es ist sehr schön
spät zu arbeiten und spät ins Bett zu gehn,
Aber deine neuen Haustiere werden leise krähen
und dir dann sagen, \"du sollst schlafen gehen\".", "questOwlBoss": "Die Nachteule", "questOwlDropOwlEgg": "Eule (Ei)", - "questOwlUnlockText": "Ermöglicht den Kauf von Euleneiern auf dem Marktplatz.", + "questOwlUnlockText": "Ermöglicht den Kauf von Euleneiern auf dem Marktplatz", "questPenguinText": "Der Federvieh-Frost", - "questPenguinNotes": "Obwohl es auf der Südspitze von Habitica ein heißer Sommertag ist, hat eine unnatürliche Kälte den Lively Lake befallen. Man hört das Heulen von starken, eisige Winden und das Ufer fängt an, zuzufrieren. Eisspitzen brechen aus dem Boden und verdrängen Gras und Dreck. @Melynnrose und @Breadstrings rennen zu dir hinüber.

\"Hilfe!\" sagt @Melynnrose. \"Wir haben einen riesigen Pinguin hergebracht, um den See zuzufrieren damit wir alle schlittschuhlaufen können, aber uns sind die Fische ausgegangen, mit denen wir ihn gefüttert haben!\"

\"Er wurde wütend und friert mit seinem Eis-Atem alles zu, was er sieht!\" sagt @Breadstrings. \"Bitte, du musst ihn überwältigen bevor wir alle von Eis bedeckt sind!\" Sieht aus, als ob du das Gemüt dieses Pinguins... etwas abkühlen musst.", + "questPenguinNotes": "Obwohl es auf der Südspitze von Habitica ein heißer Sommertag ist, hat eine unnatürliche Kälte den Lively Lake befallen. Man hört das Heulen von starken, eisigen Winden und das Ufer fängt an zuzufrieren. Eisspitzen brechen aus dem Boden und verdrängen Gras und Dreck. @Melynnrose und @Breadstrings rennen zu dir hinüber.

\"Hilfe!\" sagt @Melynnrose. \"Wir haben einen riesigen Pinguin hergebracht, um den See zuzufrieren damit wir alle schlittschuhlaufen können, aber uns sind die Fische ausgegangen, mit denen wir ihn gefüttert haben!\"

\"Er wurde wütend und friert mit seinem Eis-Atem alles zu, was er sieht!\" sagt @Breadstrings. \"Bitte, du musst ihn überwältigen bevor wir alle von Eis bedeckt sind!\" Sieht aus, als ob du das Gemüt dieses Pinguins... etwas abkühlen musst.", "questPenguinCompletion": "Mit der Niederlage des Pinguins beginnt das Eis zu schmelzen. Der riesige Pinguin setzt sich im Sonnenschein auf den Boden und schlürft einen Eimer Fische herunter. Er gleitet über den See und lässt dabei mit einem leichten Pusten nach unten glattes, glitzerndes Eis entstehen. Was für ein komischer Vogel! \"Es scheint so, als hätte er einige Eier hinterlassen,\" sagt @Painter de Cluster.

@Rattify lacht. \"Vielleicht werden diese Pinguine ein bisschen... gechillter sein?\"", "questPenguinBoss": "Frostpinguin", "questPenguinDropPenguinEgg": "Pinguin (Ei)", - "questPenguinUnlockText": "Ermöglicht den Kauf von Pinguineiern auf dem Marktplatz.", + "questPenguinUnlockText": "Ermöglicht den Kauf von Pinguineiern auf dem Marktplatz", "questStressbeastText": "Das Schreckliche Stressbiest aus den Stoïstillen Steppen", "questStressbeastNotes": "Erfülle tägliche, sowie einmalige Aufgaben um dem Welt-Bossmonster Schaden zuzufügen! Unerfüllte tägliche Aufgaben füllen die Stressschlag Leiste. Ist die Leiste voll, wird das Welt-Bissmonster einen NPC angreifen. Ein Welt-Bossmonster fügt einzelnen Spielern oder Accounts auf keine Weise Schaden zufügen. Nur die nicht erfüllten täglichen Aufgaben von aktiven Spielern, die sich nicht im Gasthaus ausruhen zählen.

~*~

Das erste was wir vernehmen sind die Schritte, langsam und donnernd. Einer nach dem anderen öffnen die Haitianer ihre Haustüren und blicken dem entgegen und die Worte bleiben uns im Halse stecken.

Wir alle kennen das Stressbiest, natürlich - winzige, fiese Kreaturen, die uns im ungünstigsten Augenblick angreifen. Aber das? Das hier ragt in den Himmel hinauf, höher als die Gebäude, mit Pranken, die ohne Probleme einen Drachen zerschmettern könnten. Frostsplitter regnen aus dem stinkenden Fell herab und sein Gebrüll entfesselt einen eisigen Sturm, der die Dächer von unseren Häusern hebt. Von so einem gewaltigen Monster sprechen nur unsere ältesten Legenden.

\"Gebt acht, Haitianer!\", ruft SabreCat, \"Barrikadiert euch in euren Häusern - dies ist das schreckliche Stressbiest!\"

\"Dieses Ding muss Jahrhunderte von Stress in sich tragen!\", sagt Kiwibot, während er die Türen des Gasthauses verrammelt und die Fenster zuschlägt.

\"Die Stoïstillen Steppen\", meint Lemnos mit grimmigem Gesicht, \"Die ganze Zeit dachten wir sie wären ein friedlicher Ort, aber sie müssen ihren Stress irgendwo versteckt haben. Über Generationen hinweg ist das hier aus ihm geworden, und nun hat es sich befreit und griff sie an - und uns!\"

Es gibt nur eine Möglichkeit das Stressbiest zu vertreiben, schrecklich oder nicht, und die ist es, es mit erfüllten täglichen und einmaligen Aufgaben anzugreifen! Wir müssen zusammen stehen um gegen diesen furchteinflößenden Feind zu bestehen - geht sicher, dass ihr eure Aufgaben nicht unerfüllt lasst, das könnte das Stressbiest so sehr reizen, dass es vielleicht anfängt um sich zu schlagen...", "questStressbeastBoss": "Das schreckliche Stressbiest", @@ -178,88 +178,100 @@ "questTRexUndeadRageDescription": "Diese Leiste füllt sich, wenn Du deine täglichen Aufgaben nicht erfüllst. Wenn sie voll ist, heilt sich der skelettierte Tyrannosaurus um 30% seiner übrigen Lebenspunkte.", "questTRexUndeadRageEffect": "'Der Skelettierte Tyrannosaurus benutzt KNÖCHERNE HEILUNG!'\n\nDas Monster lässt ein furchtbares Brüllen ertönen und einige seiner gesplitterten Knochen setzen sich wieder zusammen!", "questTRexDropTRexEgg": "Tyrannosaurus (Ei)", - "questTRexUnlockText": "Schaltet die Option Tyrannosauruseier auf dem Marktplatz zu kaufen frei.", + "questTRexUnlockText": "Ermöglicht den Kauf von Tyrannosauruseier auf dem Marktplatz.", "questRockText": "Entkomme dem Höhlenungetüm", - "questRockNotes": "Beim Durchqueren des Habitica Mäandergebirges schlagen Deine Freunde und Du ein Lager in einer Höhle auf, welche mit funkelnden Kristallen übersät ist. Als Du jedoch am nächsten Morgen aufwachst ist der Eingang verschwunden und der Höhlenoden unter dir beginnt sich zu bewegen.

\"Der Berg lebt!\" schreit dein Kamerad @pfeffernusse. \"Das sind keine Kristalle - das sind Zähne!\"

@Painter de Cluster ergreift Deine Hand. \"Wir müssen einen anderen Weg nach draußen finden. Bleib bei mir und lasse Dich nicht ablenken, sonst sind wir vielleicht für immer hier drinnen gefangen!\"", + "questRockNotes": "Beim Durchqueren des Habitica Mäandergebirges schlagen Deine Freunde und Du ein Lager in einer Höhle auf, welche mit funkelnden Kristallen übersät ist. Als Du jedoch am nächsten Morgen aufwachst ist der Eingang verschwunden und der Höhlenboden unter dir beginnt sich zu bewegen.

\"Der Berg lebt!\" schreit dein Kamerad @pfeffernusse. \"Das sind keine Kristalle - das sind Zähne!\"

@Painter de Cluster ergreift Deine Hand. \"Wir müssen einen anderen Weg nach draußen finden. Bleib bei mir und lasse Dich nicht ablenken, sonst sind wir vielleicht für immer hier drinnen gefangen!\"", "questRockBoss": "Kristallkoloss", "questRockCompletion": "Dank Deiner harten Arbeit konntest Du zu guter Letzt einen sicheren Weg durch den lebenden Berg finden. \nNach der langen Dunkelheit genießt Du die wärmenden Sonnenstrahlen, als Dich Dein Freund @intune auf ein Funkeln am Boden nahe der Höhle aufmerksam macht.\nDas Funkeln kommt von einem kleinen Stein, der von einer Goldader durchzogen ist. \nWährend Du ihn aufhebst siehst Du, dass um ihn herum weitere merkwürdig geformte Steine liegen. Sind das... Eier?", "questRockDropRockEgg": "Fels (Ei)", - "questRockUnlockText": "Schaltet die Option Felseier auf dem Marktplatz zu kaufen frei.", + "questRockUnlockText": "Ermöglicht den Kauf von Felseier auf dem Marktplatz", "questBunnyText": "Das Killerkaninchen", "questBunnyNotes": "Nach vielen Tagen voller Schwierigkeiten erreichst Du den Gipfel des Berges des Aufschiebens und stehst vor den imposanten Toren der Festung der Verwahrlosung. Du liest die Inschrift im Stein. \"Hier lebt die Kreatur, die Deine größten Ängste verkörpert, der Grund für dein Nichtstun. Klopf an und stelle dich Deinem Dämon!\" Deine Hände beginnen zu zittern als Du Dir dieses Grauen vor Augen führst und Du spürst plötzlich den Drang zu fliehen, wie Du es schon so viele Male getan hast. @Draayder hält dich zurück. \"Bleib ruhig, mein Freund! Die Zeit ist endlich gekommen. Du musst dies tun!\"

Du klopfst und die Torflügel schwingen nach innen. Aus der Dunkelheit vor Dir hörst Du ein ohrenbetäubendes Brüllen und Du ziehst deine Waffe.", "questBunnyBoss": "Killerkaninchen", - "questBunnyCompletion": "Von einem letzten Schlag getroffen sinkt das Killerhäschen zu Boden. Funkelnde Nebelschwaden steigen aus dem riesigen Körper auf, während dieser schrumpft und sich in ein kleines Häschen verwandelt. Keine Spur mehr von dem furchteinflössenden Monster, dem Ihr euch wenige Momente zuvor stellen musstest. Das winzige Näschen zuckt zweimal in die Luft und schon hoppelt das Häschen davon. Dabei lässt es einige Eier zurück @Gully lacht: \"Jaja, der Berg des Aufschiebens hat so eine Art selbst die kleinsten Herausforderungen riesig groß erscheinen zu lassen... Lasst uns die Eier einsammeln und uns auf den Weg nach Hause machen\"", + "questBunnyCompletion": "Von einem letzten Schlag getroffen sinkt das Killerkaninchen zu Boden. Funkelnde Nebelschwaden steigen aus dem riesigen Körper auf, während dieser schrumpft und sich in ein kleines Häschen verwandelt. Keine Spur mehr von dem furchteinflössenden Monster, dem Du Dich wenige Momente zuvor stellen musstest. Das winzige Näschen zuckt zweimal in die Luft und schon hoppelt das Häschen davon. Dabei lässt es einige Eier zurück @Gully lacht: \"Jaja, der Berg des Aufschiebens hat so eine Art selbst die kleinsten Herausforderungen riesig groß erscheinen zu lassen ... Lasst uns die Eier einsammeln und uns auf den Weg nach Hause machen.\"", "questBunnyDropBunnyEgg": "Hase (Ei)", - "questBunnyUnlockText": "Schaltet die Option Haseneier auf dem Marktplatz zu kaufen frei.", - "questSlimeText": "Der Glibber König", - "questSlimeNotes": "Wie immer arbeitest Du gut gelaunt an Deinen Aufgaben, als Du plötzlich bemerkst, wie Du Dich immer langsamer bewegst. \"Als würde man durch einen Sumpf wandern\", grummelt @Leephon, \"Nein, das fühlt sich eher so an als ob man durch Glibber watet!\" @starsystemic meint: \"Der schleimige Glibber König hat dieses Zeug über ganz Habitica verteilt. Es verstopft die Arbeitsschritte. Alles wird verlangsamt.\" Du siehst Dich um und bemerkst, dass die Straßen sich langsam mit durchsichtigem Glibber in allen Farben füllen und die Habitianer daran hindert ihre Aufgaben zu erledigen. Im Gegensatz zu den meisten anderen, die die Flucht ergreifen, nimmst Du einen Mop zur Hand und machst Dich bereit für die Schlacht.", - "questSlimeBoss": "Glibber König", - "questSlimeCompletion": "Mit einem letzten Mopstoß stößt Du den Glibber König in die Falle, einen riesigen Donut, den @Overomega, @LordDarkly und @Shaner, die gewitzten Anführer der Feingebäck-Gilde, herangebracht haben. Anerkennend klopfen Dir die Habitianer auf den Rücken, als Du fühlst, wie Dir jemand etwas in die Tasche rutschen lässt. Es ist die Belohnung für Deinen süßen Erfolg: drei Marshmallow Schleim Eier.", + "questBunnyUnlockText": "Ermöglicht den Kauf von Haseneier auf dem Marktplatz", + "questSlimeText": "Der Glibberkönig", + "questSlimeNotes": "Wie immer arbeitest Du gut gelaunt an Deinen Aufgaben, als Du plötzlich bemerkst, wie Du Dich immer langsamer bewegst. \"Als würde man durch einen Sumpf wandern\", grummelt @Leephon, \"Nein, das fühlt sich eher so an als ob man durch Glibber watet!\" @starsystemic meint: \"Der schleimige Glibberkönig hat dieses Zeug über ganz Habitica verteilt. Es verstopft die Arbeitsschritte. Alles wird verlangsamt.\" Du siehst Dich um und bemerkst, dass die Straßen sich langsam mit durchsichtigem Glibber in allen Farben füllen und die Habitianer daran hindert ihre Aufgaben zu erledigen. Im Gegensatz zu den meisten anderen, die die Flucht ergreifen, nimmst Du einen Mop zur Hand und machst Dich bereit für die Schlacht.", + "questSlimeBoss": "Glibberkönig", + "questSlimeCompletion": "Mit einem letzten Mopstoß stößt Du den Glibberkönig in die Falle, einen riesigen Donut, den @Overomega, @LordDarkly und @Shaner, die gewitzten Anführer der Feingebäck-Gilde, herangebracht haben. Anerkennend klopfen Dir die Habitianer auf den Rücken, als Du fühlst, wie Dir jemand etwas in die Tasche rutschen lässt. Es ist die Belohnung für Deinen süßen Erfolg: drei Marshmallow Schleim Eier.", "questSlimeDropSlimeEgg": "Marshmallow Schleim (Ei)", - "questSlimeUnlockText": "Schaltet Schleim Eier auf dem Marktplatz zum Kaufen frei", + "questSlimeUnlockText": "Ermöglicht den Kauf von Schleim Eier auf dem Marktplatz", "questSheepText": "Der Donnerbock", - "questSheepNotes": "Als du mit deinen Freunden durch das ländliche Aufgabistan wanderst und eine \"kurze Pause\" von deinen Verpflichtungen einlegst, findest du einen kleinen Garnladen. Du bist so in deine Aufgabenaufschieberei vertieft, dass du die Unheil verkündenden Wolken am Horizont kaum bemerkst. \"Ich habe ein schlechtes Gefühl bei diesem Wetter\", murmelt @Misceo und du schaust nach oben. Die stürmischen Wolken brauen sich zusammen und sie sehen fast aus wie... \"Wir haben keine Zeit, in die Wolken zu schauen\", ruft @starsystemic. \"Es greift an!\" Der Donnerbock rast los und schleudert Blitze direkt auf dich zu!", + "questSheepNotes": "Als Du mit Deinen Freunden durch das ländliche Aufgabistan wanderst und eine \"kurze Pause\" von Deinen Verpflichtungen einlegst, findest Du einen gemütlichen Garnladen. Du bist so in Deine Aufgabenaufschieberei vertieft, dass du die Unheil verkündenden Wolken am Horizont kaum bemerkst. \"Ich habe ein schlechtes Gefühl bei diesem Wetter\", murmelt @Misceo und du schaust nach oben. Stürmischen Wolken brauen sich zusammen und sie sehen fast aus wie ... \"Wir haben keine Zeit, in die Wolken zu schauen\", ruft @starsystemic. \"Er greift an!\" Der Donnerbock rast los und schleudert Blitze direkt auf Dich zu!", "questSheepBoss": "Donnerbock", "questSheepCompletion": "Beeindruckt von deinem Fleiß, lässt die Wut des Donnerbocks nach. Er schießt drei riesige Hagelkörner in deine Richtung und verschwindet dann mit leisem Grollen. Bei näherer Betrachtung entdeckst du, dass die Hagelkörner eigentlich drei flauschige Eier sind. Du hebst sie auf und schlenderst unter blauem Himmel nach Hause.", "questSheepDropSheepEgg": "Schaf (Ei)", "questSheepUnlockText": "Ermöglicht den Kauf von Schafseiern auf dem Marktplatz", - "questKrakenText": "Der Kraken von Unfertige", - "questKrakenNotes": "Als du durch die Unfertige Bucht segelst, ist es ein warmer, sonniger Tag, aber deine Gedanken sind voller Sorgen über alles was du noch zu erledigen hast. Es scheint so, als ob sobald eine Aufgabe erledigt ist, eine andere auftaucht, und dann noch eine...

Plötzlich wird das Boot von einem furchtbaren Ruck erschüttert, und schleimige Tentakeln schlängeln sich an allen Seiten aus dem Wasser! \"Der Kraken von Unfertige greift uns an!\" schreit Wolvenhalo.

\"Schnell!\" ruft dir Lemoness zu. \"Schlage so viele Tentakeln und Aufgaben nieder wie du kannst, bevor neue auftauchen und ihren Platz einnehmen!\"", - "questKrakenBoss": "Der Kraken von Unfertige", + "questKrakenText": "Der Kraken von Unfertik", + "questKrakenNotes": "Als Du durch die Unfertige Bucht segelst, ist es ein warmer, sonniger Tag, aber Deine Gedanken sind voller Sorgen über alles was Du noch zu erledigen hast. Es scheint so, als ob sobald eine Aufgabe erledigt ist, eine andere auftaucht, und dann noch eine...

Plötzlich wird das Boot von einem furchtbaren Ruck erschüttert, und schleimige Tentakeln schlängeln sich an allen Seiten aus dem Wasser! \"Der Kraken von Unfertik greift uns an!\" schreit Wolvenhalo.

\"Schnell!\" ruft dir Lemoness zu. \"Schlage so viele Tentakeln und Aufgaben nieder wie Du kannst, bevor neue auftauchen und ihren Platz einnehmen!\"", + "questKrakenBoss": "Der Kraken von Unfertik", "questKrakenCompletion": "Als der Kraken flieht, treiben mehrere Eier an die Wasseroberfläche. Lemoness untersucht sie zunächst argwöhnisch, dann ruft sie freudestrahlend \"Tintenfischeier! Hier, nimm sie als Belohnung für alles was Du erledigt hast!\"", "questKrakenDropCuttlefishEgg": "Tintenfisch (Ei)", - "questKrakenUnlockText": "Ermöglicht den Kauf von Tintenfischeiern auf dem Marktplatz.", + "questKrakenUnlockText": "Ermöglicht den Kauf von Tintenfischeiern auf dem Marktplatz", "questWhaleText": "Jammern des Wals", - "questWhaleNotes": "Du kommt am Diligent Hafen an und hoffst, dass du mit einem U-Boot zum Dilatory Derby fahren kannst. Plötzlich zwingt dich ein ohrenbetäubendes Grölen dazu anzuhalten und deine Ohren zuzuhalten. \"Wal in Sicht!\", schreit Kapitän @krazjega, während er auf einen riesigen, klagenden Wal deutet. \"Es ist nicht sicher U-Boote herauszuschicken während sie um sich schlägt!\"

\"Schnell\", ruft @UncommonCriminal. \"Hilf mir die arme Kreatur zu beruhigen, damit wir herausfinden können, wieso sie diesen ganzen Krach macht!\"", + "questWhaleNotes": "Du kommst am Diligent Hafen an und hoffst, dass Du mit einem U-Boot zum Dilatory Derby fahren kannst. Plötzlich zwingt Dich ein ohrenbetäubendes Grölen dazu anzuhalten und Deine Ohren zuzuhalten. \"Wal in Sicht!\", schreit Kapitän @krazjega, während er auf einen riesigen, klagenden Wal deutet. \"Es ist nicht sicher U-Boote herauszuschicken während sie um sich schlägt!\"

\"Schnell\", ruft @UncommonCriminal. \"Hilf mir die arme Kreatur zu beruhigen, damit wir herausfinden können, wieso sie diesen ganzen Krach macht!\"", "questWhaleBoss": "Jammernder Wal", - "questWhaleCompletion": "Nach der ganzen harten Arbeit verstummt das donnernde Jammern des Wahles. \"Scheint als wäre sie in der Flut schlechter Angewohnheiten fast ertrunken\", erklärt @zoebeagle, \"Dank deiner ununterbrochenen Bemühungen konnten wir die Fluten abwenden!\" Als du in das U-Boot steigen willst fallen dir in der ruhigen See einige Eier auf.", + "questWhaleCompletion": "Nach der ganzen harten Arbeit verstummt das donnernde Jammern des Wales. \"Scheint als wäre sie in der Flut schlechter Angewohnheiten fast ertrunken\", erklärt @zoebeagle, \"Dank deiner ununterbrochenen Bemühungen konnten wir die Fluten abwenden!\" Als du in das U-Boot steigen willst fallen dir in der ruhigen See einige Eier auf.", "questWhaleDropWhaleEgg": "Wal (Ei)", - "questWhaleUnlockText": "Ermöglicht den Kauf von Waleiern auf dem Marktplatz.", - "questDilatoryDistress1Text": "Aufschiebendes Elend, Teil 1: Flaschenpost", - "questDilatoryDistress1Notes": "Eine Nachricht in einer Flasche aus der neu wieder aufgebauten Stadt Dilatory traf ein! Darin steht: \"Liebe Habiticaner, wir brauchen erneut eure Hilfe. Unsere Prinzessin ist verschwunden und die Stadt wir von einigen unbekannten Wasserdämonen belagert! Die Fangschreckenkrebse halten uns die Angreifer vom Leibe. Bitte helft uns!\" Um die weite Reise zur versunkenen Stadt zu durchstehen, muss man fähig sein unter Wasser zu atmen. Glücklicherweise können die Alchimisten @Benga und @hazel dies möglich machen! Du musst nur die richtigen Zutaten finden.", + "questWhaleUnlockText": "Ermöglicht den Kauf von Waleiern auf dem Marktplatz", + "questDilatoryDistress1Text": "Dilatory in Gefahr, Teil 1: Flaschenpost", + "questDilatoryDistress1Notes": "Eine Nachricht in einer Flasche aus der neu wieder aufgebauten Stadt Dilatory traf ein! Darin steht: \"Liebe Habiticaner, wir brauchen erneut eure Hilfe. Unsere Prinzessin ist verschwunden und die Stadt wird von einigen unbekannten Wasserdämonen belagert! Die Fangschreckenkrebse halten uns die Angreifer vom Leibe. Bitte helft uns!\" Um die weite Reise zur versunkenen Stadt zu durchstehen, muss man fähig sein unter Wasser zu atmen. Glücklicherweise können die Alchimisten @Benga und @hazel dies möglich machen! Du musst nur die richtigen Zutaten finden.", "questDilatoryDistress1Completion": "Du ziehst die Flossenrüstung an und schwimmst so schnell du kannst nach Dilatory. Bisher haben das Meeresvolk und ihre verbündeten Fangschreckenkrebse es geschafft die Monster aus der Stadt fernzuhalten, aber sie sind drauf und dran zu verlieren. Kaum bist du innerhalb der Schlossmauern, als die entsetzliche Belagerung durchbricht!", "questDilatoryDistress1CollectFireCoral": "Feuerkorallen", "questDilatoryDistress1CollectBlueFins": "Blaue Schwanzflossen", "questDilatoryDistress1DropArmor": "Flossenbesetztes Ozeangewand (Rüstung)", - "questDilatoryDistress2Text": "Säumiges Elend, Teil 2: Kreaturen der Gletscherspalte", + "questDilatoryDistress2Text": "Dilatory in Gefahr, Teil 2: Kreaturen der Gletscherspalte", "questDilatoryDistress2Notes": "Die Belagerung kann meilenweit entfernt gesehen werden: tausende körperlose Schädel drängen sich durch ein Portal zwischen den Wänden der Spalte und streben Dilatory entgegen.

Du triffst König Manta mit eingefallenen Augen und besorgtem Gesicht in seinem Kriegszimmer. \"Meine Tochter Adva verschwand in der dunklen Meeresspalte kurz bevor die Belagerung begann. Bitte finde sie und bringe sie sicher wieder zurück! Ich werde dir mein Feuerkorallendiadem leihen, um dir zu helfen. Wenn du erfolgreich bist, ist es deins.\"", "questDilatoryDistress2Completion": "Du bezwingst die albtraumhalfte Totenschädelhorde, aber du hast nicht das Gefühl näher dran zu sein Adva zu finden. Du fragst @Kiwibot, den königlichen Fährtensucher, ob sie irgendeine Idee hat. \"Die Fangschreckenkrebse, welche die Stadt verteidigen, sollten Advas Flucht gesehen haben\", antwortet @Kiwibot. \"Versuche ihnen in die dunkle Meeresspalte zu folgen.\"", "questDilatoryDistress2Boss": "Wasserschädel Schwarm", - "questDilatoryDistress2RageTitle": "Schwarm Auferstehung", - "questDilatoryDistress2RageDescription": "Schwarm Auferstehung: Diese Leiste füllt sich, wenn Du deine täglichen Aufgaben nicht erfüllst. Wenn sie voll ist, heilt sich der Wasserschädel Schwarm um 30% seiner übrigen Lebenspunkte!", - "questDilatoryDistress2RageEffect": "'Wasserschädelschwarm benutzt SCHWARM RESPAWN!'\n\nErmutigt durch ihre Siege, strömen weitere Schädel aus der Meeresspalte, um den Schwarm zu unterstützen!", + "questDilatoryDistress2RageTitle": "Schwarmnachwuchs", + "questDilatoryDistress2RageDescription": "Schwarmnachwuchs: Diese Leiste füllt sich, wenn Du deine täglichen Aufgaben nicht erfüllst. Wenn sie voll ist, heilt sich der Wasserschädel Schwarm um 30% seiner übrigen Lebenspunkte!", + "questDilatoryDistress2RageEffect": "'Wasserschädelschwarm benutzt SCHWARMNACHWUCHS!'\n\nErmutigt durch ihre Siege, strömen weitere Schädel aus der Meeresspalte, um den Schwarm zu unterstützen!", "questDilatoryDistress2DropSkeletonPotion": "Skelettierter Schlüpftrank", "questDilatoryDistress2DropCottonCandyBluePotion": "Zuckerwattenblauer Schlüpftrank", "questDilatoryDistress2DropHeadgear": "Feuerkorallendiadem (Kopfbedeckung)", - "questDilatoryDistress3Text": "Säumiges Elend, Teil 3: Nicht nur ein Dienstmädchen", - "questDilatoryDistress3Notes": "Du folgst den Fangschreckenkrebsen tief in die Meeresspalte und entdeckst eine Unterwasserfestung. Prinzessin Adva, von weiteren Wasserschädeln begleitet, erwartet dich in der Haupthalle. \"Mein Vater hat euch gesandt, oder? Berichtet ihm, dass ich es ablehne zurückzukehren. Ich bin damit zufrieden hier zu bleiben und Zauberei zu betreiben. Verschwinde jetzt oder du wirst den Zorn der neuen Meereskönigin spüren!\" Adva scheint unnachgiebig zu sein, aber während sie spricht bemerkst du einen seltsamen, bedrohlich glühenden Rubinanhänger an ihrem Hals... Vielleicht würden ihr Wahnvorstellungen aufhören, wenn du ihn zerbrichst?", - "questDilatoryDistress3Completion": "Finally, you manage to pull the bewitched pendant from Adva's neck and throw it away. Adva clutches her head. \"Where am I? What happened here?\" After hearing your story, she frowns. \"This necklace was given to me by a strange ambassador - a lady called 'Tzina'. I don't remember anything after that!\"

Back at Dilatory, Manta is overjoyed by your success. \"Allow me to reward you with this trident and shield! I ordered them from @aiseant and @starsystemic as a gift for Adva, but... I'd rather not put weapons in her hands any time soon.\"", - "questDilatoryDistress3Boss": "Adva, die verdränge Meerjungfrau", + "questDilatoryDistress3Text": "Dilatory in Gefahr, Teil 3: Nicht nur ein Dienstmädchen", + "questDilatoryDistress3Notes": "Du folgst den Fangschreckenkrebsen tief in die Meeresspalte und entdeckst eine Unterwasserfestung. Prinzessin Adva, von weiteren Wasserschädeln begleitet, erwartet dich in der Haupthalle. \"Mein Vater hat euch gesandt, oder? Berichtet ihm, dass ich es ablehne zurückzukehren. Ich bin damit zufrieden hier zu bleiben und Zauberei zu betreiben. Verschwinde jetzt oder du wirst den Zorn der neuen Meereskönigin spüren!\" Adva scheint unnachgiebig zu sein, aber während sie spricht bemerkst du einen seltsamen, bedrohlich glühenden Rubinanhänger an ihrem Hals ... Vielleicht würden ihre Wahnvorstellungen aufhören, wenn Du ihn zerbrichst?", + "questDilatoryDistress3Completion": "Schließlich gelingt es Dir den verhexten Anhänger von Advas Hals zu nehmen und wirfst ihn weg. Adva fasst sich an den Kopf: \"Wo bin ich? Was ist hier passiert?\" Nachdem sie Deine Geschichte gehört hat, runzelt sie ihre Stirn: \"Dieses Amulett wurde mir von einer seltsamen Botschafterin überreicht - Eine Dame namens 'Tzina'. Danach erinnere ich mich an nichts mehr!\"

Zurück in Dilatory ist Manta überglücklich über Deinen Erfolg. \"Erlaube mir, Dich mit diesem Dreizack und diesem Schild zu belohnen! Ich habe sie bei @aiseant und @starsystemic als Geschenk für Adva anfertigen lassen, aber ... Ich möchte in nächster Zeit lieber keine Waffen mehr in ihre Hände geben.", + "questDilatoryDistress3Boss": "Adva, die putschende Meerjungfrau", "questDilatoryDistress3DropFish": "Fisch (Futter)", "questDilatoryDistress3DropWeapon": "Dreizack der zerschmetternden Gezeiten (Waffe)", "questDilatoryDistress3DropShield": "Mondperlenschild (Schildhand Item)", - "questCheetahText": "So ein Gepard", - "questCheetahNotes": "As you hike across the Sloensteadi Savannah with your friends @PainterProphet, @tivaquinn, @Unruly Hyena, and @Crawford, you're startled to see a Cheetah screeching past with a new Habitican clamped in its jaws. Under the Cheetah's scorching paws, tasks burn away as though complete -- before anyone has the chance to actually finish them! The Habitican sees you and yells, \"Please help me! This Cheetah is making me level too quickly, but I'm not getting anything done. I want to slow down and enjoy the game. Make it stop!\" You fondly remember your own fledgling days, and know that you have to help the newbie by stopping the Cheetah!", - "questCheetahCompletion": "The new Habitican is breathing heavily after the wild ride, but thanks you and your friends for your help. \"I'm glad that Cheetah won't be able to grab anyone else. It did leave some Cheetah eggs for us, so maybe we can raise them into more trustworthy pets!\"", + "questCheetahText": "Der Mogel-Gepard", + "questCheetahNotes": "Während Du mit Deinen Freunden @PainterProphet, @tivaquinn, @Unruly Hyena und @Crawford durch die Ruhilangsam-Savanne wanderst, schreckst Du plötzlich hoch, als Du einen Mogel-Geparden vorbeischnellen siehst, der einen kreischenden Jung-Habiticaner mit dem Maul gepackt hat. Unter den feurigen Pfoten des Geparden verbrennen die Aufgaben, als ob sie erledigt wären -- bevor überhaupt jemand die Möglichkeit dazu hat, diese tatsächlich abzuschließen! Der Habiticaner sieht Dich und ruft: \"Bitte hilf mir! Der Mogel-Gepard lässt meinen Level zu schnell ansteigen, ohne dass ich wirklich etwas erledigen kann. Ich will langsamer machen und das Spiel genießen. Halte ihn auf!\" Liebevoll erinnerst Du Dich an die Tage, and denen Du selbst flügge wurdest, und Du weißt, dass Du dem Neuling helfen musst, indem Du den Mogel-Geparden aufhältst!", + "questCheetahCompletion": "Der Jung-Habiticaner atmet schwer nach dem wilden Ritt, aber er dankt Dir und Deinen Freunden für eure Hilfe: \"Ich bin froh, dass der Gepard niemand anderen mehr schnappen kann. Er hat aber ein paar Gepardeneier für uns hinterlassen, vielleicht können wir die zu vertrauenswürdigeren Haustieren großziehen!\"", "questCheetahBoss": "Gepard", "questCheetahDropCheetahEgg": "Gepard (Ei)", - "questCheetahUnlockText": "Schaltet kaufbare Gepradeneier im Marktplatz frei", + "questCheetahUnlockText": "Ermöglicht den Kauf von Gepardeneier auf dem Marktplatz", "questHorseText": "Reite den Alptraum", - "questHorseNotes": "While relaxing in the Tavern with @beffymaroo and @JessicaChase, the talk turns to good-natured boasting about your adventuring accomplishments. Proud of your deeds, and perhaps getting a bit carried away, you brag that you can tame any task around. A nearby stranger turns toward you and smiles. One eye twinkles as he invites you to prove your claim by riding his horse.\nAs you all head for the stables, @UncommonCriminal whispers, \"You may have bitten off more than you can chew. That's no horse - that's a Night-Mare!\" Looking at its stamping hooves, you begin to regret your words...", - "questHorseCompletion": "It takes all your skill, but finally the horse stamps a couple of hooves and nuzzles you in the shoulder before allowing you to mount. You ride briefly but proudly around the Tavern grounds while your friends cheer. The stranger breaks into a broad grin.\n\"I can see that was no idle boast! Your determination is truly impressive. Take these eggs to raise horses of your own, and perhaps we'll meet again one day.\" You take the eggs, the stranger tips his hat... and vanishes.", + "questHorseNotes": "Während Du Dich im Gasthaus mit @beffymaroo und @JessicaChase ausruhst, entwickelt sich das Gespräch zu einer gutartigen Angeberei über Deine Abenteuer-Erfolge. Stolz auf Deine Taten und vielleicht etwas mitgerissen, prahlst Du, dass Du jede Aufgabe in der Nähe zähmen kannst. Ein beistehender Fremder dreht sich zu Dir um und lächelt. Mit einem Augenzwinkern läd er Dich dazu ein, Deine Behauptung unter Beweis zu stellen, indem Du sein Pferd reitest.\nAls ihr euch gemeinsam zu den Ställen begebt, flüstert @UncommonCriminal: \"Du hast den Mund wahrscheinlich etwas zu voll genommen. Das ist kein Pferd, das ist ein Alptraum!\" Als Du die stampfenden Hufe betrachtest, fängst Du an Deine Worte zu bereuen ...", + "questHorseCompletion": "Es beansprucht Dein ganzes Können, aber schließlich stampft das Pferd mit ein paar seiner Hufe und reibt seine Schnauze an Deiner Schulter, bevor es Dir erlaubt aufzusteigen. Du reitest kurz aber stolz um das Gasthaus-Gelände, während Deine Freunde Dir zujubeln. Der Fremde grinst breit.\n\"Wie ich sehe war das keine leere Prahlerei! Deine Entschlossenheit ist wahrlich beeindruckend. Nimm diese Eier und ziehe Deine eigenen Pferde groß. Vielleicht treffen wir uns ja eines Tages wieder.\" Du nimmst die Eier entgegen, der Fremde tippt seinen Hut an ... und verschwindet.", "questHorseBoss": "Alptraum", - "questHorseDropHorseEgg": "Pferd (Ei)", - "questHorseUnlockText": "Schaltet die Option Pferdeeier auf dem Marktplatz zu kaufen frei.", - "questBurnoutText": "Burnout and the Exhaust Spirits", - "questBurnoutNotes": "It is well past midnight, still and stiflingly hot, when Redphoenix and scout captain Kiwibot abruptly burst through the city gates. \"We need to evacuate all the wooden buildings!\" Redphoenix shouts. \"Hurry!\"

Kiwibot grips the wall as she catches her breath. \"It's draining people and turning them into Exhaust Spirits! That's why everything was delayed. That's where the missing people have gone. It's been stealing their energy!\"

\"'It'?'\" asks Lemoness.

And then the heat takes form.

It rises from the earth in a billowing, twisting mass, and the air chokes with the scent of smoke and sulphur. Flames lick across the molten ground and contort into limbs, writhing to horrific heights. Smoldering eyes snap open, and the creature lets out a deep and crackling cackle.

Kiwibot whispers a single word.

\"Burnout.\"", + "questHorseDropHorseEgg": "Hengst (Ei)", + "questHorseUnlockText": "Ermöglicht den Kauf von Hengsteier auf dem Marktplatz", + "questBurnoutText": "Burnout und die Geister der Erschöpfung", + "questBurnoutNotes": "Es ist weit nach Mitternacht, still und erstickend heiß als Redphoenix und Späheranführer Kiwibot plötzlich durch die Stadttore platzen. \"Wir müssen sämtliche Holzgebäude evakuieren!\", schreit Redphoenix. \"Beeilung!\"

Kiwibot stützt sich an die Wand als sie Luft holt. \"Es erschöpft die Menschen und verwandelt sie in Erschöpfungsgeister! Deshalb hat sich alles verzögert. Das ist, wo die Vermissten hin verschwunden sind. Es stiehlt ihre Energie!\"

\"Es?\", fragt Lemoness.

Und dann nimmt die Hitze Gestalt an.

Es steigt von der Erde empor, als wogende, wirbelnde Masse und die Luft wird erfüllt von einem Gestank nach Rauch und Schwefel. Flammen lecken über den geschmolzenen Boden und verkrümmen sich zu Gliedmaßen und winden sich in entsetzliche Höhen. Glimmende Augen öffnen sich und die Kreatur stößt ein tiefes und knackendes Lachen aus.

Kiwibot flüstert ein einzelnes Wort.

\"Burnout.\"", "questBurnoutCompletion": "Burnout is DEFEATED!

With a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.

Ian, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!

\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!

One of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"

Her tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"

She claps her hands. \"Now - let's celebrate!\"", "questBurnoutCompletionChat": "`Burnout is DEFEATED!`\n\nWith a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.\n\nIan, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!\n\n\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!\n\nOne of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"\n\nHer tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"\n\nShe claps her hands. \"Now - let's celebrate!\"\n\nAll Habiticans receive:\n\nPhoenix Pet\nPhoenix Mount\nAchievement: Savior of the Flourishing Fields\nBasic Candy\nVanilla Candy\nSand Candy\nCinnamon Candy\nChocolate Candy\nRotten Candy\nSour Pink Candy\nSour Blue Candy\nHoney Candy", "questBurnoutBoss": "Burnout", - "questBurnoutBossRageTitle": "Exhaust Strike", - "questBurnoutBossRageDescription": "When this gauge fills, Burnout will unleash its Exhaust Strike on Habitica!", - "questBurnoutDropPhoenixPet": "Phoenix (Pet)", - "questBurnoutDropPhoenixMount": "Phoenix (Mount)", + "questBurnoutBossRageTitle": "Erschöpfungsschlag", + "questBurnoutBossRageDescription": "Wenn sich diese Anzeige füllt, wird Burnout seinen Erschöpfungsschlag auf Habitica entfesseln!", + "questBurnoutDropPhoenixPet": "Phönix (Haustier)", + "questBurnoutDropPhoenixMount": "Phönix (Reittier)", "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!", + "questFrogText": "Sumpf des Chaos-Froschs", + "questFrogNotes": "Als Du Dich mit Deinen Freunden durch den Sumpf des Stillstands schlägst, deutet @starsystemic auf ein großes Schild: \"Auf dem Weg bleiben -- wenn möglich.\"

\"Das ist sicher nicht schwer\" sagt @RosemonkeyCT. \"Er ist breit und frei.\"

Aber als Ihr weitergeht, bemerkst Du, dass der Weg langsam immer mehr vom Moor des Sumpfs eingenommen wird, übersät mit Stücken blauen Gerölls und Müll. Irgendwann ist es unmöglich voranzukommen.

Als Du Dich umsiehst und Dich fragst, wie es hier so verschmutzt werden konnte, ruft @Jon Arjinborn: \"Passt auf!\" Ein wütender Frosch springt aus dem Schlamm hervor, bekleidet mit dreckigen Lumpen und von blauem Feuer entfacht. Du musst diesen giftigen Chaos-Frosch überwältigen um weiterzukommen!", + "questFrogCompletion": "Der Frosch kauert sich zurück ins Moor, besiegt. Als er sich langsam davonschleicht, löst sich der blaue Schleim auf und gibt den Weg vor euch frei.

In der Mitte des Weges befinden sich drei makellose Eier. \"Man kann sogar die winzigen Kaulquappen durch die klare Schale hindurch erkennen!\" sagt @Breadstrings. \"Hier, Du solltest sie nehmen.\"", + "questFrogBoss": "Chaos-Frosch", + "questFrogDropFrogEgg": "Frosch (Ei)", + "questFrogUnlockText": "Ermöglicht den Kauf von Froscheiern auf dem Marktplatz", + "questSnakeText": "Die Schlange der Ablenkung", + "questSnakeNotes": "Man braucht eine abgehärtete Seele, um in den Sanddünen der Ablenkung zu leben. Die ausgedörrte Wüste ist kaum ein produktiver Ort, und die glänzenden Dünen haben schon so manchen Reisenden in die Irre geführt. Jedoch erschreckt sogar die Einheimischen etwas. Der Wüstensand verschiebt und hebt ganze Dörfer an. Anwohner behaupten ein Monster mit einem gewaltigen Schlangenkörper liegt und wartet dort unter dem Sand. Deshalb haben sie gemeinsam zusammengelegt und eine Belohnung für denjenigen gesammelt, der ihnen hilft es zu finden und aufzuhalten. Die vielgelobten Schlangenbeschwörer @EmeraldOx und @PainterProphet haben zugestimmt Dir bei der Herbeirufung der Bestie zu beizustehen.", + "questSnakeCompletion": "Mit der Hilfe der Beschwörer besiegst Du die Schlange der Ablenkung. Und obwohl Du froh bist, den Einwohnern der Dünen geholfen zu haben, kannst Du nicht anders als Deinen gefallenen Gegner ein wenig zu bedauern. Während Du über den Anblick nachdenkst, nähert sich Dir @LordDarkly: \"Danke! Es ist zwar nicht viel, aber ich hoffe das kann unsere Dankbarkeit richtig zum Ausdruck bringen.\" Er überreicht Dir etwas Gold und ... ein paar Schlangeneier! Nach alledem wirst Du schließlich doch das majestätische Tier wiedersehen.", + "questSnakeBoss": "Schlange der Ablenkung", + "questSnakeDropSnakeEgg": "Schlange (Ei)", + "questSnakeUnlockText": "Ermöglicht den Kauf von Schlangeneiern auf dem Marktplatz" } \ No newline at end of file diff --git a/common/locales/de/rebirth.json b/common/locales/de/rebirth.json index dab181db0f..b1a797495b 100644 --- a/common/locales/de/rebirth.json +++ b/common/locales/de/rebirth.json @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "Du erhältst den Erfolg für das Beginnen eines neuen Abenteuers!", "beReborn": "Werde wiedergeboren", "rebirthAchievement": "Du hast ein neues Abenteuer begonnen! Das ist Wiedergeburt Nummer <%= number %> für Dich, Dein höchstes jemals erreichtes Level ist <%= level %>. Um diesen Erfolg zu stapeln, beginne Dein nächstes Abenteuer wenn Du ein noch höheres Level erreicht hast!", + "rebirthAchievement100": "Du hast ein neues Abenteuer begonnen! Das ist deine <%= number %> Wiedergeburt. Dein höchstes jemals erreichtes Level ist 100 oder mehr. Um diesen Erfolg zu stapeln, beginne Dein nächstes Abenteuer wenn Du mindestens Level 100 erreicht hast!", "rebirthBegan": "Hat ein neues Abenteuer begonnen", "rebirthText": "Hat <%= rebirths %> neue Abenteuer begonnen", "rebirthOrb": "Hat eine Sphäre der Wiedergeburt verwendet nachdem er folgendes Level erreicht hatte:", + "rebirthOrb100": "Hat eine Sphäre der Wiedergeburt verwendet um noch mal von vorne zu beginnen, nachdem Level 100 oder höher erreicht wurde", "rebirthPop": "Starte einen neuen Charakter mit Level 1, aber behalte Erfolge, Sammlungen und Aufgaben mit Verlauf bei.", "rebirthName": "Sphäre der Wiedergeburt", "reborn": "Wiedergeboren, max. Level <%= reLevel %>" diff --git a/common/locales/de/settings.json b/common/locales/de/settings.json index b49eeae48a..9c50a992d4 100644 --- a/common/locales/de/settings.json +++ b/common/locales/de/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "Mit dieser Option wird die Liste der Tags verdeckt, wenn Du eine Aufgabe das erste mal bearbeitest.", "startAdvCollapsed": "Erweiterte Optionen standartmäßig verdecken", "startAdvCollapsedPop": "Mit dieser Option werden die erweiterten Optionen verdeckt, wenn Du eine Aufgabe das erste mal bearbeitest.", + "dontShowAgain": "Nicht mehr anzeigen", + "suppressLevelUpModal": "Beim Levelaufstieg kein Popup anzeigen", + "suppressHatchPetModal": "Beim Schlüpfen eines Haustiers kein Popup anzeigen", + "suppressRaisePetModal": "Beim Heranwachsen eines Haustiers zum Reittier kein Popup anzeigen", + "suppressStreakModal": "Beim Erreichen eines Strähnenerfolges kein Popup anzeigen", "showTour": "Anleitung anzeigen", "restartTour": "Startet die Einleitungs Tour, die Du als erstes auf Habitica gesehen hast, neu.", "showBailey": "Bailey anzeigen", @@ -81,7 +86,6 @@ "emailChange1": "Um Deine Email-Adresse zu ändern, schicke bitte eine Email an", "emailChange2": "admin@habitica.com", "emailChange3": "Bitte gib sowohl Deine alte und neue Email-Adresse, als auch Deine Benutzer ID an.", - "username": "Login Name", "usernameOrEmail": "Login Name oder E-Mail-Adresse", "email": "E-Mail", "registeredWithFb": "Mit Facebook registriert", @@ -89,7 +93,7 @@ "loginNameDescription2": "Benutzer->Profil", "loginNameDescription3": "um den Namen, der bei Deinem Avatar und bei Deinen Chat Nachrichten steht zu ändern.", "emailNotifications": "Email Benachrichtigungen", - "wonChallenge": "Du hast einen Wettbewerb gewonnen", + "wonChallenge": "Du hast einen Wettbewerb gewonnen!", "newPM": "Du hast eine private Nachricht erhalten", "giftedGems": "Verschenkte Edelsteine", "giftedGemsInfo": "<%= amount %> Edelsteine - von <%= name %>", @@ -118,5 +122,29 @@ "promoCode": "Aktionscode", "promoCodeApplied": "Promo Code aktiviert! Überprüfe dein Inventar", "promoPlaceholder": "Promo Code eingeben", - "displayInviteToPartyWhenPartyIs1": "Zeige \"In Gruppe einladen\"-Schaltfläche an, wenn die Gruppe nur 1 Mitglied hat." + "displayInviteToPartyWhenPartyIs1": "Zeige \"In Gruppe einladen\"-Schaltfläche an, wenn die Gruppe nur 1 Mitglied hat.", + "saveCustomDayStart": "Speichere den Tageswechsel", + "registration": "Registrierung", + "addLocalAuth": "Lokale Authentifizierung hinzufügen:", + "generateCodes": "Erstelle Codes", + "generate": "Erstelle", + "getCodes": "Codes erhalten!", + "webhooks": "Webhooks", + "enabled": "Aktivieren", + "webhookURL": "Webhook URL", + "add": "Hinzufügen", + "buyGemsGoldCap": "Obergrenze wurde auf <%= amount %> angehoben", + "mysticHourglass": "<%= amount %> mystische Sanduhr", + "mysticHourglassText": "Mystische Sanduhren erlauben dir ein Überraschungsgegenstandsset früherer Monate zu kaufen.", + "purchasedPlanId": "Alle <%= months %> Monat(e) wiederkehrender Preis: <%= price %>$ (<%= plan %>)", + "purchasedPlanExtraMonths": "Du hast noch ein Abonnementguthaben von <%= months %> Monaten.", + "consecutiveSubscription": "Fortlaufendes Abonnement", + "consecutiveMonths": "Aufeinanderfolgende Monate:", + "gemCapExtra": "Zusätzliche Erhöhung der Edelsteingrenze:", + "mysticHourglasses": "Mystische Stundengläser", + "paypal": "PayPal", + "amazonPayments": "Amazon-Zahlungen", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/de/subscriber.json b/common/locales/de/subscriber.json index 11a5d39aaf..20256f9703 100644 --- a/common/locales/de/subscriber.json +++ b/common/locales/de/subscriber.json @@ -59,10 +59,10 @@ "timeTravelers": "Mysteriöse Zeitreisende", "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> und <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitle": "Mysteriöse Zeitreisende", - "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.", - "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 <%= linkStart %>here<%= linkEnd %>! If those don't satisfy you, perhaps you'd be interested in one of our fashionably futuristic Steampunk Item Sets?", + "timeTravelersPopoverNoSub": "Du brauchst eine mystische Sanduhr um die mysteriösen Zeitreisenden herbeizurufen! <%= linkStart %>Abbonnementen<%= linkEnd %> verdienen eine mystische Sanduhr für je drei Monate durchgehendes abonnieren. Komm zurück, wenn du eine mystischer Sanduhr hast und die Zeitreisenden werden Dir ein seltenes Haustier, Reittier oder Abonnementen Gegenstandsset aus der Vergangenheit holen... oder vielleicht sogar aus der Zukunft.", + "timeTravelersPopover": "Wir sehen du hast eine mystische Sanduhr, deshalb werden wir gerne für dich zurück durch die Zeit reisen! Bitte wähle das Haustier, Reittier oder mystische Gegenstandsset, dass Du haben möchtest. Die Liste aller vergangenen Gegenstandssets kannst du hier finden! Wenn diese Dich nicht zufrieden stellen können wir dich vielleicht für eines unserer futuristischen Steampunk Gegenstandssets interessieren?", "timeTravelersAlreadyOwned": "Herzlichen Glückwunsch! Du besitzt bereits alles, was die Zeitreisenden gerade anbieten können. Danke, dass du die Seite unterstützt!", - "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!", + "mysticHourglassPopover": "Eine Mystische Sanduhr erlaubt dir für eine begrenzte Zeit spezifische alte Gegenstand, so wie Geheimnis Abonnenten-Sets und Belohnungen von Welt-Bosse, zu kaufen.", "subUpdateCard": "Aktualisiere deine Karte", "subUpdateTitle": "Aktualisiere", "subUpdateDescription": "Aktualisiere die Karte mit der Du zahlen möchtest.", diff --git a/common/locales/de/tasks.json b/common/locales/de/tasks.json index 30a6ebd855..a48a5ec9ca 100644 --- a/common/locales/de/tasks.json +++ b/common/locales/de/tasks.json @@ -77,7 +77,7 @@ "streakText": "Hat <%= streaks %> 21-tägige Strähnen von täglichen Aufgaben erreicht", "streakSingular": "Perfektionist", "streakSingularText": "Hat eine 21-tägige Strähne bei einer täglichen Aufgaben erreicht", - "perfectName": "Perfekt(e) Tag(e)", + "perfectName": "Perfekte Tage", "perfectText": "Du hast alle täglichen Aufgaben an <%= perfects %> Tagen erfüllt. Mit diesem Erfolg erhältst Du eine Level/2 Stärkung aller Attribute für den nächsten Tag. Alle Level über 100 haben keine zusätzliche Auswirkung auf die Attribute.", "perfectSingular": "Perfekt(e) Tag(e)", "perfectSingularText": "Du hast alle täglichen Aufgaben an einem Tag erfüllt. Mit diesem Erfolg erhältst Du eine Level/2 Stärkung aller Attribute für den nächsten Tag. Alle Level über 100 haben keine zusätzliche Auswirkung auf die Attribute.", @@ -85,11 +85,10 @@ "fortifyName": "Verstärkungstrank", "fortifyPop": "Setzt alle Aufgaben auf den Anfangswert (gelb) zurück und füllt Deine Lebenspunkte wieder auf.", "fortify": "Verstärken", - "fortifyText": "Fortify will return all your tasks to a neutral (yellow) state, as if you'd just added them, and top your Health off to full. This is great if all your red tasks are making the game too hard, or all your blue tasks are making the game too easy. If starting fresh sounds much more motivating, spend the Gems and catch a reprieve!", + "fortifyText": "Stärken werden wieder alle ihre Aufgaben zu einer neutralen (gelb), Status, als hätten Sie gerade hinzugefügt haben, und oben Ihre Gesundheit aus zu voll. Das ist toll, wenn alle ihre roten Aufgaben machen das Spiel zu schwer ist, oder alle Ihre blauen Aufgaben machen das Spiel zu einfach. Wenn der Start frische Sounds viel mehr Motivation, verbringen die Edelsteine und fangen einen Aufschub!", "sureDelete": "Bist Du sicher, dass Du diese Aufgabe löschen möchtest?", "streakCoins": "Strähnen Bonus!", - "pushTaskToTop": "Aufgabe nach oben verschieben", - "pushTaskToBottom": "Aufgabe nach unten verschieben", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "Gib der Aufgabe zunächst einen Titel.", "dailiesRestingInInn": "Du ruhst dich im Gasthaus aus! Deine täglichen Aufgaben werden dir heute Nacht keinen Schaden zufügen, sie werden sich aber dennoch täglich aktualisieren. Falls du dich in einer Quest befindest, wirst du keinen Schaden austeilen/Gegenstände finden bis du das Gasthaus wieder verlässt, allerdings kannst du durch einen Boss verletzt werden, wenn deine Gruppe tägliche Aufgaben nicht erledigt.", "habitHelp1": "Gute Gewohnheiten sind Aktivitäten, die du oft machen sollst. Sie gewähren Gold und Erfahrung immer wenn du auf <%= plusIcon %> klickst.", diff --git a/common/locales/en/backgrounds.json b/common/locales/en/backgrounds.json index e00c180e88..96b6ec76e1 100644 --- a/common/locales/en/backgrounds.json +++ b/common/locales/en/backgrounds.json @@ -135,6 +135,22 @@ "backgroundSlimySwampText": "Slimy Swamp", "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness.", + + "backgrounds112015": "SET 18: Released November 2015", + "backgroundFloatingIslandsText": "Floating Islands", + "backgroundFloatingIslandsNotes": "Hop across the Floating Islands.", + "backgroundNightDunesText": "Night Dunes", + "backgroundNightDunesNotes": "Walk peacefully through the Night Dunes.", + "backgroundSunsetOasisText": "Sunset Oasis", + "backgroundSunsetOasisNotes": "Bask in the Sunset Oasis.", + + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } diff --git a/common/locales/en/challenge.json b/common/locales/en/challenge.json index edffd599a4..d82085f1c1 100644 --- a/common/locales/en/challenge.json +++ b/common/locales/en/challenge.json @@ -59,5 +59,9 @@ "challengeNotEnoughGems": "You do not have enough gems to post this challenge.", "noPermissionEditChallenge": "You don't have permissions to edit this challenge", "noPermissionDeleteChallenge": "You don't have permissions to delete this challenge", - "noPermissionCloseChallenge": "You don't have permissions to close this challenge" + "noPermissionCloseChallenge": "You don't have permissions to close this challenge", + "congratulations": "Congratulations!", + "hurray": "Hurray!", + "noChallengeOwner": "no owner", + "noChallengeOwnerPopover": "This challenge does not have an owner because the person who created the challenge deleted their account." } diff --git a/common/locales/en/character.json b/common/locales/en/character.json index 4e3f8a4645..95c0fc7428 100644 --- a/common/locales/en/character.json +++ b/common/locales/en/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "Class Bonus", "battleGear": "Battle Gear", "battleGearText": "This is the gear you wear into battle; it affects numbers when interacting with your tasks.", + "autoEquipBattleGear": "Auto-equip new gear", "costume": "Costume", "costumeText": "If you prefer the look of other gear to what you have equipped, check the \"Use Costume\" box to visually don a costume while wearing your battle gear underneath.", "useCostume": "Use Costume", @@ -64,6 +65,10 @@ "ultimGearText": "Has upgraded to the maximum weapon and armor set for the following classes:", "level": "Level", "levelUp": "Level Up!", + "gainedLevel": "You gained a level!", + "leveledUp": "By accomplishing your real-life goals, you've grown to Level <%= level %>!", + "fullyHealed": "You have been fully healed!", + "huzzah": "Huzzah!", "mana": "Mana", "hp": "HP", "mp": "MP", diff --git a/common/locales/en/content.json b/common/locales/en/content.json index d9e9427560..11e53ade50 100644 --- a/common/locales/en/content.json +++ b/common/locales/en/content.json @@ -135,6 +135,14 @@ "questEggHorseMountText": "Horse", "questEggHorseAdjective": "a galloping", + "questEggFrogText": "Frog", + "questEggFrogMountText": "Frog", + "questEggFrogAdjective": "a princely", + + "questEggSnakeText": "Snake", + "questEggSnakeMountText": "Snake", + "questEggSnakeAdjective": "a slithering", + "eggNotes": "Find a hatching potion to pour on this egg, and it will hatch into <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "Base", @@ -148,6 +156,7 @@ "hatchingPotionCottonCandyBlue": "Cotton Candy Blue", "hatchingPotionGolden": "Golden", "hatchingPotionSpooky": "Spooky", + "hatchingPotionPeppermint": "Peppermint", "hatchingPotionNotes": "Pour this on an egg, and it will hatch as a <%= potText(locale) %> pet.", "premiumPotionAddlNotes": "Not usable on quest pet eggs.", diff --git a/common/locales/en/faq.json b/common/locales/en/faq.json index bb03544d86..f473a3ac8d 100644 --- a/common/locales/en/faq.json +++ b/common/locales/en/faq.json @@ -3,7 +3,7 @@ "faqQuestion0": "I'm confused. Where do I get an overview?", "iosFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn experience and gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as Pets, Skills, and Quests! You can customize your character under Menu > Customize Avatar.\n\n Some basic ways to interact: click the (+) in the upper-right-hand corner to add a new task. Tap on an existing task to edit it, and swipe left on a task to delete it. You can sort tasks using Tags in the upper-left-hand corner, and expand and contract checklists by clicking on the checklist bubble.", - "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, the wiki has an excellent step-by-step overview of the game [right here](http://habitica.wikia.com/wiki/Habitica_Wiki).", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", "faqQuestion1": "How do I set up my tasks?", "iosFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.", @@ -22,7 +22,7 @@ "webFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you click a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your party and one of your party mates did not complete all their Dailies, the Boss will attack you.\n

\n The main way to heal is to gain a level, which restores all your Health. You can also buy a Health Potion with Gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a party (under Social > Party) with a Healer, they can heal you as well.", "faqQuestion5": "How do I play Habitica with my friends?", - "iosFaqAnswer5": "The best way is to invite them to a Party with you, via the [website](https://habitica.com/#/options/groups/party)! We'll add the ability to create a Party from this app soon, but in the meantime you can use the [website](https://habitica.com/#/options/groups/party). Parties can go on quests, battle monsters, and cast skills to support each other. On the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", + "iosFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on quests, battle monsters, and cast skills to support each other. Go to Menu > Party and click \"Create New Party\" if you don't already have a Party. Then tap on the Members list, and tap Invite in the upper right-hand corner to invite your friends by entering their User ID (a string of numbers and letters that they can find under Settings > Account Details on the app, and Settings > API on the website). On the website, you can also invite friends via email, which we will add to the app in a future update.\n\nOn the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", "webFaqAnswer5": "The best way is to invite them to a party with you, under Social > Party! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n

\n For more detailed info, check out the wiki pages on [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).", "faqQuestion6": "How do I get a Pet or Mount?", @@ -38,10 +38,10 @@ "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in a special section in the Rewards Column. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You’ll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "faqQuestion9": "How do I fight monsters and go on Quests?", - "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party on the [website](https://habitica.com/#/options/groups/party), you'll be rewarded with the Basi-List Scroll! (We will add this feature to the app in a future update.)\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for gold and gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", + "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for Gold and Gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "webFaqAnswer9": "First, you need to join or start a party (under Social > Party). Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n

\n Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are three ways to get a scroll:\n

\n * When you invite people to your party, you’ll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Page (Inventory > Quests) for Gold and Gems.\n

\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your party at the same time that you damage the Boss.\n

\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "faqQuestion10": "What are gems, and how do I get them?", + "faqQuestion10": "What are Gems, and how do I get them?", "iosFaqAnswer10": "Gems are purchased with real money by tapping on the gem icon in the header. When people buy gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying gems directly, there are three other ways players can gain gems:\n\n * Win a Challenge on the [website](https://habitica.com) that has been set up by another player under Social > Challenges. (We will be adding Challenges to the app in a future update!)\n * Subscribe on the [website](https://habitica.com/#/options/settings/subscription) and unlock the ability to buy a certain number of gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with gems do not offer any statistical advantages, so players can still make use of the app without them!", "webFaqAnswer10": "Gems are [purchased with real money](https://habitica.com/#/options/settings/subscription), although [subscribers](https://habitica.com/#/options/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n

\n In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n

\n * Win a Challenge that has been set up by another player under Social > Challenges.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", diff --git a/common/locales/en/front.json b/common/locales/en/front.json index 84cf7a03ee..b979acce77 100644 --- a/common/locales/en/front.json +++ b/common/locales/en/front.json @@ -74,7 +74,7 @@ "infhQuote": "[Habitica] has really helped me impart structure to my life in graduate school.", "invalidEmail": "A valid email address is required in order to perform a password reset.", "irishfeet123Quote": "I've had horrible habits with clearing my place completely after meals and leaving cups all over the place. [Habitica] has cured that!", - "joinOthers": "Join 250,000 people making it fun to achieve goals!", + "joinOthers": "Join <%= userCount %> people making it fun to achieve goals!", "kazuiQuote": "Before [Habitica], I was stuck with my thesis, as well as dissatisfied with my personal discipline regarding housework and things like learning vocabulary and studying Go theory. It turns out breaking down these tasks into smaller manageable checklists is quite the thing to keep me motivated and constantly working.", "landingadminlink": "administrative packages", "landingend": "Not convinced yet?", @@ -179,5 +179,13 @@ "businessInquiries": "Business Inquiries", "merchandiseInquiries": "Merchandise Inquiries", "marketingInquiries": "Marketing/Social Media Inquiries", - "tweet": "Tweet" + "tweet": "Tweet", + "apps": "Apps", + "checkOutMobileApps": "Check out our mobile apps!", + "imagine1": "Imagine if improving your life were as fun as playing a game.", + "landingCopy1": "Advance in the game by completing your real-life tasks.", + "landingCopy2": "Battle monsters with friends to stay accountable to your goals.", + "landingCopy3": "Join over <%= userCount %> people having fun as they improve their lives.", + "alreadyHaveAccount": "I already have an account!", + "getStartedNow": "Get Started Now!" } diff --git a/common/locales/en/gear.json b/common/locales/en/gear.json index 5678e4440f..4cac2804d0 100644 --- a/common/locales/en/gear.json +++ b/common/locales/en/gear.json @@ -165,13 +165,19 @@ "weaponArmoireRancherLassoText": "Rancher Lasso", "weaponArmoireRancherLassoNotes": "Lassos: the ideal tool for rounding up and wrangling. Increases Strength by <%= str %>, Perception by <%= per %>, and Intelligence by <%= int %>. Enchanted Armoire: Rancher Set (Item 3 of 3).", "weaponArmoireMythmakerSwordText": "Mythmaker Sword", - "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3)", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Iron Crook", - "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3)", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Gold Wing Staff", "weaponArmoireGoldWingStaffNotes": "The wings on this staff constantly flutter and twist. Increases all attributes by <%= attrs %> each. Enchanted Armoire: Independent Item.", "weaponArmoireBatWandText": "Bat Wand", "weaponArmoireBatWandNotes": "This wand can turn any task into a bat! Wave it about and watch them fly away. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireShepherdsCrookText": "Shepherd's Crook", + "weaponArmoireShepherdsCrookNotes": "Useful for herding gryphons. Increases Constitution by <%= con %>. Enchanted Armoire: Shepherd Set (Item 1 of 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "armor", @@ -245,7 +251,7 @@ "armorSpecialBirthday2015Notes": "Happy Birthday, Habitica! Wear these Silly Party Robes to celebrate this wonderful day. Confers no benefit.", "armorSpecialGaymerxText": "Rainbow Warrior Armor", - "armorSpecialGaymerxNotes": "In celebration of pride season and GaymerX, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGBTQ and gaming and is open to everyone. It takes place at the InterContinental in downtown San Francisco on July 11-13! Confers no benefit.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "Sleek Cat Suit", "armorSpecialSpringRogueNotes": "Impeccably groomed. Increases Perception by <%= per %>. Limited Edition 2014 Spring Gear.", @@ -340,6 +346,8 @@ "armorMystery201508Notes": "Run fast as a flash in the fluffy Cheetah Costume! Confers no benefit. August 2015 Subscriber Item.", "armorMystery201509Text": "Werewolf Costume", "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Steampunk Suit", "armorMystery301404Notes": "Dapper and dashing, wot! Confers no benefit. February 3015 Subscriber Item.", @@ -355,6 +363,12 @@ "armorArmoireHornedIronArmorNotes": "Fiercely hammered from iron, this horned armor is nearly impossible to break. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Horned Iron Set (Item 2 of 3).", "armorArmoirePlagueDoctorOvercoatText": "Plague Doctor Overcoat", "armorArmoirePlagueDoctorOvercoatNotes": "An authentic overcoat worn by the doctors who battle the Plague of Procrastination! Increases Intelligence by <%= int %>, Strength by <%= str %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 3 of 3).", + "armorArmoireShepherdRobesText": "Shepherd Robes", + "armorArmoireShepherdRobesNotes": "The fabric is cool and breathable, perfect for a hot day herding gryphons in the desert. Increases Strength and Perception by <%= attrs %> each. Enchanted Armoire: Shepherd Set (Item 2 of 3).", + "armorArmoireRoyalRobesText": "Royal Robes", + "armorArmoireRoyalRobesNotes": "Wonderful ruler, rule all day long! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 3 of 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "headgear", @@ -491,7 +505,7 @@ "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", "headSpecialGaymerxText": "Rainbow Warrior Helm", - "headSpecialGaymerxNotes": "In celebration of pride season and GaymerX, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGBTQ and gaming and is open to everyone. It takes place at the InterContinental in downtown San Francisco on July 11-13! Confers no benefit.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "Winged Helm", "headMystery201402Notes": "This winged circlet imbues the wearer with the speed of the wind! Confers no benefit. February 2014 Subscriber Item.", @@ -515,6 +529,8 @@ "headMystery201508Notes": "This cozy cheetah hat is very fuzzy! Confers no benefit. August 2015 Subscriber Item.", "headMystery201509Text": "Werewolf Mask", "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 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", @@ -533,7 +549,7 @@ "headArmoireBlueHairbowText": "Blue Hairbow", "headArmoireBlueHairbowNotes": "Become perceptive, tough, and smart while wearing this beautiful Blue Hairbow! Increases Perception by <%= per %>, Constitution by <%= con %>, and Intelligence by <%= int %>. Enchanted Armoire: Independent Item.", "headArmoireRoyalCrownText": "Royal Crown", - "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Royal Set (Item 1 of 3).", "headArmoireGoldenLaurelsText": "Golden Laurels", "headArmoireGoldenLaurelsNotes": "These golden laurels reward those who have conquered bad habits. Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 2 of 3).", "headArmoireHornedIronHelmText": "Horned Iron Helm", @@ -548,6 +564,12 @@ "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", "headArmoireOrangeCatText": "Orange Cat Hat", "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireBlueFloppyHatText": "Blue Floppy Hat", + "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireShepherdHeaddressText": "Shepherd Headdress", + "headArmoireShepherdHeaddressNotes": "Sometimes the gryphons that you herd like to chew on this headdress, but it makes you seem more intelligent nonetheless. Increases Intelligence by <%= int %>. Enchanted Armoire: Shepherd Set (Item 3 of 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "shield-hand item", @@ -647,6 +669,8 @@ "shieldArmoireGladiatorShieldNotes": "To be a gladiator you must.... eh, whatever, just bash them with your shield. Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Gladiator Set (Item 3 of 3).", "shieldArmoireMidnightShieldText": "Midnight Shield", "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "shieldArmoireRoyalCaneText": "Royal Cane", + "shieldArmoireRoyalCaneNotes": "Hooray for the ruler, worthy of song! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 2 of 3).", "back": "Back Accessory", "backBase0Text": "No Back Accessory", @@ -662,6 +686,8 @@ "backMystery201504Notes": "Buzz buzz buzz! Flit from task to task. Confers no benefit. April 2015 Subscriber Item.", "backMystery201507Text": "Rad Surfboard", "backMystery201507Notes": "Surf off the Diligent Docks and ride the waves in Inkomplete Bay! Confers no benefit. July 2015 Subscriber Item.", + "backMystery201510Text": "Goblin Tail", + "backMystery201510Notes": "Prehensile and powerful! Confers no benefit. October 2015 Subscriber Item.", "backSpecialWonderconRedText": "Mighty Cape", "backSpecialWonderconRedNotes": "Swishes with strength and beauty. Confers no benefit. Special Edition Convention Item.", @@ -743,6 +769,8 @@ "headAccessoryMystery201409Notes": "These powerful antlers change colors with the leaves. Confers no benefit. September 2014 Subscriber Item.", "headAccessoryMystery201502Text": "Wings of Thought", "headAccessoryMystery201502Notes": "Let your imagination take flight! Confers no benefit. February 2015 Subscriber Item.", + "headAccessoryMystery201510Text": "Goblin Horns", + "headAccessoryMystery201510Notes": "These fearsome horns are slightly slimy. Confers no benefit. October 2015 Subscriber Item.", "headAccessoryMystery301405Text": "Headwear Goggles", "headAccessoryMystery301405Notes": "\"Goggles are for your eyes,\" they said. \"Nobody wants goggles that you can only wear on your head,\" they said. Hah! You sure showed them! Confers no benefit. August 3015 Subscriber Item.", diff --git a/common/locales/en/generic.json b/common/locales/en/generic.json index f3a13d8775..219f073126 100644 --- a/common/locales/en/generic.json +++ b/common/locales/en/generic.json @@ -28,7 +28,7 @@ "market": "Market", "subscriberItem": "Mystery Item", "newSubscriberItem": "New Mystery Item", - "subscriberItemText": "Each month, subscribers will receive a mystery item. This is usually released about one week before the end of the month. See the wiki's 'Mystery Item' page for the exact date.", + "subscriberItemText": "Each month, subscribers will receive a mystery item. This is usually released about one week before the end of the month. See the wiki's 'Mystery Item' page for more information.", "all": "All", "none": "None", "or": "Or", @@ -69,8 +69,9 @@ "habiticaDayPluralText": "Celebrated <%= number %> Naming Days! Thanks for being a fantastic user.", "achievementDilatory": "Savior of Dilatory", "achievementDilatoryText": "Helped defeat the Dread Drag'on of Dilatory during the 2014 Summer Splash Event!", - "costumeContest": "2014 Costume Contest", - "costumeContestText": "Participated in the 2014 Halloween Costume Contest. See some of the entries at blog.habitica.com/tagged/cosplay!", + "costumeContest": "Costume Contestant", + "costumeContestText": "Participated in the Habitoween Costume Contest. See some of the entries on the Habitica blog!", + "costumeContestTextPlural": "Participated in <%= number %> Habitoween Costume Contests. See some of the entries on the Habitica blog!", "memberSince": "- Member since", "lastLoggedIn": "- Last logged in", "notPorted": "This feature is not yet ported from the original site.", @@ -79,6 +80,7 @@ "errorUpCase": "ERROR:", "newPassSent": "New password sent.", "serverUnreach": "Server currently unreachable.", + "requestError": "Yikes, an error occurred! Please reload the page, your last action may not have been saved correctly.", "seeConsole": "If the error persists, please report it at Help > Report a Bug. If you're familiar with your browser's console, please include any error messages.", "error": "Error", "menu": "Menu", @@ -133,5 +135,17 @@ "thankyou2": "Sending you a thousand thanks.", "thankyou3": "I'm very grateful - thank you!", "thankyouCardAchievementTitle": "Greatly Grateful", - "thankyouCardAchievementText": "Thanks for being thankful! Sent or received <%= cards %> Thank-You cards." + "thankyouCardAchievementText": "Thanks for being thankful! Sent or received <%= cards %> Thank-You cards.", + "streakAchievement": "You earned a streak achievement!", + "firstStreakAchievement": "21-Day Streak", + "streakAchievementCount": "<%= streaks %> 21-Day Streaks", + "twentyOneDays": "You've completed your Daily for 21 days in a row!", + "dontBreakStreak": "Amazing job. Don't break the streak!", + "dontStop": "Don't Stop Now!", + "levelUpShare": "I leveled up in Habitica by improving my real-life habits!", + "questUnlockShare": "I unlocked a new quest in Habitica!", + "hatchPetShare": "I hatched a new pet by completing my real-life tasks!", + "raisePetShare": "I raised a pet into a mount by completing my real-life tasks!", + "wonChallengeShare": "I won a challenge in Habitica!", + "achievementShare": "I earned a new achievement in Habitica!" } diff --git a/common/locales/en/groups.json b/common/locales/en/groups.json index 7ce9f29b41..18092f214d 100644 --- a/common/locales/en/groups.json +++ b/common/locales/en/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "Check Out of Inn", "innCheckIn": "Rest in the Inn", "innText": "You're resting in the Inn! While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day. Be warned: If you are participating in a Boss Quest, the Boss will still damage you for your party mates' missed Dailies unless they are also in the Inn! Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn.", + "innTextBroken": "You're resting in the Inn, I guess... While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day... If you are participating in a Boss Quest, the Boss will still damage you for your party mates' missed Dailies... unless they are also in the Inn... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn... so tired...", "lfgPosts": "Looking for Group (Party Wanted) Posts", "tutorial": "Tutorial", "glossary": "Glossary", @@ -145,6 +146,7 @@ "partyEmpty": "You're the only one in your party. Invite your friends!", "partyChatEmpty": "Your party chat is empty! Type a message in the box above to start chatting.", "guildChatEmpty": "This guild's chat is empty! Type a message in the box above to start chatting.", - "possessiveParty": "<%= name %>'s Party" + "possessiveParty": "<%= name %>'s Party", + "requestAcceptGuidelines": "If you would like to post messages in the Tavern or any party or guild chat, please first read our <%= linkStart %>Community Guidelines<%= linkEnd %> and then click the button below to indicate that you accept them." } diff --git a/common/locales/en/limited.json b/common/locales/en/limited.json index 711355ae22..c5d51954b9 100644 --- a/common/locales/en/limited.json +++ b/common/locales/en/limited.json @@ -21,6 +21,7 @@ "valentineCardAchievementText": "Aww, you and your friend must really care about each other! Sent or received <%= cards %> Valentine's Day cards.", "polarBear": "Polar Bear", "turkey": "Turkey", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "Polar Bear Cub", "jackolantern": "Jack-O-Lantern", "seasonalShop": "Seasonal Shop", @@ -30,6 +31,7 @@ "seasonalShopText": "Welcome to the Seasonal Shop!! We're stocking springtime Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Spring Fling event each year, but we're only open until April 30th, so be sure to stock up now, or you'll have to wait a year to buy these items again!", "seasonalShopSummerText": "Welcome to the Seasonal Shop!! We're stocking summertime Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Summer Splash event each year, but we're only open until July 31st, so be sure to stock up now, or you'll have to wait a year to buy these items again!", "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31, so be sure to stock up now, or you'll have to wait a year to buy these items again!", + "seasonalShopFallTextBroken": "Oh.... Welcome to the Seasonal Shop... We're stocking autumn Seasonal Edition goodies, or something... Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31... I guess you should to stock up now, or you'll have to wait... and wait... and wait... *sigh*", "seasonalShopRebirth": "If you've used the Orb of Rebirth, you can repurchase this equipment in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.", "candycaneSet": "Candy Cane (Mage)", "skiSet": "Ski-sassin (Rogue)", @@ -60,5 +62,6 @@ "witchyWizardSet": "Witchy Wizard (Mage)", "mummyMedicSet": "Mummy Medic (Healer)", "vampireSmiterSet": "Vampire Smiter (Rogue)", - "fallEventAvailability": "Available until October 31" + "fallEventAvailability": "Available until October 31", + "winterEventAvailability": "Available until December 31" } diff --git a/common/locales/en/messages.json b/common/locales/en/messages.json index 6a7bfb6e16..1c8ce5dcd8 100644 --- a/common/locales/en/messages.json +++ b/common/locales/en/messages.json @@ -13,13 +13,14 @@ "messageDontEnjoyFood": "<%= egg %> eats the <%= foodText %> but doesn't seem to enjoy it.", "messageBought": "Bought <%= itemText %>", "messageEquipped": " <%= itemText %> equipped.", - "messageUnEquipped": "<%= itemText %> un-equipped.", + "messageUnEquipped": "<%= itemText %> unequipped.", "messageMissingEggPotion": "You're missing either that egg or that potion", "messageInvalidEggPotionCombo": "You can't hatch Quest Pet Eggs with Magic Hatching Potions! Try a different egg.", "messageAlreadyPet": "You already have that pet. Try hatching a different combination!", "messageHatched": "Your egg hatched! Visit your stable to equip your pet.", "messageNotEnoughGold": "Not Enough Gold", - "messageTwoHandled": "<%= gearText %> is two handed", + "messageTwoHandedEquip": "Wielding <%= twoHandedText %> takes two hands, so <%= offHandedText %> has been unequipped.", + "messageTwoHandedUnequip": "Wielding <%= twoHandedText %> takes two hands, so it was unequipped when you armed yourself with <%= offHandedText %>.", "messageDropFood": "You've found <%= dropArticle %><%= dropText %>! <%= dropNotes %>", "messageDropEgg": "You've found a <%= dropText %> Egg! <%= dropNotes %>", "messageDropPotion": "You've found a <%= dropText %> Hatching Potion! <%= dropNotes %>", @@ -32,5 +33,30 @@ "armoireEquipment": "<%= image %> You found a piece of rare Equipment in the Armoire: <%= dropText %>! Awesome!", "armoireFood": "<%= image %> You rummage in the Armoire and find <%= dropArticle %><%= dropText %>. What's that doing in here?", - "armoireExp": "You wrestle with the Armoire and gain Experience. Take that!" + "armoireExp": "You wrestle with the Armoire and gain Experience. Take that!", + + "messageInsufficientGems": "Not enough gems!", + + "messageAuthPasswordMustMatch": ":password and :confirmPassword don't match", + "messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword required", + "messageAuthUsernameTaken": "Username already taken", + "messageAuthEmailTaken": "Email already taken", + "messageAuthNoUserFound": "No user found.", + "messageAuthMustBeLoggedIn": "You must be logged in.", + "messageAuthMustIncludeTokens": "You must include a token and uid (user id) in your request", + + "messageGroupNotFound": "Group not found or you don't have access.", + "messageGroupAlreadyInParty": "Already in a party, try refreshing.", + "messageGroupOnlyLeaderCanUpdate": "Only the group leader can update the group!", + "messageGroupRequiresInvite": "Can't join a group you're not invited to.", + "messageGroupCannotRemoveSelf": "You cannot remove yourself!", + "messageGroupChatBlankMessage": "You cannot send a blank message", + "messageGroupChatLikeOwnMessage": "Can't like your own message. Don't be that person.", + "messageGroupChatFlagOwnMessage": "Can't report your own message.", + "messageGroupChatFlagAlreadyReported": "You have already reported this message", + "messageGroupChatNotFound": "Message not found!", + "messageGroupChatAdminClearFlagCount": "Only an admin can clear the flag count!", + + "messageUserOperationProtected": "path `<%= operation %>` was not saved, as it's a protected path.", + "messageUserOperationNotFound": "<%= operation %> operation not found" } diff --git a/common/locales/en/noscript.json b/common/locales/en/noscript.json new file mode 100644 index 0000000000..2587821006 --- /dev/null +++ b/common/locales/en/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Alas! Your browser doesn't have JavaScript enabled", + "jsDisabledHeadingFull": "Alas! Your browser doesn't have JavaScript enabled and without it, Habitica can't work properly", + "jsDisabledText": "Habitica can't properly display the site without it!", + "jsDisabledLink": "Please enable JavaScript to continue!" +} diff --git a/common/locales/en/npc.json b/common/locales/en/npc.json index 1fdf833af1..f03a253de3 100644 --- a/common/locales/en/npc.json +++ b/common/locales/en/npc.json @@ -7,11 +7,14 @@ "daniel": "Daniel", "danielText": "Welcome to the Tavern! Stay a while and meet the locals. If you need to rest (vacation? illness?), I'll set you up at the Inn. While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off.", "danielText2": "Be warned: 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.", + "danielTextBroken": "Welcome to the Tavern... I guess... If you need to rest, I'll set you up at the Inn... While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off... if you have the energy...", + "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.", - "sellForGold": "Sell <%= item %> for <%= gold %> Gold", - "sellEggForGold": "Sell <%= itemType %> Egg for <%= gold %> Gold", - "sellPotionForGold": "Sell <%= itemType %> Potion for <%= gold %> Gold", + "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?", + "sellForGold": "Sell it for <%= gold %> Gold", "buyGems": "Buy Gems", "justin": "Justin", "ian": "Ian", diff --git a/common/locales/en/overview.json b/common/locales/en/overview.json new file mode 100644 index 0000000000..5cae0afa4f --- /dev/null +++ b/common/locales/en/overview.json @@ -0,0 +1,14 @@ +{ + "needTips": "Need some tips on how to begin? Here's a straightforward guide!", + + "step1": "Step 1: Enter Tasks", + "webStep1Text": "Habitica is nothing without real-world goals, so enter a few tasks. You can add more later as you think of them!

\n * **Set up [To-Dos](http://habitica.wikia.com/wiki/To-Dos):**\n\n Enter tasks you do once or rarely in the To-Dos column, one at a time. You can click the pencil to edit them and add checklists, due dates, and more!

\n * **Set up [Dailies](http://habitica.wikia.com/wiki/Dailies):**\n\n Enter activities you need to do daily or on a particular day of the week in the Dailies column. Click the item's pencil icon to 'edit' the day(s) of the week it will be due. You can also make it due on a repeating basis, for example, every 3 days.

\n * **Set up [Habits](http://habitica.wikia.com/wiki/Habits):**\n\n Enter habits you want to establish in the Habits column. You can edit the Habit to change it to just a good habit or a bad habit .

\n * **Set up [Rewards](http://habitica.wikia.com/wiki/Rewards):**\n\n In addition to the in-game Rewards offered, add activities or treats which you want to use as a motivation to the Rewards column. It's important to give yourself a break or allow some indulgence in moderation!

If you need inspiration for which tasks to add, you can look at the wiki's pages on [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits), [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies), [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos), and [Sample Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards).", + + "step2": "Step 2: Gain Points by Doing Things in Real Life", + "webStep2Text": "Now, start tackling your goals from the list! As you complete tasks and check them off in Habitica, you will gain [Experience](http://habitica.wikia.com/wiki/Experience_Points), which helps you level up, and [Gold](http://habitica.wikia.com/wiki/Gold_Points), which allows you to purchase Rewards. If you fall into bad habits or miss your Dailies, you will lose [Health](http://habitica.wikia.com/wiki/Health_Points). In that way, the Habitica Experience and Health bars serve as a fun indicator of your progress toward your goals. You'll start seeing your real life improve as your character advances in the game.", + + "step3": "Step 3: Customize and Explore Habitica", + "webStep3Text": "Once you're familiar with the basics, you can get even more out of Habitica with these nifty features:\n * Organize your tasks with [tags](http://habitica.wikia.com/wiki/Tags) (edit a task to add them).\n * Customize your [avatar](http://habitica.wikia.com/wiki/Avatar) under [User > Avatar](/#/options/profile/avatar).\n * Buy your [equipment](http://habitica.wikia.com/wiki/Equipment) under Rewards and change it under [Inventory > Equipment](/#/options/inventory/equipment).\n * Connect with other users via the [Tavern](http://habitica.wikia.com/wiki/Tavern).\n * Starting at Level 3, hatch [pets](http://habitica.wikia.com/wiki/Pets) by collecting [eggs](http://habitica.wikia.com/wiki/Eggs) and [hatching potions](http://habitica.wikia.com/wiki/Hatching_Potions). [Feed](http://habitica.wikia.com/wiki/Food) them to create [mounts](http://habitica.wikia.com/wiki/Mounts).\n * At level 10: Choose a particular [class](http://habitica.wikia.com/wiki/Class_System) and then use class-specific [skills](http://habitica.wikia.com/wiki/Skills) (levels 11 to 14).\n * Form a party with your friends under [Social > Party](/#/options/groups/party) to stay accountable and earn a Quest scroll.\n * Defeat monsters and collect objects on [quests](http://habitica.wikia.com/wiki/Quests) (you will be given a quest at level 15).", + + "overviewQuestions": "Have questions? Check out the [FAQ](https://habitica.com/static/faq/)! If your question isn't mentioned there, you can ask for further help in the [Newbies Guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a).\n\nGood luck with your tasks!" +} diff --git a/common/locales/en/pets.json b/common/locales/en/pets.json index 3dfd475547..5efc19d8bc 100644 --- a/common/locales/en/pets.json +++ b/common/locales/en/pets.json @@ -58,8 +58,16 @@ "firstDrop": "You've unlocked the Drop System! Now when you complete tasks, you have a small chance of finding an item, including eggs, potions, and food! You just found a <%= eggText %> Egg! <%= eggNotes %>", "useGems": "If you've got your eye on a pet, but can't wait any longer for it to drop, use Gems in Inventory > Market to buy one!", "hatchAPot": "Hatch a <%= potion %> <%= egg %>?", + "hatchedPet": "You hatched a <%= potion %> <%= egg %>!", + "displayNow": "Display Now", + "displayLater": "Display Later", + "earnedCompanion": "With all your productivity, you've earned a new companion. Feed it to make it grow!", "feedPet": "Feed <%= article %><%= text %> to your <%= name %>?", "useSaddle": "Saddle <%= pet %>?", + "raisedPet": "You grew a <%= pet %>!", + "earnedSteed": "By completing your tasks, you've earned a faithful steed!", + "rideNow": "Ride Now", + "rideLater": "Ride Later", "petName": "<%= potion %> <%= egg %>", "mountName": "<%= potion %> <%= mount %>", "petKeyName": "Key to the Kennels", diff --git a/common/locales/en/quests.json b/common/locales/en/quests.json index f532544af3..7b3fe7af43 100644 --- a/common/locales/en/quests.json +++ b/common/locales/en/quests.json @@ -76,5 +76,7 @@ "startAQuest": "START A QUEST", "startQuest": "Start Quest", "whichQuestStart": "Which quest do you want to start?", - "getMoreQuests": "Get more quests" + "getMoreQuests": "Get more quests", + "unlockedAQuest": "You unlocked a quest!", + "leveledUpReceivedQuest": "You leveled up to Level <%= level %> and received a quest scroll!" } diff --git a/common/locales/en/questsContent.json b/common/locales/en/questsContent.json index 53da438386..8bac29a5b5 100644 --- a/common/locales/en/questsContent.json +++ b/common/locales/en/questsContent.json @@ -304,5 +304,19 @@ "questBurnoutDropPhoenixMount": "Phoenix (Mount)", "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!", + + "questFrogText": "Swamp of the Clutter Frog", + "questFrogNotes": "As you and your friends are slogging through the Swamps of Stagnation, @starsystemic points at a large sign. \"Stay on the path -- if you can.\"

\"Surely that isn't hard!\" @RosemonkeyCT says. \"It's broad and clear.\"

But as you continue, you notice that path is gradually overtaken by the muck of the swamp, laced with bits of strange blue debris and clutter, until it's impossible to proceed.

As you look around, wondering how it got this messy, @Jon Arjinborn shouts, \"Look out!\" An angry frog leaps from the sludge, clad in dirty laundry and lit by blue fire. You will have to overcome this poisonous Clutter Frog to progress!", + "questFrogCompletion": "The frog cowers back into the muck, defeated. As it slinks away, the blue slime fades, leaving the way ahead clear.

Sitting in the middle of the path are three pristine eggs. \"You can even see the tiny tadpoles and through the clear casing!\" @Breadstrings says. \"Here, you should take them.\"", + "questFrogBoss": "Clutter Frog", + "questFrogDropFrogEgg": "Frog (Egg)", + "questFrogUnlockText": "Unlocks purchasable Frog eggs in the Market", + + "questSnakeText": "The Serpent of Distraction", + "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveler astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", + "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", + "questSnakeBoss": "Serpent of Distraction", + "questSnakeDropSnakeEgg": "Snake (Egg)", + "questSnakeUnlockText": "Unlocks purchasable Snake eggs in the Market" } diff --git a/common/locales/en/rebirth.json b/common/locales/en/rebirth.json index becadbefe5..9e450f78f4 100644 --- a/common/locales/en/rebirth.json +++ b/common/locales/en/rebirth.json @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "You also earn an Achievement for beginning a new adventure!", "beReborn": "Be Reborn", "rebirthAchievement": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is <%= level %>. To stack this Achievement, begin your next new adventure when you've reached an even higher Level!", + "rebirthAchievement100": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is 100 or higher. To stack this Achievement, begin your next new adventure when you've reached at least 100!", "rebirthBegan": "Began a New Adventure", "rebirthText": "Began <%= rebirths %> New Adventures", "rebirthOrb": "Used an Orb of Rebirth to start over after attaining Level", + "rebirthOrb100": "Used an Orb of Rebirth to start over after attaining Level 100 or higher", "rebirthPop": "Begin a new character at Level 1 while retaining achievements, collectibles, and tasks with history.", "rebirthName": "Orb of Rebirth", "reborn": "Reborn, max level <%= reLevel %>" diff --git a/common/locales/en/settings.json b/common/locales/en/settings.json index 10026384f6..c1d467aefd 100644 --- a/common/locales/en/settings.json +++ b/common/locales/en/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "With this option set, the list of task tags will be hidden when you first open a task for editing.", "startAdvCollapsed": "Advanced Options in tasks start collapsed", "startAdvCollapsedPop": "With this option set, Advanced Options will be hidden when you first open a task for editing.", + "dontShowAgain": "Don't show this again", + "suppressLevelUpModal": "Don't show popup when gaining a level", + "suppressHatchPetModal": "Don't show popup when hatching a pet", + "suppressRaisePetModal": "Don't show popup when raising a pet into a mount", + "suppressStreakModal": "Don't show popup when attaining a Streak achievement", "showTour": "Show Tour", "restartTour": "Restart the introductory tour from when you first joined Habitica.", "showBailey": "Show Bailey", @@ -81,7 +86,6 @@ "emailChange1": "To change your email address, please send an email to", "emailChange2": "admin@habitica.com", "emailChange3": " including both your old and new email address as well as your User ID.", - "username": "Login Name", "usernameOrEmail": "Login Name or Email", "email": "Email", "registeredWithFb": "Registered with Facebook", @@ -89,7 +93,7 @@ "loginNameDescription2": "User->Profile", "loginNameDescription3": "to change the name that appears in your avatar and chat messages.", "emailNotifications": "Email Notifications", - "wonChallenge": "You Won a Challenge", + "wonChallenge": "You won a Challenge!", "newPM": "Received Private Message", "giftedGems": "Gifted Gems", "giftedGemsInfo": "<%= amount %> Gems - by <%= name %>", @@ -119,5 +123,29 @@ "promoCodeApplied": "Promo Code Applied! Check your inventory", "promoPlaceholder": "Enter Promotion Code", "couponText": "We sometimes have events and give out coupon codes for special gear. (eg, those who stop by our Wondercon booth)", - "displayInviteToPartyWhenPartyIs1": "Display Invite To Party button when party has 1 member." + "displayInviteToPartyWhenPartyIs1": "Display Invite To Party button when party has 1 member.", + "saveCustomDayStart": "Save Custom Day Start", + "registration": "Registration", + "addLocalAuth": "Add local authentication:", + "generateCodes": "Generate Codes", + "generate": "Generate", + "getCodes": "Get Codes", + "webhooks": "Webhooks", + "enabled": "Enabled", + "webhookURL": "Webhook URL", + "add": "Add", + "buyGemsGoldCap": "Cap raised to <%= amount %>", + "mysticHourglass": "<%= amount %> Mystic Hourglass", + "mysticHourglassText": "Mystic Hourglasses allow purchasing a previous month's Mystery Item set.", + "purchasedPlanId": "Recurring $<%= price %> each <%= months %> Month(s) (<%= plan %>)", + "purchasedPlanExtraMonths": "You have <%= months %> months of subscription credit.", + "consecutiveSubscription": "Consecutive Subscription", + "consecutiveMonths": "Consecutive Months:", + "gemCapExtra": "Gem Cap Extra:", + "mysticHourglasses": "Mystic Hourglasses:", + "paypal": "PayPal", + "amazonPayments": "Amazon Payments", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } diff --git a/common/locales/en/subscriber.json b/common/locales/en/subscriber.json index 44f5a3f692..7d585c0531 100644 --- a/common/locales/en/subscriber.json +++ b/common/locales/en/subscriber.json @@ -60,7 +60,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.", - "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 <%= linkStart %>here<%= linkEnd %>! If those don't satisfy you, perhaps you'd be interested in one of our fashionably futuristic Steampunk Item Sets?", + "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!", "subUpdateCard": "Update Card", diff --git a/common/locales/en/tasks.json b/common/locales/en/tasks.json index f40797789b..66cca5774f 100644 --- a/common/locales/en/tasks.json +++ b/common/locales/en/tasks.json @@ -54,7 +54,7 @@ "complete": "Done", "dated": "Dated", "due": "Due", - "notDue": "Not Due", + "notDue": "Not Due", "grey": "Grey", "score": "Score", "rewards": "Rewards", @@ -88,8 +88,7 @@ "fortifyText": "Fortify will return all your tasks to a neutral (yellow) state, as if you'd just added them, and top your Health off to full. This is great if all your red tasks are making the game too hard, or all your blue tasks are making the game too easy. If starting fresh sounds much more motivating, spend the Gems and catch a reprieve!", "sureDelete": "Are you sure you want to delete this task?", "streakCoins": "Streak Bonus!", - "pushTaskToTop": "Push task to top", - "pushTaskToBottom": "Push task to bottom", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "Enter the task's title first.", "dailiesRestingInInn": "You're Resting in the Inn! Your Dailies will NOT hurt you tonight, but they WILL still refresh every day. If you're in a quest, you won't deal damage/collect items until you check out of the Inn, but you can still be injured by a Boss if your Party mates skip their own Dailies.", "habitHelp1": "Good Habits are things that you do often. They award Gold and Experience every time you click the <%= plusIcon %>.", diff --git a/common/locales/en@pirate/backgrounds.json b/common/locales/en@pirate/backgrounds.json index 8649674703..c677633e9c 100644 --- a/common/locales/en@pirate/backgrounds.json +++ b/common/locales/en@pirate/backgrounds.json @@ -106,17 +106,31 @@ "backgroundTwinklyPartyLightsText": "Twinkly Party Lights", "backgroundTwinklyPartyLightsNotes": "Dance under Twinkly Party Lights!", "backgrounds092015": "SET 16: Released September 2015", - "backgroundMarketText": "Habitica Market", - "backgroundMarketNotes": "Shop in the Habitica Market.", - "backgroundStableText": "Habitica Stable", - "backgroundStableNotes": "Tend mounts in the Habitica Stable.", - "backgroundTavernText": "Habitica Tavern", - "backgroundTavernNotes": "Visit the Habitica Tavern.", + "backgroundMarketText": "Ye Olde Habitica Marketplace", + "backgroundMarketNotes": "Get shoppin' in Ye Olde Habitica Marketplace.", + "backgroundStableText": "Ye Olde Habitica Stable", + "backgroundStableNotes": "Care for ye 'orses in Ye Olde Habitica Stable", + "backgroundTavernText": "Ye Olde Habitica Tavern", + "backgroundTavernNotes": "Get plundered in Ye Olde Habitica Tavern.", "backgrounds102015": "SET 17: Released October 2015", - "backgroundHarvestMoonText": "Harvest Moon", - "backgroundHarvestMoonNotes": "Cackle under the Harvest Moon.", - "backgroundSlimySwampText": "Slimy Swamp", - "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", + "backgroundHarvestMoonText": "'Arvest Moon", + "backgroundHarvestMoonNotes": "Laugh ya head off below the 'Arvest Moon", + "backgroundSlimySwampText": "Sticky Swamp", + "backgroundSlimySwampNotes": "Be wadin' through a Sticky Swamp", "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness.", + "backgrounds112015": "SET 18: Released November 2015", + "backgroundFloatingIslandsText": "Floating Islands", + "backgroundFloatingIslandsNotes": "Hop across the Floating Islands.", + "backgroundNightDunesText": "Night Dunes", + "backgroundNightDunesNotes": "Walk peacefully through the Night Dunes.", + "backgroundSunsetOasisText": "Sunset Oasis", + "backgroundSunsetOasisNotes": "Bask in the Sunset Oasis.", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/en@pirate/challenge.json b/common/locales/en@pirate/challenge.json index 77e83b5bc7..28d12939fd 100644 --- a/common/locales/en@pirate/challenge.json +++ b/common/locales/en@pirate/challenge.json @@ -43,8 +43,8 @@ "exportChallengeCSV": "Export to CSV", "selectGroup": "Please select group", "challengeCreated": "Challenge created", - "sureDelCha": "Are you sure you want to delete this challenge?", - "sureDelChaTavern": "Are you sure you want to delete this challenge? Your gems will not be refunded.", + "sureDelCha": "Arrr ye sure ye want t' delete this challenge?", + "sureDelChaTavern": "Are you sure you want to delete this challenge? Yer sapphires'll be plundered if ye do. ", "removeTasks": "Remove Tasks", "keepTasks": "Keep Tasks", "closeCha": "Close challenge an'...", @@ -59,5 +59,9 @@ "challengeNotEnoughGems": "Ye do not have enough sapphires to post this challenge.", "noPermissionEditChallenge": "You don't have permissions to edit this challenge", "noPermissionDeleteChallenge": "You don't have permissions to delete this challenge", - "noPermissionCloseChallenge": "You don't have permissions to close this challenge" + "noPermissionCloseChallenge": "You don't have permissions to close this challenge", + "congratulations": "Congratulations!", + "hurray": "Hurray!", + "noChallengeOwner": "no owner", + "noChallengeOwnerPopover": "This challenge does not have an owner because the person who created the challenge deleted their account." } \ No newline at end of file diff --git a/common/locales/en@pirate/character.json b/common/locales/en@pirate/character.json index 3ca823f20c..232d2697ad 100644 --- a/common/locales/en@pirate/character.json +++ b/common/locales/en@pirate/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "Class Bonus", "battleGear": "Battle Gear", "battleGearText": "This be th' gear ye wear into battle; it affects numbers when interactin' with ye tasks.", + "autoEquipBattleGear": "Auto-equip new gear", "costume": "Costume", "costumeText": "If ye prefer th' look 'o other gear to what ye have equipped, check th' \"Use Costume\" box to visually don a costume while wearin' ye battle gear underneath.", "useCostume": "Use Costume", @@ -64,6 +65,10 @@ "ultimGearText": "Has upgraded to th' maximum weapon 'n armor set for yee followin' classes", "level": "Level", "levelUp": "Level Up!", + "gainedLevel": "You gained a level!", + "leveledUp": "By accomplishing your real-life goals, you've grown to Level <%= level %>!", + "fullyHealed": "You have been fully healed!", + "huzzah": "Huzzah!", "mana": "Mana", "hp": "HP", "mp": "MP", diff --git a/common/locales/en@pirate/content.json b/common/locales/en@pirate/content.json index fc561ae617..42294ea9ee 100644 --- a/common/locales/en@pirate/content.json +++ b/common/locales/en@pirate/content.json @@ -95,6 +95,12 @@ "questEggHorseText": "Horse", "questEggHorseMountText": "Horse", "questEggHorseAdjective": "a galloping", + "questEggFrogText": "Frog", + "questEggFrogMountText": "Frog", + "questEggFrogAdjective": "a princely", + "questEggSnakeText": "Snake", + "questEggSnakeMountText": "Snake", + "questEggSnakeAdjective": "a slithering", "eggNotes": "Find a hatching potion to pour on this egg, and it will hatch into <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "Base", "hatchingPotionWhite": "White", diff --git a/common/locales/en@pirate/contrib.json b/common/locales/en@pirate/contrib.json index 87b64fc4ff..038ed83b21 100644 --- a/common/locales/en@pirate/contrib.json +++ b/common/locales/en@pirate/contrib.json @@ -1,15 +1,15 @@ { "friend": "Bucko", "friendFirst": "When yer first set o' submissions be deployed, ye will receive th' Habitica Contributor's badge. Yer name in Tavern chat will proudly display that ye be a contributor. As a bounty for yer work, ye will also receive 3 Sapphires.", - "friendSecond": "When ye fourth set 'o submissions be deployed, th' Crystal Sword gunna be available fer purchase in th' Rewards shop. As a bounty fer ye continued work, ye gunna also receive 3 Sapphires.", + "friendSecond": "When ye second set 'o submissions be deployed, th' Crystal Armor gunna be available fer purchase in th' Rewards shop. As a bounty fer ye continued work, ye gunna also receive 3 Sapphires.", "elite": "Boatswain", - "eliteThird": "When ye fifth set 'o submissions be deployed, th' Crystal Shield gunna be available fer purchase in th' Rewards shop. As a bounty fer ye continued work, ye gunna also receive 3 Sapphires.", - "eliteFourth": "When ye fifth set 'o submissions be deployed, th' Crystal Shield gunna be available fer purchase in th' Rewards shop. As a bounty fer ye continued work, ye gunna also receive 4 Sapphires.", + "eliteThird": "When ye third set 'o submissions be deployed, th' Crystal Helmet gunna be available fer purchase in th' Rewards shop. As a bounty fer ye continued work, ye gunna also receive 3 Sapphires.", + "eliteFourth": "When ye fourth set 'o submissions be deployed, th' Crystal Sword gunna be available fer purchase in th' Rewards shop. As a bounty fer ye continued work, ye gunna also receive 4 Sapphires.", "champion": "Quartermaster", - "championFifth": "When ye fourth set 'o submissions be deployed, th' Crystal Sword gunna be available fer purchase in th' Rewards shop. As a bounty fer ye continued work, ye gunna also receive 4 Sapphires.", - "championSixth": "When yer fifth set 'o submissions be deployed, th' Crystal Shield gunna be available fer purchase in th' Rewards shop. As a bounty fer ye continued work, ye gunna also receive 4 Sapphires.", + "championFifth": "When ye fifth set 'o submissions be deployed, th' Crystal Shield gunna be available fer purchase in th' Rewards shop. As a bounty fer ye continued work, ye gunna also receive 4 Sapphires.", + "championSixth": "When yer sixth set 'o submissions be deployed, ye gunna receive a Hydra Pet. Ye gunna also receive 4 Sapphires.", "legendary": "Captain", - "legSeventh": "When yer seventh set o' submissions be deployed, you will receive 4 Sapphiresan' become a member o' t' honored Contributor's Guild an' be privy t' th' behind-the-scenes details o' Habitica! Further contributions do not increase your tier, but you may continue t' earn Sapphire bounties and titles.", + "legSeventh": "When yer seventh set o' submissions be deployed, ye gunna receive 4 Sapphiresan' become a member o' t' honored Contributor's Guild an' be privy t' th' behind-the-scenes details o' Habitica! Further contributions do not increase yer tier, but ye may continue t' earn Sapphire bounties and titles.", "moderator": "Seadog", "guardian": "Flibustier", "guardianText": "There be also a couple 'a Moderators assistin' the staff members. They be wise fellows, so respect and heed 'em or else!", diff --git a/common/locales/en@pirate/death.json b/common/locales/en@pirate/death.json index a93decc2c9..82eb18c423 100644 --- a/common/locales/en@pirate/death.json +++ b/common/locales/en@pirate/death.json @@ -3,5 +3,14 @@ "dontDespair": "Don't despair!", "deathPenaltyDetails": "Ye lost a Level, yer Gold, an' a piece o' Equipment, but ye can get 'em all back with hard work! Good luck--ye'll do great.", "refillHealthTryAgain": "Refill Health & Try Again", - "dyingOftenTips": "Do this be happenin' often? Here be some tips!" + "dyingOftenTips": "Do this be happenin' often? Here be some tips!", + "losingHealthWarning": "Careful - You're Losing Health!", + "losingHealthWarning2": "Don't let your Health drop to zero! If you do, you'll lose a level, your Gold, and a piece of equipment.", + "toRegainHealth": "T' regain Health:", + "lowHealthTips1": "Level up to fully heal!", + "lowHealthTips2": "Buy a Health Potion from the Rewards column to restore 15 Health Points.", + "losingHealthQuickly": "Losin' Health quickly?", + "lowHealthTips3": "Incomplete Dailies hurt you overnight, so be careful not to add too many at first!", + "lowHealthTips4": "If a Daily isn't due on a certain day, you can disable it by clicking the pencil icon.", + "goodLuck": "Best o' luck!" } \ No newline at end of file diff --git a/common/locales/en@pirate/faq.json b/common/locales/en@pirate/faq.json index 9d780201ca..3c7dd0f073 100644 --- a/common/locales/en@pirate/faq.json +++ b/common/locales/en@pirate/faq.json @@ -2,11 +2,11 @@ "frequentlyAskedQuestions": "Frequently Asked Riddles", "faqQuestion0": "I be confused. Where do I get an o'erview?", "iosFaqAnswer0": "First, ye'll set up tasks that ye wants t' do in yer everyday life. Then, as ye complete th' tasks in real life 'n check them off, ye'll earn experience 'n gold. Gold be used t' buy equipment 'n some items, as well as custom rewards. Experience causes yer character t' level up 'n unlock content such as Pets, Skills, 'n Quests! Ye can customize yer character under Menu > Customize Avatar. Some basic ways t' interact: jab th' (+) in th' upper-right-hand corner t' add a new task. Tap on an existin' task t' edit it, 'n swipe left on a task t' scuttle it. Ye can sort tasks usin' Tags in th' upper-left-hand corner, 'n expand 'n contract checklists by jabbin' on th' checklist bubble.", - "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, the wiki has an excellent step-by-step overview of the game [right here](http://habitica.wikia.com/wiki/Habitica_Wiki).", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", "faqQuestion1": "How do I set up my tasks?", "iosFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.", "webFaqAnswer1": "Good Habits (the ones with a ) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a ) are tasks that you should avoid, like biting nails. Habits with a and a have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n

\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n

\n To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.", - "faqQuestion2": "What are some sample tasks?", + "faqQuestion2": "What be some sample tasks?", "iosFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n

\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", "webFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", "faqQuestion3": "Why do my tasks change color?", @@ -16,7 +16,7 @@ "iosFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you tap a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your Party and one of your Party mates did not complete all their Dailies, the Boss will attack you.\n\n The main way to heal is to gain a level, which restores all your health. You can also buy a Health Potion with gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a Party with a Healer, they can heal you as well.", "webFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you click a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your party and one of your party mates did not complete all their Dailies, the Boss will attack you.\n

\n The main way to heal is to gain a level, which restores all your Health. You can also buy a Health Potion with Gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a party (under Social > Party) with a Healer, they can heal you as well.", "faqQuestion5": "How do I play Habitica with my friends?", - "iosFaqAnswer5": "The best way is to invite them to a Party with you, via the [website](https://habitica.com/#/options/groups/party)! We'll add the ability to create a Party from this app soon, but in the meantime you can use the [website](https://habitica.com/#/options/groups/party). Parties can go on quests, battle monsters, and cast skills to support each other. On the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", + "iosFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on quests, battle monsters, and cast skills to support each other. Go to Menu > Party and click \"Create New Party\" if you don't already have a Party. Then tap on the Members list, and tap Invite in the upper right-hand corner to invite your friends by entering their User ID (a string of numbers and letters that they can find under Settings > Account Details on the app, and Settings > API on the website). On the website, you can also invite friends via email, which we will add to the app in a future update.\n\nOn the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", "webFaqAnswer5": "The best way is to invite them to a party with you, under Social > Party! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n

\n For more detailed info, check out the wiki pages on [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).", "faqQuestion6": "How do I get a Pet or Mount?", "iosFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch Egg.\" Then choose a hatching potion to determine its color! Go to Menu > Pets to equip your new Pet to your avatar by clicking on it. \n\n You can also grow your Pets into Mounts by feeding them under Menu > Pets. Tap on a Pet, and then select \"Feed Pet\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Menu > Mounts and tap on it to equip it to your avatar.\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", @@ -28,14 +28,17 @@ "iosFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Use Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in a special section in the Rewards Column. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You’ll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "faqQuestion9": "How do I fight monsters and go on Quests?", - "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party on the [website](https://habitica.com/#/options/groups/party), you'll be rewarded with the Basi-List Scroll! (We will add this feature to the app in a future update.)\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for gold and gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", + "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for Gold and Gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "webFaqAnswer9": "First, you need to join or start a party (under Social > Party). Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n

\n Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are three ways to get a scroll:\n

\n * When you invite people to your party, you’ll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Page (Inventory > Quests) for Gold and Gems.\n

\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your party at the same time that you damage the Boss.\n

\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "faqQuestion10": "What are gems, and how do I get them?", + "faqQuestion10": "What are Gems, and how do I get them?", "iosFaqAnswer10": "Gems are purchased with real money by tapping on the gem icon in the header. When people buy gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying gems directly, there are three other ways players can gain gems:\n\n * Win a Challenge on the [website](https://habitica.com) that has been set up by another player under Social > Challenges. (We will be adding Challenges to the app in a future update!)\n * Subscribe on the [website](https://habitica.com/#/options/settings/subscription) and unlock the ability to buy a certain number of gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with gems do not offer any statistical advantages, so players can still make use of the app without them!", "webFaqAnswer10": "Gems are [purchased with real money](https://habitica.com/#/options/settings/subscription), although [subscribers](https://habitica.com/#/options/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n

\n In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n

\n * Win a Challenge that has been set up by another player under Social > Challenges.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", "faqQuestion11": "How do I report a bug or request a feature?", "iosFaqAnswer11": "You can report a bug, request a feature, or send feedback under Menu > Report a Bug and Menu > Send Feedback! We'll do everything we can to assist you.", "webFaqAnswer11": "Bug reports are collected on GitHub. Go to [Help > Report a Bug](https://github.com/HabitRPG/habitrpg/issues/2760) and follow the instructions. Don't worry, we'll get you fixed up soon!\n

\n Feature requests are collected on Trello. Go to [Help > Request a Feature](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) and follow the instructions. Ta-da!", + "faqQuestion12": "How do I battle a World Boss?", + "iosFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", + "webFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n

\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n

\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n

\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", "iosFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the Tavern chat under Menu > Tavern! We're happy to help.", "webFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the [Newbies Guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help." } \ No newline at end of file diff --git a/common/locales/en@pirate/front.json b/common/locales/en@pirate/front.json index b87d5d5d35..582f68f9df 100644 --- a/common/locales/en@pirate/front.json +++ b/common/locales/en@pirate/front.json @@ -74,7 +74,7 @@ "infhQuote": "[Habitica] has really helped me impart structure to my life in graduate school.", "invalidEmail": "Arr, we need yer email before we can reset yer password, matey!", "irishfeet123Quote": "I've had horrible habits with clearing my place completely after meals and leaving cups all over the place. [Habitica] has cured that!", - "joinOthers": "Join 250,000 people makin' it fun t' achieve goals!", + "joinOthers": "Join <%= userCount %> people making it fun to achieve goals!", "kazuiQuote": "Before [Habitica], I was stuck with my thesis, as well as dissatisfied with my personal discipline regarding housework and things like learning vocabulary and studying Go theory. It turns out breaking down these tasks into smaller manageable checklists is quite the thing to keep me motivated and constantly working.", "landingadminlink": "administrative packages", "landingend": "Haven't reeled ye in yet?", @@ -179,5 +179,14 @@ "businessInquiries": "Business Inquiries", "merchandiseInquiries": "Merchandise Inquiries", "marketingInquiries": "Marketing/Social Media Inquiries", - "tweet": "Tweet" + "tweet": "Tweet", + "apps": "Apps", + "notifyAndroidApp": "Want us to notify you when the Android app is ready? Sign up for this mailing list!", + "checkOutIOSApp": "Check out our new iOS App!", + "imagine1": "Imagine if improving your life were as fun as playing a game.", + "landingCopy1": "Advance in the game by completing your real-life tasks.", + "landingCopy2": "Battle monsters with friends to stay accountable to your goals.", + "landingCopy3": "Join over <%= userCount %> people having fun as they improve their lives.", + "alreadyHaveAccount": "I already have an account!", + "getStartedNow": "Get Started Now!" } \ No newline at end of file diff --git a/common/locales/en@pirate/gear.json b/common/locales/en@pirate/gear.json index d16211070b..bab74dbed0 100644 --- a/common/locales/en@pirate/gear.json +++ b/common/locales/en@pirate/gear.json @@ -149,13 +149,19 @@ "weaponArmoireRancherLassoText": "Rancher Lasso", "weaponArmoireRancherLassoNotes": "Lassos: the ideal tool for rounding up and wrangling. Increases Strength by <%= str %>, Perception by <%= per %>, and Intelligence by <%= int %>. Enchanted Armoire: Rancher Set (Item 3 of 3).", "weaponArmoireMythmakerSwordText": "Mythmaker Sword", - "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception an' Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 o' 3)", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Iron Crook", - "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook be good at herding sheep. Increases Perception an' Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 o' 3)", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Gold Wing Staff", "weaponArmoireGoldWingStaffNotes": "The wings on this staff constantly flutter and twist. Increases all attributes by <%= attrs %> each. Enchanted Armoire: Independent Item.", "weaponArmoireBatWandText": "Bat Wand", "weaponArmoireBatWandNotes": "This wand can turn any task into a bat! Wave it about and watch them fly away. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireShepherdsCrookText": "Shepherd's Crook", + "weaponArmoireShepherdsCrookNotes": "Useful for herding gryphons. Increases Constitution by <%= con %>. Enchanted Armoire: Shepherd Set (Item 1 of 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "armor", "armorBase0Text": "Plain Slops", "armorBase0Notes": "Ordinary slops. Don't benefit ye.", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "Silly Party Robes", "armorSpecialBirthday2015Notes": "Happy Birthday, Habitica! Wear these Silly Party Robes t' celebrate this wonderful day. Don't benefit ye.", "armorSpecialGaymerxText": "Rainbow Warrior Armor", - "armorSpecialGaymerxNotes": "In celebration o' pride season an' GaymerX, this special armor be decorated with a radiant, colorful rainbow pattern! GaymerX be a game convention celebratin' LGBTQ and gamin' an' be open t' everyone. It takes place at th' InterContinental in downtown San Francisco on July 11-13! Don't benefit ye.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "Sleek Cat Suit", "armorSpecialSpringRogueNotes": "Impeccably groomed. Increases Perception by <%= per %>. Limited Edition 2014 Spring Gear.", "armorSpecialSpringWarriorText": "Clover-steel Armor", @@ -307,6 +313,8 @@ "armorMystery201508Notes": "Run fast as a flash in the fluffy Cheetah Costume! Confers no benefit. August 2015 Subscriber Item.", "armorMystery201509Text": "Werewolf Costume", "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Steampunk Suit", "armorMystery301404Notes": "Dapper an' dashing, wot! Don't benefit ye. February 3015 Subscriber Item.", "armorArmoireLunarArmorText": "Soothin' Lunar Armor", @@ -321,6 +329,12 @@ "armorArmoireHornedIronArmorNotes": "Fiercely hammered from iron, this horned armor be nearly impossible t' break. Increases Constitution by <%= con %> an' Perception by <%= per %>. Enchanted Armoire: Horned Iron Set (Item 2 o' 3).", "armorArmoirePlagueDoctorOvercoatText": "Plague Doctor Overcoat", "armorArmoirePlagueDoctorOvercoatNotes": "An authentic overcoat worn by the doctors who battle the Plague of Procrastination! Increases Intelligence by <%= int %>, Strength by <%= str %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 3 of 3).", + "armorArmoireShepherdRobesText": "Shepherd Robes", + "armorArmoireShepherdRobesNotes": "The fabric is cool and breathable, perfect for a hot day herding gryphons in the desert. Increases Strength and Perception by <%= attrs %> each. Enchanted Armoire: Shepherd Set (Item 2 of 3).", + "armorArmoireRoyalRobesText": "Royal Robes", + "armorArmoireRoyalRobesNotes": "Wonderful ruler, rule all day long! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 3 of 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "headgear", "headBase0Text": "No Helm", "headBase0Notes": "No headgear.", @@ -441,7 +455,7 @@ "headSpecialFall2015HealerText": "Hat of Frog", "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", "headSpecialGaymerxText": "Rainbow Warrior Helm", - "headSpecialGaymerxNotes": "In celebration o' pride season an' GaymerX, this special helmet be decorated with a radiant, colorful rainbow pattern! GaymerX be a game convention celebrating LGBTQ an' gaming an' be open to everyone. It takes place at the InterContinental in downtown San Francisco on July 11-13! Don't benefit ye.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "Winged Helm", "headMystery201402Notes": "This winged circlet imbues the wearer with th' speed o' th' wind! Don't benefit ye. February 2014 Subscriber Item.", "headMystery201405Text": "Flame o' Mind", @@ -464,6 +478,8 @@ "headMystery201508Notes": "This cozy cheetah hat is very fuzzy! Confers no benefit. August 2015 Subscriber Item.", "headMystery201509Text": "Werewolf Mask", "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 Subscriber Item.", "headMystery301404Text": "Fancy Top Hat", "headMystery301404Notes": "A fancy top hat fer th' finest o' gentlefolk! January 3015 Subscriber Item. Don't benefit ye.", "headMystery301405Text": "Basic Top Hat", @@ -481,7 +497,7 @@ "headArmoireBlueHairbowText": "Blue Hairbow", "headArmoireBlueHairbowNotes": "Become perceptive, tough, an' smart while wearin' this beautiful Blue Hairbow! Increases Perception by <%= per %>, Constitution by <%= con %>, an' Intelligence by <%= int %>. Enchanted Armoire: Independent Item.", "headArmoireRoyalCrownText": "Royal Crown", - "headArmoireRoyalCrownNotes": "Hooray fer th' ruler, mighty an' strong! Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Royal Set (Item 1 of 3).", "headArmoireGoldenLaurelsText": "Golden Laurels", "headArmoireGoldenLaurelsNotes": "These golden laurels reward those who have conquered bad habits. Increases Perception an' Constitution by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 2 o' 3).", "headArmoireHornedIronHelmText": "Horned Iron Helm", @@ -496,6 +512,12 @@ "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", "headArmoireOrangeCatText": "Orange Cat Hat", "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireBlueFloppyHatText": "Blue Floppy Hat", + "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireShepherdHeaddressText": "Shepherd Headdress", + "headArmoireShepherdHeaddressNotes": "Sometimes the gryphons that you herd like to chew on this headdress, but it makes you seem more intelligent nonetheless. Increases Intelligence by <%= int %>. Enchanted Armoire: Shepherd Set (Item 3 of 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "shield-hand item", "shieldBase0Text": "No Shield-Hand Equipment", "shieldBase0Notes": "No shield or second weapon.", @@ -579,6 +601,8 @@ "shieldArmoireGladiatorShieldNotes": "T' be a gladiator ye must.... eh, whatever, just bash 'em wit' yer shield. Increases Constitution by <%= con %> an' Strength by <%= str %>. Enchanted Armoire: Gladiator Set (Item 3 o' 3).", "shieldArmoireMidnightShieldText": "Midnight Shield", "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "shieldArmoireRoyalCaneText": "Royal Cane", + "shieldArmoireRoyalCaneNotes": "Hooray for the ruler, worthy of song! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 2 of 3).", "back": "Back Accessory", "backBase0Text": "No Back Accessory", "backBase0Notes": "No Back Accessory.", @@ -592,6 +616,8 @@ "backMystery201504Notes": "Buzz buzz buzz! Flit from task t' task. Don't benefit ye. April 2015 Subscriber Item.", "backMystery201507Text": "Rad Surfboard", "backMystery201507Notes": "Surf off th' Diligent Docks an' ride th' waves in Inkomplete Bay! Don't benefit ye. July 2015 Subscriber Item.", + "backMystery201510Text": "Goblin Tail", + "backMystery201510Notes": "Prehensile and powerful! Confers no benefit. October 2015 Subscriber Item.", "backSpecialWonderconRedText": "Mighty Cape", "backSpecialWonderconRedNotes": "Swishes wit' strength an' beauty. Don't benefit ye. Special Edition Convention Item.", "backSpecialWonderconBlackText": "Sneaky Cape", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "These powerful antlers change colors wit' th' leaves. Don't benefit ye. September 2014 Subscriber Item.", "headAccessoryMystery201502Text": "Wings o' Thought", "headAccessoryMystery201502Notes": "Let yer imagination take flight! Don't benefit ye. February 2015 Subscriber Item.", + "headAccessoryMystery201510Text": "Goblin Horns", + "headAccessoryMystery201510Notes": "These fearsome horns are slightly slimy. Confers no benefit. October 2015 Subscriber Item.", "headAccessoryMystery301405Text": "Headwear Goggles", "headAccessoryMystery301405Notes": "\"Goggles be f'r yer eyes,\" they said. \"Nobody be wantin' goggles that ye can only wear on yer head,\" they said. Hah! Ye sure showed them! Don't benefit ye. August 3015 Subscriber Item.", "eyewear": "Eyewear", diff --git a/common/locales/en@pirate/generic.json b/common/locales/en@pirate/generic.json index 5cf518ce0b..17a6aa3836 100644 --- a/common/locales/en@pirate/generic.json +++ b/common/locales/en@pirate/generic.json @@ -28,7 +28,7 @@ "market": "Market", "subscriberItem": "Mystery Item", "newSubscriberItem": "New Mystery Item", - "subscriberItemText": "Each month, subscriberrrs'll get a mystery item. This be usually released 'bout one week afore the end 'o the month. Cast yer eyes upon the wiki's 'Mystery Item' page fer the exact date.", + "subscriberItemText": "Each month, subscribers will receive a mystery item. This is usually released about one week before the end of the month. See the wiki's 'Mystery Item' page for more information.", "all": "All", "none": "None", "or": "Or", @@ -69,8 +69,9 @@ "habiticaDayPluralText": "Celebrated <%= number %> Namin' Days! Thanks fer bein' a fantastic user.", "achievementDilatory": "Savior o' Dilatory", "achievementDilatoryText": "Helped defeat th' Dread Drag'on 'o Dilatory durin' th' 2014 Summer Splash Event!", - "costumeContest": "2014 Costume Contest", - "costumeContestText": "Participated in th' 2014 Halloween Costume Contest. Cast yer eyes on some o' the entries at blog.habitica.com/tagged/cosplay!", + "costumeContest": "Costume Contestant", + "costumeContestText": "Participated in the Habitoween Costume Contest. See some of the entries on the Habitica blog!", + "costumeContestTextPlural": "Participated in <%= number %> Habitoween Costume Contests. See some of the entries on the Habitica blog!", "memberSince": "- Mate since", "lastLoggedIn": "- Last sailed on", "notPorted": "This feature is not yet ported from th' original site.", @@ -79,6 +80,7 @@ "errorUpCase": "ERROR:", "newPassSent": "New passcode sent.", "serverUnreach": "Th' server be unreachable at the mo'.", + "requestError": "Yikes, an error occurred! Please reload the page, your last action may not have been saved correctly.", "seeConsole": "If the error be persistin', report it at Help > Report a Bug. If ye be familiar with yer browser's console, please include any error messages.", "error": "Error", "menu": "Menu", @@ -110,7 +112,7 @@ "December": "Decemberrr", "dateFormat": "Date Format", "achievementStressbeast": "Savior o' Stoïkalm", - "achievementStressbeastText": "Helped defeat the Abominable Stressbeast during the 2014 Winter Wonderland Event!", + "achievementStressbeastText": "Helped defeat th' Abominable Stressbeast durin' th' 2014 Winter Wonderland Event!", "achievementBurnout": "Savior of the Flourishing Fields", "achievementBurnoutText": "Helped defeat Burnout and restore the Exhaust Spirits during the 2015 Fall Festival Event!", "checkOutProgress": "Check out my progress in Habitica!", @@ -133,5 +135,17 @@ "thankyou2": "Sending ye a thousand thanks.", "thankyou3": "I be  very grateful - thank ye!", "thankyouCardAchievementTitle": "Greatly Grateful", - "thankyouCardAchievementText": "Thanks fer bein' thankful! Sent or received <%= cards %> Thank-Ye cards." + "thankyouCardAchievementText": "Thanks fer bein' thankful! Sent or received <%= cards %> Thank-Ye cards.", + "streakAchievement": "You earned a streak achievement!", + "firstStreakAchievement": "21-Day Streak", + "streakAchievementCount": "<%= streaks %> 21-Day Streaks", + "twentyOneDays": "You've completed your Daily for 21 days in a row!", + "dontBreakStreak": "Amazing job. Don't break the streak!", + "dontStop": "Don't Stop Now!", + "levelUpShare": "I leveled up in Habitica by improving my real-life habits!", + "questUnlockShare": "I unlocked a new quest in Habitica!", + "hatchPetShare": "I hatched a new pet by completing my real-life tasks!", + "raisePetShare": "I raised a pet into a mount by completing my real-life tasks!", + "wonChallengeShare": "I won a challenge in Habitica!", + "achievementShare": "I earned a new achievement in Habitica!" } \ No newline at end of file diff --git a/common/locales/en@pirate/groups.json b/common/locales/en@pirate/groups.json index 689b2a2854..c53eecffd5 100644 --- a/common/locales/en@pirate/groups.json +++ b/common/locales/en@pirate/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "Check Out o' th' Quarters", "innCheckIn": "Rest in th' Quarters", "innText": "Ye be restin' in th' Inn! While checked-in, yer Dailies won't hurt ye at th' day's end, but they will still refresh every day. Be warned: If ye be participatin' in a Boss Quest, the Boss will still damage ye for ye crew mates' missed Dailies unless they be also in th' Inn! Also, yer own damage to th' Boss (or items collected) will not be applied until ye check out of th' Inn.", + "innTextBroken": "You're resting in the Inn, I guess... While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day... If you are participating in a Boss Quest, the Boss will still damage you for your party mates' missed Dailies... unless they are also in the Inn... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn... so tired...", "lfgPosts": "Lookin' fer Group (Crew Wanted) Posts", "tutorial": "Tutorial", "glossary": "Glossary", @@ -12,7 +13,7 @@ "community": "Community Forum", "dataTool": "Data Display Tool", "resources": "Resources", - "askQuestionNewbiesGuild": "Ask a Question (Newbies Guild)", + "askQuestionNewbiesGuild": "Ask a Question (Th' Newbies Alliance)", "tavernTalk": "Pub Chatter", "tavernAlert1": "Ahoy! If ye arrr reporting a bug, th' developers won't see it 'ere. Please", "tavernAlert2": "use GitHub instead", @@ -33,7 +34,7 @@ "leave": "Leave", "invitedTo": "Invited t' <%= name %>", "invitedToNewParty": "You were invited to join a party! Do you want to leave this party and join <%= partyName %>?", - "joinNewParty": "Join New Party", + "joinNewParty": "Join New Crew", "declineInvitation": "Decline Invitation", "loadingNewParty": "Your new party is loading. Please wait...", "newMsg": "New message in \"<%= name %>\"", @@ -139,11 +140,12 @@ "partyExplanation1": "Play Habitica with friends to stay accountable!", "partyExplanation2": "Battle monsters and create Challenges!", "partyExplanation3": "Invite friends now to earn a Quest Scroll!", - "wantToStartParty": "Do you want to start a party?", + "wantToStartParty": "Do ye want t' start a crew?", "exclusiveQuestScroll": "Inviting a friend to your party will grant you an exclusive Quest Scroll to battle the Basi-List together!", - "nameYourParty": "Name your new party!", + "nameYourParty": "Name yer new crew!", "partyEmpty": "You're the only one in your party. Invite your friends!", "partyChatEmpty": "Your party chat is empty! Type a message in the box above to start chatting.", "guildChatEmpty": "This guild's chat is empty! Type a message in the box above to start chatting.", - "possessiveParty": "<%= name %>'s Party" + "possessiveParty": "<%= name %>'s Crew", + "requestAcceptGuidelines": "If you would like to post messages in the Tavern or any party or guild chat, please first read our <%= linkStart %>Community Guidelines<%= linkEnd %> and then click the button below to indicate that you accept them." } \ No newline at end of file diff --git a/common/locales/en@pirate/limited.json b/common/locales/en@pirate/limited.json index 20b531925e..c06e09fabe 100644 --- a/common/locales/en@pirate/limited.json +++ b/common/locales/en@pirate/limited.json @@ -21,6 +21,7 @@ "valentineCardAchievementText": "Aww, ye an' yer friend must really care about each other! Sent or received <%= cards %> Valentine's Day cards.", "polarBear": "Polar Bear", "turkey": "Turkey", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "Polar Bear Cub", "jackolantern": "Jack-O-Lantern", "seasonalShop": "Seasonal Shop", @@ -30,6 +31,7 @@ "seasonalShopText": "Welcome t' th' Seasonal Shop!! We're stockin' springtime Seasonal Edition goodies at th' moment. Everything here will be available t' purchase durin' th' Spring Fling event each year, but we're only open until April 30th, so be sure t' stock up now, or you'll have t' wait a year t' buy these items again!", "seasonalShopSummerText": "Welcome t' th' Seasonal Shop!! We be stockin' summertime Seasonal Edition goodies at th' moment. Everything here will be available t' purchase during th' Summer Splash event each year, but we're only open until July 31st, so be sure t' stock up now, or you'll have t' wait a year t' buy these items again!", "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31, so be sure to stock up now, or you'll have to wait a year to buy these items again!", + "seasonalShopFallTextBroken": "Oh.... Welcome to the Seasonal Shop... We're stocking autumn Seasonal Edition goodies, or something... Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31... I guess you should to stock up now, or you'll have to wait... and wait... and wait... *sigh*", "seasonalShopRebirth": "If you've used the Orb of Rebirth, you can repurchase this equipment in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.", "candycaneSet": "Candy Cane (Mage)", "skiSet": "Ski-sassin (Scallywag)", diff --git a/common/locales/en@pirate/messages.json b/common/locales/en@pirate/messages.json index 78c8e6b88e..5abbbe2aff 100644 --- a/common/locales/en@pirate/messages.json +++ b/common/locales/en@pirate/messages.json @@ -15,7 +15,7 @@ "messageEquipped": "<%= itemText %> equipped.", "messageUnEquipped": "<%= itemText %> un-equipped.", "messageMissingEggPotion": "Yer missin' either that egg er that potion", - "messageInvalidEggPotionCombo": "You can't hatch Quest Pet Eggs with Magic Hatching Potions! Try a different egg.", + "messageInvalidEggPotionCombo": "Ye can't hatch Adventure Pet Eggs wi' Magic Hatching Potions! Try a different egg.", "messageAlreadyPet": "Ye already 'ave that pet. Try yer hand in hatchin' a different combination!", "messageHatched": "Yer egg hatched! Visit yer stable t' equip yer pet.", "messageNotEnoughGold": "Not Enough Doubloons", @@ -30,5 +30,26 @@ "messageAlreadyOwnGear": "Ye already own this item. Equip it by going to th' equipment page.", "armoireEquipment": "<%= image %> Ye found a piece of rare Equipment in th' Armoire: <%= dropText %>! Awesome!", "armoireFood": "<%= image %> Ye rummage in the Armoire an' find <%= dropArticle %><%= dropText %>. What's tha' doin' in here?", - "armoireExp": "Ye wrestle wi' th' Armoire an' gain Experience. Take that!" + "armoireExp": "Ye wrestle wi' th' Armoire an' gain Experience. Take that!", + "messageInsufficientGems": "Not enough gems!", + "messageAuthPasswordMustMatch": ":password and :confirmPassword don't match", + "messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword required", + "messageAuthUsernameTaken": "Username already taken", + "messageAuthEmailTaken": "Email already taken", + "messageAuthNoUserFound": "No user found.", + "messageAuthMustBeLoggedIn": "You must be logged in.", + "messageAuthMustIncludeTokens": "You must include a token and uid (user id) in your request", + "messageGroupNotFound": "Group not found or you don't have access.", + "messageGroupAlreadyInParty": "Already in a party, try refreshing.", + "messageGroupOnlyLeaderCanUpdate": "Only the group leader can update the group!", + "messageGroupRequiresInvite": "Can't join a group you're not invited to.", + "messageGroupCannotRemoveSelf": "You cannot remove yourself!", + "messageGroupChatBlankMessage": "You cannot send a blank message", + "messageGroupChatLikeOwnMessage": "Can't like your own message. Don't be that person.", + "messageGroupChatFlagOwnMessage": "Can't report your own message.", + "messageGroupChatFlagAlreadyReported": "You have already reported this message", + "messageGroupChatNotFound": "Message not found!", + "messageGroupChatAdminClearFlagCount": "Only an admin can clear the flag count!", + "messageUserOperationProtected": "path `<%= operation %>` was not saved, as it's a protected path.", + "messageUserOperationNotFound": "<%= operation %> operation not found" } \ No newline at end of file diff --git a/common/locales/en@pirate/noscript.json b/common/locales/en@pirate/noscript.json new file mode 100644 index 0000000000..6057268ef2 --- /dev/null +++ b/common/locales/en@pirate/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Alas! Your browser doesn't have JavaScript enabled", + "jsDisabledHeadingFull": "Alas! Your browser doesn't have JavaScript enabled and without it, Habitica can't work properly", + "jsDisabledText": "Habitica can't properly display the site without it!", + "jsDisabledLink": "Please enable JavaScript to continue!" +} \ No newline at end of file diff --git a/common/locales/en@pirate/npc.json b/common/locales/en@pirate/npc.json index f66a9b0ccb..4da335ab93 100644 --- a/common/locales/en@pirate/npc.json +++ b/common/locales/en@pirate/npc.json @@ -7,15 +7,19 @@ "daniel": "Daniel", "danielText": "Welcome t' th' Tavern! Stay a while an' meet the locals. If ye need to rest (vacation? illness?), I'll set ye up at th' Inn. While checked-in, yer Dailies won't hurt ye at th' day's end, but ye can still check them off.", "danielText2": "Be warned: If ye be participatin' in a boss quest, the boss will still damage you for your party mates' missed Dailies! Also, yer own damage t' th' Boss (or items collected) will not be applied until ye check out o' th' Inn.", + "danielTextBroken": "Welcome to the Tavern... I guess... If you need to rest, I'll set you up at the Inn... While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off... if you have the energy...", + "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 th' Sutler", "welcomeMarket": "Welcome t' th' Market! Buy harrrd-to-find eggs 'n potions! Sell yer extras! Commission useful services! Come 'n see what we have to offer ye.", - "sellForGold": "Sell <%= item %> fer <%= gold %> Doubloons", - "sellEggForGold": "Sell <%= itemType %> Egg for <%= gold %> Gold", - "sellPotionForGold": "Sell <%= itemType %> Potion for <%= gold %> Gold", + "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?", + "sellForGold": "Sell it for <%= gold %> Gold", "buyGems": "Buy Sapphires", "justin": "Justin", "ian": "Shipmate Ian", "ianText": "Welcome t' th' Quest Shop! Here ye can use Quest Scrolls t' battle monsters with yer mates. Be sure t' check out our fine array of Quest Scrolls for purchase t' th' starboard!", + "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...", "USD": "USD", "newStuff": "New Stuff", "cool": "Ye Be tellin' Me Later", diff --git a/common/locales/en@pirate/pets.json b/common/locales/en@pirate/pets.json index c1c47b2bc7..906aca2f7c 100644 --- a/common/locales/en@pirate/pets.json +++ b/common/locales/en@pirate/pets.json @@ -58,8 +58,16 @@ "firstDrop": "Ye've unlocked th' Drop System! Now when ye complete tasks, ye have a small chance o' findin' an item, includin' eggs, potions, an' food! Ye just found a <%= eggText %> Egg! <%= eggNotes %>", "useGems": "If ye've got yer eye on a pet, but can't wait any longer fer it t' drop, use Sapphires in Inventory > Market t' buy one!", "hatchAPot": "Hatch a <%= potion %> <%= egg %>?", + "hatchedPet": "You hatched a <%= potion %> <%= egg %>!", + "displayNow": "Display Now", + "displayLater": "Display Later", + "earnedCompanion": "With all your productivity, you've earned a new companion. Feed it to make it grow!", "feedPet": "Feed <%= article %><%= text %> t' yer <%= name %>?", "useSaddle": "Saddle <%= pet %>?", + "raisedPet": "You grew a <%= pet %>!", + "earnedSteed": "By completing your tasks, you've earned a faithful steed!", + "rideNow": "Ride Now", + "rideLater": "Ride Later", "petName": "<%= potion %> <%= egg %>", "mountName": "<%= potion %> <%= mount %>", "petKeyName": "Key t' th' Kennels", diff --git a/common/locales/en@pirate/quests.json b/common/locales/en@pirate/quests.json index f54b3d623a..464cbb6e14 100644 --- a/common/locales/en@pirate/quests.json +++ b/common/locales/en@pirate/quests.json @@ -1,29 +1,31 @@ { "quests": "Adventures", - "quest": "quest", - "whereAreMyQuests": "Quests are now available on their own page! Click on Inventory -> Quests t' find them.", - "yourQuests": "Yer Quests", - "questsForSale": "Quests f'r Sale", - "petQuests": "Pet an' Mount Quests", - "unlockableQuests": "Unlockable Quests", - "goldQuests": "Gold-Purchasable Quests", - "questDetails": "Quest Details", + "quest": "adventure", + "whereAreMyQuests": "Adventures are now available on their own page! Click on Inventory -> Adventures t' find them.", + "yourQuests": "Yer Adventures", + "questsForSale": "Adventures f'r Sale", + "petQuests": "Pet an' Mount Adventures", + "unlockableQuests": "Unlockable Adventures", + "goldQuests": "Doubloon-Purchasable Adventures", + "questDetails": "Adventure Details", "invitations": "Invitations", "completed": "Completed!", "youReceived": "Ye 'ave Receiv'd", - "dropQuestCongrats": "Congratulations on earnin' this quest scroll! Ye can invite yer crew t' begin th' quest now, or come back to it any time in yer Inventory > Quests.", - "questSend": "Clickin' \"Invite\" will send an invitation t' yer crew members. When all members have accepted or denied, th' quest begins. See status under Social > Crew.", - "inviteParty": "Invite Party to Quest", - "questInvitation": "Quest Invitation:", + "dropQuestCongrats": "Congratulations on earnin' this adventure scroll! Ye can invite yer crew t' begin th' adventure now, or come back to it any time in yer Inventory > Adventure.", + "questSend": "Clickin' \"Invite\" will send an invitation t' yer crew members. When all members have accepted or denied, th' adventure begins. See status under Social > Crew.", + "questSendBroken": "Clicking \"Invite\" will send an invitation to your party members... When all members have accepted or denied, the quest begins... See status under Social > Party...", + "inviteParty": "Invite Crew t' Adventure", + "questInvitation": "Adventure Invitation:", "questInvitationTitle": "Adventure Invitation", "questInvitationInfo": "Ye 'ave found th' adventure \"<%= quest %>\"!", "askLater": "Ask Later", - "questLater": "Quest Later", + "questLater": "Adventure Later", "buyQuest": "Buy Adventure Scroll", "accepted": "Accepted", "rejected": "Rejected", "pending": "Pending", - "questStart": "Once all members have either accepted or rejected, th' quest begins. Only them that clicked \"accept\" gunna be able to participate in th' quest 'n receive th' loot. If members be pendin' too long (inactive?), th' quest owner can start th' quest without them by clickin' \"Begin\". th' quest owner can also cancel th' quest 'n regain th' quest scroll by clickin' \"Cancel\".", + "questStart": "Once all members have either accepted or rejected, th' adventure begins. Only them that clicked \"accept\" gunna be able to participate in th' adventure 'n receive th' loot. If members be pendin' too long (inactive?), th' adventure owner can start th' adventure without them by clickin' \"Begin\". th' adventure owner can also cancel th' adventure 'n regain th' adventure scroll by clickin' \"Cancel\".", + "questStartBroken": "Once all members have either accepted or rejected, the quest begins... Only those that clicked \"accept\" will be able to participate in the quest and receive the drops... If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\"... The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\"...", "begin": "Embark", "bossHP": "Boss Health", "bossStrength": "Strength", @@ -31,16 +33,21 @@ "collect": "Plunder", "collected": "Collected", "collectionItems": "<%= number %> <%= items %>", - "itemsToCollect": "Items to Collect", + "itemsToCollect": "Items t' Plunder", "bossDmg1": "T' hurt a world boss, complete ye Dailies 'n To-Dos. Higher task damage means higher boss damage. T h' boss gunna deal damage t' every quest participant fer every Daily ye've missed (multiplied by th' boss's Strength) in addition t' yer regular damage, so keep yer crew healthy by completin' ye dailies! All damage to 'n from a boss be tallied on cron (ye day roll-over).", "bossDmg2": "Only participants will fight th' boss an' share in the adventure's loot.", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "Each completed Daily and To-Do and each positive Habit hurts the boss... Hurt it more with redder tasks or Brutal Smash and Burst of Flames... The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies... All damage to and from a boss is tallied on cron (your day roll-over)...", + "bossDmg2Broken": "Only participants will fight the boss and share in the quest loot...", + "tavernBossInfo": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "tavernBossInfoBroken": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss... Incomplete Dailies fill the Exhaust Strike Bar... When the Exhaust Strike bar is full, the World Boss will attack an NPC... A World Boss will never damage individual players or accounts in any way... Only active accounts not resting in the Inn will have their tasks tallied...", "bossColl1": "T'  collect items, do ye positive tasks. Quest items drop just like normal items; however, ye won't spy wit' ye eye th' loot 'til th' next day, then everythin' ye've found gunna be tallied up 'n contributed to th' pile.", "bossColl2": "Only participants can collect items an' share in th' adventure's loot.", + "bossColl1Broken": "To collect items, do your positive tasks... Quest items drop just like normal items; however, you won't see the drops until the next day, then everything you've found will be tallied up and contributed to the pile...", + "bossColl2Broken": "Only participants can collect items and share in the quest loot...", "abort": "Abandon Ship", - "leaveQuest": "Leave Quest", - "sureLeave": "Are you sure you want to leave the active quest? All your quest progress will be lost.", - "questOwner": "Quest Owner", + "leaveQuest": "Leave Adventure", + "sureLeave": "Arrr ye sure ye want t' abort this adventure? All progress shall be lost.", + "questOwner": "Adventure Owner", "questOwnerNotInPendingQuest": "Th' quest owner has left th' quest 'n can no longer begin it. It be recommended that ye cancel it now. th' quest owner gunna retain possession 'o th' quest scroll.", "questOwnerNotInRunningQuest": "Th' quest owner has left th' quest. ye can abort th' quest if ye need to. ye can also allow it to keep runnin' 'n all remainin' participants gunna receive th' quest rewards when th' quest finishes.", "questOwnerNotInPendingQuestParty": "Th' quest owner has left th' crew 'n can no longer begin th' quest. It be recommended that ye cancel it now. th' quest scroll gunna be returned to th' quest owner.", @@ -50,7 +57,7 @@ "noScrolls": "Ye don't 'ave any adventure scrolls.", "scrollsText1": "Adventures require crews. If ye want t' adventure by yer lonesome,", "scrollsText2": "create an empty crew", - "scrollsPre": "Ye haven' unlocked this quest yet!", + "scrollsPre": "Ye haven' unlocked this adventure yet!", "alreadyEarnedQuestLevel": "Ye already earned this quest by attainin' Level <%= level %>.", "alreadyEarnedQuestReward": "Ye already earned this quest by completin' <%= priorQuest %>.", "completedQuests": "Completed th' following adventures", @@ -63,10 +70,13 @@ "sureAbort": "Be ye sure ye want to abort 'tis mission? It gunna abort it fer all ye crew members an' all progress gunna be lost. th' quest scroll gunna be returned to th' quest owner.", "doubleSureAbort": "Arrr ye double sure? Make sure they won't hate ye forever!", "questWarning": "If new players join th' crew before th' quest starts, they gunna also receive an invitation. However once th' quest has started, no new crew members can join th' quest.", + "questWarningBroken": "If new players join the party before the quest starts, they will also receive an invitation... However once the quest has started, no new party members can join the quest...", "bossRageTitle": "Rage", "bossRageDescription": "When 'tis bar fills, the boss will unleash a special attack!", - "startAQuest": "START A QUEST", - "startQuest": "Start Quest", - "whichQuestStart": "Which quest do you want to start?", - "getMoreQuests": "Get more quests" + "startAQuest": "START AN ADVENTURE", + "startQuest": "Start Adventure", + "whichQuestStart": "Which adventure do ye want t' start?", + "getMoreQuests": "Get more adventures", + "unlockedAQuest": "You unlocked a quest!", + "leveledUpReceivedQuest": "You leveled up to Level <%= level %> and received a quest scroll!" } \ No newline at end of file diff --git a/common/locales/en@pirate/questscontent.json b/common/locales/en@pirate/questscontent.json index b2f17d383d..9cb4dc2fdb 100644 --- a/common/locales/en@pirate/questscontent.json +++ b/common/locales/en@pirate/questscontent.json @@ -261,5 +261,17 @@ "questBurnoutDropPhoenixMount": "Phoenix (Mount)", "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!", + "questFrogText": "Swamp of the Clutter Frog", + "questFrogNotes": "As you and your friends are slogging through the Swamps of Stagnation, @starsystemic points at a large sign. \"Stay on the path -- if you can.\"

\"Surely that isn't hard!\" @RosemonkeyCT says. \"It's broad and clear.\"

But as you continue, you notice that path is gradually overtaken by the muck of the swamp, laced with bits of strange blue debris and clutter, until it's impossible to proceed.

As you look around, wondering how it got this messy, @Jon Arjinborn shouts, \"Look out!\" An angry frog leaps from the sludge, clad in dirty laundry and lit by blue fire. You will have to overcome this poisonous Clutter Frog to progress!", + "questFrogCompletion": "The frog cowers back into the muck, defeated. As it slinks away, the blue slime fades, leaving the way ahead clear.

Sitting in the middle of the path are three pristine eggs. \"You can even see the tiny tadpoles and through the clear casing!\" @Breadstrings says. \"Here, you should take them.\"", + "questFrogBoss": "Clutter Frog", + "questFrogDropFrogEgg": "Frog (Egg)", + "questFrogUnlockText": "Unlocks purchasable Frog eggs in the Market", + "questSnakeText": "The Serpent of Distraction", + "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveler astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", + "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", + "questSnakeBoss": "Serpent of Distraction", + "questSnakeDropSnakeEgg": "Snake (Egg)", + "questSnakeUnlockText": "Unlocks purchasable Snake eggs in the Market" } \ No newline at end of file diff --git a/common/locales/en@pirate/rebirth.json b/common/locales/en@pirate/rebirth.json index 1d8768ae20..3b2e4fd40c 100644 --- a/common/locales/en@pirate/rebirth.json +++ b/common/locales/en@pirate/rebirth.json @@ -2,9 +2,9 @@ "rebirthNew": "Rebirth: New Adventure Available!", "rebirthUnlock": "Ye've unlocked Rebirth! 'tis special Market item allows ye t' begin a new game at level 1 while keepin' ye tasks, achievements, pets, 'n more. Use it t' breathe new life into Habitica if ye feel ye've achieved it all, or t' experience new weapons wit' th' fresh eyes 'o a beginnin' character!", "rebirthBegin": "Rebirth: Embark on a New Adventure", - "rebirthStartOver": "Rebirth starts your character over from Level 1.", + "rebirthStartOver": "Rebirth starts yer character over from Level 1.", "rebirthAdvList1": "Ye return t' full Health.", - "rebirthAdvList2": "You have no Experience, Gold, or Equipment (with the exception of free items like Mystery items).", + "rebirthAdvList2": "Ye 'ave no Experience, Doubloons, or Equipment (with th' exception of free items like Mystery Items)", "rebirthAdvList3": "Yer Habits, Dailies, an' T'-Dos reset t' yellow, an' streaks reset.", "rebirthAdvList4": "Ye have the startin' class o' Mercenary 'til ye earn a new class.", "rebirthInherit": "Yer new character inherits a few things from their predecessor:", @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "Ye also earn an Achievement fer embarkin' on a new adventure!", "beReborn": "Be Reborn", "rebirthAchievement": "Ye've begun a new adventure! 'tis be Rebirth <%= number %> fer ye, 'n th' highest Level ye've attained be <%= level %>. To stack 'tis Achievement, begin ye next new adventure when ye've reached an even higher Level!", + "rebirthAchievement100": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is 100 or higher. To stack this Achievement, begin your next new adventure when you've reached at least 100!", "rebirthBegan": "Embarked on a New Adventure", "rebirthText": "Embarked on <%= rebirths %> New Adventures", "rebirthOrb": "Used an Orb o' Rebirth to start ov'r after attainin' Level", + "rebirthOrb100": "Used an Orb of Rebirth to start over after attaining Level 100 or higher", "rebirthPop": "Begin a new character at Level 1 whilst retainin' achievements, collectibles, an' tasks with history.", "rebirthName": "Orb o' Rebirth", "reborn": "Reborn, max level <%= reLevel %>" diff --git a/common/locales/en@pirate/settings.json b/common/locales/en@pirate/settings.json index a84f3e2a84..e1d7c6f984 100644 --- a/common/locales/en@pirate/settings.json +++ b/common/locales/en@pirate/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "With this option set, th' list o' task tags will be hidden when ye first open a task fer editing.", "startAdvCollapsed": "Advanced Options in tasks start collapsed", "startAdvCollapsedPop": "With this option set, Advanced Options will be hidden when ye first open a task fer editing.", + "dontShowAgain": "Don't show this again", + "suppressLevelUpModal": "Don't show popup when gaining a level", + "suppressHatchPetModal": "Don't show popup when hatching a pet", + "suppressRaisePetModal": "Don't show popup when raising a pet into a mount", + "suppressStreakModal": "Don't show popup when attaining a Streak achievement", "showTour": "Show Tour", "restartTour": "Restart th' introductory tour from when ye first joined Habitica.", "showBailey": "Show Bailey", @@ -40,7 +45,7 @@ "json": "(JSON)", "customDayStart": "Custom Day Start", "changeCustomDayStart": "Change Custom Day Start?", - "sureChangeCustomDayStart": "Are you sure you want to change your custom day start?", + "sureChangeCustomDayStart": "Arr ye sure ye want t' change yer custom day start?", "nextCron": "Your Dailies will next reset the first time you use Habitica after <%= time %>. Make sure you have completed your Dailies before this time!", "customDayStartInfo1": "Habitica defaults to check and reset your Dailies at midnight in your own time zone each day. You can customize that time here.", "misc": "Misc", @@ -81,7 +86,6 @@ "emailChange1": "T' change yer email address, please send an email t'", "emailChange2": "admin@habitica.com", "emailChange3": "including both yer old an' new email address as well as yer User ID.", - "username": "Login Name", "usernameOrEmail": "Login Name or Email", "email": "Email", "registeredWithFb": "Registered with Facebook", @@ -89,7 +93,7 @@ "loginNameDescription2": "User->Profile", "loginNameDescription3": "t' change th' name that appears in yer avatar an' chat messages.", "emailNotifications": "Email Notifications", - "wonChallenge": "Ye Won a Challenge", + "wonChallenge": "You won a Challenge!", "newPM": "Received Private Message", "giftedGems": "Gifted Sapphires", "giftedGemsInfo": "<%= amount %> Sapphires - by <%= name %>", @@ -118,5 +122,29 @@ "promoCode": "Promo Code", "promoCodeApplied": "Promo Code Applied! Check yer inventory", "promoPlaceholder": "Enter Promotion Code", - "displayInviteToPartyWhenPartyIs1": "Display Invite T'  Crew button when crew has 1 member." + "displayInviteToPartyWhenPartyIs1": "Display Invite T'  Crew button when crew has 1 member.", + "saveCustomDayStart": "Save Custom Day Start", + "registration": "Registration", + "addLocalAuth": "Add local authentication:", + "generateCodes": "Generate Codes", + "generate": "Generate", + "getCodes": "Get Codes", + "webhooks": "Webhooks", + "enabled": "Enabled", + "webhookURL": "Webhook URL", + "add": "Add", + "buyGemsGoldCap": "Cap raised to <%= amount %>", + "mysticHourglass": "<%= amount %> Mystic Hourglass", + "mysticHourglassText": "Mystic Hourglasses allow purchasing a previous month's Mystery Item set.", + "purchasedPlanId": "Recurring $<%= price %> each <%= months %> Month(s) (<%= plan %>)", + "purchasedPlanExtraMonths": "You have <%= months %> months of subscription credit.", + "consecutiveSubscription": "Consecutive Subscription", + "consecutiveMonths": "Consecutive Months:", + "gemCapExtra": "Gem Cap Extra:", + "mysticHourglasses": "Mystic Hourglasses:", + "paypal": "PayPal", + "amazonPayments": "Amazon Payments", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/en@pirate/subscriber.json b/common/locales/en@pirate/subscriber.json index a610c2d3fc..c72d2cc6a7 100644 --- a/common/locales/en@pirate/subscriber.json +++ b/common/locales/en@pirate/subscriber.json @@ -60,13 +60,13 @@ "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.", - "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 <%= linkStart %>here<%= linkEnd %>! If those don't satisfy you, perhaps you'd be interested in one of our fashionably futuristic Steampunk Item Sets?", + "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!", "subUpdateCard": "Update Card", "subUpdateTitle": "Update", "subUpdateDescription": "Update the card to be charged.", - "notEnoughHourglasses": "You don't have enough Mystic Hourglasses.", + "notEnoughHourglasses": "Ye don't 'ave enough Mystic Hourglasses.", "hourglassBuyEquipSetConfirm": "Buy this full set of items for 1 Mystic Hourglass?", "hourglassBuyItemConfirm": "Buy this item for 1 Mystic Hourglass?", "petsAlreadyOwned": "Pet already owned.", diff --git a/common/locales/en@pirate/tasks.json b/common/locales/en@pirate/tasks.json index caa3d0ed7e..8435059711 100644 --- a/common/locales/en@pirate/tasks.json +++ b/common/locales/en@pirate/tasks.json @@ -7,7 +7,7 @@ "addsingle": "Ard' Single", "habits": "Habits", "newHabit": "New Habit", - "newHabitBulk": "New Habits (one per line)", + "newHabitBulk": "New Habits (one a line)", "yellowred": "Weak", "greenblue": "Strong", "edit": "Edit", @@ -78,9 +78,9 @@ "streakSingular": "Streaker", "streakSingularText": "Has performed a 21-day streak on a Daily", "perfectName": "Perfect Days", - "perfectText": "Completed all active Dailies on <%= perfects %> days. With this achievement you get a +level/2 buff to all attributes for the next day. Levels greater than 100 don't have any additional effects on buffs.", + "perfectText": "Done all ye Dailies on <%= perfects %> days. When ya got this achievement, ye be gettin' a +level/2 buff to all ya attributes for the next day. Levels that be greater than 100 won't be gettin' any more effects to their buffs.", "perfectSingular": "Perfect Day", - "perfectSingularText": "Completed all active Dailies in one day. With this achievement you get a +level/2 buff to all attributes for the next day. Levels greater than 100 don't have any additional effects on buffs.", + "perfectSingularText": "Done all ye Dailies for one day. When ya got this achievement, ye be gettin' a +level/2 buff to all ya attributes for the next day. Levels that be greater than 100 won't be gettin' any more effects to their buffs.", "streakerAchievement": "Ye have attained th' \"Streaker\" Achievement! th' 21-day mark be a milestone fer habit formation. ye can continue to stack 'tis Achievement fer every additional 21 days, on 'tis Daily or any other!", "fortifyName": "Fortify Potion", "fortifyPop": "Return all tasks t' neutral value (yellow color), 'n restore all lost Health.", @@ -88,8 +88,7 @@ "fortifyText": "Fortify will return all yer tasks t' a neutral (yellow) state, as if ye'd jus' added 'em, an' top yer Health off t' full. This is great if all yer red tasks be makin' th' game too hard, or all yer blue tasks be making th' game too easy. If startin' fresh sounds much more motivatin', spend th' Gems an' catch a reprieve!", "sureDelete": "Arrr ye sure ye want t' delete this task?", "streakCoins": "Streak Bonus!", - "pushTaskToTop": "Push task to top", - "pushTaskToBottom": "Push task t' bottom", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "Enter t' task's title first.", "dailiesRestingInInn": "Yo'rg Restin' in t' Inn! Your Dailies will NOT hurt you tonight, but they WILL still refresh every day. If yo'rge in a quest, you won't deal damage/collect items until you check out o' t' Inn, but you can still be injured by a Boss if your Party lads skip their own Dailies.", "habitHelp1": "Good Habits are things that ye do often. They award Gold an' Experience every time ye click th' <%= plusIcon %>.", diff --git a/common/locales/en_GB/backgrounds.json b/common/locales/en_GB/backgrounds.json index 5f97bb2bdb..0c3fcdb70a 100644 --- a/common/locales/en_GB/backgrounds.json +++ b/common/locales/en_GB/backgrounds.json @@ -118,5 +118,19 @@ "backgroundSlimySwampText": "Slimy Swamp", "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness.", + "backgrounds112015": "SET 18: Released November 2015", + "backgroundFloatingIslandsText": "Floating Islands", + "backgroundFloatingIslandsNotes": "Hop across the Floating Islands.", + "backgroundNightDunesText": "Night Dunes", + "backgroundNightDunesNotes": "Walk peacefully through the Night Dunes.", + "backgroundSunsetOasisText": "Sunset Oasis", + "backgroundSunsetOasisNotes": "Bask in the Sunset Oasis.", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/en_GB/challenge.json b/common/locales/en_GB/challenge.json index c6507d43c4..3b0ee8f47f 100644 --- a/common/locales/en_GB/challenge.json +++ b/common/locales/en_GB/challenge.json @@ -59,5 +59,9 @@ "challengeNotEnoughGems": "You do not have enough gems to post this challenge.", "noPermissionEditChallenge": "You don't have permissions to edit this challenge", "noPermissionDeleteChallenge": "You don't have permissions to delete this challenge", - "noPermissionCloseChallenge": "You don't have permissions to close this challenge" + "noPermissionCloseChallenge": "You don't have permissions to close this challenge", + "congratulations": "Congratulations!", + "hurray": "Hurray!", + "noChallengeOwner": "no owner", + "noChallengeOwnerPopover": "This challenge does not have an owner because the person who created the challenge deleted their account." } \ No newline at end of file diff --git a/common/locales/en_GB/character.json b/common/locales/en_GB/character.json index 137e1591e3..f0c7cc46d7 100644 --- a/common/locales/en_GB/character.json +++ b/common/locales/en_GB/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "Class Bonus", "battleGear": "Battle Gear", "battleGearText": "This is the gear you wear into battle; it affects numbers when interacting with your tasks.", + "autoEquipBattleGear": "Auto-equip new gear", "costume": "Costume", "costumeText": "If you prefer the look of other gear to what you have equipped, check the \"Use Costume\" box to visually don a costume while wearing your battle gear underneath.", "useCostume": "Use Costume", @@ -64,6 +65,10 @@ "ultimGearText": "Has upgraded to the maximum weapon and armour set for the following classes:", "level": "Level", "levelUp": "Level Up!", + "gainedLevel": "You gained a level!", + "leveledUp": "By accomplishing your real-life goals, you've grown to Level <%= level %>!", + "fullyHealed": "You have been fully healed!", + "huzzah": "Huzzah!", "mana": "Mana", "hp": "HP", "mp": "MP", diff --git a/common/locales/en_GB/content.json b/common/locales/en_GB/content.json index 8df581d6ed..0477c48046 100644 --- a/common/locales/en_GB/content.json +++ b/common/locales/en_GB/content.json @@ -43,7 +43,7 @@ "questEggDeerAdjective": "an elegant", "questEggEggText": "Egg", "questEggEggMountText": "Egg Basket", - "questEggEggAdjective": "a colorful", + "questEggEggAdjective": "a colourful", "questEggRatText": "Rat", "questEggRatMountText": "Rat", "questEggRatAdjective": "a dirty", @@ -95,6 +95,12 @@ "questEggHorseText": "Horse", "questEggHorseMountText": "Horse", "questEggHorseAdjective": "a galloping", + "questEggFrogText": "Frog", + "questEggFrogMountText": "Frog", + "questEggFrogAdjective": "a princely", + "questEggSnakeText": "Snake", + "questEggSnakeMountText": "Snake", + "questEggSnakeAdjective": "a slithering", "eggNotes": "Find a hatching potion to pour on this egg, and it will hatch into <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "Base", "hatchingPotionWhite": "White", diff --git a/common/locales/en_GB/faq.json b/common/locales/en_GB/faq.json index 882c27fdfd..dd90ea0d99 100644 --- a/common/locales/en_GB/faq.json +++ b/common/locales/en_GB/faq.json @@ -2,7 +2,7 @@ "frequentlyAskedQuestions": "Frequently Asked Questions", "faqQuestion0": "I'm confused. Where do I get an overview?", "iosFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn experience and gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as Pets, Skills, and Quests! You can customise your character under Menu > Customise Avatar.\n\n Some basic ways to interact: click the (+) in the upper-right-hand corner to add a new task. Tap on an existing task to edit it, and swipe left on a task to delete it. You can sort tasks using Tags in the upper-left-hand corner, and expand and contract checklists by clicking on the checklist bubble.", - "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, the wiki has an excellent step-by-step overview of the game [right here](http://habitica.wikia.com/wiki/Habitica_Wiki).", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", "faqQuestion1": "How do I set up my tasks?", "iosFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the lift. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.", "webFaqAnswer1": "Good Habits (the ones with a ) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a ) are tasks that you should avoid, like biting nails. Habits with a and a have a good choice and a bad choice, like taking the stairs vs. taking the lift. Good Habits award Experience and Gold. Bad Habits subtract Health.\n

\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n

\n To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.", @@ -16,7 +16,7 @@ "iosFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you tap a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your Party and one of your Party mates did not complete all their Dailies, the Boss will attack you.\n\n The main way to heal is to gain a level, which restores all your health. You can also buy a Health Potion with gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a Party with a Healer, they can heal you as well.", "webFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you click a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your party and one of your party mates did not complete all their Dailies, the Boss will attack you.\n

\n The main way to heal is to gain a level, which restores all your Health. You can also buy a Health Potion with Gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a party (under Social > Party) with a Healer, they can heal you as well.", "faqQuestion5": "How do I play Habitica with my friends?", - "iosFaqAnswer5": "The best way is to invite them to a Party with you, via the [website](https://habitica.com/#/options/groups/party)! We'll add the ability to create a Party from this app soon, but in the meantime you can use the [website](https://habitica.com/#/options/groups/party). Parties can go on quests, battle monsters, and cast skills to support each other. On the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", + "iosFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on quests, battle monsters, and cast skills to support each other. Go to Menu > Party and click \"Create New Party\" if you don't already have a Party. Then tap on the Members list, and tap Invite in the upper right-hand corner to invite your friends by entering their User ID (a string of numbers and letters that they can find under Settings > Account Details on the app, and Settings > API on the website). On the website, you can also invite friends via email, which we will add to the app in a future update.\n\nOn the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", "webFaqAnswer5": "The best way is to invite them to a party with you, under Social > Party! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n

\n For more detailed info, check out the wiki pages on [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).", "faqQuestion6": "How do I get a Pet or Mount?", "iosFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch Egg.\" Then choose a hatching potion to determine its colour! Go to Menu > Pets to equip your new Pet to your avatar by clicking on it. \n\n You can also grow your Pets into Mounts by feeding them under Menu > Pets. Tap on a Pet, and then select \"Feed Pet\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favourite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Menu > Mounts and tap on it to equip it to your avatar.\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", @@ -28,14 +28,17 @@ "iosFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Use Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in a special section in the Rewards Column. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You’ll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "faqQuestion9": "How do I fight monsters and go on Quests?", - "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party on the [website](https://habitica.com/#/options/groups/party), you'll be rewarded with the Basi-List Scroll! (We will add this feature to the app in a future update.)\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for gold and gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", + "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for Gold and Gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "webFaqAnswer9": "First, you need to join or start a party (under Social > Party). Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n

\n Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are three ways to get a scroll:\n

\n * When you invite people to your party, you’ll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Page (Inventory > Quests) for Gold and Gems.\n

\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your party at the same time that you damage the Boss.\n

\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "faqQuestion10": "What are gems, and how do I get them?", + "faqQuestion10": "What are Gems, and how do I get them?", "iosFaqAnswer10": "Gems are purchased with real money by tapping on the gem icon in the header. When people buy gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying gems directly, there are three other ways players can gain gems:\n\n * Win a Challenge on the [website](https://habitica.com) that has been set up by another player under Social > Challenges. (We will be adding Challenges to the app in a future update!)\n * Subscribe on the [website](https://habitica.com/#/options/settings/subscription) and unlock the ability to buy a certain number of gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with gems do not offer any statistical advantages, so players can still make use of the app without them!", "webFaqAnswer10": "Gems are [purchased with real money](https://habitica.com/#/options/settings/subscription), although [subscribers](https://habitica.com/#/options/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n

\n In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n

\n * Win a Challenge that has been set up by another player under Social > Challenges.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", "faqQuestion11": "How do I report a bug or request a feature?", "iosFaqAnswer11": "You can report a bug, request a feature, or send feedback under Menu > Report a Bug and Menu > Send Feedback! We'll do everything we can to assist you.", "webFaqAnswer11": "Bug reports are collected on GitHub. Go to [Help > Report a Bug](https://github.com/HabitRPG/habitrpg/issues/2760) and follow the instructions. Don't worry, we'll get you fixed up soon!\n

\n Feature requests are collected on Trello. Go to [Help > Request a Feature](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) and follow the instructions. Ta-da!", + "faqQuestion12": "How do I battle a World Boss?", + "iosFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", + "webFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n

\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n

\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n

\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", "iosFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the Tavern chat under Menu > Tavern! We're happy to help.", "webFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the [Newbies Guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help." } \ No newline at end of file diff --git a/common/locales/en_GB/front.json b/common/locales/en_GB/front.json index 7cfc89c248..6f3d143fa4 100644 --- a/common/locales/en_GB/front.json +++ b/common/locales/en_GB/front.json @@ -74,7 +74,7 @@ "infhQuote": "[Habitica] has really helped me impart structure to my life in graduate school.", "invalidEmail": "A valid email address is required in order to perform a password reset.", "irishfeet123Quote": "I've had horrible habits with clearing my place completely after meals and leaving cups all over the place. [Habitica] has cured that!", - "joinOthers": "Join 250,000 people making it fun to achieve goals!", + "joinOthers": "Join <%= userCount %> people making it fun to achieve goals!", "kazuiQuote": "Before [Habitica], I was stuck with my thesis, as well as dissatisfied with my personal discipline regarding housework and things like learning vocabulary and studying Go theory. It turns out breaking down these tasks into smaller manageable checklists is quite the thing to keep me motivated and constantly working.", "landingadminlink": "administrative packages", "landingend": "Not convinced yet?", @@ -109,7 +109,7 @@ "marketing3Lead1": "The iPhone & Android apps let you take care of business on the go. We realise that logging into the website to click buttons can be a drag.", "marketing3Lead2": "Other 3rd Party Tools tie Habitica into various aspects of your life. Our API provides easy integration for things like the Chrome Extension, for which you lose points when browsing unproductive websites and gain points when on productive ones. See more here", "marketing4Header": "Organisational Use", - "marketing4Lead1": "Education is one of the best sectors for gamification. We all know how glued to phones and games students are these days; harness that power! Pit your students against each other in friendly competition. Reward good behavior with rare prizes. Watch their grades and behavior soar.", + "marketing4Lead1": "Education is one of the best sectors for gamification. We all know how glued to phones and games students are these days; harness that power! Pit your students against each other in friendly competition. Reward good behavior with rare prizes. Watch their grades and behaviour soar.", "marketing4Lead1Title": "Gamification In Education", "marketing4Lead2": "Health care costs are on the rise, and something's gotta give. Hundreds of programmes are built to reduce costs and improve wellness. We believe Habitica can pave a substantial path towards healthy lifestyles.", "marketing4Lead2Title": "Gamification In Health And Wellness", @@ -179,5 +179,14 @@ "businessInquiries": "Business Inquiries", "merchandiseInquiries": "Merchandise Inquiries", "marketingInquiries": "Marketing/Social Media Inquiries", - "tweet": "Tweet" + "tweet": "Tweet", + "apps": "Apps", + "notifyAndroidApp": "Want us to notify you when the Android app is ready? Sign up for this mailing list!", + "checkOutIOSApp": "Check out our new iOS App!", + "imagine1": "Imagine if improving your life were as fun as playing a game.", + "landingCopy1": "Advance in the game by completing your real-life tasks.", + "landingCopy2": "Battle monsters with friends to stay accountable to your goals.", + "landingCopy3": "Join over <%= userCount %> people having fun as they improve their lives.", + "alreadyHaveAccount": "I already have an account!", + "getStartedNow": "Get Started Now!" } \ No newline at end of file diff --git a/common/locales/en_GB/gear.json b/common/locales/en_GB/gear.json index bda7ceff67..8ffa7bf4cf 100644 --- a/common/locales/en_GB/gear.json +++ b/common/locales/en_GB/gear.json @@ -149,13 +149,19 @@ "weaponArmoireRancherLassoText": "Rancher Lasso", "weaponArmoireRancherLassoNotes": "Lassos: the ideal tool for rounding up and wrangling. Increases Strength by <%= str %>, Perception by <%= per %>, and Intelligence by <%= int %>. Enchanted Armoire: Rancher Set (Item 3 of 3).", "weaponArmoireMythmakerSwordText": "Mythmaker Sword", - "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3)", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Iron Crook", - "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3)", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Gold Wing Staff", "weaponArmoireGoldWingStaffNotes": "The wings on this staff constantly flutter and twist. Increases all attributes by <%= attrs %> each. Enchanted Armoire: Independent Item.", "weaponArmoireBatWandText": "Bat Wand", "weaponArmoireBatWandNotes": "This wand can turn any task into a bat! Wave it about and watch them fly away. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireShepherdsCrookText": "Shepherd's Crook", + "weaponArmoireShepherdsCrookNotes": "Useful for herding gryphons. Increases Constitution by <%= con %>. Enchanted Armoire: Shepherd Set (Item 1 of 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "armour", "armorBase0Text": "Plain Clothing", "armorBase0Notes": "Ordinary clothing. Confers no benefit.", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "Silly Party Robes", "armorSpecialBirthday2015Notes": "Happy Birthday, Habitica! Wear these Silly Party Robes to celebrate this wonderful day. Confers no benefit.", "armorSpecialGaymerxText": "Rainbow Warrior Armour", - "armorSpecialGaymerxNotes": "In celebration of pride season and GaymerX, this special armour is decorated with a radiant, colourful rainbow pattern! GaymerX is a game convention celebrating LGBTQ and gaming and is open to everyone. It takes place at the InterContinental in downtown San Francisco on July 11-13! Confers no benefit.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "Sleek Cat Suit", "armorSpecialSpringRogueNotes": "Impeccably groomed. Increases Perception by <%= per %>. Limited Edition 2014 Spring Gear.", "armorSpecialSpringWarriorText": "Clover-steel Armour", @@ -307,6 +313,8 @@ "armorMystery201508Notes": "Run fast as a flash in the fluffy Cheetah Costume! Confers no benefit. August 2015 Subscriber Item.", "armorMystery201509Text": "Werewolf Costume", "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Steampunk Suit", "armorMystery301404Notes": "Dapper and dashing, wot! Confers no benefit. February 3015 Subscriber Item.", "armorArmoireLunarArmorText": "Soothing Lunar Armour", @@ -321,6 +329,12 @@ "armorArmoireHornedIronArmorNotes": "Fiercely hammered from iron, this horned armour is nearly impossible to break. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Horned Iron Set (Item 2 of 3).", "armorArmoirePlagueDoctorOvercoatText": "Plague Doctor Overcoat", "armorArmoirePlagueDoctorOvercoatNotes": "An authentic overcoat worn by the doctors who battle the Plague of Procrastination! Increases Intelligence by <%= int %>, Strength by <%= str %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 3 of 3).", + "armorArmoireShepherdRobesText": "Shepherd Robes", + "armorArmoireShepherdRobesNotes": "The fabric is cool and breathable, perfect for a hot day herding gryphons in the desert. Increases Strength and Perception by <%= attrs %> each. Enchanted Armoire: Shepherd Set (Item 2 of 3).", + "armorArmoireRoyalRobesText": "Royal Robes", + "armorArmoireRoyalRobesNotes": "Wonderful ruler, rule all day long! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 3 of 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "headgear", "headBase0Text": "No Helm", "headBase0Notes": "No headgear.", @@ -441,7 +455,7 @@ "headSpecialFall2015HealerText": "Hat of Frog", "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", "headSpecialGaymerxText": "Rainbow Warrior Helm", - "headSpecialGaymerxNotes": "In celebration of pride season and GaymerX, this special helmet is decorated with a radiant, colourful rainbow pattern! GaymerX is a game convention celebrating LGBTQ and gaming and is open to everyone. It takes place at the InterContinental in downtown San Francisco on July 11-13! Confers no benefit.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "Winged Helm", "headMystery201402Notes": "This winged circlet imbues the wearer with the speed of the wind! Confers no benefit. February 2014 Subscriber Item.", "headMystery201405Text": "Flame of Mind", @@ -464,6 +478,8 @@ "headMystery201508Notes": "This cozy cheetah hat is very fuzzy! Confers no benefit. August 2015 Subscriber Item.", "headMystery201509Text": "Werewolf Mask", "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 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", @@ -481,7 +497,7 @@ "headArmoireBlueHairbowText": "Blue Hairbow", "headArmoireBlueHairbowNotes": "Become perceptive, tough, and smart while wearing this beautiful Blue Hairbow! Increases Perception by <%= per %>, Constitution by <%= con %>, and Intelligence by <%= int %>. Enchanted Armoire: Independent Item.", "headArmoireRoyalCrownText": "Royal Crown", - "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Royal Set (Item 1 of 3).", "headArmoireGoldenLaurelsText": "Golden Laurels", "headArmoireGoldenLaurelsNotes": "These golden laurels reward those who have conquered bad habits. Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 2 of 3).", "headArmoireHornedIronHelmText": "Horned Iron Helm", @@ -496,6 +512,12 @@ "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", "headArmoireOrangeCatText": "Orange Cat Hat", "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireBlueFloppyHatText": "Blue Floppy Hat", + "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireShepherdHeaddressText": "Shepherd Headdress", + "headArmoireShepherdHeaddressNotes": "Sometimes the gryphons that you herd like to chew on this headdress, but it makes you seem more intelligent nonetheless. Increases Intelligence by <%= int %>. Enchanted Armoire: Shepherd Set (Item 3 of 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "shield-hand item", "shieldBase0Text": "No Shield-Hand Equipment", "shieldBase0Notes": "No shield or second weapon.", @@ -579,6 +601,8 @@ "shieldArmoireGladiatorShieldNotes": "To be a gladiator you must.... eh, whatever, just bash them with your shield. Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Gladiator Set (Item 3 of 3).", "shieldArmoireMidnightShieldText": "Midnight Shield", "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "shieldArmoireRoyalCaneText": "Royal Cane", + "shieldArmoireRoyalCaneNotes": "Hooray for the ruler, worthy of song! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 2 of 3).", "back": "Back Accessory", "backBase0Text": "No Back Accessory", "backBase0Notes": "No Back Accessory.", @@ -592,6 +616,8 @@ "backMystery201504Notes": "Buzz buzz buzz! Flit from task to task. Confers no benefit. April 2015 Subscriber Item.", "backMystery201507Text": "Rad Surfboard", "backMystery201507Notes": "Surf off the Diligent Docks and ride the waves in Inkomplete Bay! Confers no benefit. July 2015 Subscriber Item.", + "backMystery201510Text": "Goblin Tail", + "backMystery201510Notes": "Prehensile and powerful! Confers no benefit. October 2015 Subscriber Item.", "backSpecialWonderconRedText": "Mighty Cape", "backSpecialWonderconRedNotes": "Swishes with strength and beauty. Confers no benefit. Special Edition Convention Item.", "backSpecialWonderconBlackText": "Sneaky Cape", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "These powerful antlers change colours with the leaves. Confers no benefit. September 2014 Subscriber Item.", "headAccessoryMystery201502Text": "Wings of Thought", "headAccessoryMystery201502Notes": "Let your imagination take flight! Confers no benefit. February 2015 Subscriber Item.", + "headAccessoryMystery201510Text": "Goblin Horns", + "headAccessoryMystery201510Notes": "These fearsome horns are slightly slimy. Confers no benefit. October 2015 Subscriber Item.", "headAccessoryMystery301405Text": "Headwear Goggles", "headAccessoryMystery301405Notes": "\"Goggles are for your eyes,\" they said. \"Nobody wants goggles that you can only wear on your head,\" they said. Hah! You sure showed them! Confers no benefit. August 3015 Subscriber Item.", "eyewear": "Eyewear", diff --git a/common/locales/en_GB/generic.json b/common/locales/en_GB/generic.json index 89a3268df2..89d84892af 100644 --- a/common/locales/en_GB/generic.json +++ b/common/locales/en_GB/generic.json @@ -28,7 +28,7 @@ "market": "Market", "subscriberItem": "Mystery Item", "newSubscriberItem": "New Mystery Item", - "subscriberItemText": "Each month, subscribers will receive a mystery item. This is usually released about one week before the end of the month. See the wiki's 'Mystery Item' page for the exact date.", + "subscriberItemText": "Each month, subscribers will receive a mystery item. This is usually released about one week before the end of the month. See the wiki's 'Mystery Item' page for more information.", "all": "All", "none": "None", "or": "Or", @@ -69,8 +69,9 @@ "habiticaDayPluralText": "Celebrated <%= number %> Naming Days! Thanks for being a fantastic user.", "achievementDilatory": "Saviour of Dilatory", "achievementDilatoryText": "Helped defeat the Dread Dragon of Dilatory during the 2014 Summer Splash Event!", - "costumeContest": "2014 Costume Contest", - "costumeContestText": "Participated in the 2014 Halloween Costume Contest. See some of the entries at blog.habitica.com/tagged/cosplay!", + "costumeContest": "Costume Contestant", + "costumeContestText": "Participated in the Habitoween Costume Contest. See some of the entries on the Habitica blog!", + "costumeContestTextPlural": "Participated in <%= number %> Habitoween Costume Contests. See some of the entries on the Habitica blog!", "memberSince": "- Member since", "lastLoggedIn": "- Last logged in", "notPorted": "This feature is not yet ported from the original site.", @@ -79,6 +80,7 @@ "errorUpCase": "ERROR:", "newPassSent": "New password sent.", "serverUnreach": "Server currently unreachable.", + "requestError": "Yikes, an error occurred! Please reload the page, your last action may not have been saved correctly.", "seeConsole": "If the error persists, please report it at Help > Report a Bug. If you're familiar with your browser's console, please include any error messages.", "error": "Error", "menu": "Menu", @@ -111,7 +113,7 @@ "dateFormat": "Date Format", "achievementStressbeast": "Saviour of Stoïkalm", "achievementStressbeastText": "Helped defeat the Abominable Stressbeast during the 2014 Winter Wonderland Event!", - "achievementBurnout": "Savior of the Flourishing Fields", + "achievementBurnout": "Saviour of the Flourishing Fields", "achievementBurnoutText": "Helped defeat Burnout and restore the Exhaust Spirits during the 2015 Fall Festival Event!", "checkOutProgress": "Check out my progress in Habitica!", "cardReceived": "Received a card!", @@ -133,5 +135,17 @@ "thankyou2": "Sending you a thousand thanks.", "thankyou3": "I'm very grateful—thank you!", "thankyouCardAchievementTitle": "Greatly Grateful", - "thankyouCardAchievementText": "Thanks for being thankful! Sent or received <%= cards %> Thank You cards." + "thankyouCardAchievementText": "Thanks for being thankful! Sent or received <%= cards %> Thank You cards.", + "streakAchievement": "You earned a streak achievement!", + "firstStreakAchievement": "21-Day Streak", + "streakAchievementCount": "<%= streaks %> 21-Day Streaks", + "twentyOneDays": "You've completed your Daily for 21 days in a row!", + "dontBreakStreak": "Amazing job. Don't break the streak!", + "dontStop": "Don't Stop Now!", + "levelUpShare": "I leveled up in Habitica by improving my real-life habits!", + "questUnlockShare": "I unlocked a new quest in Habitica!", + "hatchPetShare": "I hatched a new pet by completing my real-life tasks!", + "raisePetShare": "I raised a pet into a mount by completing my real-life tasks!", + "wonChallengeShare": "I won a challenge in Habitica!", + "achievementShare": "I earned a new achievement in Habitica!" } \ No newline at end of file diff --git a/common/locales/en_GB/groups.json b/common/locales/en_GB/groups.json index 7da2026334..014da6ceba 100644 --- a/common/locales/en_GB/groups.json +++ b/common/locales/en_GB/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "Check Out of Inn", "innCheckIn": "Rest in the Inn", "innText": "You're resting in the Inn! While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day. Be warned: If you are participating in a Boss Quest, the Boss will still damage you for your party mates' missed Dailies unless they are also in the Inn! Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn.", + "innTextBroken": "You're resting in the Inn, I guess... While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day... If you are participating in a Boss Quest, the Boss will still damage you for your party mates' missed Dailies... unless they are also in the Inn... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn... so tired...", "lfgPosts": "Looking for Group (Party Wanted) Posts", "tutorial": "Tutorial", "glossary": "Glossary", @@ -145,5 +146,6 @@ "partyEmpty": "You're the only one in your party. Invite your friends!", "partyChatEmpty": "Your party chat is empty! Type a message in the box above to start chatting.", "guildChatEmpty": "This guild's chat is empty! Type a message in the box above to start chatting.", - "possessiveParty": "<%= name %>'s Party" + "possessiveParty": "<%= name %>'s Party", + "requestAcceptGuidelines": "If you would like to post messages in the Tavern or any party or guild chat, please first read our <%= linkStart %>Communit Guidelines<%= linkEnd %> and then click the button below to indicate that you accept them." } \ No newline at end of file diff --git a/common/locales/en_GB/limited.json b/common/locales/en_GB/limited.json index 315f024d77..93bd65a79a 100644 --- a/common/locales/en_GB/limited.json +++ b/common/locales/en_GB/limited.json @@ -21,6 +21,7 @@ "valentineCardAchievementText": "Aww, you and your friend must really care about each other! Sent or received <%= cards %> Valentine's Day cards.", "polarBear": "Polar Bear", "turkey": "Turkey", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "Polar Bear Cub", "jackolantern": "Jack-O-Lantern", "seasonalShop": "Seasonal Shop", @@ -28,8 +29,9 @@ "seasonalShopTitle": "<%= linkStart %>Seasonal Sorceress<%= linkEnd %>", "seasonalShopClosedText": "The Seasonal Shop is currently closed!! I don't know where the Seasonal Sorceress is now, but I bet she'll be back during the next Grand Gala!", "seasonalShopText": "Welcome to the Seasonal Shop!! We're stocking springtime Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Spring Fling event each year, but we're only open until 30 April, so be sure to stock up now or you'll have to wait a year to buy these items again!", - "seasonalShopSummerText": "Welcome to the Seasonal Shop!! We're stocking summertime Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Summer Splash event each year, but we're only open until July 31st, so be sure to stock up now, or you'll have to wait a year to buy these items again!", - "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31, so be sure to stock up now, or you'll have to wait a year to buy these items again!", + "seasonalShopSummerText": "Welcome to the Seasonal Shop!! We're stocking summertime Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Summer Splash event each year, but we're only open until 31 July, so be sure to stock up now, or you'll have to wait a year to buy these items again!", + "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until 31 October, so be sure to stock up now, or you'll have to wait a year to buy these items again!", + "seasonalShopFallTextBroken": "Oh.... Welcome to the Seasonal Shop... We're stocking autumn Seasonal Edition goodies, or something... Everything here will be available to purchase during the Fall Festival event each year, but we're only open until 31 October... I guess you should to stock up now, or you'll have to wait... and wait... and wait... *sigh*", "seasonalShopRebirth": "If you've used the Orb of Rebirth, you can repurchase this equipment in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.", "candycaneSet": "Candy Cane (Mage)", "skiSet": "Ski-sassin (Rogue)", @@ -60,5 +62,5 @@ "witchyWizardSet": "Witchy Wizard (Mage)", "mummyMedicSet": "Mummy Medic (Healer)", "vampireSmiterSet": "Vampire Smiter (Rogue)", - "fallEventAvailability": "Available until October 31" + "fallEventAvailability": "Available until 31 October" } \ No newline at end of file diff --git a/common/locales/en_GB/messages.json b/common/locales/en_GB/messages.json index a056add9aa..b02f6f6761 100644 --- a/common/locales/en_GB/messages.json +++ b/common/locales/en_GB/messages.json @@ -30,5 +30,26 @@ "messageAlreadyOwnGear": "You already own this item. Equip it by going to the equipment page.", "armoireEquipment": "<%= image %> You found a piece of rare Equipment in the Armoire: <%= dropText %>! Awesome!", "armoireFood": "<%= image %> You rummage in the Armoire and find <%= dropArticle %><%= dropText %>. What's that doing in here?", - "armoireExp": "You wrestle with the Armoire and gain Experience. Take that!" + "armoireExp": "You wrestle with the Armoire and gain Experience. Take that!", + "messageInsufficientGems": "Not enough gems!", + "messageAuthPasswordMustMatch": ":password and :confirmPassword don't match", + "messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword required", + "messageAuthUsernameTaken": "Username already taken", + "messageAuthEmailTaken": "Email already taken", + "messageAuthNoUserFound": "No user found.", + "messageAuthMustBeLoggedIn": "You must be logged in.", + "messageAuthMustIncludeTokens": "You must include a token and uid (user id) in your request", + "messageGroupNotFound": "Group not found or you don't have access.", + "messageGroupAlreadyInParty": "Already in a party, try refreshing.", + "messageGroupOnlyLeaderCanUpdate": "Only the group leader can update the group!", + "messageGroupRequiresInvite": "Can't join a group you're not invited to.", + "messageGroupCannotRemoveSelf": "You cannot remove yourself!", + "messageGroupChatBlankMessage": "You cannot send a blank message", + "messageGroupChatLikeOwnMessage": "Can't like your own message. Don't be that person.", + "messageGroupChatFlagOwnMessage": "Can't report your own message.", + "messageGroupChatFlagAlreadyReported": "You have already reported this message", + "messageGroupChatNotFound": "Message not found!", + "messageGroupChatAdminClearFlagCount": "Only an admin can clear the flag count!", + "messageUserOperationProtected": "path `<%= operation %>` was not saved, as it's a protected path.", + "messageUserOperationNotFound": "<%= operation %> operation not found" } \ No newline at end of file diff --git a/common/locales/en_GB/noscript.json b/common/locales/en_GB/noscript.json new file mode 100644 index 0000000000..6057268ef2 --- /dev/null +++ b/common/locales/en_GB/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Alas! Your browser doesn't have JavaScript enabled", + "jsDisabledHeadingFull": "Alas! Your browser doesn't have JavaScript enabled and without it, Habitica can't work properly", + "jsDisabledText": "Habitica can't properly display the site without it!", + "jsDisabledLink": "Please enable JavaScript to continue!" +} \ No newline at end of file diff --git a/common/locales/en_GB/npc.json b/common/locales/en_GB/npc.json index e350a8cf45..629eebb5e0 100644 --- a/common/locales/en_GB/npc.json +++ b/common/locales/en_GB/npc.json @@ -7,15 +7,19 @@ "daniel": "Daniel", "danielText": "Welcome to the Tavern! Stay a while and meet the locals. If you need to rest — vacation? illness? — I'll set you up at the Inn. While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off.", "danielText2": "Be warned: 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.", + "danielTextBroken": "Welcome to the Tavern... I guess... If you need to rest, I'll set you up at the Inn... While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off... if you have the energy...", + "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.", - "sellForGold": "Sell <%= item %> for <%= gold %> Gold", - "sellEggForGold": "Sell <%= itemType %> Egg for <%= gold %> Gold", - "sellPotionForGold": "Sell <%= itemType %> Potion for <%= gold %> Gold", + "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?", + "sellForGold": "Sell it for <%= gold %> Gold", "buyGems": "Buy Gems", "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!", + "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...", "USD": "USD", "newStuff": "New Stuff", "cool": "Tell Me Later", @@ -56,7 +60,7 @@ "tourChallengesPage": "Challenges are themed task lists created by users! Joining a Challenge will add its tasks to your account. Compete against other users to win Gem prizes!", "tourMarketPage": "Starting at Level 3, eggs and hatching potions drop randomly when you complete tasks. They appear here—use them to hatch pets! You can also buy items from the Market.", "tourHallPage": "Welcome to the Hall of Heroes, where open-source contributors to Habitica are honoured. Whether through code, art, music, writing, or even just helpfulness, they have earned Gems, exclusive equipment, and prestigious titles. You can contribute to Habitica, too!", - "tourPetsPage": "This is the Stable! After level 4, you can hatch pets using eggs and potions. When you hatch a pet in the Market, it will appear here! Click a pet's image to add it to your avatar. Feed them with the food you find after level 4, and they'll grow into powerful mounts.", + "tourPetsPage": "This is the Stable! After level 3, you can hatch pets using eggs and potions. When you hatch a pet in the Market, it will appear here! Click a pet's image to add it to your avatar. Feed them with the food you find after level 3, and they'll grow into powerful mounts.", "tourMountsPage": "Once you've fed a pet enough food to turn it into a mount, it will appear here. (Pets, mounts, and food are available after level 3.) Click a mount to saddle up!", "tourEquipmentPage": "This is where your Equipment is stored! Your Battle Gear affects your stats. If you want to show different Equipment on your avatar without changing your stats, click \"Enable Costume.\"", "tourOkay": "Okay!", diff --git a/common/locales/en_GB/pets.json b/common/locales/en_GB/pets.json index 2a672b16ef..7c49cba987 100644 --- a/common/locales/en_GB/pets.json +++ b/common/locales/en_GB/pets.json @@ -58,8 +58,16 @@ "firstDrop": "You've unlocked the Drop System! Now, when you complete tasks you have a small chance of finding an item, including eggs, potions, and food! You just found a <%= eggText %> Egg! <%= eggNotes %>", "useGems": "If you've got your eye on a pet, but can't wait any longer for it to drop, use Gems in Inventory > Market to buy one!", "hatchAPot": "Hatch a <%= potion %> <%= egg %>?", + "hatchedPet": "You hatched a <%= potion %> <%= egg %>!", + "displayNow": "Display Now", + "displayLater": "Display Later", + "earnedCompanion": "With all your productivity, you've earned a new companion. Feed it to make it grow!", "feedPet": "Feed <%= article %><%= text %> to your <%= name %>?", "useSaddle": "Saddle <%= pet %>?", + "raisedPet": "You grew a <%= pet %>!", + "earnedSteed": "By completing your tasks, you've earned a faithful steed!", + "rideNow": "Ride Now", + "rideLater": "Ride Later", "petName": "<%= potion %> <%= egg %>", "mountName": "<%= potion %> <%= mount %>", "petKeyName": "Key to the Kennels", diff --git a/common/locales/en_GB/quests.json b/common/locales/en_GB/quests.json index ec5e161bc3..85695d3000 100644 --- a/common/locales/en_GB/quests.json +++ b/common/locales/en_GB/quests.json @@ -13,6 +13,7 @@ "youReceived": "You've Received", "dropQuestCongrats": "Congratulations on earning this quest scroll! You can invite your party to begin the quest now, or come back to it any time in your Inventory > Quests.", "questSend": "Clicking \"Invite\" will send an invitation to your party members. When all members have accepted or denied, the quest begins. See status under Social > Party.", + "questSendBroken": "Clicking \"Invite\" will send an invitation to your party members... When all members have accepted or denied, the quest begins... See status under Social > Party...", "inviteParty": "Invite Party to Quest", "questInvitation": "Quest Invitation:", "questInvitationTitle": "Quest Invitation", @@ -24,6 +25,7 @@ "rejected": "Rejected", "pending": "Pending", "questStart": "Once all members have either accepted or rejected, the quest begins. Only those that clicked \"accept\" will be able to participate in the quest and receive the drops. If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\". The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\".", + "questStartBroken": "Once all members have either accepted or rejected, the quest begins... Only those that clicked \"accept\" will be able to participate in the quest and receive the drops... If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\"... The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\"...", "begin": "Begin", "bossHP": "Boss Health", "bossStrength": "Boss Strength", @@ -34,9 +36,14 @@ "itemsToCollect": "Items to Collect", "bossDmg1": "Each completed Daily and To-Do and each positive Habit hurts the boss. Hurt it more with redder tasks or Brutal Smash and Burst of Flames. The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies! All damage to and from a boss is tallied on cron (your day roll-over).", "bossDmg2": "Only participants will fight the boss and share in the quest loot.", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "Each completed Daily and To-Do and each positive Habit hurts the boss... Hurt it more with redder tasks or Brutal Smash and Burst of Flames... The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies... All damage to and from a boss is tallied on cron (your day roll-over)...", + "bossDmg2Broken": "Only participants will fight the boss and share in the quest loot...", + "tavernBossInfo": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "tavernBossInfoBroken": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss... Incomplete Dailies fill the Exhaust Strike Bar... When the Exhaust Strike bar is full, the World Boss will attack an NPC... A World Boss will never damage individual players or accounts in any way... Only active accounts not resting in the Inn will have their tasks tallied...", "bossColl1": "To collect items, do your positive tasks. Quest items drop just like normal items; however, you won't see the drops until the next day, then everything you've found will be tallied up and contributed to the pile.", "bossColl2": "Only participants can collect items and share in the quest loot.", + "bossColl1Broken": "To collect items, do your positive tasks... Quest items drop just like normal items; however, you won't see the drops until the next day, then everything you've found will be tallied up and contributed to the pile...", + "bossColl2Broken": "Only participants can collect items and share in the quest loot...", "abort": "Abort", "leaveQuest": "Leave Quest", "sureLeave": "Are you sure you want to leave the active quest? All your quest progress will be lost.", @@ -63,10 +70,13 @@ "sureAbort": "Are you sure you want to abort this mission? It will abort it for everyone in your party and all progress will be lost. The quest scroll will be returned to the quest owner.", "doubleSureAbort": "Are you double sure? Make sure they won't hate you forever!", "questWarning": "If new players join the party before the quest starts, they will also receive an invitation. However once the quest has started, no new party members can join the quest.", + "questWarningBroken": "If new players join the party before the quest starts, they will also receive an invitation... However once the quest has started, no new party members can join the quest...", "bossRageTitle": "Rage", "bossRageDescription": "When this bar fills, the boss will unleash a special attack!", "startAQuest": "START A QUEST", "startQuest": "Start Quest", "whichQuestStart": "Which quest do you want to start?", - "getMoreQuests": "Get more quests" + "getMoreQuests": "Get more quests", + "unlockedAQuest": "You unlocked a quest!", + "leveledUpReceivedQuest": "You leveled up to Level <%= level %> and received a quest scroll!" } \ No newline at end of file diff --git a/common/locales/en_GB/questscontent.json b/common/locales/en_GB/questscontent.json index 15450a91d3..808ebe1f52 100644 --- a/common/locales/en_GB/questscontent.json +++ b/common/locales/en_GB/questscontent.json @@ -259,7 +259,19 @@ "questBurnoutBossRageDescription": "When this gauge fills, Burnout will unleash its Exhaust Strike on Habitica!", "questBurnoutDropPhoenixPet": "Phoenix (Pet)", "questBurnoutDropPhoenixMount": "Phoenix (Mount)", - "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", + "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smoulder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!", + "questFrogText": "Swamp of the Clutter Frog", + "questFrogNotes": "As you and your friends are slogging through the Swamps of Stagnation, @starsystemic points at a large sign. \"Stay on the path -- if you can.\"

\"Surely that isn't hard!\" @RosemonkeyCT says. \"It's broad and clear.\"

But as you continue, you notice that path is gradually overtaken by the muck of the swamp, laced with bits of strange blue debris and clutter, until it's impossible to proceed.

As you look around, wondering how it got this messy, @Jon Arjinborn shouts, \"Look out!\" An angry frog leaps from the sludge, clad in dirty laundry and lit by blue fire. You will have to overcome this poisonous Clutter Frog to progress!", + "questFrogCompletion": "The frog cowers back into the muck, defeated. As it slinks away, the blue slime fades, leaving the way ahead clear.

Sitting in the middle of the path are three pristine eggs. \"You can even see the tiny tadpoles and through the clear casing!\" @Breadstrings says. \"Here, you should take them.\"", + "questFrogBoss": "Clutter Frog", + "questFrogDropFrogEgg": "Frog (Egg)", + "questFrogUnlockText": "Unlocks purchasable Frog eggs in the Market", + "questSnakeText": "The Serpent of Distraction", + "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveler astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", + "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", + "questSnakeBoss": "Serpent of Distraction", + "questSnakeDropSnakeEgg": "Snake (Egg)", + "questSnakeUnlockText": "Unlocks purchasable Snake eggs in the Market" } \ No newline at end of file diff --git a/common/locales/en_GB/rebirth.json b/common/locales/en_GB/rebirth.json index da6612796f..e379042ec4 100644 --- a/common/locales/en_GB/rebirth.json +++ b/common/locales/en_GB/rebirth.json @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "You also earn an Achievement for beginning a new adventure!", "beReborn": "Be Reborn", "rebirthAchievement": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is <%= level %>. To stack this Achievement, begin your next new adventure when you've reached an even higher Level!", + "rebirthAchievement100": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is 100 or higher. To stack this Achievement, begin your next new adventure when you've reached at least 100!", "rebirthBegan": "Began a New Adventure", "rebirthText": "Began <%= rebirths %> New Adventures", "rebirthOrb": "Used an Orb of Rebirth to start over after attaining Level", + "rebirthOrb100": "Used an Orb of Rebirth to start over after attaining Level 100 or higher", "rebirthPop": "Begin a new character at Level 1 while retaining achievements, collectibles, and tasks with history.", "rebirthName": "Orb of Rebirth", "reborn": "Reborn, max level <%= reLevel %>" diff --git a/common/locales/en_GB/settings.json b/common/locales/en_GB/settings.json index 8a1895673d..543cc6636f 100644 --- a/common/locales/en_GB/settings.json +++ b/common/locales/en_GB/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "With this option set, the list of task tags will be hidden when you first open a task for editing.", "startAdvCollapsed": "Advanced Options in tasks start collapsed", "startAdvCollapsedPop": "With this option set, Advanced Options will be hidden when you first open a task for editing.", + "dontShowAgain": "Don't show this again", + "suppressLevelUpModal": "Don't show popup when gaining a level", + "suppressHatchPetModal": "Don't show popup when hatching a pet", + "suppressRaisePetModal": "Don't show popup when raising a pet into a mount", + "suppressStreakModal": "Don't show popup when attaining a Streak achievement", "showTour": "Show Tour", "restartTour": "Restart the introductory tour from when you first joined Habitica.", "showBailey": "Show Bailey", @@ -81,7 +86,6 @@ "emailChange1": "To change your email address, please send an email to", "emailChange2": "admin@habitica.com", "emailChange3": "including both your old and new email address as well as your User ID.", - "username": "Login Name", "usernameOrEmail": "Login Name or Email", "email": "Email", "registeredWithFb": "Registered with Facebook", @@ -89,7 +93,7 @@ "loginNameDescription2": "User->Profile", "loginNameDescription3": "to change the name that appears in your avatar and chat messages.", "emailNotifications": "Email Notifications", - "wonChallenge": "You Won a Challenge", + "wonChallenge": "You won a Challenge!", "newPM": "Received Private Message", "giftedGems": "Gifted Gems", "giftedGemsInfo": "<%= amount %> Gems - by <%= name %>", @@ -118,5 +122,29 @@ "promoCode": "Promo Code", "promoCodeApplied": "Promo Code Applied! Check your inventory", "promoPlaceholder": "Enter Promotion Code", - "displayInviteToPartyWhenPartyIs1": "Display Invite To Party button when party has 1 member." + "displayInviteToPartyWhenPartyIs1": "Display Invite To Party button when party has 1 member.", + "saveCustomDayStart": "Save Custom Day Start", + "registration": "Registration", + "addLocalAuth": "Add local authentication:", + "generateCodes": "Generate Codes", + "generate": "Generate", + "getCodes": "Get Codes", + "webhooks": "Webhooks", + "enabled": "Enabled", + "webhookURL": "Webhook URL", + "add": "Add", + "buyGemsGoldCap": "Cap raised to <%= amount %>", + "mysticHourglass": "<%= amount %> Mystic Hourglass", + "mysticHourglassText": "Mystic Hourglasses allow purchasing a previous month's Mystery Item set.", + "purchasedPlanId": "Recurring $<%= price %> each <%= months %> Month(s) (<%= plan %>)", + "purchasedPlanExtraMonths": "You have <%= months %> months of subscription credit.", + "consecutiveSubscription": "Consecutive Subscription", + "consecutiveMonths": "Consecutive Months:", + "gemCapExtra": "Gem Cap Extra:", + "mysticHourglasses": "Mystic Hourglasses:", + "paypal": "PayPal", + "amazonPayments": "Amazon Payments", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/en_GB/subscriber.json b/common/locales/en_GB/subscriber.json index d63e33ae6d..a6a0b70b6b 100644 --- a/common/locales/en_GB/subscriber.json +++ b/common/locales/en_GB/subscriber.json @@ -60,7 +60,7 @@ "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> and <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitle": "Mysterious Time Travellers", "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.", - "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 <%= linkStart %>here<%= linkEnd %>! If those don't satisfy you, perhaps you'd be interested in one of our fashionably futuristic Steampunk Item Sets?", + "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!", "subUpdateCard": "Update Card", diff --git a/common/locales/en_GB/tasks.json b/common/locales/en_GB/tasks.json index e8015169b1..48029f8f32 100644 --- a/common/locales/en_GB/tasks.json +++ b/common/locales/en_GB/tasks.json @@ -88,8 +88,7 @@ "fortifyText": "Fortify will return all your tasks to a neutral (yellow) state, as if you'd just added them, and top your Health off to full. This is great if all your red tasks are making the game too hard or all your blue tasks are making the game too easy. If starting fresh sounds much more motivating, spend the Gems and catch a reprieve!", "sureDelete": "Are you sure you want to delete this task?", "streakCoins": "Streak Bonus!", - "pushTaskToTop": "Push task to top", - "pushTaskToBottom": "Push task to bottom", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "Enter the task's title first.", "dailiesRestingInInn": "You're Resting in the Inn! Your Dailies will NOT hurt you tonight, but they WILL still refresh every day. If you're in a quest, you won't deal damage/collect items until you check out of the Inn, but you can still be injured by a Boss if your Party mates skip their own Dailies.", "habitHelp1": "Good Habits are things that you do often. They award Gold and Experience every time you click the <%= plusIcon %>.", diff --git a/common/locales/es/backgrounds.json b/common/locales/es/backgrounds.json index 4f57c14354..977cb05153 100644 --- a/common/locales/es/backgrounds.json +++ b/common/locales/es/backgrounds.json @@ -112,11 +112,25 @@ "backgroundStableNotes": "Cuida a las monturas del Establo de Habitica.", "backgroundTavernText": "Taberna de Habitica", "backgroundTavernNotes": "Visita la Taberna de Habitica.", - "backgrounds102015": "SET 17: Released October 2015", - "backgroundHarvestMoonText": "Harvest Moon", - "backgroundHarvestMoonNotes": "Cackle under the Harvest Moon.", - "backgroundSlimySwampText": "Slimy Swamp", - "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", - "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgrounds102015": "SET 17: lanzado en octobre del 2015", + "backgroundHarvestMoonText": "Luna de cosecha", + "backgroundHarvestMoonNotes": "Charla bajo la Luna de Cosecha", + "backgroundSlimySwampText": "Pantano Musgoso", + "backgroundSlimySwampNotes": "Cruza a través del Pantano musgoso", + "backgroundSwarmingDarknessText": "La Oscuridad de Enjambre", + "backgroundSwarmingDarknessNotes": "Temblar en la Oscuridad de Enjambre", + "backgrounds112015": "SET 18: Lanzado en Noviembre del 2015", + "backgroundFloatingIslandsText": "Islas Flotantes", + "backgroundFloatingIslandsNotes": "Salta a través de las Islas Flotantes", + "backgroundNightDunesText": "Dunas de Noche", + "backgroundNightDunesNotes": "Camina tranquilamente a través de las Dunas de noche ", + "backgroundSunsetOasisText": "Puesta en el Oasis", + "backgroundSunsetOasisNotes": "Toma sol en la Puesta del Oasis", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/es/challenge.json b/common/locales/es/challenge.json index ac3c230a88..f497c6b2f8 100644 --- a/common/locales/es/challenge.json +++ b/common/locales/es/challenge.json @@ -59,5 +59,9 @@ "challengeNotEnoughGems": "No tienes suficientes Gemas para publicar este Desafío.", "noPermissionEditChallenge": "No tienes permiso para editar este desafío", "noPermissionDeleteChallenge": "No tienes permiso para eliminar este desafío", - "noPermissionCloseChallenge": "No tienes permiso para cerrar este desafío" + "noPermissionCloseChallenge": "No tienes permiso para cerrar este desafío", + "congratulations": "Felicidades!", + "hurray": "Muy bien!", + "noChallengeOwner": "sin dueño", + "noChallengeOwnerPopover": "Este Desafío no tiene dueño o la persona que lo creó borró su cuenta." } \ No newline at end of file diff --git a/common/locales/es/character.json b/common/locales/es/character.json index 43ff397cd4..55a2804b71 100644 --- a/common/locales/es/character.json +++ b/common/locales/es/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "Bonus de Clase", "battleGear": "Equipo de Batalla", "battleGearText": "Este es el equipo que llevarás en batalla; los puntos que otorguen se tendrán en cuenta cuando interactúes con tus tareas.", + "autoEquipBattleGear": "Auto-equipar nuevo equipo", "costume": "Disfraz", "costumeText": "Si prefieres el aspecto de otro equipo al que estás usando, marca la casilla «Usar Disfraz» para llevarlo como disfraz mientras usas tu equipo de batalla debajo.", "useCostume": "Llevar Disfraz", @@ -64,6 +65,10 @@ "ultimGearText": "Has conseguido el conjunto de armas y armadura de mayor nivel en las siguientes clases:", "level": "Nivel", "levelUp": "¡Subiste de Nivel!", + "gainedLevel": "Has ganado un nivel!", + "leveledUp": "Por cumplir tus tareas en la vida real has subido al Nivel <%= level %>!", + "fullyHealed": "Has recobrado tu salud!", + "huzzah": "Oh si!", "mana": "Maná", "hp": "PV", "mp": "PM", diff --git a/common/locales/es/content.json b/common/locales/es/content.json index 302a1ddfe9..af6eb06d84 100644 --- a/common/locales/es/content.json +++ b/common/locales/es/content.json @@ -22,7 +22,7 @@ "dropEggFoxAdjective": "un astuto", "dropEggFlyingPigText": "Cerdo volador", "dropEggFlyingPigMountText": "Cerdo volador", - "dropEggFlyingPigAdjective": "a whimsical", + "dropEggFlyingPigAdjective": "un caprichoso ", "dropEggDragonText": "Dragón", "dropEggDragonMountText": "Dragón", "dropEggDragonAdjective": "un poderoso", @@ -84,7 +84,7 @@ "questEggSheepMountText": "Oveja", "questEggSheepAdjective": "una lanuda", "questEggCuttlefishText": "Calamar", - "questEggCuttlefishMountText": "Cuttlefish", + "questEggCuttlefishMountText": "Calamar", "questEggCuttlefishAdjective": "a cuddly", "questEggWhaleText": "Ballena", "questEggWhaleMountText": "Ballena", @@ -95,7 +95,13 @@ "questEggHorseText": "Caballo", "questEggHorseMountText": "Caballo", "questEggHorseAdjective": "un galopante", - "eggNotes": "Find a hatching potion to pour on this egg, and it will hatch into <%= eggAdjective(locale) %> <%= eggText(locale) %>.", + "questEggFrogText": "Rana", + "questEggFrogMountText": "Rana", + "questEggFrogAdjective": "a princely", + "questEggSnakeText": "Serpiente", + "questEggSnakeMountText": "Serpiente", + "questEggSnakeAdjective": "a slithering", + "eggNotes": "Encuentra una poción de eclosión para verter en este huevo y eclosionará en <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "Base", "hatchingPotionWhite": "Blanco", "hatchingPotionDesert": "del Desierto", diff --git a/common/locales/es/faq.json b/common/locales/es/faq.json index eae6258920..57b2f04d72 100644 --- a/common/locales/es/faq.json +++ b/common/locales/es/faq.json @@ -2,21 +2,21 @@ "frequentlyAskedQuestions": "Preguntas frecuentes", "faqQuestion0": "No entiendo nada, ¿dónde hay un resumen?", "iosFaqAnswer0": "Primero, tienes que añadir las tareas que quieras realizar en tu día a día. Entonces, a medida que cumplas esas tareas en la vida real y las marques como completadas, ganarás experiencia y oro. El oro sirve para comprar equipos y otros objetos, y para obtener recompensas que puedes personalizar. La experiencia hace que tu personaje suba de nivel y desbloquee contenidos como mascotas, habilidades y misiones. Puedes cambiar el aspecto de tu personaje en Menú > Personalizar avatar.\n\nEstas son las acciones básicas: haz clic en el signo más (+) de la esquina superior derecha para añadir una tarea. Si quieres editar una tarea, pulsa en ella. Para eliminarla, desliza el dedo hacia la izquierda sobre ella. Puedes filtrar las tareas por etiquetas en la esquina superior izquierda, y expandir o contraer listas pulsando en el icono de fracción.", - "webFaqAnswer0": "Primero, tienes que añadir las tareas que quieras realizar en tu día a día. Entonces, a medida que cumplas esas tareas en la vida real y las marques como completadas, ganarás experiencia y oro. El oro sirve para comprar equipos y otros objetos, y para obtener recompensas que puedes personalizar. La experiencia hace que tu personaje suba de nivel y desbloquee contenidos como mascotas, habilidades y misiones. Si quieres saber más detalles, la wiki tiene un buen resumen del juego, paso por paso, [aquí](http://habitica.wikia.com/wiki/Habitica_Wiki).", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", "faqQuestion1": "¿Cómo puedo establecer mis tareas?", - "iosFaqAnswer1": "Buenos Hábitos (los con +) son tareas que puedas muchas veces un día, como comer vegetales. Malos Hábitos (los con -) son tareas que debas evitar, como morderse las uñas. Hábitos con + y - tienen una opción buena y una la opción mala, como subir las escaleras o tomar el ascensor. Buenos Hábitos conceden experiencia y oro. Malos Hábitos restan la salud.", - "webFaqAnswer1": "Good Habits (the ones with a ) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a ) are tasks that you should avoid, like biting nails. Habits with a and a have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n

\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n

\n To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.", + "iosFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.", + "webFaqAnswer1": "Los Buenos Hábitos (aquellos con un ) son tareas que puede realizar varias veces al día, como por ejemplo, comer vegetales. Los Malos Hábitos (aquellos con un ) son tareas que debería evitar, como por ejemplo, morderse las uñas. Los Hábitos con un y un ofrecen una buena y una mala elección, como subir por las escaleras en oposición a usar el ascensor. Los Buenos Hábitos otorgan Experiencia y Oro. Los Malos Hábitos restan Salud.\n

\nLas Diarias son tareas que debe realizar cada día, como por ejemplo lavarse los dientes o revisar el correo electrónico. Puede ajustar los días en los que debe realizar una Diaria haciendo click en el lápiz para editar la tarea. Si se salta una Daria que está aún pendiente, su avatar recibirá daño durante la noche. ¡Tenga cuidado de no añadir demasiadas Diarias al mismo tiempo!\n

\nLas Tareas Pendientes son su lista de cosas por hacer. Completar una Tarea Pendiente le hará ganar Oro y Experiencia. Nunca perderás Salud por no completar las Tareas Pendientes. Puede incluir una fecha límite a una Tarea Pendiente haciendo click en el icono del lápiz para editarla.", "faqQuestion2": "¿Puedo ver algunas tareas de ejemplo?", - "iosFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n

\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", - "webFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", + "iosFaqAnswer2": "Esta wiki tiene cuatro listas de tareas de muestras para usar como inspiración.\n

\n* [", + "webFaqAnswer2": "Esta wiki tiene cuatro listas de tareas de muestras para usar como inspiración.\n* [Hábitos de muestras](http://habitica.wikia.com/wiki/Sample_Habits)\n* [Diarias de muestras](http://habitica.wikia.com/wiki/Sample_Dailies)\n* [Tareas pendientes de muestras](http://habitica.wikia.com/wiki/Sample_To-Dos)\n* [Recompensas personales de muestras](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", "faqQuestion3": "¿Por qué las tareas cambian de color?", - "iosFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it's a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", - "webFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it’s a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", + "iosFaqAnswer3": "Tus tareas cambian de color según que tan bien las cumplas! Cada tarea nueva empieza neutralmente con el color amarillo. Realiza tareas Diarias o Hábitos positivos consecutivamente y se volverán azules. Descuida una tarea Diaria o realiza un Habito negativo y se volverán rojos. Entre mas roja sea una tarea, más recompensas recibirás, pero si son tareas Diarias o Hábitos negativos, te harán mas daño! Esto ayuda a motivarte a realizar las tareas que te están dando problemas.", + "webFaqAnswer3": "Tus tareas cambian de color según que tan bien las cumplas! Cada tarea nueva empieza neutralmente con el color amarillo. Realiza tareas Diarias o Hábitos positivos consecutivamente y se volverán azules. Descuida una tarea Diaria o realiza un Habito negativo y se volverán rojos. Entre mas roja sea una tarea, más recompensas recibirás, pero si son tareas Diarias o Hábitos negativos, te harán mas daño! Esto ayuda a motivarte a realizar las tareas que te están dando problemas.", "faqQuestion4": "¿Por qué mi avatar pierde salud y cómo puedo recuperarla?", - "iosFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you tap a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your Party and one of your Party mates did not complete all their Dailies, the Boss will attack you.\n\n The main way to heal is to gain a level, which restores all your health. You can also buy a Health Potion with gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a Party with a Healer, they can heal you as well.", - "webFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you click a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your party and one of your party mates did not complete all their Dailies, the Boss will attack you.\n

\n The main way to heal is to gain a level, which restores all your Health. You can also buy a Health Potion with Gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a party (under Social > Party) with a Healer, they can heal you as well.", + "iosFaqAnswer4": "Existen varias maneras de perder salud en el juego. Primero, si dejas tareas Diarias incompletas tras pasar la medianoche, recibirás daño. Segundo, si le das click a un mal Habito, también perderás salud. Finalmente, si estas en una batalla de jefe con tu grupo y uno de los miembros de grupo no completa todas sus tareas Diarias, el jefe te atacará.\n\n La mejor manera de recuperar tu salud es subiendo de nivel, ya que recupera tu salud al máximo. También, puedes comprar una poción de salud con oro desde la columna de Recompensas. Ademas, en el nivel 10 o más, puedes escoger en volverte un Sanador y aprenderás habilidades de curamiento. Si estas en un grupo con un Sanador, ellos también te pueden sanar.", + "webFaqAnswer4": "Existen varias maneras de perder salud en el juego. Primero, si dejas tareas Diarias incompletas tras pasar la medianoche, recibirás daño. Segundo, si le das click a un mal Habito, también perderás salud. Finalmente, si estas en una batalla de jefe con tu grupo y uno de los miembros de grupo no completa todas sus tareas Diarias, el jefe te atacará.\n

\nLa mejor manera de recuperar tu salud es subiendo de nivel, ya que recupera tu salud al máximo. También, puedes comprar una poción de salud con oro desde la columna de Recompensas. Ademas, en el nivel 10 o más, puedes escoger en volverte un Sanador y aprenderás habilidades de curamiento. Si estas en un grupo ( en Social> Grupo) con un Sanador, ellos también te pueden sanar.", "faqQuestion5": "¿Cómo puedo jugar a Habitica con mis amigos?", - "iosFaqAnswer5": "The best way is to invite them to a Party with you, via the [website](https://habitica.com/#/options/groups/party)! We'll add the ability to create a Party from this app soon, but in the meantime you can use the [website](https://habitica.com/#/options/groups/party). Parties can go on quests, battle monsters, and cast skills to support each other. On the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", + "iosFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on quests, battle monsters, and cast skills to support each other. Go to Menu > Party and click \"Create New Party\" if you don't already have a Party. Then tap on the Members list, and tap Invite in the upper right-hand corner to invite your friends by entering their User ID (a string of numbers and letters that they can find under Settings > Account Details on the app, and Settings > API on the website). On the website, you can also invite friends via email, which we will add to the app in a future update.\n\nOn the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", "webFaqAnswer5": "The best way is to invite them to a party with you, under Social > Party! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n

\n For more detailed info, check out the wiki pages on [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).", "faqQuestion6": "¿Cómo puedo encontrar una mascota o una montura?", "iosFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch Egg.\" Then choose a hatching potion to determine its color! Go to Menu > Pets to equip your new Pet to your avatar by clicking on it. \n\n You can also grow your Pets into Mounts by feeding them under Menu > Pets. Tap on a Pet, and then select \"Feed Pet\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Menu > Mounts and tap on it to equip it to your avatar.\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", @@ -28,14 +28,17 @@ "iosFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Use Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in a special section in the Rewards Column. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You’ll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "faqQuestion9": "¿Cómo peleo con los monstruos y hago misiones?", - "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party on the [website](https://habitica.com/#/options/groups/party), you'll be rewarded with the Basi-List Scroll! (We will add this feature to the app in a future update.)\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for gold and gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", + "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for Gold and Gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "webFaqAnswer9": "First, you need to join or start a party (under Social > Party). Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n

\n Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are three ways to get a scroll:\n

\n * When you invite people to your party, you’ll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Page (Inventory > Quests) for Gold and Gems.\n

\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your party at the same time that you damage the Boss.\n

\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "faqQuestion10": "¿Qué son las gemas, y cómo las consigo?", + "faqQuestion10": "¿Que son gemas, y como puedo obtener ellas?", "iosFaqAnswer10": "Gems are purchased with real money by tapping on the gem icon in the header. When people buy gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying gems directly, there are three other ways players can gain gems:\n\n * Win a Challenge on the [website](https://habitica.com) that has been set up by another player under Social > Challenges. (We will be adding Challenges to the app in a future update!)\n * Subscribe on the [website](https://habitica.com/#/options/settings/subscription) and unlock the ability to buy a certain number of gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with gems do not offer any statistical advantages, so players can still make use of the app without them!", "webFaqAnswer10": "Gems are [purchased with real money](https://habitica.com/#/options/settings/subscription), although [subscribers](https://habitica.com/#/options/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n

\n In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n

\n * Win a Challenge that has been set up by another player under Social > Challenges.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", "faqQuestion11": "Como reportó un bug o solicitó una característica ", - "iosFaqAnswer11": "You can report a bug, request a feature, or send feedback under Menu > Report a Bug and Menu > Send Feedback! We'll do everything we can to assist you.", + "iosFaqAnswer11": "Puedes reportar un bug, solicitar una característica, o ", "webFaqAnswer11": "Bug reports are collected on GitHub. Go to [Help > Report a Bug](https://github.com/HabitRPG/habitrpg/issues/2760) and follow the instructions. Don't worry, we'll get you fixed up soon!\n

\n Feature requests are collected on Trello. Go to [Help > Request a Feature](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) and follow the instructions. Ta-da!", + "faqQuestion12": "¿Cómo puedo combatir un jefe de mundo?", + "iosFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", + "webFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n

\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n

\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n

\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", "iosFaqStillNeedHelp": "Si tienes una pregunta que no est´å en esta lista, ¡ven a preguntar en la Taberna debajo de Menú > Taberna! Estamos felices a ayudar.", - "webFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the [Newbies Guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help." + "webFaqStillNeedHelp": "Si tienes alguna pregunta que no esté en esta lista, ven a preguntar al Gremio [The Newbies] (https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! Estaremos felices de ayudar." } \ No newline at end of file diff --git a/common/locales/es/front.json b/common/locales/es/front.json index 0edc39a9f3..c1fb40679f 100644 --- a/common/locales/es/front.json +++ b/common/locales/es/front.json @@ -74,7 +74,7 @@ "infhQuote": "[Habitica] realmente me ha ayudado a estructurar mi vida universitaria", "invalidEmail": "Se requiere una dirección de correo electrónico válida para resetear la contraseña.", "irishfeet123Quote": "He tenido terribles hábitos limpiando mi casa completamente tras las comidas y dejándome tazas por todas partes. ¡[Habitica] ha curado eso!", - "joinOthers": "¡Únete a 250.000 personas haciendo divertido el cumplir metas!", + "joinOthers": "Join <%= userCount %> people making it fun to achieve goals!", "kazuiQuote": "Antes de [Habitica], estaba atascado con mi tesis, así como insatisfecho con mi disciplina personal en cuanto a tareas domésticas y cosas como aprender vocabulario y estudiar teoría de Go. Resulta que romper estas tareas en pequeñas y manejables listas es exactamente lo que me mantiene motivado y constantemente trabajando.", "landingadminlink": "paquetes administrativos", "landingend": "¿Todavía no estás convencido?", @@ -179,5 +179,14 @@ "businessInquiries": "Consultas de Empresas", "merchandiseInquiries": "Consultas de Merchandise", "marketingInquiries": "Consultas de Marketing/Social Media", - "tweet": "Tuitear" + "tweet": "Tuitear", + "apps": "Aplicaciones", + "notifyAndroidApp": "Quieres que te notifiquemos cuando nuestra aplicación para Android esté lista? Suscríbete a esta lista de correo!", + "checkOutIOSApp": "Revisa nuestra nueva aplicación en iOS!", + "imagine1": "Imagine if improving your life were as fun as playing a game.", + "landingCopy1": "Progresa en el juego completando tareas de la vida real.", + "landingCopy2": "Battle monsters with friends to stay accountable to your goals.", + "landingCopy3": "Join over <%= userCount %> people having fun as they improve their lives.", + "alreadyHaveAccount": "Ya tengo una cuenta!", + "getStartedNow": "Empieza ahora!" } \ No newline at end of file diff --git a/common/locales/es/gear.json b/common/locales/es/gear.json index 56021bcf24..bfde844fb5 100644 --- a/common/locales/es/gear.json +++ b/common/locales/es/gear.json @@ -149,13 +149,19 @@ "weaponArmoireRancherLassoText": "Lazo de ranchero", "weaponArmoireRancherLassoNotes": "El lazo, la herramienta perfecta para rodear a la gente y pelearse con ella. Suma <%= str %> de fuerza, <%= per %> de percepción y <%= int %> de inteligencia. Ropero Encantado: conjunto de ranchero (artículo 3 de 3).", "weaponArmoireMythmakerSwordText": "Espada de creador de mitos", - "weaponArmoireMythmakerSwordNotes": "Por humilde que pueda parecer, esta espada ha dado lugar a numerosos héroes míticos. Suma <%= attrs %> de percepción y <%= attrs %> de fuerza. Ropero Encantado: conjunto de toga dorada (artículo 3 de 3).", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Cayado de hierro", - "weaponArmoireIronCrookNotes": "Moldeado con fiereza a golpe de martillo, este cayado de hierro es muy útil para arrear a las ovejas. Suma <%= attrs %> de percepción y <%= attrs %> de fuerza. Ropero Encantado: conjunto de hierro enastado (artículo 3 de 3).", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Báculo de Alas de Oro", "weaponArmoireGoldWingStaffNotes": "Este báculo bate sus alas y las gira continuamente. Suma <%= attrs %> a todos los atributos. Ropero Encantado: artículo independiente.", "weaponArmoireBatWandText": "Varita de Murciélago", "weaponArmoireBatWandNotes": "This wand can turn any task into a bat! Wave it about and watch them fly away. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireShepherdsCrookText": "Shepherd's Crook", + "weaponArmoireShepherdsCrookNotes": "Useful for herding gryphons. Increases Constitution by <%= con %>. Enchanted Armoire: Shepherd Set (Item 1 of 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "armadura", "armorBase0Text": "Ropa normal", "armorBase0Notes": "Ropa normal. No otorga ningún beneficio.", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "Ropa Ridícula de Fiesta", "armorSpecialBirthday2015Notes": "¡Feliz Cumpleaños, Habitica! Vístete con esta Ropa Ridícula de Fiesta para celebrar este maravilloso día. No confiere ningún beneficio.", "armorSpecialGaymerxText": "Armadura de Guerrero del Arco Iris", - "armorSpecialGaymerxNotes": "¡Con motivo de la temporada del orgullo y de GaymerX, este armadura especial está decorada con un radiante y colorido arco iris! GaymerX es una convención dedicada a los videojuegos y al colectivo LGBTQ, está abierta a todo el mundo y tiene lugar en el InterContinental, en el centro de San Francisco, del 11 al 13 de julio. Esta armadura no proporciona ningún beneficio.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "Traje Elegante de Gato", "armorSpecialSpringRogueNotes": "Impecablemente cuidado. Aumenta la percepción en <%= per %>. Equipo de Primavera Edición Limitada 2014.", "armorSpecialSpringWarriorText": "Armadura de Acero de Trébol.", @@ -307,6 +313,8 @@ "armorMystery201508Notes": "Corre como el rayo con este disfraz de guepardo tan mullidito. No aporta ningún beneficio. Artículo de suscriptor de agosto del 2015.", "armorMystery201509Text": "Disfraz de Hombre lobo", "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Traje Steampunk", "armorMystery301404Notes": "¡Sofisticado y elegante! No otorga ningún beneficio. Artículo de suscriptor de febrero 3015.", "armorArmoireLunarArmorText": "Armadura lunar reconfortante", @@ -321,6 +329,12 @@ "armorArmoireHornedIronArmorNotes": "Moldeada con fiereza a golpe de martillo, esta armadura de hierro con cuernos es casi imposible de romper. Suma <%= con %> de constitución y <%= per %> de percepción. Ropero Encantado: conjunto de hierro enastado (artículo 2 de 3).", "armorArmoirePlagueDoctorOvercoatText": "Abrigo de médico de la peste negra", "armorArmoirePlagueDoctorOvercoatNotes": "El auténtico abrigo de los médicos que combatieron la peste negra de la procrastinación. Suma <%= int %> de inteligencia, <%= str %> de fuerza y <%= con %> de constitución. Ropero Encantado: conjunto de médico de la peste negra (artículo 3 de 3).", + "armorArmoireShepherdRobesText": "Shepherd Robes", + "armorArmoireShepherdRobesNotes": "The fabric is cool and breathable, perfect for a hot day herding gryphons in the desert. Increases Strength and Perception by <%= attrs %> each. Enchanted Armoire: Shepherd Set (Item 2 of 3).", + "armorArmoireRoyalRobesText": "Royal Robes", + "armorArmoireRoyalRobesNotes": "Wonderful ruler, rule all day long! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 3 of 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "cubrecabeza", "headBase0Text": "Sin casco", "headBase0Notes": "Sin equipo de cabeza.", @@ -441,7 +455,7 @@ "headSpecialFall2015HealerText": "Hat of Frog", "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", "headSpecialGaymerxText": "Casco de Guerrero de Arco Iris", - "headSpecialGaymerxNotes": "¡Con motivo de la temporada del orgullo y de GaymerX, este armadura especial está decorada con un radiante y colorido arco iris! GaymerX es una convención dedicada a los videojuegos y al colectivo LGBTQ, está abierta a todo el mundo y tiene lugar en el InterContinental, en el centro de San Francisco, el 11-13 de julio. Esta armadura no proporciona ningún beneficio.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "Casco alado", "headMystery201402Notes": "¡Esta diadema alada imbuye a su portador con la velocidad del viento! No confiere ningún beneficio. Equipo de suscriptor Febrero 2014.", "headMystery201405Text": "Llama de Mente", @@ -464,6 +478,8 @@ "headMystery201508Notes": "¡Mira qué rizado y calentito es este gorro de guepardo! No aporta ningún beneficio. Artículo de suscriptor de agosto del 2015.", "headMystery201509Text": "Máscara de Hombre lobo", "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 Subscriber Item.", "headMystery301404Text": "Sombrero de copa sofisticado", "headMystery301404Notes": "¡Un sofisticado sombrero de copa solo para los más refinados caballeros! No otorga ningún beneficio. Artículo de Suscriptor de Enero del 3015", "headMystery301405Text": "Sombrero de copa básico", @@ -481,7 +497,7 @@ "headArmoireBlueHairbowText": "Lazo azul", "headArmoireBlueHairbowNotes": "Este bonito lazo rojo te hará perspicaz, fuerte e inteligente. Suma <%= per %> de percepción, <%= con %> de constitución y <%= int %> de inteligencia. Ropero Encantado: artículo independiente.", "headArmoireRoyalCrownText": "Corona real", - "headArmoireRoyalCrownNotes": "¡Viva nuestro fuerte y poderoso gobernante! Suma <%= str %> de fuerza. Ropero Encantado: artículo independiente.", + "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Royal Set (Item 1 of 3).", "headArmoireGoldenLaurelsText": "Corona de laurel dorado", "headArmoireGoldenLaurelsNotes": "Esta corona de laurel dorado recompensa a quienes han logrado vencer a sus malos hábitos. Suma <%= attrs %> de percepción y <%= attrs %> de constitución. Ropero Encantado: conjunto de toga dorada (artículo 2 de 3).", "headArmoireHornedIronHelmText": "Casco de hierro enastado", @@ -496,6 +512,12 @@ "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", "headArmoireOrangeCatText": "Sombrero de Gato Naranja", "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireBlueFloppyHatText": "Blue Floppy Hat", + "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireShepherdHeaddressText": "Shepherd Headdress", + "headArmoireShepherdHeaddressNotes": "Sometimes the gryphons that you herd like to chew on this headdress, but it makes you seem more intelligent nonetheless. Increases Intelligence by <%= int %>. Enchanted Armoire: Shepherd Set (Item 3 of 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "objeto para la mano del escudo", "shieldBase0Text": "Sin equipamiento en la mano del escudo", "shieldBase0Notes": "Sin escudo o arma secundaria.", @@ -579,6 +601,8 @@ "shieldArmoireGladiatorShieldNotes": "Para ser gladiador... bueno, eso, que basta con que aporrees al enemigo con tu escudo. Suma <%= con %> de constitución y <%= str %> de fuerza. Ropero Encantado: conjunto de gladiador (artículo 3 de 3).", "shieldArmoireMidnightShieldText": "Escudo de Medianoche", "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "shieldArmoireRoyalCaneText": "Royal Cane", + "shieldArmoireRoyalCaneNotes": "Hooray for the ruler, worthy of song! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 2 of 3).", "back": "Accesorio en la Espalda", "backBase0Text": "Sin Accesorio en la Espalda", "backBase0Notes": "Sin Accesorio en la Espalda", @@ -592,6 +616,8 @@ "backMystery201504Notes": "Bzzz, bzzz, bzzz! Vuela de tarea en tarea. No otorga beneficios. Item de suscriptores de Abril 2015", "backMystery201507Text": "Tabla de surf guay", "backMystery201507Notes": "¡Surfea sobre las Mareas del Esmero y domina las olas de la Bahía Vagancia! No aporta ningún beneficio. Artículo del suscriptor de julio del 2015.", + "backMystery201510Text": "Goblin Tail", + "backMystery201510Notes": "Prehensile and powerful! Confers no benefit. October 2015 Subscriber Item.", "backSpecialWonderconRedText": "Capa del poder", "backSpecialWonderconRedNotes": "Castañea con fuerza y belleza. No confiere beneficio. Artículo Edición Especial Convención.", "backSpecialWonderconBlackText": "Capa Sigilosa", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "Estas poderosas astas cambian de color con las hojas. No otorga ningún beneficio. Artículo de Suscriptor de Septiembre del 2014", "headAccessoryMystery201502Text": "Alas del Pensamiento", "headAccessoryMystery201502Notes": "¡Deja volar tu imaginación! No otorga ningún beneficio. Artículo de suscriptor de febrero 2015.", + "headAccessoryMystery201510Text": "Goblin Horns", + "headAccessoryMystery201510Notes": "These fearsome horns are slightly slimy. Confers no benefit. October 2015 Subscriber Item.", "headAccessoryMystery301405Text": "Gafas para la Cabeza", "headAccessoryMystery301405Notes": "\"Las gafas son para los ojos\" dijeron, \"Nadie quiere gafas que solo se puedan llevar en la cabeza\" dijeron. ¡Ja! ¡Demuéstrales que eso no es así! No confiere ningún beneficio. Artículo de suscriptor de agosto de 3015.", "eyewear": "Gafas", diff --git a/common/locales/es/generic.json b/common/locales/es/generic.json index 629766344e..c72246da4c 100644 --- a/common/locales/es/generic.json +++ b/common/locales/es/generic.json @@ -28,7 +28,7 @@ "market": "Mercado", "subscriberItem": "Objeto Misterioso", "newSubscriberItem": "Nuevo Objeto Misterioso", - "subscriberItemText": "Cada mes, los suscriptores recibirán un objeto misterioso. Esto normalmente sucede aproximadamente una semana antes del final de mes. Revisa la página de la wiki sobre \"Objetos Misteriosos\" para ver la fecha exacta.", + "subscriberItemText": "Each month, subscribers will receive a mystery item. This is usually released about one week before the end of the month. See the wiki's 'Mystery Item' page for more information.", "all": "Todo", "none": "Ninguno", "or": "O", @@ -69,8 +69,9 @@ "habiticaDayPluralText": "¡ Celebró <%= number %> Bautizos! Gracias por ser un magnífico usuario.", "achievementDilatory": "Salvador de Dilatoria", "achievementDilatoryText": "¡Ayudó a derrotar al Dread Drag'on de Dilatoria durante el evento Summer Splash del 2014!", - "costumeContest": "Concurso de Disfraces 2014", - "costumeContestText": "Participó en el Concurso de Disfraces de Halloween 2014. Mira otra entradas en blog.habitica.com/tagged/cosplay!", + "costumeContest": "Costume Contestant", + "costumeContestText": "Participated in the Habitoween Costume Contest. See some of the entries on the Habitica blog!", + "costumeContestTextPlural": "Participated in <%= number %> Habitoween Costume Contests. See some of the entries on the Habitica blog!", "memberSince": "- Miembro desde", "lastLoggedIn": "- Última conexión", "notPorted": "Esta función no se ha traido del sitio original", @@ -79,6 +80,7 @@ "errorUpCase": "ERROR:", "newPassSent": "Nueva contraseña enviada.", "serverUnreach": "Error en la conexión al servidor.", + "requestError": "Yikes, an error occurred! Please reload the page, your last action may not have been saved correctly.", "seeConsole": "Si el eror persiste, por favor reportelo en Ayuda> Notificar un error. Si eres familiar con la consola de tu navegador, por favor incluye los mensajes de error.", "error": "Error", "menu": "Menú", @@ -110,9 +112,9 @@ "December": "Diciembre", "dateFormat": "Formato de Fecha", "achievementStressbeast": "Salvador de Stoïkalm", - "achievementStressbeastText": "Helped defeat the Abominable Stressbeast during the 2014 Winter Wonderland Event!", - "achievementBurnout": "Savior of the Flourishing Fields", - "achievementBurnoutText": "Helped defeat Burnout and restore the Exhaust Spirits during the 2015 Fall Festival Event!", + "achievementStressbeastText": "¡Ayudó a derrotar a la Abominable Bestia del Estrés durante el evento Winter Wonderland de 2014!", + "achievementBurnout": "Salvador de los Campos Florecientes", + "achievementBurnoutText": "¡Ayudó a derrotar al Burnout y restaurar los Espíritus del Cansancio durante el evento Fall Festival de 2015!", "checkOutProgress": "¡Comprobar mi progreso en Habitica!", "cardReceived": "¡Recibiste una tarjeta!", "cardReceivedFrom": "<%= cardType %> de <%= userName %>", @@ -133,5 +135,17 @@ "thankyou2": "¡Un millón de gracias!", "thankyou3": "Estoy muy agradecido - ¡gracias!", "thankyouCardAchievementTitle": "Agradablemente Agradecido", - "thankyouCardAchievementText": "¡Gracias por las gracias! Envió o recibió <%= cards %> tarjetas de agradecimiento." + "thankyouCardAchievementText": "¡Gracias por las gracias! Envió o recibió <%= cards %> tarjetas de agradecimiento.", + "streakAchievement": "You earned a streak achievement!", + "firstStreakAchievement": "21-Day Streak", + "streakAchievementCount": "<%= streaks %> 21-Day Streaks", + "twentyOneDays": "You've completed your Daily for 21 days in a row!", + "dontBreakStreak": "Amazing job. Don't break the streak!", + "dontStop": "Don't Stop Now!", + "levelUpShare": "I leveled up in Habitica by improving my real-life habits!", + "questUnlockShare": "I unlocked a new quest in Habitica!", + "hatchPetShare": "I hatched a new pet by completing my real-life tasks!", + "raisePetShare": "I raised a pet into a mount by completing my real-life tasks!", + "wonChallengeShare": "I won a challenge in Habitica!", + "achievementShare": "I earned a new achievement in Habitica!" } \ No newline at end of file diff --git a/common/locales/es/groups.json b/common/locales/es/groups.json index 19ddf27afc..ce51ac4589 100644 --- a/common/locales/es/groups.json +++ b/common/locales/es/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "Dejar la Posada", "innCheckIn": "Descansar en la Posada", "innText": "Estás descansando en la Posada. Mientras sigas en ella, tus tareas diarias no te causarán daños al final del día, pero seguirán restableciéndose cada día. Por otra parte, ten cuidado: si estás participando en alguna misión contra un jefe, el jefe seguirá haciéndote daño cuando tus compañeros de grupo no cumplan sus tareas diarias, a menos que ellos también estén en la Posada. Además, el daño que provoques al jefe (o los objetos que recopiles) no tendrá efecto hasta que salgas de la Posada.", + "innTextBroken": "You're resting in the Inn, I guess... While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day... If you are participating in a Boss Quest, the Boss will still damage you for your party mates' missed Dailies... unless they are also in the Inn... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn... so tired...", "lfgPosts": "Post en la busqueda de Grupo (Se busca Grupo)", "tutorial": "Tutorial", "glossary": "Glosario", @@ -145,5 +146,6 @@ "partyEmpty": "No hay nadie más en este grupo. ¡Invita a tus amigos!", "partyChatEmpty": "El chat de este grupo está vacío. Escribe un mensaje en el cuadro de arriba para romper el hielo.", "guildChatEmpty": "El chat de este gremio está vacío. Escribe un mensaje en el cuadro de arriba para empezar una conversación.", - "possessiveParty": "Grupo de <%= name %>" + "possessiveParty": "Grupo de <%= name %>", + "requestAcceptGuidelines": "If you would like to post messages in the Tavern or any party or guild chat, please first read our <%= linkStart %>Community Guidelines<%= linkEnd %> and then click the button below to indicate that you accept them." } \ No newline at end of file diff --git a/common/locales/es/limited.json b/common/locales/es/limited.json index 82524a3d35..c83ff6be9a 100644 --- a/common/locales/es/limited.json +++ b/common/locales/es/limited.json @@ -21,6 +21,7 @@ "valentineCardAchievementText": "Oh, ¡tú y tu amigo debéis preocuparos mucho el uno por el otro! <%= cards %> Tarjetas del Día de San Valentín Enviadas o Recibidas.", "polarBear": "Oso Polar", "turkey": "Pavo", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "Cachorro de Oso Polar", "jackolantern": "Calabaza de Halloween", "seasonalShop": "Tienda Estacional", @@ -30,6 +31,7 @@ "seasonalShopText": "¡¡ Bienvenido a la tienda de temporada !! Estamos almacenando bienes para la Temporada de Primavera Edición Estacional en este momento. Todo lo que hay aquí estará disponible para comprar durante el evento Spring Fling cada año, pero no abrimos hasta el 30 de Abril, así que asegúrate de abastecerte ahora, ¡o tendrás que esperar un año para poder comprar estos artículos de nuevo!", "seasonalShopSummerText": "¡¡Te damos la bienvenida a la Tienda Estacional!! Actualmente, tenemos en el almacén diversos artículos de la Edición de Temporada estival. Todo lo que ves aquí se puede comprar durante el Salpicón Veraniego que se celebra cada año. Solamente estaremos abiertos hasta el 31 de julio: si quieres algo, agénciatelo cuanto antes o ¡tendrás que esperar un año entero!", "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31, so be sure to stock up now, or you'll have to wait a year to buy these items again!", + "seasonalShopFallTextBroken": "Oh.... Welcome to the Seasonal Shop... We're stocking autumn Seasonal Edition goodies, or something... Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31... I guess you should to stock up now, or you'll have to wait... and wait... and wait... *sigh*", "seasonalShopRebirth": "Si has usado la Orbe de Renacimiento, puedes volver a comprar este equipo en la columna Recompensas. Al principio, solamente podrás comprar los artículos de la clase que tengas en ese momento (la predeterminada es Guerrero), pero no temas: puedes conseguir los artículos de las demás clases si cambias de clase.", "candycaneSet": "Bastón de Caramelo (Mago)", "skiSet": "Ski-asesino (Ladrón)", diff --git a/common/locales/es/messages.json b/common/locales/es/messages.json index 36216c6e62..391000b864 100644 --- a/common/locales/es/messages.json +++ b/common/locales/es/messages.json @@ -5,7 +5,7 @@ "messageTagNotFound": "Etiqueta no encontrada.", "messagePetNotFound": ":pet no encontrada en user.items.pets", "messageFoodNotFound": ":food no encontrada en user.items.food", - "messageNotAvailable": "This item is not currently available for purchase.", + "messageNotAvailable": "Este artículo no está actualmente disponible para su compra.", "messageCannotFeedPet": "No se puede alimentar a esta mascota.", "messageAlreadyMount": "Ya tienes esa montura. Intenta alimentar a otra mascota.", "messageEvolve": "Has dominado a <%= egg %>, ¡vamos a dar una vuelta!", @@ -30,5 +30,26 @@ "messageAlreadyOwnGear": "Ya posees este objeto. Para equiparlo has de ir a la página de equipo.", "armoireEquipment": "<%= image %> Has encontrado un objeto de equipamiento raro en el armario: <%= dropText %>! ¡Genial!", "armoireFood": "<%= image %> Hurgas en el Ropero y encuentras <%= dropArticle %><%= dropText %>. ¿Qué hace eso aquí?", - "armoireExp": "Luchas con el Ropero y ganas Experiencia. ¡Toma eso!" + "armoireExp": "Luchas con el Ropero y ganas Experiencia. ¡Toma eso!", + "messageInsufficientGems": "No hay suficientes gemas!", + "messageAuthPasswordMustMatch": "Las contraseñas no coinciden.", + "messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword required", + "messageAuthUsernameTaken": "El nombre de usuario ya está en uso", + "messageAuthEmailTaken": "El correo electrónico ya está en uso", + "messageAuthNoUserFound": "No se encontró el usuario.", + "messageAuthMustBeLoggedIn": "Debes estar identificado.", + "messageAuthMustIncludeTokens": "You must include a token and uid (user id) in your request", + "messageGroupNotFound": "Grupo no encontrado o no tienes acceso.", + "messageGroupAlreadyInParty": "Already in a party, try refreshing.", + "messageGroupOnlyLeaderCanUpdate": "¡Sólo el líder del grupo puede actualizar el grupo!", + "messageGroupRequiresInvite": "No puedes entrar en un grupo al que no has sido invitado.", + "messageGroupCannotRemoveSelf": "¡No puedes eliminarte a ti mismo!", + "messageGroupChatBlankMessage": "No puedes enviar un mensaje en blanco", + "messageGroupChatLikeOwnMessage": "Can't like your own message. Don't be that person.", + "messageGroupChatFlagOwnMessage": "No puedes reportar tu propio mensaje.", + "messageGroupChatFlagAlreadyReported": "Has reportado este mensaje", + "messageGroupChatNotFound": "¡Mensaje no encontrado!", + "messageGroupChatAdminClearFlagCount": "Only an admin can clear the flag count!", + "messageUserOperationProtected": "path `<%= operation %>` was not saved, as it's a protected path.", + "messageUserOperationNotFound": "<%= operation %> operation not found" } \ No newline at end of file diff --git a/common/locales/es/noscript.json b/common/locales/es/noscript.json new file mode 100644 index 0000000000..6057268ef2 --- /dev/null +++ b/common/locales/es/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Alas! Your browser doesn't have JavaScript enabled", + "jsDisabledHeadingFull": "Alas! Your browser doesn't have JavaScript enabled and without it, Habitica can't work properly", + "jsDisabledText": "Habitica can't properly display the site without it!", + "jsDisabledLink": "Please enable JavaScript to continue!" +} \ No newline at end of file diff --git a/common/locales/es/npc.json b/common/locales/es/npc.json index 1a0e51d386..a3d54efa6a 100644 --- a/common/locales/es/npc.json +++ b/common/locales/es/npc.json @@ -3,20 +3,24 @@ "npcText": "¡Apoyó el proyecto de Kickstarter al nivel máximo!", "mattBoch": "Matt Boch", "mattShall": "¿Debería traer su corcel, <%= name %>? Una vez haya alimentado una mascota con suficiente comida como para convertirla en una montura, aparecerá aquí. ¡Pinche en una montura para poder cabalgarla!", - "mattBochText1": "Welcome to the Stable! I'm Matt, the beast master. After level 4, you can hatch pets using eggs and potions. When you hatch a pet in the Market, it will appear here! Click a pet's image to add it to your avatar. Feed them with the food you find after level 4, and they'll grow into powerful mounts.", + "mattBochText1": "¡Bienvenido al Establo!, Soy Matt, el señor de las bestias. A partir del nivel 3 podrás hacer eclosionar mascotas usando huevos y pociones. ¡Cuando eclosiones una mascota en el mercado, aparecerá aquí! Haz click en la imagen de una mascota para añadirla a tu avatar. Aliméntalas con la comida que encuentres a partir del nivel 3 y se convertirán en vigorosas monturas.", "daniel": "Daniel", "danielText": "¡Bienvenido a la Taberna! Quédate un rato y conoce a los lugareños. Si necesitas descansar (¿vacaciones? ¿enfermedad?), te perpararé una habitación en la posada. Mientras estés allí, tus Tareas Diarias no te quitaran puntos de vida al final del dia, y puedes comprobarlas y editarlas mientras tanto.", "danielText2": "Ten cuidado: ¡Si estás participando en una mision contra un jefe, este seguirá dañandote por las Tareas Diarias no completadas de tus compañeros de grupo! Además, tu daño al jefe (o los itemos recogidos) no se aplicarán hasta que salgas de la posada.", + "danielTextBroken": "Welcome to the Tavern... I guess... If you need to rest, I'll set you up at the Inn... While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off... if you have the energy...", + "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 el Mercader", "welcomeMarket": "¡Bienvenido al Mercado! ¡Compra huevos dificiles de encontrar y pociones! ¡Vende los que te sobren! ¡Encarga servicios utiles! Ven a ver lo que tenemos que ofrecer.", - "sellForGold": "Vender <%= item %> por <%= gold %> Oro", - "sellEggForGold": "Vender Huevo <%= itemType %> por <%= gold %> oro", - "sellPotionForGold": "Vender Poción <%= itemType %> por <%= gold %> oro", + "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?", + "sellForGold": "Véndelo por <%= gold %> de oro", "buyGems": "Comprar Gemas", "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!", - "USD": "USD", + "ianText": "¡Bienvenido a la Tienda de Misiones! Aquí puedes usar los Pergaminos de Misión para combatir monstruos con tus amigos. ¡Echa un vistazo al magnífico catálogo de Pergaminos de Misión que puedes encontrar a la derecha!", + "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...", + "USD": "Dólares", "newStuff": "Cosas Nuevas", "cool": "Ya me lo dirás", "dismissAlert": "Ignora Esta Alerta", @@ -31,7 +35,7 @@ "paymentMethods": "Formas de pago:", "classGear": "Equipo de clase", "classGearText": "Primero: ¡No te preocupes! Tu equipo viejo está en tu inventario y ahora llevas tu equipamiento de aprendiz de <%= klass %>. Llevar el equipo de tu clase te da un bonus del 50% a tus atributos. Sin embargo, eres libre de ponerte tu antiguo equipo.", - "classStats": "These are your class's stats; they affect the game-play. Each time you level up, you get one point to allocate to a particular stat. Hover over each stat for more information.", + "classStats": "Éstas son las estadísticas de tu clase; afectan al gameplay. Cada vez que subas de nivel obtendrás un punto para asignar a una estadística en concreto. Mueve el puntero sobre cada estadística para más información.", "autoAllocate": "Asignación Automática", "autoAllocateText": "Si 'distribución automática' está seleccionado, tu avatar gana estadísticas automáticamente basado en los atributos de sus tareas, que puedes encontrar en TAREA > Editar > Avanzado > Atributos Por ejemplo, si haces ejercicio con frecuencia, y si tu Diaria de 'Ejercicio' está fijado en 'Físico', vas a ganar Fuerza automáticamente.", "spells": "Hechizos", @@ -50,12 +54,12 @@ "tourScrollDown": "¡Estate seguro de que te has desplazado hasta abajo del todo para ver todas las opciones! Da click en tu personaje otra vez para volver a la página de Tareas.", "tourMuchMore": "¡Cuando hayas acabado con tus tareas, puedes formar un grupo con tus amigos, chatear en los Gremios de tu interés, unirte a los Desafíos, y mucho más!", "tourStatsPage": "¡Está es tu página de Estadísticas! Consigue logros completando las tareas de las listas.", - "tourTavernPage": "Welcome to the Tavern, an all-ages chat room! You can keep your Dailies from hurting you in case of illness or travel by clicking \"Rest in the Inn.\" Come say hi!", + "tourTavernPage": "¡Bienvenido a la Taberna, una sala de chat para todas las edades! Puedes impedir que tus Tareas Diarias te dañen en caso de enfermedad o viaje haciendo clic en \"Descansar en la Posada\". ¡Entra y saluda!", "tourPartyPage": "Tu Grupo te ayudará a mantenerte responsable. Invita a amigos para desbloquear un Pergamino de Misión.", "tourGuildsPage": "Los Gremios son grupos de chat con intereses comunes a los tuyos creados por los jugadores para los jugadores. ¡Busca en la lista y alístate a los Gremios que más te interesen! Asegúrate de visitar el popular Gremio de los Principiantes donde cualquier persona puede hacer sus preguntas sobre Habitica.", "tourChallengesPage": "¡Los desafios son listas de tareas tematicas creadas por usuarios! Unirte a un Desafio añadira sus tareas a tu cuenta. ¡Compite contra otros usuarios para ganar premios en Gemas!", "tourMarketPage": "Desde el nivel 4, los huevos y pociones eclosionadoras caen de manera aleatoria cuando completas tareas. Aparecen aquí - ¡úsalas para eclosionar mascotas! También puedes comprar objetos del Mercado.", - "tourHallPage": "Welcome to the Hall of Heroes, where open-source contributors to Habitica are honored. Whether through code, art, music, writing, or even just helpfulness, they have earned Gems, exclusive equipment, and prestigious titles. You can contribute to Habitica, too!", + "tourHallPage": "Bienvenido al Salón de los Héroes, donde los contribuidores del código abierto de Habitica son honrados. Ya sea mediante código, arte, música, escritura o incluso por simple buena voluntad, ellos han ganado Gemas, equipamiento exclusivo, y prestigiosos títulos. ¡Tú puedes contribuir con Habitica también!", "tourPetsPage": "This is the Stable! After level 4, you can hatch pets using eggs and potions. When you hatch a pet in the Market, it will appear here! Click a pet's image to add it to your avatar. Feed them with the food you find after level 4, and they'll grow into powerful mounts.", "tourMountsPage": "Once you've fed a pet enough food to turn it into a mount, it will appear here. (Pets, mounts, and food are available after level 4.) Click a mount to saddle up!", "tourEquipmentPage": "¡Aquí es donde guardamos tu Equipo! Tu Equipo de Batalla afecta a tus atributos. Si quieres mostrar un Equipo diferente en tu avatar sin cambiar tus atributos, marca \"Llevar disfraz\".", @@ -64,21 +68,21 @@ "tourSplendid": "¡Esplendido!", "tourNifty": "¡Ingenioso!", "tourAvatarProceed": "¡Muestrame mis tareas!", - "tourToDosBrief": "To-Do List
  • Check off To-Dos to earn Gold & Experience!
  • To-Dos never make your avatar lose Health.
", - "tourDailiesBrief": "Daily Tasks
  • Dailies repeat every day.
  • You lose Health if you skip Dailies.
", + "tourToDosBrief": "Lista de Tareas Pendientes
  • ¡Marca las Tareas Pendientes para ganar Oro y Experiencia!
  • Las Tareas Pendientes nunca hacen que tu avatar pierda Salud.
", + "tourDailiesBrief": "Tareas Diarias
  • Las Tareas Diarias se repiten cada día.
  • Pierdes Salud si te saltas las Tareas Diarias.
", "tourDailiesProceed": "¡Tendré cuidado!", - "tourHabitsBrief": "Good & Bad Habits
  • Good Habits award Gold & Experience.
  • Bad Habits make you lose Health.
", + "tourHabitsBrief": "Hábitos Buenos y Malos
  • Los Hábitos Buenos recompensan con Oro y Experiencia.
  • Los Hábitos Malos te hacen perder Salud.
", "tourHabitsProceed": "¡Tiene sentido!", - "tourRewardsBrief": "Reward List
  • Spend your hard-earned Gold here!
  • Purchase Equipment for your avatar, or set custom Rewards.
", + "tourRewardsBrief": "Lista de Recompensas
  • ¡Gasta tu Oro ganado con esfuerzo aquí!
  • Compra Equipamiento para tu avatar, o establece Recompensas personalizadas.
", "tourRewardsProceed": "¡Eso es todo!", - "welcomeToHabit": "Welcome to Habitica!", - "welcome1": "Create a basic avatar.", - "welcome1notes": "This avatar will represent you as you progress.", - "welcome2": "Set up your tasks.", - "welcome2notes": "How well you do on your real-life tasks will control how well you do in the game!", - "welcome3": "Progress in life and the game!", - "welcome3notes": "As you improve your life, your avatar will level up and unlock pets, quests, equipment, and more!", - "welcome4": "Avoid bad habits that drain Health (HP), or your avatar will die!", + "welcomeToHabit": "¡Bienvenido a Habitica!", + "welcome1": "Crea un avatar básico.", + "welcome1notes": "Este avatar te representará a medida que progresas.", + "welcome2": "Establece tus tareas.", + "welcome2notes": "¡Lo bien que lo hagas con tus tareas en la vida real controlará lo bien que lo haces en el juego!", + "welcome3": "¡Progresa en la vida y en el juego!", + "welcome3notes": "¡A medida que mejoras tu vida, tu avatar subirá de nivel y desbloqueará mascotas, misiones, equipamiento, y más!", + "welcome4": "¡Evita los malos hábitos que agotan tu Salud (HP), o tu avatar morirá!", "welcome5": "Ahora podrás personalizar tu avatar y configurar tus tareas...", - "imReady": "Enter Habitica" + "imReady": "Entrar en Habitica" } \ No newline at end of file diff --git a/common/locales/es/pets.json b/common/locales/es/pets.json index ee76ce6e04..15eaacb8a4 100644 --- a/common/locales/es/pets.json +++ b/common/locales/es/pets.json @@ -18,7 +18,7 @@ "mammoth": "Mamut lanudo", "orca": "Orca", "royalPurpleGryphon": "Grifo real morado", - "phoenix": "Phoenix", + "phoenix": "Fénix", "rarePetPop1": "Haz clic en la pata dorada para saber cómo puedes conseguir esta mascota contribuyendo con Habitica.", "rarePetPop2": "¡Como Obtener Esta Mascota!", "potion": "Poción <%= potionType %>", @@ -58,8 +58,16 @@ "firstDrop": "¡Has desbloqueado el sistema de botines! Ahora, al completar tareas, es posible que encuentres algún articulo, como huevos, pociones y alimentos. ¡Acabas de encontrar un <%= eggText %>huevo! <%= eggNotes %>", "useGems": "Si tienes el ojo puesto en una mascota, pero no quieres seguir esperando a que te toque, usa tus gemas en Inventario > Mercado para comprarla.", "hatchAPot": "¿Eclosionar un <%= egg %> <%= potion %>?", + "hatchedPet": "You hatched a <%= potion %> <%= egg %>!", + "displayNow": "Display Now", + "displayLater": "Display Later", + "earnedCompanion": "With all your productivity, you've earned a new companion. Feed it to make it grow!", "feedPet": "¿Dar de comer <%= article %><%= text %>a su <%= name %>?", "useSaddle": "¿Ensillar <%= pet %>?", + "raisedPet": "You grew a <%= pet %>!", + "earnedSteed": "By completing your tasks, you've earned a faithful steed!", + "rideNow": "Ride Now", + "rideLater": "Ride Later", "petName": "<%= egg %> <%= potion %>", "mountName": "<%= mount %> <%= potion %>", "petKeyName": "Llave de la perrera", diff --git a/common/locales/es/quests.json b/common/locales/es/quests.json index 151642e2e3..2d184f6113 100644 --- a/common/locales/es/quests.json +++ b/common/locales/es/quests.json @@ -13,6 +13,7 @@ "youReceived": "Has recibido", "dropQuestCongrats": "¡Enhorabuena por haber conseguido este pergamino de misión! Puedes invitar a tu grupo para empezar ya con la misión o volver cuando quieras a Inventario > Misiones.", "questSend": "Si haces clic en «Invitar», se enviará una invitación a los miembros de tu grupo. Cuando todos los miembros la hayan aceptado o rechazado, empezará la misión. Puedes consultar el estado en Social > Grupo.", + "questSendBroken": "Si haces clic en \"invitar\" se enviará una invitación a los miembros de tu grupo. Cuando todos los miembros la hayan aceptado o rechazado empezará la misión. Puedes consultar el estado en Social > Grupo...", "inviteParty": "Invitar al grupo a la misión", "questInvitation": "Invitación a Misión:", "questInvitationTitle": "Invitación a Misión", @@ -24,19 +25,25 @@ "rejected": "Rechazado", "pending": "Pendiente", "questStart": "Una vez todos los miembros hayan aceptado o rechazado, la misión comenzará. Solo aquellos que hicieron click en \"aceptar\" podrán participar en la misión y recibir los premios. Si algún miembro queda pendiente durante mucho tiempo (¿inactivo?), el dueño de la misión puede empezar ésta sin que éstos hayan hecho click en \"Empezar\". El dueño de la misión también puede cancelar ésta y volver a obtener el pergamino de la misión haciendo click en \"Cancelar\".", + "questStartBroken": "Once all members have either accepted or rejected, the quest begins... Only those that clicked \"accept\" will be able to participate in the quest and receive the drops... If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\"... The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\"...", "begin": "Comenzar", "bossHP": "Salud del Jefe", "bossStrength": "Fuerza del Jefe", - "rage": "Rage", + "rage": "Furia", "collect": "Recoger", "collected": "Recogido", "collectionItems": "<%= number %> <%= items %>", "itemsToCollect": "Objetos por recoger", "bossDmg1": "Cada tarea Diaria y Pendiente y cada Hábito positivo que completes hacen daño al jefe. Hazle más daño con tareas más rojas o con Paliza Brutal y Llamarada. El jefe herirá a cada participante en la misión por cada tarea Diaria que te saltes (multiplicada por la Fuerza del jefe) además del daño habitual, así que ¡protege la salud de tu grupo completando tus tareas Diarias! Todos los daños sufridos y causados por un jefe son aplicados por cron (tu cambio de día).", "bossDmg2": "Solo los participantes pelearan contra el jefe y compartiran el botín de la misión.", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "Each completed Daily and To-Do and each positive Habit hurts the boss... Hurt it more with redder tasks or Brutal Smash and Burst of Flames... The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies... All damage to and from a boss is tallied on cron (your day roll-over)...", + "bossDmg2Broken": "Only participants will fight the boss and share in the quest loot...", + "tavernBossInfo": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "tavernBossInfoBroken": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss... Incomplete Dailies fill the Exhaust Strike Bar... When the Exhaust Strike bar is full, the World Boss will attack an NPC... A World Boss will never damage individual players or accounts in any way... Only active accounts not resting in the Inn will have their tasks tallied...", "bossColl1": "Para conseguir objetos de misión, haz tus tareas. Los objetos de misión aparecen como los demás; sin embargo, no los verás hasta el día siguiente, en ese momento todo lo que hayais encontrado se pondrá en común.", "bossColl2": "Solo los participantes pueden coger objetos y su parte del botín de la misión.", + "bossColl1Broken": "To collect items, do your positive tasks... Quest items drop just like normal items; however, you won't see the drops until the next day, then everything you've found will be tallied up and contributed to the pile...", + "bossColl2Broken": "Only participants can collect items and share in the quest loot...", "abort": "Abandonar", "leaveQuest": "Abandonar la misión", "sureLeave": "¿Seguro que quieres abandonar la misión actual? Se perderá todo el progreso de esta misión.", @@ -63,10 +70,13 @@ "sureAbort": "¿Estás seguro que quieres abandonar esta misión? Abortará para todos los componentes del grupo y todo progreso se perderá. El pergamino de la misión volverá a su dueño.", "doubleSureAbort": "¿Estás totalmente seguro? ¡Asegurate de que no te vayan a odiar para siempre!", "questWarning": "Si nuevos miembros se unen al equipo antes de que comience la misión, también recibirán una invitación. Sin embargo, una vez que la misión ha comenzado, nuevos miembros no se pueden unir a la misión.", + "questWarningBroken": "If new players join the party before the quest starts, they will also receive an invitation... However once the quest has started, no new party members can join the quest...", "bossRageTitle": "Ira", "bossRageDescription": "¡Cuando esta barra se llene, el jefe desatará un ataque especial!", "startAQuest": "EMPRENDER UNA MISIÓN", "startQuest": "Emprender misión", "whichQuestStart": "¿Qué misión quieres emprender?", - "getMoreQuests": "Conseguir más misiones" + "getMoreQuests": "Conseguir más misiones", + "unlockedAQuest": "You unlocked a quest!", + "leveledUpReceivedQuest": "You leveled up to Level <%= level %> and received a quest scroll!" } \ No newline at end of file diff --git a/common/locales/es/questscontent.json b/common/locales/es/questscontent.json index 85cb323406..a3b455db98 100644 --- a/common/locales/es/questscontent.json +++ b/common/locales/es/questscontent.json @@ -261,5 +261,17 @@ "questBurnoutDropPhoenixMount": "Phoenix (Mount)", "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!", + "questFrogText": "Swamp of the Clutter Frog", + "questFrogNotes": "As you and your friends are slogging through the Swamps of Stagnation, @starsystemic points at a large sign. \"Stay on the path -- if you can.\"

\"Surely that isn't hard!\" @RosemonkeyCT says. \"It's broad and clear.\"

But as you continue, you notice that path is gradually overtaken by the muck of the swamp, laced with bits of strange blue debris and clutter, until it's impossible to proceed.

As you look around, wondering how it got this messy, @Jon Arjinborn shouts, \"Look out!\" An angry frog leaps from the sludge, clad in dirty laundry and lit by blue fire. You will have to overcome this poisonous Clutter Frog to progress!", + "questFrogCompletion": "The frog cowers back into the muck, defeated. As it slinks away, the blue slime fades, leaving the way ahead clear.

Sitting in the middle of the path are three pristine eggs. \"You can even see the tiny tadpoles and through the clear casing!\" @Breadstrings says. \"Here, you should take them.\"", + "questFrogBoss": "Clutter Frog", + "questFrogDropFrogEgg": "Frog (Egg)", + "questFrogUnlockText": "Unlocks purchasable Frog eggs in the Market", + "questSnakeText": "The Serpent of Distraction", + "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveler astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", + "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", + "questSnakeBoss": "Serpent of Distraction", + "questSnakeDropSnakeEgg": "Snake (Egg)", + "questSnakeUnlockText": "Unlocks purchasable Snake eggs in the Market" } \ No newline at end of file diff --git a/common/locales/es/rebirth.json b/common/locales/es/rebirth.json index c815488505..39f582ab24 100644 --- a/common/locales/es/rebirth.json +++ b/common/locales/es/rebirth.json @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "¡También recibirás un Logro por haber empezado una nueva aventura!", "beReborn": "Renacer", "rebirthAchievement": "¡Has comenzado una nueva aventura! Este es Renacimiento <%= number %> para ti, y el Nivel más alto que has conseguido es <%= level %>. Para apilar este Logro, ¡empieza tu aventura siguiente después de haber conseguido un nivel más alto!", + "rebirthAchievement100": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is 100 or higher. To stack this Achievement, begin your next new adventure when you've reached at least 100!", "rebirthBegan": "Comienza una nueva aventura", "rebirthText": "Comenzó <%= rebirths %> nuevas aventuras", "rebirthOrb": "Usó una Esfera de Renacimiento para comenzar de nuevo después de llegar al Nivel", + "rebirthOrb100": "Used an Orb of Rebirth to start over after attaining Level 100 or higher", "rebirthPop": "Comienza con un personaje en Nivel 1, manteniendo logros, coleccionables, y tareas con historial.", "rebirthName": "Esfera de Renacimiento", "reborn": "Renacido, nivel máximo <%= reLevel %>" diff --git a/common/locales/es/settings.json b/common/locales/es/settings.json index 66a09805cd..5de90640eb 100644 --- a/common/locales/es/settings.json +++ b/common/locales/es/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "Con esta opción marcada, la lista de etiquetas estará escondida al abrir la tarea para editarla.", "startAdvCollapsed": "Las opciones avanzadas de las tareas no se abren automáticamente", "startAdvCollapsedPop": "Con esta opción marcada, las opciones avanzadas estarán escondidas al abrir la tarea para editarla.", + "dontShowAgain": "Don't show this again", + "suppressLevelUpModal": "Don't show popup when gaining a level", + "suppressHatchPetModal": "Don't show popup when hatching a pet", + "suppressRaisePetModal": "Don't show popup when raising a pet into a mount", + "suppressStreakModal": "Don't show popup when attaining a Streak achievement", "showTour": "Empezar el Rour", "restartTour": "Reiniciar la introducción a Habitica que se muestra al registrarse.", "showBailey": "Mostrar a Bailey", @@ -81,7 +86,6 @@ "emailChange1": "Para cambiar tu correo electrónico, por favor, envía un email a", "emailChange2": "admin@habitica.com", "emailChange3": "incluyendo tu nueva y tu antigua dirección de correo electrónico, así como tu ID de Usuario.", - "username": "Nombre de Usuario", "usernameOrEmail": "Introduce tu Nombre o Correo electrónico.", "email": "Correo Electrónico", "registeredWithFb": "Registrado con Facebook", @@ -89,7 +93,7 @@ "loginNameDescription2": "Usuario->Perfil", "loginNameDescription3": "para cambiar el nombre que aparece en tu avatar y en los mensajes del chat.", "emailNotifications": "Notificaciones por Correo Electrónico", - "wonChallenge": "Has ganado un Desafío", + "wonChallenge": "You won a Challenge!", "newPM": "Mensaje Privado Recibido", "giftedGems": "Gemas Regaladas", "giftedGemsInfo": "<%= amount %> Gemas - por <%= name %>", @@ -118,5 +122,29 @@ "promoCode": "Código Promocional", "promoCodeApplied": "¡Código Promocional Aplicado! Mira tu inventario", "promoPlaceholder": "Introducir Código Promocional", - "displayInviteToPartyWhenPartyIs1": "Mostrar el botón \"Invitar al equipo\" cuando el equipo tiene 1 miembro." + "displayInviteToPartyWhenPartyIs1": "Mostrar el botón \"Invitar al equipo\" cuando el equipo tiene 1 miembro.", + "saveCustomDayStart": "Save Custom Day Start", + "registration": "Registration", + "addLocalAuth": "Add local authentication:", + "generateCodes": "Generate Codes", + "generate": "Generate", + "getCodes": "Get Codes", + "webhooks": "Webhooks", + "enabled": "Enabled", + "webhookURL": "Webhook URL", + "add": "Add", + "buyGemsGoldCap": "Cap raised to <%= amount %>", + "mysticHourglass": "<%= amount %> Mystic Hourglass", + "mysticHourglassText": "Mystic Hourglasses allow purchasing a previous month's Mystery Item set.", + "purchasedPlanId": "Recurring $<%= price %> each <%= months %> Month(s) (<%= plan %>)", + "purchasedPlanExtraMonths": "You have <%= months %> months of subscription credit.", + "consecutiveSubscription": "Consecutive Subscription", + "consecutiveMonths": "Consecutive Months:", + "gemCapExtra": "Gem Cap Extra:", + "mysticHourglasses": "Mystic Hourglasses:", + "paypal": "PayPal", + "amazonPayments": "Amazon Payments", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/es/spells.json b/common/locales/es/spells.json index 0fc2d6d573..dfa3d033ec 100644 --- a/common/locales/es/spells.json +++ b/common/locales/es/spells.json @@ -16,9 +16,9 @@ "spellWarriorIntimidateText": "Mirada Intimidante.", "spellWarriorIntimidateNotes": "Tu mirada provoca el temor de tus enemigos. Aumenta por hoy el atributo de constitución de todo tu grupo. (Proporcional a la constitución antes de aplicarlo).", "spellRoguePickPocketText": "Hurtar", - "spellRoguePickPocketNotes": "Te robas una tarea cercana. Ganas oro! Clickea en la tarea a lanzar. (Basado en: Percepción)", + "spellRoguePickPocketNotes": "Le robas a una tarea cercana. Ganas oro! Clickea en la tarea a lanzar. (Basado en: Percepción)", "spellRogueBackStabText": "Puñalada", - "spellRogueBackStabNotes": "Delatas a una tarea ridícula. ¡Ganas oro y puntos de experiencia! Haz clic en una tarea para lanzarlo. (Proporcional a la fuerza).", + "spellRogueBackStabNotes": "Delatas a una tarea necia. ¡Ganas oro y puntos de experiencia! Haz clic en una tarea para lanzarlo. (Proporcional a la fuerza).", "spellRogueToolsOfTradeText": "Herramientas del Oficio", "spellRogueToolsOfTradeNotes": "Compartes el talento que tienes con tus amigos. Aumenta por hoy la percepción de todo el grupo. (Proporcional a la percepción antes de aplicarlo).", "spellRogueStealthText": "Sigilo", diff --git a/common/locales/es/subscriber.json b/common/locales/es/subscriber.json index e35270bf39..fb49d7041e 100644 --- a/common/locales/es/subscriber.json +++ b/common/locales/es/subscriber.json @@ -60,7 +60,7 @@ "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> y <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitle": "Misteriosos viajeros del tiempo", "timeTravelersPopoverNoSub": "Para convocar a los misteriosos viajeros del tiempo, necesitarás un reloj de arena místico. Los <%= linkStart %>suscriptores<%= linkEnd %> reciben uno por cada tres meses consecutivos de suscripción. Cuando tengas un reloj de arena místico, vuelve aquí y los viajeros del tiempo te conseguirán algo excepcional: una mascota, una montura, un conjunto de artículos de suscriptor del pasado... ¡o puede que hasta del futuro!", - "timeTravelersPopover": "Vemos que posees un reloj de arena místico, de modo que estaremos encantados de viajar al pasado para ti. Por favor, elige la mascota, la montura o el conjunto de artículos misteriosos que más te guste. <%= linkStart %>Aquí<%= linkEnd %> puedes ver una lista de los conjuntos de objetos del pasado. Si no te convencen, ¿tal vez te interese alguno de nuestros elegantes conjuntos de artículos retrofuturistas?", + "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": "¡Enhorabuena! Ya tienes todo lo que ofrecen actualmente los viajeros del tiempo. ¡Gracias por hacer esto posible!", "mysticHourglassPopover": "Con el Reloj de arena místico, puedes comprar ciertos artículos del pasado que estuvieron disponibles por tiempo limitado, como los conjuntos mensuales de artículos misteriosos y los premios de jefes mundiales.", "subUpdateCard": "Actualiza la tarjeta", diff --git a/common/locales/es/tasks.json b/common/locales/es/tasks.json index aac4b25c35..0dfe482a6b 100644 --- a/common/locales/es/tasks.json +++ b/common/locales/es/tasks.json @@ -88,8 +88,7 @@ "fortifyText": "Fortalecer devolverá todas tus tareas a un estado neutral (amarillo), como si las acabaras de añadir, y rellena tu Salud al máximo. Esto es genial si tus tareas rojas están haciendo el juego demasiado duro, o tus tareas azules lo están haciendo demasiado fácil. Si empezar de cero te suena mucho más motivante, ¡gasta las Gemas y pilla un indulto!", "sureDelete": "¿Estás seguro de que quieres eliminar esta tarea?", "streakCoins": "¡Bonus de Racha!", - "pushTaskToTop": "Desplazar tarea al inicio", - "pushTaskToBottom": "Desplazar tarea hacia abajo", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "Introduzca primero el título de la Tarea", "dailiesRestingInInn": "¡Estás descansando en la Posada! Tus tareas Diarias NO te harán daño esta noche, pero se refrescarán cada día. Si estás en una misión, no sufrirás daño ni conseguirás objetos hasta que salgas de la Posada, pero sí puedes ser herido por un Jefe si tus compañeros de Grupo se saltan sus tareas Diarias.", "habitHelp1": "Los Hábitos Buenos son cosas que haces a menudo. Te conceden Oro y Experiencia cada vez que haces clic en el <%= plusIcon %>.", diff --git a/common/locales/es_419/backgrounds.json b/common/locales/es_419/backgrounds.json index f35388b46f..3c07cd3026 100644 --- a/common/locales/es_419/backgrounds.json +++ b/common/locales/es_419/backgrounds.json @@ -40,8 +40,8 @@ "backgroundHarvestFeastNotes": "Disfruta de un banquete de cosecha.", "backgroundStarrySkiesText": "Cielo estrellado", "backgroundStarrySkiesNotes": "Contempla el cielo estrellado.", - "backgroundSunsetMeadowText": "Anochecer en el prado", - "backgroundSunsetMeadowNotes": "Admira un anochecer en el prado.", + "backgroundSunsetMeadowText": "Atardecer en el prado", + "backgroundSunsetMeadowNotes": "Admira un atardecer en el prado.", "backgrounds122014": "CONJUNTO 7: Lanzado en diciembre 2014", "backgroundIcebergText": "Témpano", "backgroundIcebergNotes": "Piérdete en un témpano.", @@ -78,45 +78,59 @@ "backgroundGumdropLandText": "Tierra de gominolas", "backgroundGumdropLandNotes": "Pica del paisaje de la tierra de gominolas.", "backgrounds052015": "CONJUNTO 12: Lanzado en mayo 2015", - "backgroundMarbleTempleText": "Templo de Mármol", - "backgroundMarbleTempleNotes": "Posa frente al Templo de Mármol.", - "backgroundMountainLakeText": "Lago de Montaña", - "backgroundMountainLakeNotes": "Sumerge tus dedos en un Lago de Montaña.", - "backgroundPagodasText": "Pagoda", - "backgroundPagodasNotes": "Escola a lo más alto de Pagodas.", + "backgroundMarbleTempleText": "Templo de mármol", + "backgroundMarbleTempleNotes": "Posa frente al templo de mármol.", + "backgroundMountainLakeText": "Lago de montaña", + "backgroundMountainLakeNotes": "Sumerge tus dedos en un lago de montaña.", + "backgroundPagodasText": "Pagodas", + "backgroundPagodasNotes": "Escala a lo más alto de las pagodas.", "backgrounds062015": "CONJUNTO 13: Lanzado en junio 2015", - "backgroundDriftingRaftText": "Balsa a la Deriva", - "backgroundDriftingRaftNotes": "Rema una Balsa a la Deriva.", - "backgroundShimmeryBubblesText": "Burbujas Brillantes", - "backgroundShimmeryBubblesNotes": "Flota en un océano de Burbujas Brillantes", - "backgroundIslandWaterfallsText": "Cascada Isleña", - "backgroundIslandWaterfallsNotes": "Ten un picnic cerca de una Cascada Isleña.", - "backgrounds072015": "CONJUNTO 14: Lanzado en Julio 2015", + "backgroundDriftingRaftText": "Balsa a la deriva", + "backgroundDriftingRaftNotes": "Rema una balsa a la deriva.", + "backgroundShimmeryBubblesText": "Burbujas brillantes", + "backgroundShimmeryBubblesNotes": "Flota en un océano de burbujas brillantes", + "backgroundIslandWaterfallsText": "Cascada isleña", + "backgroundIslandWaterfallsNotes": "Merenda cerca de una cascada isleña.", + "backgrounds072015": "CONJUNTO 14: Lanzado en julio 2015", "backgroundDilatoryRuinsText": "Ruinas de Dilatoria", - "backgroundDilatoryRuinsNotes": "Se sumerge a los Ruinas de Dilatoria.", - "backgroundGiantWaveText": "Ola Grande", - "backgroundGiantWaveNotes": "¡Haz Surf un Ola Grande!", - "backgroundSunkenShipText": "Barco Sumergido", - "backgroundSunkenShipNotes": "Explora un Barco Sumergido", - "backgrounds082015": "SET 15: Publicado en Agosto de 2015", + "backgroundDilatoryRuinsNotes": "Sumergese a las ruinas de Dilatoria.", + "backgroundGiantWaveText": "Ola grande", + "backgroundGiantWaveNotes": "¡Haz surf en una ola grande!", + "backgroundSunkenShipText": "Barco sumergido", + "backgroundSunkenShipNotes": "Explora un barco sumergido", + "backgrounds082015": "CONJUNTO 15: Lanzado en agosto 2015", "backgroundPyramidsText": "Pirámides", - "backgroundPyramidsNotes": "Admirar las pirámides.", + "backgroundPyramidsNotes": "Admira las pirámides.", "backgroundSunsetSavannahText": "Atardecer en la sabana", - "backgroundSunsetSavannahNotes": "Acechar al atardecer en la sabana.", - "backgroundTwinklyPartyLightsText": "Luces de fiesta parpadeantes", - "backgroundTwinklyPartyLightsNotes": "Baila bajo las luces de fiesta parpadeantes!", - "backgrounds092015": "SET 16: Lanzamiento de Septiembre 2015", + "backgroundSunsetSavannahNotes": "Acecha al atardecer en la sabana.", + "backgroundTwinklyPartyLightsText": "Luces parpadeantes de fiesta ", + "backgroundTwinklyPartyLightsNotes": "¡Baila bajo las luces parpadeantes de fiesta!", + "backgrounds092015": "CONJUNTO 16: Lanzado en septiembre 2015", "backgroundMarketText": "Mercado de Habitica", "backgroundMarketNotes": "Compra en el mercado de Habitica", "backgroundStableText": "Establo de Habitica", - "backgroundStableNotes": "Guarda tus monturas en el Establo de Habitica.", + "backgroundStableNotes": "Guarda tus monturas en el establo de Habitica.", "backgroundTavernText": "Taberna de Habitica", - "backgroundTavernNotes": "Visita la Taberna de Habitica.", - "backgrounds102015": "SET 17: Released October 2015", - "backgroundHarvestMoonText": "Harvest Moon", - "backgroundHarvestMoonNotes": "Cackle under the Harvest Moon.", - "backgroundSlimySwampText": "Slimy Swamp", - "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", - "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgroundTavernNotes": "Visita la taberna de Habitica.", + "backgrounds102015": "CONJUNTO 17: Lanzado en octubre 2015", + "backgroundHarvestMoonText": "Luna de cosecha", + "backgroundHarvestMoonNotes": "Carcajea bajo la luna de cosecha.", + "backgroundSlimySwampText": "Pantano legamoso", + "backgroundSlimySwampNotes": "Atrafaga a través del pantano legamoso.", + "backgroundSwarmingDarknessText": "Enjambre de oscuridad", + "backgroundSwarmingDarknessNotes": "Tiembla en el enjambre de oscuridad.", + "backgrounds112015": "CONJUNTO 18: Lanzado en noviembre de 2015", + "backgroundFloatingIslandsText": "Islas Flotantes", + "backgroundFloatingIslandsNotes": "Salta a través de las Islas Flotantes.", + "backgroundNightDunesText": "Dunas Nocturnas", + "backgroundNightDunesNotes": "Camina pacíficamente atravesando las Dunas Nocturnas.", + "backgroundSunsetOasisText": "Oasis en el Ocaso", + "backgroundSunsetOasisNotes": "Disfruta de un Oasis en el Ocaso.", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/es_419/challenge.json b/common/locales/es_419/challenge.json index 123ee17ddb..80c712d779 100644 --- a/common/locales/es_419/challenge.json +++ b/common/locales/es_419/challenge.json @@ -43,8 +43,8 @@ "exportChallengeCSV": "Exportar a CSV", "selectGroup": "Por favor seleccione un grupo", "challengeCreated": "Desafío creado", - "sureDelCha": "Are you sure you want to delete this challenge?", - "sureDelChaTavern": "Are you sure you want to delete this challenge? Your gems will not be refunded.", + "sureDelCha": "Estás seguro que quieres eliminar este desafío?", + "sureDelChaTavern": "Estás seguro que quieres eliminar este desafío? Tus gemas no serán reembolsadas. ", "removeTasks": "Eliminar Tareas", "keepTasks": "Mantener Tareas", "closeCha": "Cerrar desafío y...", @@ -57,7 +57,11 @@ "prizeValue": "<%= gemcount %> <%= gemicon %> Premio", "clone": "Clon", "challengeNotEnoughGems": "No tienes suficientes gemas para publicar este desafío.", - "noPermissionEditChallenge": "You don't have permissions to edit this challenge", - "noPermissionDeleteChallenge": "You don't have permissions to delete this challenge", - "noPermissionCloseChallenge": "You don't have permissions to close this challenge" + "noPermissionEditChallenge": "No tienes permiso de editar este desafío", + "noPermissionDeleteChallenge": "No tienes permiso de eliminar este desafío", + "noPermissionCloseChallenge": "No tienes permiso de cerrar este desafío", + "congratulations": "Congratulations!", + "hurray": "Hurray!", + "noChallengeOwner": "Sin dueño", + "noChallengeOwnerPopover": "Este desafío no tiene un dueño porque la persona que lo creó eliminó su cuenta." } \ No newline at end of file diff --git a/common/locales/es_419/character.json b/common/locales/es_419/character.json index d653395652..6ceee5498d 100644 --- a/common/locales/es_419/character.json +++ b/common/locales/es_419/character.json @@ -45,13 +45,14 @@ "hauntedColors": "Colores embrujados", "winteryColors": "Colores invernales", "equipment": "Equipamiento", - "equipmentBonus": "Equipamiento", + "equipmentBonus": "Equipamento", "equipmentBonusText": "Bonos a los atributos proporcionados por tu equipamiento. Revisa la pestaña de Equipamiento en Inventario para seleccionar tu equipo.", "classBonus": "Bono de Equipamiento de la clase", "classBonusText": "Tu clase (Guerrero, si no has desbloqueado y seleccionado otra clase) usa su propio equipamento de manera más eficaz que el de otras clases. El equipamento de tu clase actual da un 50% más de puntos al atributo al que bonifica.", "classEquipBonus": "Bono por Equipamiento de clase", "battleGear": "Equipamiento de combate", "battleGearText": "Este es el equipamiento que usas en combate, afecta los resultados cuando interactúas con tus tareas.", + "autoEquipBattleGear": "Auto vestir nuevo equipamiento", "costume": "Disfraz", "costumeText": "Si prefieres el aspecto de otro equipo al que estás usando, marca la casilla \"Usar Disfraz\" para llevarlo como disfraz mientras usas tu equipo de batalla por debajo.", "useCostume": "Llevar disfraz", @@ -64,6 +65,10 @@ "ultimGearText": "Ha llegado al máximo conjunto de arma y armadura para las siguientes clases:", "level": "Nivel", "levelUp": "¡Subiste de nivel!", + "gainedLevel": "You gained a level!", + "leveledUp": "By accomplishing your real-life goals, you've grown to Level <%= level %>!", + "fullyHealed": "You have been fully healed!", + "huzzah": "Huzzah!", "mana": "Maná", "hp": "PV", "mp": "PM", diff --git a/common/locales/es_419/content.json b/common/locales/es_419/content.json index 34bc5cbdca..fb39eab869 100644 --- a/common/locales/es_419/content.json +++ b/common/locales/es_419/content.json @@ -95,6 +95,12 @@ "questEggHorseText": "Caballo", "questEggHorseMountText": "Caballo", "questEggHorseAdjective": "galopante", + "questEggFrogText": "Rana", + "questEggFrogMountText": "Rana", + "questEggFrogAdjective": "Una principesca", + "questEggSnakeText": "Snake", + "questEggSnakeMountText": "Snake", + "questEggSnakeAdjective": "a slithering", "eggNotes": "Encuentra una poción de eclosión para verter sobre este huevo y eclosionará en un <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "Básico", "hatchingPotionWhite": "Blanco", diff --git a/common/locales/es_419/faq.json b/common/locales/es_419/faq.json index 6baa8d30dd..6968bab71e 100644 --- a/common/locales/es_419/faq.json +++ b/common/locales/es_419/faq.json @@ -1,22 +1,22 @@ { "frequentlyAskedQuestions": "Preguntas frecuentes", - "faqQuestion0": "Estoy confundido. ¿Dónde puedo dar un vistazo a todo esto?", - "iosFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn experience and gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as Pets, Skills, and Quests! You can customize your character under Menu > Customize Avatar.\n\n Some basic ways to interact: click the (+) in the upper-right-hand corner to add a new task. Tap on an existing task to edit it, and swipe left on a task to delete it. You can sort tasks using Tags in the upper-left-hand corner, and expand and contract checklists by clicking on the checklist bubble.", - "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, the wiki has an excellent step-by-step overview of the game [right here](http://habitica.wikia.com/wiki/Habitica_Wiki).", - "faqQuestion1": "¿Cómo doy de alta mis tareas?", - "iosFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.", - "webFaqAnswer1": "Good Habits (the ones with a ) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a ) are tasks that you should avoid, like biting nails. Habits with a and a have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n

\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n

\n To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.", + "faqQuestion0": "Estoy confundido. ¿Dónde puedo ver una síntesis?", + "iosFaqAnswer0": "Primero crea las tareas que piensas hacer en tu día a día Luego, a medida completes las tareas en la vida real, marca la casilla correspondiente, esto te dará oro y experiencia. El oro sirve para comprar equipamiento e Items, asi como también, recompensas personalizadas. El ganar experiencia, hará que tu personaje suba de nivel y puedas desbloquear contenido como Mascotas, Habilidades y Misiones! Puedes personalizar tu personaje en el menu Usuario > Avatar.\n\nAlgunas datos para ir empezando: Cliquea el (+) en el borde superior derecho para agregar tareas nuevas. Pulsa en una tarea existente para editarla y arrástrala hacia la izquierda si deseas borrarla. Puedes ordenar tus tareas usando Etiquetas en el borde superior izquierdo asi como también puedes contraer las listas de control cliqueando en la burbuja que se encuentra a su lado.", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", + "faqQuestion1": "¿Cómo creo mis tareas?", + "iosFaqAnswer1": "Buenos hábitos (los que tienen un signo +) son tareas que puedes hacer varias veces durante el día, tal como comer vegetales. Malos hábitos (los que tienen un signo -) son tareas que deberías evitar, como comerte las uñas. Hábitos con un signo + y un signo - te dejan una buena opción y una mala opción, como subir las escaleras vs. tomar el ascensor. Los buenos hábitos te recompensan con experiencia y oro. Los malos hábitos te quitan salud.", + "webFaqAnswer1": "Buenos hábitos (los que tienen un signo ) son tareas que puedes hacer varias veces durante el día, tal como comer vegetales. Malos hábitos (los que tienen un signo ) son tareas que deberías evitar, como comerte las uñas. Hábitos con un signo y un signo te dejan una buena opción y una mala opción, como subir las escaleras vs. tomar el ascensor. Los buenos hábitos te recompensan con experiencia y oro. Los malos hábitos te quitan salud.\n

\nLas tareas diarias son tareas que tienes que hacer todos los días, como cepillarte los dientes o revisar tu correo. Puedes ajustar los días en que las Tareas Diarias vencen al haciendo click en el lápiz para editarla. Si dejas de hacer una Tarea Diaria el día que vence, tu avatar recibirá daño durante la noche. ¡Ten cuidado de no añadir demasiadas Tareas Diarias a la vez!\n

\nPendientes son tu lista de cosas por hacer. Completar un Pendiente te hace ganar oro y experiencia. Nunca pierdes salud a causa de un Pendiente. Puedes añadir una fecha de vencimiento a un Pendiente haciendo click en el lápiz para editarlo.", "faqQuestion2": "¿Cuáles podrían ser ejemplos de tareas?", "iosFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n

\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", "webFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", "faqQuestion3": "¿Por qué mis tareas cambian de color?", - "iosFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it's a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", + "iosFaqAnswer3": "Tu tareas cambian colores dependiendo de como si las realizes actualmente. Cada nueva tarea comenza como un neutro amarillo. Realizar diarias o hábitos positivos con más frecuencia y moven al azul. Faltar una diaria o rendirse al malo hábito y la tarea move al rojo. ", "webFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it’s a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", "faqQuestion4": "¿Por qué mi avatar perdió puntos de vida y cómo los puedo recuperar?", "iosFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you tap a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your Party and one of your Party mates did not complete all their Dailies, the Boss will attack you.\n\n The main way to heal is to gain a level, which restores all your health. You can also buy a Health Potion with gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a Party with a Healer, they can heal you as well.", "webFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you click a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your party and one of your party mates did not complete all their Dailies, the Boss will attack you.\n

\n The main way to heal is to gain a level, which restores all your Health. You can also buy a Health Potion with Gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a party (under Social > Party) with a Healer, they can heal you as well.", "faqQuestion5": "¿Cómo juego en Habitica con mis amigos?", - "iosFaqAnswer5": "The best way is to invite them to a Party with you, via the [website](https://habitica.com/#/options/groups/party)! We'll add the ability to create a Party from this app soon, but in the meantime you can use the [website](https://habitica.com/#/options/groups/party). Parties can go on quests, battle monsters, and cast skills to support each other. On the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", + "iosFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on quests, battle monsters, and cast skills to support each other. Go to Menu > Party and click \"Create New Party\" if you don't already have a Party. Then tap on the Members list, and tap Invite in the upper right-hand corner to invite your friends by entering their User ID (a string of numbers and letters that they can find under Settings > Account Details on the app, and Settings > API on the website). On the website, you can also invite friends via email, which we will add to the app in a future update.\n\nOn the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", "webFaqAnswer5": "The best way is to invite them to a party with you, under Social > Party! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n

\n For more detailed info, check out the wiki pages on [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).", "faqQuestion6": "¿Cómo consigo una mascota o una montura?", "iosFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch Egg.\" Then choose a hatching potion to determine its color! Go to Menu > Pets to equip your new Pet to your avatar by clicking on it. \n\n You can also grow your Pets into Mounts by feeding them under Menu > Pets. Tap on a Pet, and then select \"Feed Pet\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Menu > Mounts and tap on it to equip it to your avatar.\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", @@ -24,18 +24,21 @@ "faqQuestion7": "¿Cómo me convierto en Guerrero, Mago, Pícaro o Sanador?", "iosFaqAnswer7": "En nivel 10, puedes elegir convertirte en Guerrero, Mago, Pícaro o Sanador. (Todos los jugadores comienzan como Guerreros por defecto). Cada Clase tiene distintas opciones de equipamiento, distintas habilidades que pueden usar a partir del nivel 11, y distintas ventajas. Los guerreros pueden hacerle daño fácilmente a los Jefes, resistir más daño de sus tareas, y ayudar a que su Equipo se haga más fuerte. Los magos también pueden hacerle mucho daño a los Jefes, y subir rápidamente de nivel y restaurar la maná de su equipo. Los Pícaros son los que más oro ganan y más botines encuentran, y pueden ayudar a que su equipo también lo haga. Finalmente, los Sanadores pueden curarse a ellos mismos y a su equipo. \n\nSi no quieres elegir una Clase inmediatamente - por ejemplo, si todavía estás trabajando para comprar todo el equipamiento de tu clase actual - puedes hacer clic en \"Decidir más tarde\" y elegir más tarde en Menú > Elegir Clase. ", "webFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most Gold and find the most item drops, and they can help their party do the same. Finally, Healers can heal themselves and their party members.\n

\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click \"Opt Out\" and re-enable it later under User > Stats.", - "faqQuestion8": "What is the blue stat bar that appears in the Header after level 10?", + "faqQuestion8": "¿Qué es la barra azul que aparece en la cabecera de la página después de nivel 10?", "iosFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Use Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in a special section in the Rewards Column. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You’ll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", - "faqQuestion9": "How do I fight monsters and go on Quests?", - "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party on the [website](https://habitica.com/#/options/groups/party), you'll be rewarded with the Basi-List Scroll! (We will add this feature to the app in a future update.)\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for gold and gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", + "faqQuestion9": "¿Cómo peleo contra los monstruos y hago Misiones?", + "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for Gold and Gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "webFaqAnswer9": "First, you need to join or start a party (under Social > Party). Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n

\n Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are three ways to get a scroll:\n

\n * When you invite people to your party, you’ll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Page (Inventory > Quests) for Gold and Gems.\n

\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your party at the same time that you damage the Boss.\n

\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "faqQuestion10": "¿Qué son las gemas y cómo las consigo?", + "faqQuestion10": "¿Qué son las gemas y cómo las obtengo?", "iosFaqAnswer10": "Gems are purchased with real money by tapping on the gem icon in the header. When people buy gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying gems directly, there are three other ways players can gain gems:\n\n * Win a Challenge on the [website](https://habitica.com) that has been set up by another player under Social > Challenges. (We will be adding Challenges to the app in a future update!)\n * Subscribe on the [website](https://habitica.com/#/options/settings/subscription) and unlock the ability to buy a certain number of gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with gems do not offer any statistical advantages, so players can still make use of the app without them!", "webFaqAnswer10": "Gems are [purchased with real money](https://habitica.com/#/options/settings/subscription), although [subscribers](https://habitica.com/#/options/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n

\n In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n

\n * Win a Challenge that has been set up by another player under Social > Challenges.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", - "faqQuestion11": "How do I report a bug or request a feature?", - "iosFaqAnswer11": "You can report a bug, request a feature, or send feedback under Menu > Report a Bug and Menu > Send Feedback! We'll do everything we can to assist you.", + "faqQuestion11": "¿Cómo reporto un error o pido una nueva función?", + "iosFaqAnswer11": "Puedes reportar un error, solicitar una funcionalidad o enviarnos tus comentarios yendo a Menu > Reportar Error y Menu > ¡Enviar comentarios! Haremos todo lo posible por ayudarte.", "webFaqAnswer11": "Bug reports are collected on GitHub. Go to [Help > Report a Bug](https://github.com/HabitRPG/habitrpg/issues/2760) and follow the instructions. Don't worry, we'll get you fixed up soon!\n

\n Feature requests are collected on Trello. Go to [Help > Request a Feature](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) and follow the instructions. Ta-da!", - "iosFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the Tavern chat under Menu > Tavern! We're happy to help.", - "webFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the [Newbies Guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help." + "faqQuestion12": "¿Cómo peleo con un Jefe Mundial?", + "iosFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", + "webFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n

\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n

\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n

\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", + "iosFaqStillNeedHelp": "Si tienes una pregunta que no se encuentra en la lista, pregúntanos en el chat de la Taberna en Menú > Taberna! Estaremos encantados de responderte.", + "webFaqStillNeedHelp": "Si tienes una pregunta que no se encuentra en la lista, pregúntanos en el [Gremio The Newbies](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! Estaremos encantados de responderte." } \ No newline at end of file diff --git a/common/locales/es_419/front.json b/common/locales/es_419/front.json index 4c874e7b5b..7a76635de1 100644 --- a/common/locales/es_419/front.json +++ b/common/locales/es_419/front.json @@ -74,7 +74,7 @@ "infhQuote": "[Habitica] realmente me ha ayudado a estructurar mi vida en la universidad.", "invalidEmail": "Se requiere una dirección válida de correo electrónico para poder restablecer una contraseña.", "irishfeet123Quote": "He tenido horribles hábitos respecto a limpiar mi puesto completamente despues de comer y dejar todos pos platos sobre la mesa. [Habitica] curó eso!", - "joinOthers": "Únete a 250,000 personas haciendo divertido conseguir sus metas!", + "joinOthers": "Join <%= userCount %> people making it fun to achieve goals!", "kazuiQuote": "Antes de [Habitica], estaba estancado con mi tesis, del mismo modo decepcionado con mi disciplina personal respecto al aseo del hogar, cosas como aprender vocabulario y estudiar teoría del Go. El romper todas esas tareas en listas pequeñas y manejables es prácticamente lo que me mantiene motivado y trabajando constantemente.", "landingadminlink": "paquetes administrativos", "landingend": "¿Todavía no estás convencido?", @@ -85,9 +85,9 @@ "landingp1": "El problema con la mayoría de aplicaciones de productividad en el mercado es que no ofrecen ningún incentivo para continuar su uso . Habitica corrige este error y el formar hábitos es más divertido! Recompensandote por sus éxitos y penalizandote por tus fracasos, Habitica ofrece motivación externa para completar sus actividades cada día.", "landingp2": "Cada vez que refuerces un hábito positivo, completas una tarea diaria o te encargas de una antigua tarea pendiente, HabitPRG te recompensa con puntos de experiencia y oro. A medida que vas ganando experiencia, subes de nivel, mejorando tus estadísticas y desbloqueando más funciones, como clases y mascotas. El oro se puede gastar en objetos que cambian tu experiencia del juego o en recompensas personalizadas que tu has creado para motivarte. Cuando los más pequeños éxitos te premian con una recompensa inmediata, tienes menos tendencia a dejar las cosas sin hacer.", "landingp2header": "Recompensa inmediata", - "landingp3": "Whenever you indulge in a bad habit or fail to complete one of your daily tasks, you lose health. If your health drops too low, you lose some of the progress you've made. By providing immediate consequences, Habitica can help break bad habits and procrastination cycles before they cause real-world problems.", + "landingp3": "Cuando recaes en un mal hábito o no logras completar una de tus tareas diarias, pierdes salud. Si tu salud baja demasiado, pierdes parte del progreso que has hecho. Al proveer consecuencias inmediatas, Habitica puede ayudar a abandonar malos hábitos y ciclos de procrastinación antes de que causen problemas en el mundo real.", "landingp3header": "Consecuencias", - "landingp4": "With an active community, Habitica provides the accountability you need to stay on task. With the party system, you can bring in a group of your closest friends to cheer you on. The guild system allows you to find people with similar interests or obstacles, so you can share your goals and swap tips on how to tackle your problems. In Habitica, the community means that you have both the support and the accountability you need to succeed.", + "landingp4": "Con una comunidad activa, Habitica aporta la responsabilidad que necesitas para completar tareas. Con el sistema de equipos, puedes traer a un grupo de tus amigos más cercanos para que te den ánimos. El sistema de gremios te permite encontrar gente con intereses u obstáculos similares, así puedes compartir tus objetivos e intercambiar tips sobre cómo enfrentar tus problemas. En Habitica, la comunidad significa que tienes tanto el apoyo como la responsabilidad que necesitas para tener éxito.", "landingp4header": "Responsabilidad", "leadText": "Habitica es una aplicación gratis para crear hábitos y buena productividad que trata a su vida real como un juego. Con premios y castigos para motivarte y una fuerte comunidad social que te inspira, Habitica puede ayudarle a alcanzar sus metas para ser saludable, un fuerte trabajador, y feliz.", "login": "Entrar", @@ -107,9 +107,9 @@ "marketing2Lead3": "Los desafíos te permiten competir con tus amigos y con extraños. El que hace lo mejor al final de un desafío gana premios especiales.", "marketing3Header": "Aplicaciones", "marketing3Lead1": "Las aplicaciones para iPhone & Android te permiten encargarte de todo mientras estas en marcha. Sabemos que conectarte a la página para hacerle clic a unos botones puede ser pesado.", - "marketing3Lead2": "Other 3rd Party Tools tie Habitica into various aspects of your life. Our API provides easy integration for things like the Chrome Extension, for which you lose points when browsing unproductive websites, and gain points when on productive ones. See more here", + "marketing3Lead2": "Otras herramientas desarrolladas por terceros incorporan a Habitica a varios aspectos de tu vida. Nuestra API provee una fácil integración para cosas como la Extensión de Chrome, por la cual pierdes puntos al navegar sitios web improductivos, y ganas puntos con los sitios productivos. Lee más aquí", "marketing4Header": "Usar para una organización", - "marketing4Lead1": "Education is one of the best sectors for gamification. We all know how glued to phones and games students are these days; harness that power! Pit your students against eachother in friendly competition. Reward good behavior with rare prizes. Watch their grades and behavior soar.", + "marketing4Lead1": "La educación es uno de los mejores sectores para convertir en un juego. Todos sabemos hasta qué punto los estudiantes están pegados a los celulares y a los videojuegos últimamente; ¡utiliza ese potencial! Haz que tus alumnos se enfrenten mutuamente en competición amistosa. Recompensa la buena conducta con premios raros. Sé testigo de cómo sus notas y su comportamiento se elevan.", "marketing4Lead1Title": "Jueguización en Educación", "marketing4Lead2": "Los costos de salud están en alza y algo tiene que ceder. Cientos de programas están diseñados para reducir los costos y mejorar el bienestar. Nosotros creemos que Habitica puede abrir un camino importante a estilos de vida saludables.", "marketing4Lead2Title": "Jueguización en Salud y Bienestar", @@ -179,5 +179,14 @@ "businessInquiries": "Preguntas sobre negocios", "merchandiseInquiries": "Preguntas sobre márketing y merchandising", "marketingInquiries": "Preguntas sobre márketing y redes sociales", - "tweet": "Tweet" + "tweet": "Tweetear", + "apps": "Aplicaciones", + "notifyAndroidApp": "¿Quieres que te avisemos cuando la aplicación para Android esté lista? ¡Regístrate en esta lista de envío!", + "checkOutIOSApp": "¡Chequea nuestra nueva aplicación para iOS!", + "imagine1": "Imagine if improving your life were as fun as playing a game.", + "landingCopy1": "Advance in the game by completing your real-life tasks.", + "landingCopy2": "Battle monsters with friends to stay accountable to your goals.", + "landingCopy3": "Join over <%= userCount %> people having fun as they improve their lives.", + "alreadyHaveAccount": "I already have an account!", + "getStartedNow": "Get Started Now!" } \ No newline at end of file diff --git a/common/locales/es_419/gear.json b/common/locales/es_419/gear.json index 0fdd302220..29a938c2f7 100644 --- a/common/locales/es_419/gear.json +++ b/common/locales/es_419/gear.json @@ -87,7 +87,7 @@ "weaponSpecialSpringHealerText": "Hueso encantador", "weaponSpecialSpringHealerNotes": "¡A BUSCAR! Incrementa la Inteligencia por <%= int %>. Equipamiento de edición Llmitada de primavera 2014.", "weaponSpecialSummerRogueText": "Alfanje de pirata", - "weaponSpecialSummerRogueNotes": "Avast! You'll make those Dailies walk the plank! Increases Strength by <%= str %>. Limited Edition 2014 Summer Gear.", + "weaponSpecialSummerRogueNotes": "¡Alto! ¡Harás que esas Diarias caminen por la tabla! Incrementa la Fuerza por <%= str %>. Equipamiento de Edición Limitada de Verano de 2014.", "weaponSpecialSummerWarriorText": "Rebanador marinero", "weaponSpecialSummerWarriorNotes": "¡No hay una tarea en ninguna lista de Pendientes que esté dispuesta a enredarse con este cuchillo retorcido! Incrementa la Fuerza por <%= str %>. Equipamiento de edición limitada de verano 2014.", "weaponSpecialSummerMageText": "Recolector de algas marinas", @@ -115,24 +115,24 @@ "weaponSpecialSpring2015WarriorText": "Garrote de hueso", "weaponSpecialSpring2015WarriorNotes": "Es una auténtica Clava de hueso para auténticos perritos feroces y definitivamente no es un mordedor que te han dado los Hechiceros de las estaciones porque, ¿quién es un buen perrito? ¿Quiéeen es un buen perrito? ¡Eres tú! ¡¡Tú eres un buen perrito!! Aumenta la Fuerza por <%= str %>. Equipamiento de edición limitada de primavera 2015.", "weaponSpecialSpring2015MageText": "Varita mágica", - "weaponSpecialSpring2015MageNotes": "Conjure up a carrot for yourself with this fancy wand. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2015 Spring Gear.", + "weaponSpecialSpring2015MageNotes": "Conjura una zanahoria para ti con esta lujosa varita. Incrementa la Inteligencia en <%= int %> y Percepción en <%= per %>. Equipamiento de edición limitada de verano 2015", "weaponSpecialSpring2015HealerText": "Sonaja de gato", "weaponSpecialSpring2015HealerNotes": "Cuando lo agitas, hace un chasquido fascinante que mantendría a CUALQUIERA entretenido durante horas. Aumenta la Inteligencia por <%= int %>. Equipamiento de edición limitada de primavera 2015.", "weaponSpecialSummer2015RogueText": "Coral de fuego", - "weaponSpecialSummer2015RogueNotes": "This relative of fire coral has the ability to propel its venom through the water. Increases Strength by <%= str %>. Limited Edition 2015 Summer Gear.", + "weaponSpecialSummer2015RogueNotes": "Este coral de fuego tiene la habilidad de expulsar veneno a través del agua. Incrementa Fuerza en <%= str %>. Equipamiento de edición limitada de verano 2015", "weaponSpecialSummer2015WarriorText": "Pez Espada del Sol", - "weaponSpecialSummer2015WarriorNotes": "The Sun Swordfish is a fearsome weapon, provided that it can be induced to stop wriggling. Increases Strength by <%= str %>. Limited Edition 2015 Summer Gear.", + "weaponSpecialSummer2015WarriorNotes": "El pez espada solar es una temible arma, siempre y cuando puedas hacer que deje de ondularse. Incrementa Fuerza en <%= str %>. Equipamiento de edición limitada de verano 2015", "weaponSpecialSummer2015MageText": "Báculo de Adivino", - "weaponSpecialSummer2015MageNotes": "Hidden power glimmers in the jewels of this staff. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2015 Summer Gear.", + "weaponSpecialSummer2015MageNotes": "Poder oculto emana de las joyas de este báculo. Incrementa Inteligencia en <%= int %> y Percepción en <%= per %>. Equipamiento de edición limitada de verano 2015.", "weaponSpecialSummer2015HealerText": "Varita de las Ondas", - "weaponSpecialSummer2015HealerNotes": "Cures seasickness and sea sickness! Increases Intelligence by <%= int %>. Limited Edition 2015 Summer Gear.", - "weaponSpecialFall2015RogueText": "Bat-tle Ax", + "weaponSpecialSummer2015HealerNotes": "Cura el mareo y el Mar ..¡Eo! Incrementa la Inteligencia por <%= int %>.Equipamiento de edición limitada de verano 2015.", + "weaponSpecialFall2015RogueText": "Bati-Batalla Ax", "weaponSpecialFall2015RogueNotes": "Fearsome To-Dos cower before the flapping of this ax. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "weaponSpecialFall2015WarriorText": "Wooden Plank", + "weaponSpecialFall2015WarriorText": "Tablón de madera", "weaponSpecialFall2015WarriorNotes": "Great for elevating things in cornfields and/or smacking tasks. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "weaponSpecialFall2015MageText": "Enchanted Thread", + "weaponSpecialFall2015MageText": "Hilo encantado", "weaponSpecialFall2015MageNotes": "A powerful Stitch Witch can control this enchanted thread without even touching it! Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "weaponSpecialFall2015HealerText": "Swamp-Slime Potion", + "weaponSpecialFall2015HealerText": "Poción de Pantano-Slime", "weaponSpecialFall2015HealerNotes": "Brewed to perfection! Now you just have to convince yourself to drink it. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", "weaponMystery201411Text": "Horca de banquete", "weaponMystery201411Notes": "Apuñalar a tus enemigos o tu comida favorita - ¡esta horca versátil lo hace todo! No otorga ningún beneficio. Articulo de suscriptor de noviembre 2014.", @@ -149,13 +149,19 @@ "weaponArmoireRancherLassoText": "Lazo Ranchero", "weaponArmoireRancherLassoNotes": "Lassos: the ideal tool for rounding up and wrangling. Increases Strength by <%= str %>, Perception by <%= per %>, and Intelligence by <%= int %>. Enchanted Armoire: Rancher Set (Item 3 of 3).", "weaponArmoireMythmakerSwordText": "Espada del Creador de Mitos", - "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3)", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Báculo de Hierro", - "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3)", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Báculo Ala de Oro", "weaponArmoireGoldWingStaffNotes": "The wings on this staff constantly flutter and twist. Increases all attributes by <%= attrs %> each. Enchanted Armoire: Independent Item.", - "weaponArmoireBatWandText": "Bat Wand", + "weaponArmoireBatWandText": "Varita de Murciélago", "weaponArmoireBatWandNotes": "This wand can turn any task into a bat! Wave it about and watch them fly away. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireShepherdsCrookText": "Cayado de Pastor", + "weaponArmoireShepherdsCrookNotes": "Useful for herding gryphons. Increases Constitution by <%= con %>. Enchanted Armoire: Shepherd Set (Item 1 of 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "armadura", "armorBase0Text": "Ropa simple", "armorBase0Notes": "Ropa simple. No otorga ningún beneficio.", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "Túnicas de fiesta ridículas", "armorSpecialBirthday2015Notes": "¡Feliz Cumpleaños, Habitica! Usa estas rídiculas túnicas de fiesta para celebrar este maravilloso día. No otorga ningún beneficio", "armorSpecialGaymerxText": "Armadura del guerrero arco iris", - "armorSpecialGaymerxNotes": "Con motivo de la celebración de la temporada del pride y GaymerX, ¡esta armadura especial está decorada con un radiante y colorido estampado de arco iris! GaymerX es una convención de juegos que celebra LGBTQ y los video juegos y está abierta para todos. ¡Tiene lugar en el InterContinental en el centro de San Francisco del 11-13 de julio! No otorga ningún beneficio.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "Traje de gato elegante", "armorSpecialSpringRogueNotes": "Impecablemente limpio. Incrementa la Percepción por <%= per %>. Equipamiento de edición limitada de primavera 2014.", "armorSpecialSpringWarriorText": "Armadura trébol de acero", @@ -269,13 +275,13 @@ "armorSpecialSummer2015MageNotes": "Hidden power resides in the puffs of these sleeves. Increases Intelligence by <%= int %>. Limited Edition 2015 Summer Gear.", "armorSpecialSummer2015HealerText": "Armadura de Marinero", "armorSpecialSummer2015HealerNotes": "This armor lets everyone know that you are an honest merchant sailor who would never dream of behaving like a scalawag. Increases Constitution by <%= con %>. Limited Edition 2015 Summer Gear.", - "armorSpecialFall2015RogueText": "Bat-tle Armor", + "armorSpecialFall2015RogueText": "Armadura de Murcie-lago", "armorSpecialFall2015RogueNotes": "Fly into bat-tle! Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "armorSpecialFall2015WarriorText": "Scarecrow Armor", + "armorSpecialFall2015WarriorText": "Armadura de Espantapájaros", "armorSpecialFall2015WarriorNotes": "Despite being stuffed with straw, this armor is extremely hefty! Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", - "armorSpecialFall2015MageText": "Stitched Robes", + "armorSpecialFall2015MageText": "Túnica Cocida", "armorSpecialFall2015MageNotes": "Every stitch in this armor shimmers with enchantment. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", - "armorSpecialFall2015HealerText": "Potioner Robes", + "armorSpecialFall2015HealerText": "Túnica de Potero", "armorSpecialFall2015HealerNotes": "What? Of course that was a potion of constitution. No, you are definitely not turning into a frog! Don't be ribbiticulous. Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", "armorMystery201402Text": "Túnica de mensajero", "armorMystery201402Notes": "Reluciente y fuerte, esta túnica tiene muchos bolsillos para llevar cartas. No otorga ningún beneficio. Artículo de suscriptor de febrero 2014.", @@ -305,8 +311,10 @@ "armorMystery201506Notes": "Snorkel through a coral reef in this brightly-colored swim suit! Confers no benefit. June 2015 Subscriber Item.", "armorMystery201508Text": "Disfraz de Cheetah", "armorMystery201508Notes": "Run fast as a flash in the fluffy Cheetah Costume! Confers no benefit. August 2015 Subscriber Item.", - "armorMystery201509Text": "Werewolf Costume", - "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201509Text": "Disfraz de Hombre Lobo", + "armorMystery201509Notes": "Este es un disfraz, vale? No otorga ningún beneficio. Artículo de suscriptor Septiembre de 2015.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Traje steampunk", "armorMystery301404Notes": "¡Sofisticado y elegante, oh no! No otorga ningún beneficio. Artículo de suscriptor de febrero 3015.", "armorArmoireLunarArmorText": "Armadura Lunar Tranquilizadora", @@ -321,6 +329,12 @@ "armorArmoireHornedIronArmorNotes": "Fiercely hammered from iron, this horned armor is nearly impossible to break. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Horned Iron Set (Item 2 of 3).", "armorArmoirePlagueDoctorOvercoatText": "Abrigo de Doctor Plaga", "armorArmoirePlagueDoctorOvercoatNotes": "An authentic overcoat worn by the doctors who battle the Plague of Procrastination! Increases Intelligence by <%= int %>, Strength by <%= str %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 3 of 3).", + "armorArmoireShepherdRobesText": "Túnica de Pastor", + "armorArmoireShepherdRobesNotes": "The fabric is cool and breathable, perfect for a hot day herding gryphons in the desert. Increases Strength and Perception by <%= attrs %> each. Enchanted Armoire: Shepherd Set (Item 2 of 3).", + "armorArmoireRoyalRobesText": "Túnica Real", + "armorArmoireRoyalRobesNotes": "Wonderful ruler, rule all day long! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 3 of 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "protector de cabeza", "headBase0Text": "Sin yelmo", "headBase0Notes": "Sin protector de cabeza.", @@ -432,16 +446,16 @@ "headSpecialSummer2015MageNotes": "Hidden power shines in the threads of this scarf. Increases Perception by <%= per %>. Limited Edition 2015 Summer Gear.", "headSpecialSummer2015HealerText": "Gorro de Marinero", "headSpecialSummer2015HealerNotes": "Lazo de Cabello Rojo", - "headSpecialFall2015RogueText": "Bat-tle Wings", + "headSpecialFall2015RogueText": "Alas Bati-Batalla", "headSpecialFall2015RogueNotes": "Echolocate your enemies with this powerful helm! Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "headSpecialFall2015WarriorText": "Scarecrow Hat", + "headSpecialFall2015WarriorText": "Sombrero de Espantapájaros", "headSpecialFall2015WarriorNotes": "Everyone would want this hat--if they only had a brain. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "headSpecialFall2015MageText": "Stitched Hat", + "headSpecialFall2015MageText": "Sombrero Cocido", "headSpecialFall2015MageNotes": "Every stitch in this hat augments its power. Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "headSpecialFall2015HealerText": "Hat of Frog", + "headSpecialFall2015HealerText": "Sombrero de Sapo", "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", "headSpecialGaymerxText": "Yelmo de guerrero arco iris", - "headSpecialGaymerxNotes": "Con motivo de la celebración de la temporada del orgullo y GaymerX, este casco especial está decorado con un radiante y colorido estampado de arco iris. GaymerX es una convención de juegos que celebra LGBTQ y los video juegos y está abierta para todos. ¡Tiene lugar en el InterContinental en el centro de San Francisco del 11-13 de julio! No otorga ningún beneficio.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "Yelmo alado", "headMystery201402Notes": "¡Esta diadema alada imbuye a quien la usa con la velocidad del viento! No otorga ningún beneficio. Artículo de suscriptor de febrero 2014.", "headMystery201405Text": "Llama de la mente", @@ -458,12 +472,14 @@ "headMystery201412Notes": "¿Quien es un pingüino? No otorga ningún beneficio. Artículo de suscriptor de diciembre 2014.", "headMystery201501Text": "Yelmo estrellado", "headMystery201501Notes": "Las constelaciones parpadean y se arremolinan en este yelmo, enfocando los pensamientos del usuario. No otorga ningún beneficio. Artículo de suscriptor de enero 2015.", - "headMystery201505Text": "Casco del caballero verde", + "headMystery201505Text": "Casco del Caballero Verde", "headMystery201505Notes": "La pluma verde de este casco hierroso ondea orgullosamente. Artículo de Suscriptor de Mayo de 2015. No confiere ningún beneficio.", "headMystery201508Text": "Sombrero Cheetah", "headMystery201508Notes": "This cozy cheetah hat is very fuzzy! Confers no benefit. August 2015 Subscriber Item.", - "headMystery201509Text": "Werewolf Mask", - "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201509Text": "Máscara de Hombre Lobo", + "headMystery201509Notes": "Esta es una mascara, vale? No otorga ningún beneficio. Artículo de suscriptor Septiembre de 2015.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 Subscriber Item.", "headMystery301404Text": "Galera elegante", "headMystery301404Notes": "¡Una galera elegante para los señores más sofisticados! Artículo de Suscriptor de Enero de 3015. No confiere ningún beneficio.", "headMystery301405Text": "Galera básica", @@ -481,21 +497,27 @@ "headArmoireBlueHairbowText": "Lazo de Cabello Azul", "headArmoireBlueHairbowNotes": "Become perceptive, tough, and smart while wearing this beautiful Blue Hairbow! Increases Perception by <%= per %>, Constitution by <%= con %>, and Intelligence by <%= int %>. Enchanted Armoire: Independent Item.", "headArmoireRoyalCrownText": "Corona Real", - "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Royal Set (Item 1 of 3).", "headArmoireGoldenLaurelsText": "Laureles Dorados", "headArmoireGoldenLaurelsNotes": "These golden laurels reward those who have conquered bad habits. Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 2 of 3).", "headArmoireHornedIronHelmText": "Casco de Hierro con Cuernos", "headArmoireHornedIronHelmNotes": "Fiercely hammered from iron, this horned helmet is nearly impossible to break. Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Horned Iron Set (Item 1 of 3).", - "headArmoireYellowHairbowText": "Lazo para el pelo amarillo", + "headArmoireYellowHairbowText": "Lazo de Cabello Amarillo", "headArmoireYellowHairbowNotes": "Become perceptive, strong, and smart while wearing this beautiful Yellow Hairbow! Increases Perception, Strength, and Intelligence by <%= attrs %> each. Enchanted Armoire: Independent Item.", "headArmoireRedFloppyHatText": "Sombrero Flexible Rojo", "headArmoireRedFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a radiant red color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", "headArmoirePlagueDoctorHatText": "Sombrero de Doctor Plaga", "headArmoirePlagueDoctorHatNotes": "An authentic hat worn by the doctors who battle the Plague of Procrastination! Increases Strength by <%= str %>, Intelligence by <%= int %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 1 of 3).", - "headArmoireBlackCatText": "Black Cat Hat", + "headArmoireBlackCatText": "Sombrero de Gato Negro", "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", - "headArmoireOrangeCatText": "Orange Cat Hat", + "headArmoireOrangeCatText": "Sombrero de Gato Naranja", "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireBlueFloppyHatText": "Sombrero Escurrido Azul", + "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireShepherdHeaddressText": "Tocado de Pastor", + "headArmoireShepherdHeaddressNotes": "Sometimes the gryphons that you herd like to chew on this headdress, but it makes you seem more intelligent nonetheless. Increases Intelligence by <%= int %>. Enchanted Armoire: Shepherd Set (Item 3 of 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "artículo adicional", "shieldBase0Text": "Sin equipamiento addicional", "shieldBase0Notes": "Sin escudo o arma secundaria.", @@ -562,12 +584,12 @@ "shieldSpecialSpring2015HealerText": "Almohada decorada", "shieldSpecialSpring2015HealerNotes": "Puedes descansar tu cabeza en esta suavealmohada, o puedes luchar con sus temibles garras. ¡Raaawr! Aumenta la Constitución por <%= con %>. Equipamiento de edición limitada de primavera 2015.", "shieldSpecialSummer2015RogueText": "Coral de Fuego", - "shieldSpecialSummer2015RogueNotes": "This relative of fire coral has the ability to propel its venom through the water. Increases Strength by <%= str %>. Limited Edition 2015 Summer Gear.", + "shieldSpecialSummer2015RogueNotes": "Este coral de fuego tiene la habilidad de expulsar veneno a través del agua. Incrementa Fuerza en <%= str %>. ", "shieldSpecialSummer2015WarriorText": "Escudo de Pez Sol", "shieldSpecialSummer2015WarriorNotes": "Crafted of deep-ocean metal by the artisans of Dilatory, this shield shines like the sand and the sea. Increases Constitution by <%= con %>. Limited Edition 2015 Summer Gear.", "shieldSpecialSummer2015HealerText": "Escudo Robusto", "shieldSpecialSummer2015HealerNotes": "Use this shield to bash away bilge rats. Increases Constitution by <%= con %>. Limited Edition 2015 Summer Gear.", - "shieldSpecialFall2015RogueText": "Bat-tle Ax", + "shieldSpecialFall2015RogueText": "Bati-Batalla Ax", "shieldSpecialFall2015RogueNotes": "Fearsome To-Dos cower before the flapping of this ax. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", "shieldSpecialFall2015WarriorText": "Birdseed Bag", "shieldSpecialFall2015WarriorNotes": "It's true that you're supposed to be SCARING the crows, but there's nothing wrong with making friends! Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", @@ -577,8 +599,10 @@ "shieldMystery301405Notes": "¡El tiempo está de tu lado con este imponente escudo reloj! No otorga ningún beneficio. Artículo de suscriptor de junio 3015.", "shieldArmoireGladiatorShieldText": "Escudo de Gladiador", "shieldArmoireGladiatorShieldNotes": "To be a gladiator you must.... eh, whatever, just bash them with your shield. Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Gladiator Set (Item 3 of 3).", - "shieldArmoireMidnightShieldText": "Midnight Shield", + "shieldArmoireMidnightShieldText": "Escudo de Medianoche", "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "shieldArmoireRoyalCaneText": "Bastón Real", + "shieldArmoireRoyalCaneNotes": "Hooray for the ruler, worthy of song! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 2 of 3).", "back": "Accesorio en Espalda", "backBase0Text": "Sin accesorio de la espalda", "backBase0Notes": "Sin accesorio de la espalda", @@ -592,6 +616,8 @@ "backMystery201504Notes": "¡Bzzz bzzz bzzz! Revolotea de tarea en tarea. No otorga ningún beneficio. Artículo de suscriptor Abril 2015.", "backMystery201507Text": "Tabla de Surf Impresionante", "backMystery201507Notes": "Surf off the Diligent Docks and ride the waves in Inkomplete Bay! Confers no benefit. July 2015 Subscriber Item.", + "backMystery201510Text": "Goblin Tail", + "backMystery201510Notes": "Prehensile and powerful! Confers no benefit. October 2015 Subscriber Item.", "backSpecialWonderconRedText": "Capa poderosa", "backSpecialWonderconRedNotes": "Da chasquidos con fuerza y ​belleza. No otorga ningún beneficio. Artículo de edición especial de convención .", "backSpecialWonderconBlackText": "Capa furtiva", @@ -618,8 +644,8 @@ "bodySpecialSummer2015HealerText": "Pañuelo de Marinero", "bodySpecialSummer2015HealerNotes": "Yo jo jo? No, no, no! No otorga ningún beneficio. Edición Limitada Equipamiento Verano 2015.", "headAccessory": "Accesorio para cabeza", - "accessories": "accesorios", - "animalEars": "Orejas de animal", + "accessories": "Accesorios", + "animalEars": "Orejas de Animal", "headAccessoryBase0Text": "Sin accesorio de la cabeza", "headAccessoryBase0Notes": "Sin accesorio de la cabeza.", "headAccessorySpecialSpringRogueText": "Orejas de gato moradas", @@ -638,21 +664,21 @@ "headAccessorySpecialSpring2015MageNotes": "Estas orejas escuchan atentamente, en caso de que algún mago esté revelando secretos. No confieren ningún beneficio. Equipamiento de edición limitada de primavera 2015.", "headAccessorySpecialSpring2015HealerText": "Orejas de gatito verdes", "headAccessorySpecialSpring2015HealerNotes": "Estas adorables orejas de gatito pondrán a los demás verdes de envidia. No confieren ningún beneficio. Equipamiento de edición limitada de primavera 2015.", - "headAccessoryBearEarsText": "Orejas de un oso", + "headAccessoryBearEarsText": "Orejas de Oso", "headAccessoryBearEarsNotes": "Estas orejas te hacen parecer como un osito. No confieren ningún beneficio", - "headAccessoryCactusEarsText": "Orejas de nopal", + "headAccessoryCactusEarsText": "Orejas de Nopal", "headAccessoryCactusEarsNotes": "Estas orejas te hacen paracer como un nopal espinoso. No otorgan ningún beneficio.", - "headAccessoryFoxEarsText": "Orejas de zorro", + "headAccessoryFoxEarsText": "Orejas de Zorro", "headAccessoryFoxEarsNotes": "Estas orejas te hacen paracer como un zorro tramposo. No otorgan ningún beneficio.", - "headAccessoryLionEarsText": "Orejas de leon", + "headAccessoryLionEarsText": "Orejas de León", "headAccessoryLionEarsNotes": "Estas orejas te hacen paracer como un leon real. No otorgan ningún beneficio.", - "headAccessoryPandaEarsText": "Orejas de una Panda", + "headAccessoryPandaEarsText": "Orejas de Panda", "headAccessoryPandaEarsNotes": "Estas orejas te hacen paracer como un panda gentil. on otorgan ningun beneficio", - "headAccessoryPigEarsText": "Orejas de cerdo", + "headAccessoryPigEarsText": "Orejas de Cerdo", "headAccessoryPigEarsNotes": "Estas orejas te hacen paracer como un cerdo excéntrico. No otorgan ningún beneficio.", "headAccessoryTigerEarsText": "Orejas de Tigre", "headAccessoryTigerEarsNotes": "Estas orejas te hacen paracer como un tigre feroz. No otorgan ningún beneficio.", - "headAccessoryWolfEarsText": "orejas de lobo.", + "headAccessoryWolfEarsText": "Orejas de Lobo", "headAccessoryWolfEarsNotes": "estas orejas te hacen paracer como un lobo leal. No otorgan ningún beneficio.", "headAccessoryMystery201403Text": "Astas de paseante del bosque", "headAccessoryMystery201403Notes": "Estas astas brillan con musgo y líquenes. No otorgan ningún beneficio. Artículo de suscriptor de marzo 2014.", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "Estas astas poderosas cambian de color con las hojas. No otorgan ningún beneficio. Artículo de suscriptor de septiembre 2014.", "headAccessoryMystery201502Text": "Alas del pensamiento", "headAccessoryMystery201502Notes": "¡Deja volar tu imaginación! No otorga ningún beneficio. Objeto de subscriptor de Febrero 2015.", + "headAccessoryMystery201510Text": "Goblin Horns", + "headAccessoryMystery201510Notes": "These fearsome horns are slightly slimy. Confers no benefit. October 2015 Subscriber Item.", "headAccessoryMystery301405Text": "Gafas de tocado", "headAccessoryMystery301405Notes": "\"Las gafas son para tus ojos\", dijeron. \"Nadie quiere gafas que sólo se puedan usar sobre la cabeza\", dijeron. ¡Ja! ¡Claramente les demostraste que estaban equivocados! No otorgan ningún beneficio. Artículo de suscriptor de agosto 3015.", "eyewear": "Lentes", diff --git a/common/locales/es_419/generic.json b/common/locales/es_419/generic.json index f5f2f27c27..37d55140fc 100644 --- a/common/locales/es_419/generic.json +++ b/common/locales/es_419/generic.json @@ -28,7 +28,7 @@ "market": "Mercado", "subscriberItem": "Objeto misterio", "newSubscriberItem": "Nuevo objeto misterio", - "subscriberItemText": "Cada mes, los suscriptores recibirán un objeto misterio. Normalmente este se revela una semana antes del fin de mes. Ve a la página wiki de 'Mystery Item' para la fecha exacta.", + "subscriberItemText": "Cada mes, suscriptores recibirán un ítem misterioso. Esto sucede usualmente una semana antes de fin de mes. Ve la pagina de la wiki llamada \"Ítem Misterioso\" para más información.", "all": "Todo", "none": "Ninguno", "or": "O", @@ -62,15 +62,16 @@ "originalUser": "¡Usuario original!", "originalUserText": "Uno de los muy primeros jugadores. ¡Eso sí es un probador Alfa!", "habitBirthday": "Fiesta de Cumpleaños de Habitica", - "habitBirthdayText": "¡Celebró la fiesta de cumpleaños Habitica!", + "habitBirthdayText": "¡Celebró la fiesta de cumpleaños de Habitica!", "habitBirthdayPluralText": "¡Celebró <%= number %> Fiestas de cumpleaños de Habitica!", - "habiticaDay": "El Dia Llama de Habitica", - "habiticaDaySingularText": "¡Celebra El DíaLlama de Habitica! Gracias por sea un uso fantastico.", - "habiticaDayPluralText": "¡Celebra <%= number %> Los Dias Llamas de Habitica! Gracias por sea un uso fantastico.", + "habiticaDay": "Día del Nombramiento de Habitica", + "habiticaDaySingularText": "¡Celebró el Día del Nombramiento de Habitica! Gracias por ser un usuario fantástico.", + "habiticaDayPluralText": "¡Celebró <%= number %> Días del Nombramiento de Habitica! Gracias por ser un usuario fantástico.", "achievementDilatory": "Salvador de dilatoria", "achievementDilatoryText": "¡Ayudó a vencer el Temido Drag'on de Dilatoria durante el Evento de bienvenida del verano de 2014!", - "costumeContest": "Concurso de disfraces del 2014", - "costumeContestText": "Participó en el Concurso de disfraces de Halloween del 2014. ¡Ve algunas de las entradas en blog.habitica.com/tagged/cosplay!", + "costumeContest": "Costume Contestant", + "costumeContestText": "Participated in the Habitoween Costume Contest. See some of the entries on the Habitica blog!", + "costumeContestTextPlural": "Participated in <%= number %> Habitoween Costume Contests. See some of the entries on the Habitica blog!", "memberSince": "- Miembro desde", "lastLoggedIn": "- Última conexión", "notPorted": "Esta función aún no se ha traído del sitio original.", @@ -79,6 +80,7 @@ "errorUpCase": "ERROR:", "newPassSent": "Nueva contraseña enviada.", "serverUnreach": "Error en la conexión al servidor.", + "requestError": "Rayos!, ha ocurrido un error! Por favor recarga la página, tu última acción puede no haberse guardado correctamente.", "seeConsole": "Si el error persiste, por favor reportalo en Ayuda > Reportar un error. Si estas familiarizado con la consola de tu navegador, por favor incluye cualquier mensaje de error.", "error": "Error", "menu": "Menú", @@ -91,7 +93,7 @@ "audioTheme_danielTheBard": "Daniel el Bardo", "audioTheme_wattsTheme": "Tema de Watts", "audioTheme_gokulTheme": "Tema de Gokul", - "audioTheme_luneFoxTheme": "LuneFox's Theme", + "audioTheme_luneFoxTheme": "Melodía de LuneFox", "askQuestion": "Preguntar", "reportBug": "Reportar un error", "contributeToHRPG": "Contribuir a Habitica", @@ -110,9 +112,9 @@ "December": "Diciembre", "dateFormat": "Formato de fecha", "achievementStressbeast": "Salvador de Stoïkalm", - "achievementStressbeastText": "Helped defeat the Abominable Stressbeast during the 2014 Winter Wonderland Event!", - "achievementBurnout": "Savior of the Flourishing Fields", - "achievementBurnoutText": "Helped defeat Burnout and restore the Exhaust Spirits during the 2015 Fall Festival Event!", + "achievementStressbeastText": "¡Ayudó a vencer a la Abominable Bestia del Estrés durante el Evento Winter Wonderland 2014!", + "achievementBurnout": "Salvador de los Campos Florecientes", + "achievementBurnoutText": "¡Ayudó a vencer a Burnout y a recuperar a los Espíritus Consumidos durante el Festival de Otoño 2015!", "checkOutProgress": "Mira mi progreso en Habitica!", "cardReceived": "Recibiste una tarjeta! ", "cardReceivedFrom": "<%= cardType %> de <%= userName %>", @@ -133,5 +135,17 @@ "thankyou2": "Te mando mil gracias.", "thankyou3": "Estoy muy agradecido - ¡gracias!", "thankyouCardAchievementTitle": "Muy agradecido", - "thankyouCardAchievementText": "Gracias por ser agradecido! Enviadas o recibidas <%= cards %> Cartas de agradecimiento." + "thankyouCardAchievementText": "Gracias por ser agradecido! Enviadas o recibidas <%= cards %> Cartas de agradecimiento.", + "streakAchievement": "You earned a streak achievement!", + "firstStreakAchievement": "21-Day Streak", + "streakAchievementCount": "<%= streaks %> 21-Day Streaks", + "twentyOneDays": "You've completed your Daily for 21 days in a row!", + "dontBreakStreak": "Amazing job. Don't break the streak!", + "dontStop": "Don't Stop Now!", + "levelUpShare": "I leveled up in Habitica by improving my real-life habits!", + "questUnlockShare": "I unlocked a new quest in Habitica!", + "hatchPetShare": "I hatched a new pet by completing my real-life tasks!", + "raisePetShare": "I raised a pet into a mount by completing my real-life tasks!", + "wonChallengeShare": "I won a challenge in Habitica!", + "achievementShare": "I earned a new achievement in Habitica!" } \ No newline at end of file diff --git a/common/locales/es_419/groups.json b/common/locales/es_419/groups.json index 8b66b2a5db..483a0e7696 100644 --- a/common/locales/es_419/groups.json +++ b/common/locales/es_419/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "Dejar la posada", "innCheckIn": "Descansar en la posada", "innText": "¡Has entrado a descansar en la Posada! Mientras permanezcas aquí tus Diarias no te dañarán al finalizar el día, pero sí se renovarán cada día.\nTen cuidado: si tu equipo está en medio de una Batalla contra un Jefe ¡sus Diarias incompletas te seguirán haciendo daño! Además, tú no dañarás al jefe (ni obtendrás los objetos recolectados) hasta que no hayas salido de la Posada.", + "innTextBroken": "Te quedarás en la Posada supongo.... Mientras estés aquí , tus diarias no reducirán tu salud al acabar el dia, pero sí se refrescarán... Si estás participando en una misión contra un Jefe, él te hará daño igualmente si tus compañeros no realizan sus diarias... a menos que ellos también estén en la Posada... Además, tu daño contra el Jefe (o inventario que hayas obtenido) no será aplicado hasta que dejes la Posada... que cansancio....", "lfgPosts": "Publicaciones en la búsqueda de un grupo (Se busca Equipo)", "tutorial": "Tutoría", "glossary": "Glosario", @@ -12,7 +13,7 @@ "community": "Foro de la Comunidad", "dataTool": "Herramienta para desplegar los datos", "resources": "Recursos", - "askQuestionNewbiesGuild": "Ask a Question (Newbies Guild)", + "askQuestionNewbiesGuild": "Haz una pregunta (Gremio de los Novatos)", "tavernTalk": "Conversaciones de taberna", "tavernAlert1": "Nota: Si estás reportando sobre un error, los programadores no lo verán aquí. Por favor,", "tavernAlert2": "en su lugar utiliza GitHub", @@ -25,7 +26,7 @@ "updatedParty": "Ajustes de Equipo actualizados", "noPartyText": "O no tienes un equipo o tu equipo está tardando en cargar. Puedes crear uno e invitar algunos amigos, o si quieres unirte a un equipo existente, haz que introduzcan tu ID de usuario único abajo y después vuelves aquí para buscar la invitación:", "LFG": "Para promocionar tu nuevo equipo o encontrar uno para unirte, ve al Gremio <%= linkStart %>Se busca equipo (Buscando un grupo)<%= linkEnd %>.", - "wantExistingParty": "Want to join an existing party? Go to the <%= linkStart %>Party Wanted Guild<%= linkEnd %> and post this User ID:", + "wantExistingParty": "¿Quieres unirte a un equipo existente? Ve al <%= linkStart %>Gremio de Búsqueda de Equipos<%= linkEnd %> y publica este ID de usuario:", "joinExistingParty": "Unirse al equipo de otra persona", "create": "Crear", "userId": "ID de Usuario", @@ -35,7 +36,7 @@ "invitedToNewParty": "¡Te han invitado a unirte a un nuevo equipo! ¿ Quieres abandonar el equipo en el que estás actualmente y unirte a <%= partyName %>?", "joinNewParty": "Únete a un nuevo equipo", "declineInvitation": "Rechazar invitación", - "loadingNewParty": "Your new party is loading. Please wait...", + "loadingNewParty": "Tu nuevo equipo está cargando. Por favor espera...", "newMsg": "Mensaje nuevo en \"<%= name %>\"", "chat": "Chat", "sendChat": "Enviar Chat", @@ -52,7 +53,7 @@ "logoUrl": "URL del Logotipo", "assignLeader": "Asignar líder del grupo", "members": "Miembros", - "partyList": "Order for party members in header", + "partyList": "Orden de la lista de miembros en la cabecera", "banTip": "Echar miembro", "moreMembers": "más miembros", "invited": "Invitado", @@ -117,8 +118,8 @@ "inviteByEmailExplanation": "Si un amigo se une a Habitica por correo electrónico, automáticamente serán invitados a tu equipo", "inviteFriendsNow": "Invita a tus amigos en este instante", "inviteFriendsLater": "Invita después a tus amigos", - "inviteAlertInfo": "If you have friends already using Habitica, invite them by User ID here.", - "inviteExistUser": "Invite Existing Users", + "inviteAlertInfo": "Si tienes amigos que ya están usando Habitica, invítalos mediante su ID de usuario aquí.", + "inviteExistUser": "Invitar a usuarios existentes", "byColon": "Por:", "inviteNewUsers": "Invitar usuarios nuevos", "sendInvitations": "Enviar invitaciones", @@ -137,13 +138,14 @@ "addToParty": "Añadir a alguien a tu grupo", "likePost": "Dale \"Click\" si te gusta esta publicación", "partyExplanation1": "Juega Habitica con tus amigos para mantener tu cuenta activa", - "partyExplanation2": "Battle monsters and create Challenges!", - "partyExplanation3": "Invite friends now to earn a Quest Scroll!", + "partyExplanation2": "¡Pelea con monstruos y crea Desafíos!", + "partyExplanation3": "¡Invita ya a amigos para obtener un Pergamino de Misión!", "wantToStartParty": "¿Deseas comenzar un equipo?", - "exclusiveQuestScroll": "Inviting a friend to your party will grant you an exclusive Quest Scroll to battle the Basi-List together!", + "exclusiveQuestScroll": "¡Invitar a un amigo a tu equipo te dará un Pergamino de Misión exclusivo para luchar juntos contra la Basi-Lista!", "nameYourParty": "¡Nombra tu equipo!", - "partyEmpty": "You're the only one in your party. Invite your friends!", - "partyChatEmpty": "Your party chat is empty! Type a message in the box above to start chatting.", - "guildChatEmpty": "This guild's chat is empty! Type a message in the box above to start chatting.", - "possessiveParty": "El equipo de <%= name %>" + "partyEmpty": "Eres el único en tu equipo. ¡Invita a tus amigos!", + "partyChatEmpty": "¡El chat de tu equipo está vacío! Escribe un mensaje en el recuadro de arriba para empezar a conversar.", + "guildChatEmpty": "¡El chat de este gremio está vacío! Escribe un mensaje en el recuadro de arriba para empezar a conversar.", + "possessiveParty": "El equipo de <%= name %>", + "requestAcceptGuidelines": "If you would like to post messages in the Tavern or any party or guild chat, please first read our <%= linkStart %>Community Guidelines<%= linkEnd %> and then click the button below to indicate that you accept them." } \ No newline at end of file diff --git a/common/locales/es_419/limited.json b/common/locales/es_419/limited.json index d531cf9862..f48b6917e6 100644 --- a/common/locales/es_419/limited.json +++ b/common/locales/es_419/limited.json @@ -18,9 +18,10 @@ "valentine2": "\"Roses are red\n\nThis poem style is old\n\nI hope that you like this\n\n'Cause it cost ten Gold.\"", "valentine3": "\"Roses are red\n\nIce Drakes are blue\n\nNo treasure is better\n\nThan time spent with you!\"", "valentineCardAchievementTitle": "Amigos cariñosos", - "valentineCardAchievementText": "Aww, you and your friend must really care about each other! Sent or received <%= cards %> Valentine's Day cards.", + "valentineCardAchievementText": "Aww, tú y tu amigo se deben querer mucho mutuamente! <%= cards %> Cartas de San Valentín enviadas o recibidas.", "polarBear": "Oso polar", "turkey": "Pavo", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "Cachorro de oso polar", "jackolantern": "Calabaza de Halloween", "seasonalShop": "Tienda estacional", @@ -30,6 +31,7 @@ "seasonalShopText": "¡¡Bienvenido a la Tienda Estacional!! Nos estamos abasteciendo de objetos valiosos de Edición Estacional de primavera. Todo aquí estará disponible para comprar durante el evento Fiesta de Primavera cada año, pero estamos abierto sólo hasta el 30 de abril, así que asegúrate de abastecerte ahora, ¡o tendrás que esperar un año para comprar estos artículos de nuevo!", "seasonalShopSummerText": "Welcome to the Seasonal Shop!! We're stocking summertime Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Summer Splash event each year, but we're only open until July 31st, so be sure to stock up now, or you'll have to wait a year to buy these items again!", "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31, so be sure to stock up now, or you'll have to wait a year to buy these items again!", + "seasonalShopFallTextBroken": "Oh.... Welcome to the Seasonal Shop... We're stocking autumn Seasonal Edition goodies, or something... Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31... I guess you should to stock up now, or you'll have to wait... and wait... and wait... *sigh*", "seasonalShopRebirth": "If you've used the Orb of Rebirth, you can repurchase this equipment in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.", "candycaneSet": "Bastón de caramelo (Mago)", "skiSet": "Esquia-sesino (Granuja)", @@ -37,7 +39,7 @@ "yetiSet": "Domadora de yetis (Guerrero)", "toAndFromCard": "Para: <%= toName %>, De: <%= fromName %>", "nyeCard": "Tarjeta del Año Nuevo", - "nyeCardExplanation": "For celebrating the new year together, you both receive the \"Auld Acquaintance\" badge!", + "nyeCardExplanation": "Para celebrar el año nuevo juntos, ambos reciben la placa \"Viejas Amistades\"!", "nyeCardNotes": "Envía una carta de Feliz Año Nuevo a un compañero de equipo.", "seasonalItems": "Artículos estacionales", "nyeCardAchievementTitle": "Antiguo conocido", @@ -53,12 +55,12 @@ "lovingPupSet": "Cachorro cariñoso (Curador)", "stealthyKittySet": "Gatito sigiloso (Granuja)", "daringSwashbucklerSet": "Espadachín Atrevido (Guerrero)", - "emeraldMermageSet": "Emerald Mermage (Mage)", + "emeraldMermageSet": "Sireno Esmeralda (Mago)", "reefSeahealerSet": "Reef Seahealer (Healer)", "roguishPirateSet": "Pirata Travieso (Granuja)", "monsterOfScienceSet": "Monstruo de Ciencia (Guerrero)", "witchyWizardSet": "Hechicero Embrujado (Mago)", "mummyMedicSet": "Momia Médica (Curador)", - "vampireSmiterSet": "Vampire Smiter (Rogue)", + "vampireSmiterSet": "Golpeador Vampiro (Rogue)", "fallEventAvailability": "Disponible hasta el 31 de Octubre" } \ No newline at end of file diff --git a/common/locales/es_419/messages.json b/common/locales/es_419/messages.json index 57540c25d3..e9e969f1be 100644 --- a/common/locales/es_419/messages.json +++ b/common/locales/es_419/messages.json @@ -5,7 +5,7 @@ "messageTagNotFound": "Etiqueta no encontrada.", "messagePetNotFound": ":pet no encontrado en user.items.pets", "messageFoodNotFound": ":food no encontrado en user.items.food", - "messageNotAvailable": "This item is not currently available for purchase.", + "messageNotAvailable": "Esta cosa no está disponible para comprar.", "messageCannotFeedPet": "No se pudo alimentar a esta mascota.", "messageAlreadyMount": "Ya posees esta montura. Intenta alimentar a otra mascota.", "messageEvolve": "Has domesticado a <%= egg %>, ¡vamos a dar una vuelta!", @@ -30,5 +30,26 @@ "messageAlreadyOwnGear": "Ya posees este item. Equípalo yendo a la página de equipamiento.", "armoireEquipment": "<%= image %> Hallaste una pieza de Equipamiento raro en el Armario: <%= dropText %> ¡Genial!", "armoireFood": "<%= image %> You rummage in the Armoire and find <%= dropArticle %><%= dropText %>. What's that doing in here?", - "armoireExp": "You wrestle with the Armoire and gain Experience. Take that!" + "armoireExp": "Luchas con el Armario y ganas Experiencia. Tómala!", + "messageInsufficientGems": "No tienes suficientes gemas!", + "messageAuthPasswordMustMatch": ":password y :confirmPassword no coinciden", + "messageAuthCredentialsRequired": "Se necesitan :username, :email, :password, y :confirmPassword", + "messageAuthUsernameTaken": "Este nombre de usuario ya está siendo usado", + "messageAuthEmailTaken": "Esta dirección de correo electrónico ya está siendo usada", + "messageAuthNoUserFound": "Usuario no encontrado.", + "messageAuthMustBeLoggedIn": "Tienes que iniciar sesíon.", + "messageAuthMustIncludeTokens": "Debes incluir un token o un uid (ID de usuario) en tu petición.", + "messageGroupNotFound": "Grupo no encontrado o tu no tienes acceso.", + "messageGroupAlreadyInParty": "Ya estás en un equipo, intenta actualizar.", + "messageGroupOnlyLeaderCanUpdate": "Solo el líder del grupo puede actualizar el grupo!", + "messageGroupRequiresInvite": "No puedes unirte al grupo, no estás invitado a él.", + "messageGroupCannotRemoveSelf": "No puedes eliminarte a ti mismo!", + "messageGroupChatBlankMessage": "No puedes enviar un mensaje en blanco", + "messageGroupChatLikeOwnMessage": "No puedes darle me gusta a tu propio mensaje. No seas ese tipo de persona.", + "messageGroupChatFlagOwnMessage": "No puedes reportar tu propio mensaje.", + "messageGroupChatFlagAlreadyReported": "Ya has reportado este mensaje", + "messageGroupChatNotFound": "Mensaje no encontrado!", + "messageGroupChatAdminClearFlagCount": "Only an admin can clear the flag count!", + "messageUserOperationProtected": "path `<%= operation %>` was not saved, as it's a protected path.", + "messageUserOperationNotFound": "<%= operation %> operación no encontrada" } \ No newline at end of file diff --git a/common/locales/es_419/noscript.json b/common/locales/es_419/noscript.json new file mode 100644 index 0000000000..1b0c0e224e --- /dev/null +++ b/common/locales/es_419/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "¡Alas! Tu navegador no Tiene JavaScript Activado.", + "jsDisabledHeadingFull": "¡Alas! Tu navegador no Tiene JavaScript activado y sin él, Habitica no puede funcionar adecuadamente.", + "jsDisabledText": "¡Habitica no puede mostrar su contenido sin él!", + "jsDisabledLink": "¡Por favor activa JavaScript para continuar!" +} \ No newline at end of file diff --git a/common/locales/es_419/npc.json b/common/locales/es_419/npc.json index d0612ab99d..cac885f64f 100644 --- a/common/locales/es_419/npc.json +++ b/common/locales/es_419/npc.json @@ -7,15 +7,19 @@ "daniel": "Daniel", "danielText": "¡Bienvenido a la Taberna! Quédate un rato y conoce a los locales. Si necesitas descansar (¿vacaciones, enfermedad?) te alojaré en la Posada. Mientras estés registrado tus Diarias no te lastimarán al final del día, pero todavía las puedes marcar.", "danielText2": "Aviso: Si estás participando en una misión contra un jefe, ¡el jefe todavía te hará daño si los de tu equipo no completan sus Diarias! Además, el daño que acumules contra el (o los objetos que hayas recolectado) no se aplicarán sino hasta que salgas de la Posada.", + "danielTextBroken": "Bienvenido a la Taberna... Supongo... Si necesitas descansar, te instalaré en la Posada... Mientras estés registrado, tus Diarias no te harán daño al final del día, pero aún así puedes tildarlas... Si tienes la energía...", + "danielText2Broken": "Oh... Si estás participando en una misión de jefe, el jefe seguirá dañándote por las Diarias que tus compañeros de equipo no completen... Ademas, el daño que tú le causes al Jefe (o los ítems recolectados) no será aplicado hasta que salgas de la Posada...", "alexander": "Alexander el Comerciante", "welcomeMarket": "¡Bienvenidos al Mercado! ¡Compra huevos difíciles de encontrar y pociones! ¡Vende tus extras! ¡Encarga servicios útiles! Ven a ver lo que tenemos para ofrecer.", - "sellForGold": "Vender <%= item %> por <%= gold %> Oro", - "sellEggForGold": "Vender huevo de <%= itemType %> por <%= gold %> monedas de oro", - "sellPotionForGold": "Vender pócima <%= itemType %> por <%= gold %> monedas de oro", + "displayItemForGold": "¿Quieres vender un/a <%= itemType %>?", + "displayEggForGold": "¿Quieres vender un Huevo de <%= itemType %>?", + "displayPotionForGold": "¿Quieres vender una Poción <%= itemType %>?", + "sellForGold": "Véndelo/a por <%= gold %> Oro", "buyGems": "Comprar Gemas", "justin": "Justin", "ian": "Ian", "ianText": "Bienvenido a la Tienda de Misiones! Aquí puedes usar Pergaminos de Misiones para luchar contra monstruos con tus amigos. Asegúrate de haber mirado todos los Pergaminos de Misiones para comprar el correcto!", + "ianBrokenText": "Bienvenido a la Tienda de Misiones... Aquí puedes utilizar Pergaminos de Misión para luchar contra monstruos con tus amigos... Asegúrate de chequear nuestra fina selección de Pergaminos de Misión a la derecha...", "USD": "USD", "newStuff": "Cosas nuevas", "cool": "Dímelo más tarde", diff --git a/common/locales/es_419/pets.json b/common/locales/es_419/pets.json index 64e796c918..a32c59397f 100644 --- a/common/locales/es_419/pets.json +++ b/common/locales/es_419/pets.json @@ -1,13 +1,13 @@ { "pets": "Mascotas", "petsFound": "Mascotas encontradas", - "magicPets": "Magic Potion Pets", + "magicPets": "Mascotas de Poción Mágica", "rarePets": "Mascotas raras", "questPets": "Mascotas de misión", "mounts": "Monturas", "mountsTamed": "Monturas domadas", "questMounts": "Monturas de misión", - "magicMounts": "Magic Potion Mounts", + "magicMounts": "Monturas de Poción Mágica", "rareMounts": "Monturas raras", "etherealLion": "León etéreo", "veteranWolf": "Lobo veterano", @@ -18,7 +18,7 @@ "mammoth": "Mamut lanudo", "orca": "Orca", "royalPurpleGryphon": "Grifo Real Morado", - "phoenix": "Phoenix", + "phoenix": "Fénix", "rarePetPop1": "¡Haz clic en la pata dorada para aprender más sobre cómo obtener esta mascota contribuyendo a Habitica!", "rarePetPop2": "¡Cómo obtener esta mascota!", "potion": "Pócima <%= potionType %>", @@ -27,15 +27,15 @@ "eggSingular": "huevo", "noEggs": "No tienes huevos.", "hatchingPotions": "Pócimas de eclosión", - "magicHatchingPotions": "Magic Hatching Potions", + "magicHatchingPotions": "Pociones de Eclosión Mágicas", "hatchingPotion": "pócima de eclosión", "noHatchingPotions": "No tienes pócimas de eclosión.", "inventoryText": "Haz clic en un huevo para ver las pócimas utilizables resaltadas en verde, y después haz clic en una de las pociones para incubar tu mascota. Si ninguna pócima se destacó, haz clic en ese huevo de nuevo para anular la selección, y haz clic primero sobre una pócima para destacar los huevos utilizables. También puedes vender los objetos que ya no desees a Alexander el Comerciante.", "foodText": "comida", "food": "Comida y Monturas", "noFood": "No tienes ni comida ni monturas.", - "dropsExplanation": "Get these items faster with Gems if you don't want to wait for them to drop when completing a task. Learn more about the drop system.", - "premiumPotionNoDropExplanation": "Magic Hatching Potions cannot be used on eggs received from Quests. The only way to get Magic Hatching Potions is by buying them below, not from random drops.", + "dropsExplanation": "Consigue estos objetos más rápido con Gemas si no quieres esperar a que aparezcan cuando completes una tarea. Lee más acerca del sistema de botín.", + "premiumPotionNoDropExplanation": "Las Pociones de Eclosión Mágicas no pueden ser utilizadas con huevos obtenidos en Misiones. La única forma de obtener Pociones de Eclosión Mágicas es comprándolas abajo, no mediante botines aleatorios.", "beastMasterProgress": "Progreso de Maestro de las bestias", "stableBeastMasterProgress": "Progreso de Maestro de las bestias: <%= number %> Mascotas encontradas", "beastAchievement": "¡Has ganado el Logro de \"Maestro de las Bestias\" por haber coleccionado todas las mascotas!", @@ -58,8 +58,16 @@ "firstDrop": "¡Has desbloqueado el Sistema de botín! Ahora, cuando realizas tareas, tendrás una probabilidad pequeña de encontrar un objeto ¡incluyendo huevos, pociones y comida!. Has encontrado un <%= eggText %> Huevo! <%= eggNotes %>", "useGems": "Si deseas una mascota pero no puedes esperar más para el botín, ¡usa Gemas en Inventario > Mercardo para comprar una!", "hatchAPot": "¿Eclosionar un <%= egg %> <%= potion %>?", + "hatchedPet": "You hatched a <%= potion %> <%= egg %>!", + "displayNow": "Mostrar Ahora", + "displayLater": "Mostrar Más Tarde", + "earnedCompanion": "With all your productivity, you've earned a new companion. Feed it to make it grow!", "feedPet": "¿Dar de comer <%= article %><%= text %> a tu <%= name %>?", "useSaddle": "¿Ensillar <%= pet %>?", + "raisedPet": "You grew a <%= pet %>!", + "earnedSteed": "By completing your tasks, you've earned a faithful steed!", + "rideNow": "Montar Ahora", + "rideLater": "Montar Más Tarde", "petName": "<%= egg %> <%= potion %>", "mountName": "<%= mount %> <%= potion %>", "petKeyName": "Llave de la caseta", diff --git a/common/locales/es_419/quests.json b/common/locales/es_419/quests.json index 0f6b2c0535..19ddebfb33 100644 --- a/common/locales/es_419/quests.json +++ b/common/locales/es_419/quests.json @@ -13,30 +13,37 @@ "youReceived": "Has recibido", "dropQuestCongrats": "Felicitaciones por ganar este pergamino de misión! Puedes invitar a tu grupo para empezar la misión ahora mismo o vuelve en cualquier momento en tu Inventario > Misiones.", "questSend": "Cliqueando en \"Invitar\" enviara una invitación a los miembros de tu grupo. Cuando todos los miembros hayan aceptado o negado, la misión comenzara. Mira el progreso en Social > Grupo", + "questSendBroken": "Cliqueando en \"Invitar\" enviará una invitación a los miembros de tu grupo. Cuando todos los miembros hayan aceptado o negado, la misión comenzará. Mira el progreso en Social > Grupo", "inviteParty": "Invitar grupo a la Misión", "questInvitation": "Invitación a una misión:", "questInvitationTitle": "Invitación a una misión", "questInvitationInfo": "Invitación para la misión <%= quest %>", "askLater": "Preguntar más tarde", - "questLater": "Quest Later", + "questLater": "Realizar misión más tarde", "buyQuest": "Comprar misión", "accepted": "Aceptado", "rejected": "Rechazado", "pending": "Pendiente", "questStart": "La misión comienza cuando todos los participantes la hayan aceptado o rechazado. Sólo aquellos que hayan hecho clic en \"aceptar\" podrán participar en la misión y recibir el botín. Si los participantes tardan demasiado (o están inactivos) el organizador de la misión puede comenzarla sin ellos haciendo clic en \"Iniciar\". El organizador también puede cancelar la misión y recuperar el pergamino de misión haciendo clic en \"Cancelar\".", + "questStartBroken": "La misión comienza cuando todos los participantes la hayan aceptado o rechazado. Sólo aquellos que hayan hecho clic en \"aceptar\" podrán participar en la misión y recibir el botín. Si los participantes tardan demasiado (o están inactivos) el organizador de la misión puede comenzarla sin ellos haciendo clic en \"Iniciar\". El organizador también puede cancelar la misión y recuperar el pergamino de misión haciendo clic en \"Cancelar\".", "begin": "Iniciar", "bossHP": "Vida del Jefe", "bossStrength": "Fuerza del Jefe", - "rage": "Rage", + "rage": "Ira", "collect": "Recolectar", "collected": "Recogido", "collectionItems": "<%= number %> <%= items %>", "itemsToCollect": "Items por Recolectar", "bossDmg1": "Cada tarea diaria o tarea pendiente completada y cada hábito positivo lastima al Jefe. Dañalo aun mas con las tareas mas rojas o aplástalos brutalmente y hazlos estallar en llamas. El Jefe hará daño a cada participante de la misión por cada tarea diaria que dejes pasar (multiplicado por la fuerza del jefe) en adición al daño regular, ¡así que mantén a tu grupo saludable completando tus tareas diarias! Todo daño hacia y desde el jefe se anota en tu cron (el día de cambio) ", "bossDmg2": "Sólo los participantes lucharán contra el Jefe y se repartirán el botín.", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "Cada tarea diaria o tarea pendiente completada y cada hábito positivo lastima al Jefe. Dáñalo aun mas con las tareas mas rojas o aplástalos brutalmente y hazlos estallar en llamas. El Jefe hará daño a cada participante de la misión por cada tarea diaria que dejes pasar (multiplicado por la fuerza del jefe) en adición al daño regular, ¡así que mantén a tu grupo saludable completando tus tareas diarias! Todo daño hacia y desde el jefe se anota en tu cron (el día de cambio) ", + "bossDmg2Broken": "Solo los participantes pelearán contra el Jefe y compartirán el botín de la misión...", + "tavernBossInfo": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "tavernBossInfoBroken": "¡Completa Diarias y Pendientes para dañar al Jefe Mundial! Las Diarias incompletas llenan la barra de Ataque Consumidor. Cuando la barra de Ataque Consumidor se llene, el Jefe Mundial atacará a un PNJ. Un Jefe Mundial nunca dañará a jugadores o cuentas individuales de ninguna forma. Sólo las cuentas activas que no estén descansando en la Posada tendrán sus tareas bajo conteo.", "bossColl1": "Para coleccionar artículos, haga tus tareas positivas. Objetos de misiones se ganan como objetos normales; sin embargo, no verá estos artículos hasta el próximo día cuando todo que encontró estará sumado y contribuido al total.", "bossColl2": "Solo los participantes pueden coleccionar artículos y compartir del botín de la misión.", + "bossColl1Broken": "Para obtener items realice tus tareas positivas. Items de misiones se hallaran al completar las tareas, aunque no los verás hasta el día siguiente, allí entonces verás todo lo que encontraste en el día acumulado.", + "bossColl2Broken": "Solo los participantes pueden recolectar items y compartir el botín de la misión...", "abort": "Abortar", "leaveQuest": "Abandonar misión", "sureLeave": "¿Estás seguro que quieres salir de la misión activa? Todo tu progreso en la misión se perderá.", @@ -63,10 +70,13 @@ "sureAbort": "¿Estás seguro de querer abortar la misión? Esto hará que todo tu equipo aborte la misión y todo el progreso se perderá. El pergamino de misión será regresado al organizador de la misión.", "doubleSureAbort": "¿Verdaderamente estas seguro? ¡Asegúrate que no te oidarán eternamente!", "questWarning": "Si nuevos miembros se unen al equipo antes de que comience la misión, también recibirán una invitación. Sin embargo, una vez que la misión ha comenzado, nuevos miembros no se pueden unir a la misión.", + "questWarningBroken": "Si nuevos jugadores ingresan al grupo antes de que la misión empiece, ellos recibirán una invitación también... De todos modos una vez la misión empiece, no pueden ingresar nuevos miembros de grupo a la misión...", "bossRageTitle": "Ira", "bossRageDescription": "Cuando esta barra se llene, el jefe desencadenará un ataque especial!", "startAQuest": "INICIAR UNA MISIÓN", "startQuest": "Iniciar Misión", "whichQuestStart": "¿Cuál misión quieres empezar?", - "getMoreQuests": "Obtén más misiones" + "getMoreQuests": "Obtén más misiones", + "unlockedAQuest": "¡Has desbloqueado una misión!", + "leveledUpReceivedQuest": "¡Subiste de nivel a Nivel <%= level %> y has recibido un pergamino de misión!" } \ No newline at end of file diff --git a/common/locales/es_419/questscontent.json b/common/locales/es_419/questscontent.json index c8441ee821..a6e94fba18 100644 --- a/common/locales/es_419/questscontent.json +++ b/common/locales/es_419/questscontent.json @@ -58,45 +58,45 @@ "questSpiderBoss": "Araña", "questSpiderDropSpiderEgg": "Araña (Huevo)", "questSpiderUnlockText": "Desbloquea huevos de araña comprables en el Mercado", - "questVice1Text": "Vice, Part 1: Free Yourself of the Dragon's Influence", + "questVice1Text": "Vicio, Parte 1: Libérate de la Influencia del Dragón", "questVice1Notes": "

Dicen que se encuentra un mal terrible en las cavernas del monte Habitica. Un monstruo cuya presencia retuerce la voluntad de los gran héroes del país, conduciéndolos a los malos hábitos y a la pereza. La bestia es un gran dragón de inmenso poder, compuesto de las mismas sombras. Vicio, el traicionero Guivre Sombrío. ¡Valientes héroes, levántense y venzan a esta bestia infame de una vez por todas, pero sólo si creen que pueden mantenerse firmes contra su inmenso poder.

Vice Parte 1:

¿Cómo puedes pretender enfrentarte a la bestia si ya tiene control sobre ti? ¡No caigas víctima de la pereza y el vicio! ¡Trabaja duro para vencer la oscura influencia del dragón, y disipar su control sobre ti!

", "questVice1Boss": "Sombra de Vicio", "questVice1DropVice2Quest": "Vicio parte 2 (Pergamino)", - "questVice2Text": "Vice, Part 2: Find the Lair of the Wyrm", + "questVice2Text": "Vicio, Parte 2: Encuentra la Guarida del Guivre", "questVice2Notes": "Al disiparse la influencia que Vicio tenía sobre ti, sientes un arrebato de fuerza que no sabías que tenías volver a ti. Sintiéndose seguros de sí mismos y de su capacidad de soportar la influencia del guivre, tú y tu equipo marchan hacia Monte Habitica. Se aproximan a la entrada de las cavernas de la montaña y hacen una pausa. Oleadas de sombras, casi como niebla, flotan en la entrada. Es casi imposible ver lo que tienen enfrente. La luz de sus linternas parecen terminar abruptamente donde las sombras comienzan. Se dice que sólo luz mágica puede atravesar la niebla infernal del dragón. Si fueran capaces de encontrar suficientes cristales de luz, podrían abrirse camino hacia el dragón.", "questVice2CollectLightCrystal": "Cristales de luz", "questVice2DropVice3Quest": "Vicio parte 3 (Pergamino)", - "questVice3Text": "Vice, Part 3: Vice Awakens", + "questVice3Text": "Vicio, Parte 3: Vicio Despierta", "questVice3Notes": "Tras mucho esfuerzo, tu equipo ha descubierto la guarida de Vicio. El enorme monstruo observa a tu equipo repugnado. Mientras sombras se retuercen a tu alrededor, una voz susurra en tu interior, \"¿Más necios de Habitica que intentan detenerme? Qué lindos. Hubiera sido más inteligente no haber venido.\" El escamado titán alza su cabeza y se prepara para atacar. ¡Es tu oportunidad! ¡Da lo mejor de ti y derrota a Vicio de una vez por todas!", "questVice3Completion": "Las sombras se disipan de la caverna mientras se asienta un férreo silencio. ¡Vaya, lo has logrado! ¡Haz vencido a Vicio! Tú y tu equipo al fin podrán respirar tranquilos. Disfruten de la victoria, valientes Habiteros, pero recuerdan las lecciones que han aprendido al combatir a Vicio y sigan adelante. Todavía hay tareas que completar y peores males que conquistar.", "questVice3Boss": "Vicio, el Guivre Sombrío", "questVice3DropWeaponSpecial2": "La vara del Dragón de Stephen Weber", "questVice3DropDragonEgg": "Dragón (Huevo)", "questVice3DropShadeHatchingPotion": "Poción de eclosión de sombra", - "questMoonstone1Text": "The Moonstone Chain, Part 1: The Moonstone Chain", + "questMoonstone1Text": "La Cadena de Piedra Lunar, Parte 1: La Cadena de Piedra Lunar", "questMoonstone1Notes": "

Una terrible aflicción ha golpeado a los Habiticanos. Malos Hábitos que se creían muertos hace tiempo, se han levantado de nuevo en venganza. Los platos se encuentran sin lavar, los libros de texto permanecen sin leer, ¡y la procrastinación corre sin nadie que la detenga!


Sigues el rastro de algunos de tus propios Malos Hábitos a las Ciénagas del Estancamiento y descubres a la culpable: la fantasmal Necromante, Recidiva. Te lanzas a atacarla, pero tus armas atraviesan su cuerpo espectral inútilmente.


\"No te molestes,\" susurra con un tono áspero y seco. \"Sin una cadena de piedras de luna, nada puede hacerme daño – ¡y el maestro joyero @aurakami dispersó todas las piedras de luna a través de Habitica hace mucho tiempo!\" Jadeante, te retiras... pero sabes qué es lo que debes hacer.

", "questMoonstone1CollectMoonstone": "Piedras de luna", "questMoonstone1DropMoonstone2Quest": "La Cadena de la piedra de luna parte 2: Recidiva la Necromante (Pergamino)", - "questMoonstone2Text": "The Moonstone Chain, Part 2: Recidivate The Necromancer", + "questMoonstone2Text": "La Cadena de Piedra Lunar, Parte 2: Reincidencia La Necromante", "questMoonstone2Notes": "

El valiente armero @Inventrix te ayuda a dar forma a las piedras de luna encantadas hasta hacerlas una cadena. Estás listo para confrontar finalmente a Recidiva, pero en cuanto entras a las Ciénagas de Estancamiento, te recorre un terrible escalofrío.


Un soplo podrido susurra en tu oído. \"¿Has regresado? Qué deleite...\" Giras y atacas, y bajo la luz de la cadena de piedras de luna, tu arma golpea la carne sólida. \"Tal vez me hayas atado al mundo una vez más,\" gruñe Recidiva, \"¡pero ahora es tiempo de que lo dejes!\"

", "questMoonstone2Boss": "La Necromante", "questMoonstone2DropMoonstone3Quest": "La Cadena de la piedra de luna parte 3: Recidiva transformada (Pergamino)", - "questMoonstone3Text": "The Moonstone Chain, Part 3: Recidivate Transformed", + "questMoonstone3Text": "La Cadena de Piedra Lunar, Parte 3: Reincidencia Transformada", "questMoonstone3Notes": "

Recidiva se desploma al suelo, y lq golpeas con tu cadena de piedras de luna. Para tu terror, Recidiva se apodera de las gemas, sus ojos ardiendo triunfantes.


\"¡Tonta criatura de carne!\" grita. \"Estas piedras de luna me restaurarán a mi forma física, es cierto, pero no como tú imaginaste. A medida de que la luna crezca en la oscuridad, también crecen mis poderes, y de las sombras convoco al espectro de tu más temido enemigo!\"


Una enfermiza neblina verde se levanta de la ciénaga, y el cuerpo Recidiva se retuerce y se contorsiona en una forma que te llena de horror – el cuerpo no-muerto de Vicio, horriblemente renacido.

", "questMoonstone3Completion": "

Respiras difícilmente y el sudor hace que ardan tus ojos mentras el Guivre se colapsa. Los restos de Recidiva se desvanecen formando una gruesa bruma gris que desaparece rápidamente bajo la ráfaga de una refrescante brisa, y escuchas en la distancia los gritos de multitudes de Habiticanos derrotando a sus Malos Hábitos de una vez por todas.


@Baconsaur el maestro de las bestias se abalanza montado en un grifo. \"Vi el final de tu batalla desde el cielo, y fue increíblemente conmovedora. Por favor, toma esta túnica encantada – tu valentía habla de un noble corazón, y creo que estabas destinado a tenerla.\"

", "questMoonstone3Boss": "Necrovicio", "questMoonstone3DropRottenMeat": "Carne podrida (Comida)", "questMoonstone3DropZombiePotion": "Poción de ecolsion Zombie", - "questGoldenknight1Text": "El Caballero dorado, Parte 1: Un regaño severo", + "questGoldenknight1Text": "El Caballero Dorado, Parte 1: Un Regaño Severo", "questGoldenknight1Notes": "

La Dama de oro ha estado molestando a los pobres Habiticanos. ¿No cumpliste todas tus Diarias? ¿Marcaste un hábito negativo? Ella lo usará como razón para acosarte y decir que tienes que seguir su ejemplo. Ella es el ejemplo brillante de un Habiticano perfecto y tú no eres más que un fracaso. Bueno, ¡eso no es para nada agradable! Todos comiten errores y no debieran ser tratados con tanta negatividad. ¡Tal vez es hora para reunir unos cuantos testimonios de los Habitacanos ofendidos y darle una a la Dama de oro una severa reprimenda!

", "questGoldenknight1CollectTestimony": "Testimonios", "questGoldenknight1DropGoldenknight2Quest": "La Cadena de la Dama de oro parte 2: Oro deslustrado (Pergamino)", - "questGoldenknight2Text": "El Caballero dorado, Parte 2: El Caballero de oro", + "questGoldenknight2Text": "El Caballero Dorado, Parte 2: El Caballero de Oro", "questGoldenknight2Notes": "

Armado con cientos de testimonios de Habiticanos, enfrentas finalmente a la Dama de oro. Empiezas a recitar las quejas de los Habiticanos, una por una. \"Y @Pfeffernusse dice que tus constantes fanfarronadas-\" Ella alza su mano para silenciarte y se burla, \"Por favor, estas personas simplemente están celosas de mi éxito. En lugar de quejarse, ¡deberían trabajar tan duro como yo! ¡Quizás pueda mostrarte el poder que puedes obtener mediante una diligencia como la mía!\" Entonces levanta su lucero del alba, ¡y se prepara para atacarte!

", "questGoldenknight2Boss": "Dama de oro", "questGoldenknight2DropGoldenknight3Quest": "La Cadena de la Dama de oro parte 3: El Caballero de hierro (Pergamino)", - "questGoldenknight3Text": "El Caballero dorado, Parte 1: El Caballero de hierro", - "questGoldenknight3Notes": "

@Jon Arinbjorn cries out to you to get your attention. In the aftermath of your battle, a new figure has appeared. A knight coated in stained-black iron slowly approaches you with sword in hand. The Golden Knight shouts to the figure, \"Father, no!\" but the knight shows no signs of stopping. She turns to you and says, \"I am sorry. I have been a fool, with a head too big to see how cruel I have been. But my father is crueler than I could ever be. If he isn't stopped he'll destroy us all. Here, use my morningstar and halt the Iron Knight!\"

", + "questGoldenknight3Text": "El Caballero Dorado, Parte 3: El Caballero de Hierro", + "questGoldenknight3Notes": "

@Jon Arinbjorn grita para llamar tu atención. En los momentos siguientes a tu batalla, una nueva figura ha aparecido. Un caballero revestido de hierro teñido de negro se aproxima a ti lentamente con su espada en mano. La Dama Dorada vocifera hacia la figura \"¡Padre, no!\" pero el otro caballero no parece querer detenerse. Ella se vuelve hacia ti y dice \"Lo siento. He sido una tonta, con un ego demasiado grande para ver lo cruel que he sido. Pero mi padre es aún más cruel de lo que yo jamás podría ser. Si nadie lo detiene nos destruirá a todos. ¡Toma, usa mi Lucero del Alba y termina con el Caballero de Hierro!\"

", "questGoldenknight3Completion": "

Con un satisfactorio sonido metálico, el Caballero de hierro cae de rodillas y se desploma. \"Eres bastante fuerte\", jadea. \"Hoy me han humillado\". La Dama de oro se acerca a ti y dice: \"Gracias. Creo que hemos ganado algo de humildad al enfrentarnos contigo. Hablaré con mi padre y le explicaré las quejas sobre nosotros. Quizás deberíamos empezar por disculparnos ante los otros Habiticanos\". Se detiene a pensar por un momento antes de volverse nuevamente hacia ti. \"Ten: como obsequio, quiero que te quedes con mi Lucero del Alba. Es tuyo ahora\".

", "questGoldenknight3Boss": "El Caballero de hierro", "questGoldenknight3DropHoney": "Miel (Comida)", @@ -128,15 +128,15 @@ "questSeahorseBoss": "Semental de mar", "questSeahorseDropSeahorseEgg": "Caballito de mar (Huevo)", "questSeahorseUnlockText": "Desbloquea huevos de caballito de mar comprables en el Mercado", - "questAtom1Text": "Attack of the Mundane, Part 1: Dish Disaster!", + "questAtom1Text": "Ataque de lo Mundano, Parte 1: ¡Desastre de Platos!", "questAtom1Notes": "Llegas a la orilla del Lago Lavado para relajación bien merecida... ¡Pero el lago está contaminado con platos sucios! ¿Cómo sucedió esto? Bueno, simplemente no puedes permitir que el lago siga en este estado. Sólo hay una cosa que puedes hacer: ¡limpiar los platos y salvar tu lugar de vacaciones! Mejor encontrar un poco de jabón para limpiar este desastre. Mucho jabón...", "questAtom1CollectSoapBars": "Barras de jabón", - "questAtom1Drop": "The SnackLess Monster (Quest Scroll)", - "questAtom2Text": "Attack of the Mundane, Part 2: The SnackLess Monster", + "questAtom1Drop": "El Monstruo SnackLess (Pergamino de Misión)", + "questAtom2Text": "Ataque de lo Mundano, Parte 2: El Monstruo SnackLess", "questAtom2Notes": "Puf, este lugar se ve mucho más bonito con todos estos platos limpiados. Quizás, al fin, podrás pasar un buen rato. Oh - parece que hay una caja de pizza flotando en el lago. Bueno, realmente ¿que es una cosa más para limpiar? Con una súbita oleada la caja se levanta del agua y se revela como la cabeza de un monstruo. ¡No puede ser! ¡¿El legendario Monstruo SnackLess?! Se dice que ha existido escondido en el lago desde la prehistoria: una criatura engendrado de los restos de comida y basura de los antiguos Habiticanos. ¡Qué asco!", "questAtom2Boss": "El Monstruo SnackLess", - "questAtom2Drop": "The Laundromancer (Quest Scroll)", - "questAtom3Text": "Ataque del Mundano, Parte 3: El Lavandomante", + "questAtom2Drop": "El Lavadomante (Pergamino de Misión)", + "questAtom3Text": "Ataque de lo Mundano, Parte 3: El Lavadomante", "questAtom3Notes": "Con un grito ensordecedor, y cinco deliciosos tipos de queso emergiendo de su boca, el Monstruo SnackLess se cae a pedazos. \"¡CÓMO TE ATREVES!\" resuena una voz desde debajo de la superficie del agua. Una figura azul, con túnica, emerge del agua, empuñando un cepillo de baño mágico. Ropa sucia comienza a burbujear a la superficie del lago. \"Soy el Lavandomante!\" anuncia furiosamente. \"Que desfachatez - lavar mis esplendidamente sucio platos, destruir mi mascota, y entrar a mi dominio con ropa tan limpia. ¡Prepárate a sentir la ira empapada de mi magia anti-lavado!\"", "questAtom3Completion": "¡El malvado Lavandomante ha sido vencido! Ropa limpia cae en pilas a tu alrededor. Las cosas se ven mucho mejor por aquí. Mientras comienzas a vadear por la armadura recién planchada, un centelleo de metal llama tu atención, y tu mirada cae sobre un casco resplandeciente. El dueño original de este objeto radiante puede ser desconocido, pero mientras te lo pones, sientes la presencia alentadora de un espíritu generoso. Lástima que no le cocieron sus iniciales.", "questAtom3Boss": "El Lavandomante", @@ -165,7 +165,7 @@ "questStressbeastBossRageGuide": "`¡La Abominable Bestia del Estrés usó Ataque de Estrés!`\n\nEl aumento del estrés cura a La Abominable Bestia del Estrés!\n\n¡Cuidado! Justin el Guía está tratando de distraer a La Abominable Bestia del Estrés corriendo alrededor de sus tobillos, gritando consejos de productividad! La Abominable Bestia del Estrés está pisoteando locamente, pero parece que realmente estamos desgastando a esta bestia. Dudo que tenga suficiente energía para otro ataque. No te rindas... ¡estamos muy cerca de acabar con ella!", "questStressbeastDesperation": "`¡LaAbominable Bestia del Estrés llega a 500K de salud! ¡La Abominable Bestia del Estrés usa Defensa Desesperada!`\n\n¡Ya casi estamos, Habiticanos! ¡Con diligencia y Diarias, hemos dejado a La Abominable Bestia del Estrés en solo 500K! La criatura ruge y golpea desesperadamente, mientras su furia aumenta más rápido que nunca. Bailey y Matt gritan de terror a medida que comienza a moverlos de un lado al otro a un ritmo terrador, levantando una enceguecedora tormenta de nieve que hace más difícil golpearla.\n\n¡Tendremos que redoblar nuestros esfuerzos, pero tomen valor - esto es una señal de que La Abominable Bestia del Estrés sabe que está a punto de ser derrotada! ¡No te rindas ahora!", "questStressbeastCompletion": "¡LaAbominable Bestia del Estrés ha sido DERROTADA!

¡Lo hicimos! Con un rugido final la Abominable Bestia del Estrés se disipa en una nube de nieve. Las copos de nieve brillan a través del aire mientras los Habiticanos aplauden y abrazan a sus mascotas y monturas. ¡Nuestros animales y nuestros NPCs están seguros una vez más!

¡Stoïkalm se ha salvado!

SabreCat habla suavemente a un pequeño tigre dientes de sable. \"Encuentra los ciudadanos de las Estepas de Stoïkalm y tréelos a nosotros,\" dice. Varias horas más tarde, el tigre diente de sable regresa, con una manada de jinetes de mamut siguiéndolo lentamente detrás. Reconoces al jinete a la cabeza como Lady Glaciate, líder de Stoïkalm.

\"Valientes Habiticanos,\" dice, \"Mis ciudadanos y yo les debemos el más profundo agradecimiento, y las más sinceras disculpas. En un esfuerzo por proteger nuestras Estepas de la agitación, empezamos a desterrar en secreto todo nuestro estrés hacia las montañas heladas. ¡No teníamos idea de que con las generaciones se convertiria en la Abominable Bestia del Estrés que vieron! Cuando se desató, nos dejó atrapados en su lugar a todos en las montañas y se fue en un alboroto contra nuestros queridos animales.\" Su triste mirada sigue el caer de la nieve. \"Pusimos a todos en riesgo con nuestra necedad. Tengan por seguro que en el futuro, vamos a ir a ustedes con nuestros problemas antes de que nuestros problemas vayan a ustedes\".

Ella se vuelve hacia donde @Baconsaur abraza a unos mamuts bebé. \"Hemos traído a tus animales una ofrenda de alimentos para disculparnos por asustarlos, y como un símbolo de confianza, vamos a dejar algunas de nuestras mascotas y monturas contigo. Sabemos que todos ustedes van cuidar bien de ellos\".", - "questStressbeastCompletionChat": "`La Bestia Abominable del Estrés ha sido VENCIDA`\n\nLo hemos hecho! Con un rugido final La Bestia Abominable del Estrés se disipa en una nube de nieve. Las copos de nieve brillan a través del aire mientras Habiticanos aplaudiendo abrazan a sus mascotas y monturas. ¡Nuestros animales y nuestros NPCs están seguros una vez más!\n\n`¡Stoïkalm se ha salvado!`\n\nSabreCat le habla suavemente a un pequeño dientes de sable. \"Encuentra los ciudadanos de las Estepas de Stoïkalm y tráelos a nosotros,\" dice. Varias horas más tarde, el dientes de sable regresa, con una manada de jinetes de mamut siguiendo lentamente detrás. Reconoces al jinete a la cabeza como Lady glaciate, líder de Stoïkalm.\n\n\"Valientes Habiticanos,\" ella dice, \"Mis ciudadanos y yo les debemos el más profundo agradecimiento, y las más sinceras disculpas. En un esfuerzo por proteger nuestras Estepas de la agitación, empezamos a desterrar en secreto todo nuestro estrés en las montañas heladas. ¡No teníamos idea de que con las generaciones se convertiría en La Bestia Abominable del Estrés que viste! Cuando se desató, nos atrapó a todos nosotros en las montañas en su lugar y se fue en un alboroto contra nuestros queridos animales.\" Su triste mirada sigue el caer de la nieve. \"Pusimos a todos en riesgo con nuestra necedad. Ten por seguro que en el futuro, vamos a ir a ustedes con nuestros problemas antes de que nuestros problemas vayan a ustedes.\"\n\nSe vuelve hacia donde @Baconsaur está abrazando a unos mamuts bebé. \"Hemos traído a tus animales una ofrenda de alimentos para disculparnos por asustarlos, y como símbolo de confianza, vamos a dejar algunas de nuestras mascotas y monturas contigo. Sabemos que todos ustedes van cuidar bien de ellos.\"", + "questStressbeastCompletionChat": "`¡La Abominable Bestia del Estrés ha sido VENCIDA!`\n\n¡Lo hemos hecho! Con un rugido final La Abominable Bestia del Estrés se disipa en una nube de nieve. Las copos de nieve brillan a través del aire mientras Habiticanos entusiastas abrazan a sus mascotas y monturas. ¡Nuestros animales y nuestros PNJs están seguros una vez más!\n\n`¡Stoïkalm se ha salvado!`\n\nSabreCat le habla suavemente a un pequeño dientes de sable. \"Encuentra a los ciudadanos de las Estepas de Stoïkalm y tráelos a nosotros,\" dice. Varias horas más tarde, el dientes de sable regresa, con una manada de jinetes de mamut avanzando lentamente detrás. Reconoces al jinete a la cabeza como Lady Glaciate, líder de Stoïkalm.\n\n\"Valientes Habiticanos,\" ella dice, \"Mis ciudadanos y yo les debemos el más profundo agradecimiento, y las más sinceras disculpas. En un esfuerzo por proteger nuestras Estepas de la agitación, empezamos a desterrar en secreto a todo nuestro estrés a las montañas heladas. ¡No teníamos idea de que con las generaciones se convertiría en la Bestia del Estrés que vieron! Cuando se liberó, nos atrapó a todos nosotros en las montañas en su lugar y salió en un frenesí a arremeter contra nuestros queridos animales.\" Su triste mirada sigue el caer de la nieve. \"Pusimos a todos en riesgo con nuestra necedad. Ten por seguro que en el futuro, nos acercaremos a ustedes con nuestros problemas antes de que nuestros problemas lleguen a ustedes.\"\n\nSe vuelve hacia donde @Baconsaur está abrazando a unos mamuts bebé. \"Hemos traído a tus animales una ofrenda de alimentos para disculparnos por asustarlos, y como símbolo de confianza, vamos a dejar algunas de nuestras mascotas y monturas con ustedes. Sabemos que todos ustedes van cuidar bien de ellos.\"", "questTRexText": "Rey de los dinosaurios", "questTRexNotes": "Ahora que las antiguas criaturas de las estepas de Stoïkalm están vagando por toda Habitica, @Urse ha decidido adoptar un Tiranosaurio completamente desarrollado. ¿Que podría salir mal?

Todo.", "questTRexCompletion": "El salvaje dinosaurio finalmente frena su acometida y se aquieta para hacer amigos con los gallos gigantes. @Urse exclama viendo esto. \"¡No son tan malas mascotas después de todo! Todo lo que necesitan es un poco de disciplina. Ten, toma algunos huevos de dinosaurio para ti mismo\".", @@ -191,75 +191,87 @@ "questBunnyCompletion": "Con un golpe final el conejo asesino se hunde en el suelo. Una niebla brillante se levanta de su cuerpo mientras se encoge en un diminuto conejito ... ya no es como la bestia cruel a la que te enfrentaste tan solo un momento antes. Su nariz se movió de manera adorable y saltó a otro lado, dejando algunos huevos atrás. @Gully ríe. \"El Monte Procastinación hace que incluso los desafíos más pequeños parezcan insuperables. Reunamos estos huevos y vayamos a casa\".", "questBunnyDropBunnyEgg": "Conejito (huevo)", "questBunnyUnlockText": "Desbloquea huevos de conejito comprables en el Mercado", - "questSlimeText": "The Jelly Regent", - "questSlimeNotes": "As you work on your tasks, you notice you are moving slower and slower. \"It's like walking through molasses,\" @Leephon grumbles. \"No, like walking through jelly!\" @starsystemic says. \"That slimy Jelly Regent has slathered his stuff all over Habitica. It's gumming up the works. Everybody is slowing down.\" You look around. The streets are slowly filling with clear, colorful ooze, and Habiticans are struggling to get anything done. As others flee the area, you grab a mop and prepare for battle!", - "questSlimeBoss": "Jelly Regent", - "questSlimeCompletion": "With a final jab, you trap the Jelly Regent in an over-sized donut, rushed in by @Overomega, @LordDarkly, and @Shaner, the quick-thinking leaders of the pastry club. As everyone is patting you on the back, you feel someone slip something into your pocket. It’s the reward for your sweet success: three Marshmallow Slime eggs.", - "questSlimeDropSlimeEgg": "Slime de malvavisco (Huevo)", - "questSlimeUnlockText": "Desbloquea huevos de babosa comprables en el Mercado", + "questSlimeText": "La Jalea Regente", + "questSlimeNotes": "Mientras te ocupas de tus tareas, te das cuenta de que te estás moviendo más y más lento. \"Es como caminar a través de melaza,\" se queja @Leephon. \"¡No, como atravesar jalea!\" dice @starsystemic. \"Esa babosa Jalea Regente ha untado su sustancia por toda Habitica. Está arruinando los trabajos. Todo el mundo se está volviendo más lento.\" Tú miras alrededor. Las calles se están llenando de a poco con un cieno claro y colorido, y los Habiticanos están luchando para poder terminar algo. Mientras otros huyen del área, ¡tú agarras un trapeador y te preparas para la batalla!", + "questSlimeBoss": "Jalea Regente", + "questSlimeCompletion": "Con un golpe final, atrapas a la Jalea Regente en una dona demasiado grande que te fue alcanzada por @Overomega, @LordDarkly y @Shaner, los líderes con reflejos rápidos del club de pastelería. Mientras todos te dan palmadas en la espalda, sientes a alguien poner discretamente algo en tu bolsillo. Es la recompensa por tu dulce éxito: tres huevos de Baba de Malvavisco.", + "questSlimeDropSlimeEgg": "Baba de Malvavisco (Huevo)", + "questSlimeUnlockText": "Desbloquea huevos de baba adquiribles en el Mercado", "questSheepText": "El carnero del trueno", - "questSheepNotes": "Mientras deambulas por las campiñas de Taskan con tus amigos, tomando un \"rápido descanso\" de tus obligaciones, encuentras una acogedora tienda de estambre. Estás tan sumergido en tu procastinación que apenas y te das cuenta de las siniestras nubes que cubren el cielo. \"Tengo un ma-a-al presentimiento de este clima\", balbucea @Misceo mientras miras hacia arriba. Las tempestuosas nubes se arremolinan y se parecen mucho a... \"¡No tenemos tiempo para mirar nubes!\" grita @starsystemic. \"¡Está atacando!\" ¡El carnero del trueno se abalanza, lanzando relámpagos y truenos hacia ti!", + "questSheepNotes": "Mientras deambulas por las campiñas de Taskan con tus amigos, tomando un \"rápido descanso\" de tus obligaciones, encuentras una acogedora tienda de estambre. Estás tan sumergido en tu procrastinación que apenas y te das cuenta de las siniestras nubes que cubren el cielo. \"Tengo un ma-a-al presentimiento de este clima\", balbucea @Misceo mientras miras hacia arriba. Las tempestuosas nubes se arremolinan y se parecen mucho a... \"¡No tenemos tiempo para mirar nubes!\" grita @starsystemic. \"¡Está atacando!\" ¡El carnero del trueno se abalanza, lanzando relámpagos y truenos hacia ti!", "questSheepBoss": "Carnero del trueno", - "questSheepCompletion": "Impressed by your diligence, the Thunder Ram is drained of its fury. It launches three huge hailstones in your direction, and then fades away with a low rumble. Upon closer inspection, you discover that the hailstones are actually three fluffy eggs. You gather them up, and then stroll home under a blue sky.", + "questSheepCompletion": "La furia del Carnero del Trueno merma cuando éste queda Impresionado por tu diligencia. La criatura lanza granizo en tu dirección, y luego se desvanece con un retumbo grave. Al inspeccionar más de cerca, descubres que las piedras de granizo son en realidad tres huevos suaves y esponjosos. Los recoges, y luego caminas tranquilamente a casa debajo de un cielo azul.", "questSheepDropSheepEgg": "Oveja (Huevo)", - "questSheepUnlockText": "Desbloquea huevos de oveja comprables en el Mercado", - "questKrakenText": "El Kraken de lo incompleto", - "questKrakenNotes": "It's a warm, sunny day as you sail across the Inkomplete Bay, but your thoughts are clouded with worries about everything that you still need to do. It seems that as soon as you finish one task, another crops up, and then another...

Suddenly, the boat gives a horrible jolt, and slimy tentacles burst out of the water on all sides! \"We're being attacked by the Kraken of Inkomplete!\" Wolvenhalo cries.

\"Quickly!\" Lemoness calls to you. \"Strike down as many tentacles and tasks as you can, before new ones can rise up to take their place!\"", - "questKrakenBoss": "El Kraken de lo incompleto", - "questKrakenCompletion": "As the Kraken flees, several eggs float to the surface of the water. Lemoness examines them, and her suspicion turns to delight. \"Cuttlefish eggs!\" she says. \"Here, take them as a reward for everything you've completed.\"", - "questKrakenDropCuttlefishEgg": "Cuttlefish (Egg)", - "questKrakenUnlockText": "Unlocks purchasable cuttlefish eggs in the Market", + "questSheepUnlockText": "Desbloquea huevos de oveja adquiribles en el Mercado", + "questKrakenText": "El Kraken de Inkompleta", + "questKrakenNotes": "Es un día cálido y soleado mientras navegas a través de la Bahía Inkompleta, pero tus pensamientos están llenos de preocupaciones sobre todo lo que aún te queda por hacer. Pareciera que apenas terminas una tarea, otra brota de la nada, y luego otra...

De pronto, el bote da una horrible sacudida, ¡y tentáculos babosos emergen del agua por todas partes! \"¡Estamos siendo atacados por el Kraken de Inkompleta!\" grita Wolvenhalo.

\"¡Rápido!\" te llama Lemoness. \"¡Derriba la mayor cantidad de tentáculos que puedas antes de que otros se alzen y tomen su lugar!\"", + "questKrakenBoss": "El Kraken de Inkompleta", + "questKrakenCompletion": "Mientras el Kraken huye, varios huevos flotan hacia la superficie del agua. Lemoness los examina, y su recelo se transforma en placer. \"¡Huevos de sepia!\" dice. \"Aquí tienes, tómalos como recompensa por todo lo que has completado.\"", + "questKrakenDropCuttlefishEgg": "Sepia (Huevo)", + "questKrakenUnlockText": "Desbloquea huevos de sepia adquiribles en el Mercado", "questWhaleText": "El lamento de la ballena", - "questWhaleNotes": "You arrive at the Diligent Docks, hoping to take a submarine to watch the Dilatory Derby. Suddenly, a deafening bellow forces you to stop and cover your ears. \"Thar she blows!\" cries Captain @krazjega, pointing to a huge, wailing whale. \"It's not safe to send out the submarines while she's thrashing around!\"

\"Quick,\" calls @UncommonCriminal. \"Help me calm the poor creature so we can figure out why she's making all this noise!\"", + "questWhaleNotes": "Llegas a los Muelles Diligentes, esperando abordar un submarino para ver el Derby de Dilatoria. De pronto, un bramido ensordecedor te obliga a detenerte y tapar tus oídos. \"¡Por allí resopla!\" grita el Capitán @krazjega, señalando a una enorme ballena que se lamentaba. \"¡No es seguro enviar a los submarinos mientras ella está dando vueltas!\"

\"Rápido,\" dice @UncommonCriminal. \"¡Ayúdenme a calmar a esta pobre criatura así podemos averiguar por qué está haciendo todo este ruido!\"", "questWhaleBoss": "Ballena lamentosa ", - "questWhaleCompletion": "After much hard work, the whale finally ceases her thunderous cry. \"Looks like she was drowning in waves of negative habits,\" @zoebeagle explains. \"Thanks to your consistent effort, we were able to turn the tides!\" As you step into the submarine, several whale eggs bob towards you, and you scoop them up.", + "questWhaleCompletion": "Luego de un arduo trabajo, la ballena finalmente cesa su llanto estruendoso. \"Parece que estaba ahogándose en olas de hábitos negativos,\" explica @zoebeagle. \"¡Gracias a tu consistente esfuerzo hemos podido cambiar el curso de la situación!\" Mientras entras al submarino, varios huevos de ballena flotan hacia ti, y tú los recoges.", "questWhaleDropWhaleEgg": "Ballena (Huevo)", - "questWhaleUnlockText": "Desbloquea huevos de ballena comprables en el Mercado", - "questDilatoryDistress1Text": "Dilatory Distress, Part 1: Message in a Bottle", - "questDilatoryDistress1Notes": "A message in a bottle arrived from the newly rebuilt city of Dilatory! It reads: \"Dear Habiticans, we need your help once again. Our princess has disappeared and the city is under siege by some unknown watery demons! The mantis shrimps are holding the attackers at bay. Please aid us!\" To make the long journey to the sunken city, one must be able to breathe water. Fortunately, the alchemists @Benga and @hazel can make it all possible! You only have to find the proper ingredients.", - "questDilatoryDistress1Completion": "You don the the finned armor and swim to Dilatory as quickly as you can. The merfolk and their mantis shrimp allies have managed to keep the monsters outside the city for the moment, but they are losing. No sooner are you within the castle walls than the horrifying siege descends!", + "questWhaleUnlockText": "Desbloquea huevos de ballena adquiribles en el Mercado", + "questDilatoryDistress1Text": "Peligro en Dilatoria, Parte 1: Mensaje en una Botella", + "questDilatoryDistress1Notes": "¡Un mensaje en una botella llegó desde la recientemente reconstruida ciudad de Dilatoria! Dice: \"Queridos Habiticanos, necesitamos su ayuda una vez más. ¡Nuestra princesa ha desaparecido y la ciudad está bajo asedio de unos demonios acuáticos desconocidos! Las mantis marinas están manteniendo a raya a los atacantes. ¡Por favor ayúdennos!\" Para efectuar el largo viaje a la ciudad sumergida, uno debe tener la capacidad de respirar agua. ¡Por suerte, los alquimistas @Benga y @hazel pueden hacerlo todo posible! Sólo tienes que encontrar los ingredientes adecuados.", + "questDilatoryDistress1Completion": "Te pones la armadura con aletas y nadas a Dilatoria lo más rápido que puedes. Los tritones y sirenas y sus aliadas, las mantis marinas, han logrado mantener a los monstruos fuera de la ciudad por el momento, pero están perdiendo. Acabas de entrar al castillo ¡cuando el espeluznante asedio desciende!", "questDilatoryDistress1CollectFireCoral": "Coral de fuego", "questDilatoryDistress1CollectBlueFins": "Aletas Azules", "questDilatoryDistress1DropArmor": "Armadura Oceánica con Aletas (Armadura)", - "questDilatoryDistress2Text": "Dilatory Distress, Part 2: Creatures of the Crevasse", - "questDilatoryDistress2Notes": "The siege can be seen from miles away: thousands of disembodied skulls rushing through a portal in the crevasse walls and making their way towards Dilatory.

When you meet King Manta in his war room, his eyes seem sunken, and his face is worried. \"My daughter Adva disappeared into the Dark Crevasse just before this siege began. Please find her and bring her back home safely! I will lend you my Fire Coral Circlet to aid you. If you succeed, it is yours.\"", - "questDilatoryDistress2Completion": "You vanquish the nightmarish horde of skulls, but you feel no closer to finding Adva. You speak to @Kiwibot, the royal tracker, to see if she has any ideas. \"The mantis shrimps that defend the city must have seen Adva escape,\" @Kiwibot says. \"Try following them into the Dark Crevasse.\"", - "questDilatoryDistress2Boss": "Water Skull Swarm", - "questDilatoryDistress2RageTitle": "Swarm Respawn", - "questDilatoryDistress2RageDescription": "Swarm Respawn: This bar fills when you don't complete your Dailies. When it is full, the Water Skull Swarm will heal 30% of its remaining health!", - "questDilatoryDistress2RageEffect": "`Water Skull Swarm uses SWARM RESPAWN!`\n\nEmboldened by their victories, more skulls pour forth from the crevasse, bolstering the swarm!", - "questDilatoryDistress2DropSkeletonPotion": "Poción Esqueleto", - "questDilatoryDistress2DropCottonCandyBluePotion": "Poción Algodón de Azúcar Azul", - "questDilatoryDistress2DropHeadgear": "Fire Coral Circlet (Headgear)", - "questDilatoryDistress3Text": "Dilatory Distress, Part 3: Not a Mere Maid", - "questDilatoryDistress3Notes": "You follow the mantis shrimps deep into the Crevasse, and discover an underwater fortress. Princess Adva, escorted by more watery skulls, awaits you inside the main hall. \"My father has sent you, has he not? Tell him I refuse to return. I am content to stay here and practice my sorcery. Leave now, or you shall feel the wrath of the ocean's new queen!\" Adva seems very adamant, but as she speaks you notice a strange, ruby pendant on her neck glowing ominously... Perhaps her delusions would cease should you break it?", - "questDilatoryDistress3Completion": "Finally, you manage to pull the bewitched pendant from Adva's neck and throw it away. Adva clutches her head. \"Where am I? What happened here?\" After hearing your story, she frowns. \"This necklace was given to me by a strange ambassador - a lady called 'Tzina'. I don't remember anything after that!\"

Back at Dilatory, Manta is overjoyed by your success. \"Allow me to reward you with this trident and shield! I ordered them from @aiseant and @starsystemic as a gift for Adva, but... I'd rather not put weapons in her hands any time soon.\"", - "questDilatoryDistress3Boss": "Adva, the Usurping Mermaid", + "questDilatoryDistress2Text": "Peligro en Dilatoria, Parte 2: Criaturas de la Grieta", + "questDilatoryDistress2Notes": "Los atacantes pueden verse desde kilómetros de distancia: miles de calaveras incorpóreas avanzando rápidamente a través de un portal en las paredes de la grieta y moviéndose hacia Dilatoria.

Cuando conoces al Rey Manta en su sala de guerra, sus ojos parecen hundidos, y su rostro se ve preocupado. \"Mi hija Adva desapareció en la Grieta Oscura justo antes de que este asedio comenzara. Por favor, ¡encuéntrala y tráela de vuelta a casa sana y salva! Te prestaré mi Diadema de Coral de Fuego para que te ayude. Si tienes éxito, es tuya.\"", + "questDilatoryDistress2Completion": "Vences a la horripilante horda de calaveras, pero no te sientes más cerca de encontrar a Adva. Hablas con @Kiwibot, la rastreadora real, para ver si ella tiene alguna idea. \"Las mantis marinas que defienden la ciudad deben haber visto a Adva escapar,\" dice @Kiwibot. \"Intenta seguirlas hasta el interior de la Grieta Oscura.\"", + "questDilatoryDistress2Boss": "Enjambre de Calaveras Acuáticas", + "questDilatoryDistress2RageTitle": "Regeneración de Enjambre", + "questDilatoryDistress2RageDescription": "Regeneración de Enjambre: Esta barra se llena cuando no completas tus Diarias. Cuando se llene, ¡el Enjambre de Calaveras Acuáticas sanará el 30% de su salud restante!", + "questDilatoryDistress2RageEffect": "`¡El Enjambre de Calaveras Acuáticas utiliza la REGENERACIÓN DE ENJAMBRE!`\n\n¡Incentivadas por sus victorias, más calaveras salen de la grieta, fortaleciendo al enjambre!", + "questDilatoryDistress2DropSkeletonPotion": "Poción de Eclosión Esqueleto", + "questDilatoryDistress2DropCottonCandyBluePotion": "Poción de Eclosión de Algodón de Azúcar Azul", + "questDilatoryDistress2DropHeadgear": "Diadema de Coral de Fuego (Equipamiento para la cabeza)", + "questDilatoryDistress3Text": "Peligro en Dilatoria, Parte 3: No Sólo una Simple Doncella", + "questDilatoryDistress3Notes": "Sigues a las mantis marinas a las profundidades de la Grieta, y descubres una fortaleza submarina. La Princesa Adva, acompañada por más calaveras acuáticas, te espera en el salón principal. \"Mi padre te ha enviado, ¿o no? Dile que me niego a volver. Estoy contenta de estar aquí y practicar mi hechicería. ¡Vete ahora, o sentirás la furia de la nueva reina del océano!\" Adva parece muy persistente, pero mientras ella habla notas un extraño colgante de rubí en su cuello brillando de forma inquietante... ¡Quizás sus delirios se detengan si lo rompes!", + "questDilatoryDistress3Completion": "Al fin logras arrancar el colgante hechizado del cuello de Adva y arrojarlo lejos. Adva se agarra la cabeza. \"¿Dónde estoy? ¿Que ocurrió aquí?\" Luego de escuchar tu historia, frunce el ceño. \"Este collar me lo entregó una extraña embajadora - una mujer llamada 'Tzina'. ¡No recuerdo nada después de eso!\"

De vuelta en Dilatoria, Manta rebosa de alegría por tu triunfo. \"¡Permíteme recompensarte con este tridente y escudo! Se los he encargado a @aiseant y @starsystemic como regalo para Adva, pero... preferiría no dejar armas en sus manos por el momento.\"", + "questDilatoryDistress3Boss": "Adva, la Sirena Usurpadora", "questDilatoryDistress3DropFish": "Pescado (Comida)", - "questDilatoryDistress3DropWeapon": "Trident of Crashing Tides (Weapon)", + "questDilatoryDistress3DropWeapon": "Tridente de Mareas Estruendosas (Arma)", "questDilatoryDistress3DropShield": "Escudo Luna perlada (Objeto Escudo-Mano)", - "questCheetahText": "Como un Chita", - "questCheetahNotes": "As you hike across the Sloensteadi Savannah with your friends @PainterProphet, @tivaquinn, @Unruly Hyena, and @Crawford, you're startled to see a Cheetah screeching past with a new Habitican clamped in its jaws. Under the Cheetah's scorching paws, tasks burn away as though complete -- before anyone has the chance to actually finish them! The Habitican sees you and yells, \"Please help me! This Cheetah is making me level too quickly, but I'm not getting anything done. I want to slow down and enjoy the game. Make it stop!\" You fondly remember your own fledgling days, and know that you have to help the newbie by stopping the Cheetah!", - "questCheetahCompletion": "The new Habitican is breathing heavily after the wild ride, but thanks you and your friends for your help. \"I'm glad that Cheetah won't be able to grab anyone else. It did leave some Cheetah eggs for us, so maybe we can raise them into more trustworthy pets!\"", - "questCheetahBoss": "Chita", - "questCheetahDropCheetahEgg": "Chita (Huevo)", - "questCheetahUnlockText": "Desbloquea huevos de Chita comprables en el Mercado", - "questHorseText": "Ride the Night-Mare", - "questHorseNotes": "While relaxing in the Tavern with @beffymaroo and @JessicaChase, the talk turns to good-natured boasting about your adventuring accomplishments. Proud of your deeds, and perhaps getting a bit carried away, you brag that you can tame any task around. A nearby stranger turns toward you and smiles. One eye twinkles as he invites you to prove your claim by riding his horse.\nAs you all head for the stables, @UncommonCriminal whispers, \"You may have bitten off more than you can chew. That's no horse - that's a Night-Mare!\" Looking at its stamping hooves, you begin to regret your words...", - "questHorseCompletion": "It takes all your skill, but finally the horse stamps a couple of hooves and nuzzles you in the shoulder before allowing you to mount. You ride briefly but proudly around the Tavern grounds while your friends cheer. The stranger breaks into a broad grin.\n\"I can see that was no idle boast! Your determination is truly impressive. Take these eggs to raise horses of your own, and perhaps we'll meet again one day.\" You take the eggs, the stranger tips his hat... and vanishes.", - "questHorseBoss": "Night-Mare", + "questCheetahText": "Como un Guepardo", + "questCheetahNotes": "Mientras realizas una caminata a través de la Sabana Sloensteadi con tus amigos @PainterProphet, @tivaquinn, @Unruly Hyena, y @Crawford, te sobresaltas al ver a un Guepardo pasar corriendo con un nuevo Habiticano atrapado entre sus mandíbulas. Bajo las patas abrasadoras del Guepardo, las tareas son consumidas por el fuego como si estuvieran completas -- ¡antes de que alguien tenga la chance de realmente terminarlas! El Habiticano te ve y grita, \"¡Por favor, ayúdenme! Este Guepardo me está haciendo aumentar de nivel demasiado rápido, pero no estoy logrando hacer nada. Quiero disminuir la velocidad y disfrutar el juego. ¡Hagan que se detenga!\" Tú recuerdas cariñosamente tus propios días como novato, ¡y estás seguro de que tienes que ayudar al principiante deteniendo al Guepardo!", + "questCheetahCompletion": "El nuevo Habiticano está respirando con dificultad luego del recorrido desenfrenado, pero te agradece a ti y a tus amigos por su ayuda. \"Me alegra que el Guepardo no vaya a poder atrapar a nadie más. Pero sí dejó algunos huevos de Guepardo para nosotros, ¡así que quizás podemos criarlos y convertirlos en mascotas más confiables!\"", + "questCheetahBoss": "Guepardo", + "questCheetahDropCheetahEgg": "Guepardo (Huevo)", + "questCheetahUnlockText": "Desbloquea huevos de Guepardo adquiribles en el Mercado", + "questHorseText": "Monta a la Pesadi-Yegua", + "questHorseNotes": "Mientras te relajas en la Taberna con @beffymaroo y @JessicaChase, la charla se transforma en un amistoso alarde sobre tus logros en tus aventuras. Orgulloso de tus hazañas, y quizás dejándote llevar un poco, fanfarroneas sobre cómo puedes domar a cualquier tarea que encuentras. Un desconocido próximo a ti se da vuelta a mirarte y sonríe. Uno de sus ojos brilla cuando te invita a probar lo que dices montando a su caballo.\nMientras todos se dirigen hacia los establos, @UncommonCriminal murmura, \"El que mucho abarca poco aprieta. Eso no es un caballo - ¡es una Pesadi-Yegua!\" Viendo cómo todas sus pezuñas dan pisotones, comienzas a arrepentirte de tus palabras...", + "questHorseCompletion": "Requiere de todas tus habilidades, pero finalmente el caballo pisotea con algunas de sus pezuñas y te acaricia el hombro con el hocico antes de dejarte montarlo. Tú cabalgas brevemente pero de forma orgullosa alrededor del terreno de la Taberna mientras tus amigos te aclaman. El desconocido muestra una gran sonrisa.\n\"¡Veo que no era un alarde vacío! Tu determinación es realmente impresionante. Toma estos huevos para criar tus propios caballos, y quizás algún día nos encontremos de nuevo.\" Tú agarras los huevos, el extraño inclina su sombrero... y desaparece.", + "questHorseBoss": "Pesadi-Yegua", "questHorseDropHorseEgg": "Caballo (Huevo)", - "questHorseUnlockText": "Desbloquea huevos de Caballo comprables en el Mercado", - "questBurnoutText": "Burnout and the Exhaust Spirits", - "questBurnoutNotes": "It is well past midnight, still and stiflingly hot, when Redphoenix and scout captain Kiwibot abruptly burst through the city gates. \"We need to evacuate all the wooden buildings!\" Redphoenix shouts. \"Hurry!\"

Kiwibot grips the wall as she catches her breath. \"It's draining people and turning them into Exhaust Spirits! That's why everything was delayed. That's where the missing people have gone. It's been stealing their energy!\"

\"'It'?'\" asks Lemoness.

And then the heat takes form.

It rises from the earth in a billowing, twisting mass, and the air chokes with the scent of smoke and sulphur. Flames lick across the molten ground and contort into limbs, writhing to horrific heights. Smoldering eyes snap open, and the creature lets out a deep and crackling cackle.

Kiwibot whispers a single word.

\"Burnout.\"", - "questBurnoutCompletion": "Burnout is DEFEATED!

With a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.

Ian, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!

\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!

One of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"

Her tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"

She claps her hands. \"Now - let's celebrate!\"", - "questBurnoutCompletionChat": "`Burnout is DEFEATED!`\n\nWith a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.\n\nIan, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!\n\n\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!\n\nOne of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"\n\nHer tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"\n\nShe claps her hands. \"Now - let's celebrate!\"\n\nAll Habiticans receive:\n\nPhoenix Pet\nPhoenix Mount\nAchievement: Savior of the Flourishing Fields\nBasic Candy\nVanilla Candy\nSand Candy\nCinnamon Candy\nChocolate Candy\nRotten Candy\nSour Pink Candy\nSour Blue Candy\nHoney Candy", + "questHorseUnlockText": "Desbloquea huevos de Caballo adquiribles en el Mercado", + "questBurnoutText": "Burnout y los Espíritus Consumidos", + "questBurnoutNotes": "Es ya bien pasada la medianoche, tranquila y sofocante, cuando Redphoenix y el capitán scout Kiwibot aparecen súbitamente cruzando las puertas de la ciudad. \"¡Tenemos que evacuar todos los edificios de madera!\" grita Redphoenix. \"¡Rápido!\"

Kiwibot se sujeta de la pared mientras recobra el aliento. \"¡Está drenando a la gente y conviertiéndola en Espíritus Consumidos! Por eso todo estaba demorado. Allí es adonde la gente desaparecida ha ido. ¡Es él quien ha estado robando su energía!\"

\"¿'Él'?\" pregunta Lemoness.

Y en ese momento el calor toma forma.

Se alza desde la tierra en una masa nebulosa y serpenteante, y el aire se satura de olor a humo y azufre. Llamas reptan a través del suelo fundido y se contorsionan formando extremidades, retorciéndose hacia alturas espeluznantes. Ojos ardientes se abren repentinamente, y la criatura deja escapar una carcajada profunda y chispeante.

Kiwibot murmura una única palabra.

\"Burnout.\"", + "questBurnoutCompletion": "¡Burnout es DERROTADO!

Con un gran, suave suspiro, Burnout gradualmente libera la energía ardiente que alimentaba su fuego. Mientras el monstruo silenciosamente se convierte en cenizas, su energía robada centellea en el aire, rejuveneciendo a los Espíritus Consumidos y devolviéndolos a sus formas originales.

Ian, Daniel y la Hechicera Estacional festejan mientras los Habiticanos se apuran a recibirlos, y todos los ciudadanos desaparecidos de los Campos Florecientes abrazan a sus amigos y a sus familias. ¡El último Espíritu Consumido se transforma en la mismísima Parca Alegre!

\"¡Miren!\" murmura @Baconsaur, al tiempo que las cenizas comienzan a brillar. ¡Lentamente, se convierten en cientos de fénix resplandecientes!

Una de las aves radiantes se posa sobre el brazo esquelético de la Parca Alegre, y ella le sonríe. \"Ha pasado ya bastante tiempo desde que tuve el privilegio exquisito de ver un fénix en los Campos Florecientes,\" dice. \"Aunque dados los hechos recientes, debo decir, ¡esto es extremadamente apropiado!\"

Su tono se vuelve serio, aunque (naturalmente) su sonrisa persiste. \"Somos conocidos por ser muy trabajadores aquí, pero también lo somos por nuestros banquetes y festividades. Es bastante irónico, supongo, que mientras nos esforzábamos para planear una fiesta espectacular, nos rehusamos a permitirnos un tiempo de ocio. ¡Desde luego no volveremos a cometer el mismo error dos veces!\"

La Parca Alegre aplaude. \"Ahora - ¡a celebrar!\"", + "questBurnoutCompletionChat": "`¡Burnout es DERROTADO!`\n\nCon un gran, suave suspiro, Burnout gradualmente libera la energía ardiente que alimentaba su fuego. Mientras el monstruo silenciosamente se convierte en cenizas, su energía robada centellea en el aire, rejuveneciendo a los Espíritus Consumidos y devolviéndolos a sus formas originales.\n\nIan, Daniel y la Hechicera Estacional festejan mientras los Habiticanos se apuran a recibirlos, y todos los ciudadanos desaparecidos de los Campos Florecientes abrazan a sus amigos y a sus familias. ¡El último Espíritu Consumido se transforma en la mismísima Parca Alegre!\n\n\"¡Miren!\" murmura @Baconsaur, al tiempo que las cenizas comienzan a brillar. ¡Lentamente, se convierten en cientos de fénix resplandecientes!\n\nUna de las aves radiantes se posa sobre el brazo esquelético de la Parca Alegre, y ella le sonríe. \"Ha pasado ya bastante tiempo desde que tuve el privilegio exquisito de ver un fénix en los Campos Florecientes,\" dice. \"Aunque dados los hechos recientes, debo decir, ¡esto es extremadamente apropiado!\"\n\nSu tono se vuelve serio, aunque (naturalmente) su sonrisa persiste. \"Somos conocidos por ser muy trabajadores aquí, pero también lo somos por nuestros banquetes y festividades. Es bastante irónico, supongo, que mientras nos esforzábamos para planear una fiesta espectacular, nos rehusamos a permitirnos un tiempo de ocio. ¡Desde luego no volveremos a cometer el mismo error dos veces!\"\n\nLa Parca Alegre aplaude. \"Ahora - ¡a celebrar!\"\n\nTodos los Habiticanos reciben:\n\nFénix (Mascota)\nFénix (Montura)\nLogro: Salvador de los Campos Florecientes\nCaramelo Básico\nCaramelo de Vainilla\nCaramelo de Arena\nCaramelo de Canela\nCaramelo de Chocolate\nCaramelo Podrido\nCaramelo Rosa Agrio\nCaramelo Azul Agrio\nCaramelo de Miel", "questBurnoutBoss": "Burnout", - "questBurnoutBossRageTitle": "Exhaust Strike", - "questBurnoutBossRageDescription": "When this gauge fills, Burnout will unleash its Exhaust Strike on Habitica!", - "questBurnoutDropPhoenixPet": "Phoenix (Pet)", - "questBurnoutDropPhoenixMount": "Phoenix (Mount)", - "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", - "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTitle": "Ataque Consumidor", + "questBurnoutBossRageDescription": "¡Cuando este medidor se llene, Burnout desatará su Ataque Consumidor sobre Habitica!", + "questBurnoutDropPhoenixPet": "Fénix (Mascota)", + "questBurnoutDropPhoenixMount": "Fénix (Montura)", + "questBurnoutBossRageQuests": "`¡Burnout utiliza el ATAQUE CONSUMIDOR!`\n\n¡Oh, no! A pesar de nuestros mejores esfuerzos, hemos dejado que algunas Diarias se nos escaparan, ¡y ahora Burnout está hinchado de energía! Con un rugido chispeante, envuelve a Ian, el Maestro de las Misiones, en una explosión de fuego espectral. Mientras pergaminos de misión caídos arden, el humo se disipa, ¡y puedes ver que Ian ha sido drenado de energía y convertido en un Espíritu Consumido a la deriva!\n\nSolamente vencer a Burnout puede romper el hechizo y devolver a nuestro querido Maestro de las Misiones. ¡Mantengamos a nuestras Diarias bajo control y derrotemos a este monstruo antes de que ataque de nuevo!", + "questBurnoutBossRageSeasonalShop": "`¡Burnout utiliza el ATAQUE CONSUMIDOR!`\n\n¡¡¡Ahh!!! ¡Nuestras Diarias incompletas han alimentado las llamas de Burnout, y ahora tiene suficiente energía para atacar de nuevo! El monstruo deja escapar un chorro de llamas espectrales que chamuscan la Tienda Estacional. Te horrorizas al ver que la alegre Hechicera Estacional ha sido transformada en un triste Espíritu Consumido.\n\n¡Tenemos que rescatar a nuestros PNJs! ¡Rápido, Habiticanos, completen sus tareas y derroten a Burnout antes de que ataque una tercera vez!", + "questBurnoutBossRageTavern": "`¡Burnout utiliza el ATAQUE CONSUMIDOR!`\n\nMuchos Habiticanos han estado escondiéndose de Burnout en la Taberna, ¡pero ya no más! Con un aullido chirriante, Burnout rastrilla la Taberna con sus manos blancas y ardientes. Mientras los clientes de la Taberna huyen, ¡Daniel es atrapado por Burnout, y se transforma en un Espíritu Consumido justo delante de ti!\n\nEste impetuoso horror se ha extendido demasiado tiempo. No se rindan... ¡estamos tan cerca de vencer a Burnout de una vez por todas!", + "questFrogText": "Pantano de la Rana Desastrosa", + "questFrogNotes": "Mientras tú y tus amigos se esfuerzan para atravesar las Ciénagas del Estancamiento, @starsystemic señala un gran cartel. \"No te desvíes del camino -- si puedes.\"

\"¡Seguramente no es difícil!\" dice @RosemonkeyCT. \"Es ancho y está despejado.\"

Pero al continuar, notan que el camino es gradualmente invadido por el lodo de la ciénaga, entremezclado desordenadamente con pedazos azules de desechos, hasta que seguir avanzando se vuelve imposible.

Mientras miras alrededor, preguntándote cómo se transformó en un desastre, @Jon Arjinborn grita, \"¡Cuidado!\" Una rana furiosa salta desde el lodo, cubierta con ropa sucia y encendida por un fuego azul. ¡Van a tener que derrotar a esta venenosa Rana Desastrosa para continuar!", + "questFrogCompletion": "La rana se hunde en el lodo, derrotada. Mientras se escabulle, el cieno azul se disipa, despejando el camino.

Posados en el medio del sendero se encuentran tres huevos inmaculados. \"¡Se pueden ver incluso los pequeños renacuajos a través de la cubierta transparente!\" dice @Breadstrings. \"Tengan, deberían quedárselos.\"", + "questFrogBoss": "Rana Desastrosa", + "questFrogDropFrogEgg": "Rana (Huevo)", + "questFrogUnlockText": "Desbloquea huevos de Rana adquiribles en el Mercado", + "questSnakeText": "The Serpent of Distraction", + "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveler astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", + "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", + "questSnakeBoss": "Serpent of Distraction", + "questSnakeDropSnakeEgg": "Snake (Egg)", + "questSnakeUnlockText": "Unlocks purchasable Snake eggs in the Market" } \ No newline at end of file diff --git a/common/locales/es_419/rebirth.json b/common/locales/es_419/rebirth.json index 04860f96ec..9fbb90f3fd 100644 --- a/common/locales/es_419/rebirth.json +++ b/common/locales/es_419/rebirth.json @@ -2,9 +2,9 @@ "rebirthNew": "Renacimiento: ¡Una nueva aventura disponible!", "rebirthUnlock": "¡Has desbloqueado el Renacimiento! Este objeto especial del Mercado te permite empezar el juego de nuevo al nivel 1, manteniendo tus tareas, logros, mascotas, y más. Úsalo para darle nueva vida a Habitica por si sientes que ya lo lograste todo, o para tener la experiencia de nuevas funciones con la perspectiva de un personaje nuevo.", "rebirthBegin": "Renacimiento: Empieza una nueva aventura", - "rebirthStartOver": "Rebirth starts your character over from Level 1.", + "rebirthStartOver": "Renacimiento reinicia a tu personaje al nivel 1.", "rebirthAdvList1": "Regresas con salud plena.", - "rebirthAdvList2": "You have no Experience, Gold, or Equipment (with the exception of free items like Mystery items).", + "rebirthAdvList2": "No tienes Experiencia, Oro ni Equipamiento (con la excepción de ítems gratis como los Ítems Misteriosos).", "rebirthAdvList3": "Tus hábitos, Diarias, y Pendientes vuelven a amarillo, y las rachas se restablecen.", "rebirthAdvList4": "Comienzas con la clase de Guerrero hasta que consigues una clase nueva.", "rebirthInherit": "Tu nuevo personaje hereda unas pocas cosas de su predecesor.", @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "¡También recibirás un Logro por haber empezado una nueva aventura!", "beReborn": "Ser renacido", "rebirthAchievement": "¡Has comenzado una nueva aventura! Este es tu <%= number %> Renacimiento, y el Nivel más alto que has logrado es <%= level %>. Para apilar este Logro, ¡empieza tu aventura siguiente después de haber conseguido un nivel aún más alto!", + "rebirthAchievement100": "¡Haz comenzado una nueva aventura! Este es el Renacimiento <%= number %> para ti, y el Nivel más alto que has adquirido es 100 o más alto. Para acumular este Logro, ¡empieza tu nueva aventura cuando hayas alcanzado como mínimo el nivel 100!", "rebirthBegan": "Comienzo una aventura nueva", "rebirthText": "Comenzó <%= rebirths %> aventuras nuevas", "rebirthOrb": "Uso una Esfera derenacimiento para comenzar de nuevo después de conseguir Nivel", + "rebirthOrb100": "Utilizó una Esfera de Renacimiento para comenzar de nuevo luego de adquirir el Nivel 100 or más alto", "rebirthPop": "Comenzar con un personaje nuevo a Nivel 1, mientras manteniendo logros, lo coleccionable, y tareas con historial.", "rebirthName": "Esfera de renacimiento", "reborn": "Renacido, nivel máximo <%= reLevel %>" diff --git a/common/locales/es_419/settings.json b/common/locales/es_419/settings.json index 181ea7aa31..296109552e 100644 --- a/common/locales/es_419/settings.json +++ b/common/locales/es_419/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "Con esta opción marcada, la lista de etiquetas estará escondida al abrir la tarea para editarla.", "startAdvCollapsed": "Las opciones avanzadas de las tareas no se abren automáticamente", "startAdvCollapsedPop": "Con esta opción marcada, las opciones avanzadas estarán escondidas al abrir la tarea para editarla.", + "dontShowAgain": "Don't show this again", + "suppressLevelUpModal": "Don't show popup when gaining a level", + "suppressHatchPetModal": "Don't show popup when hatching a pet", + "suppressRaisePetModal": "Don't show popup when raising a pet into a mount", + "suppressStreakModal": "Don't show popup when attaining a Streak achievement", "showTour": "Mostrar el tour", "restartTour": "Reiniciar el tour de introducción a Habitica", "showBailey": "Mostrar a Bailey", @@ -81,7 +86,6 @@ "emailChange1": "Para cambiar tu dirección de correo electrónico, por favor envía un correo a", "emailChange2": "admin@habitica.com", "emailChange3": "incluyendo tanto tu viejo y tu nuevo correo electronico acompañados de tu ID de usuario.", - "username": "Nombre de usuario", "usernameOrEmail": "Nombre de usuario o E-mail", "email": "Email", "registeredWithFb": "Registrado con Facebook", @@ -89,7 +93,7 @@ "loginNameDescription2": "Usuario->Perfil", "loginNameDescription3": "para cambiar el nombre que aparece en tu avatar y mensajes de chat", "emailNotifications": "Notificaciones vía email", - "wonChallenge": "Ganaste un desafío", + "wonChallenge": "You won a Challenge!", "newPM": "Mensaje privado recibido", "giftedGems": "Gemas regaladas", "giftedGemsInfo": "<%= amount %> Gemas - por <%= name %>", @@ -118,5 +122,29 @@ "promoCode": "Código promocional", "promoCodeApplied": "¡Tu código promocional fue aceptado! Revisa tu inventario.", "promoPlaceholder": "Ingresa tu código promocional", - "displayInviteToPartyWhenPartyIs1": "Mostrar el botón de \"Invitar a grupo\" cuando el grupo tiene 1 miembro." + "displayInviteToPartyWhenPartyIs1": "Mostrar el botón de \"Invitar a grupo\" cuando el grupo tiene 1 miembro.", + "saveCustomDayStart": "Guarda el Inicio de Día Personalizado", + "registration": "Registro", + "addLocalAuth": "Agrega autenticación local:", + "generateCodes": "Genera Códigos", + "generate": "Generar", + "getCodes": "Obtén Códigos", + "webhooks": "Webhooks", + "enabled": "Habilitado", + "webhookURL": "URL del Webhook", + "add": "Agregar", + "buyGemsGoldCap": "Tope aumentado a <%= amount %>", + "mysticHourglass": "<%= amount %> Reloj de arena mística", + "mysticHourglassText": "Los Relojes de Arena Mística permiten comprar un anterior Conjunto Misterioso de items del mes.", + "purchasedPlanId": "Recurring $<%= price %> each <%= months %> Month(s) (<%= plan %>)", + "purchasedPlanExtraMonths": "Tu tienes <%=months %> meses de suscripción crédito. ", + "consecutiveSubscription": "Consecutivo Suscripción ", + "consecutiveMonths": "Consecutivo Meses:", + "gemCapExtra": "Gema tapa extra:", + "mysticHourglasses": "Reloj de arenas místicas:", + "paypal": "PayPal", + "amazonPayments": "Amazon Payments", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/es_419/spells.json b/common/locales/es_419/spells.json index da001f13f0..1277889333 100644 --- a/common/locales/es_419/spells.json +++ b/common/locales/es_419/spells.json @@ -10,27 +10,27 @@ "spellWarriorSmashText": "Golpe brutal", "spellWarriorSmashNotes": "Golpeas salvajemente a una tarea con toda tu fuerza. ¡La tarea se vuelve más azul/menos roja y haces daño adicional a los Jefes! Haz lick sobre una tarea para invocar el conjuro. (Basado en FRZ).", "spellWarriorDefensiveStanceText": "Postura defensiva", - "spellWarriorDefensiveStanceNotes": "Te preparas para la dificultad de tus tareas. ¡Tu constitución se ve potenciada! (Basado en: CON no potenciada)", + "spellWarriorDefensiveStanceNotes": "Te preparas para arrasar con tus tareas. ¡Tu constitución se ve potenciada! (Basado en: CON no potenciada)", "spellWarriorValorousPresenceText": "Presencia valerosa", "spellWarriorValorousPresenceNotes": "Tu presencia anima tu equipo. ¡La fuerza de tu equipo se ve potenciada! (Basado en: STR no potenciada)", "spellWarriorIntimidateText": "Mirada intimidante", "spellWarriorIntimidateNotes": "Tu mirada hace que tus enemigos temblen de miedo. ¡La constitución de tu equipo se ve potenciada! (Basado en: CON no potenciada)", "spellRoguePickPocketText": "Carterista", - "spellRoguePickPocketNotes": "Robas una tarea cerca. ¡Ganas oro! Haz click sobre una tarea para envocar el conjuro. (Basado en: PER)", + "spellRoguePickPocketNotes": "Robas a una tarea cercana. ¡Ganas oro! Haz click sobre una tarea para invocar el conjuro. (Basado en: PER)", "spellRogueBackStabText": "Puñalada", - "spellRogueBackStabNotes": "Traicionas una tarea tonta. ¡Ganas EXP y oro! Haz click sobre una tarea para invocar el conjuro. (Basado en: STR)", + "spellRogueBackStabNotes": "Traicionas una tarea necia. ¡Ganas EXP y oro! Haz click sobre una tarea para invocar el conjuro. (Basado en: STR)", "spellRogueToolsOfTradeText": "Herramientas del oficio", - "spellRogueToolsOfTradeNotes": "Compartes tus talentos con tus amigos. ¡La percepción de tu equipo se ve potenciada! (Basado en: PER no potenciada) ", + "spellRogueToolsOfTradeNotes": "Compartes tus talentos con tus amigos. ¡La percepción de tu equipo se ve potenciada! (Basado en: PER no potenciada)", "spellRogueStealthText": "Sigilo", - "spellRogueStealthNotes": "Eres tan furtivo que no te pueden ver. Algunos de tus Tareas Diarias no causarán daño hoy, y sus correos desnudos y colores no cambiarán. (Puede invocar el conjuro varias veces para afectar mas Tareas Diarias)", - "spellHealerHealText": "Luz de curación ", - "spellHealerHealNotes": "Tu cuerpo cubra con luz, sanando tus heridos. ¡Recuperas salud! (Basado en: CON e INT)", + "spellRogueStealthNotes": "Eres tan furtivo que no te pueden ver. Algunas de tus Tareas Diarias no hechas no causarán daño, y sus rachas/color no cambiarán. (Puedes invocar el conjuro varias veces para afectar multiples Tareas Diarias)", + "spellHealerHealText": "Luz de curación", + "spellHealerHealNotes": "Una luz cubre tu cuerpo sanando tus heridas. ¡Recuperas salud! (Basado en: CON e INT)", "spellHealerBrightnessText": "Claridad abrasadora", - "spellHealerBrightnessNotes": "Una ráfaga de luz deslumbra a tus tareas. ¡Cambian menos rojo y más azul! (Basado en: INT)", + "spellHealerBrightnessNotes": "Una ráfaga de luz deslumbra a tus tareas. ¡Se vuelven menos rojas y más azules! (Basado en: INT)", "spellHealerProtectAuraText": "Aura protectora", "spellHealerProtectAuraNotes": "Escudas tu equipo de daño. ¡La constitución de tu equipo se ve potenciada! (Basado en: CON no potenciada)", "spellHealerHealAllText": "Bendición", - "spellHealerHealAllNotes": "Una aura relajante les rodea. ¡Los de tu equipo recuperan salud! (Basado en: CON e INT)", + "spellHealerHealAllNotes": "Una aura relajante los rodea. ¡Todos los de tu equipo recuperan salud! (Basado en: CON e INT)", "spellSpecialSnowballAuraText": "Bola de nieve", "spellSpecialSnowballAuraNotes": "¡Lanza una bola de nieve a un miembro del grupo! ¿Qué podría salir mal? Dura hasta el nuevo día del compañero.", "spellSpecialSaltText": "Sal", @@ -47,4 +47,4 @@ "spellSpecialSeafoamNotes": "¡Convierte a un amigo en una criatura marina!", "spellSpecialSandText": "Arena", "spellSpecialSandNotes": "Cancela los efectos de la espuma de mar." -} +} \ No newline at end of file diff --git a/common/locales/es_419/subscriber.json b/common/locales/es_419/subscriber.json index a527dc396f..8afe69ecfd 100644 --- a/common/locales/es_419/subscriber.json +++ b/common/locales/es_419/subscriber.json @@ -60,7 +60,7 @@ "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> y <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitle": "Misteriosos viajeros del tiempo", "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.", - "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 <%= linkStart %>here<%= linkEnd %>! If those don't satisfy you, perhaps you'd be interested in one of our fashionably futuristic Steampunk Item Sets?", + "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!", "subUpdateCard": "Actualiza la tarjeta", diff --git a/common/locales/es_419/tasks.json b/common/locales/es_419/tasks.json index a0823e4f1a..2bf2beeae3 100644 --- a/common/locales/es_419/tasks.json +++ b/common/locales/es_419/tasks.json @@ -40,7 +40,7 @@ "repeatEvery": "Repetir cada", "repeatHelpTitle": "¿Qué tan seguido debe ser repetida esta tarea?", "dailyRepeatHelpContent": "Esta tarea vencerá cada X días. Puedes ajustar ese valor abajo.", - "weeklyRepeatHelpContent": "This task will be due on the highlighted days below. Click on a day to activate/deactivate it.", + "weeklyRepeatHelpContent": "Esta tarea estará prevista para los días resaltados abajo. Haz clic en un día para activarlo/desactivarlo.", "repeatDays": "Cada X Días", "repeatWeek": "En Ciertos Días de la Semana.", "day": "Día", @@ -78,18 +78,17 @@ "streakSingular": "Buena racha", "streakSingularText": "Ha completado una racha de 21 días en una tarea Diaria", "perfectName": "Días perfectos", - "perfectText": "Completed all active Dailies on <%= perfects %> days. With this achievement you get a +level/2 buff to all attributes for the next day. Levels greater than 100 don't have any additional effects on buffs.", + "perfectText": "Completaste todas las Diarias activas durante <%= perfects %> días. Con este logro consigues una mejora de +nivel/2 a todos los atributos durante el día siguiente. Los niveles mayores a 100 no tienen ningún efecto adicional sobre las mejoras.", "perfectSingular": "Día perfecto", - "perfectSingularText": "Completed all active Dailies in one day. With this achievement you get a +level/2 buff to all attributes for the next day. Levels greater than 100 don't have any additional effects on buffs.", + "perfectSingularText": "Completaste todas las Diarias activas durante un día. Con este logro consigues una mejora de +nivel/2 a todos los atributos durante el día siguiente. Los niveles mayores a 100 no tienen ningún efecto adicional sobre las mejoras.", "streakerAchievement": "¡Has obtenido el logro \"Buena racha\"! El récord de 21 días es un escalón importante para la formación de hábitos. ¡Puedes seguir amontonando este Logro para cada 21 días adicionales en esta diaria o cualquier otra!", "fortifyName": "Poción de fortalecimiento.", "fortifyPop": "Devuelve todas tus tareas a un valor neutral (amarillo), y recupera toda la salud perdida.", "fortify": "Fortalecer", - "fortifyText": "Fortify will return all your tasks to a neutral (yellow) state, as if you'd just added them, and top your Health off to full. This is great if all your red tasks are making the game too hard, or all your blue tasks are making the game too easy. If starting fresh sounds much more motivating, spend the Gems and catch a reprieve!", + "fortifyText": "Fortalecer devuelve todas tus tareas a un valor neutral (amarillo), como si las acabaras de añadir, y llena a tope tu salud. Esto es excelente si todas tus tareas rojas están dificultando mucho el juego, o si todas tus tareas azules están haciéndolo muy fácil. Si empezar de cero suena mucho más motivador, ¡gasta las gemas y tómate un respiro!", "sureDelete": "¿Estás seguro de que quieres eliminar esta tarea?", "streakCoins": "¡Bonus de racha!", - "pushTaskToTop": "Enviar tarea al tope", - "pushTaskToBottom": "Enviar tarea al fondo", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "Primero escribe el título de la tarea.", "dailiesRestingInInn": "¡Estás descansando en la Posada! Tus Diarias no te harán daño esta noche, pero continuarán reiniciándose cada día. Si te encuentras una misión, no harás daño/coleccionarás objetos hasta que hayas salido de la Posada, pero sí recibirás daño de un Jefe si tus compañeros no completan sus Diarias.", "habitHelp1": "Buenos Hábitos son tareas que haces seguido. Te recompenzan con Oro y Experiencia cada vez que pulsas el <%= plusIcon %>.", diff --git a/common/locales/fr/backgrounds.json b/common/locales/fr/backgrounds.json index 1a8f98b052..a341c2bc10 100644 --- a/common/locales/fr/backgrounds.json +++ b/common/locales/fr/backgrounds.json @@ -112,11 +112,25 @@ "backgroundStableNotes": "Prenez soin de vos montures dans l'Etable d'Habitica", "backgroundTavernText": "Taverne d'Habitica", "backgroundTavernNotes": "Visitez la Taverne d'Habitica", - "backgrounds102015": "SET 17: Released October 2015", - "backgroundHarvestMoonText": "Harvest Moon", - "backgroundHarvestMoonNotes": "Cackle under the Harvest Moon.", - "backgroundSlimySwampText": "Slimy Swamp", - "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", - "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgrounds102015": "Ensemble 17 : Sorti en Octobre 2015", + "backgroundHarvestMoonText": "Lune des Moissons", + "backgroundHarvestMoonNotes": "Gloussez sous la Lune des Moissons", + "backgroundSlimySwampText": "Marécage Vaseux", + "backgroundSlimySwampNotes": "Échinez-vous à traverser un Marais Visqueux", + "backgroundSwarmingDarknessText": "Ténèbres Grouillantes", + "backgroundSwarmingDarknessNotes": "Frissonnez dans les Ténèbres Grouillantes", + "backgrounds112015": "Ensemble 18: Sorti en novembre 2015", + "backgroundFloatingIslandsText": "Les Îles Flottantes", + "backgroundFloatingIslandsNotes": "Parcourez les Îles Flottantes.", + "backgroundNightDunesText": "Les Dunes Nocturnes", + "backgroundNightDunesNotes": "Promenez-vous tranquillement dans les Dunes Nocturnes.", + "backgroundSunsetOasisText": "L'Oasis du Coucher de Soleil", + "backgroundSunsetOasisNotes": "Prélassez-vous à l'Oasis du Coucher de Soleil.", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/fr/challenge.json b/common/locales/fr/challenge.json index 04de0d881f..b88ace32fc 100644 --- a/common/locales/fr/challenge.json +++ b/common/locales/fr/challenge.json @@ -59,5 +59,9 @@ "challengeNotEnoughGems": "Vous n'avez pas assez de gemmes pour proposer ce défi.", "noPermissionEditChallenge": "Vous n'avez pas le droit d'éditer ce défi.", "noPermissionDeleteChallenge": "Vous n'avez pas le droit de supprimer ce défi.", - "noPermissionCloseChallenge": "Vous n'avez pas le droit de fermer ce défi." + "noPermissionCloseChallenge": "Vous n'avez pas le droit de fermer ce défi.", + "congratulations": "Félicitations !", + "hurray": "Hourra !", + "noChallengeOwner": "Sans propriétaire", + "noChallengeOwnerPopover": "Ce défi n'a pas de propriétaire, parce que la personne qui a créé le défi a supprimé son compte." } \ No newline at end of file diff --git a/common/locales/fr/character.json b/common/locales/fr/character.json index f4af43e7bc..e085fc8f3a 100644 --- a/common/locales/fr/character.json +++ b/common/locales/fr/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "Bonus de Classe", "battleGear": "Équipement de combat", "battleGearText": "Voici l'équipement que vous portez au combat ; il affecte les chiffres obtenus lorsque vous interagissez avec vos tâches.", + "autoEquipBattleGear": "Équiper automatiquement le nouvel équipement", "costume": "Costume", "costumeText": "Si vous préférez l'apparence d'un équipement différent de celui que vous avez équipé, choisissez \"Utiliser un Costume\" pour le porter en costume tout en conservant les bonus de votre équipement.", "useCostume": "Utiliser un Costume", @@ -64,6 +65,10 @@ "ultimGearText": "S'est équipé avec les meilleurs armes et les meilleures armures pour les classes suivantes :", "level": "Niveau", "levelUp": "Montée de niveau !", + "gainedLevel": "Vous avez passé un niveau !", + "leveledUp": "En atteignant vos buts dans la vie réelle, vous êtes parvenu au niveau <%= level %> !", + "fullyHealed": "Vous avez été complètement guéri(e) !", + "huzzah": "Bravo !", "mana": "Mana", "hp": "Vie", "mp": "PM", diff --git a/common/locales/fr/content.json b/common/locales/fr/content.json index 6035445b85..b3e7d1d083 100644 --- a/common/locales/fr/content.json +++ b/common/locales/fr/content.json @@ -95,6 +95,12 @@ "questEggHorseText": "Cheval", "questEggHorseMountText": "Cheval", "questEggHorseAdjective": "un galopant", + "questEggFrogText": "Grenouille", + "questEggFrogMountText": "Grenouille", + "questEggFrogAdjective": "une princière", + "questEggSnakeText": "Serpent", + "questEggSnakeMountText": "Serpent", + "questEggSnakeAdjective": "un rampant", "eggNotes": "Trouvez une potion d’éclosion à verser sur cet œuf et il en sortira <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "de Base", "hatchingPotionWhite": "Blanc", diff --git a/common/locales/fr/faq.json b/common/locales/fr/faq.json index 88702275ba..21b9f8f34d 100644 --- a/common/locales/fr/faq.json +++ b/common/locales/fr/faq.json @@ -2,7 +2,7 @@ "frequentlyAskedQuestions": "Questions Fréquentes", "faqQuestion0": "Je suis perdu. Où puis-je trouver un résumé ?", "iosFaqAnswer0": "D'abord, vous allez définir les tâches que vous voulez réaliser dans votre vie quotidienne. Puis, au fur et à mesure que vous compléterez vos tâches au jour le jour et que vous les validerez sur le site, vous gagnerez de l'expérience et de l'or. L'or est utilisé pour acheter de l'équipement et certains objets, ainsi que les récompenses personnalisées. L'expérience va permettre à votre personnage de monter en niveau et de débloquer du contenu comme les Familiers, les Compétences, et les Quêtes ! Vous pouvez personnaliser votre personnage dans le Menu > Personnaliser l'Avatar.\n\nQuelques interactions basiques : Cliquez le (+) dans le coin en haut à droite pour ajouter une nouvelle tâche. Tapez une tache existante pour la modifier, et glissez une tâche vers la gauche pour la supprimer. Vous pouvez trier les tâches en utilisant les Étiquettes dans le coin en haut à gauche, et agrandir ou réduire les listes de vérification en cliquant sur la bulle de liste de vérification.", - "webFaqAnswer0": "D'abord, vous allez définir les tâches que vous voulez réaliser dans votre vie quotidienne. Puis, au fur et à mesure que vous compléterez vos tâches au jour le jour et que vous les validerez sur le site, vous gagnerez de l'expérience et de l'or. L'or est utilisé pour acheter de l'équipement et certains objets, ainsi que les récompenses personnalisées. L'expérience va permettre à votre personnage de monter en niveau et de débloquer du contenu comme les Familiers, les Compétences, et les Quêtes ! Pour plus de détail, le wiki dispose d'un excellent résumé pas-à-pas du jeu [juste ici](http://habitica.wikia.com/wiki/Habitica_Wiki).", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", "faqQuestion1": "Comment est-ce que je créé mes tâches ?", "iosFaqAnswer1": "Les bonnes Habitudes (celles avec un +) sont les tâches que vous pouvez réaliser plusieurs fois par jour, comme manger des légumes. Les mauvaises Habitudes (celles avec un -) sont les tâches que vous devez éviter, comme vous ronger les ongles. Les Habitudes avec un + et un - ont un bon côté et un mauvais côté, comme prendre l'escalier / prendre l'ascenseur. Les bonnes Habitudes vous récompensent avec de l'expérience et de l'or. Les mauvaises habitudes vous font perdre de la Santé.\n\nLes tâches Quotidiennes sont des tâches que vous devez réaliser chaque jour, comme vous brosser les dents ou vérifier vos courriels. Vous pouvez ajuster les jours où une Quotidienne doit être réalisée en la modifiant. Si vous ratez une Quotidienne qui doit être réalisée, votre avatar subira des dégâts pendant la nuit. Faites attentions à ne pas ajouter trop de Quotidiennes à la fois !\n\nLes tâches À Faire sont votre liste de tâches et de projets. Compléter une tâche À Faire vous récompensera avec de l'or et de l'expérience. Vous ne perdrez jamais de Santé avec les tâches À Faire. Vous pouvez ajouter une date d'échéance à une tâche À Faire en la modifiant.", "webFaqAnswer1": "Les bonnes Habitudes (celles avec un ) sont les tâches que vous pouvez réaliser plusieurs fois par jour, comme manger des légumes. Les mauvaises Habitudes (celles avec un ) sont les tâches que vous devez éviter, comme vous ronger les ongles. Les Habitudes avec un et un ont un bon côté et un mauvais côté, comme prendre l'escalier / prendre l'ascenseur. Les bonnes Habitudes vous récompensent avec de l'expérience et de l'or. Les mauvaises habitudes vous font perdre de la Santé.\n

\nLes tâches Quotidiennes sont des tâches que vous devez réaliser chaque jour, comme vous brosser les dents ou vérifier vos courriels. Vous pouvez ajuster les jours où une Quotidienne doit être réalisée en cliquant sur le crayon pour la modifier. Si vous ratez une Quotidienne qui doit être réalisée, votre avatar subira des dégâts pendant la nuit. Faites attentions à ne pas ajouter trop de Quotidiennes à la fois !\n

\nLes tâches À Faire sont votre liste de tâches et de projets. Compléter une tâche À Faire vous récompensera avec de l'or et de l'expérience. Vous ne perdrez jamais de Santé avec les tâches À Faire. Vous pouvez ajouter une date d'échéance à une tâche À Faire en cliquant sur le crayon pour la modifier.", @@ -16,7 +16,7 @@ "iosFaqAnswer4": "Il y a plusieurs choses qui peuvent vous causer des dégâts. D'abord, si vous laissez de tâches Quotidiennes incomplètes pendant la nuit, elles vous causeront des dégâts. Ensuite, si vous réalisez une mauvaise Habitude, elle vous causera des dégâts. Enfin, si vous et votre Équipe affrontez un Boss, et qu'un de vos compagnons n'a pas réalisé toutes ses tâches Quotidiennes, Le Boss vous attaquera.\n\nLa meilleure façon de guérir est de gagner un niveau, qui vous rendra toute votre santé. Vous pouvez aussi acheter une Potion de Santé avec de l'or à partir de la colonne Récompenses. En plus, au delà du niveau 10, vous pouvez choisir de devenir un Guérisseur, et vous pourrez apprendre les compétences de guérison. Si vous êtes en Équipe avec un Guérisseur, il peut aussi vous guérir.", "webFaqAnswer4": "Il y a plusieurs choses qui peuvent vous causer des dégâts. D'abord, si vous laissez de tâches Quotidiennes incomplètes pendant la nuit, elles vous causeront des dégâts. Ensuite, si vous réalisez une mauvaise Habitude, elle vous causera des dégâts. Enfin, si vous et votre Équipe affrontez un Boss, et qu'un de vos compagnons n'a pas réalisé toutes ses tâches quotidiennes, Le Boss vous attaquera.\n

\nLa meilleure façon de guérir est de gagner un niveau, qui vous rendra toute votre santé. Vous pouvez aussi acheter une Potion de Santé avec de l'or à partir de la colonne Récompenses. En plus, au delà du niveau 10, vous pouvez choisir de devenir un Guérisseur, et vous pourrez apprendre les compétences de guérison. Si vous êtes en Équipe (dans Social > Équipe) avec un Guérisseur, il peut aussi vous guérir.", "faqQuestion5": "Comment jouer à Habitica avec mes amis ?", - "iosFaqAnswer5": "Le meilleur moyen est de les inviter dans une Équipe avec vous, via le [site](https://habitica.com/#/options/groups/party) ! Nous ajouterons bientôt la possibilité de créer une Équipe depuis cette application, mais attendant, vous pouvez utiliser le [site](https://habitica.com/#/options/groups/party). Les Équipes peuvent partir en quêtes, combattre des monstres, et utiliser leurs compétences pour s'entraider. Sur le site, vous et vos amis pouvez aussi rejoindre des Guildes, qui sont des salons de discussion publics. Les Guildes seront ajoutés à cette application dans une mise à jour ultérieure !", + "iosFaqAnswer5": "Le meilleur moyen est de les inviter dans une Équipe avec vous. Les Équipes peuvent partir en quêtes, combattre des monstres et lancer des sorts pour s’entraider. Si vous n'avez pas encore d'Équipe, allez dans Social > Équipe et cliquez sur « Créer une nouvelle Équipe », puis cliquez sur la liste de membres et finalement cliquez sur Inviter dans le coin supérieur droit pour inviter vos amis en inscrivant leur ID d'utilisateur (une chaîne de nombres et de lettres que vous pouvez trouver sous Paramètres > Détails du compte, dans l'application, ou sous Paramètres > API sur le site Web). Sur le site Web, vous pouvez également inviter des amis par courriel. Cette option sera ajoutée à l'application lors d'une mise à jour ultérieure.\n\nSur le site Web, vos amis et vous pouvez aussi rejoindre des Guildes, qui sont des salons de discussion publics. Les Guildes seront ajoutés à l'application lors d'une mise à jour ultérieure !", "webFaqAnswer5": "Le meilleur moyen est de les inviter dans une Équipe avec vous, en passant par Social > Équipe ! Les Équipes peuvent partir en quêtes, combattre des monstres, et utiliser leurs compétences pour s'entraider. Vous et vos amis pouvez aussi rejoindre des Guildes (Social > Guildes), qui sont des salons de discussion sur un intérêt partagé ou à la poursuite d'un même but, et peuvent être publiques ou privées. Vous pouvez joindre autant de guildes que vous voulez, mais seulement une équipe.\n

\nPour des informations plus précises, lisez sur le wiki les pages à propos des [Équipes](http://habitrpg.wikia.com/wiki/Party) et des [Guildes](http://habitrpg.wikia.com/wiki/Guilds).", "faqQuestion6": "Comment obtenir des Familiers ou des Montures ?", "iosFaqAnswer6": "A partir du niveau 3, vous débloquerez le Système de Butin. Chaque fois que vous réaliserez une tâche, vous aurez une chance aléatoire de recevoir un œuf, une potion d'éclosion, ou un morceau de nourriture. Ils seront stockés dans Menu > Objets.\n\nPour faire éclore un Familier, vous aurez besoin d'un œuf et d'une potion d'éclosion. Sélectionnez l’œuf pour déterminer l'espèce que vous voulez faire éclore, et choisissez \"Faire éclore l'Œuf.\" Puis choisissez la potion d'éclosion pour déterminer sa couleur ! Allez dans Menu > Familiers pour équiper votre nouveau Familier en cliquant dessus.\n\nVous pouvez aussi faire grandir vos Familiers en Montures en les nourrissant dans Menu > Familiers, et en sélectionnant \"Nourrir le Familier\" ! Vous devrez nourrir un familier plusieurs fois avant qu'il ne devienne une Monture, mais si vous devinez sa nourriture préférée, il grandira plus vite. Faites des essais, ou [lisez les spoilers ici](http://habitica.wikia.com/wiki/Food#Food_Preferences). Une fois que vous avez obtenu une monture, allez dans Menu > Montures et sélectionnez la pour l'équiper.\n\nVous pouvez aussi gagner des œufs pour les Quêtes de Familiers en accomplissant certaines Quêtes. (Voir ci-dessous pour en apprendre plus sur les Quêtes.)", @@ -28,14 +28,17 @@ "iosFaqAnswer8": "Cette barre bleue qui apparaît lorsque vous atteignez le niveau 10 et choisissez une Classe est votre barre de Mana. En gagnant des niveaux supplémentaires, vous débloquerez des Compétences spéciales qui coûtent du Mana. Chaque Classe a des Compétences différentes, qui apparaissent après le niveau 11 dans Menu > Utiliser les Compétences. Contrairement à votre barre de vie, votre barre de Mana ne se réinitialise pas quand vous gagnez un niveau. A la place, du Mana est récupéré lorsque vous réalisez une Bonne Habitude, une Quotidienne ou une tâche À Faire, et du Mana est perdu quand vous succombez à une Mauvaise Habitude. Vous regagnerez aussi du Mana pendant la nuit -- Plus vous aurez complété de Quotidiennes, plus vous en regagnerez.", "webFaqAnswer8": "Cette barre bleue qui apparaît lorsque vous atteignez le niveau 10 et choisissez une Classe est votre barre de Mana. En gagnant des niveaux supplémentaires, vous débloquerez des Compétences spéciales qui coûtent du Mana. Chaque Classe a des Compétences différentes, qui apparaissent après le niveau 11 dans la colonne Récompenses. Contrairement à votre barre de vie, votre barre de Mana ne se réinitialise pas quand vous gagnez un niveau. A la place, du Mana est récupéré lorsque vous réalisez une Bonne Habitude, une Quotidienne ou une tâche À Faire, et du Mana est perdu quand vous succombez à une Mauvaise Habitude. Vous regagnerez aussi du Mana pendant la nuit -- Plus vous aurez complété de Quotidiennes, plus vous en regagnerez.", "faqQuestion9": "Comment combattre des monstres et partir en Quête ?", - "iosFaqAnswer9": "D'abord, vous devez rejoindre une Équipe (voir ci-dessus). Bien que vous puissiez combattre des monstres seul, nous recommandons de jouer dans un groupe car cela rendra vos Quêtes plus faciles. En plus, avoir des amis qui vous encouragent à accomplir vos tâches est très motivant !\n\nEnsuite, vous avez besoin d'un Parchemin de Quête, qui sont stockés dans Menu > Objets. Il y a trois façons d'obtenir un parchemein :\n\n- Au niveau 15, vous recevrez une série de Quêtes, c'est à dire trois quêtes liées. D'autres séries seront débloquées aux niveau 30, 40 et 60.\n- Quand vous invitez des membres dans votre équipe sur le [site](https://habitica.com/#/options/groups/party), vous serez récompensés avec le parchemin du Basi-list ! (nous ajouterons cette possibilité dans l'application dans une mise à jour ultérieure.)\n- Vous pouvez acheter des Quêtes depuis la page Quêtes sur le [site](https://habitica.com/#/options/inventory/quests) pour de l'Or et des Gemmes. (nous ajouterons cette possibilité dans l'application dans une mise à jour ultérieure.)\n\nPour combattre un Boss ou réunir des objets pour une quête de collection, réalisez simplement vos tâches normalement, et elle seront transformées en dégâts pendant la nuit. (Recharger en tirant vers le bas sur l'écran peut être nécessaire pour voir la barre de vie du Boss descendre). Si vous combattez un Boss et ratez une de vos tâches Quotidiennes, le Boss infligera des dégâts à votre équipe au moment où vous lui infligerez des dégâts.\n\nAprès le niveau 11, les Mages et les Guerriers gagneront des compétences qui leurs permettent d'infliger des dégâts additionnels au Boss, en faisant ainsi d'excellentes classes après le niveau 10 si vous souhaitez faire plus de dégâts.", + "iosFaqAnswer9": "Il vous faudra tout d'abord rejoindre une Équipe (Social > Équipe). Bien que vous puissiez combattre des monstres en solo, nous vous recommandons de jouer en groupe ; vos Quêtes n'en seront que plus faciles. Il est aussi très motivant d'avoir des amis à vos côtés pour vous encourager à accomplir toutes vos tâches ! \n\n Vous aurez ensuite besoin d'un Parchemin de Quête, que vous retrouverez dans Inventaire > Quêtes. Il y a trois façons d'obtenir un parchemin : \n- Au niveau 15, vous recevrez une série de Quêtes, c'est-à-dire trois quêtes liées. D'autres séries seront débloquées aux niveaux 30, 40 et 60. \n- Quand vous invitez des membres à rejoindre votre équipe, vous serez récompensé(e) avec le parchemin du Basi-list !\n - Vous pouvez acheter des Quêtes depuis la page Quêtes de votre inventaire [Inventaire > Quêtes](https://habitica.com/#/options/inventory/quests) pour de l'Or et des Gemmes. (Ces fonctionnalités seront ajoutées à l'application lors d'une mise à jour ultérieure.) \n\nPour combattre un Boss ou réunir des objets lors d'une quête de collection, accomplissez simplement vos tâches comme vous le faites d'habitude, et elles seront automatiquement converties en dégâts pendant la nuit. (Il vous faudra peut-être recharger la page pour voir descendre la barre de vie du Boss.) Si vous combattez un Boss et ratez une de vos tâches Quotidiennes, le Boss infligera des dégâts à votre équipe au moment où vous l'attaquerez. \n\nAprès le niveau 11, les Mages et les Guerriers gagnent des compétences leur permettant d'infliger des dégâts additionnels au Boss. Ce sont donc les deux classes à privilégier au niveau 10 si vous souhaitez gagner en force de frappe.", "webFaqAnswer9": "D'abord, vous devez rejoindre une Équipe (dans Social > Équipe). Bien que vous puissiez combattre des monstres seul, nous recommandons de jouer dans un groupe car cela rendra vos Quêtes plus facile. En plus, avoir des amis qui vous encouragent à accomplir vos tâches est très motivant !\n

\nEnsuite, vous avez besoin d'un Parchemin de Quête, qui sont stockés dans Inventaire > Quêtes. Il y a trois façons d'obtenir un parchemin :\n

\n* Quand vous invitez des membres dans votre équipe, vous serez récompensés avec le parchemin du Basi-list !\n* Au niveau 15, vous recevrez une série de Quêtes, c'est à dire trois quêtes liées. D'autres séries seront débloquées aux niveau 30, 40 et 60.\n* Vous pouvez acheter des Quêtes depuis la page Quêtes (Inventaire > Quêtes) pour de l'Or et des Gemmes.\n

\nPour combattre un Boss ou réunir des objets pour une quête de collection, réalisez simplement vos tâches normalement, et elle seront transformées en dégâts pendant la nuit. (Recharger peut être nécessaire pour voir la barre de vie du Boss descendre). Si vous combattez un Boss et ratez une de vos tâches Quotidiennes, le Boss infligera des dégâts à votre équipe au moment où vous lui infligerez des dégâts.\n

\nAprès le niveau 11, les Mages et les Guerriers gagneront des compétences qui leurs permettent d'infliger des dégâts additionnels au Boss, en faisant ainsi d'excellentes classes après le niveau 10 si vous souhaitez taper dur.", - "faqQuestion10": "Que sont les Gemmes, et comment est-ce que je peux en obtenir ?", + "faqQuestion10": "Que sont les Gemmes, et comment puis-je en obtenir ?", "iosFaqAnswer10": "Les Gemmes sont achetées avec de l'argent en sélectionnant l'icône de gemme dans l'en-tête. Lorsque des gens achètent des gemmes, ils nous aident à maintenir le site. Nous les remercions pour leur soutien ! En plus d'acheter des gemmes directement, il y a trois façons pour les joueurs de gagner des gemmes : * Gagnez un Défi sur le [site](https://habitica.com) qui a été ouvert par un autre joueur dans Social > Défis. (Nous ajouterons cette fonctionnalité dans l'application dans une mise à jour ultérieure !) * Abonnez-vous sur le [site](https://habitica.com/#/options/settings/subscription) et débloquez la capacité d'acheter un certain nombre de gemmes par mois. * Contribuez au projet Habitica avec vos compétences. Lisez cette page du Wiki pour plus de détails : [Contribuer à Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica). Gardez à l'esprit que les objets achetés avec des gemmes n'offrent aucun avantage statistique, donc les joueurs peuvent très bien utiliser l'application sans elles !", "webFaqAnswer10": "Les Gemmes sont [achetées avec de l'argent](https://habitica.com/#/options/settings/subscription) bien que les [abonnés](https://habitica.com/#/options/settings/subscription) puissent en acheter avec de l'Or. Lorsque des gens achètent des gemmes, il nous aident à maintenir le site. Nous les remercions pour leur soutient !\n

\nEn plus d'acheter des gemmes directement, il y a deux façons pour les joueurs de gagner des gemmes :\n

\n* Gagnez un Défi qui a été ouvert par un autre joueur dans Social > Défis.\n* Contribuez au projet Habitica avec vos compétences. Lisez cette page du Wiki pour plus de détail : [Contribuer à Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n

\nGardez à l'esprit que les objets achetés avec des gemmes n'offrent aucun avantage statistiques, donc les joueurs peuvent très bien utiliser l'application sans elles !", "faqQuestion11": "Comment signaler un bug ou demander une fonctionnalité ?", "iosFaqAnswer11": "Vous pouvez signaler une erreur, demander une fonctionnalité ou envoyer un avis depuis Menu > Signaler une erreur et Menu > Envoyer un avis ! Nous ferons notre possible pour vous aider.", "webFaqAnswer11": "Les rapports d'erreur sont rassemblés sur GitHub. Aller dans [Aide > Signaler un Bug](https://github.com/HabitRPG/habitrpg/issues/2760) et suivez les instructions. Ne vous en faites pas, nous corrigerons ça rapidement !\n

\nLes demandes de fonctionnalités sont rassemblées sur Trello. Allez dans [Aide > Demander une Fonctionnalité](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) et suivez les instructions. Ta-Da!", + "faqQuestion12": "Comment combat-on un Boss Mondial?", + "iosFaqAnswer12": "Les Boss Mondiaux sont des monstres spéciaux qui apparaissent dans la Taverne. Tous les membres actifs combattent automatiquement le boss : leurs tâches et habiletés blesseront le Boss comme à l'habitude.\n\nVous pouvez également participer à une quête normale en même temps. Vos tâches et habiletés seront pris en compte pour les deux boss : le Boss Mondial et le Boss/Quête de collection de votre équipe.\n\nUn Boss Mondial ne blessera jamais, vous et votre compte, de quelque manière que ce soit. Il a plutôt une Barre de colère qui se remplit lorsque les membres manquent les Quotidiennes. Si la Barre se remplit, il attaque l'un des Personnages non-joueurs du site et son image changera.\n\nPour en savoir plus, visitez la page [Boss Mondiaux précédents](http://habitica.wikia.com/wiki/World_Bosses) du wiki.", + "webFaqAnswer12": "Les Boss Mondiaux sont des monstres spéciaux qui apparaissent dans la Taverne. Tous les membres actifs combattent automatiquement le boss : leurs tâches et habiletés blesseront le Boss comme à l'habitude.\n

\nVous pouvez également participer à une quête normale en même temps. Vos tâches et habiletés seront pris en compte pour les deux boss : le Boss Mondial et le Boss/Quête de collection de votre équipe.\n

\nUn Boss Mondial ne blessera jamais, vous et votre compte, de quelque manière que ce soit. Il a plutôt une Barre de colère qui se remplit lorsque les membres manquent les Quotidiennes. Si la Barre se remplit, il attaque l'un des Personnages non-joueurs du site et son image changera.\n

\nPour en savoir plus, visitez la page [Boss Mondiaux précédents](http://habitica.wikia.com/wiki/World_Bosses) du wiki.", "iosFaqStillNeedHelp": "Si vous avez une question qui n'est pas dans cette liste, venez la poser dans la Taverne depuis Menu > Taverne ! Nous serons heureux de vous aider.", "webFaqStillNeedHelp": "Si vous avez une question qui n'est pas dans cette liste, venez la poser dans la [Guilde des Nouveaux Arrivants](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a) ! Nous serons heureux de vous aider." } \ No newline at end of file diff --git a/common/locales/fr/front.json b/common/locales/fr/front.json index f627321194..07af9314d0 100644 --- a/common/locales/fr/front.json +++ b/common/locales/fr/front.json @@ -74,7 +74,7 @@ "infhQuote": "[Habitica] m'a vraiment aidé à définir une structure à mon quotidien à l'université.", "invalidEmail": "Une adresse mail valide est nécessaire pour lancer une réinitialisation du mot de passe.", "irishfeet123Quote": "J'ai de terribles habitudes avec le nettoyage de ma place à table après le repas, et je laissais mes tasses partout. [Habitica] a réglé ça !", - "joinOthers": "Rejoignez 250.000 personnes qui s'amusent en réalisant leurs objectifs !", + "joinOthers": "Rejoignez <%= userCount %> personnes qui s'amusent en réalisant leurs objectifs !", "kazuiQuote": "Avant [Habitica], j'étais coincé sur ma thèse, et insatisfait avec ma discipline personnelle à propos des tâches ménagère, et des choses comme apprendre le vocabulaire ou étudier la théorie de Go. Il s'avère que découper toutes ces tâches en petites listes de vérification gérables m'a permis de rester motivé et continuellement actif.", "landingadminlink": "solutions administratives", "landingend": "Pas encore convaincu·e ?", @@ -113,7 +113,7 @@ "marketing4Lead1Title": "La ludification dans l'éducation", "marketing4Lead2": "Les coûts liés à la santé augmentent et quelqu'un doit forcément les payer. Des centaines de programmes sont conçus pour réduire ces coûts et améliorer le bien-être général. Nous sommes convaincus qu'Habitica peut apporter une réelle solution vers un mode de vie plus sain.", "marketing4Lead2Title": "La ludification dans la santé et le bien-être", - "marketing4Lead3-1": "Vous voulez faire un jeu de votre vie ?", + "marketing4Lead3-1": "Vous voulez faire de votre vie un jeu ?", "marketing4Lead3-2": "Intéressé par la gestion d'un groupe dans l'éducation, le bien-être, et davantage ?", "marketing4Lead3-3": "Vous voulez en savoir plus ?", "marketing4Lead3Title": "Transformez tout en jeu", @@ -179,5 +179,14 @@ "businessInquiries": "Demandes pour les entreprises", "merchandiseInquiries": "Demandes commerciales", "marketingInquiries": "Demandes pour le marketing/les réseaux sociaux", - "tweet": "Tweet" + "tweet": "Tweet", + "apps": "Applications", + "notifyAndroidApp": "Vous voulez savoir quand l'application Android sera prête ? Inscrivez-vous à la liste de diffusion !", + "checkOutIOSApp": "Découvrez notre nouvelle application iOS !", + "imagine1": "Imaginez si progresser dans votre vie était aussi amusant que de jouer.", + "landingCopy1": "Progressez dans le jeu en effectuant vos tâches réelles. ", + "landingCopy2": "Combattez des monstres avec vos amis pour vous aider à vous responsabiliser pour atteindre vos buts.", + "landingCopy3": "Rejoignez plus de <%= userCount %> personnes qui s'amusent en progressant dans leur vie.", + "alreadyHaveAccount": "J'ai déjà un compte !", + "getStartedNow": "Commencer maintenant !" } \ No newline at end of file diff --git a/common/locales/fr/gear.json b/common/locales/fr/gear.json index 36e8fa5351..3f0c0140f3 100644 --- a/common/locales/fr/gear.json +++ b/common/locales/fr/gear.json @@ -87,7 +87,7 @@ "weaponSpecialSpringHealerText": "Os Ravissant", "weaponSpecialSpringHealerNotes": "VA CHERCHER ! Augmente l'Intelligence de <%= int %> points. Équipement en Édition Limitée du Printemps 2014.", "weaponSpecialSummerRogueText": "Coutelas de Pirate", - "weaponSpecialSummerRogueNotes": "Stop! Vous allez mettre ces tâches Quotidiennes au supplice de la planche! Augmente la Force de <%= str %> points. Équipement en Édition Limitée de l’Été 2014.", + "weaponSpecialSummerRogueNotes": "Arrêtez! Vous allez mettre ces tâches Quotidiennes au supplice de la planche! Augmente la Force de <%= str %> points. Équipement en Édition Limitée de l’Été 2014.", "weaponSpecialSummerWarriorText": "Tranchoir des Mers", "weaponSpecialSummerWarriorNotes": "Quelle que soit la liste, il n'est pas une tâche qui se frotterait à cette dangereuse lame ! Augmente la Force de <%= str %> points. Équipement en Édition Limitée de l’Été 2014.", "weaponSpecialSummerMageText": "Récolteur de Varech", @@ -149,13 +149,19 @@ "weaponArmoireRancherLassoText": "Lasso d'Éleveur", "weaponArmoireRancherLassoNotes": "Les lassos : l'outil idéal pour rassembler et maîtriser vos animaux. Augmente la Force de <%= str %> points, la Perception de <%= per %> points et l'Intelligence de <%= int %> points. Armoire Enchantée : Ensemble d'Éleveur (Objet 3 sur 3).", "weaponArmoireMythmakerSwordText": "Epée Mythologique", - "weaponArmoireMythmakerSwordNotes": "Bien qu'elle ait l'air humble, cette épée a accompagné de nombreux héros mythiques. Augmente la Perception et la Force de <%= attrs %> chacun. Armoire Enchantée : Ensemble de la Toge Dorée (Objet 3 sur 3).", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Crochet de fer", - "weaponArmoireIronCrookNotes": "Férocement forgé dans le fer, ce crochet en fer est bon pour garder les moutons. Augmente la Perception et la Force de <%= attrs %> chacun. Armoire Enchantée : Ensemble des Cornes de Fer (Objet 3 de 3).", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Bâton aux Ailes d'Or", "weaponArmoireGoldWingStaffNotes": "Les ailes de ce bâton s'agitent et se tordent en permanence. Augmente tous les attributs de <%= attrs %> chacun. Armoire Enchantée : Objet indépendant.", "weaponArmoireBatWandText": "Baguette Chauve-souris", "weaponArmoireBatWandNotes": "Cette baguette peut transformer n'importe quelle tâche en chauve-souris! Agitez-la dans tous les sens et regardez-les s'envoler. Augmente l'Intelligence de <%= int %> points et la Perception de <%= per %> points. Armoire Enchantée: Objet indépendant.", + "weaponArmoireShepherdsCrookText": "Houlette de Berger", + "weaponArmoireShepherdsCrookNotes": "Utile pour rassembler les griffons. Augmente la Constitution de <%= con %>. Armoire Enchantée : Ensemble du Berger (Objet 1 sur 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "armure", "armorBase0Text": "Habit simple", "armorBase0Notes": "Un vêtement ordinaire. N'apporte aucun avantage.", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "Robes de Fête Ridicules", "armorSpecialBirthday2015Notes": "Joyeux Anniversaire Habitica ! Portez ces Robes de Fête Ridicules pour célébrer cette journée magnifique ! N'apporte aucun bonus.", "armorSpecialGaymerxText": "Armure de Guerrier Arc-en-Ciel", - "armorSpecialGaymerxNotes": "En l'honneur de la \"Pride season\" et de GaymerX, cette armure spéciale est décorée avec un motif arc-en-ciel aussi radieux que coloré ! GaymerX est une convention célébrant les LGBTQ et les jeux, et est ouverte à tous. Elle se déroule à l'InterContinental dans le centre de San Francisco, du 11 au 13 Juillet ! N'apporte aucun bonus.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "Costume de Chat Élégant", "armorSpecialSpringRogueNotes": "Soigné à la perfection ! Augmente la Perception de <%= per %> points. Équipement en Édition Limitée du Printemps 2014 !", "armorSpecialSpringWarriorText": "Armure aux Trèfles d'acier", @@ -275,7 +281,7 @@ "armorSpecialFall2015WarriorNotes": "Bien qu'elle soit bourrée de paille, cette armure est extrêmement résistante! Augmente la Constitution de <%= con %> points. Équipement en Édition Limitée de l'Automne 2015.", "armorSpecialFall2015MageText": "Robe Rapiécée", "armorSpecialFall2015MageNotes": "Chaque couture de cette armure scintille d'un enchantement. Augmente l'Intelligence de <%= int %> points. Équipement en Édition Limitée de l'Automne 2015.", - "armorSpecialFall2015HealerText": "Robe de Faiseur de Potions", + "armorSpecialFall2015HealerText": "Robe d'Alchimiste", "armorSpecialFall2015HealerNotes": "Quoi? Mais bien sûr que c'était une potion de constitution. Non, vous n'êtes sûrement pas en train de vous transformer en grenouille! Allons, c'est ridicule. Augmente la Constitution de <%= con %> points. Équipement en Édition Limitée de l'Automne 2015.", "armorMystery201402Text": "Robe du Messager", "armorMystery201402Notes": "Chatoyante et solide, cette robe possède de nombreuses poches dans lesquelles transporter des lettres. N'apporte aucun bonus. Équipement d'Abonné de Février 2014.", @@ -307,6 +313,8 @@ "armorMystery201508Notes": "Vous serez aussi rapide qu'un guépard dans ce costume tout doux ! N'apporte aucun bonus. Équipement d'Abonné d'août 2015.", "armorMystery201509Text": "Costume de Loup-Garou", "armorMystery201509Notes": "C'est bien un costume, hein? N'apporte aucun bonus. Équipement d'Abonné de Septembre 2015.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Tenue Steampunk", "armorMystery301404Notes": "Pimpant et fringuant ! N'apporte aucun bonus. Équipement d'Abonné de Février 3015.", "armorArmoireLunarArmorText": "Armure Lunaire Apaisante", @@ -321,6 +329,12 @@ "armorArmoireHornedIronArmorNotes": "Férocement forgée dans le fer, cette armure cornue est presque impossible à briser. Augmente la Constitution de <%= con %> et la Perception de <%= per %>. Armoire Enchantée : Ensemble des Cornes de Fer (Objet 2 sur 3).", "armorArmoirePlagueDoctorOvercoatText": "Pardessus de Médecin de la Peste", "armorArmoirePlagueDoctorOvercoatNotes": "Un authentique pardessus porté par les médecins qui ont combattu la Peste de Procrastination ! Augmente l'Intelligence de <%= int %>, la Force de <%= str %>, et la Constitution de <%= con %>. Armoire Enchantée, Ensemble de Médecin de la Peste (Objet 3 sur 3).", + "armorArmoireShepherdRobesText": "Tunique de Berger", + "armorArmoireShepherdRobesNotes": "Le tissu est léger et aéré, parfait pour une chaude journée passée à rassembler des griffons dans le désert. Augmente la Force et la Perception <%= attrs %> de chacune. Armoire Enchantée : Ensemble du Berger (Objet 2 sur 3)", + "armorArmoireRoyalRobesText": "Robe Royale", + "armorArmoireRoyalRobesNotes": "Merveilleux souverain, règne du matin au soir ! Augmente la Constitution, l'Intelligence et la Perception de <%= attrs %> chacun. Armoire Enchantée : Ensemble Royal ( Objet 3 sur 3)", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "coiffe", "headBase0Text": "Pas de casque", "headBase0Notes": "Pas de couvre-chef.", @@ -434,14 +448,14 @@ "headSpecialSummer2015HealerNotes": "Avec votre bonnet de matelot résolument vissé sur la tête, vous pouvez naviguer même sur les mers déchaînées ! Augmente l'Intelligence de <%= int %> points. Équipement en Édition Limitée de l’Été 2015.", "headSpecialFall2015RogueText": "Ailes de Bat-aille", "headSpecialFall2015RogueNotes": "Trouvez vos ennemis par écholocation avec ce heaume puissant! Perception de <%= per %> points. Équipement en Édition Limitée de l'Automne 2015.", - "headSpecialFall2015WarriorText": "Chapeau d'Epouvantail", + "headSpecialFall2015WarriorText": "Chapeau d'Épouvantail", "headSpecialFall2015WarriorNotes": "Tout le monde voudrait ce chapeau -- si seulement ils avaient un cerveau! Augmente la Force de <%= str %> points. Équipement en Édition Limitée de l'Automne 2015.", "headSpecialFall2015MageText": "Chapeau Rapiécé", "headSpecialFall2015MageNotes": "Chaque couture dans ce chapeau augmente sa puissance. Augmente la Perception de <%= per %> points. Équipement en Édition Limitée de l'Automne 2015. ", "headSpecialFall2015HealerText": "Chapeau de Grenouille", "headSpecialFall2015HealerNotes": "C'est un chapeau extrêmement sérieux, digne seulement de l'un des faiseurs de potions les plus avancés. Augmente l'Intelligence de <%= int %> points. Équipement en Édition Limitée de l'Automne 2015.", "headSpecialGaymerxText": "Heaume de Guerrier Arc-en-Ciel", - "headSpecialGaymerxNotes": "En l'honneur de la \"Pride season\" et de GaymerX, ce casque spécial est décoré avec un motif arc-en-ciel aussi radieux que coloré ! GaymerX est une convention célébrant les LGBTQ et les jeux, et est ouverte à tous. Elle se déroule à l'InterContinental dans le centre de San Francisco, du 11 au 13 Juillet ! N'apporte aucun bonus.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "Heaume Ailé", "headMystery201402Notes": "Ce bandeau ailé insuffle la vitesse du vent à son porteur ! N'apporte aucun bonus. Équipement d'Abonné de Février 2014.", "headMystery201405Text": "Flamme de l'Esprit", @@ -464,6 +478,8 @@ "headMystery201508Notes": "Ce confortable chapeau de guépard est vraiment soyeux ! N'apporte aucun bonus. Équipement d'Abonné d'Août 2015.", "headMystery201509Text": "Masque de Loup-Garou", "headMystery201509Notes": "C'est bien un masque, hein? N'apporte aucun bonus. Équipement d'Abonné de Septembre 2015.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 Subscriber Item.", "headMystery301404Text": "Haut-de-forme Fantaisiste", "headMystery301404Notes": "Un couvre-chef fantaisiste pour les gens de bonne famille les plus élégants ! N'apporte aucun bonus. Équipement d'Abonné de Janvier 3015.", "headMystery301405Text": "Haut-de-forme Classique", @@ -481,7 +497,7 @@ "headArmoireBlueHairbowText": "Nœud Bleu", "headArmoireBlueHairbowNotes": "Devenez perspicace, tenace et brillant en portant ce magnifique Nœud Bleu ! Augmente la Perception de <%= per %> points, la Constitution de <%= con %> points et l'Intelligence de <%= int %> points. Armoire Enchantée : Objet Indépendant.", "headArmoireRoyalCrownText": "Couronne Royale", - "headArmoireRoyalCrownNotes": "Vive notre souverain, si fort et si puissant ! Augmente la Force de <%= str %>. Armoire Enchantée : Objet Indépendant.", + "headArmoireRoyalCrownNotes": "Hourra pour le souverain, puissant et fort ! Augmente la Force de <%= str %>. Armoire Enchantée : Ensemble Royal (Objet 1 sur 3).", "headArmoireGoldenLaurelsText": "Lauriers Dorés", "headArmoireGoldenLaurelsNotes": "Ces lauriers dorés récompensent ceux qui ont conquis les mauvaises habitudes. Augmente la Perception et la Constitution de <%= attrs %> chacun. Armoire Enchantée : Ensemble de la Toge Dorée (Objet 2 sur 3).", "headArmoireHornedIronHelmText": "Casque de Fer Cornu", @@ -489,13 +505,19 @@ "headArmoireYellowHairbowText": "Noeud Jaune", "headArmoireYellowHairbowNotes": "Devenez perspicace, fort et brillant en portant ce magnifique Nœud Jaune ! Augmente la Perception, la Force et l'Intelligence de <%= attrs %> chacun. Armoire Enchantée : Objet indépendant.", "headArmoireRedFloppyHatText": "Chapeau Négligé Rouge", - "headArmoireRedFloppyHatNotes": "De nombreux sorts furent tissés dans ce simple chapeau, lui donnant une éclatante couleur rouge. Augmente la Constitution, l'Intelligence et la Perception de <%= attrs %> chacun. Armoire Enchantée : Objet indépendant.", + "headArmoireRedFloppyHatNotes": "De nombreux sorts ont été tissés dans ce simple chapeau, lui donnant une éclatante couleur rouge. Augmente la Constitution, l'Intelligence et la Perception de <%= attrs %> chacun. Armoire Enchantée : Objet indépendant.", "headArmoirePlagueDoctorHatText": "Chapeau de Médecin de la Peste", "headArmoirePlagueDoctorHatNotes": "Un authentique chapeau porté par les médecins qui ont combattu la Peste de Procrastination ! Augmente la Force de <%= str %>, l'Intelligence de <%= int %>, et la Constitution de <%= con %>. Armoire Enchantée, Ensemble de Médecin de la Peste (Objet 1 sur 3).", "headArmoireBlackCatText": "Chapeau Chat Noir", - "headArmoireBlackCatNotes": "Ce chapeau noir... ronronne. Et remue la queue. Et respire aussi? Bon, vous avez simplement un chat endormi sur la tête. Augmente l'Intelligence et la Perception de <%= int %> points chacune. Armoire Enchantée: Objet indépendant.", + "headArmoireBlackCatNotes": "Ce chapeau noir... ronronne. Et remue la queue. Et respire aussi? Bon, vous avez simplement un chat endormi sur la tête. Augmente l'Intelligence et la Perception de <%= attrs %> points chacune. Armoire Enchantée: Objet indépendant.", "headArmoireOrangeCatText": "Chapeau Chat Orange", - "headArmoireOrangeCatNotes": "Ce chapeau orange... ronronne. Et remue la queue. Et respire aussi? Bon, vous avez simplement un chat endormi sur la tête. Augmente la Force et la Constitution de <%= int %> points chacune. Armoire Enchantée: Objet indépendant.", + "headArmoireOrangeCatNotes": "Ce chapeau orange... ronronne. Et remue la queue. Et respire aussi? Bon, vous avez simplement un chat endormi sur la tête. Augmente la Force et la Constitution de <%= attrs %> points chacune. Armoire Enchantée: Objet indépendant.", + "headArmoireBlueFloppyHatText": "Chapeau Négligé Bleu", + "headArmoireBlueFloppyHatNotes": "De nombreux sorts ont été cousus dans ce chapeau simple, lui conférant une couleur bleue brillante. Augmente la Constitution, l'Intelligence et la Perception de <%= attrs %> chacun. Armoire Enchantée : Objet indépendant.", + "headArmoireShepherdHeaddressText": "Capuche de Berger", + "headArmoireShepherdHeaddressNotes": "Parfois, les griffons que vous gardez s'amusent à mâchonner cette capuche, mais elle vous donne tout de même l'air plus intelligent. Augmente l'Intelligence de <%= int %>. Armoire Enchantée : Ensemble du Berger (Objet 3 sur 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "objet de main de bouclier", "shieldBase0Text": "Pas d'Équipement de Main de Bouclier", "shieldBase0Notes": "Pas de bouclier ni de deuxième arme.", @@ -579,6 +601,8 @@ "shieldArmoireGladiatorShieldNotes": "Pour être un gladiateur, vous devez ... euh, peu importe, cognez-les simplement avec votre bouclier. Augmente la Constitution de <%= con %> points et la Force de <%= str %> points. Armoire Enchantée : Ensemble de Gladiateur (Objet 3 sur 3).", "shieldArmoireMidnightShieldText": "Bouclier de Minuit", "shieldArmoireMidnightShieldNotes": "Ce bouclier est le plus puissant aux douze coups de minuit! Augmente la Constitution de <%= con %> points et la Force de <%= str %> points. Armoire Enchantée : Objet Indépendant.", + "shieldArmoireRoyalCaneText": "Canne Royale", + "shieldArmoireRoyalCaneNotes": "Hourra pour le souverain, dont on chante les louanges dans le royaume ! Augmente la Constitution, l'Intelligence et la Perception de <%= attrs %> chacun. Armoire Enchantée : Ensemble Royal ( Objet 2 sur 3).", "back": "Accessoire de Dos", "backBase0Text": "Pas d’accessoire dorsal", "backBase0Notes": "Pas d’accessoire dorsal.", @@ -592,6 +616,8 @@ "backMystery201504Notes": "Bzzz bzzz bzzz ! Voltigez de tâche en tâche. Ne confère aucun bonus. Équipement d'Abonné d'Avril 2015", "backMystery201507Text": "Planche de surf excellente", "backMystery201507Notes": "Surfez loin du Quai Assidu et domptez les vagues de la Baie d'Inkomplet ! N'apporte aucun bonus. Équipement d'Abonné de Juillet 2015.", + "backMystery201510Text": "Queue de Goblin", + "backMystery201510Notes": "Préhensile et puissante! N'apporte aucun bonus. Équipement d'Abonné d'Octobre 2015.", "backSpecialWonderconRedText": "Cape de Puissance", "backSpecialWonderconRedNotes": "Bruisse avec force et élégance. N'apporte aucun bonus. Équipement de Convention en Édition Spéciale.", "backSpecialWonderconBlackText": "Cape de Dissimulation", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "Cette puissante ramure change de couleur en harmonie avec celle des feuilles. N'apporte aucun bonus. Équipement d'Abonné de Septembre 2014.", "headAccessoryMystery201502Text": "Ailes de la Pensée", "headAccessoryMystery201502Notes": "Laissez votre imagination s'envoler ! N'apporte aucun bonus. Équipement d'Abonné de Février 2015.", + "headAccessoryMystery201510Text": "Cornes de Goblin", + "headAccessoryMystery201510Notes": "Terrifiantes et un peu visqueuses. N'apportent aucun bonus. Equipement d'Abonné d'Octobre 2015.", "headAccessoryMystery301405Text": "Lunettes Frontales", "headAccessoryMystery301405Notes": "\"Les lunettes c'est pour les yeux,\" disaient-ils. \"Personne ne voudrait de lunettes qu'on ne peut porter que sur la tête\" disaient-ils. Ha ! Vous leur avez bien montré ! N'apporte aucun bonus. Équipement d'Abonné d'Août 3015.", "eyewear": "Lunettes", diff --git a/common/locales/fr/generic.json b/common/locales/fr/generic.json index d0d9f74a91..104e01379d 100644 --- a/common/locales/fr/generic.json +++ b/common/locales/fr/generic.json @@ -28,7 +28,7 @@ "market": "Marché", "subscriberItem": "Objet mystère", "newSubscriberItem": "Nouvel Objet Mystère", - "subscriberItemText": "Les Abonnés recevront chaque mois un objet mystère. Celui-ci est généralement dévoilé une semaine avant la fin du mois. Consultez la page \"Mystery Item\" du wiki pour connaître la date exacte.", + "subscriberItemText": "Les Abonnés recevront chaque mois un objet mystère. Celui-ci est généralement dévoilé environ une semaine avant la fin du mois. Consultez la page \"Mystery Item\" du wiki pour avoir plus d'information.", "all": "Tous", "none": "Aucun", "or": "Ou", @@ -69,8 +69,9 @@ "habiticaDayPluralText": "Fêté <%= number %> Jours d'Appellation ! Merci à vous pour être un utilisateur fantastique.", "achievementDilatory": "Sauveur de Dilatoire", "achievementDilatoryText": "A contribué à vaincre le Redoutable Drag'on de Dilatoire au cours du \"Summer Splash Event\" 2014 !", - "costumeContest": "Concours de Costumes 2014", - "costumeContestText": "A participé au Concours de Costumes d'Halloween 2014. Découvrez certaines des participations sur blog.habitica.com/tagged/cosplay !", + "costumeContest": "Compétiteur du Concours de Costumes", + "costumeContestText": "A participé au Concours de Costumes d'Habitoween. Découvrez certaines des participations sur le blog d'Habitica !", + "costumeContestTextPlural": "A Participé à <%= number %> Concours de Costumes d'Habitoween. Découvrez certaines des participations sur le blog d'Habitica !", "memberSince": "- Membre depuis", "lastLoggedIn": "- Dernière connexion", "notPorted": "Cette fonction n'a pas encore été importée depuis le site original.", @@ -79,6 +80,7 @@ "errorUpCase": "ERREUR :", "newPassSent": "Nouveau mot de passe envoyé.", "serverUnreach": "Serveur inaccessible.", + "requestError": "Oups, il y a eu une erreur! Veuillez s.v.p. actualiser la page, votre dernière action peut ne pas avoir été enregistrée correctement.", "seeConsole": "Si l'erreur persiste, veuillez la signaler à Aide > Signaler un Bug. Si vous avez connaissance de la console de votre navigateur, veuillez inclure les messages d'erreur de celle-ci.", "error": "Erreur", "menu": "Menu", @@ -110,9 +112,9 @@ "December": "Décembre", "dateFormat": "Format de la Date", "achievementStressbeast": "Sauveur de Stoïcalme", - "achievementStressbeastText": "Helped defeat the Abominable Stressbeast during the 2014 Winter Wonderland Event!", - "achievementBurnout": "Savior of the Flourishing Fields", - "achievementBurnoutText": "Helped defeat Burnout and restore the Exhaust Spirits during the 2015 Fall Festival Event!", + "achievementStressbeastText": "A contribué à vaincre l'Abominable Homme du Stress pendant le Festival Winter Wonderland 2014!", + "achievementBurnout": "Sauveur des Champs Florissants", + "achievementBurnoutText": "A contribué à vaincre Burnout et à revivifier les Esprits d'Échappement au cours du \"Fall Festival Event\" 2015!", "checkOutProgress": "Regardez mes progrès sur Habitica !", "cardReceived": "A reçu une carte !", "cardReceivedFrom": "<%= cardType %> de <%= userName %>", @@ -133,5 +135,17 @@ "thankyou2": "Je t'envoie mille mercis.", "thankyou3": "Je suis très reconnaissant - merci !", "thankyouCardAchievementTitle": "Grandement Reconnaissant", - "thankyouCardAchievementText": "Merci d'être reconnaissant ! A envoyé ou reçu <%= cards %> cartes de remerciements." + "thankyouCardAchievementText": "Merci d'être reconnaissant ! A envoyé ou reçu <%= cards %> cartes de remerciements.", + "streakAchievement": "Vous avez obtenu un succès de combo !", + "firstStreakAchievement": "Combo de 21 jours", + "streakAchievementCount": "<%= streaks %> combos de 21 jours", + "twentyOneDays": "Vous avez effectué votre tâche Quotidienne 21 jours d'affilée !", + "dontBreakStreak": "Bien joué ! Continuez à augmenter votre combo !", + "dontStop": "N'abandonnez pas !", + "levelUpShare": "J'ai passé un niveau en Habitica en faisant des progrès dans mes habitudes réelles !", + "questUnlockShare": "J'ai déverrouillé une nouvelle quête sur Habitica !", + "hatchPetShare": "J'ai fait éclore un familier en terminant des tâches de ma vie réelle!", + "raisePetShare": "J'ai transformé un familier en monture en terminant des tâches de ma vie réelle!", + "wonChallengeShare": "J'ai gagné un défi en Habitica !", + "achievementShare": "J'ai gagné un nouveau succès sur Habitica !" } \ No newline at end of file diff --git a/common/locales/fr/groups.json b/common/locales/fr/groups.json index 85ff9161e0..ed01327e3b 100644 --- a/common/locales/fr/groups.json +++ b/common/locales/fr/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "Quitter l'Auberge", "innCheckIn": "Se reposer à l'Auberge", "innText": "Vous êtes installé à l'Auberge ! Tant que vous y séjournez, vous n'êtes pas affecté par vos Quotidiennes à la fin de la journée, mais elles vont tout de même se remettre à zéro tous les jours. Attention : si vous êtes en pleine Quête contre un Boss, il pourra toujours vous blesser pour les Quotidiennes manquées par les potes de votre Equipe, sauf s'ils séjournent aussi à l'Auberge ! Et vous ne pourrez vous-même blesser le Boss (ou récolter des objets) que lorsque vous quitterez l'Auberge.", + "innTextBroken": "Vous êtes installé à l'Auberge, je suppose... Tant que vous y séjournez, vous n'êtes pas affecté par vos Quotidiennes à la fin de la journée, mais elles vont tout de même se remettre à zéro tous les jours... Si vous êtes en pleine Quête contre un Boss, il pourra toujours vous blesser pour les Quotidiennes manquées par les potes de votre Équipe... sauf s'ils séjournent aussi à l'Auberge... De plus, vous ne pourrez vous-même blesser le Boss (ou récolter des objets) que lorsque vous quitterez l'Auberge... si fatigué...", "lfgPosts": "Sujets de recherche de Groupe (Recherche d'Équipe)", "tutorial": "Tutoriel", "glossary": "Glossaire", @@ -145,5 +146,6 @@ "partyEmpty": "Vous êtes seul·e dans votre équipe. Invitez vos amis !", "partyChatEmpty": "Votre discussion d'équipe est vide ! Écrivez un message dans le champ ci-dessus pour commencer la discussion.", "guildChatEmpty": "La discussion de cette guilde est vide ! Écrivez un message dans le champ ci-dessus pour commencer la discussion.", - "possessiveParty": "Équipe de <%= name %>" + "possessiveParty": "Équipe de <%= name %>", + "requestAcceptGuidelines": "Si vous souhaitez envoyer des messages dans la Taverne ou dans le chat d'une équipe ou d'une guilde, veuillez d'abord s'il vous plait lire nos <%= linkStart %>Règles de Vie en Communauté<%= linkEnd %> et cliquez sur le bouton ci-dessous pour indiquer que vous les acceptez." } \ No newline at end of file diff --git a/common/locales/fr/limited.json b/common/locales/fr/limited.json index 57f902fb24..631b9d1695 100644 --- a/common/locales/fr/limited.json +++ b/common/locales/fr/limited.json @@ -21,6 +21,7 @@ "valentineCardAchievementText": "Wow, vous et votre ami devez vraiment compter l'un pour l'autre ! A envoyé ou reçu <%= cards %> cartes de la Saint Valentin.", "polarBear": "Ours polaire", "turkey": "Dindon", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "Ourson polaire", "jackolantern": "Citrouille d'Halloween", "seasonalShop": "Boutique Saisonnière", @@ -30,6 +31,7 @@ "seasonalShopText": "Bienvenue à la Boutique Saisonnière !! Nous avons actuellement reçu les nouveautés Édition Saisonnière du Printemps. Tout l'équipement est disponible à l'achat pendant la Fête du Printemps chaque année, mais nous ne sommes ouverts que jusqu'au 30 Avril, alors faites un stock dès maintenant, ou vous devrez attendre un an pour acheter à nouveau cet équipement !", "seasonalShopSummerText": "Bienvenue à la Boutique Saisonnière !! Nous avons reçu les nouveautés Édition Saisonnière de l'Été. Tout l'équipement sera disponible à l'achat pendant la Fête de l'Été chaque année, mais nous ne sommes ouverts que jusqu'au 31 juillet, alors faites un stock dès maintenant ou vous devrez attendre un an pour acheter à nouveau cet équipement !", "seasonalShopFallText": "Bienvenue à la Boutique Saisonnière !! Nous avons actuellement reçu les nouveautés Édition Saisonnière d'automne. Tout l'équipement est disponible à l'achat pendant le Festival d'Automne chaque année, mais nous ne sommes ouverts que jusqu'au 31 octobre, alors faites un stock dès maintenant, ou vous devrez attendre un an pour acheter à nouveau cet équipement !", + "seasonalShopFallTextBroken": "Oh... Bienvenue à la Boutique Saisonnière... Nous avons actuellement reçu les nouveautés Édition Saisonnière d'automne, ou quelque chose du genre... Tout l'équipement est disponible à l'achat pendant le Festival d'Automne chaque année, mais nous ne sommes ouverts que jusqu'au 31 octobre... alors je suppose que vous devriez faire le stock dès maintenant, ou vous devrez attendre... et attendre... et attendre... *soupir*", "seasonalShopRebirth": "Si vous avez utilisé l'Orbe de Renaissance, vous pouvez racheter cet équipement dans la colonne des Récompenses. Au début, vous pourrez seulement acheter les objets associés à votre classe actuelle (Guerrier par défaut), mais n'ayez crainte, les objets spécifiques à une classe deviendront disponibles si vous choisissez cette classe.", "candycaneSet": "Sucre d'Orge (Mage)", "skiSet": "Ski-sassin (Voleur)", diff --git a/common/locales/fr/messages.json b/common/locales/fr/messages.json index 7fc4c99c39..10ca1cec28 100644 --- a/common/locales/fr/messages.json +++ b/common/locales/fr/messages.json @@ -30,5 +30,26 @@ "messageAlreadyOwnGear": "Vous possédez déjà cet objet. Équipez le depuis la page d'équipement.", "armoireEquipment": "<%= image %> Vous avez trouvé une pièce d'équipement rare dans l'Armoire : <%= dropText %> ! Génial !", "armoireFood": "<%= image %> Vous farfouillez dans l'Armoire et trouvez du/de la <%= dropArticle %><%= dropText %>. Qu'est-ce que ça fait là ?", - "armoireExp": "Vous luttez contre l'Armoire et gagnez de l'Expérience. Prends ça !" + "armoireExp": "Vous luttez contre l'Armoire et gagnez de l'Expérience. Prends ça !", + "messageInsufficientGems": "Pas assez de gemmes!", + "messageAuthPasswordMustMatch": ":password et :confirmPassword ne correspondent pas", + "messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword requis", + "messageAuthUsernameTaken": "Nom d'utilisateur déjà pris.", + "messageAuthEmailTaken": "E-mail déjà pris.", + "messageAuthNoUserFound": "Utilisateur introuvable.", + "messageAuthMustBeLoggedIn": "Vous devez être connecté.", + "messageAuthMustIncludeTokens": "Votre demande doit contenir un jeton d'API et un ID d'Utilisateur.", + "messageGroupNotFound": "Groupe introuvable ou vous n'y avez pas accès.", + "messageGroupAlreadyInParty": "Déjà dans un équipe, essayez d'actualiser.", + "messageGroupOnlyLeaderCanUpdate": "Seul le responsable du groupe peut mettre à jour le groupe!", + "messageGroupRequiresInvite": "Vous ne pouvez rejoindre un groupe sans invitation.", + "messageGroupCannotRemoveSelf": "Vous ne pouvez pas vous supprimer vous-même!", + "messageGroupChatBlankMessage": "Vous ne pouvez pas envoyer de message vierge. ", + "messageGroupChatLikeOwnMessage": "Vous ne pouvez pas aimer votre propre message. Ne soyez pas ce genre de personne !", + "messageGroupChatFlagOwnMessage": "Vous ne pouvez pas signaler votre propre message. ", + "messageGroupChatFlagAlreadyReported": "Vous avez déjà signalé ce message.", + "messageGroupChatNotFound": "Message introuvable !", + "messageGroupChatAdminClearFlagCount": "Seul un administrateur peut modifier ce compteur !", + "messageUserOperationProtected": "chemin `<%= operation %>` n'a pas été sauvegardé car c'est un chemin protégé.", + "messageUserOperationNotFound": "<%= operation %> opération introuvable" } \ No newline at end of file diff --git a/common/locales/fr/noscript.json b/common/locales/fr/noscript.json new file mode 100644 index 0000000000..aaacab9cb4 --- /dev/null +++ b/common/locales/fr/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Hélas ! JavaScript n'est pas activé sur votre navigateur.", + "jsDisabledHeadingFull": "Hélas ! JavaScript n'est pas activé sur votre navigateur. Sans lui, Habitica ne peut fonctionner correctement.", + "jsDisabledText": "Habitica ne peut pas s'afficher correctement sans lui !", + "jsDisabledLink": "Veuillez s'il vous plait activer JavaScript pour continuer !" +} \ No newline at end of file diff --git a/common/locales/fr/npc.json b/common/locales/fr/npc.json index a298bd0493..b175c0252d 100644 --- a/common/locales/fr/npc.json +++ b/common/locales/fr/npc.json @@ -7,15 +7,19 @@ "daniel": "Daniel", "danielText": "Bienvenue à la Taverne ! Restez un moment et rencontrez les habitants. Si vous avez besoin de vous reposer (vacances ? maladie ?), je vous installerai à l'Auberge. Pendant votre séjour, vos tâches Quotidiennes ne vous infligeront pas de dommages à la fin de la journée, mais vous pourrez quand même les réaliser.", "danielText2": "Prenez garde : si vous êtes au milieu d'une quête contre un boss, celui-ci vous infligera tout de même des blessures en fonction des Quotidiennes manquées des membres de votre groupe ! De façon identique, vos propres dégâts au Boss (ou les objets récoltés) ne seront pas appliqués tant que vous ne quitterez pas l'Auberge.", + "danielTextBroken": "Bienvenue à la Taverne... je suppose... Si vous avez besoin de vous reposer, je vous installerai à l'Auberge... Pendant votre séjour, vos tâches Quotidiennes ne vous infligeront pas de dommages à la fin de la journée, mais vous pourrez quand même les réaliser... si vous en avez la force...", + "danielText2Broken": "Oh...: si vous êtes au milieu d'une quête contre un boss, celui-ci vous infligera tout de même des blessures si les membres de votre groupe rate des Quotidiennes! De plus, vos propres dégâts infligés au Boss (ou les objets récoltés) ne seront pas appliqués tant que vous n'aurez pas quitté l'Auberge.", "alexander": "Alexander le Marchand", "welcomeMarket": "Bienvenue au Marché ! Achetez des œufs rares et des potions ! Vendez vos surplus ! Commandez des services utiles ! Venez voir ce que nous avons à proposer.", - "sellForGold": "Vendre <%= item %> pour <%= gold %> Or", - "sellEggForGold": "Vendre un oeuf de <%= itemType %> pour <%= gold %> Or.", - "sellPotionForGold": "Vendre une potion <%= itemType %> pour <%= gold %> Or", + "displayItemForGold": "Voulez-vous vendre un-e <%= itemType %> ?", + "displayEggForGold": "Voulez-vous vendre un œuf de <%= itemType %> ?", + "displayPotionForGold": "Voulez-vous vendre une potion <%= itemType %> Potion ?", + "sellForGold": "Vente pour <%= gold %> pièces d'or.", "buyGems": "Acheter des Gemmes", "justin": "Justin", "ian": "Ian", "ianText": "Bienvenue à la boutique des Quêtes ! Vous pouvez utiliser des parchemins de quête pour battre des monstres avec vos amis. Soyez sûr de vérifier notre ensemble de parchemins de Quêtes à l'achat sur votre droite !", + "ianBrokenText": "Bienvenue à la boutique des Quêtes... Ici, vous pouvez utiliser des Parchemins de quêtes pour combattre des monstres avec vos amis. Assurez-vous de regarder notre ensemble de Parchemins de quêtes en vente sur votre droite...", "USD": "USD", "newStuff": "Nouveauté", "cool": "Rappelez-le moi plus tard", diff --git a/common/locales/fr/pets.json b/common/locales/fr/pets.json index 102faa7132..9e73c229d3 100644 --- a/common/locales/fr/pets.json +++ b/common/locales/fr/pets.json @@ -18,7 +18,7 @@ "mammoth": "Mammouth Laineux", "orca": "Orque", "royalPurpleGryphon": "Griffon Pourpre Royal", - "phoenix": "Phoenix", + "phoenix": "Phénix", "rarePetPop1": "Cliquez sur l'empreinte dorée pour savoir comment obtenir cet animal rare en contribuant à Habitica !", "rarePetPop2": "Comment obtenir ce Familier !", "potion": "Potion <%= potionType %>", @@ -58,8 +58,16 @@ "firstDrop": "Vous avez débloqué le système d'objets ! À présent lorsque vous complétez des tâches, vous avez une petite chance de trouver un objet. Vous venez de trouver un <%= eggText %> Œuf ! <%= eggNotes %>", "useGems": "Si vous voulez un Familier et que vous n'en pouvez plus d'attendre de le trouver, utilisez des Gemmes dans Inventaire > Marchépour l'acheter !", "hatchAPot": "Faire éclore un <%= egg %> <%= potion %> ?", + "hatchedPet": "Vous avez fait éclore un <%= egg %><%= potion %>!", + "displayNow": "Afficher tout de suite", + "displayLater": "Afficher plus tard", + "earnedCompanion": "Grâce à votre productivité, vous avez gagné un nouveau compagnon. Nourrissez-le pour le faire grandir !", "feedPet": "Donner <%= article %><%= text %> à <%= name %> ?", "useSaddle": "Seller <%= pet %> ?", + "raisedPet": "Vous avez élevé un·e <%= pet %> !", + "earnedSteed": "En effectuant vos tâches, vous avez gagné un fidèle coursier !", + "rideNow": "Monter tout de suite", + "rideLater": "Monter plus tard", "petName": "<%= egg %> <%= potion %>", "mountName": "<%= mount %> <%= potion %>", "petKeyName": "Clé du Chenil", diff --git a/common/locales/fr/quests.json b/common/locales/fr/quests.json index 655dbe77cc..a619951a9a 100644 --- a/common/locales/fr/quests.json +++ b/common/locales/fr/quests.json @@ -13,6 +13,7 @@ "youReceived": "Vous remportez", "dropQuestCongrats": "Félicitations d'avoir gagné ce parchemin de quête ! Vous pouvez inviter votre équipe à commencer la quête maintenant, ou y revenir à n'importe quel moment dans votre Inventaire > Quêtes.", "questSend": "En cliquant sur \"Inviter\", vous enverrez une invitation aux membres de votre équipe. Lorsque tous les membres auront accepté ou refusé, la quête commencera. Vous pouvez suivre le statut de l'invitation sous Social > Équipe.", + "questSendBroken": "En cliquant sur « Inviter », vous enverrez une invitation aux membres de votre équipe. Lorsque tous les membres auront accepté ou refusé, la quête commencera. Vous pouvez suivre le statut de l'invitation sous Social > Équipe.", "inviteParty": "Inviter l’Equipe dans une Quête", "questInvitation": "Invitation à une Quête :", "questInvitationTitle": "Invitation à une Quête", @@ -24,6 +25,7 @@ "rejected": "Rejetée", "pending": "En attente", "questStart": "Une fois que tous les membres ont soit accepté, soit refusé, la quête commence. Seuls ceux qui ont cliqué sur \"accepter\" pourront participer à la quête et recevoir les récompenses. Si certains membres mettent trop de temps à répondre (peut-être sont-ils inactifs ?), le lanceur de quête peut démarrer la quête sans eux en cliquant sur \"commencer\". Le lanceur de quête peut également annuler la quête et récupérer le parchemin de quête en cliquant sur \"Annuler\".", + "questStartBroken": "Une fois que tous les membres ont soit accepté, soit refusé, la quête commence... Seuls ceux qui ont cliqué sur « Accepter » pourront participer à la quête et recevoir les récompenses... Si certains membres mettent trop de temps à répondre (peut-être sont-ils inactifs ?), le propriétaire de la quête peut démarrer la quête sans eux en cliquant sur « Commencer »... Le propriétaire de la quête peut également annuler la quête et récupérer le parchemin de quête en cliquant sur « Annuler »....", "begin": "Commencer", "bossHP": "Santé du Boss", "bossStrength": "Force du Boss", @@ -34,9 +36,14 @@ "itemsToCollect": "Objets à récupérer", "bossDmg1": "Chaque tâche Quotidienne ou À Faire et chaque Habitude positive inflige des dommages au boss. Frappez plus fort avec des tâches plus rouges ou avec les sorts Frappe Brutale et Eplosion de Flammes. Le boss infligera des dommages à chacun des participants de la quête pour chaque Quotidienne que vous aurez manquée (multipliés par la Force du boss) en plus des dommages normaux. Alors protégez votre équipe en effectuant vos Quotidiennes ! Tout dommage causé par vous et par le boss est pris en compte au cron (la réinitialisation de votre journée).", "bossDmg2": "Seuls les participants pourront combattre le boss et partager le butin de la quête.", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "Chaque tâche Quotidienne ou À Faire et chaque Habitude positive effectuée inflige des dommages au boss... Frappez plus fort avec des tâches plus rouges ou avec les sorts Frappe Brutale et Explosion de Flammes... Le boss infligera des dommages à chacun des participants de la quête pour chaque Quotidienne manquée (multipliés par la Force du boss) en plus des dommages normaux... Alors protégez votre équipe en effectuant vos Quotidiennes... Tout dommage causé par vous et par le boss est pris en compte au cron (la réinitialisation de votre journée)...", + "bossDmg2Broken": "Seuls les participants pourront combattre le boss et partager le butin de la quête...", + "tavernBossInfo": "Complétez les Quotidiennes et les Tâches À faire et maintenez vous bonnes habitudes pour blesser le Boss Mondial ! Les Quotidiennes incomplètes remplissent la jauge d'Harassement. Lorsque la jauge d'Harassement est pleine, le Boss Mondial attaquera un PNJ. Un Boss Mondial ne blessera jamais de joueurs individuels ou leurs comptes d'aucune façon. Seules les tâches des comptes actifs ne reposant pas à l'Auberge seront comptabilisées.", + "tavernBossInfoBroken": "Effectuez vos tâches Quotidiennes et À Faire et maintenez vos Habitudes positives pour blesser le Boss Mondial... Chaque Quotidienne non effectuée remplit la barre d'Harassement... Lorsque la barre d'Harassement est pleine, le Boss Mondial attaquera un PNJ... Un Boss Mondial ne blessera jamais des joueurs individuels ou des comptes de quelque façon que ce soit... Seules les tâches des comptes actifs de joueurs qui ne se reposent pas à l'Auberge sont prises en compte...", "bossColl1": "Pour obtenir des objets, accomplissez vos tâches positives. Vous trouvez les objets de quêtes de la même façon que vous trouvez les objets normaux mais vous ne les verrez que le jour suivant. À ce moment, tous les objets de quêtes que vous aurez trouvés seront comptabilisés et s'ajouteront à la pile.", "bossColl2": "Seuls les participants peuvent collecter des objets et partager le butin de la quête.", + "bossColl1Broken": "Pour collectionner des objets, accomplissez vos tâches positives... Vous trouverez les objets de quête exactement comme les objets normaux, mais vous ne les verrez que le jour suivant, lorsque tous les objets trouvés seront comptabilisés dans votre collection...", + "bossColl2Broken": "Seuls les participants peuvent collectionner des objets et partager le butin de la quête", "abort": "Abandonner", "leaveQuest": "Quitter la Quête", "sureLeave": "Êtes-vous sûr de vouloir quitter la quête en cours ? Tout votre progrès dans cette quête sera perdu.", @@ -63,10 +70,13 @@ "sureAbort": "Êtes-vous sûr de vouloir abandonner cette mission ? Elle sera abandonnée pour tous les membres de votre groupe et toute la progression sera perdue. Le lanceur de quête reprendra possession du parchemin de quête.", "doubleSureAbort": "Êtes-vous sûr(e) et certain(e) ? Assurez-vous qu'ils ne vont pas vous détester pour le reste de votre vie !", "questWarning": "Si de nouveaux joueurs rejoignent le groupe avant que la quête ne soit lancée, il recevront également une invitation. Cependant, une fois la quête débutée aucun nouveau membre du groupe ne pourra rejoindre celle-ci.", + "questWarningBroken": "Si de nouveaux joueur rejoignent le groupe avant que la quête ne commence, ils recevront également une invitation... Mais une fois la quête lancée, aucun nouveau membre du groupe ne peut rejoindre la quête", "bossRageTitle": "Rage", "bossRageDescription": "Quand cette jauge sera remplie, le boss réalisera une attaque spéciale !", "startAQuest": "COMMENCER UNE QUÊTE", "startQuest": "Commencer la Quête", "whichQuestStart": "Quelle quête voulez-vous démarrer ?", - "getMoreQuests": "Obtenez plus de quêtes" + "getMoreQuests": "Obtenez plus de quêtes", + "unlockedAQuest": "Vous avez déverrouillé une quête !", + "leveledUpReceivedQuest": "Vous avez atteint le niveau <%= level %> et reçu un parchemin de quête !" } \ No newline at end of file diff --git a/common/locales/fr/questscontent.json b/common/locales/fr/questscontent.json index 79a71648f1..23da404a9f 100644 --- a/common/locales/fr/questscontent.json +++ b/common/locales/fr/questscontent.json @@ -250,16 +250,28 @@ "questHorseBoss": "Cheval de cauchemar", "questHorseDropHorseEgg": "Cheval (Œuf) ", "questHorseUnlockText": "Déverrouille l'achat d’œufs de cheval au Marché", - "questBurnoutText": "Burnout and the Exhaust Spirits", - "questBurnoutNotes": "It is well past midnight, still and stiflingly hot, when Redphoenix and scout captain Kiwibot abruptly burst through the city gates. \"We need to evacuate all the wooden buildings!\" Redphoenix shouts. \"Hurry!\"

Kiwibot grips the wall as she catches her breath. \"It's draining people and turning them into Exhaust Spirits! That's why everything was delayed. That's where the missing people have gone. It's been stealing their energy!\"

\"'It'?'\" asks Lemoness.

And then the heat takes form.

It rises from the earth in a billowing, twisting mass, and the air chokes with the scent of smoke and sulphur. Flames lick across the molten ground and contort into limbs, writhing to horrific heights. Smoldering eyes snap open, and the creature lets out a deep and crackling cackle.

Kiwibot whispers a single word.

\"Burnout.\"", - "questBurnoutCompletion": "Burnout is DEFEATED!

With a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.

Ian, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!

\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!

One of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"

Her tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"

She claps her hands. \"Now - let's celebrate!\"", - "questBurnoutCompletionChat": "`Burnout is DEFEATED!`\n\nWith a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.\n\nIan, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!\n\n\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!\n\nOne of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"\n\nHer tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"\n\nShe claps her hands. \"Now - let's celebrate!\"\n\nAll Habiticans receive:\n\nPhoenix Pet\nPhoenix Mount\nAchievement: Savior of the Flourishing Fields\nBasic Candy\nVanilla Candy\nSand Candy\nCinnamon Candy\nChocolate Candy\nRotten Candy\nSour Pink Candy\nSour Blue Candy\nHoney Candy", + "questBurnoutText": "Burnout et les Esprits d'Échappement", + "questBurnoutNotes": "Minuit est passé depuis longtemps déjà, tout est calme et la chaleur est étouffante, quand Redphoenix et le capitaine scout Kiwibot font irruption par les portes de la ville. \"Nous devons évacuer tous les bâtiments en bois !\" crie Redphoenix. \"Dépêchez-vous !\"

Kiwibot agrippe le mur en reprenant son souffle. \"Ça vide les gens et les transforme en Esprits d'Échappement ! C'est pour ça que tout avait du retard. C'est là que sont les gens qui avaient disparu. Ça leur a volé leur énergie !\"

\"\"Ça\" ?\" demande Lemoness.

A ce moment, la chaleur prend forme.

Elle s'élève de la terre en une masse ondulante et tourbillonnante, et l'air devient suffoquant par l'odeur de fumée et de souffre. Des flammes lèchent le sol fondu et, à force de torsions, deviennent des membres, se tordant jusqu'à une hauteur terrible. Des yeux fumants s'ouvrent brusquement et la créature émet un rire profond et crépitant.

Kiwibot chuchote un mot unique.

\"Burnout\"", + "questBurnoutCompletion": "Burnout est VAINCU !

Avec un long et faible soupir, Burnout libère lentement l'énergie ardente qui entretenait son feu. Alors que le monstre se réduit doucement en cendres, son énergie volée scintille dans l'air, ranimant les Esprits d'Échappement et leur rendant leur véritable forme.

Ian, Daniel et la Sorcière Saisonnière se réjouissent alors que les Habiticien-ne-s se ruent vers eux pour les saluer, et tous les citoyens disparus aux Champs Florissants embrassent leurs amis et leurs familles. Et du dernier Esprit d'Échappement apparaît la Joyeuse Faucheuse en personne !

\"Regarde !\" murmure @Baconsaur alors que les cendres commencent à briller. Lentement, elles se fondent en des centaines de phénix étincelants !

L'un des oiseaux rayonnants se pose sur le bras squelettique de la Joyeuse Faucheuse, qui lui sourit. Ça fait longtemps que je n'ai pas eu le privilège exquis de voir un phénix dans les Champs Florissants\", dit-elle. \"Mais en considérant les derniers événements, je dois dire que c'est thématiquement tout à fait de circonstance !\"

Son ton devient plus grave, bien que son sourire demeure (tout naturellement). \"Nous avons la réputation d'être des travailleurs ici, mais nous sommes aussi connus pour nos fêtes et festivités. C'est plutôt ironique, je suppose, que nous ne nous accordions pas de temps pour nous amuser alors même que nous préparons une fête spectaculaire. Nous ne ferons pas la même erreur deux fois, c'est certain !\"

Elle frappe dans ses mains. \"Maintenant - amusons-nous !\"", + "questBurnoutCompletionChat": "`Burnout est VAINCU !`\n\nAvec un long et faible soupir, Burnout libère lentement l'énergie ardente qui entretenait son feu. Alors que le monstre se réduit doucement en cendres, son énergie volée scintille dans l'air, ranimant les Esprits d'Échappement et leur rendant leur véritable forme. \n\nIan, Daniel et la Sorcière Saisonnière se réjouissent alors que les Habiticien·ne·s se ruent vers eux pour les saluer, et tous les citoyens disparus aux Champs Florissants embrassent leurs amis et leurs familles. Et du dernier Esprit d'Échappement apparaît la Joyeuse Faucheuse en personne!\n\n\"Regarde !\" murmure @Baconsaur alors que les cendres commencent à briller. Lentement, elles se fondent en des centaines de phénix étincelants!\n\nL'un des oiseaux rayonnants se pose sur le bras squelettique de la Joyeuse Faucheuse, qui lui sourit. Ça fait longtemps que je n'ai pas eu le privilège exquis de voir un phénix dans les Champs Florissants\", dit-elle. \"Mais en considérant les derniers événements, je dois dire que c'est thématiquement tout à fait de circonstance !\"\n\nSon ton devient plus grave, bien que son sourire demeure (tout naturellement). \"Nous avons la réputation d'être des travailleurs ici, mais nous sommes aussi connus pour nos fêtes et festivités. C'est plutôt ironique, je suppose, que nous ne nous accordions pas de temps pour nous amuser alors même que nous préparons une fête spectaculaire. Nous ne ferons pas la même erreur deux fois, c'est certain !\"\n\nElle frappe dans ses mains. \"Maintenant - amusons-nous !\"\n\nTous les Habiticien·ne·s reçoivent:\n\nPhoenix (Familier)\nPhoenix (Monture\nSuccès: Sauveur des Champs Florissants\nBonbon Simple\nBonbon à la Vanille\nBonbon au Sable\nBonbon à la Cannelle\nBonbon au Chocolat\nBonbon Pourri\nBonbon Aigre Rose\nBonbon Aigre Bleu\nBonbon au Miel", "questBurnoutBoss": "Burnout", - "questBurnoutBossRageTitle": "Exhaust Strike", - "questBurnoutBossRageDescription": "When this gauge fills, Burnout will unleash its Exhaust Strike on Habitica!", - "questBurnoutDropPhoenixPet": "Phoenix (Pet)", - "questBurnoutDropPhoenixMount": "Phoenix (Mount)", - "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", - "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTitle": "Attaque d'Échappement", + "questBurnoutBossRageDescription": "Lorsque la jauge sera remplie, Burnout déchaînera son Attaque d'Échappement sur Habitica!", + "questBurnoutDropPhoenixPet": "Phoenix (Familier)", + "questBurnoutDropPhoenixMount": "Phoenix (Monture)", + "questBurnoutBossRageQuests": "`Burnout lance ATTAQUE D'ÉCHAPPEMENT !`\n\nOh non ! Malgré nos efforts redoublés , nous avons laissé quelques Quotidiennes nous échapper, et maintenant Burnout est embrasé d'énergie ! Avec un grognement crépitant, il engloutit Ian le Maître des Quêtes dans une vague de feu spectral. Alors que des parchemins de quêtes, tombés au sol, se consument, la fumée se lève et vous voyez que Ian a été vidé de son énergie et n'est plus maintenant qu'un Esprit d'Échappement à la dérive. \n\nSeule la victoire contre Burnout peut rompre le sort et revivifier notre Maître des Quêtes bien-aimé. Effectuons nos Quotidiennes et vainquons ce monstre avant qu'il n'attaque encore !", + "questBurnoutBossRageSeasonalShop": "`Burnout lance ATTAQUE D'ÉCHAPPEMENT !`\n\nAhh!!! Les Quotidiennes que nous n'avons pas effectuées ont nourri les flammes de Burnout, et maintenant il a assez d'énergie pour frapper à nouveau! Il envoie une langue de feu spectral qui brûle la Boutique Saisonnière. Vous êtes horrifié de voir que la joyeuse Sorcière Saisonnière a été transformée en un Esprit d'Échappement tout affaissé.\n\nNous devons sauver nos PNJ ! Vite, Habiticien·ne·s, effectuez vos tâches et vainquez Burnout avant qu'il ne frappe pour la troisième fois !", + "questBurnoutBossRageTavern": "`Burnout lance ATTAQUE D'ÉCHAPPEMENT !`\n\nBeaucoup d'Habiticien·ne·s ont échappé à Burnout dans la Taverne, mai c'est terminé! Avec un hurlement perçant, Burnout râtisse la Taverne avec ses mains chauffées à blanc. Alors que les usagers de la Taverne s'enfuient, Daniel est empoigné par Burnout et se transforme en Esprit d'Échappement sous vos yeux !\n\nCette horreur exaltée se prolonge vraiment trop. N'abandonnez pas... nous sommes si près de vaincre Burnout une fois pour toutes !", + "questFrogText": "Marécage de la Grenouille du Désordre", + "questFrogNotes": "Alors que vous et vos amis cheminez péniblement dans les Marécages de la Stagnation, @starsystemic désigne un grand panneau. \"Restez sur le chemin principal - si vous le pouvez.\"

\"Ca ne peut pas être si compliqué !\", dit @RosemonkeyCT. \"Il est large, et bien délimité\"

Mais, alors que vous poursuivez votre chemin, vous remarquez que le chemin disparaît petit à petit sous la boue du marécage, mêlée d'étranges petits débris bleus et de tout un bric-à-brac, jusqu'à ce qu'il devienne impossible de continuer à le suivre.

Alors que vous regardez tout autour de vous en vous demandant comment la route a bien pu finir dans cet état, @Jon Arjinborn pousse un cri. \"Attention !\". Une grenouille, manifestement furieuse, bondit hors de la vase, enroulée dans du linge sale et éclairée d'une flamme bleue. Il vous faudra vaincre cette Grenouille du Désordre empoisonnée pour poursuivre !", + "questFrogCompletion": "La grenouille se replie dans la vase, vaincue. Tandis qu'elle s'éloigne en titubant, la vase bleue disparaît, laissant la voie libre.

Au beau milieu du chemin se trouvent trois oeufs immaculés. \"L'enveloppe est tellement claire qu'on peut même voir les têtards au travers!\" dit @Breadstrings. \"Tiens, tu devrais les prendre.\"", + "questFrogBoss": "La Grenouille du Désordre", + "questFrogDropFrogEgg": "Grenouille (Œuf)", + "questFrogUnlockText": "Déverrouille l'achat d’œufs de grenouille au Marché", + "questSnakeText": "Le Serpent de la Distraction", + "questSnakeNotes": "Vivre dans les Dunes sablonneuses de la Distraction requiert une âme vaillante. En effet, le désert aride n'encourage que trop peu la productivité et les dunes scintillantes ont détourné plus d'un voyageur du droit chemin. Toutefois, une chose effraie même les gens du coin : le désert change et retourne des villages entiers. Les résidents déclarent qu'un monstre au long corps sinueux se cache, en attente, sous les sables du désert. Pour récompenser celui ou celle qui leur viendra en aide en trouvant et en arrêtant cette créature, ils ont mis en commun un butin. Les très célèbres charmeurs de serpent @EmeraldOx et @PainterProphet ont accepté de vous aider à invoquer la bête. Arriverez-vous à arrêter le Serpent de la Distraction ?", + "questSnakeCompletion": "Grâce à l'assistance des charmeurs, vous bannissez le Serpent de la Distraction. Même si vous êtes heureux d'avoir aidé les habitants des Dunes, vous ne pouvez vous empêcher de ressentir un peu de tristesse pour votre ennemi tombé au combat. Alors que vous contemplez la vue, @LordDarkly vous approche : « Merci ! C'est peu, mais j'espère que ça l'exprime bien notre reconnaissance.» Il vous remet un peu d'Or et... des œufs de serpent ! Vous reverrez donc ce majestueux animal après tout.", + "questSnakeBoss": "Serpent de Distraction", + "questSnakeDropSnakeEgg": "Serpent (Œuf)", + "questSnakeUnlockText": "Déverrouille l'achat d’œufs de serpent au Marché" } \ No newline at end of file diff --git a/common/locales/fr/rebirth.json b/common/locales/fr/rebirth.json index 4abe514106..b39703662a 100644 --- a/common/locales/fr/rebirth.json +++ b/common/locales/fr/rebirth.json @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "Vous avez également obtenu un Succès pour avoir commencé une nouvelle aventure !", "beReborn": "Renaître", "rebirthAchievement": "Vous avez commencé une nouvelle aventure ! C'est votre Renaissance n°<%= number %> et le niveau le plus élevé que vous avez atteint est <%= level %>. Pour cumuler ce Succès, commencez votre nouvelle aventure une fois que vous aurez atteint un niveau encore plus élevé !", + "rebirthAchievement100": "Vous avez commencé une nouvelle aventure ! C'est votre Renaissance <%= number %>, et le plus haut niveau que vous ayez atteint est 100 ou plus. Pour obtenir ce succès une fois de plus, commencez votre prochaine nouvelle aventure lorsque vous aurez atteint la prochaine centaine !", "rebirthBegan": "A commencé une Nouvelle Aventure", "rebirthText": "A débuté <%= rebirths %> Nouvelles Aventures", "rebirthOrb": "A utilisé un Orbe de Renaissance pour recommencer à zéro après avoir atteint le niveau", + "rebirthOrb100": "A utilisé un Orbe de Renaissance pour recommencer à zéro après avoir atteint le niveau 100 ou plus", "rebirthPop": "Commencez un nouveau personnage au Niveau 1 en conservant les succès, les objets de collection et les tâches avec historique.", "rebirthName": "Orbe de Renaissance", "reborn": "Né de nouveau, niveau maximum <%= reLevel %>" diff --git a/common/locales/fr/settings.json b/common/locales/fr/settings.json index 2e6ac38055..2334d81f4d 100644 --- a/common/locales/fr/settings.json +++ b/common/locales/fr/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "Avec cette option cochée, la liste des étiquettes d'une tâche sera cachée à l'ouverture de la tâche pour modification.", "startAdvCollapsed": "Options Avancées des tâches réduites", "startAdvCollapsedPop": "Avec cette option cochée, les Options Avancées seront cachées quand vous modifierez une tâche pour la première fois.", + "dontShowAgain": "Ne pas montrer ceci de nouveau", + "suppressLevelUpModal": "Ne pas montrer de popup lors d'un gain de niveau", + "suppressHatchPetModal": "Ne pas montrer de popup lors de l'éclosion d'un familier", + "suppressRaisePetModal": "Ne pas montrer de popup lors de la transformation d'un familier en monture", + "suppressStreakModal": "Ne pas montrer de popup à l'atteinte d'un combo réussi", "showTour": "Montrer la visite guidée", "restartTour": "Relance la visite guidée d'introduction vue lors de votre première visite sur Habitica.", "showBailey": "Montrer Bailey", @@ -81,7 +86,6 @@ "emailChange1": "Pour modifier votre adresse mail, merci d'envoyer un mail à", "emailChange2": "admin@habitica.com", "emailChange3": "incluant à la fois votre ancienne et votre nouvelle adresse mail et votre ID d'utilisateur·trice", - "username": "Nom d'utilisateur", "usernameOrEmail": "Nom d'utilisateur ou adresse courriel", "email": "Mail", "registeredWithFb": "Inscrit·e avec Facebook", @@ -89,7 +93,7 @@ "loginNameDescription2": "Utilisateur -> Profil", "loginNameDescription3": "pour modifier le nom qui apparaît sur votre avatar et dans les messages.", "emailNotifications": "Notifications par Mail", - "wonChallenge": "Vous avez Remporté un Défi", + "wonChallenge": "Vous avez gagné un Défi !", "newPM": "Message Privé Reçu", "giftedGems": "Gemmes Offertes", "giftedGemsInfo": "<%= amount %> Gemmes - de <%= name %>", @@ -118,5 +122,29 @@ "promoCode": "Code promotionnel", "promoCodeApplied": "Code promotionnel validé ! Vérifiez votre inventaire", "promoPlaceholder": "Entrez le Code promotionnel", - "displayInviteToPartyWhenPartyIs1": "Afficher le bouton Inviter Dans L'équipe lorsque l'équipe a 1 seul membre." + "displayInviteToPartyWhenPartyIs1": "Afficher le bouton Inviter Dans L'équipe lorsque l'équipe a 1 seul membre.", + "saveCustomDayStart": "Enregistrer l'Heure personnalisée de début de journée", + "registration": "S'enregistrer", + "addLocalAuth": "Ajouter authentification locale", + "generateCodes": "Générer Codes", + "generate": "Générer", + "getCodes": "Obtenir les Codes", + "webhooks": "Webhooks", + "enabled": "Activé", + "webhookURL": "URL du webhook", + "add": "Ajouter", + "buyGemsGoldCap": "Limite augmentée à <%= amount %>", + "mysticHourglass": "<%= amount %> Sablier Mystique ", + "mysticHourglassText": "Un Sablier Mystique vous permet d'acheter des Sets d'Objets Mystère d'un mois passé.", + "purchasedPlanId": "<%= price %> $ tous les <%= months %> mois (<%= plan %>)", + "purchasedPlanExtraMonths": "Il vous reste <%= months %> mois de crédit d' abonnement ", + "consecutiveSubscription": "Abonnement consécutif", + "consecutiveMonths": "Mois consécutifs", + "gemCapExtra": "Gemmes disponibles en plus :", + "mysticHourglasses": "Sablier Mystique", + "paypal": "PayPal", + "amazonPayments": "Paiments Amazon", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/fr/subscriber.json b/common/locales/fr/subscriber.json index 3784b7a4a9..de25fd358d 100644 --- a/common/locales/fr/subscriber.json +++ b/common/locales/fr/subscriber.json @@ -60,7 +60,7 @@ "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> et <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitle": "Mystérieux Voyageurs Temporels", "timeTravelersPopoverNoSub": "Vous aurez besoin d'un Sablier Mystique pour invoquer les mystérieux Voyageurs Temporels ! <%= linkStart %>Les Abonnés<%= linkEnd %> reçoivent un Sablier Mystique par tranche de trois mois consécutifs d'abonnement. Revenez lorsque vous aurez un Sablier Mystique, et les Voyageurs Temporels vous fourniront un Familier ou une Monture rare, un Ensemble d'Équipement d'Abonné du passé... ou peut-être même du futur.", - "timeTravelersPopover": "Nous avons vu le Sablier Mystique en votre possession, nous serons donc heureux de traverser le temps depuis le futur, pour vous ! Choisissez le familier, la monture, ou l'Ensemble d'Objets Mystérieux qui vous ferait plaisir. Vous pouvez consulter une liste des set d'équipements passés <%= linkStart %>ici<%= linkEnd %> ! Si ceux-ci ne vous satisfont pas, peut-être seriez-vous intéressé·e par l'un de nos élégamment futuristes Ensembles d'Objets Steampunk ?", + "timeTravelersPopover": "Vous avez un Sablier Mystique! C'est une joie de voyager dans le temps pour vous! Veuillez choisir le familier, la monture ou Set d'Objets Mystère que vous désirez. Vous trouverez une liste d'objets passés ici! Si ceux-ci ne vous satisfont pas, peut-être seriez vous intéressés par l'un de nos convoités Set d'objets Steampunk?", "timeTravelersAlreadyOwned": "Félicitations ! Vous possédez déjà tout ce que les Voyageurs Temporels ont à offrir. Merci de soutenir le site !", "mysticHourglassPopover": "Un Sablier Mystique vous permet d'acheter certains objets dont l'achat est limité dans le temps, comme les ensembles d'objets Mystère des mois précédents et des récompenses passées de Boss mondiaux.", "subUpdateCard": "Mettre à jour la Carte", diff --git a/common/locales/fr/tasks.json b/common/locales/fr/tasks.json index 63b4d37eb2..91b8496387 100644 --- a/common/locales/fr/tasks.json +++ b/common/locales/fr/tasks.json @@ -88,8 +88,7 @@ "fortifyText": "La potion de fortification ramènera toutes vos tâches à un niveau neutre (jaune), comme si vous veniez de les ajouter, et remplira votre barre de santé. C'est utile si vos tâches rouges rendent le jeu trop dur, ou si vos tâches bleues le rendent trop facile. Si cela vous motive de retrouver des bases saines, dépensez vos gemmes et accordez vous un sursis !", "sureDelete": "Êtes-vous sûr de vouloir supprimer cette tâche ?", "streakCoins": "Bonus de combo !", - "pushTaskToTop": "Déplacer la tâche en tête de liste", - "pushTaskToBottom": "Déplacer la tâche en fin de liste", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "Indiquez d'abord le titre de la tâche.", "dailiesRestingInInn": "Vous vous reposez à l'Auberge ! Vos Quotidiennes ne vous infligeront AUCUN dégâts cette nuit, mais SERONT réinitialisées chaque jour. Si vous participez à une quête, vous n'infligerez aucun dégât / ne récolterez aucun item jusqu'à ce que vous quittiez l'Auberge, mais vous pouvez quand même être blessé par un boss si un de vos équipiers oublie une de ses Quotidiennes.", "habitHelp1": "Les Bonnes Habitudes sont les choses que vous faites souvent. Elles octroient de l'Or et de l'Expérience à chaque fois que vous cliquez sur le <%= plusIcon %>.", diff --git a/common/locales/he/backgrounds.json b/common/locales/he/backgrounds.json index f83de35606..a2125f8ddc 100644 --- a/common/locales/he/backgrounds.json +++ b/common/locales/he/backgrounds.json @@ -105,18 +105,32 @@ "backgroundSunsetSavannahNotes": "עקוב אחר השקיעה בסוואנה.", "backgroundTwinklyPartyLightsText": "אורות מסיבה מהבהבים", "backgroundTwinklyPartyLightsNotes": "רקוד לאורות מסיבה מהבהבים", - "backgrounds092015": "SET 16: Released September 2015", - "backgroundMarketText": "Habitica Market", - "backgroundMarketNotes": "Shop in the Habitica Market.", - "backgroundStableText": "Habitica Stable", - "backgroundStableNotes": "Tend mounts in the Habitica Stable.", - "backgroundTavernText": "Habitica Tavern", - "backgroundTavernNotes": "Visit the Habitica Tavern.", - "backgrounds102015": "SET 17: Released October 2015", - "backgroundHarvestMoonText": "Harvest Moon", + "backgrounds092015": "סט 16: פורסם בספטמבר 2015", + "backgroundMarketText": "שוק הביטיקה", + "backgroundMarketNotes": "קנה בשוק של הביטיקה.", + "backgroundStableText": "אורוות הביטיקה", + "backgroundStableNotes": "טפל בחיות רכיבה באורוות הביטיקה.", + "backgroundTavernText": "פונדק הביטיקה", + "backgroundTavernNotes": "בקר בפונדק של הביטיקה.", + "backgrounds102015": "סט 17: פורסם באוקטובר 2015", + "backgroundHarvestMoonText": "ירח קציר", "backgroundHarvestMoonNotes": "Cackle under the Harvest Moon.", "backgroundSlimySwampText": "Slimy Swamp", "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness.", + "backgrounds112015": "SET 18: Released November 2015", + "backgroundFloatingIslandsText": "Floating Islands", + "backgroundFloatingIslandsNotes": "Hop across the Floating Islands.", + "backgroundNightDunesText": "Night Dunes", + "backgroundNightDunesNotes": "Walk peacefully through the Night Dunes.", + "backgroundSunsetOasisText": "Sunset Oasis", + "backgroundSunsetOasisNotes": "Bask in the Sunset Oasis.", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/he/challenge.json b/common/locales/he/challenge.json index 98ef382559..93468e8d49 100644 --- a/common/locales/he/challenge.json +++ b/common/locales/he/challenge.json @@ -59,5 +59,9 @@ "challengeNotEnoughGems": "אין ברשותך מספיק אבני חן כדי לפרסם אתגר זה.", "noPermissionEditChallenge": "You don't have permissions to edit this challenge", "noPermissionDeleteChallenge": "You don't have permissions to delete this challenge", - "noPermissionCloseChallenge": "You don't have permissions to close this challenge" + "noPermissionCloseChallenge": "You don't have permissions to close this challenge", + "congratulations": "Congratulations!", + "hurray": "Hurray!", + "noChallengeOwner": "no owner", + "noChallengeOwnerPopover": "This challenge does not have an owner because the person who created the challenge deleted their account." } \ No newline at end of file diff --git a/common/locales/he/character.json b/common/locales/he/character.json index 9f068fc9ae..c368dc19e2 100644 --- a/common/locales/he/character.json +++ b/common/locales/he/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "תוסף מקצוע", "battleGear": "ציוד לחימה", "battleGearText": "זהו הציוד שאתה נושא עמך אל הקרב! הציוד משפיע על ערכי התכונות שלך כשאתה מבצע משימות.", + "autoEquipBattleGear": "Auto-equip new gear", "costume": "תחפושת", "costumeText": "אם אתה מעדיף להיראות אחרת מהדרך בה ציידת את דמותך, סמן את האפשרות \"השתמש בתחפושת\" כדי לעטות תחפושת מגניבה ומטריפת חושים, בעוד שהציוד האמיתי שלך יישאר חבוי מתחתיה.", "useCostume": "שימוש בתחפושת", @@ -64,6 +65,10 @@ "ultimGearText": "שדרג את נשקיו ושריונו לדרגה הגבוהה ביותר במקצועות הבאים:", "level": "דרגה", "levelUp": "עלית דרגה!", + "gainedLevel": "You gained a level!", + "leveledUp": "By accomplishing your real-life goals, you've grown to Level <%= level %>!", + "fullyHealed": "You have been fully healed!", + "huzzah": "Huzzah!", "mana": "מאנה", "hp": "נק\"פ", "mp": "נק\"מ", @@ -155,4 +160,4 @@ "con": "חוסן", "per": "תפיסה", "int": "תבונה" -} +} \ No newline at end of file diff --git a/common/locales/he/content.json b/common/locales/he/content.json index 6966372d44..e2382b5c7c 100644 --- a/common/locales/he/content.json +++ b/common/locales/he/content.json @@ -95,6 +95,12 @@ "questEggHorseText": "Horse", "questEggHorseMountText": "Horse", "questEggHorseAdjective": "a galloping", + "questEggFrogText": "Frog", + "questEggFrogMountText": "Frog", + "questEggFrogAdjective": "a princely", + "questEggSnakeText": "Snake", + "questEggSnakeMountText": "Snake", + "questEggSnakeAdjective": "a slithering", "eggNotes": "Find a hatching potion to pour on this egg, and it will hatch into <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "רגיל", "hatchingPotionWhite": "לבן", diff --git a/common/locales/he/faq.json b/common/locales/he/faq.json index c2a7b7deaf..e6360dc838 100644 --- a/common/locales/he/faq.json +++ b/common/locales/he/faq.json @@ -1,22 +1,22 @@ { - "frequentlyAskedQuestions": "Frequently Asked Questions", + "frequentlyAskedQuestions": "שאלות נפוצות", "faqQuestion0": "I'm confused. Where do I get an overview?", "iosFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn experience and gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as Pets, Skills, and Quests! You can customize your character under Menu > Customize Avatar.\n\n Some basic ways to interact: click the (+) in the upper-right-hand corner to add a new task. Tap on an existing task to edit it, and swipe left on a task to delete it. You can sort tasks using Tags in the upper-left-hand corner, and expand and contract checklists by clicking on the checklist bubble.", - "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, the wiki has an excellent step-by-step overview of the game [right here](http://habitica.wikia.com/wiki/Habitica_Wiki).", - "faqQuestion1": "How do I set up my tasks?", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", + "faqQuestion1": "כיצד אני מארגן את המשימות שלי?", "iosFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.", "webFaqAnswer1": "Good Habits (the ones with a ) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a ) are tasks that you should avoid, like biting nails. Habits with a and a have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n

\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n

\n To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.", - "faqQuestion2": "What are some sample tasks?", + "faqQuestion2": "מהן מספר משימות לדוגמה?", "iosFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n

\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", "webFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", - "faqQuestion3": "Why do my tasks change color?", + "faqQuestion3": "מדוע המשימות שלי מחליפות צבעים?", "iosFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it's a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", "webFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it’s a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", "faqQuestion4": "Why did my avatar lose health, and how do I regain it?", "iosFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you tap a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your Party and one of your Party mates did not complete all their Dailies, the Boss will attack you.\n\n The main way to heal is to gain a level, which restores all your health. You can also buy a Health Potion with gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a Party with a Healer, they can heal you as well.", "webFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you click a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your party and one of your party mates did not complete all their Dailies, the Boss will attack you.\n

\n The main way to heal is to gain a level, which restores all your Health. You can also buy a Health Potion with Gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a party (under Social > Party) with a Healer, they can heal you as well.", "faqQuestion5": "How do I play Habitica with my friends?", - "iosFaqAnswer5": "The best way is to invite them to a Party with you, via the [website](https://habitica.com/#/options/groups/party)! We'll add the ability to create a Party from this app soon, but in the meantime you can use the [website](https://habitica.com/#/options/groups/party). Parties can go on quests, battle monsters, and cast skills to support each other. On the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", + "iosFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on quests, battle monsters, and cast skills to support each other. Go to Menu > Party and click \"Create New Party\" if you don't already have a Party. Then tap on the Members list, and tap Invite in the upper right-hand corner to invite your friends by entering their User ID (a string of numbers and letters that they can find under Settings > Account Details on the app, and Settings > API on the website). On the website, you can also invite friends via email, which we will add to the app in a future update.\n\nOn the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", "webFaqAnswer5": "The best way is to invite them to a party with you, under Social > Party! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n

\n For more detailed info, check out the wiki pages on [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).", "faqQuestion6": "How do I get a Pet or Mount?", "iosFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch Egg.\" Then choose a hatching potion to determine its color! Go to Menu > Pets to equip your new Pet to your avatar by clicking on it. \n\n You can also grow your Pets into Mounts by feeding them under Menu > Pets. Tap on a Pet, and then select \"Feed Pet\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Menu > Mounts and tap on it to equip it to your avatar.\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", @@ -28,14 +28,17 @@ "iosFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Use Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in a special section in the Rewards Column. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You’ll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "faqQuestion9": "How do I fight monsters and go on Quests?", - "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party on the [website](https://habitica.com/#/options/groups/party), you'll be rewarded with the Basi-List Scroll! (We will add this feature to the app in a future update.)\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for gold and gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", + "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for Gold and Gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "webFaqAnswer9": "First, you need to join or start a party (under Social > Party). Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n

\n Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are three ways to get a scroll:\n

\n * When you invite people to your party, you’ll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Page (Inventory > Quests) for Gold and Gems.\n

\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your party at the same time that you damage the Boss.\n

\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "faqQuestion10": "What are gems, and how do I get them?", + "faqQuestion10": "What are Gems, and how do I get them?", "iosFaqAnswer10": "Gems are purchased with real money by tapping on the gem icon in the header. When people buy gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying gems directly, there are three other ways players can gain gems:\n\n * Win a Challenge on the [website](https://habitica.com) that has been set up by another player under Social > Challenges. (We will be adding Challenges to the app in a future update!)\n * Subscribe on the [website](https://habitica.com/#/options/settings/subscription) and unlock the ability to buy a certain number of gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with gems do not offer any statistical advantages, so players can still make use of the app without them!", "webFaqAnswer10": "Gems are [purchased with real money](https://habitica.com/#/options/settings/subscription), although [subscribers](https://habitica.com/#/options/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n

\n In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n

\n * Win a Challenge that has been set up by another player under Social > Challenges.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", "faqQuestion11": "How do I report a bug or request a feature?", "iosFaqAnswer11": "You can report a bug, request a feature, or send feedback under Menu > Report a Bug and Menu > Send Feedback! We'll do everything we can to assist you.", "webFaqAnswer11": "Bug reports are collected on GitHub. Go to [Help > Report a Bug](https://github.com/HabitRPG/habitrpg/issues/2760) and follow the instructions. Don't worry, we'll get you fixed up soon!\n

\n Feature requests are collected on Trello. Go to [Help > Request a Feature](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) and follow the instructions. Ta-da!", + "faqQuestion12": "How do I battle a World Boss?", + "iosFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", + "webFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n

\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n

\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n

\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", "iosFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the Tavern chat under Menu > Tavern! We're happy to help.", "webFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the [Newbies Guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help." } \ No newline at end of file diff --git a/common/locales/he/front.json b/common/locales/he/front.json index bde2e6ee41..210210e7e0 100644 --- a/common/locales/he/front.json +++ b/common/locales/he/front.json @@ -74,7 +74,7 @@ "infhQuote": "[הביטיקה] ממש עזרה לי להשליט ארגון בחיי במהלך תואר שני.", "invalidEmail": "כתובת דואר אלקטרוני תקפה הינה הכרחית על מנת לבצע איפוס סיסמא.", "irishfeet123Quote": "היו לי הרגלים ממש גרועים בנוגע להשארת כלים על השולחן ופיזור כוסות בכל הבית. [הביטיקה] ריפאה זאת!", - "joinOthers": "הצטרפו ל250,000 האנשים שנהנים להגשים את המטרות שלהם!", + "joinOthers": "Join <%= userCount %> people making it fun to achieve goals!", "kazuiQuote": "לפני [הביטיקה], הייתי תקוע עם התזה שלי, וגם מאוכזב מהמשמעת העצמית שלי בנוגע לעבודות הבית ודברים כמו לימוד אוצר מילים ותיאוריה מאחורי Go. מסתבר ששבירת המטרות האלו למשימות שניתנות לניהול וצ׳ק-ליסטים זה ה-דבר כדי להשאיר אותי לעבוד באופן קבוע עם מוטיבציה.", "landingadminlink": "החבילות הניהוליות שלנו,", "landingend": "עדיין לא השתכנעת?", @@ -179,5 +179,14 @@ "businessInquiries": "שאלות ובירורים עסקיים", "merchandiseInquiries": "שאלות ובירורים בנוגע לרכישות", "marketingInquiries": "בירורים בנוגע לשיווק ומדיה חברתית", - "tweet": "Tweet" + "tweet": "Tweet", + "apps": "Apps", + "notifyAndroidApp": "Want us to notify you when the Android app is ready? Sign up for this mailing list!", + "checkOutIOSApp": "Check out our new iOS App!", + "imagine1": "Imagine if improving your life were as fun as playing a game.", + "landingCopy1": "Advance in the game by completing your real-life tasks.", + "landingCopy2": "Battle monsters with friends to stay accountable to your goals.", + "landingCopy3": "Join over <%= userCount %> people having fun as they improve their lives.", + "alreadyHaveAccount": "I already have an account!", + "getStartedNow": "Get Started Now!" } \ No newline at end of file diff --git a/common/locales/he/gear.json b/common/locales/he/gear.json index f3c469cc32..3af1326666 100644 --- a/common/locales/he/gear.json +++ b/common/locales/he/gear.json @@ -149,13 +149,19 @@ "weaponArmoireRancherLassoText": "Rancher Lasso", "weaponArmoireRancherLassoNotes": "Lassos: the ideal tool for rounding up and wrangling. Increases Strength by <%= str %>, Perception by <%= per %>, and Intelligence by <%= int %>. Enchanted Armoire: Rancher Set (Item 3 of 3).", "weaponArmoireMythmakerSwordText": "Mythmaker Sword", - "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3)", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Iron Crook", - "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3)", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Gold Wing Staff", "weaponArmoireGoldWingStaffNotes": "The wings on this staff constantly flutter and twist. Increases all attributes by <%= attrs %> each. Enchanted Armoire: Independent Item.", "weaponArmoireBatWandText": "Bat Wand", "weaponArmoireBatWandNotes": "This wand can turn any task into a bat! Wave it about and watch them fly away. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireShepherdsCrookText": "Shepherd's Crook", + "weaponArmoireShepherdsCrookNotes": "Useful for herding gryphons. Increases Constitution by <%= con %>. Enchanted Armoire: Shepherd Set (Item 1 of 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "שריון", "armorBase0Text": "בגדים פשוטים", "armorBase0Notes": "אלה סתם בגדים, הם לא נותנים בונוס.", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "גלימת מסיבות מגוכחת", "armorSpecialBirthday2015Notes": "Happy Birthday, Habitica! Wear these Silly Party Robes to celebrate this wonderful day. Confers no benefit.", "armorSpecialGaymerxText": "שריון לוחמי הקשת", - "armorSpecialGaymerxNotes": "In celebration of pride season and GaymerX, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGBTQ and gaming and is open to everyone. It takes place at the InterContinental in downtown San Francisco on July 11-13! Confers no benefit.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "חליפת חתלתול חלקלק", "armorSpecialSpringRogueNotes": "מטופח ללא רבב. מגביר את התפיסה ב<%= per %>. מהדורה מוגבלת, ציוד אביב 2014.", "armorSpecialSpringWarriorText": "שריון פלדת-תלתן", @@ -307,6 +313,8 @@ "armorMystery201508Notes": "Run fast as a flash in the fluffy Cheetah Costume! Confers no benefit. August 2015 Subscriber Item.", "armorMystery201509Text": "Werewolf Costume", "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Steampunk Suit", "armorMystery301404Notes": "Dapper and dashing, wot! Confers no benefit. February 3015 Subscriber Item.", "armorArmoireLunarArmorText": "Soothing Lunar Armor", @@ -321,6 +329,12 @@ "armorArmoireHornedIronArmorNotes": "Fiercely hammered from iron, this horned armor is nearly impossible to break. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Horned Iron Set (Item 2 of 3).", "armorArmoirePlagueDoctorOvercoatText": "Plague Doctor Overcoat", "armorArmoirePlagueDoctorOvercoatNotes": "An authentic overcoat worn by the doctors who battle the Plague of Procrastination! Increases Intelligence by <%= int %>, Strength by <%= str %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 3 of 3).", + "armorArmoireShepherdRobesText": "Shepherd Robes", + "armorArmoireShepherdRobesNotes": "The fabric is cool and breathable, perfect for a hot day herding gryphons in the desert. Increases Strength and Perception by <%= attrs %> each. Enchanted Armoire: Shepherd Set (Item 2 of 3).", + "armorArmoireRoyalRobesText": "Royal Robes", + "armorArmoireRoyalRobesNotes": "Wonderful ruler, rule all day long! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 3 of 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "headgear", "headBase0Text": "ללא קסדה", "headBase0Notes": "בלי שום כיסוי ראש בכלל.", @@ -441,7 +455,7 @@ "headSpecialFall2015HealerText": "Hat of Frog", "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", "headSpecialGaymerxText": "קסדת לוחמי הקשת", - "headSpecialGaymerxNotes": "In celebration of pride season and GaymerX, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGBTQ and gaming and is open to everyone. It takes place at the InterContinental in downtown San Francisco on July 11-13! Confers no benefit.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "קסדה מכונפת", "headMystery201402Notes": "This winged circlet imbues the wearer with the speed of the wind! Confers no benefit. February 2014 Subscriber Item.", "headMystery201405Text": "להבת המוח", @@ -464,6 +478,8 @@ "headMystery201508Notes": "This cozy cheetah hat is very fuzzy! Confers no benefit. August 2015 Subscriber Item.", "headMystery201509Text": "Werewolf Mask", "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 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", @@ -481,7 +497,7 @@ "headArmoireBlueHairbowText": "Blue Hairbow", "headArmoireBlueHairbowNotes": "Become perceptive, tough, and smart while wearing this beautiful Blue Hairbow! Increases Perception by <%= per %>, Constitution by <%= con %>, and Intelligence by <%= int %>. Enchanted Armoire: Independent Item.", "headArmoireRoyalCrownText": "Royal Crown", - "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Royal Set (Item 1 of 3).", "headArmoireGoldenLaurelsText": "Golden Laurels", "headArmoireGoldenLaurelsNotes": "These golden laurels reward those who have conquered bad habits. Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 2 of 3).", "headArmoireHornedIronHelmText": "Horned Iron Helm", @@ -496,6 +512,12 @@ "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", "headArmoireOrangeCatText": "Orange Cat Hat", "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireBlueFloppyHatText": "Blue Floppy Hat", + "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireShepherdHeaddressText": "Shepherd Headdress", + "headArmoireShepherdHeaddressNotes": "Sometimes the gryphons that you herd like to chew on this headdress, but it makes you seem more intelligent nonetheless. Increases Intelligence by <%= int %>. Enchanted Armoire: Shepherd Set (Item 3 of 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "shield-hand item", "shieldBase0Text": "No Shield-Hand Equipment", "shieldBase0Notes": "לא הצטיידת באף מגן או נשק ליד החדשה.", @@ -579,6 +601,8 @@ "shieldArmoireGladiatorShieldNotes": "To be a gladiator you must.... eh, whatever, just bash them with your shield. Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Gladiator Set (Item 3 of 3).", "shieldArmoireMidnightShieldText": "Midnight Shield", "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "shieldArmoireRoyalCaneText": "Royal Cane", + "shieldArmoireRoyalCaneNotes": "Hooray for the ruler, worthy of song! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 2 of 3).", "back": "Back Accessory", "backBase0Text": "אביזר ללא גב", "backBase0Notes": "אביזר ללא גב.", @@ -592,6 +616,8 @@ "backMystery201504Notes": "Buzz buzz buzz! Flit from task to task. Confers no benefit. April 2015 Subscriber Item.", "backMystery201507Text": "Rad Surfboard", "backMystery201507Notes": "Surf off the Diligent Docks and ride the waves in Inkomplete Bay! Confers no benefit. July 2015 Subscriber Item.", + "backMystery201510Text": "Goblin Tail", + "backMystery201510Notes": "Prehensile and powerful! Confers no benefit. October 2015 Subscriber Item.", "backSpecialWonderconRedText": "שכמייה אימתנית", "backSpecialWonderconRedNotes": "Swishes with strength and beauty. Confers no benefit. Special Edition Convention Item.", "backSpecialWonderconBlackText": "שכמייה חמקנית", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "These powerful antlers change colors with the leaves. Confers no benefit. September 2014 Subscriber Item.", "headAccessoryMystery201502Text": "Wings of Thought", "headAccessoryMystery201502Notes": "Let your imagination take flight! Confers no benefit. February 2015 Subscriber Item.", + "headAccessoryMystery201510Text": "Goblin Horns", + "headAccessoryMystery201510Notes": "These fearsome horns are slightly slimy. Confers no benefit. October 2015 Subscriber Item.", "headAccessoryMystery301405Text": "Headwear Goggles", "headAccessoryMystery301405Notes": "\"Goggles are for your eyes,\" they said. \"Nobody wants goggles that you can only wear on your head,\" they said. Hah! You sure showed them! Confers no benefit. August 3015 Subscriber Item.", "eyewear": "Eyewear", diff --git a/common/locales/he/generic.json b/common/locales/he/generic.json index 638f94c9fc..24c2e71f6a 100644 --- a/common/locales/he/generic.json +++ b/common/locales/he/generic.json @@ -28,7 +28,7 @@ "market": "שוק", "subscriberItem": "חפץ מסתורי", "newSubscriberItem": "חפץ מסתורי חדש", - "subscriberItemText": "בכל חודש, התורמים שלנו יקבלו חפץ מסתורי. הוא בדרך כלל משוחרר כשבוע לפני סוף החודש, ניתן לראות תאריך ספציפי בעמוד הוויקי של חפצי המסתורין.", + "subscriberItemText": "Each month, subscribers will receive a mystery item. This is usually released about one week before the end of the month. See the wiki's 'Mystery Item' page for more information.", "all": "הכל", "none": "כלום", "or": "או", @@ -69,8 +69,9 @@ "habiticaDayPluralText": "חגג <%= number %> ימים לציון קריאת Habitica בשמה! תודה על היותך שחקן נהדר! ", "achievementDilatory": "המושיע/ה של עצלניה", "achievementDilatoryText": "סייע/ה להביס את הדרעקון האיום של עצלניה באירוע \"שפריץ הקיץ\" של 2014!", - "costumeContest": "תחרות התחפושות 2014", - "costumeContestText": "השתתפ/ה בתחרות התחפושות של ליל כל הקדושים בשנת 2014. אפשר לראות חלק מהתחפושות בבלוג שלנו:\nblog.habitica.com/tagged/cosplay", + "costumeContest": "Costume Contestant", + "costumeContestText": "Participated in the Habitoween Costume Contest. See some of the entries on the Habitica blog!", + "costumeContestTextPlural": "Participated in <%= number %> Habitoween Costume Contests. See some of the entries on the Habitica blog!", "memberSince": "- חבר/ה מאז", "lastLoggedIn": "- התחבר/ה לאחרונה", "notPorted": "התכונה הזו עוד לא יובאה מהאתר המקורי", @@ -79,6 +80,7 @@ "errorUpCase": "שגיאה:", "newPassSent": "סיסמא חדשה נשלחה", "serverUnreach": "השרת אינו זמין כרגע.", + "requestError": "Yikes, an error occurred! Please reload the page, your last action may not have been saved correctly.", "seeConsole": "אם התקלה נמשכת, בבקשה דווח על כך בעזרה > דווח על באג. אם אתה יודע להשתמש בקונסלת הדפדפן שלך, בבקשה הוסף כל הודעות שגיאה.", "error": "שגיאה", "menu": "תפריט", @@ -133,5 +135,17 @@ "thankyou2": "Sending you a thousand thanks.", "thankyou3": "I'm very grateful - thank you!", "thankyouCardAchievementTitle": "Greatly Grateful", - "thankyouCardAchievementText": "Thanks for being thankful! Sent or received <%= cards %> Thank-You cards." + "thankyouCardAchievementText": "Thanks for being thankful! Sent or received <%= cards %> Thank-You cards.", + "streakAchievement": "You earned a streak achievement!", + "firstStreakAchievement": "21-Day Streak", + "streakAchievementCount": "<%= streaks %> 21-Day Streaks", + "twentyOneDays": "You've completed your Daily for 21 days in a row!", + "dontBreakStreak": "Amazing job. Don't break the streak!", + "dontStop": "Don't Stop Now!", + "levelUpShare": "I leveled up in Habitica by improving my real-life habits!", + "questUnlockShare": "I unlocked a new quest in Habitica!", + "hatchPetShare": "I hatched a new pet by completing my real-life tasks!", + "raisePetShare": "I raised a pet into a mount by completing my real-life tasks!", + "wonChallengeShare": "I won a challenge in Habitica!", + "achievementShare": "I earned a new achievement in Habitica!" } \ No newline at end of file diff --git a/common/locales/he/groups.json b/common/locales/he/groups.json index 9cc608b19d..54dfbf0f6c 100644 --- a/common/locales/he/groups.json +++ b/common/locales/he/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "צא מהפונדק", "innCheckIn": "תנוח בפונדק", "innText": "You're resting in the Inn! While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day. Be warned: If you are participating in a Boss Quest, the Boss will still damage you for your party mates' missed Dailies unless they are also in the Inn! Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn.", + "innTextBroken": "You're resting in the Inn, I guess... While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day... If you are participating in a Boss Quest, the Boss will still damage you for your party mates' missed Dailies... unless they are also in the Inn... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn... so tired...", "lfgPosts": "מודעות מחפשי קבוצה", "tutorial": "שיעור היכרות", "glossary": "מונחון", @@ -145,5 +146,6 @@ "partyEmpty": "You're the only one in your party. Invite your friends!", "partyChatEmpty": "Your party chat is empty! Type a message in the box above to start chatting.", "guildChatEmpty": "This guild's chat is empty! Type a message in the box above to start chatting.", - "possessiveParty": "<%= name %>'s Party" + "possessiveParty": "<%= name %>'s Party", + "requestAcceptGuidelines": "If you would like to post messages in the Tavern or any party or guild chat, please first read our <%= linkStart %>Community Guidelines<%= linkEnd %> and then click the button below to indicate that you accept them." } \ No newline at end of file diff --git a/common/locales/he/limited.json b/common/locales/he/limited.json index 67c8753a85..acd6749870 100644 --- a/common/locales/he/limited.json +++ b/common/locales/he/limited.json @@ -21,6 +21,7 @@ "valentineCardAchievementText": "Aww, you and your friend must really care about each other! Sent or received <%= cards %> Valentine's Day cards.", "polarBear": "דוב קוטב", "turkey": "תרנגול הודו", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "דובון קוטב", "jackolantern": "ג'ק-או-לנטרן", "seasonalShop": "חנות עונתית", @@ -30,6 +31,7 @@ "seasonalShopText": "Welcome to the Seasonal Shop!! We're stocking springtime Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Spring Fling event each year, but we're only open until April 30th, so be sure to stock up now, or you'll have to wait a year to buy these items again!", "seasonalShopSummerText": "Welcome to the Seasonal Shop!! We're stocking summertime Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Summer Splash event each year, but we're only open until July 31st, so be sure to stock up now, or you'll have to wait a year to buy these items again!", "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31, so be sure to stock up now, or you'll have to wait a year to buy these items again!", + "seasonalShopFallTextBroken": "Oh.... Welcome to the Seasonal Shop... We're stocking autumn Seasonal Edition goodies, or something... Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31... I guess you should to stock up now, or you'll have to wait... and wait... and wait... *sigh*", "seasonalShopRebirth": "If you've used the Orb of Rebirth, you can repurchase this equipment in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.", "candycaneSet": "סוכרייה על מקל הליכה (מכשף)", "skiSet": "מתנקש-סקי (נוכל)", diff --git a/common/locales/he/messages.json b/common/locales/he/messages.json index 7028893bc4..16fb793361 100644 --- a/common/locales/he/messages.json +++ b/common/locales/he/messages.json @@ -30,5 +30,26 @@ "messageAlreadyOwnGear": "You already own this item. Equip it by going to the equipment page.", "armoireEquipment": "<%= image %> You found a piece of rare Equipment in the Armoire: <%= dropText %>! Awesome!", "armoireFood": "<%= image %> You rummage in the Armoire and find <%= dropArticle %><%= dropText %>. What's that doing in here?", - "armoireExp": "You wrestle with the Armoire and gain Experience. Take that!" + "armoireExp": "You wrestle with the Armoire and gain Experience. Take that!", + "messageInsufficientGems": "Not enough gems!", + "messageAuthPasswordMustMatch": ":password and :confirmPassword don't match", + "messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword required", + "messageAuthUsernameTaken": "Username already taken", + "messageAuthEmailTaken": "Email already taken", + "messageAuthNoUserFound": "No user found.", + "messageAuthMustBeLoggedIn": "You must be logged in.", + "messageAuthMustIncludeTokens": "You must include a token and uid (user id) in your request", + "messageGroupNotFound": "Group not found or you don't have access.", + "messageGroupAlreadyInParty": "Already in a party, try refreshing.", + "messageGroupOnlyLeaderCanUpdate": "Only the group leader can update the group!", + "messageGroupRequiresInvite": "Can't join a group you're not invited to.", + "messageGroupCannotRemoveSelf": "You cannot remove yourself!", + "messageGroupChatBlankMessage": "You cannot send a blank message", + "messageGroupChatLikeOwnMessage": "Can't like your own message. Don't be that person.", + "messageGroupChatFlagOwnMessage": "Can't report your own message.", + "messageGroupChatFlagAlreadyReported": "You have already reported this message", + "messageGroupChatNotFound": "Message not found!", + "messageGroupChatAdminClearFlagCount": "Only an admin can clear the flag count!", + "messageUserOperationProtected": "path `<%= operation %>` was not saved, as it's a protected path.", + "messageUserOperationNotFound": "<%= operation %> operation not found" } \ No newline at end of file diff --git a/common/locales/he/noscript.json b/common/locales/he/noscript.json new file mode 100644 index 0000000000..6057268ef2 --- /dev/null +++ b/common/locales/he/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Alas! Your browser doesn't have JavaScript enabled", + "jsDisabledHeadingFull": "Alas! Your browser doesn't have JavaScript enabled and without it, Habitica can't work properly", + "jsDisabledText": "Habitica can't properly display the site without it!", + "jsDisabledLink": "Please enable JavaScript to continue!" +} \ No newline at end of file diff --git a/common/locales/he/npc.json b/common/locales/he/npc.json index efc0ae4578..ad136d03a5 100644 --- a/common/locales/he/npc.json +++ b/common/locales/he/npc.json @@ -7,15 +7,19 @@ "daniel": "דניאל", "danielText": "Welcome to the Tavern! Stay a while and meet the locals. If you need to rest (vacation? illness?), I'll set you up at the Inn. While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off.", "danielText2": "Be warned: 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.", + "danielTextBroken": "Welcome to the Tavern... I guess... If you need to rest, I'll set you up at the Inn... While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off... if you have the energy...", + "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": "אלכסנדר הסוחר.", "welcomeMarket": "ברוכים הבאים לשוק! רכשו ביצים ושיקויים נדירים! מכרו את העודפים שלכם! היעזרו בשירותיי המעולים! בואו וראו מה יש לי עבורכם.", - "sellForGold": "מכר/י <%= item %> עבור <%= gold %> מטבעות זהב", - "sellEggForGold": "Sell <%= itemType %> Egg for <%= gold %> Gold", - "sellPotionForGold": "Sell <%= itemType %> Potion for <%= gold %> Gold", + "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?", + "sellForGold": "Sell it for <%= gold %> Gold", "buyGems": "קנה אבני חן", "justin": "ג'סטין", "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!", + "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...", "USD": "דולר אמריקאי", "newStuff": "דברים חדשים", "cool": "ספר לי מאוחר יותר", diff --git a/common/locales/he/pets.json b/common/locales/he/pets.json index a0f39f91c0..01c0796c6f 100644 --- a/common/locales/he/pets.json +++ b/common/locales/he/pets.json @@ -58,8 +58,16 @@ "firstDrop": "הרווחת את מערכת הביזה! מעתה, בכל פעם שתשלימ/י משימה, יהיה לך סיכוי קטן למצוא חפץ בעל ערך כולל ביצים, שיקויים ואוכל. הרגע מצאת <%= eggText %> ביצה! <%= eggNotes %>", "useGems": "אם חיית מחמד מסוימת תפסה את עיניך, אבל אינך יכול לחכות יותר לבזוז אותה, השתמש/י ביהלומים במלאי ציוד > שוק כדי לקנות אותה!", "hatchAPot": "להבקיע <%= egg %> <%= potion %>?", + "hatchedPet": "You hatched a <%= potion %> <%= egg %>!", + "displayNow": "Display Now", + "displayLater": "Display Later", + "earnedCompanion": "With all your productivity, you've earned a new companion. Feed it to make it grow!", "feedPet": "להאכיל את ה<%= name %> שלך ב <%= text %>?", "useSaddle": "לשים אוכף על ה<%= pet %> שלך?", + "raisedPet": "You grew a <%= pet %>!", + "earnedSteed": "By completing your tasks, you've earned a faithful steed!", + "rideNow": "Ride Now", + "rideLater": "Ride Later", "petName": "<%= egg %> <%= potion %>", "mountName": "<%= mount %> <%= potion %>", "petKeyName": "מפתח למכלאות", diff --git a/common/locales/he/quests.json b/common/locales/he/quests.json index 884d2af79a..4b41b17af9 100644 --- a/common/locales/he/quests.json +++ b/common/locales/he/quests.json @@ -13,6 +13,7 @@ "youReceived": "קיבלת", "dropQuestCongrats": "Congratulations on earning this quest scroll! You can invite your party to begin the quest now, or come back to it any time in your Inventory > Quests.", "questSend": "Clicking \"Invite\" will send an invitation to your party members. When all members have accepted or denied, the quest begins. See status under Social > Party.", + "questSendBroken": "Clicking \"Invite\" will send an invitation to your party members... When all members have accepted or denied, the quest begins... See status under Social > Party...", "inviteParty": "Invite Party to Quest", "questInvitation": "הזמנה למשימה:", "questInvitationTitle": "Quest Invitation", @@ -24,6 +25,7 @@ "rejected": "דחתה/דחה", "pending": "ממתין לתשובה", "questStart": "ברגע שכל החברים הסכימו או דחו, המשימה מתחילה. רק אלו שלחצו \"הסכם\" יוכלו להשתתף במשימה ולקבל את הפרסים. אם חברייך משתהים יתר על המידה (לא פעילים?), ניתן להתחיל בלעדיהם על ידי לחיצה על \"התחל\". יוזם/ת המשימה יכול/ה גם לבטל אותה ולקחת את המגילה בחזרה ע\"י לחיצה על \"ביטול\".", + "questStartBroken": "Once all members have either accepted or rejected, the quest begins... Only those that clicked \"accept\" will be able to participate in the quest and receive the drops... If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\"... The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\"...", "begin": "התחל", "bossHP": "בריאות האויב", "bossStrength": "עוצמת האויב", @@ -34,9 +36,14 @@ "itemsToCollect": "Items to Collect", "bossDmg1": "Each completed Daily and To-Do and each positive Habit hurts the boss. Hurt it more with redder tasks or Brutal Smash and Burst of Flames. The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies! All damage to and from a boss is tallied on cron (your day roll-over).", "bossDmg2": "רק משתתפים שנלחמים בבוס חולקים בביזת המשימה.", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "Each completed Daily and To-Do and each positive Habit hurts the boss... Hurt it more with redder tasks or Brutal Smash and Burst of Flames... The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies... All damage to and from a boss is tallied on cron (your day roll-over)...", + "bossDmg2Broken": "Only participants will fight the boss and share in the quest loot...", + "tavernBossInfo": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "tavernBossInfoBroken": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss... Incomplete Dailies fill the Exhaust Strike Bar... When the Exhaust Strike bar is full, the World Boss will attack an NPC... A World Boss will never damage individual players or accounts in any way... Only active accounts not resting in the Inn will have their tasks tallied...", "bossColl1": "כדי לאסוף חפצים, בצע/י מטלות חיוביות. חפצי קווסט נופלים ממש כמו חפצים רגילים, אם כי, את/ה לא תראה/י אותם עד היום הבא, בו כל מה שמצאה החבורה ייאסף לערימת המשימה.", "bossColl2": "רק משתתפים במשימה יכולים לאסוף חפצים ולהתחלק בשלל המשימה.", + "bossColl1Broken": "To collect items, do your positive tasks... Quest items drop just like normal items; however, you won't see the drops until the next day, then everything you've found will be tallied up and contributed to the pile...", + "bossColl2Broken": "Only participants can collect items and share in the quest loot...", "abort": "בטל", "leaveQuest": "Leave Quest", "sureLeave": "Are you sure you want to leave the active quest? All your quest progress will be lost.", @@ -63,10 +70,13 @@ "sureAbort": "האם את/ה בטוח/ה שברצונך לבטל את המשימה הזו? היא תבוטל עבור כל החבורה שלך, וההתקדמות שלכם תאבד. המגילה תוחזר לבעל/ת המשימה..", "doubleSureAbort": "האם את/ה באמת באמת בטוח/ה? כל החבורה שלך עלולה לשנוא אותך לנצח!", "questWarning": "אם שחקנים חדשים מצטרפים לחבורה לפני תחילת המשימה, גם הם יקבלו הזמנה. לעומת זאת, ברגע שהמשימה תתחיל, אף אחד מהחבורה לא יוכל להצטרף אליה.", + "questWarningBroken": "If new players join the party before the quest starts, they will also receive an invitation... However once the quest has started, no new party members can join the quest...", "bossRageTitle": "זעם", "bossRageDescription": "When this bar fills, the boss will unleash a special attack!", "startAQuest": "START A QUEST", "startQuest": "Start Quest", "whichQuestStart": "Which quest do you want to start?", - "getMoreQuests": "Get more quests" + "getMoreQuests": "Get more quests", + "unlockedAQuest": "You unlocked a quest!", + "leveledUpReceivedQuest": "You leveled up to Level <%= level %> and received a quest scroll!" } \ No newline at end of file diff --git a/common/locales/he/questscontent.json b/common/locales/he/questscontent.json index eaefaf0986..31bcb64540 100644 --- a/common/locales/he/questscontent.json +++ b/common/locales/he/questscontent.json @@ -261,5 +261,17 @@ "questBurnoutDropPhoenixMount": "Phoenix (Mount)", "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!", + "questFrogText": "Swamp of the Clutter Frog", + "questFrogNotes": "As you and your friends are slogging through the Swamps of Stagnation, @starsystemic points at a large sign. \"Stay on the path -- if you can.\"

\"Surely that isn't hard!\" @RosemonkeyCT says. \"It's broad and clear.\"

But as you continue, you notice that path is gradually overtaken by the muck of the swamp, laced with bits of strange blue debris and clutter, until it's impossible to proceed.

As you look around, wondering how it got this messy, @Jon Arjinborn shouts, \"Look out!\" An angry frog leaps from the sludge, clad in dirty laundry and lit by blue fire. You will have to overcome this poisonous Clutter Frog to progress!", + "questFrogCompletion": "The frog cowers back into the muck, defeated. As it slinks away, the blue slime fades, leaving the way ahead clear.

Sitting in the middle of the path are three pristine eggs. \"You can even see the tiny tadpoles and through the clear casing!\" @Breadstrings says. \"Here, you should take them.\"", + "questFrogBoss": "Clutter Frog", + "questFrogDropFrogEgg": "Frog (Egg)", + "questFrogUnlockText": "Unlocks purchasable Frog eggs in the Market", + "questSnakeText": "The Serpent of Distraction", + "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveler astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", + "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", + "questSnakeBoss": "Serpent of Distraction", + "questSnakeDropSnakeEgg": "Snake (Egg)", + "questSnakeUnlockText": "Unlocks purchasable Snake eggs in the Market" } \ No newline at end of file diff --git a/common/locales/he/rebirth.json b/common/locales/he/rebirth.json index d1e6df1019..73e2fd6683 100644 --- a/common/locales/he/rebirth.json +++ b/common/locales/he/rebirth.json @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "את/ה גם מקבל/ת הישג מכך שהתחלת הרפתקה חדשה!", "beReborn": "היוולד מחדש", "rebirthAchievement": "התחלת הרפתקה חדשה! זוהי הלידה ה<%= number %> שלך מחדש, והרמה הכי גבוהה אליה הגעת היא <%= level %>. כדי לשבור שיא זה, נסה/י להגיע לרמה גבוהה יותר לפני שתתחיל/י מחדש שוב!", + "rebirthAchievement100": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is 100 or higher. To stack this Achievement, begin your next new adventure when you've reached at least 100!", "rebirthBegan": "התחיל/ה הרפתקה חדשה", "rebirthText": "התחיל/ה <%= rebirths %> הרפתקאות חדשות", "rebirthOrb": "השתמש/ה בכדור הלידה מחדש כדי להתחיל מהתחלה אחרי רמה", + "rebirthOrb100": "Used an Orb of Rebirth to start over after attaining Level 100 or higher", "rebirthPop": "התחיל/י דמות חדשה ברמה 1 עם אותם הישגים, חפצי אספנות, משימות והיסטוריה.", "rebirthName": "כדור הלידה מחדש", "reborn": "היוולד/י מחדש. רמה מירבית: <%= reLevel %>" diff --git a/common/locales/he/settings.json b/common/locales/he/settings.json index 1fd31324fe..fb3d778865 100644 --- a/common/locales/he/settings.json +++ b/common/locales/he/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "אם האפשרות הזו מסומנת, רשימת התגיות של המטלה תהיה מוסתרת כשתפתח/י את המטלה לעריכה", "startAdvCollapsed": "אפשרויות מתקדמות של מטלות מתחילות סגורות", "startAdvCollapsedPop": "אם אפשרות זו מסומנת, אפשרויות מתקדמות יהיו חבויות כאשר תפתח/י את המשימה לעריכה.", + "dontShowAgain": "Don't show this again", + "suppressLevelUpModal": "Don't show popup when gaining a level", + "suppressHatchPetModal": "Don't show popup when hatching a pet", + "suppressRaisePetModal": "Don't show popup when raising a pet into a mount", + "suppressStreakModal": "Don't show popup when attaining a Streak achievement", "showTour": "הראה סיור", "restartTour": "מתחיל מחדש את סיור ההיכרות מהזמן בו הצטרפת לhabitRPG.", "showBailey": "הראה את באילי", @@ -81,7 +86,6 @@ "emailChange1": "כדי לשנות את כתובת הדוא\"ל שלך, בבקשה שלח מייל ל-", "emailChange2": "admin@habitica.com", "emailChange3": "וכלול את כתובות הדוא\"ל הישנה והחדשה שלך כמו גם את מספר זיהוי המשתמש שלך.", - "username": "שם כניסה", "usernameOrEmail": "שם משתמש או אימייל", "email": "כתובת דוא\"ל", "registeredWithFb": "רשום עם Facebook", @@ -89,7 +93,7 @@ "loginNameDescription2": "משתמש->פרופיל", "loginNameDescription3": "כדי לשנות את השם שמופיע באוואטר שלך ובהודעות הצ'אט.", "emailNotifications": "הודעות", - "wonChallenge": "זכית באתגר", + "wonChallenge": "You won a Challenge!", "newPM": "קיבלת הודעה פרטית חדשה", "giftedGems": "אבני חן שזכית בהן", "giftedGemsInfo": "<%= amount %> אבני חן - מאת <%= name %>", @@ -118,5 +122,29 @@ "promoCode": "קופון", "promoCodeApplied": "Promo Code Applied! Check your inventory", "promoPlaceholder": "הכנס קוד קופון", - "displayInviteToPartyWhenPartyIs1": "הצג כפתור ״הזמן לחבורה״ כאשר בחבורה יש חבר 1." + "displayInviteToPartyWhenPartyIs1": "הצג כפתור ״הזמן לחבורה״ כאשר בחבורה יש חבר 1.", + "saveCustomDayStart": "Save Custom Day Start", + "registration": "Registration", + "addLocalAuth": "Add local authentication:", + "generateCodes": "Generate Codes", + "generate": "Generate", + "getCodes": "Get Codes", + "webhooks": "Webhooks", + "enabled": "Enabled", + "webhookURL": "Webhook URL", + "add": "Add", + "buyGemsGoldCap": "Cap raised to <%= amount %>", + "mysticHourglass": "<%= amount %> Mystic Hourglass", + "mysticHourglassText": "Mystic Hourglasses allow purchasing a previous month's Mystery Item set.", + "purchasedPlanId": "Recurring $<%= price %> each <%= months %> Month(s) (<%= plan %>)", + "purchasedPlanExtraMonths": "You have <%= months %> months of subscription credit.", + "consecutiveSubscription": "Consecutive Subscription", + "consecutiveMonths": "Consecutive Months:", + "gemCapExtra": "Gem Cap Extra:", + "mysticHourglasses": "Mystic Hourglasses:", + "paypal": "PayPal", + "amazonPayments": "Amazon Payments", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/he/subscriber.json b/common/locales/he/subscriber.json index 19c1e90705..3a3625587d 100644 --- a/common/locales/he/subscriber.json +++ b/common/locales/he/subscriber.json @@ -60,7 +60,7 @@ "timeTravelersTitleNoSub": "<%= linkStartTyler %>טיילר<%= linkEnd %> ו<%= linkStartVicky %>ויקי<%= linkEnd %>", "timeTravelersTitle": "גולשי זמן מסתוריים", "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.", - "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 <%= linkStart %>here<%= linkEnd %>! If those don't satisfy you, perhaps you'd be interested in one of our fashionably futuristic Steampunk Item Sets?", + "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!", "subUpdateCard": "עדכן כרטיס", diff --git a/common/locales/he/tasks.json b/common/locales/he/tasks.json index bb936edc56..62bc4688f2 100644 --- a/common/locales/he/tasks.json +++ b/common/locales/he/tasks.json @@ -16,7 +16,7 @@ "checklist": "רשימה", "checklistText": "Break a task into smaller pieces! Checklists increase the Experience and Gold gained from a To-Do, and reduce the damage caused by a Daily.", "expandCollapse": "הרחבה/הקרסה", - "text": "Title", + "text": "כותרת", "extraNotes": "רשימות נוספות", "direction/Actions": "כיוון/פעולה", "advancedOptions": "אפשרויות מתקדמות", @@ -88,8 +88,7 @@ "fortifyText": "Fortify will return all your tasks to a neutral (yellow) state, as if you'd just added them, and top your Health off to full. This is great if all your red tasks are making the game too hard, or all your blue tasks are making the game too easy. If starting fresh sounds much more motivating, spend the Gems and catch a reprieve!", "sureDelete": "בטוח/ה שיש צורך למחוק את המשימה הזו?", "streakCoins": "בונוס התמדה!", - "pushTaskToTop": "דחיפת המשימה למעלה", - "pushTaskToBottom": "דחיפת המשימה לתחתית", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "התחל בהקלדת שם המטלה.", "dailiesRestingInInn": "You're Resting in the Inn! Your Dailies will NOT hurt you tonight, but they WILL still refresh every day. If you're in a quest, you won't deal damage/collect items until you check out of the Inn, but you can still be injured by a Boss if your Party mates skip their own Dailies.", "habitHelp1": "Good Habits are things that you do often. They award Gold and Experience every time you click the <%= plusIcon %>.", diff --git a/common/locales/hu/backgrounds.json b/common/locales/hu/backgrounds.json index a52092bc43..3ed591234f 100644 --- a/common/locales/hu/backgrounds.json +++ b/common/locales/hu/backgrounds.json @@ -112,11 +112,25 @@ "backgroundStableNotes": "Hátasok ápolása a Habitika Istállóban", "backgroundTavernText": "Habitika Fogadó", "backgroundTavernNotes": "Habitika Fogadó meglátogatása", - "backgrounds102015": "SET 17: Released October 2015", - "backgroundHarvestMoonText": "Harvest Moon", - "backgroundHarvestMoonNotes": "Cackle under the Harvest Moon.", - "backgroundSlimySwampText": "Slimy Swamp", - "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", - "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgrounds102015": "KÉSZLET 17: kiadva 2015 októberében", + "backgroundHarvestMoonText": "Telihold", + "backgroundHarvestMoonNotes": "Csacsogj a Telihold alatt.", + "backgroundSlimySwampText": "Iszapos Mocsár", + "backgroundSlimySwampNotes": "Ballagj át az Iszapos Mocsáron.", + "backgroundSwarmingDarknessText": "Sötétség leple", + "backgroundSwarmingDarknessNotes": "Dideregj a Sötétség leple alatt.", + "backgrounds112015": "18. készlet: kiadva 2015 November", + "backgroundFloatingIslandsText": "Úszó-Szigetek", + "backgroundFloatingIslandsNotes": "Ugrálj át az Úszó-Szigeteken.", + "backgroundNightDunesText": "Éjszakai Dűnék", + "backgroundNightDunesNotes": "Sétálj békésen az Éjszakai Dűnék között.", + "backgroundSunsetOasisText": "Naplemente Oázis", + "backgroundSunsetOasisNotes": "Sütkérezz a Naplemente Oázisban.", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/hu/challenge.json b/common/locales/hu/challenge.json index 3cf39090de..7cbb72ed41 100644 --- a/common/locales/hu/challenge.json +++ b/common/locales/hu/challenge.json @@ -59,5 +59,9 @@ "challengeNotEnoughGems": "Nincs elég drágaköved a kihívás létrehozásához.", "noPermissionEditChallenge": "Nincs jogod szerkeszteni ezt a kihívást", "noPermissionDeleteChallenge": "Nincs jogod törölni ezt a kihívást", - "noPermissionCloseChallenge": "Nincs jogod lezárni ezt a kihívást" + "noPermissionCloseChallenge": "Nincs jogod lezárni ezt a kihívást", + "congratulations": "Gratulálok!", + "hurray": "Hurrá!", + "noChallengeOwner": "nincs tulajdonosa", + "noChallengeOwnerPopover": "Ennek a kihívásnak nincs tulajdonosa, mert a személy aki létrehozta törölte fiókját." } \ No newline at end of file diff --git a/common/locales/hu/character.json b/common/locales/hu/character.json index d4f3ed8275..d5d0271d44 100644 --- a/common/locales/hu/character.json +++ b/common/locales/hu/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "Kaszt Tárgy Bónusz", "battleGear": "Harci felszerelés", "battleGearText": "Ez itt a felszerelésed, amit a csatákban viselsz; hatással van számokra, amikor a feladataidat teljesíted.", + "autoEquipBattleGear": "Új felszerelés automatikus hordása", "costume": "Ruha", "costumeText": "Ha tetszenek a ruhák, amiket hordasz, akkor pipáld ki a \"Ruha használata\" gombot, hogy felöltsd őket és a harci felszereléseid felett látszódjanak.", "useCostume": "Ruha használata", @@ -64,6 +65,10 @@ "ultimGearText": "Maximálisra fejlesztette a fegyvert és páncélzatot a következő kasztoknak:", "level": "Szint", "levelUp": "Szintet léptél!", + "gainedLevel": "Szintet léptél!", + "leveledUp": "A valós életbeli céljaid elvégzésével, felnőttél <%= level %> szinthez!", + "fullyHealed": "Teljesen meggyógyultál!", + "huzzah": "Hurrá!", "mana": "Mana", "hp": "ÉE", "mp": "VP", diff --git a/common/locales/hu/content.json b/common/locales/hu/content.json index f1230335cb..df01861346 100644 --- a/common/locales/hu/content.json +++ b/common/locales/hu/content.json @@ -95,6 +95,12 @@ "questEggHorseText": "Horse", "questEggHorseMountText": "Horse", "questEggHorseAdjective": "a galloping", + "questEggFrogText": "Frog", + "questEggFrogMountText": "Frog", + "questEggFrogAdjective": "a princely", + "questEggSnakeText": "Snake", + "questEggSnakeMountText": "Snake", + "questEggSnakeAdjective": "a slithering", "eggNotes": "Find a hatching potion to pour on this egg, and it will hatch into <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "Alap", "hatchingPotionWhite": "Fehér", diff --git a/common/locales/hu/faq.json b/common/locales/hu/faq.json index e4dd10dc35..6c2df0fef2 100644 --- a/common/locales/hu/faq.json +++ b/common/locales/hu/faq.json @@ -2,40 +2,43 @@ "frequentlyAskedQuestions": "Gyakran Ismételt Kérdések", "faqQuestion0": "Összezavarodtam. Hol találok egy leírást?", "iosFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn experience and gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as Pets, Skills, and Quests! You can customize your character under Menu > Customize Avatar.\n\n Some basic ways to interact: click the (+) in the upper-right-hand corner to add a new task. Tap on an existing task to edit it, and swipe left on a task to delete it. You can sort tasks using Tags in the upper-left-hand corner, and expand and contract checklists by clicking on the checklist bubble.", - "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, the wiki has an excellent step-by-step overview of the game [right here](http://habitica.wikia.com/wiki/Habitica_Wiki).", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", "faqQuestion1": "Hogyan tudok létrehozni feladatokat?", "iosFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.", "webFaqAnswer1": "Good Habits (the ones with a ) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a ) are tasks that you should avoid, like biting nails. Habits with a and a have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n

\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n

\n To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.", "faqQuestion2": "Kérhetnék néhány feladat példát?", - "iosFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n

\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", - "webFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", + "iosFaqAnswer2": "A wikin található négy lista példafeladat ihletként:\n

\n * [Példa Szokások](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Példa Napi feladatok](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Példa Tennivalók](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Példa Egyéni jutalmak](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", + "webFaqAnswer2": "A wikin található négy lista példafeladat ihletként:\n * [Példa Szokások](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Példa Napi feladatok](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Példa Tennivalók](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Példa Egyéni jutalmak](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", "faqQuestion3": "Miért változik meg a feladataim színe?", "iosFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it's a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", "webFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it’s a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", - "faqQuestion4": "Why did my avatar lose health, and how do I regain it?", + "faqQuestion4": "Miért veszített az avatárom életerőt és hogyan visszaszerezni?", "iosFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you tap a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your Party and one of your Party mates did not complete all their Dailies, the Boss will attack you.\n\n The main way to heal is to gain a level, which restores all your health. You can also buy a Health Potion with gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a Party with a Healer, they can heal you as well.", "webFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you click a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your party and one of your party mates did not complete all their Dailies, the Boss will attack you.\n

\n The main way to heal is to gain a level, which restores all your Health. You can also buy a Health Potion with Gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a party (under Social > Party) with a Healer, they can heal you as well.", - "faqQuestion5": "How do I play Habitica with my friends?", - "iosFaqAnswer5": "The best way is to invite them to a Party with you, via the [website](https://habitica.com/#/options/groups/party)! We'll add the ability to create a Party from this app soon, but in the meantime you can use the [website](https://habitica.com/#/options/groups/party). Parties can go on quests, battle monsters, and cast skills to support each other. On the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", + "faqQuestion5": "Hogyan tudok játszani a barátaimmal Habitica-t?", + "iosFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on quests, battle monsters, and cast skills to support each other. Go to Menu > Party and click \"Create New Party\" if you don't already have a Party. Then tap on the Members list, and tap Invite in the upper right-hand corner to invite your friends by entering their User ID (a string of numbers and letters that they can find under Settings > Account Details on the app, and Settings > API on the website). On the website, you can also invite friends via email, which we will add to the app in a future update.\n\nOn the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", "webFaqAnswer5": "The best way is to invite them to a party with you, under Social > Party! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n

\n For more detailed info, check out the wiki pages on [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).", - "faqQuestion6": "How do I get a Pet or Mount?", + "faqQuestion6": "Hogyan szerezhetek háziállatot, vagy hátast?", "iosFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch Egg.\" Then choose a hatching potion to determine its color! Go to Menu > Pets to equip your new Pet to your avatar by clicking on it. \n\n You can also grow your Pets into Mounts by feeding them under Menu > Pets. Tap on a Pet, and then select \"Feed Pet\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Menu > Mounts and tap on it to equip it to your avatar.\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", "webFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Inventory > Market.\n

\n To hatch a Pet, you'll need an egg and a hatching potion. Click on the egg to determine the species you want to hatch, and then click on the hatching potion to determine its color! Go to Inventory > Pets to equip it to your avatar by clicking on it.\n

\n You can also grow your Pets into Mounts by feeding them under Inventory > Pets. Click on a Pet, and then click on a piece of food from the right-hand menu to feed it! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Inventory > Mounts and click on it to equip it to your avatar.\n

\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", - "faqQuestion7": "How do I become a Warrior, Mage, Rogue, or Healer?", + "faqQuestion7": "Hogyan tudok Harcos, Mágus, Tolvaj, vagy Gyógyító lenni?", "iosFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their Party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most gold and find the most item drops, and they can help their Party do the same. Finally, Healers can heal themselves and their Party members.\n\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click “Decide Later” and choose later under Menu > Choose Class.", "webFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most Gold and find the most item drops, and they can help their party do the same. Finally, Healers can heal themselves and their party members.\n

\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click \"Opt Out\" and re-enable it later under User > Stats.", - "faqQuestion8": "What is the blue stat bar that appears in the Header after level 10?", + "faqQuestion8": "Mi az a kék státusz sáv, ami a fejlécben jelenik meg 10-es szint után?", "iosFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Use Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in a special section in the Rewards Column. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You’ll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", - "faqQuestion9": "How do I fight monsters and go on Quests?", - "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party on the [website](https://habitica.com/#/options/groups/party), you'll be rewarded with the Basi-List Scroll! (We will add this feature to the app in a future update.)\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for gold and gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", + "faqQuestion9": "Hogyan harcolhatok szörnyekkel és mehetek küldetésekre?", + "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for Gold and Gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "webFaqAnswer9": "First, you need to join or start a party (under Social > Party). Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n

\n Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are three ways to get a scroll:\n

\n * When you invite people to your party, you’ll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Page (Inventory > Quests) for Gold and Gems.\n

\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your party at the same time that you damage the Boss.\n

\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "faqQuestion10": "What are gems, and how do I get them?", + "faqQuestion10": "Mik azok a drágakövek, és hogyan szerezhetek?", "iosFaqAnswer10": "Gems are purchased with real money by tapping on the gem icon in the header. When people buy gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying gems directly, there are three other ways players can gain gems:\n\n * Win a Challenge on the [website](https://habitica.com) that has been set up by another player under Social > Challenges. (We will be adding Challenges to the app in a future update!)\n * Subscribe on the [website](https://habitica.com/#/options/settings/subscription) and unlock the ability to buy a certain number of gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with gems do not offer any statistical advantages, so players can still make use of the app without them!", "webFaqAnswer10": "Gems are [purchased with real money](https://habitica.com/#/options/settings/subscription), although [subscribers](https://habitica.com/#/options/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n

\n In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n

\n * Win a Challenge that has been set up by another player under Social > Challenges.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", - "faqQuestion11": "How do I report a bug or request a feature?", + "faqQuestion11": "Hogy tudok hibát jelezni, vagy funkciót kérni?", "iosFaqAnswer11": "You can report a bug, request a feature, or send feedback under Menu > Report a Bug and Menu > Send Feedback! We'll do everything we can to assist you.", "webFaqAnswer11": "Bug reports are collected on GitHub. Go to [Help > Report a Bug](https://github.com/HabitRPG/habitrpg/issues/2760) and follow the instructions. Don't worry, we'll get you fixed up soon!\n

\n Feature requests are collected on Trello. Go to [Help > Request a Feature](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) and follow the instructions. Ta-da!", + "faqQuestion12": "Hogyan harcolhatok Világ Főellenséggel?", + "iosFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", + "webFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n

\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n

\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n

\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", "iosFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the Tavern chat under Menu > Tavern! We're happy to help.", - "webFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the [Newbies Guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help." + "webFaqStillNeedHelp": "Ha van olyan kérdésed, amit nem találsz a listán, akkor gyere és kérdezz itt: [Kezdők Céhe](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! Örömmel segítünk." } \ No newline at end of file diff --git a/common/locales/hu/front.json b/common/locales/hu/front.json index 0609fe49f2..788892b6c8 100644 --- a/common/locales/hu/front.json +++ b/common/locales/hu/front.json @@ -74,7 +74,7 @@ "infhQuote": "[Habitica] has really helped me impart structure to my life in graduate school.", "invalidEmail": "A jelszó resethez érvényes email cím szükséges.", "irishfeet123Quote": "I've had horrible habits with clearing my place completely after meals and leaving cups all over the place. [Habitica] has cured that!", - "joinOthers": "Join 250,000 people making it fun to achieve goals!", + "joinOthers": "Join <%= userCount %> people making it fun to achieve goals!", "kazuiQuote": "Before [Habitica], I was stuck with my thesis, as well as dissatisfied with my personal discipline regarding housework and things like learning vocabulary and studying Go theory. It turns out breaking down these tasks into smaller manageable checklists is quite the thing to keep me motivated and constantly working.", "landingadminlink": "adminisztratív csomagunkat", "landingend": "Nem győzött még meg?", @@ -179,5 +179,14 @@ "businessInquiries": "Üzleti információk", "merchandiseInquiries": "Termék információk", "marketingInquiries": "Marketing/Közösségi média információk", - "tweet": "Tweet" + "tweet": "Tweet", + "apps": "Apps", + "notifyAndroidApp": "Want us to notify you when the Android app is ready? Sign up for this mailing list!", + "checkOutIOSApp": "Check out our new iOS App!", + "imagine1": "Imagine if improving your life were as fun as playing a game.", + "landingCopy1": "Advance in the game by completing your real-life tasks.", + "landingCopy2": "Battle monsters with friends to stay accountable to your goals.", + "landingCopy3": "Join over <%= userCount %> people having fun as they improve their lives.", + "alreadyHaveAccount": "I already have an account!", + "getStartedNow": "Get Started Now!" } \ No newline at end of file diff --git a/common/locales/hu/gear.json b/common/locales/hu/gear.json index 48873b128e..f32f06f247 100644 --- a/common/locales/hu/gear.json +++ b/common/locales/hu/gear.json @@ -149,13 +149,19 @@ "weaponArmoireRancherLassoText": "Rancher Lasso", "weaponArmoireRancherLassoNotes": "Lassos: the ideal tool for rounding up and wrangling. Increases Strength by <%= str %>, Perception by <%= per %>, and Intelligence by <%= int %>. Enchanted Armoire: Rancher Set (Item 3 of 3).", "weaponArmoireMythmakerSwordText": "Mythmaker Sword", - "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3)", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Iron Crook", - "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3)", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Gold Wing Staff", "weaponArmoireGoldWingStaffNotes": "The wings on this staff constantly flutter and twist. Increases all attributes by <%= attrs %> each. Enchanted Armoire: Independent Item.", "weaponArmoireBatWandText": "Bat Wand", "weaponArmoireBatWandNotes": "This wand can turn any task into a bat! Wave it about and watch them fly away. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireShepherdsCrookText": "Shepherd's Crook", + "weaponArmoireShepherdsCrookNotes": "Useful for herding gryphons. Increases Constitution by <%= con %>. Enchanted Armoire: Shepherd Set (Item 1 of 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "páncél", "armorBase0Text": "Egyszerű ruházat", "armorBase0Notes": "Átlagos ruházat. Nem ad semmi előnyt.", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "Idétlen Buliköpeny", "armorSpecialBirthday2015Notes": "Boldog Szülinapot, Habitica! Viseld ezt az Idétlen Partiköpenyt, hogy megünnepeld ezt a csodás napot. Nem ad semmi előnyt.", "armorSpecialGaymerxText": "Szivárvány harci páncél.", - "armorSpecialGaymerxNotes": "A GaymerX ünnepi szezon alkalmával ez a spéci páncél sugárzó szívárványszín mintában pompázik. A GaymerX egy játék konferencia, ami az LGBTQ-t ünnepli és itt a játék mindenkinek szabad. Az InterContinental-ban tartják, San Francisco belvárosában, Július 11-13-ig. Nem ad semmilyen bónuszt.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "Karcsú macska kosztüm", "armorSpecialSpringRogueNotes": "Hibátlanul ápolva. Növeli az észlelést <%= per %> ponttal. Korlátozott példányszámú 2014-es Tavaszi Felszerelés.", "armorSpecialSpringWarriorText": "Lóhere-acél páncél", @@ -307,6 +313,8 @@ "armorMystery201508Notes": "Run fast as a flash in the fluffy Cheetah Costume! Confers no benefit. August 2015 Subscriber Item.", "armorMystery201509Text": "Werewolf Costume", "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Steampunk öltözet", "armorMystery301404Notes": "Jól vasalt és lenyűgöző, mi! Nem ad semmi előnyt. 3015 februári előfizetői tárgy.", "armorArmoireLunarArmorText": "Soothing Lunar Armor", @@ -321,6 +329,12 @@ "armorArmoireHornedIronArmorNotes": "Fiercely hammered from iron, this horned armor is nearly impossible to break. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Horned Iron Set (Item 2 of 3).", "armorArmoirePlagueDoctorOvercoatText": "Plague Doctor Overcoat", "armorArmoirePlagueDoctorOvercoatNotes": "An authentic overcoat worn by the doctors who battle the Plague of Procrastination! Increases Intelligence by <%= int %>, Strength by <%= str %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 3 of 3).", + "armorArmoireShepherdRobesText": "Shepherd Robes", + "armorArmoireShepherdRobesNotes": "The fabric is cool and breathable, perfect for a hot day herding gryphons in the desert. Increases Strength and Perception by <%= attrs %> each. Enchanted Armoire: Shepherd Set (Item 2 of 3).", + "armorArmoireRoyalRobesText": "Royal Robes", + "armorArmoireRoyalRobesNotes": "Wonderful ruler, rule all day long! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 3 of 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "Fejviselet", "headBase0Text": "Nincs sisak", "headBase0Notes": "Nincs fejfedő", @@ -441,7 +455,7 @@ "headSpecialFall2015HealerText": "Hat of Frog", "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", "headSpecialGaymerxText": "Szívárványos harcisisak", - "headSpecialGaymerxNotes": "A GaymerX ünnepi szezon alkalmával ez a spéci sisak sugárzó szivárványszín mintában pompázik. A GaymerX egy játék konferencia, ami az LGBTQ-t ünnepli és itt a játék mindenkinek szabad. Az InterContinental-ban tartják, San Francisco belvárosában, Július 11-13-ig. Nem ad semmilyen bónuszt.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "Szárnyas sisak", "headMystery201402Notes": "Ez a szárnyas diadém szélsebessé tesz! Nem ad bónuszt. 2014 februári előfizetői tárgy.", "headMystery201405Text": "Az elme tüze", @@ -464,6 +478,8 @@ "headMystery201508Notes": "This cozy cheetah hat is very fuzzy! Confers no benefit. August 2015 Subscriber Item.", "headMystery201509Text": "Werewolf Mask", "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 Subscriber Item.", "headMystery301404Text": "Elegáns Cilinder", "headMystery301404Notes": "Egy elegáns cilinder a legnemesebb előkelőségeknek! 3015 januári előfizetői tárgy. Nem ad semmi előnyt.", "headMystery301405Text": "Egyszerű Cilinder", @@ -481,7 +497,7 @@ "headArmoireBlueHairbowText": "Blue Hairbow", "headArmoireBlueHairbowNotes": "Become perceptive, tough, and smart while wearing this beautiful Blue Hairbow! Increases Perception by <%= per %>, Constitution by <%= con %>, and Intelligence by <%= int %>. Enchanted Armoire: Independent Item.", "headArmoireRoyalCrownText": "Royal Crown", - "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Royal Set (Item 1 of 3).", "headArmoireGoldenLaurelsText": "Golden Laurels", "headArmoireGoldenLaurelsNotes": "These golden laurels reward those who have conquered bad habits. Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 2 of 3).", "headArmoireHornedIronHelmText": "Horned Iron Helm", @@ -496,6 +512,12 @@ "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", "headArmoireOrangeCatText": "Orange Cat Hat", "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireBlueFloppyHatText": "Blue Floppy Hat", + "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireShepherdHeaddressText": "Shepherd Headdress", + "headArmoireShepherdHeaddressNotes": "Sometimes the gryphons that you herd like to chew on this headdress, but it makes you seem more intelligent nonetheless. Increases Intelligence by <%= int %>. Enchanted Armoire: Shepherd Set (Item 3 of 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "Balkezes tárgy", "shieldBase0Text": "Nincs balkezes felszerelés", "shieldBase0Notes": "Nincs pajzs vagy másodlagos fegyver.", @@ -579,6 +601,8 @@ "shieldArmoireGladiatorShieldNotes": "To be a gladiator you must.... eh, whatever, just bash them with your shield. Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Gladiator Set (Item 3 of 3).", "shieldArmoireMidnightShieldText": "Midnight Shield", "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "shieldArmoireRoyalCaneText": "Royal Cane", + "shieldArmoireRoyalCaneNotes": "Hooray for the ruler, worthy of song! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 2 of 3).", "back": "Back Accessory", "backBase0Text": "Nincs háti kiegészítő", "backBase0Notes": "Nincs háti kiegészítő.", @@ -592,6 +616,8 @@ "backMystery201504Notes": "Bzzz bzzz bzzz! Reppenj egyik feladatról a másikra!Nem ad bónuszt. 2015 áprilisi előfizetői tárgy.", "backMystery201507Text": "Rad Surfboard", "backMystery201507Notes": "Surf off the Diligent Docks and ride the waves in Inkomplete Bay! Confers no benefit. July 2015 Subscriber Item.", + "backMystery201510Text": "Goblin Tail", + "backMystery201510Notes": "Prehensile and powerful! Confers no benefit. October 2015 Subscriber Item.", "backSpecialWonderconRedText": "Tekintélyes köpeny", "backSpecialWonderconRedNotes": "Erőt és szépségtől sugárzik. Nem ad semmi előnyt. Külön kiadású tárgy.", "backSpecialWonderconBlackText": "Trükkös lepel", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "Ezek az erős agancsok a levelekkel együtt változtatják a színüket. Nem ad bónuszt. 2014 szeptemberi előfizetői tárgy.", "headAccessoryMystery201502Text": "Gondolat szárnyai", "headAccessoryMystery201502Notes": "Engedd a képzeleted szabadon szárnyalni! Nem ad semmi előnyt. 2015 februári előfizetői tárgy.", + "headAccessoryMystery201510Text": "Goblin Horns", + "headAccessoryMystery201510Notes": "These fearsome horns are slightly slimy. Confers no benefit. October 2015 Subscriber Item.", "headAccessoryMystery301405Text": "Fejre-Szemüveg", "headAccessoryMystery301405Notes": "\"A szemüvegek a szemhez vannak,\" mondták \"Senki sem akar olyan szemüvegeket amit csak a fejeden hordhatsz,\" mondták. Ha! Jól megmutattad nekik!. Nem ad bónuszt. 3015 augusztusi előfizetői tárgy.", "eyewear": "Eyewear", diff --git a/common/locales/hu/generic.json b/common/locales/hu/generic.json index 9a42ac6dd8..8c856da870 100644 --- a/common/locales/hu/generic.json +++ b/common/locales/hu/generic.json @@ -28,7 +28,7 @@ "market": "Piac", "subscriberItem": "Rejtélyes tárgy", "newSubscriberItem": "Új rejtélyes tárgy", - "subscriberItemText": "Minden hónapban az előfizetők egy rejtélyes tárgyat kapnak. Ezt általában egy héttel a hónap vége előtt adjuk ki. A wiki 'Mystery item' aloldalán megtalálhatod a pontos dátumot.", + "subscriberItemText": "Minden hónapban az előfizetők kapnak egy rejtélyes tárgyat. Ezt általában egy héttel a hónap vége előtt hozzuk nyilvánosságra. A Wiki 'Rejtélyes Tárgyak' oldalán találhatsz több információt.", "all": "Összes", "none": "Semelyik", "or": "vagy", @@ -69,8 +69,9 @@ "habiticaDayPluralText": "Részt vettél <%= number %> Habitika Elnevezési Napon! Köszönjük, hogy ilyen fantasztikus felhasználó vagy.", "achievementDilatory": "A halogatók megmentője", "achievementDilatoryText": "Segített legyőzni a Rettenet Késlekedő Sárkányát a 2014 Nyári Loccsanás esemény alatt.", - "costumeContest": "2014 Jelmez Verseny", - "costumeContestText": "Részt vett a 2014-es Halloween-i jelmezversenyen. Megnézhetsz néhány versenyzőt a blog.habitica.com/tagged/cosplay címen!", + "costumeContest": "Costume Contestant", + "costumeContestText": "Participated in the Habitoween Costume Contest. See some of the entries on the Habitica blog!", + "costumeContestTextPlural": "Participated in <%= number %> Habitoween Costume Contests. See some of the entries on the Habitica blog!", "memberSince": "- óta tag", "lastLoggedIn": "- Utolsó bejelentkezés", "notPorted": "Ezt a funkciót még nem helyeztük át az eredeti honlapról.", @@ -79,6 +80,7 @@ "errorUpCase": "HIBA:", "newPassSent": "Új jelszó elküldve.", "serverUnreach": "A kiszolgáló jelenleg nem elérhető.", + "requestError": "Ajjaj, egy hiba történt! Kérlek töltsd újra az oldalt, az előző műveleted nem biztos hogy sikeres volt.", "seeConsole": "Ha a hiba továbbra is fennáll, akkor jelentsd itt: Súgó > Hiba jelentése. Ha ismered a böngésződ konzolját, akkor csatold a hibaüzeneteket is.", "error": "Hiba", "menu": "Menü", @@ -110,9 +112,9 @@ "December": "December", "dateFormat": "Dátum formátum", "achievementStressbeast": "Stoïkalm megmentője", - "achievementStressbeastText": "Helped defeat the Abominable Stressbeast during the 2014 Winter Wonderland Event!", - "achievementBurnout": "Savior of the Flourishing Fields", - "achievementBurnoutText": "Helped defeat Burnout and restore the Exhaust Spirits during the 2015 Fall Festival Event!", + "achievementStressbeastText": "Segített legyőzni az Utálatos Stresszrémet a 2014-es Téli Csodaország esemény alatt!", + "achievementBurnout": "Virágzó Mezők megmentője", + "achievementBurnoutText": "Segített legyőzni Kiégést és visszaszerezte a Távozó Szellemeket a 2015-ös Őszi Fesztivál esemény alatt!", "checkOutProgress": "Haladásom megtekintése Habitikán!", "cardReceived": "Egy kártyád érkezett!", "cardReceivedFrom": "<%= userName %> küldött neked egy <%= cardType %>", @@ -133,5 +135,17 @@ "thankyou2": "Ezerhála neked.", "thankyou3": "Nagyon hálás vagyok, köszönöm!", "thankyouCardAchievementTitle": "Nagyon Hálás", - "thankyouCardAchievementText": "Köszönöm, hogy hálás vagy! Küldtél vagy kaptál <%= cards %> Köszönöm kártyát." + "thankyouCardAchievementText": "Köszönöm, hogy hálás vagy! Küldtél vagy kaptál <%= cards %> Köszönöm kártyát.", + "streakAchievement": "You earned a streak achievement!", + "firstStreakAchievement": "21-Day Streak", + "streakAchievementCount": "<%= streaks %> 21-Day Streaks", + "twentyOneDays": "You've completed your Daily for 21 days in a row!", + "dontBreakStreak": "Amazing job. Don't break the streak!", + "dontStop": "Don't Stop Now!", + "levelUpShare": "I leveled up in Habitica by improving my real-life habits!", + "questUnlockShare": "I unlocked a new quest in Habitica!", + "hatchPetShare": "I hatched a new pet by completing my real-life tasks!", + "raisePetShare": "I raised a pet into a mount by completing my real-life tasks!", + "wonChallengeShare": "I won a challenge in Habitica!", + "achievementShare": "I earned a new achievement in Habitica!" } \ No newline at end of file diff --git a/common/locales/hu/groups.json b/common/locales/hu/groups.json index 74f660fff8..7aae2a4000 100644 --- a/common/locales/hu/groups.json +++ b/common/locales/hu/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "Fogadó elhagyása", "innCheckIn": "Pihenj a fogadóban", "innText": "You're resting in the Inn! While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day. Be warned: If you are participating in a Boss Quest, the Boss will still damage you for your party mates' missed Dailies unless they are also in the Inn! Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn.", + "innTextBroken": "You're resting in the Inn, I guess... While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day... If you are participating in a Boss Quest, the Boss will still damage you for your party mates' missed Dailies... unless they are also in the Inn... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn... so tired...", "lfgPosts": "Csoportot kereső bejegyzések (Csapat kell)", "tutorial": "Ismertető", "glossary": "Szójegyzék", @@ -145,5 +146,6 @@ "partyEmpty": "You're the only one in your party. Invite your friends!", "partyChatEmpty": "Your party chat is empty! Type a message in the box above to start chatting.", "guildChatEmpty": "This guild's chat is empty! Type a message in the box above to start chatting.", - "possessiveParty": "<%= name %>'s Party" + "possessiveParty": "<%= name %>'s Party", + "requestAcceptGuidelines": "If you would like to post messages in the Tavern or any party or guild chat, please first read our <%= linkStart %>Community Guidelines<%= linkEnd %> and then click the button below to indicate that you accept them." } \ No newline at end of file diff --git a/common/locales/hu/limited.json b/common/locales/hu/limited.json index 67db27a0f5..0d89b9bf15 100644 --- a/common/locales/hu/limited.json +++ b/common/locales/hu/limited.json @@ -21,6 +21,7 @@ "valentineCardAchievementText": "Aww, you and your friend must really care about each other! Sent or received <%= cards %> Valentine's Day cards.", "polarBear": "Jegesmedve", "turkey": "Pulyka", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "Jegesmedvebocs", "jackolantern": "Töklámpás", "seasonalShop": "Szezonális Bolt", @@ -30,6 +31,7 @@ "seasonalShopText": "Welcome to the Seasonal Shop!! We're stocking springtime Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Spring Fling event each year, but we're only open until April 30th, so be sure to stock up now, or you'll have to wait a year to buy these items again!", "seasonalShopSummerText": "Welcome to the Seasonal Shop!! We're stocking summertime Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Summer Splash event each year, but we're only open until July 31st, so be sure to stock up now, or you'll have to wait a year to buy these items again!", "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31, so be sure to stock up now, or you'll have to wait a year to buy these items again!", + "seasonalShopFallTextBroken": "Oh.... Welcome to the Seasonal Shop... We're stocking autumn Seasonal Edition goodies, or something... Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31... I guess you should to stock up now, or you'll have to wait... and wait... and wait... *sigh*", "seasonalShopRebirth": "If you've used the Orb of Rebirth, you can repurchase this equipment in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.", "candycaneSet": "Botcukor (Varázsló)", "skiSet": "Orgyilkos (Tolvaj)", diff --git a/common/locales/hu/messages.json b/common/locales/hu/messages.json index d76dbf880f..ff4da1c30d 100644 --- a/common/locales/hu/messages.json +++ b/common/locales/hu/messages.json @@ -24,11 +24,32 @@ "messageDropEgg": "Találtál egy <%= dropText %> tojást! <%= dropNotes %>", "messageDropPotion": "Találtál egy <%= dropText %> keltetőfőzetet! <%= dropNotes %>", "messageDropQuest": "Találtál egy küldetést!", - "messageDropMysteryItem": "You open the box and find <%= dropText %>!", + "messageDropMysteryItem": "Kinyitottad a dobozt és találtál egy <%= dropText %>!", "messageFoundQuest": "Megtaláltad a \"<%= questText %>\" küldetést!", "messageAlreadyPurchasedGear": "You purchased this gear in the past, but do not currently own it. You can buy it again in the rewards column on the tasks page.", "messageAlreadyOwnGear": "You already own this item. Equip it by going to the equipment page.", "armoireEquipment": "<%= image %> You found a piece of rare Equipment in the Armoire: <%= dropText %>! Awesome!", "armoireFood": "<%= image %> You rummage in the Armoire and find <%= dropArticle %><%= dropText %>. What's that doing in here?", - "armoireExp": "You wrestle with the Armoire and gain Experience. Take that!" + "armoireExp": "You wrestle with the Armoire and gain Experience. Take that!", + "messageInsufficientGems": "Nincs elég drágakő!", + "messageAuthPasswordMustMatch": ":password és :confirmPassword nem egyeznek", + "messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword szükséges", + "messageAuthUsernameTaken": "a felhasználónév már foglalt", + "messageAuthEmailTaken": "Az E-Mail cím már foglalt.", + "messageAuthNoUserFound": "felhasználó nem található.", + "messageAuthMustBeLoggedIn": "Be kell jelentkezned.", + "messageAuthMustIncludeTokens": "You must include a token and uid (user id) in your request", + "messageGroupNotFound": "A csoport nem található, vagy nincs hozzá jogosultságod.", + "messageGroupAlreadyInParty": "Már csapatban vagy, próbálj frissíteni.", + "messageGroupOnlyLeaderCanUpdate": "Csak a csoportvezető tudja frissíteni a csoportot!", + "messageGroupRequiresInvite": "Nem léphetsz be olyan csoportba, ahova nem vagy meghívva.", + "messageGroupCannotRemoveSelf": "Nem törölheted magadat!", + "messageGroupChatBlankMessage": "Nem küldhetsz üres üzenetet", + "messageGroupChatLikeOwnMessage": "Nem kedvelheted a saját üzenetedet. Ne legyél az az ember.", + "messageGroupChatFlagOwnMessage": "Nem jelentheted a saját üzenetedet.", + "messageGroupChatFlagAlreadyReported": "Már jelentetted ezt az üzenetet", + "messageGroupChatNotFound": "Üzenet nem található!", + "messageGroupChatAdminClearFlagCount": "Only an admin can clear the flag count!", + "messageUserOperationProtected": "path `<%= operation %>` was not saved, as it's a protected path.", + "messageUserOperationNotFound": "<%= operation %> operation not found" } \ No newline at end of file diff --git a/common/locales/hu/noscript.json b/common/locales/hu/noscript.json new file mode 100644 index 0000000000..d2ee2ee478 --- /dev/null +++ b/common/locales/hu/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Bocsi! A böngésződben nincs engedélyezve a JavaScript.", + "jsDisabledHeadingFull": "Bocsi! A böngésződben nincs engedélyezve a JavaScript és anélkül a Habitica nem tud rendesen működni.", + "jsDisabledText": "Habitica nem tudja tökéletesen megjeleníteni az oldalt nélküle.", + "jsDisabledLink": "Kérlek, engedélyezd a JavaScriptet, hogy folytathasd." +} \ No newline at end of file diff --git a/common/locales/hu/npc.json b/common/locales/hu/npc.json index fb9ba3a7e6..919c25cf9d 100644 --- a/common/locales/hu/npc.json +++ b/common/locales/hu/npc.json @@ -5,17 +5,21 @@ "mattShall": "Shall I bring you your steed, <%= name %>? Once you've fed a pet enough food to turn it into a mount, it will appear here. Click a mount to saddle up!", "mattBochText1": "Welcome to the Stable! I'm Matt, the beast master. After level 4, you can hatch pets using eggs and potions. When you hatch a pet in the Market, it will appear here! Click a pet's image to add it to your avatar. Feed them with the food you find after level 4, and they'll grow into powerful mounts.", "daniel": "Daniel", - "danielText": "Welcome to the Tavern! Stay a while and meet the locals. If you need to rest (vacation? illness?), I'll set you up at the Inn. While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off.", + "danielText": "Üdvözlet a Fogadóban! Maradj egy kicsit és találkozz a helyiekkel. Ha pihenni szeretnél (nyaralás? betegség?), elszállásollak a Fogadóban. Ameddig ott vagy, nem fognak a Napi feladatok a nap végén megsérteni, de ennek ellenére is kipipálhatod őket.", "danielText2": "Be warned: 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.", + "danielTextBroken": "Welcome to the Tavern... I guess... If you need to rest, I'll set you up at the Inn... While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off... if you have the energy...", + "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 a kereskedő", "welcomeMarket": "Üdvözöllek a Piacon! Vegyél ritka tojásokat és főzeteket. Add el a feleselges készleted. Vegyél igénybe hasznos szolgáltatásokat! Nézd meg mit tudunk ajánlani.", - "sellForGold": "<%= item %> eladása <%= gold %> aranyért", - "sellEggForGold": "<%= itemType %> Tojás eladása <%= gold %> Aranyért", - "sellPotionForGold": "<%= itemType %> Főzet eladása <%= gold %> Aranyért", + "displayItemForGold": "El akarod adni <%= itemType %>?", + "displayEggForGold": "Do you want to sell a <%= itemType %> Egg?", + "displayPotionForGold": "Do you want to sell a <%= itemType %> Potion?", + "sellForGold": "Add el <%= gold %> Aranyért", "buyGems": "Drágakő vásárlás", "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!", + "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...", "USD": "USD", "newStuff": "Új cucc", "cool": "Mondd el később", @@ -27,7 +31,7 @@ "payWithCard": "Fizess kártyával", "payNote": "Megj.: A PayPal néha elég lassú. Azt ajánljuk, hogy inkább kártyával fizess.", "card": "Kártya", - "amazonInstructions": "Click the button to pay using Amazon Payments", + "amazonInstructions": "Kattints a gombra, hogy az Amazon Payments-el fizess.", "paymentMethods": "Fizetési módok:", "classGear": "Kaszt felszerelés", "classGearText": "Először is: ne pánikolj! A régi felszerelésed a tárgylistában van és most a <%= klass %> tanonc felszerelés van rajtad. A saját osztályod felszerelésének a hordása 50%-os bónuszt ad a jellemzőidhez. Egyébként nyugodtan visszaveheted a régi felszerelésed.", @@ -59,18 +63,18 @@ "tourPetsPage": "This is the Stable! After level 4, you can hatch pets using eggs and potions. When you hatch a pet in the Market, it will appear here! Click a pet's image to add it to your avatar. Feed them with the food you find after level 4, and they'll grow into powerful mounts.", "tourMountsPage": "Once you've fed a pet enough food to turn it into a mount, it will appear here. (Pets, mounts, and food are available after level 4.) Click a mount to saddle up!", "tourEquipmentPage": "This is where your Equipment is stored! Your Battle Gear affects your stats. If you want to show different Equipment on your avatar without changing your stats, click \"Enable Costume.\"", - "tourOkay": "Okay!", - "tourAwesome": "Awesome!", - "tourSplendid": "Splendid!", - "tourNifty": "Nifty!", - "tourAvatarProceed": "Show me my tasks!", + "tourOkay": "Oké!", + "tourAwesome": "Fantasztikus!", + "tourSplendid": "Pompás!", + "tourNifty": "Remek!", + "tourAvatarProceed": "Mutasd a feladataimat!", "tourToDosBrief": "To-Do List
  • Check off To-Dos to earn Gold & Experience!
  • To-Dos never make your avatar lose Health.
", "tourDailiesBrief": "Daily Tasks
  • Dailies repeat every day.
  • You lose Health if you skip Dailies.
", - "tourDailiesProceed": "I'll be careful!", + "tourDailiesProceed": "Óvatos leszek!", "tourHabitsBrief": "Good & Bad Habits
  • Good Habits award Gold & Experience.
  • Bad Habits make you lose Health.
", "tourHabitsProceed": "Makes sense!", "tourRewardsBrief": "Reward List
  • Spend your hard-earned Gold here!
  • Purchase Equipment for your avatar, or set custom Rewards.
", - "tourRewardsProceed": "That's all!", + "tourRewardsProceed": "Ennyi!", "welcomeToHabit": "Welcome to Habitica!", "welcome1": "Create a basic avatar.", "welcome1notes": "This avatar will represent you as you progress.", diff --git a/common/locales/hu/pets.json b/common/locales/hu/pets.json index 1f29f75736..cd0d89593f 100644 --- a/common/locales/hu/pets.json +++ b/common/locales/hu/pets.json @@ -58,8 +58,16 @@ "firstDrop": "You've unlocked the Drop System! Now when you complete tasks, you have a small chance of finding an item, including eggs, potions, and food! You just found a <%= eggText %> Egg! <%= eggNotes %>", "useGems": "Ha megtetszik egy háziállat, de nem tudsz tovább várni arra, hogy megtaláld, használj Drágaköveket itt: Tárgylista > Piac a vásárláshoz!", "hatchAPot": "Kelteted a(z) <%= egg %>-t a(z) <%= potion %> -al?", + "hatchedPet": "You hatched a <%= potion %> <%= egg %>!", + "displayNow": "Display Now", + "displayLater": "Display Later", + "earnedCompanion": "With all your productivity, you've earned a new companion. Feed it to make it grow!", "feedPet": "Megeteted a(z) <%= article %><%= text %>-t a <%= name %>-el?", "useSaddle": "Felnyergeled a(z) <%= pet %>-t?", + "raisedPet": "You grew a <%= pet %>!", + "earnedSteed": "By completing your tasks, you've earned a faithful steed!", + "rideNow": "Ride Now", + "rideLater": "Ride Later", "petName": "<%= potion %> <%= egg %>", "mountName": "<%= potion %> <%= mount %>", "petKeyName": "Kulcs a ólakhoz", diff --git a/common/locales/hu/quests.json b/common/locales/hu/quests.json index 53c4b7c856..7d8adac0ae 100644 --- a/common/locales/hu/quests.json +++ b/common/locales/hu/quests.json @@ -13,10 +13,11 @@ "youReceived": "Amit kaptál", "dropQuestCongrats": "Congratulations on earning this quest scroll! You can invite your party to begin the quest now, or come back to it any time in your Inventory > Quests.", "questSend": "Clicking \"Invite\" will send an invitation to your party members. When all members have accepted or denied, the quest begins. See status under Social > Party.", + "questSendBroken": "Clicking \"Invite\" will send an invitation to your party members... When all members have accepted or denied, the quest begins... See status under Social > Party...", "inviteParty": "Csapat Meghívása Küldetéshez", "questInvitation": "Küldetés meghívás:", "questInvitationTitle": "Küldetés Meghívás", - "questInvitationInfo": "Invitation for the Quest <%= quest %>", + "questInvitationInfo": "Meghívás <%= quest %> küldetéshez", "askLater": "Kérdezd később", "questLater": "Küldetés Késöbb", "buyQuest": "Küldetés megvásárlása", @@ -24,19 +25,25 @@ "rejected": "Visszautasítva", "pending": "Várakozik", "questStart": "Miután minden tag elfogadta, vagy elutasította, a küldetés elkezdődik. Csak azok vehetnek részt benne, akik az \"elfogad\" opciót választották, és a tárgyakat is csak ők kapják meg. Ha egy tag túl sokáig várakozik (inaktív?), akkor indíthatsz nélkülük az \"Indít\" gomb megnyomásával.", + "questStartBroken": "Once all members have either accepted or rejected, the quest begins... Only those that clicked \"accept\" will be able to participate in the quest and receive the drops... If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\"... The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\"...", "begin": "Indít", "bossHP": "Főellenség életereje", "bossStrength": "Főellenség ereje", - "rage": "Rage", + "rage": "Harag", "collect": "Gyűjts be", "collected": "Begyűjtve", "collectionItems": "<%= number %> <%= items %>", "itemsToCollect": "Beszerzendő Tárgyak", "bossDmg1": "Each completed Daily and To-Do and each positive Habit hurts the boss. Hurt it more with redder tasks or Brutal Smash and Burst of Flames. The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies! All damage to and from a boss is tallied on cron (your day roll-over).", "bossDmg2": "Csak a résztvevők harcolnak a főellenséggel és ők osztják meg a küldetés zsákmányát is.", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "Each completed Daily and To-Do and each positive Habit hurts the boss... Hurt it more with redder tasks or Brutal Smash and Burst of Flames... The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies... All damage to and from a boss is tallied on cron (your day roll-over)...", + "bossDmg2Broken": "Only participants will fight the boss and share in the quest loot...", + "tavernBossInfo": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "tavernBossInfoBroken": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss... Incomplete Dailies fill the Exhaust Strike Bar... When the Exhaust Strike bar is full, the World Boss will attack an NPC... A World Boss will never damage individual players or accounts in any way... Only active accounts not resting in the Inn will have their tasks tallied...", "bossColl1": "Tárgygyűjtéshez végezd el a pozitív feladataidat. Küldetés tárgyak ugyanúgy esnek, mint normál tárgyak; bár ezeket nem látod a következő napig, amikor minden, amit találtál össze lesz vonva és hozzátéve a halomhoz.", "bossColl2": "Csak résztvevők kapják meg a tárgyat és részesülnek a kihívás zsákmányából.", + "bossColl1Broken": "To collect items, do your positive tasks... Quest items drop just like normal items; however, you won't see the drops until the next day, then everything you've found will be tallied up and contributed to the pile...", + "bossColl2Broken": "Only participants can collect items and share in the quest loot...", "abort": "Megszakít", "leaveQuest": "Küldetés Elhagyása", "sureLeave": "Are you sure you want to leave the active quest? All your quest progress will be lost.", @@ -50,23 +57,26 @@ "noScrolls": "Nincsenek küldetés tekercseid.", "scrollsText1": "Küldetést csak csapatban csinálhatsz. Ha egyedül szeretnéd csinálni, akkor", "scrollsText2": "hozz létre egy üres csapatot", - "scrollsPre": "You haven't unlocked this quest yet!", + "scrollsPre": "Még nem tártad fel ezt a küldetést!", "alreadyEarnedQuestLevel": "You already earned this quest by attaining Level <%= level %>.", - "alreadyEarnedQuestReward": "You already earned this quest by completing <%= priorQuest %>.", + "alreadyEarnedQuestReward": "Már elnyerted ezt a küldetést, mivel megcsináltad a következő küldetést: <%= priorQuest %>.", "completedQuests": "Ezeken a küldetéseken vett részt:", "mustComplete": "Először teljesítened kell a küldetést <%= quest %>.", - "mustLevel": "You must be level <%= level %> to begin this quest.", + "mustLevel": "<%= level %> szintűnek kell lenned, hogy elkezdhesd ezt a küldetést.", "mustLvlQuest": "<%= level %> szintűnek kell lenned, hogy megvehesd ezt a küldetést.", - "mustInviteFriend": "To earn this quest, invite a friend to your Party. Invite someone now?", - "unlockByQuesting": "To earn this quest, complete <%= title %>.", + "mustInviteFriend": "Ahhoz, hogy elnyerd ezt a küldetést, hívj meg egy barátot a csapatodba. Meghívsz most valakit?", + "unlockByQuesting": "Ahhoz, hogy elnyerd ezt a küldetést, fejezd be: <%= title %>.", "sureCancel": "Biztosan meg akarod szakítani ezt a küldetést? Minden meghívási beleegyezés el fog veszni. A küldetés tulajdonosa megtartja a küldetés tekercset.", "sureAbort": "Biztosan el akarod hagyni ezt a küldetést? Ez meg fogja szakítani mindenkinek a csapatodban, és minden haladás el fog veszni. A küldetés tekercs vissza fog kerülni a küldetés tulajdonosához.", "doubleSureAbort": "Tuti biztos vagy benne? Győződj meg róla, hogy nem fognak a többiek utálni!", "questWarning": "Ha új játékosok csatlakoznak a csapathoz a küldetés indulása előtt, akkor ők is kapnak meghívót. Egyébként, ha a küldetés indulása után csatlakozik valaki, az nem tud részt venni benne.", + "questWarningBroken": "If new players join the party before the quest starts, they will also receive an invitation... However once the quest has started, no new party members can join the quest...", "bossRageTitle": "Örjöngés", "bossRageDescription": "Ha ez a sáv megtelik, akkor a Főellenség egy speciális támadást szabadít ránk.", - "startAQuest": "START A QUEST", - "startQuest": "Start Quest", - "whichQuestStart": "Which quest do you want to start?", - "getMoreQuests": "Get more quests" + "startAQuest": "KEZDD EL A KÜLDETÉST", + "startQuest": "Kezdd el a küldetést", + "whichQuestStart": "Melyik küldetést szeretnéd elkezdeni?", + "getMoreQuests": "Szerezz több küldetést", + "unlockedAQuest": "Feltártál egy küldetést!", + "leveledUpReceivedQuest": "You leveled up to Level <%= level %> and received a quest scroll!" } \ No newline at end of file diff --git a/common/locales/hu/questscontent.json b/common/locales/hu/questscontent.json index 0cd23630be..18a7fd323b 100644 --- a/common/locales/hu/questscontent.json +++ b/common/locales/hu/questscontent.json @@ -261,5 +261,17 @@ "questBurnoutDropPhoenixMount": "Phoenix (Mount)", "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!", + "questFrogText": "Swamp of the Clutter Frog", + "questFrogNotes": "As you and your friends are slogging through the Swamps of Stagnation, @starsystemic points at a large sign. \"Stay on the path -- if you can.\"

\"Surely that isn't hard!\" @RosemonkeyCT says. \"It's broad and clear.\"

But as you continue, you notice that path is gradually overtaken by the muck of the swamp, laced with bits of strange blue debris and clutter, until it's impossible to proceed.

As you look around, wondering how it got this messy, @Jon Arjinborn shouts, \"Look out!\" An angry frog leaps from the sludge, clad in dirty laundry and lit by blue fire. You will have to overcome this poisonous Clutter Frog to progress!", + "questFrogCompletion": "The frog cowers back into the muck, defeated. As it slinks away, the blue slime fades, leaving the way ahead clear.

Sitting in the middle of the path are three pristine eggs. \"You can even see the tiny tadpoles and through the clear casing!\" @Breadstrings says. \"Here, you should take them.\"", + "questFrogBoss": "Clutter Frog", + "questFrogDropFrogEgg": "Frog (Egg)", + "questFrogUnlockText": "Unlocks purchasable Frog eggs in the Market", + "questSnakeText": "The Serpent of Distraction", + "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveler astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", + "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", + "questSnakeBoss": "Serpent of Distraction", + "questSnakeDropSnakeEgg": "Snake (Egg)", + "questSnakeUnlockText": "Unlocks purchasable Snake eggs in the Market" } \ No newline at end of file diff --git a/common/locales/hu/rebirth.json b/common/locales/hu/rebirth.json index d2ec863978..9483e0bb6c 100644 --- a/common/locales/hu/rebirth.json +++ b/common/locales/hu/rebirth.json @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "Kapsz továbbá egy Kitűntetést, amiért új kalandot kezdesz!", "beReborn": "Szüless Újjá", "rebirthAchievement": "Új kalandot kezdtél! Ez a(z) <%= number %>. Újjászületésed. A legmagasabb szint, amit elértél: <%= level %>. Ahhoz, hogy halmozd ezt a Kitüntetést kezdj új kalandot, amikor elértél egy még magasabb Szintet!", + "rebirthAchievement100": "Már elkezdtél egy új kalandot! Ez a <%= number %>. Újjászületésed, és a legmagasabb szint amit elértél 100, vagy több. Hogy elrakd ezt a kitüntetést, kezdj egy új kalandot, amikor 100-as vagy magasabb szinten vagy!", "rebirthBegan": "Új Kalandot kezdtél", "rebirthText": "Eddig <%= rebirths %> Új Kalandot kezdtél", "rebirthOrb": "Az Újjászületés Gömbjét használtad, hogy újrakezdj miután elérted ezt a Szintet", + "rebirthOrb100": "Használtad az Újjászületés Gömbjét, hogy újrakezd, miután elérted a 100-as, vagy magasabb szintet", "rebirthPop": "Kezdj új karaktert 1-es Szinttől, megtartva a kitűntetéseidet, a gyűjteményeidet, a feladataidat és a történetedet.", "rebirthName": "Az Újjászületés Gömbje", "reborn": "Újjászülettél, maximális szint <%= reLevel %>" diff --git a/common/locales/hu/settings.json b/common/locales/hu/settings.json index 24f1a956bd..b5cc7e7d0e 100644 --- a/common/locales/hu/settings.json +++ b/common/locales/hu/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "Ha ez be van állítva, akkor a cimkelista el lesz rejtve, amikor megnyitsz egy feladatot szerkesztésre.", "startAdvCollapsed": "A Haladó Beállítások a feladatoknál összecsukva indulnak.", "startAdvCollapsedPop": "Ha ez be van állítva, akkor a Haladó Beállítások el lesznek rejtve, amikor először megnyitsz egy feladatot szerkesztésre.", + "dontShowAgain": "Ne mutasd többet", + "suppressLevelUpModal": "Ne legyen felugró ablak szintlépéskor", + "suppressHatchPetModal": "Ne legyen felugró ablak háziállat kikelésekor", + "suppressRaisePetModal": "Ne legyen felugró ablak, amikor a háziállatból hátas lesz", + "suppressStreakModal": "Don't show popup when attaining a Streak achievement", "showTour": "Mutasd a bemutatót", "restartTour": "A bevezető újraindítása onnantól, hogy csatlakoztál a Habitica-hez.", "showBailey": "Mutasd Bailey-t", @@ -81,7 +86,6 @@ "emailChange1": "Az email címed megváltoztatásához kérjük küldj egy emailt a", "emailChange2": "admin@habitica.com-ra", "emailChange3": "a régi és az új email címeddel és a felhasználói azonosítóddal.", - "username": "Bejelentkezési név", "usernameOrEmail": "Login név vagy email cím", "email": "Email", "registeredWithFb": "Facebook-al regisztráltál", @@ -89,7 +93,7 @@ "loginNameDescription2": "Felhasználó->Profil", "loginNameDescription3": "oldalra hogy megváltoztasd a nevedet ami a avatarodnál és a chat üzeneteknél megjelenik.", "emailNotifications": "Email értesítések", - "wonChallenge": "Megnyertél egy Kihívást", + "wonChallenge": "Megnyertél egy kihívást!", "newPM": "Kaptál egy Privát üzenetet", "giftedGems": "Ajándékoztál Drágaköveket", "giftedGemsInfo": "<%= amount %> Gems - by <%= name %>", @@ -118,5 +122,29 @@ "promoCode": "Promóciós kód", "promoCodeApplied": "Promóciós kód elfogadva! Ellenőrizd le a tárgylistád", "promoPlaceholder": "Írd be a Promóciós kódodat", - "displayInviteToPartyWhenPartyIs1": "Display Invite To Party button when party has 1 member." + "displayInviteToPartyWhenPartyIs1": "Display Invite To Party button when party has 1 member.", + "saveCustomDayStart": "Save Custom Day Start", + "registration": "Regisztráció", + "addLocalAuth": "Add local authentication:", + "generateCodes": "Generate Codes", + "generate": "Generate", + "getCodes": "Get Codes", + "webhooks": "Webhooks", + "enabled": "Enabled", + "webhookURL": "Webhook URL", + "add": "Add", + "buyGemsGoldCap": "Cap raised to <%= amount %>", + "mysticHourglass": "<%= amount %> Mystic Hourglass", + "mysticHourglassText": "Mystic Hourglasses allow purchasing a previous month's Mystery Item set.", + "purchasedPlanId": "Recurring $<%= price %> each <%= months %> Month(s) (<%= plan %>)", + "purchasedPlanExtraMonths": "You have <%= months %> months of subscription credit.", + "consecutiveSubscription": "Consecutive Subscription", + "consecutiveMonths": "Consecutive Months:", + "gemCapExtra": "Gem Cap Extra:", + "mysticHourglasses": "Mystic Hourglasses:", + "paypal": "PayPal", + "amazonPayments": "Amazon Payments", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/hu/spells.json b/common/locales/hu/spells.json index 1d16da6190..bb4c5ef255 100644 --- a/common/locales/hu/spells.json +++ b/common/locales/hu/spells.json @@ -24,13 +24,13 @@ "spellRogueStealthText": "Lopakodás", "spellRogueStealthNotes": "You are too sneaky to spot. Some of your undone Dailies will not cause damage tonight, and their streaks/color will not change. (Cast multiple times to affect more Dailies)", "spellHealerHealText": "Gyógyító fény", - "spellHealerHealNotes": "Light covers your body, healing your wounds. You regain health! (Based on: CON and INT)", + "spellHealerHealNotes": "Fények borítják a testedet, és gyógyítják a sebeidet. Visszanyered az egészségedet! (Az alkotmány és a hírszerzés alapján)", "spellHealerBrightnessText": "Perzselő ragyogás", - "spellHealerBrightnessNotes": "A burst of light dazzles your tasks. They become more blue and less red! (Based on: INT)", + "spellHealerBrightnessNotes": "A robbanás a fény kápráztatja el feladataidat. Kékké és kevésbé vörössé válnak! (A hírszerzés alapján)", "spellHealerProtectAuraText": "Védelmező aura", "spellHealerProtectAuraNotes": "You shield your party from damage. Your whole party gains a buff to Constitution! (Based on: Unbuffed CON)", "spellHealerHealAllText": "Áldás", - "spellHealerHealAllNotes": "A soothing aura surrounds you. Your whole party regains health! (Based on: CON and INT)", + "spellHealerHealAllNotes": "Nyugtató aura vesz körül. Az egész csapat visszanyeri egészségét! (Az alkotmány és hírszerzés alapján)", "spellSpecialSnowballAuraText": "Hógolyó", "spellSpecialSnowballAuraNotes": "Megdobsz egy csapttagot hógolyóval, ugyan mi rossz történhet? A csapattag új napjáig marad érvényben.", "spellSpecialSaltText": "Só", @@ -39,12 +39,12 @@ "spellSpecialSpookDustNotes": "Turn a friend into a floating blanket with eyes!", "spellSpecialOpaquePotionText": "Opálos főzet", "spellSpecialOpaquePotionNotes": "Szűntesd meg a Kísérteties sziporkák hatását.", - "spellSpecialShinySeedText": "Shiny Seed", - "spellSpecialShinySeedNotes": "Turn a friend into a joyous flower!", - "spellSpecialPetalFreePotionText": "Petal-Free Potion", - "spellSpecialPetalFreePotionNotes": "Cancel the effects of a Shiny Seed.", - "spellSpecialSeafoamText": "Seafoam", - "spellSpecialSeafoamNotes": "Turn a friend into a sea creature!", + "spellSpecialShinySeedText": "Fényes mag", + "spellSpecialShinySeedNotes": "Változtass át egy barátot egy vidám virággá!", + "spellSpecialPetalFreePotionText": "Szirom nélküli főzet", + "spellSpecialPetalFreePotionNotes": "Fényes mag hatásának megszüntetése.", + "spellSpecialSeafoamText": "Tengerhab", + "spellSpecialSeafoamNotes": "Változtass át egy barátot tengeri lénnyé!", "spellSpecialSandText": "Homok", - "spellSpecialSandNotes": "Cancel the effects of Seafoam." + "spellSpecialSandNotes": "Tengerhab hatásának megszüntetése." } \ No newline at end of file diff --git a/common/locales/hu/subscriber.json b/common/locales/hu/subscriber.json index a1e0d6b019..894e32831e 100644 --- a/common/locales/hu/subscriber.json +++ b/common/locales/hu/subscriber.json @@ -60,7 +60,7 @@ "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> és <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitle": "Titokzatos időutazók", "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.", - "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 <%= linkStart %>here<%= linkEnd %>! If those don't satisfy you, perhaps you'd be interested in one of our fashionably futuristic Steampunk Item Sets?", + "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!", "subUpdateCard": "Kártya frissítése", @@ -69,7 +69,7 @@ "notEnoughHourglasses": "You don't have enough Mystic Hourglasses.", "hourglassBuyEquipSetConfirm": "Buy this full set of items for 1 Mystic Hourglass?", "hourglassBuyItemConfirm": "Buy this item for 1 Mystic Hourglass?", - "petsAlreadyOwned": "Pet already owned.", + "petsAlreadyOwned": "A háziállat már megvan neked.", "mountsAlreadyOwned": "Mount already owned.", "typeNotAllowedHourglass": "Item type not supported for purchase with Mystic Hourglass. Allowed types:", "petsNotAllowedHourglass": "Pet not available for purchase with Mystic Hourglass.", diff --git a/common/locales/hu/tasks.json b/common/locales/hu/tasks.json index 73181b3a80..04b69a181a 100644 --- a/common/locales/hu/tasks.json +++ b/common/locales/hu/tasks.json @@ -38,7 +38,7 @@ "streakCounter": "Szériaszámláló", "repeat": "Ismétlés", "repeatEvery": "Ismétel minden", - "repeatHelpTitle": "How often should this task be repeated?", + "repeatHelpTitle": "Milyen gyakran ismétlődjön ez a feladat?", "dailyRepeatHelpContent": "This task will be due every X days. You can set that value below.", "weeklyRepeatHelpContent": "This task will be due on the highlighted days below. Click on a day to activate/deactivate it.", "repeatDays": "Minden X nap", @@ -54,7 +54,7 @@ "complete": "Befejezett", "dated": "Határidős", "due": "Hátralevő", - "notDue": "Not Due", + "notDue": "nem esedékes", "grey": "Szürke", "score": "Pontszám", "rewards": "Jutalmak", @@ -88,23 +88,22 @@ "fortifyText": "Fortify will return all your tasks to a neutral (yellow) state, as if you'd just added them, and top your Health off to full. This is great if all your red tasks are making the game too hard, or all your blue tasks are making the game too easy. If starting fresh sounds much more motivating, spend the Gems and catch a reprieve!", "sureDelete": "Biztos vagy benne, hogy törölni akarod ezt a feladatot?", "streakCoins": "Széria bónusz!", - "pushTaskToTop": "Tetejére", - "pushTaskToBottom": "Rakd a feladatot legalulra", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "Előbb írd be a feladat címét.", "dailiesRestingInInn": "You're Resting in the Inn! Your Dailies will NOT hurt you tonight, but they WILL still refresh every day. If you're in a quest, you won't deal damage/collect items until you check out of the Inn, but you can still be injured by a Boss if your Party mates skip their own Dailies.", "habitHelp1": "Jó szokások olyan dolgok, amiket gyakran csinálsz. Aranyat és tapasztalatot adnak minden alkalommal amikor a <%= plusIcon %> kattintasz.", "habitHelp2": "Rossz szokások olyan dolgok, amiket inkább el akarsz kerülni. Csökkentik az életedet minden alkalommal, amikor a <%= minusIcon %> kattintasz.", - "habitHelp3": "For inspiration, check out these sample Habits!", + "habitHelp3": "Ihletért, nézd meg ezeket a példa szokásokat!", "newbieGuild": "Van még kérdésed? Tedd fel a kérdésed a <%= linkStart %>Newbies Guild<%= linkEnd %> céhben!", "dailyHelp1": "Dailies repeat <%= emphasisStart %>every day<%= emphasisEnd %> that they are active. Click the <%= pencilIcon %> to change the days a Daily is active.", "dailyHelp2": "Ha nem teljesíted az aktív napi feladataid, akkor életerőt vesztesz, amikor új nap kezdődik.", "dailyHelp3": "Dailies turn <%= emphasisStart %>redder<%= emphasisEnd %> when you miss them, and <%= emphasisStart %>bluer<%= emphasisEnd %> when you complete them. The redder the Daily, the more it will reward you... or hurt you.", "dailyHelp4": "Ha meg szeretnéd változtatni, hogy mikor kezdődjön az új nap, menj a <%= linkStart %>Beállítások > Honlap<%= linkEnd %> > Egyedi nap indításához.", - "dailyHelp5": "For inspiration, check out these sample Dailies!", + "dailyHelp5": "Ihletért, nézd meg ezeket a minta napi feladatokat!", "toDoHelp1": "A tennivalók sárgán indulnak, és minél tovább tart teljesíteni annál pirosabbak (értékesebbek) lesznek.", "toDoHelp2": "A tennivalók sosem sebeznek! Csak aranyat és tapasztalatot adnak.", "toDoHelp3": "Ha egy tennivalót listára bontasz, nem lesz olyan félelmetes, és növeli a tapsztalatot!", - "toDoHelp4": "For inspiration, check out these sample To-Dos!", + "toDoHelp4": "Ihletért, nézd meg ezeket a minta tennivalókat!", "rewardHelp1": "Az avatárodnak vásárolt felszerelést a <%= linkStart %>Tárgylista > Felszerelés<%= linkEnd %> alatt találod.", "rewardHelp2": "A felszerelések hatással vannak a tulajdonságaidra (<%= linkStart %>Avatar > Stats<%= linkEnd %>).", "rewardHelp3": "Különleges felszerelések itt jelennek meg a Globális Eseményekkor.", diff --git a/common/locales/it/backgrounds.json b/common/locales/it/backgrounds.json index 83b7196d3b..43a9d4553e 100644 --- a/common/locales/it/backgrounds.json +++ b/common/locales/it/backgrounds.json @@ -112,11 +112,25 @@ "backgroundStableNotes": "Prenditi cura degli animali nella Scuderia.", "backgroundTavernText": "Taverna di Habitica", "backgroundTavernNotes": "Fai una visita alla Taverna.", - "backgrounds102015": "SET 17: Released October 2015", - "backgroundHarvestMoonText": "Harvest Moon", - "backgroundHarvestMoonNotes": "Cackle under the Harvest Moon.", - "backgroundSlimySwampText": "Slimy Swamp", - "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", - "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgrounds102015": "SERIE 17: Ottobre 2015", + "backgroundHarvestMoonText": "Luna del Raccolto ", + "backgroundHarvestMoonNotes": "Canta al chiarore della Luna del Raccolto.", + "backgroundSlimySwampText": "Palude Melmosa ", + "backgroundSlimySwampNotes": "Arranca attraverso una palude melmosa.", + "backgroundSwarmingDarknessText": "Oscurità Brulicante", + "backgroundSwarmingDarknessNotes": "Un'oscurità che mette i brividi.", + "backgrounds112015": "SERIE 18: Novembre 2015 ", + "backgroundFloatingIslandsText": "Isole Fluttuanti", + "backgroundFloatingIslandsNotes": "Saltella tra le isole fluttuanti.", + "backgroundNightDunesText": "Dune Notturne", + "backgroundNightDunesNotes": "Fai una passeggiata notturna tra le dune.", + "backgroundSunsetOasisText": "Oasi al tramonto", + "backgroundSunsetOasisNotes": "Goditi l'oasi durante il tramonto.", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/it/challenge.json b/common/locales/it/challenge.json index 46ae7003a8..2b0982dcf2 100644 --- a/common/locales/it/challenge.json +++ b/common/locales/it/challenge.json @@ -59,5 +59,9 @@ "challengeNotEnoughGems": "Non hai abbastanza gemme per creare questa sfida.", "noPermissionEditChallenge": "Non hai i permessi per modificare questa sfida", "noPermissionDeleteChallenge": "Non hai i permessi per eliminare questa sfida", - "noPermissionCloseChallenge": "Non hai i permessi per concludere questa sfida" + "noPermissionCloseChallenge": "Non hai i permessi per concludere questa sfida", + "congratulations": "Congratulazioni!", + "hurray": "Evviva!", + "noChallengeOwner": "nessun proprietario", + "noChallengeOwnerPopover": "Questa sfida non ha un proprietario perché la persona che ha creato la sfida ha eliminato il proprio account." } \ No newline at end of file diff --git a/common/locales/it/character.json b/common/locales/it/character.json index 6dfa29fd11..e7cceb1379 100644 --- a/common/locales/it/character.json +++ b/common/locales/it/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "Bonus classe", "battleGear": "Assetto di battaglia", "battleGearText": "Questo è l'equipaggiamento che indossi in battaglia, esso modifica alcuni valori quando interagisci con le tue attività.", + "autoEquipBattleGear": "Equipaggia automaticamente nuovi oggetti", "costume": "Costume", "costumeText": "Se preferisci il look di oggetti diversi da quelli equipaggiati, metti una spunta su \"Usa costume\" per visualizzare un costume anzichè l'equipaggiamento da battaglia (nonostante il cambio di aspetto, rimangono tutti i bonus delle armi e delle armature).", "useCostume": "Usa costume", @@ -64,9 +65,13 @@ "ultimGearText": "Ha potenziato al massimo armi e armatura per le seguenti classi:", "level": "Livello", "levelUp": "Livello aumentato!", + "gainedLevel": "Nuovo lìvello!", + "leveledUp": "Completando obiettivi nella vita reale, hai raggiunto il livello <%= level %>!", + "fullyHealed": "Salute ripristinata!", + "huzzah": "Urrà!", "mana": "Mana", - "hp": "HP", - "mp": "MP", + "hp": "PV", + "mp": "PM", "xp": "XP", "health": "Salute", "allocateStr": "Punti assegnati a Forza:", diff --git a/common/locales/it/content.json b/common/locales/it/content.json index f4f8af8a20..054e0537cd 100644 --- a/common/locales/it/content.json +++ b/common/locales/it/content.json @@ -78,14 +78,14 @@ "questEggBunnyMountText": "Coniglietto", "questEggBunnyAdjective": "un coccoloso", "questEggSlimeText": "Gelatina di Marshmallow", - "questEggSlimeMountText": "Marshmallow Slime", - "questEggSlimeAdjective": "a sweet", + "questEggSlimeMountText": "Gelatina di Marshmallow", + "questEggSlimeAdjective": "un dolce", "questEggSheepText": "Pecorella", - "questEggSheepMountText": "Pecorella", + "questEggSheepMountText": "Pecora", "questEggSheepAdjective": "una soffice", "questEggCuttlefishText": "Seppia", "questEggCuttlefishMountText": "Seppia", - "questEggCuttlefishAdjective": "un grazioso", + "questEggCuttlefishAdjective": "una graziosa", "questEggWhaleText": "Balena", "questEggWhaleMountText": "Balena", "questEggWhaleAdjective": "una zampillante", @@ -95,6 +95,12 @@ "questEggHorseText": "Cavallo", "questEggHorseMountText": "Cavallo", "questEggHorseAdjective": "un galoppante", + "questEggFrogText": "Rana", + "questEggFrogMountText": "Rana", + "questEggFrogAdjective": "una principesca", + "questEggSnakeText": "Serpente", + "questEggSnakeMountText": "Serpente", + "questEggSnakeAdjective": "un sinuoso", "eggNotes": "Trova una pozione per far schiudere questo uovo, e nascerà <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "Base", "hatchingPotionWhite": "Bianco", @@ -106,9 +112,9 @@ "hatchingPotionCottonCandyPink": "Rosa Zucchero Filato", "hatchingPotionCottonCandyBlue": "Blu Zucchero Filato", "hatchingPotionGolden": "Oro", - "hatchingPotionSpooky": "Spooky", + "hatchingPotionSpooky": "Spettrale", "hatchingPotionNotes": "Versa questa pozione su un uovo, e nascerà un animale <%= potText(locale) %>.", - "premiumPotionAddlNotes": "Not usable on quest pet eggs.", + "premiumPotionAddlNotes": "Non utilizzabile su uova di animali ottenute dalle missioni.", "foodMeat": "Carne", "foodMilk": "Latte", "foodPotatoe": "Patata", diff --git a/common/locales/it/death.json b/common/locales/it/death.json index 703609d994..c3b758258e 100644 --- a/common/locales/it/death.json +++ b/common/locales/it/death.json @@ -1,15 +1,15 @@ { "lostAllHealth": "Hai finito i punti salute!", "dontDespair": "Non disperarti!", - "deathPenaltyDetails": "Hai perso un livello, il tuo oro e un pezzo di equipaggiamento, ma puoi recuperare tutto lavorando sodo! Buona fortuna - vedrai che ce la farai.", + "deathPenaltyDetails": "Hai perso un livello, il tuo oro e un oggetto del tuo equipaggiamento, ma potrai recuperare tutto lavorando sodo! Buona fortuna - vedrai che ce la farai.", "refillHealthTryAgain": "Ripristina salute e riprovaci", "dyingOftenTips": "Succede spesso? Qui trovi qualche consiglio! (in inglese)", "losingHealthWarning": "Attenzione - stai perdendo Salute!", - "losingHealthWarning2": "Non lasciare che i tuoi punti salute scendano a zero! Se lo farai, perderai un livello, il tuo Oro e un pezzo di equipaggiamento.", + "losingHealthWarning2": "Non lasciare che la tua Salute scenda a zero! Se lo farai, perderai un livello, il tuo Oro e un pezzo di equipaggiamento.", "toRegainHealth": "Per ripristinare la Salute:", "lowHealthTips1": "Sali di livello per curarti completamente!", "lowHealthTips2": "Compra una Pozione di Salute nella colonna delle Ricompense per ripristinare 15 punti Salute.", - "losingHealthQuickly": "Perdi punti Salute rapidamente?", + "losingHealthQuickly": "Perdi Salute rapidamente?", "lowHealthTips3": "Le Daily incomplete ti danneggiano a fine giornata, quindi fai attenzione a non aggiungerne troppe tutte insieme!", "lowHealthTips4": "Se una Daily non va completata in un certo giorno, puoi disattivarla cliccando sull'icona a forma di matita.", "goodLuck": "Buona fortuna!" diff --git a/common/locales/it/defaulttasks.json b/common/locales/it/defaulttasks.json index 4d68e44378..11806217d7 100644 --- a/common/locales/it/defaulttasks.json +++ b/common/locales/it/defaulttasks.json @@ -1,7 +1,7 @@ { "defaultHabit1Text": "Attività produttiva (Fai click sulla matita per modificare)", "defaultHabit1Notes": "Esempi di buone abitudini: + Mangia della verdura + 15 minuti di attività produttiva", - "defaultHabit2Text": "Mangia cibo spazzatura (Fai click sulla matita per modificare)", + "defaultHabit2Text": "Mangia Cibo Spazzatura (Fai click sulla matita per modificare)", "defaultHabit2Notes": "Esempi di cattive abitudini: - Fumare - Procrastinare", "defaultHabit3Text": "Usa le scale/l'ascensore (Fai click sulla matita per modificare)", "defaultHabit3Notes": "Esempi di buone/cattive abitudini: +/- Ho usato le scale/ascensore ; +/- Bevuto acqua/bibita", diff --git a/common/locales/it/faq.json b/common/locales/it/faq.json index 6e72654d14..574756fbc2 100644 --- a/common/locales/it/faq.json +++ b/common/locales/it/faq.json @@ -2,11 +2,11 @@ "frequentlyAskedQuestions": "Domande frequenti", "faqQuestion0": "Sono confuso. Come funziona Habitica?", "iosFaqAnswer0": "Per prima cosa, imposterai un'attività che vuoi completare nella vita di tutti i giorni, quindi, completando le tue attività nella vita vera e spuntandole, riceverai esperienza ed oro. L'oro è usato per comprare equipaggiamento e alcuni item, insieme ad dei premi personalizzati. L'esperienza serve a far salire di livello il tuo personaggio e sbloccare contenuti come animali domestici, abilità, e missioni! Puoi personalizzare il tuo personaggio in Menu > Personalizza Avatar.\n\nAlcuni metodi basilari per interagire: cliccare il (+) nell'angolo in alto a destra per aggiungere una nuova attività. Cliccare su un'attività già presente per modificarla e strisciare verso sinistra per eliminarla. Puoi organizare le attività usando le etichette nell'angolo in alto a sinistra, espandi e contrai checklist cliccando nella bolla vicine alle suddette.", - "webFaqAnswer0": "Per prima cosa, imposterai un'attività che vuoi completare nella vita di tutti i giorni, quindi, completando le tue attività nella vita vera e spuntandole, riceverai esperienza ed oro. L'oro è usato per comprare equipaggiamento e alcuni item, insieme ad dei premi personalizzati. L'esperienza serve a far salire di livello il tuo personaggio e sbloccare contenuti come animali domestici, abilità, e missioni! Consulta il quadro generale passo per passo della Wiki per maggiori informazioni! [Clicca qui](http://habitica.wikia.com/wiki/Habitica_Wiki).", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", "faqQuestion1": "Come imposto le mie attività?", - "iosFaqAnswer1": "Le Good Habits (quelle con il +) sono attività che puoi fare più volte al giorno, come \"Mangiare verdure, \"Fare sport\" ecc.\nLe Bad Habits (quelle con il -) sono attività che dovresti evitare, come \"Mordersi le unghie\", \"Mangiare fritto\" ecc.\nLe Habits con un + ed un - hanno una scelta buona ed una cattiva, come prendere le scale al posto di usare l'ascensore. Le Good Habits garantiscono punti esperienza ed oro, le Bad Habits tolgono punti vita.\nLe Dailies sono attività che compi ogni giorno, come \"Lavare i denti\" o \"Controllare la mail\". Puoi semplicemente assegnare una Daily ai giorni in cui vuoi impostarla cliccando su Modifica. Se salti una Daily assegnata, il tuo Avatar subirà danno durante la notte. Fai attenzione a non aggiungere troppe Daily in una sola volta!\nI To-Do si trovano nella tua lista To-Do. Completando una To-Do guadagni oro e punti esperienza.Non perderai mai punti vita dalle To-Do. Puoi aggiungere una data di scadenza alle To-Do cliccando su Modifica.", - "webFaqAnswer1": "Le Good Habits (quelle con il ) sono attività che puoi fare più volte al giorno, come \"Mangiare verdure, \"Fare sport\" ecc.
\nLe Bad Habits (quelle con il ) sono attività che dovresti evitare, come \"Mordersi le unghie\", \"Mangiare fritto\" ecc.
\nLe Habits con un ed un hanno una scelta buona ed una cattiva, come prendere le scale al posto di usare l'ascensore. Le Good Habits garantiscono punti esperienza ed oro, le Bad Habits tolgono punti vita.
\nLe Dailies sono attività che compi ogni giorno, come \"Lavare i denti\" o \"Controllare la mail\". Puoi semplicemente assegnare una Daily ai giorni in cui vuoi impostarla cliccando su Modifica. Se salti una Daily assegnata, il tuo Avatar subirà danno durante la notte. Fai attenzione a non aggiungere troppe Daily in una sola volta!
\nI To-Do si trovano nella tua lista To-Do. Completando una To-Do guadagni oro e punti esperienza.Non perderai mai punti vita dalle To-Do. Puoi aggiungere una data di scadenza alle To-Do cliccando su Modifica.", - "faqQuestion2": "Quali sono alcuni attività d'esempio?", + "iosFaqAnswer1": "Le Buone Abitudini (quelle con il +) sono attività che puoi fare più volte al giorno, come \"Mangiare verdure, \"Fare sport\" ecc. Le Cattive Abitudini (quelle con il -) sono attività che dovresti evitare, come \"Mordersi le unghie\", \"Mangiare fritto\" ecc. Le Abitudini con un + ed un - hanno una scelta buona ed una cattiva, come prendere le scale al posto di usare l'ascensore. Le Buone Abitudini garantiscono punti esperienza ed oro.Lle Cattive Abitudini tolgono punti vita.\n\nLe Dailies sono attività che compi ogni giorno, come \"Lavare i denti\" o \"Controllare la mail\". Puoi semplicemente assegnare una Daily ai giorni in cui vuoi impostarla cliccando su Modifica. Se salti una Daily assegnata, il tuo Avatar subirà danno durante la notte. Fai attenzione a non aggiungere troppe Daily in una sola volta!\n\nI To-Do si trovano nella tua lista To-Do. Completando una To-Do guadagni oro e punti esperienza. Non perderai mai punti vita dalle To-Do. Puoi aggiungere una data di scadenza alle To-Do cliccando su Modifica.", + "webFaqAnswer1": "Le Buone Abitudini (quelle con il ) sono attività che puoi fare più volte al giorno, come \"Mangiare verdure, \"Fare sport\" ecc. Le Cattive Abitudini quelle con il ) sono attività che dovresti evitare, come \"Mordersi le unghie\", \"Mangiare fritto\" ecc. Le Abitudini con un ed un hanno una scelta buona ed una cattiva, come prendere le scale al posto di usare l'ascensore. Le Buone Abitudini garantiscono punti esperienza ed oro. Le Cattive Abitudini tolgono punti vita.\n

\nLe Dailies sono attività che compi ogni giorno, come \"Lavare i denti\" o \"Controllare la mail\". Puoi semplicemente assegnare una Daily ai giorni in cui vuoi impostarla cliccando su Modifica. Se salti una Daily assegnata, il tuo Avatar subirà danno durante la notte. Fai attenzione a non aggiungere troppe Daily in una sola volta!\n

\nI To-Do si trovano nella tua lista To-Do. Completando una To-Do guadagni oro e punti esperienza.Non perderai mai punti vita dalle To-Do. Puoi aggiungere una data di scadenza alle To-Do cliccando su Modifica.", + "faqQuestion2": "Quali sono alcuni esempi di attività?", "iosFaqAnswer2": "La Wiki ha 4 liste di attività d'esempio per prendere ispirazione:\n

\n* [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n* [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n* [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n* [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", "webFaqAnswer2": "La Wiki ha 4 liste di attività d'esempio per prendere ispirazione:\n* [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n* [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n* [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n* [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", "faqQuestion3": "Perchè le mie attività cambiano colore?", @@ -16,26 +16,29 @@ "iosFaqAnswer4": "Ci sono diverse ragioni per cui puoi venire ferito. Il motivo principale e' l'aver lasciato incompiute alcune tue Dailies durante la notte, queste mancanze ti danneggiano. In secondo luogo, se clicchi su di una Habit negativa, questa ti danneggera'. Ed in fine, se ti trovi a fronteggiare un Boss in una battaglia con la tua Squadra ed uno dei tuoi compagni non completa tutte le sue Dailies, il Boss vi attacchera'.\n\nLa via principale per riguadagnare i tuoi punti salute e' salire di livello, questo ti fara' recuperare completamente salute. Puoi inoltre comprare con dell'oro una Pozione Salute nella colonna delle Ricompense. Inoltre, dal livello 10 in poi, puoi scegliere di diventare un Guaritore ed imparerai cosi' degli incantesimi di guarigione. Se ti trovi in Squadra con un Guaritore, puoi beneficiare del suo aiuto.", "webFaqAnswer4": "Ci sono diverse ragioni per cui puoi venire ferito. Il motivo principale e' l'aver lasciato incompiute alcune tue Dailies durante la notte, queste mancanze ti danneggiano. In secondo luogo, se clicchi su di una Habit negativa, questa ti danneggera'. Ed in fine, se ti trovi a fronteggiare un Boss in una battaglia con la tua Squadra ed uno dei tuoi compagni non completa tutte le sue Dailies, il Boss vi attacchera'.\n

\nLa via principale per riguadagnare i tuoi punti salute e' salire di livello, questo ti fara' recuperare completamente salute. Puoi inoltre comprare con dell'oro una Pozione Salute nella colonna delle Ricompense. Inoltre, dal livello 10 in poi, puoi scegliere di diventare un Guaritore ed imparerai cosi' degli incantesimi di guarigione. Se ti trovi in Squadra (cerca in Social > Squadra) con un Guaritore, puoi beneficiare del suo aiuto.", "faqQuestion5": "Come faccio per giocare in Habitica con i miei amici?", - "iosFaqAnswer5": "Il modo migliore e' quello di invitarli a fare Squadra con te, tramite [website](https://habitica.com/#/options/groups/party)! Aggiungeremo la possibilita' di creare una Squadra direttamente da questa app presto, ma nel frattempo puoi farlo da [website](https://habitica.com/#/options/groups/party). Le Squadre possono partecipare alle missioni, combattere i mostri e dividersi le abilita' per aiutarsi a vicenda. Sul sito web, tu e i tuoi amici potete unirvi inoltre alle chat pubbliche nelle Gilde. Le Gilde verranno aggiunte all'app nel prossimo update!", + "iosFaqAnswer5": "Il miglior modo é invitarli in un Gruppo con te! I Gruppi possono intraprendere missioni, sconfiggere mostri, e usare abilità per sopportarsi l'un l'altro. Vai su Menu > Gruppo e clicca \"Crea Nuovo Gruppo\" se non ne hai ancora uno. Dopodiché tocca la lista dei Membri, e tocca Invita nell'angolo in alto a destra per invitare i tuoi amici inserendo il loro ID Utente (una serie di numeri e lettere che possono trovare sotto Impostazioni > Dettagli Account sull'app, e sotto Impostazioni > API sul sito). Sul sito, puoi anche invitare i tuoi amici via email, che aggiungeremo all'applicazione in un aggiornamento futuro.\n\nSul sito, tu e i tuoi amici potete anche unirvi a una Gilda, che sono chat room pubbliche. Le Gilde saranno aggiunte all'app in un aggiornamento futuro!", "webFaqAnswer5": "Il modo migliore e' quello di invitarli a fare Squadra con te, dal menu' Social > Squadra! Le Squadre possono partecipare alle missioni, combattere i mostri e dividersi le abilita' per aiutarsi a vicenda. Insieme potete inoltre unirvi alle Gilde (Social > Gilde). Le Gilde sono delle chat rivolte ad un interesse condiviso o al raggiungimento di un obiettivo comune, possono essere pubbliche o private. Puoi unirti a tutte le Gilde che desideri ma ad un'unica Squadra.\n

\nPer informazioni piu' dettagliate, puoi guardare sulla pagina wiki [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).", - "faqQuestion6": "Come posso prendere un Animale o una Cavalcatura?", + "faqQuestion6": "Come posso ottenere un Animale o una Cavalcatura?", "iosFaqAnswer6": "Dopo il livello 3 sbloccherai il Sistema di Drop. Ogni volta che completi un'attività avrai una possibilità di vincere un Uovo, una Pozione di schiusura o del Cibo. Questi verranno archiviati in Menù > Inventario.\n\nPer far nascere un Animale avrai bisogno di un Uovo e di una Pozione di schiusura. Premi sull'uovo per scegliere la specie che vuoi far schiudere, e seleziona quindi la Pozione di Schiusura per determinare il colore! Torna su Menù > Animali per equipaggiare il tuo nuovo animale al tuo Avatar premendoci sopra.\n\nPuoi anche far evolvere i tuoi Animali in Cavalcature cibandoli in Menù > Animali. Clicca sul Cibo nel riquadro a destra \"Cibo e Selle\", quindi seleziona l'Animale. Dovrai alimentare l'Animale diverse volte prima di farlo diventare una Cavalcatura, ma se riesci a trovare il suo cibo preferito crescerà molto più in fretta. Fai diverse prove o [Spoiler qui](http://habitica.wikia.com/wiki/Food#Food_Preferences). Una volta che hai una Cavalcatura, vai in Menù > Cavalcature e selezionala per equipaggiarla al tuo avatar.\n\nPotrai inoltre ricevere Uova dalle Missioni Animali completandole.(Vedi sotto per saperne di più sulle Missioni)", - "webFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Inventory > Market.\n

\n To hatch a Pet, you'll need an egg and a hatching potion. Click on the egg to determine the species you want to hatch, and then click on the hatching potion to determine its color! Go to Inventory > Pets to equip it to your avatar by clicking on it.\n

\n You can also grow your Pets into Mounts by feeding them under Inventory > Pets. Click on a Pet, and then click on a piece of food from the right-hand menu to feed it! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Inventory > Mounts and click on it to equip it to your avatar.\n

\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", - "faqQuestion7": "How do I become a Warrior, Mage, Rogue, or Healer?", - "iosFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their Party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most gold and find the most item drops, and they can help their Party do the same. Finally, Healers can heal themselves and their Party members.\n\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click “Decide Later” and choose later under Menu > Choose Class.", - "webFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most Gold and find the most item drops, and they can help their party do the same. Finally, Healers can heal themselves and their party members.\n

\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click \"Opt Out\" and re-enable it later under User > Stats.", - "faqQuestion8": "What is the blue stat bar that appears in the Header after level 10?", - "iosFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Use Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", - "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in a special section in the Rewards Column. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You’ll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", - "faqQuestion9": "How do I fight monsters and go on Quests?", - "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party on the [website](https://habitica.com/#/options/groups/party), you'll be rewarded with the Basi-List Scroll! (We will add this feature to the app in a future update.)\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for gold and gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", + "webFaqAnswer6": "Dopo il livello 3 sbloccherai il Sistema di Drop. Ogni volta che completi un'attività avrai una possibilità di vincere un Uovo, una Pozione di Schiusura o del Cibo. Questi verranno immagazzinati in Inventario > Mercato.\n

\nPer far nascere un Animale avrai bisogno di un Uovo e di una Pozione di schiusura. Premi sull'uovo per scegliere la specie che vuoi far schiudere, e seleziona quindi la Pozione di Schiusura per determinarne il colore! Vai su Inventario > Animali per equipaggiare il tuo nuovo animale al tuo Avatar cliccandoci sopra.\n

\nPuoi anche far evolvere i tuoi Animali in Cavalcature cibandoli in Inventario > Animali. Clicca su un animale e seleziona quindi un pezzo di Cibo dal menù a destra per dargli da mangiare! Dovrai alimentare l'Animale diverse volte prima di farlo diventare una Cavalcatura, ma se riesci a trovare il suo cibo preferito, crescerà molto più in fretta. Fai diverse prove, o [Spoiler qui](http://habitica.wikia.com/wiki/Food#Food_Preferences). Una volta che hai una Cavalcatura, vai in Inventario > Cavalcature e selezionala per equipaggiarla al tuo avatar.\n

\nPotrai inoltre ricevere Uova dalle Missioni Animali completandole. (Vedi sotto per saperne di più sulle Missioni.)", + "faqQuestion7": "Come faccio a diventare un Guerriero, un Mago, un'Assassino o un Guaritore?", + "iosFaqAnswer7": "Al livello 10, puoi scegliere di diventare un Guerriero, un Mago, un Assassino, o un Guaritore. (Tutti i giocatori iniziano come Guerrieri per impostazione predefinita.) Ogni classe ha diverse opzioni di equipaggiamento, diverse abilità che possono lanciare dopo il livello 11, e diversi vantaggi. I Guerrieri possono facilmente danneggiare i Boss, sopportare più danni dalle loro attività, e contribuire a rendere la loro squadra più forte. Anche i Maghi possono facilmente danneggiare i Boss, così come possono salire di livello velocemente e ripristinare mana per la loro squadra. Gli Assassini guadagnano più oro e trovano più item drop, e possono aiutare la loro squadra a fare lo stesso. Infine, i Guaritori possono curare loro stessi e i loro compagni di squadra.\n\nSe non vuoi scegliere subito una Classe -- per esempio, se stai ancora lavorando per comprare tutto l'equipaggiamento della tua classe attuale -- puoi cliccare \"Decidi più tardi\" e riattivarla successivamente in Menu > Scegli Classe.", + "webFaqAnswer7": "Al livello 10, puoi scegliere di diventare un Guerriero, un Mago, un Assassino, o un Guaritore. (Tutti i giocatori iniziano come Guerrieri per impostazione predefinita.) Ogni classe ha diverse opzioni di equipaggiamento, diverse abilità che possono lanciare dopo il livello 11, e diversi vantaggi. I Guerrieri possono facilmente danneggiare i Boss, sopportare più danni dalle loro attività, e contribuire a rendere la loro squadra più forte. Anche i Maghi possono facilmente danneggiare i Boss, così come possono salire di livello velocemente e ripristinare mana per la loro squadra. Gli Assassini guadagnano più oro e trovano più item drop, e possono aiutare la loro squadra a fare lo stesso. Infine, i Guaritori possono curare loro stessi e i loro compagni di squadra.\n

\nSe non vuoi scegliere subito una Classe -- per esempio, se stai ancora lavorando per comprare tutto l'equipaggiamento della tua classe attuale -- puoi cliccare \"Rinuncia\" e riattivarla successivamente in Utente > Statistiche.", + "faqQuestion8": "Cos'è la barra blu che appare nell'intestazione dopo il livello 10? ", + "iosFaqAnswer8": "La barra blu che appare nell'intestazione quando raggiungi il livello 10 e scegli une Classe e la barra di Mana. Quando avanzi di livello, potrai scegliere delle Abilita' speciali che costano Mana ad ogni uso. Ogni Classe ha Abilita' diverse che appaiono dopo il livello 11, sotto Menu> Usare Abilita'. All'opposto della barra Salute, la barra Mana non si ripiena quando avanzi di livello, invece, si riempie ogni volta che completi buone Habit, Dailies e Da-Fare, e si svuota quando cedi ad una cattiva abitudine. Puoi anche guadagnare un po' di Mana durante la notte-- più Dailies hai completato, più Mana guadagni. ", + "webFaqAnswer8": "La barra blu che è apparsa nell'intestazione quando hai raggiunto il livello 10 e hai scelto une Classe è la barra del Mana. Quando avanzi di livello, sbloccherai delle Abilità speciali che costano Mana ad ogni uso. Ogni Classe ha Abilità diverse, che appaiono dopo il livello 11 in una sezione speciale della colonna delle Ricompense. A differenza della barra Salute, la barra Mana non si riempie quando avanzi di livello. Invece, il Mana si rigenera quando completi Habit positive, Dailies e To-do, e si svuota quando cedi ad una Habit negativa. Guadagni inoltre un po' di Mana durante la notte -- più Dailies hai completato, più Mana guadagni. ", + "faqQuestion9": "Come faccio a combattere i mostri e andare in Missione?", + "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for Gold and Gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "webFaqAnswer9": "First, you need to join or start a party (under Social > Party). Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n

\n Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are three ways to get a scroll:\n

\n * When you invite people to your party, you’ll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Page (Inventory > Quests) for Gold and Gems.\n

\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your party at the same time that you damage the Boss.\n

\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "faqQuestion10": "What are gems, and how do I get them?", - "iosFaqAnswer10": "Gems are purchased with real money by tapping on the gem icon in the header. When people buy gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying gems directly, there are three other ways players can gain gems:\n\n * Win a Challenge on the [website](https://habitica.com) that has been set up by another player under Social > Challenges. (We will be adding Challenges to the app in a future update!)\n * Subscribe on the [website](https://habitica.com/#/options/settings/subscription) and unlock the ability to buy a certain number of gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with gems do not offer any statistical advantages, so players can still make use of the app without them!", - "webFaqAnswer10": "Gems are [purchased with real money](https://habitica.com/#/options/settings/subscription), although [subscribers](https://habitica.com/#/options/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n

\n In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n

\n * Win a Challenge that has been set up by another player under Social > Challenges.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", + "faqQuestion10": "Cosa sono le Gemme, e come le ottengo? ", + "iosFaqAnswer10": "Le Gemme vengono comprate con soldi reali cliccando sull'icona della gemma nell'intestazione. Quando le persone si abbonano o comprano Gemme, ci aiutano a mantenere il sito attivo. Siamo molto grati per il loro sostegno!\n\nOltre a comprare le Gemme direttamente, ci sono altri tre modi in cui i giocatori possono ottenere Gemme:\n\n* Vincere una Sfida nel [sito](https://habitica.com) che è stata creata da una altro giocatore sotto Social > Sfide. (Aggiungeremo le Sfide all'app in un futuro aggiornamento!)\n* Abbonarsi al [sito](https://habitica.com/#/options/settings/subscription) e sbloccare la capacità di comprare un certo numero di gemme al mese.\n* Contribuire con le tue abilità al progetto Habitica. Consulta questa pagina della wiki per maggiori informazioni: [Contribuire ad Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\nRicorda che gli oggetti comprati con le Gemme non offrono nessun vantaggio statistico, perciò i giocatori possono comunque utilizzare il sito anche senza di esse!", + "webFaqAnswer10": "Le Gemme vengono [comprate con soldi reali](https://habitica.com/#/options/settings/subscription), anche se [gli abbonati](https://habitica.com/#/options/settings/subscription) possono comprare Gemme in cambio di Oro. Quando le persone si abbonano o comprano Gemme, ci aiutano a mantenre il sito attivo. Siamo molto grati per il loro sostegno!\n

\n Oltre a comprare le Gemme direttamente o abbonarsi, ci sono altri due modi in cui i gioctori possono ottenre Gemme:\n

\n * Vincendo una Sfida creata da una altro giocatore sotto Social > Sfide.\n * Contribuire con le tue abilità al progetto Habitica. Consulta questa pagina della wiki per maggiori informazioni: [Contribuire ad Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n Ricorda che gli oggetti comprati con le Gemme non offrono nessun vantaggio statistico, perciò i giocatori possono comunque utilizzare il sito anche senza di esse!", "faqQuestion11": "Come posso segnalare un bug o dare dei suggerimenti?", - "iosFaqAnswer11": "You can report a bug, request a feature, or send feedback under Menu > Report a Bug and Menu > Send Feedback! We'll do everything we can to assist you.", - "webFaqAnswer11": "Bug reports are collected on GitHub. Go to [Help > Report a Bug](https://github.com/HabitRPG/habitrpg/issues/2760) and follow the instructions. Don't worry, we'll get you fixed up soon!\n

\n Feature requests are collected on Trello. Go to [Help > Request a Feature](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) and follow the instructions. Ta-da!", + "iosFaqAnswer11": "Puoi segnalare un bug, richiedere una funzione, o inviare commenti in Menu > Segnala un Bug e Menu > Invia Commenti! Faremo tutto il possibile per aiutarti.", + "webFaqAnswer11": "Errori vengono raggruppati su GitHub. Vai su [Aiuto> denuncia Errore] (https://github.com/HabitRPG/habitrpg/issues/2760) e segui le istruzioni. non ti preoccupare, ripareremo tutto presto.\n

\nRichieste per funzioni nuove vengono consegnate su Trello. Vai su [Aiuto> Richiesta funzione] (https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) e segui le istruzioni. Ta-da!", + "faqQuestion12": "Come combatto un Boss Mondiale?", + "iosFaqAnswer12": "I World boss sono mostri speciali che appaiono nella Taverna. Tutti i giocatori attivi sul sito combattono automaticamente questo tipo di boss e ogni attività compiuta e abilità reca danno al Boss. \n\nSi può, allo stesso tempo, avere una normale Sfida. Le tue attività e abilità conteranno sia contro il World boss che contro il boss della sfida che la tua squadra sta portandno avanti.\n\nUn World Boss non potrà mai danneggiare te o il tuo account, in nessun modo. Possiede però una barra indicatrice della rabbia che si riempie quando i giocatori saltano le loro attività giornaliere. Se la barra della collera si riempirà, il World boss attaccherà uno dei personaggio non giocatori del sito, la cui immagine cambierà.\n\nPuoi leggere altri contenuti sui [World boss precendenti](http://habitica.wikia.com/wiki/World_Bosses) sul wiki.", + "webFaqAnswer12": "I Boss Mondiali sono mostri speciali che appaiono nella Taverna. Gli utenti attivi Automaticamente combattono il Boss e le loro attività danneggiano il Boss come al solito. \n

\nPuoi anche essere in una missione normale contemporaneamente e le tue attività e abilita' conteranno contro entrambi il Boss mondiale e il Boss/Missione nella tua squadra. \n

\nUn Boss Mondiale non danneggerà mai il tuo conto in qualsiasi modo. Invece, ha una sbarra Rabbia che si riempe quando utenti saltano Dailies. Se la sbarra rabbia e piena , attaccherà uno dei personaggi non giocatori e le loro immagini cambieranno.\n

\nPuoi leggere di più su precedenti boss mondiali [qui] (http://habitica.wikia.com/wiki/World_Bosses)", "iosFaqStillNeedHelp": "Se hai una domanda non presente in questa lista, vieni a chiedere nella chat della Taverna in Social > Taverna! Saremo felici di aiutarti.", "webFaqStillNeedHelp": "Se hai una domanda non presente in questa lista, se conosci l'inglese vieni a chiedere nella [Newbies Guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! Saremo felici di aiutarti." } \ No newline at end of file diff --git a/common/locales/it/front.json b/common/locales/it/front.json index 82f154d7db..30094cf6ff 100644 --- a/common/locales/it/front.json +++ b/common/locales/it/front.json @@ -6,7 +6,7 @@ "althaireQuote": "Essere continuamente in missione mi motiva a completare tutte le mie daily e i miei to-do. La mia motivazione più grande è non deludere la mia squadra.", "andeeliaoQuote": "Un sito fantastico, ho iniziato solo qualche giorno fa e sono già più produttiva e riesco a gestire meglio il mio tempo!", "autumnesquirrelQuote": "Ora procrastino meno al lavoro e nelle faccende di casa, e pago le bollette in tempo.", - "businessSample1": "Conferma 1 pagina dell'inventario", + "businessSample1": "Conferma 1 pagina dell'Inventario", "businessSample2": "20 min di archiviazione", "businessSample3": "Organizza le e-mail ricevute", "businessSample4": "Prepara 1 documento per il cliente", @@ -57,7 +57,7 @@ "forgotPass": "Password dimenticata", "frabjabulousQuote": " [Habitica] è la ragione per cui ho ottenuto un fantastico lavoro ben retribuito... e ancor più miracolosamente, ora uso il filo interdentale ogni giorno!", "free": "Unisciti, è gratis!", - "gamifyButton": "Fai della tua vita un gioco!", + "gamifyButton": "Rendi la tua vita un gioco!", "goalSample1": "Fai pratica col pianoforte per 1 ora", "goalSample2": "Lavora all'articolo da pubblicare", "goalSample3": "Lavora al post per il blog", @@ -74,7 +74,7 @@ "infhQuote": "[Habitica] mi ha davvero aiutato a dare una struttura alla mia vita universitaria.", "invalidEmail": "Per resettare la password è necessario un indirizzo email valido.", "irishfeet123Quote": "Avevo l'orribile abitudine di non ripulire completamente il mio posto dopo mangiato e lasciare tazze ovunque. [Habitica] si è rivelato essere la cura!", - "joinOthers": "Unisciti a 250.000 persone che si divertono raggiungendo i propri obiettivi!", + "joinOthers": "Unisciti a <%= userCount %> persone che si divertono raggiungendo i propri obiettivi!", "kazuiQuote": "Prima di [Habitica] ero bloccata con la mia tesi, nonchè insoddisfatta della mia disciplina riguardo i lavori di casa e cose come imparare vocaboli e studiare la teoria del Go. A quanto pare separare queste attività in liste più piccole e maneggevoli è il modo giusto per mantenermi motivata e costantemente al lavoro.", "landingadminlink": "pacchetti amministrativi", "landingend": "Non sei ancora convinto?", @@ -179,5 +179,14 @@ "businessInquiries": "Informazioni sul Business", "merchandiseInquiries": "Informazioni sui Prodotti", "marketingInquiries": "Informazioni su Marketing e Social Media", - "tweet": "Tweet" + "tweet": "Tweet", + "apps": "Applicazioni", + "notifyAndroidApp": "Vuoi che ti notifichiamo quando l'app per Android é pronta? Iscriviti a questa mailing list!", + "checkOutIOSApp": "Dai un'occhiata alla nostra nuova app per iOS!", + "imagine1": "Immagina se migliorare la tua vita fosse divertente come un videogioco.", + "landingCopy1": "Avanza nel gioco completando attività nella vita reale.", + "landingCopy2": "Combatti mostri insieme ai tuoi amici per tenerti motivato e responsabile delle tue attività.", + "landingCopy3": "Unisciti a più di <%= userCount %> persone che si divertono migliorando la propria vita.", + "alreadyHaveAccount": "Ho già un account!", + "getStartedNow": "Comincia ora!" } \ No newline at end of file diff --git a/common/locales/it/gear.json b/common/locales/it/gear.json index 0764c9b004..deb98deea0 100644 --- a/common/locales/it/gear.json +++ b/common/locales/it/gear.json @@ -115,7 +115,7 @@ "weaponSpecialSpring2015WarriorText": "Clava Ossea", "weaponSpecialSpring2015WarriorNotes": "È una vera clava d'osso per veri cagnolini feroci! Certamente non è un giocattolo da masticare che la Maga Stagionale ti ha dato perchè chi è un bravo cagnolino? Chiiii è un bravo cagnolino?? Sei tu!!! Sei tu il bravo cagnolino!!! Aumenta la Forza di <%= str %>. Edizione limitata, primavera 2015.", "weaponSpecialSpring2015MageText": "Bacchetta da Prestigiatore", - "weaponSpecialSpring2015MageNotes": "Conjure up a carrot for yourself with this fancy wand. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2015 Spring Gear.", + "weaponSpecialSpring2015MageNotes": "Evocati una carota con quest'elegante bacchetta. Aumenta l'intelligenza di <%=int %> e la Percezione di <%= per%>. Edizione Limitata Equipaggiamento Primaverile 2015.", "weaponSpecialSpring2015HealerText": "Sonaglio da Gatto", "weaponSpecialSpring2015HealerNotes": "Quando lo scuoti, produce un'affascinante tintinnio che intratterrebbe CHIUNQUE per ore. Aumenta l'Intelligenza di <%= int %>. Edizione limitata, primavera 2015.", "weaponSpecialSummer2015RogueText": "Corallo da Fuoco", @@ -126,14 +126,14 @@ "weaponSpecialSummer2015MageNotes": "Un potere nascosto brilla nelle pietre preziose di questo bastone. Aumenta l'Intelligenza di <%= int %> e la Percezione di <%= per %>. Edizione limitata, estate 2015.", "weaponSpecialSummer2015HealerText": "Bacchetta delle Onde", "weaponSpecialSummer2015HealerNotes": "Cura il mal di mare e i mali del mare! Aumenta l'Intelligenza di <%= int %>. Edizione limitata, estate 2015.", - "weaponSpecialFall2015RogueText": "Bat-tle Ax", + "weaponSpecialFall2015RogueText": "Ascia da Bat-taglia", "weaponSpecialFall2015RogueNotes": "Fearsome To-Dos cower before the flapping of this ax. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "weaponSpecialFall2015WarriorText": "Wooden Plank", - "weaponSpecialFall2015WarriorNotes": "Great for elevating things in cornfields and/or smacking tasks. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "weaponSpecialFall2015MageText": "Enchanted Thread", + "weaponSpecialFall2015WarriorText": "Asse di Legno", + "weaponSpecialFall2015WarriorNotes": "Ottimo per sollevare cose nei cambi di grano e/o per picchiare le attività. Aumenta Forza di <%= str %>. Edizione Limitata, Equipaggiamento Autunnale 2015.", + "weaponSpecialFall2015MageText": "Filo Incantato", "weaponSpecialFall2015MageNotes": "A powerful Stitch Witch can control this enchanted thread without even touching it! Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "weaponSpecialFall2015HealerText": "Swamp-Slime Potion", - "weaponSpecialFall2015HealerNotes": "Brewed to perfection! Now you just have to convince yourself to drink it. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", + "weaponSpecialFall2015HealerText": "Pozione Melma di Palude", + "weaponSpecialFall2015HealerNotes": "Fermentata alla perfezione! Ora devi solo convincerti a berla. Aumenta l'Intelligenza di <%= int %>. Edizione Limitata Equipaggiamento Autunnale 2015.", "weaponMystery201411Text": "Forcone dei festeggiamenti", "weaponMystery201411Notes": "Infilza i tuoi nemici o inforca i tuoi cibi preferiti - questo versatile forcone può fare di tutto! Non conferisce alcun bonus. Oggetto per abbonati, novembre 2014.", "weaponMystery201502Text": "Scintillante Scettro Alato dell'Amore e anche della Verità", @@ -149,13 +149,19 @@ "weaponArmoireRancherLassoText": "Lazzo da Cowboy", "weaponArmoireRancherLassoNotes": "Lazzo: lo strumento ideale per radunare e raccogliere. Aumenta la Forza di <%= str %>, la Percezione di <%= per %> e l'Intelligenza di <%= int %>. Baule Incantato: Set del Ranch (Oggetto 3 di 3)", "weaponArmoireMythmakerSwordText": "Spada del Costruttore di Leggende", - "weaponArmoireMythmakerSwordNotes": "Nonostante sembri umile, questa spada ha forgiato numerosi eroi mitici. Aumenta Forza e Percezione di <%= attrs %> ciascuna. Baule Incantato: Set della Toga Dorata (Oggetto 3 di 3)", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Uncino di Ferro", - "weaponArmoireIronCrookNotes": "Fieramente forgiato dal ferro, questo uncino di ferro é ottimo per radunare pecore. Aumenta Percezione e Forza di <%= attrs %> ciascuna. Baule Incantato: Set del Ferro Uncinato (Oggetto 3 di 3)", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Bastone dell'Ala Dorata", "weaponArmoireGoldWingStaffNotes": "Le ali su questo bastone svolazzano e si intrecciano costantemente. Aumenta tutti gli attributi di <%= attrs %> ciascuna. Baule Incantato: Oggetto Indipendente.", - "weaponArmoireBatWandText": "Bat Wand", - "weaponArmoireBatWandNotes": "This wand can turn any task into a bat! Wave it about and watch them fly away. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireBatWandText": "Bacchetta del Pipstrello", + "weaponArmoireBatWandNotes": "Questa bacchetta può trasformare qualunque attività in un pipistrello! Salutalo e guardalo volare via. Aumenta l'Intelligenza <%= int %> di e la Percezione di <%= per % . Baule Incantato: Oggetto Indipendente.", + "weaponArmoireShepherdsCrookText": "Uncino del Pastore", + "weaponArmoireShepherdsCrookNotes": "Utile per l'allevamento di grifoni. Aumenta la Costituzione di <%= con %>. Baule Incantato: Set del Pastore (Oggetto 1 di 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "armatura", "armorBase0Text": "Vestiti semplici", "armorBase0Notes": "Vestiario comune. Non conferisce alcun bonus.", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "Bizzarre Vesti da Festa", "armorSpecialBirthday2015Notes": "Buon compleanno, Habitica! Indossa queste Bizzarre Vesti da Festa per celebrare questo giorno fantastico. Non conferisce alcun bonus.", "armorSpecialGaymerxText": "Armatura del Guerriero Arcobaleno", - "armorSpecialGaymerxNotes": "Per celebrare la \"stagione dell'orgoglio\" e il GaymerX, questa speciale armatura è decorata con un raggiante e colorato tema arcobaleno! Il GaymerX è un evento dedicato al gaming e al \"LGBTQ\", ed è aperto a tutti. Si svolge all'InterContinental di San Francisco dall'11 al 13 luglio! Non conferisce alcun bonus.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "Tuta Felina Elegante", "armorSpecialSpringRogueNotes": "Curata in ogni dettaglio. Aumenta la Percezione di <%= per %>. Edizione limitata, primavera 2014.", "armorSpecialSpringWarriorText": "Armatura Trifoglio", @@ -269,14 +275,14 @@ "armorSpecialSummer2015MageNotes": "Un potere nascosto risiede negli sbuffi di queste maniche. Aumenta l'Intelligenza di <%= int %> . Edizione Limitata Equipaggiamento Estate 2015.", "armorSpecialSummer2015HealerText": "Armatura del Marinaio", "armorSpecialSummer2015HealerNotes": "Quest'armatura fa sapere a tutti che tu sei un onesto mercante marinaio che non sognerebbe mai di comportarsi come una canaglia. Aumenta la Costituzione di <%= con %>. Edizione Limitata Equipaggiamento Estate 2015.", - "armorSpecialFall2015RogueText": "Bat-tle Armor", + "armorSpecialFall2015RogueText": "Armatura da Bat-taglia", "armorSpecialFall2015RogueNotes": "Fly into bat-tle! Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "armorSpecialFall2015WarriorText": "Scarecrow Armor", - "armorSpecialFall2015WarriorNotes": "Despite being stuffed with straw, this armor is extremely hefty! Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", + "armorSpecialFall2015WarriorText": "Armatura da Spaventapasseri", + "armorSpecialFall2015WarriorNotes": "Nonostante sia imbottita di paglia, questa armatura è estremamente robusta! Aumenta la Constituzione di <%= con %>. Edizione Limitata, autunno 2015.", "armorSpecialFall2015MageText": "Stitched Robes", "armorSpecialFall2015MageNotes": "Every stitch in this armor shimmers with enchantment. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", "armorSpecialFall2015HealerText": "Potioner Robes", - "armorSpecialFall2015HealerNotes": "What? Of course that was a potion of constitution. No, you are definitely not turning into a frog! Don't be ribbiticulous. Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", + "armorSpecialFall2015HealerNotes": "Cosa? Certo che quella era una posizione della Costituzione. No, non stai assolutamente diventando una rana! Non essere ridicolo. Aumenta la Costituzione di <%= con %>. Edizione Limitata Equipaggiamento Autunnale 2015.", "armorMystery201402Text": "Vesti del Messaggero", "armorMystery201402Notes": "Lucenti e robuste, queste vesti hanno diverse tasche per trasportare le lettere. Non conferisce alcun bonus. Oggetto per abbonati, febbraio 2014.", "armorMystery201403Text": "Armatura del Proteggiforeste", @@ -302,11 +308,13 @@ "armorMystery201504Text": "Veste da Ape Operaia", "armorMystery201504Notes": "Diventerai produttivo come un'ape operaia in questa attraente veste! Non conferisce alcun bonus. Oggetto per abbonati, aprile 2015.", "armorMystery201506Text": "Tuta da Immersione", - "armorMystery201506Notes": "Snorkel through a coral reef in this brightly-colored swim suit! Confers no benefit. June 2015 Subscriber Item.", + "armorMystery201506Notes": "Fai snorkeling attraverso una barriera corallina in questo costume da bagno dai colori vivaci! Non conferisce alcun bonus. Oggetto per abbonati, giugno 2015.", "armorMystery201508Text": "Costume da Ghepardo", "armorMystery201508Notes": "Corri come il fulmine con indosso il morbido Costume da Ghepardo! Non conferisce benefici. Oggetto per abbonati Agosto 2015.", - "armorMystery201509Text": "Werewolf Costume", - "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201509Text": "Costume da Lupo Mannaro", + "armorMystery201509Notes": "Questo È un costume, giusto? Non conferisce alcun bonus. Oggetto per abbonati, settembre 2015.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Completo Steampunk", "armorMystery301404Notes": "Raffinato, a dir poco impeccabile! Non conferisce alcun bonus. Oggetto per abbonati, febbraio 3015.", "armorArmoireLunarArmorText": "Armatura Lunare Lenitiva", @@ -321,6 +329,12 @@ "armorArmoireHornedIronArmorNotes": "Fieramente forgiata dal ferro, quest'armatura uncinato é praticamente indistruttibile. Aumenta la Costituzione di <%= con %> e la Percezione di <%= per %>. Baule Incantato: Set di ferro Uncinato (Oggetto 2 di 3).", "armorArmoirePlagueDoctorOvercoatText": "Soprabito da Dottore della Piaga", "armorArmoirePlagueDoctorOvercoatNotes": "Un autentico soprabito indossato dai dottori che combattono la Piaga della Procrastinazione! Aumenta l'Intelligenza di <%= int %>, la Forza di <%= str %>, e la Costituzione di <%= con %>. Baule Incantato: Set da Dottore della Piaga (Oggetto 3 di 3)", + "armorArmoireShepherdRobesText": "Vesti del Pastore", + "armorArmoireShepherdRobesNotes": "Il tessuto è fresco e traspirante, perfetto per una calda giornata di allevamento dei grifoni nel deserto. Aumenta la Forza e la Percezione di <%= attrs %> ciascuna. Baule Incantato: Set del Pastore (Oggetto 2 di 3).", + "armorArmoireRoyalRobesText": "Vesti Regali", + "armorArmoireRoyalRobesNotes": "Meraviglioso sovrano, governa tutto il giorno! Aumenta la Costituzione, l'Intelligenza, e la Percezione di <%= attrs %> ciascuna. Baule Incantato: Set Regale (Oggetto 3 di 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "copricapo", "headBase0Text": "Nessun elmo", "headBase0Notes": "Non indossi nessun copricapo.", @@ -432,16 +446,16 @@ "headSpecialSummer2015MageNotes": "Un potere nascosto brilla nelle maglie di questa sciarpa. Aumenta la Percezione di <%= per %>. Edizione Limitata Equipaggiamento Estate 2015.", "headSpecialSummer2015HealerText": "Cappello da Marinaio", "headSpecialSummer2015HealerNotes": "Con il tuo cappello da marinaio piantato fermamente in testa, puoi navigare anche i mari più tempestosi! Aumenta l'intelligenza di <%= int %>. Edizione Limitata Equipaggiamento Estate 2015.", - "headSpecialFall2015RogueText": "Bat-tle Wings", - "headSpecialFall2015RogueNotes": "Echolocate your enemies with this powerful helm! Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "headSpecialFall2015WarriorText": "Scarecrow Hat", + "headSpecialFall2015RogueText": "Ali da Bat-taglia", + "headSpecialFall2015RogueNotes": "Ecolocalizza i tuoi nemici con questo potente elmo! Aumenta la Percezione di <%= per %>. Edizione limitata, autunno 2015.", + "headSpecialFall2015WarriorText": "Cappello da Spaventapasseri", "headSpecialFall2015WarriorNotes": "Everyone would want this hat--if they only had a brain. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", "headSpecialFall2015MageText": "Stitched Hat", "headSpecialFall2015MageNotes": "Every stitch in this hat augments its power. Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "headSpecialFall2015HealerText": "Hat of Frog", - "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", + "headSpecialFall2015HealerText": "Cappello di rana", + "headSpecialFall2015HealerNotes": "Questo é un cappello estremamente serio di cui sono degli solo gli alchimisti più avanzati. Aumenta l'Intelligenza di <%= int %>. Edizione Limitata Equipaggiamento Autunnale 2015.", "headSpecialGaymerxText": "Elmo del Guerriero Arcobaleno", - "headSpecialGaymerxNotes": "Per celebrare la \"stagione dell'orgoglio\" e il GaymerX, questo speciale elmo è decorato con un raggiante e colorato tema arcobaleno! Il GaymerX è un evento dedicato al gaming e al \"LGBTQ\", ed è aperto a tutti. Si svolge all'InterContinental di San Francisco dall'11 al 13 luglio! Non conferisce alcun bonus.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "Elmo Alato", "headMystery201402Notes": "Questa tiara alata rende chi la indossa veloce come il vento! Non conferisce alcun bonus. Oggetto per abbonati, febbraio 2014.", "headMystery201405Text": "Fiamma della Mente", @@ -462,8 +476,10 @@ "headMystery201505Notes": "La piuma verde su questo elmo di ferro sventola con orgoglio. Non conferisce alcun bonus. Oggetto per abbonati, maggio 2015.", "headMystery201508Text": "Cappello da Ghepardo", "headMystery201508Notes": "Questo comodo cappello da ghepardo é molto lanuginoso! Non conferisce alcun bonus. Oggetto per abbonati Agosto 2015.", - "headMystery201509Text": "Werewolf Mask", - "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201509Text": "Maschera da Lupo Mannaro", + "headMystery201509Notes": "Questa È una maschera, giusto? Non conferisce alcun bonus. Oggetto per abbonati, settembre 2015.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 Subscriber Item.", "headMystery301404Text": "Cilindro Elegante", "headMystery301404Notes": "Un cilindro per i più fini gentiluomini! Oggetto per abbonati, gennaio 3015. Non conferisce alcun bonus.", "headMystery301405Text": "Cilindro Base", @@ -475,27 +491,33 @@ "headArmoireVioletFloppyHatText": "Moscio Cappello Violetto", "headArmoireVioletFloppyHatNotes": "Molti incantesimi sono stati cuciti in questo semplice cappello, dandogli un piacevole colore viola. Aumenta la Percezione di <%= per %>, l'Intelligenza di <%= int %>, e la Costituzione di <%= con %>. Baule Incantato: Oggetto Indipendente. ", "headArmoireGladiatorHelmText": "Elmo da Gladiatore", - "headArmoireGladiatorHelmNotes": "To be a gladiator you must be not only strong.... but cunning. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Gladiator Set (Item 1 of 3).", + "headArmoireGladiatorHelmNotes": "Per essere un gladiatore non devi solo essere forte... Ma anche astuto. Aumenta l'Intelligenza di <%= int%> e la Percezione di <%= per %>. Baule Incantato: Set da Gladiatore (Oggetto 1 di 3).", "headArmoireRancherHatText": "Rancher Hat", "headArmoireRancherHatNotes": "Round up your pets and wrangle your mounts while wearing this magical Rancher Hat! Increases Strength by <%= str %>, Perception by <%= per %>, and Intelligence by <%= int %>. Enchanted Armoire: Rancher Set (Item 1 of 3).", "headArmoireBlueHairbowText": "Fiocchetto Blu", - "headArmoireBlueHairbowNotes": "Become perceptive, tough, and smart while wearing this beautiful Blue Hairbow! Increases Perception by <%= per %>, Constitution by <%= con %>, and Intelligence by <%= int %>. Enchanted Armoire: Independent Item.", - "headArmoireRoyalCrownText": "Royal Crown", - "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.", - "headArmoireGoldenLaurelsText": "Golden Laurels", - "headArmoireGoldenLaurelsNotes": "These golden laurels reward those who have conquered bad habits. Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 2 of 3).", - "headArmoireHornedIronHelmText": "Horned Iron Helm", - "headArmoireHornedIronHelmNotes": "Fiercely hammered from iron, this horned helmet is nearly impossible to break. Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Horned Iron Set (Item 1 of 3).", - "headArmoireYellowHairbowText": "Yellow Hairbow", - "headArmoireYellowHairbowNotes": "Become perceptive, strong, and smart while wearing this beautiful Yellow Hairbow! Increases Perception, Strength, and Intelligence by <%= attrs %> each. Enchanted Armoire: Independent Item.", - "headArmoireRedFloppyHatText": "Red Floppy Hat", - "headArmoireRedFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a radiant red color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", - "headArmoirePlagueDoctorHatText": "Plague Doctor Hat", - "headArmoirePlagueDoctorHatNotes": "An authentic hat worn by the doctors who battle the Plague of Procrastination! Increases Strength by <%= str %>, Intelligence by <%= int %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 1 of 3).", - "headArmoireBlackCatText": "Black Cat Hat", - "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", - "headArmoireOrangeCatText": "Orange Cat Hat", - "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireBlueHairbowNotes": "Diventa percettivo, resistente, e intelligente indossando questo meraviglioso Fiocchetto Blu! Aumenta la Percezione di <%= per %>, la Costituzione di <%= con %>, e l'Intelligenza di <%= int %>. Baule Incantato: Oggetto Indipendente.", + "headArmoireRoyalCrownText": "Corona Regale", + "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Royal Set (Item 1 of 3).", + "headArmoireGoldenLaurelsText": "Allori Dorati", + "headArmoireGoldenLaurelsNotes": "Questi allori dorati ricompensano coloro che hanno conquistato le cattive abitudini. Aumenta Percezione e Costituzione di <%= attrs%> ciascuna. Baule Incantato: Set Toga Dorata (Oggetto 2 di 3).", + "headArmoireHornedIronHelmText": "Elmo di Ferro Cornuto", + "headArmoireHornedIronHelmNotes": "Fieramente forgiato di ferro, questo elmetto cornuto é quasi impossibile da rompere. Aumenta la Costituzione di <%= con %> e la Forza di <%= str%>. Baule Incantato: Set Ferro Cornuto (Oggetto 1 di 3).", + "headArmoireYellowHairbowText": "Fiocchetto Giallo", + "headArmoireYellowHairbowNotes": "Diventa percettivo, forte, e intelligente indossando questo meraviglioso Fiocchetto Giallo! Aumenta la Percezione, la Forza, e l'Intelligenza di <%= attrs %> ciascuna. Baule Incantato: Oggetto Indipendente.", + "headArmoireRedFloppyHatText": "Cappello Floscio Rosso", + "headArmoireRedFloppyHatNotes": "Molti incantesimi sono stati cuciti in questo semplice cappello, dandogli un raggiante colore rosso. Aumenta la Costituzione, l'Intelligenza, e la Percezione di <%= attrs %> ciascuna. Baule Incantato: Oggetto Indipendente.", + "headArmoirePlagueDoctorHatText": "Cappello del Dottore della Piaga", + "headArmoirePlagueDoctorHatNotes": "Un autentico cappello indossato dai dottori che combattono la Piaga della Procrastinazione! Aumenta la Forza di <%= str %>, l'Intelligenza di <%= int %>, e la Costituzione di <%= con %>. Baule Incantato: Set da Dottore della Piaga (Oggetto 1 di 3).", + "headArmoireBlackCatText": "Cappello Gatto Nero", + "headArmoireBlackCatNotes": "Questo cappello nero sta... facendo le fusa. E agitando la sua coda. E respirando? Sì, hai solo un gatto che dorme sulla tua testa. Aumenta l'Intelligenza e la Percezione di <%= attrs %> ciascuna. Baule Incantato: Oggetto indipendente.", + "headArmoireOrangeCatText": "Cappello Gatto Arancione", + "headArmoireOrangeCatNotes": "Questo cappello arancione sta... facendo le fusa. E agitando la sua coda. E respirando? Sì, hai solo un gatto che dorme sulla tua testa. Aumenta la Forza e la Costituzione di <%= attrs %> ciascuna. Baule Incantato: Oggetto indipendente.", + "headArmoireBlueFloppyHatText": "Flaccido Cappello Blu", + "headArmoireBlueFloppyHatNotes": "Molti incantesimi sono stati cuciti in questo semplice cappello, dandogli un colore blu brillante. Aumenta Costituzione, Intelligenza e Percezione di <%= attrs %> ciascuna. Baule Incantato: Oggetto Indipendente.", + "headArmoireShepherdHeaddressText": "Cappello del Pastore", + "headArmoireShepherdHeaddressNotes": "Talvolta i grifoni che allevi si divertono a masticare questo cappello, ma ti fa comunque sembrare piú intelligente. Aumenta l'Intelligenza di <%= int %>. Baule Incantato: Set Pastore (Oggetto 3 di 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "oggetto per mano da scudo", "shieldBase0Text": "Nessun equipaggiamento nella mano da scudo", "shieldBase0Notes": "Nessuno scudo o arma secondaria.", @@ -523,8 +545,8 @@ "shieldSpecial0Notes": "Vede oltre il velo della morte, e usa quello che vi trova per terrorizzare i nemici. Aumenta la Percezione di <%= per %>.", "shieldSpecial1Text": "Scudo di Cristallo", "shieldSpecial1Notes": "Frantuma le frecce e deflette le parole dei pessimisti. Aumenta tutti gli attributi di <%= attrs %>.", - "shieldSpecialMoonpearlShieldText": "Moonpearl Shield", - "shieldSpecialMoonpearlShieldNotes": "Designed for fast swimming, and also some defense. Increases Constitution by <%= con %>.", + "shieldSpecialMoonpearlShieldText": "Scudo di Perle Lunari", + "shieldSpecialMoonpearlShieldNotes": "Costruito per nuotare rapidamente, e anche avere qualche difesa. Aumenta la Costituzione di <%= con %>.", "shieldSpecialGoldenknightText": "Massiccio Martello Miliare di Mustaine", "shieldSpecialGoldenknightNotes": "Mostri, malattie, maledizioni: martellali! Aumenta Costituzione e Percezione di <%= attrs %> ciascuno.", "shieldSpecialYetiText": "Scudo dell'Addestra-Yeti", @@ -565,21 +587,23 @@ "shieldSpecialSummer2015RogueNotes": "Questo parente del corallo di fuoco (millepora) ha l'abilità di schizzare il suo veleno attraverso l'acqua. Aumenta la Forza di <%= str %>. Edizione limitata, estate 2015.", "shieldSpecialSummer2015WarriorText": "Sunfish Shield", "shieldSpecialSummer2015WarriorNotes": "Crafted of deep-ocean metal by the artisans of Dilatory, this shield shines like the sand and the sea. Increases Constitution by <%= con %>. Limited Edition 2015 Summer Gear.", - "shieldSpecialSummer2015HealerText": "Strapping Shield", + "shieldSpecialSummer2015HealerText": "Scudo Robusto", "shieldSpecialSummer2015HealerNotes": "Use this shield to bash away bilge rats. Increases Constitution by <%= con %>. Limited Edition 2015 Summer Gear.", - "shieldSpecialFall2015RogueText": "Bat-tle Ax", + "shieldSpecialFall2015RogueText": "Ascia da Bat-taglia", "shieldSpecialFall2015RogueNotes": "Fearsome To-Dos cower before the flapping of this ax. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "shieldSpecialFall2015WarriorText": "Birdseed Bag", - "shieldSpecialFall2015WarriorNotes": "It's true that you're supposed to be SCARING the crows, but there's nothing wrong with making friends! Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", - "shieldSpecialFall2015HealerText": "Stirring Stick", - "shieldSpecialFall2015HealerNotes": "This stick can stir anything without melting, dissolving, or bursting into flame! It can also be used to fiercely poke enemy tasks. Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", + "shieldSpecialFall2015WarriorText": "Sacchetto di Becchime", + "shieldSpecialFall2015WarriorNotes": "È vero che dovresti SPAVENTARE i corvi, ma non c'è niente di male nel farsi degli amici! Aumenta la Costituzione di <%= con %>. Edizione Limitata, autunno 2015.", + "shieldSpecialFall2015HealerText": "Bastoncino Mescolante", + "shieldSpecialFall2015HealerNotes": "Questo bastoncino può mescolare qualsiasi cosa senza sciogliersi, dissolversi, o andare a fuoco! Può anche essere usato per attaccare Attività nemiche. Aumenta la Costituzione di <%= con%>. Edizione Limitata Equipaggiamento Autunnale 2015.", "shieldMystery301405Text": "Scudo Orologio", "shieldMystery301405Notes": "Con questo scudo il tempo sarà sempre dalla tua parte! Non conferisce alcun bonus. Oggetto per abbonati, giugno 3015.", - "shieldArmoireGladiatorShieldText": "Gladiator Shield", + "shieldArmoireGladiatorShieldText": "Scudo da Gladiatore", "shieldArmoireGladiatorShieldNotes": "Per essere un gladiatore devi...eh, lasciamo stare, piuttosto respingi tutti con il tuo scudo. Aumenta la Costituzione di <%= con %> e la Forza di <%= str %>. Scrigno Incantato: Set Gladiatore (oggetto 3 di 3)", - "shieldArmoireMidnightShieldText": "Midnight Shield", - "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", - "back": "Back Accessory", + "shieldArmoireMidnightShieldText": "Scudo Mezzanotte", + "shieldArmoireMidnightShieldNotes": "Questo scudo è più potente allo scoccare della mezzanotte! Aumenta la Costituzione di <%= con %> e la Forza di <%= str %>. Baule Incantato: Oggetto indipendente.", + "shieldArmoireRoyalCaneText": "Bastone da passeggio Regale.", + "shieldArmoireRoyalCaneNotes": "Urrá per il sovrano, degno di canzoni! Aumenta Costituzione, Intelligenza e Percezione di <%= attrs %> ciascuna. Baule Incantato: Set Regale (Oggetto 2 di 3).", + "back": "Accessorio da schiena.", "backBase0Text": "Nessun accessorio da schiena", "backBase0Notes": "Nessun accessorio da schiena.", "backMystery201402Text": "Ali Dorate", @@ -590,8 +614,10 @@ "backMystery201410Notes": "Fluttua nella notte con queste robuste ali. Non conferiscono alcun bonus. Oggetto per abbonati, ottobre 2014.", "backMystery201504Text": "Ali da Ape Operaia", "backMystery201504Notes": "Bzz bzz bzz! Svolazza da un'attività all'altra. Non conferisce alcun bonus. Oggetto per abbonati, aprile 2015.", - "backMystery201507Text": "Rad Surfboard", - "backMystery201507Notes": "Surf off the Diligent Docks and ride the waves in Inkomplete Bay! Confers no benefit. July 2015 Subscriber Item.", + "backMystery201507Text": "Tavola da surf da sballo", + "backMystery201507Notes": "Fai surf sui Moli Motivati e cavalca le onde sulla Baia Inkompleta! Non conferisce alcun bonus. Oggetto per abbonati, Luglio 2015.", + "backMystery201510Text": "Coda di Goblin.", + "backMystery201510Notes": "Prensile e potente! Non conferisce alcun bonus. Oggetto per abbonati, Ottobre 2015. ", "backSpecialWonderconRedText": "Mantello Maestoso", "backSpecialWonderconRedNotes": "Fruscia con forza ed eleganza. Non conferisce alcun bonus. Edizione speciale da convegno.", "backSpecialWonderconBlackText": "Mantello Furtivo", @@ -613,10 +639,10 @@ "bodySpecialSummer2015RogueNotes": "You can't be a true Renegade without panache... and a sash. Confers no benefit. Limited Edition 2015 Summer Gear.", "bodySpecialSummer2015WarriorText": "Oceanic Spikes", "bodySpecialSummer2015WarriorNotes": "Each spike drips jellyfish venom, defending the wearer. Confers no benefit. Limited Edition 2015 Summer Gear.", - "bodySpecialSummer2015MageText": "Golden Buckle", - "bodySpecialSummer2015MageNotes": "This buckle adds no power at all, but it's shiny. Confers no benefit. Limited Edition 2015 Summer Gear.", - "bodySpecialSummer2015HealerText": "Sailor's Neckerchief", - "bodySpecialSummer2015HealerNotes": "Yo ho ho? No, no, no! Confers no benefit. Limited Edition 2015 Summer Gear.", + "bodySpecialSummer2015MageText": "Fibbia Dorata", + "bodySpecialSummer2015MageNotes": "Questa fibbia non aggiunge alcun potere, ma è lucente. Non conferisce alcun bonus. Edizione limitata, estate 2015.", + "bodySpecialSummer2015HealerText": "Fazzoletto da collo del marinaio", + "bodySpecialSummer2015HealerNotes": "Yo ho ho? No, no, no! Non conferisce alcun bonus. Edizione limitata, estate 2015", "headAccessory": "accessorio da testa", "accessories": "Accessori", "animalEars": "Orecchie animali", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "Queste potenti corna cambiano colore come le foglie autunnali. Non conferiscono alcun bonus. Oggetto per abbonati, settembre 2014.", "headAccessoryMystery201502Text": "Ali del Pensiero", "headAccessoryMystery201502Notes": "Lascia che la tua immaginazione prenda il volo! Non conferisce alcun bonus. Oggetto per abbonati, febbraio 2015.", + "headAccessoryMystery201510Text": "Corna di Goblin", + "headAccessoryMystery201510Notes": "Queste terrificanti corna sono leggermente viscide. Non conferisce alcun bonus. Oggetto per abbonati, ottobre 2015.", "headAccessoryMystery301405Text": "Occhiali da Testa", "headAccessoryMystery301405Notes": "\"Gli occhiali sono per i tuoi occhi\", dicevano. \"Nessuno vuole degli occhiali solo per tenerli in testa\", dicevano. Hah! Ora mostra quanto si sbagliano! Non conferisce alcun bonus. Oggetto per abbonati, agosto 3015.", "eyewear": "Eyewear", @@ -677,14 +705,14 @@ "eyewearSpecialWonderconBlackNotes": "Le tue ragioni sono pienamente legittime! Non conferisce alcun bonus. Edizione speciale da convegno.", "eyewearMystery201503Text": "Maschera di Acquamarina", "eyewearMystery201503Notes": "Attento a non farti andare queste scintillanti gemme negli occhi! Non conferisce alcun bonus. Oggetto per abbonati, marzo 2015.", - "eyewearMystery201506Text": "Neon Snorkel", - "eyewearMystery201506Notes": "This neon snorkel lets its wearer see underwater. Confers no benefit. June 2015 Subscriber Item.", + "eyewearMystery201506Text": "Boccaglio Neon", + "eyewearMystery201506Notes": "Questo boccaglio neon permette a chi lo indossa vedere sott'acqua. Non conferisce alcun bonus. Oggetto per abbonati, giugno 2015.", "eyewearMystery201507Text": "Rad Sunglasses", - "eyewearMystery201507Notes": "These sunglasses let you stay cool even when the weather is hot. Confers no benefit. July 2015 Subscriber Item.", + "eyewearMystery201507Notes": "Questi occhiali da sole ti consentono di rimanere fresco anche quando fa caldo. Non conferisce alcun bonus. Oggetto per abbonati, luglio 2015.", "eyewearMystery301404Text": "Occhiali Steampunk", "eyewearMystery301404Notes": "Non esiste occhiale elegante come un paio di occhialini steampunk - eccetto, forse, un monocolo. Non conferisce alcun bonus. Oggetto per abbonati, aprile 3015.", "eyewearMystery301405Text": "Monocolo", "eyewearMystery301405Notes": "Non esiste occhiale elegante come un monocolo - eccetto, forse, un paio di occhialini steampunk. Non conferisce alcun bonus. Oggetto per abbonati, luglio 3015.", - "eyewearArmoirePlagueDoctorMaskText": "Plague Doctor Mask", - "eyewearArmoirePlagueDoctorMaskNotes": "An authentic mask worn by the doctors who battle the Plague of Procrastination. Confers no benefit. Enchanted Armoire: Plague Doctor Set (Item 2 of 3)." + "eyewearArmoirePlagueDoctorMaskText": "Maschera del Dottore della Piaga", + "eyewearArmoirePlagueDoctorMaskNotes": "Un'autentica maschera indossata dai dottori che combattono la Piaga della Procrastinazione. Non conferisce alcun bonus. Baule Incantato: Set da Dottore della Piaga (Oggetto 2 di 3)." } \ No newline at end of file diff --git a/common/locales/it/generic.json b/common/locales/it/generic.json index 615a3894ac..e661338dd9 100644 --- a/common/locales/it/generic.json +++ b/common/locales/it/generic.json @@ -28,7 +28,7 @@ "market": "Mercato", "subscriberItem": "Oggetto misterioso", "newSubscriberItem": "Nuovo oggetto misterioso!", - "subscriberItemText": "Ogni mese, gli abbonati riceveranno un oggetto misterioso. Questo in genere viene rivelato circa una settimana prima della fine del mese. Leggi la pagina 'Mystery Item' nella wiki per conoscere le date esatte.", + "subscriberItemText": "Ogni mese, gli abbonati ricevono un oggetto misterioso. Questo oggetto in genere viene rivelato circa una settimana prima della fine del mese. Leggi la pagina della wiki 'Mystery Item' per maggiori informazioni.", "all": "Tutto", "none": "Nessuno", "or": "Oppure", @@ -69,8 +69,9 @@ "habiticaDayPluralText": "Ha celebrato <%= number %> Habitica Naming Day! Grazie per essere un utente fantastico.", "achievementDilatory": "Eroe dei Dilatori", "achievementDilatoryText": "Ha contribuito alla sconfitta del Drago Terrore dei Dilatori durante l'evento Summer Splash 2014!", - "costumeContest": "Gara Mascherata 2014", - "costumeContestText": "Ha partecipato alla Gara Mascherata di Halloween 2014. Puoi trovare alcune foto su blog.habitica.com/tagged/cosplay!", + "costumeContest": "Costume Contestant", + "costumeContestText": "Participated in the Habitoween Costume Contest. See some of the entries on the Habitica blog!", + "costumeContestTextPlural": "Participated in <%= number %> Habitoween Costume Contests. See some of the entries on the Habitica blog!", "memberSince": "- Membro dal:", "lastLoggedIn": "- Ultimo accesso:", "notPorted": "Questa funzionalità non è ancora stata trasposta dal sito originale.", @@ -79,6 +80,7 @@ "errorUpCase": "ERRORE:", "newPassSent": "Nuova password inviata.", "serverUnreach": "Il server non è attualmente raggiungibile.", + "requestError": "Oh no, c'é stato un errore! Per favore, ricarica la pagina, la tua ultima azione potrebbe non essere stata salvata correttamente.", "seeConsole": "Se l'errore persiste, per favore segnalalo in Aiuto > Segnala un bug. Se sai come utilizzare la console del tuo browser, per favore allega eventuali messaggi di errore.", "error": "Errore", "menu": "Menù", @@ -110,28 +112,40 @@ "December": "dicembre", "dateFormat": "Formato data", "achievementStressbeast": "Eroe di Stoïkalm", - "achievementStressbeastText": "Helped defeat the Abominable Stressbeast during the 2014 Winter Wonderland Event!", - "achievementBurnout": "Savior of the Flourishing Fields", - "achievementBurnoutText": "Helped defeat Burnout and restore the Exhaust Spirits during the 2015 Fall Festival Event!", + "achievementStressbeastText": "Ha contribuito alla sconfitta dell'Abominevole Mostro dello Stress durante l'evento Winter Wonderland 2014!", + "achievementBurnout": "Eroe dei Campi Fiorenti", + "achievementBurnoutText": "Ha contribuito alla sconfitta degli Spiriti dell'Esaurimento durante l'evento Festival d'Autunno 2015!", "checkOutProgress": "Guarda i miei progressi su Habitica!", "cardReceived": "Hai ricevuto una cartolina!", "cardReceivedFrom": "<%= cardType %> da <%= userName %>", "greetingCard": "Cartolina di saluto", "greetingCardExplanation": "You both receive the Cheery Chum achievement!", - "greetingCardNotes": "Send a greeting card to a party member.", + "greetingCardNotes": "Invia una cartolina di saluto a un membro della squadra.", "greeting0": "Ehilà!", "greeting1": "Volevo solo dirti ciao :)", - "greeting2": "`waves frantically`", + "greeting2": "'saluta agitatamente'", "greeting3": "Ehi!", "greetingCardAchievementTitle": "Cheery Chum", "greetingCardAchievementText": "Ehi! Hola! Ciao! Inviate o ricevute <%= cards %> cartoline di saluto.", "thankyouCard": "Cartolina-grazie", - "thankyouCardExplanation": "You both receive the Greatly Grateful achievement!", + "thankyouCardExplanation": "Entrambi ricevete il trofeto Grandemente Grato!", "thankyouCardNotes": "Invia una cartolina di ringraziamento a un compagno di squadra.", "thankyou0": "Grazie mille!", "thankyou1": "Grazie, grazie, grazie!", "thankyou2": "Ti mando un milione di grazie.", "thankyou3": "Hai tutta la mia gratitudine!", - "thankyouCardAchievementTitle": "Greatly Grateful", - "thankyouCardAchievementText": "Grazie per aver espresso la tua gratitudine! Inviate o ricevute <%= cards %> cartoline-grazie." + "thankyouCardAchievementTitle": "Grandemente Grato", + "thankyouCardAchievementText": "Grazie per aver espresso la tua gratitudine! Inviate o ricevute <%= cards %> cartoline-grazie.", + "streakAchievement": "Hai guadagnato una Medaglia Serie!", + "firstStreakAchievement": "Serie di 21 giorni", + "streakAchievementCount": "<%= streaks %> Serie di 21 giorni", + "twentyOneDays": "Hai completato la tua Daily per 21 giorni di fila!", + "dontBreakStreak": "Ottimo lavoro. Non interrompere la serie!", + "dontStop": "Non fermarti ora!", + "levelUpShare": "Sono salito di livello in Habitica migliorando le mie abitudini nella vita reale!", + "questUnlockShare": "Ho sbloccato una nuova missione in Habitica!", + "hatchPetShare": "Ho fatto nascere un nuovo animaletto completando le mie attività nella vita reale!", + "raisePetShare": "Ho fatto crescere un animaletto completando le mie attività nella vita reale!", + "wonChallengeShare": "Ho vinto una sfida in Habitica!", + "achievementShare": "Ho guadagnato una nuova medaglia in Habitica!" } \ No newline at end of file diff --git a/common/locales/it/groups.json b/common/locales/it/groups.json index 70e9398c9e..e6db75c894 100644 --- a/common/locales/it/groups.json +++ b/common/locales/it/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "Esci dalla Locanda", "innCheckIn": "Riposa nella Locanda", "innText": "Stai riposando nella Locanda! Mentre sei qui, le tue Daily non ti danneggeranno alla fine della giornata, ma si resetteranno comunque ogni giorno. Fai attenzione: se stai partecipando ad una missione Boss, il Boss ti danneggerà comunque per le Daily mancate dei tuoi compagni di squadra a meno che non stiano riposando anche loro nella Locanda! Inoltre, il tuo danno al Boss (o la raccolta di oggetti) non avrà effetto finchè non lasci la Locanda.", + "innTextBroken": "Stai riposando nella Locanda, credo... Mentre sei qui, le tue Daily non ti danneggeranno alla fine della giornata, ma si resetteranno comunque ogni giorno... Se stai partecipando ad una missione Boss, il Boss ti danneggerà comunque per le Daily mancate dei tuoi compagni di squadra... a meno che non stiano riposando anche loro nella Locanda... Inoltre, il tuo danno al Boss (o gli oggetti raccolti) non avrà effetto finché non lasci la Locanda... che stanchezza...", "lfgPosts": "Sei in cerca di una squadra? Guarda qui! (in inglese)", "tutorial": "Tutorial", "glossary": "Glossario", @@ -89,7 +90,7 @@ "leaveParty": "Lasciare la squadra?", "sendPM": "Invia messaggio privato", "send": "Invia", - "messageSentAlert": "Messaggio inviato", + "messageSentAlert": "Messaggio inviato!", "pmHeading": "Messaggio privato a <%= name %>", "clearAll": "Cancella tutti i messaggi", "confirmDeleteAllMessages": "Vuoi davvero cancellare tutti i messaggi ricevuti? Gli altri utenti potranno ancora vedere i messaggi che gli hai inviato.", @@ -145,5 +146,6 @@ "partyEmpty": "Sei l'unico membro della tua squadra. Invita qualche amico!", "partyChatEmpty": "La chat della squadra è vuota! Scrivi un messaggio nella casella qui sopra per cominciare una conversazione.", "guildChatEmpty": "La chat della gilda è vuota! Scrivi un messaggio nella casella qui sopra per cominciare una conversazione.", - "possessiveParty": "Squadra di <%= name %>" + "possessiveParty": "Squadra di <%= name %>", + "requestAcceptGuidelines": "Se vuoi pubblicare messaggi nella chat della Taverna o di una qualsiasi squadra o gilda, per favore prima leggi le <%= linkStart %>Linee guida della community<%= linkEnd %> e successivamente clicca sul pulsante qui sotto per indicare che le accetti." } \ No newline at end of file diff --git a/common/locales/it/limited.json b/common/locales/it/limited.json index d4cd34afd1..9e4ecb411a 100644 --- a/common/locales/it/limited.json +++ b/common/locales/it/limited.json @@ -21,6 +21,7 @@ "valentineCardAchievementText": "Aww, tu e il tuo amico dovete volervi proprio bene! Inviati o ricevuti <%= cards %> biglietti di San Valentino.", "polarBear": "Orso Polare", "turkey": "Tacchino", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "Cucciolo di Orso Polare", "jackolantern": "Zucca di Halloween", "seasonalShop": "Negozio Stagionale", @@ -30,6 +31,7 @@ "seasonalShopText": "Benvenuto nel Negozio Stagionale! Abbiamo in vendita degli oggetti primaverili in Edizione Stagionale. Ogni cosa qui sarà acquistabile durante l'evento \"Spring Fling\" ogni anno, ma siamo aperti solo fino al 30 aprile! Quindi fai scorta adesso, sennò dovrai aspettare il prossimo anno per poter acquistare questi oggetti!", "seasonalShopSummerText": "Benvenuto nel Negozio Stagionale! Abbiamo in vendita degli oggetti estivi in Edizione Stagionale. Ogni cosa qui sarà acquistabile durante l'evento \"Summer Splash\" ogni anno, ma siamo aperti solo fino al 31 luglio! Quindi fai scorta adesso, sennò dovrai aspettare il prossimo anno per poter acquistare questi oggetti!", "seasonalShopFallText": "Benvenuto nel Negozio Stagionale! Abbiamo in vendita degli oggetti autunnali in Edizione Stagionale. Ogni cosa qui sarà acquistabile durante l'evento \"Fall Festival\" ogni anno, ma siamo aperti solo fino al 31 ottobre! Quindi fai scorta adesso, sennò dovrai aspettare il prossimo anno per poter acquistare questi oggetti!", + "seasonalShopFallTextBroken": "Oh... Benvenuto al Negozio Stagionale... Abbiamo in vendita oggetti dell'Edizione Stagionale autunnale, o qualcosa del genere... Tutto quello che vedi qui sarà disponibile per l'acquisto durante l'evento Festival d'Autunno di ogni anno, ma siamo aperti sono fino al 31 Ottobre... Penso che dovresti rifornirti ora altrimenti dovrai aspettare... e aspettare... e aspettare... *sigh*", "seasonalShopRebirth": "Se hai usato la Sfera della Rinascita, potrai riacquistare questo equipaggiamento dalla colonna delle Ricompense. All'inizio potrai comprare solo gli oggetti per la tua classe attuale (Guerriero, se non l'hai ancora scelta/cambiata), ma niente paura, gli altri oggetti specifici per le varie classi diventeranno disponibili se ti converti a quella classe.", "candycaneSet": "Caramello (Mago)", "skiSet": "Nevassassino (Assassino)", @@ -57,8 +59,8 @@ "reefSeahealerSet": "Marguaritore Corallino (Guaritore)", "roguishPirateSet": "Pirata Furfante (Assassino)", "monsterOfScienceSet": "Mostro della Scienza (Guerriero)", - "witchyWizardSet": "Witchy Wizard (Mage)", + "witchyWizardSet": "Incantesimi Stregone (Mago)", "mummyMedicSet": "Medico Mummia (Guaritore)", - "vampireSmiterSet": "Vampire Smiter (Rogue)", + "vampireSmiterSet": "Vampiro Castigatore (Assassino)", "fallEventAvailability": "Disponibile fino al 31 ottobre" } \ No newline at end of file diff --git a/common/locales/it/messages.json b/common/locales/it/messages.json index 07ea8592ea..c56288f321 100644 --- a/common/locales/it/messages.json +++ b/common/locales/it/messages.json @@ -15,7 +15,7 @@ "messageEquipped": "<%= itemText %> equipaggiato.", "messageUnEquipped": "<%= itemText %> non è più equipaggiato.", "messageMissingEggPotion": "Ti manca un uovo o una pozione.", - "messageInvalidEggPotionCombo": "You can't hatch Quest Pet Eggs with Magic Hatching Potions! Try a different egg.", + "messageInvalidEggPotionCombo": "Non puoi schiudere le Uova di animale delle missioni con le Pozioni di schiusura magiche! Prova un uovo diverso.", "messageAlreadyPet": "Possiedi già quell'animale. Prova un'altra combinazione!", "messageHatched": "Il tuo uovo si è schiuso! Vai alla Scuderia per equipaggiarlo.", "messageNotEnoughGold": "Non hai abbastanza Oro", @@ -30,5 +30,26 @@ "messageAlreadyOwnGear": "Possiedi già questo oggetto. Equipaggialo andando in Inventario > Equipaggiamento.", "armoireEquipment": "<%= image %> Hai trovato dell'equipaggiamento raro nello Scrigno: <%= dropText %>! Fantastico!", "armoireFood": "<%= image %> Frughi nello Scrigno e trovi <%= dropArticle %><%= dropText %>. Cosa ci fa qui dentro?", - "armoireExp": "Fai a botte con lo Scrigno e ottieni Esperienza. Prendi questo!" + "armoireExp": "Fai a botte con lo Scrigno e ottieni Esperienza. Prendi questo!", + "messageInsufficientGems": "Non hai abbastanza gemme!", + "messageAuthPasswordMustMatch": ":password e :confirmPassword non corrispondono", + "messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword required", + "messageAuthUsernameTaken": "Nome utente già in uso", + "messageAuthEmailTaken": "Indirizzo email già utilizzato", + "messageAuthNoUserFound": "Nessun utente trovato.", + "messageAuthMustBeLoggedIn": "Devi aver eseguito l'accesso.", + "messageAuthMustIncludeTokens": "Devi includere un token e un UID (ID utente) nella tua richiesta.", + "messageGroupNotFound": "Gruppo inesistente o a cui non puoi accedere.", + "messageGroupAlreadyInParty": "Già in una squadra, prova a ricaricare la pagina", + "messageGroupOnlyLeaderCanUpdate": "Solo il leader del gruppo può aggiornare il gruppo!", + "messageGroupRequiresInvite": "Non puoi unirti ad un gruppo se non sei stato invitato.", + "messageGroupCannotRemoveSelf": "Non puoi rimuovere te stesso!", + "messageGroupChatBlankMessage": "Non puoi inviare un messaggio vuoto", + "messageGroupChatLikeOwnMessage": "Non puoi mettere 'mi piace' ai tuoi stessi messaggi. Non essere quel tipo di persona.", + "messageGroupChatFlagOwnMessage": "Non puoi segnalare un tuo messaggio.", + "messageGroupChatFlagAlreadyReported": "Hai già segnalato questo messaggio.", + "messageGroupChatNotFound": "Messaggio non trovato!", + "messageGroupChatAdminClearFlagCount": "Solo un amministratore può azzerare il conteggio!", + "messageUserOperationProtected": "Il percorso `<%= operation %>` non è stato salvato, perchè è un percorso protetto.", + "messageUserOperationNotFound": "Operazione <%= operation %> non trovata" } \ No newline at end of file diff --git a/common/locales/it/noscript.json b/common/locales/it/noscript.json new file mode 100644 index 0000000000..2be7eaa71e --- /dev/null +++ b/common/locales/it/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Ahimé! Non hai abilitato JavaScript nel tuo browser", + "jsDisabledHeadingFull": "Ahimé! Non hai abilitato JavaScript nel tuo browser, e senza, Habitica non può funzionare bene", + "jsDisabledText": "Habitica non può funzionare correttamente senza di esso!", + "jsDisabledLink": "Per favore abilita JavaScript per continuare!" +} \ No newline at end of file diff --git a/common/locales/it/npc.json b/common/locales/it/npc.json index 1f8283cfdd..98f7b43a43 100644 --- a/common/locales/it/npc.json +++ b/common/locales/it/npc.json @@ -7,15 +7,19 @@ "daniel": "Daniel", "danielText": "Benvenuto nella Taverna! Resta per un po' e incontra la gente del posto. Se hai bisogno di riposare (vacanza? malattia?), ti sistemerò nella Locanda. Mentre riposi, le tue Daily non ti danneggeranno alla fine del giorno, ma potrai comunque spuntarle.", "danielText2": "Fai attenzione: se stai partecipando ad una missione Boss, il boss ti danneggerà comunque per le Daily non completate dei tuoi compagni di squadra! Inoltre, il tuo danno al Boss (o la raccolta di oggetti) non avrà effetto finchè non lasci la Locanda.", + "danielTextBroken": "Benvenuto nella Taverna... Credo... Se hai bisogno di riposare, ti sistemerò nella Locanda... Mentre riposi, le tue Giornaliere non ti danneggeranno alla fine del giorno, ma potrai comunque spuntarle... se ne hai le forze...", + "danielText2Broken": "Oh... Se stai partecipando ad una missione Boss, il boss ti danneggerà comunque per le Daily non completate dei tuoi compagni di squadra... Inoltre, il tuo danno al Boss (o gli oggetti raccolti) non avrà effetto finché non lasci la Locanda...", "alexander": "Alexander il Mercante", "welcomeMarket": "Benvenuto nel Mercato! Compra uova rare e pozioni! Vendi la merce che ti avanza! Commissiona servizi utili! Vieni a vedere cosa abbiamo da offrire.", - "sellForGold": "Vendi <%= item %> per <%= gold %> Oro", - "sellEggForGold": "Vendi Uovo di <%= itemType %> per <%= gold %> Oro", - "sellPotionForGold": "Vendi Pozione <%= itemType %> per <%= gold %> Oro", + "displayItemForGold": "Vuoi vendere <%= itemType %>?", + "displayEggForGold": "Vuoi vendere un <%= itemType %> Uovo?", + "displayPotionForGold": "Vuoi vendere una <%= itemType %> Pozione?", + "sellForGold": "Vendilo per <%= gold %> Oro", "buyGems": "Compra Gemme", "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!", + "ianText": "Benvenuto nel Negozio delle Missioni! Qui puoi utilizzare le Pergamene delle missioni per combattere i mostri con i tuoi amici. Assicurati di controllare la nostra raffinata scelta di Pergamene delle missioni per l'acquisto a destra!", + "ianBrokenText": "Benvenuto nel Negozio delle Missioni... Qui puoi utilizzare le Pergamene delle missioni per combattere i mostri con i tuoi amici... Assicurati di controllare la nostra raffinata scelta di Pergamene delle missioni per l'acquisto a destra...", "USD": "USD", "newStuff": "Novità", "cool": "Ricordamelo più tardi", @@ -58,7 +62,7 @@ "tourHallPage": "Benvenuto nel Salone degli Eroi, dove viene reso onore agli aiutanti open-source di Habitica. Che sia attraverso codice, arte, musica, testi o anche semplice disponibilità, hanno guadagnato Gemme, equipaggiamento esclusivo e titoli prestigiosi. Anche tu puoi contribuire ad Habitica!", "tourPetsPage": "Questa è la Scuderia! Dopo il livello 3, puoi far nascere degli animali utilizzando uova e pozioni. Quando fai schiudere un uovo nel Mercato, apparirà qui! Fai click sull'immagine di un animale per aggiungerlo al tuo avatar. Dagli da mangiare il cibo che troverai dopo il livello 3, e crescerà fino a diventare una potente cavalcatura.", "tourMountsPage": "Una volta che avrai dato abbastanza cibo al tuo animale da trasformarlo in una cavalcatura, apparirà qui. (Animali, cavalcature e cibo sono disponibili dopo il livello 3.) Fai click su una cavalcatura per montare in sella!", - "tourEquipmentPage": "This is where your Equipment is stored! Your Battle Gear affects your stats. If you want to show different Equipment on your avatar without changing your stats, click \"Enable Costume.\"", + "tourEquipmentPage": "Qui è dove il tuo Equipaggiamento è immagazzinato! Il tuo Equipaggiamento da battaglia influenza le tue statistiche. Se desideri mostrare un Equipaggiamento diverso sul tuo avatar senza modificare le tue statistiche, clicca \"Abilita Costume.\"", "tourOkay": "Ok!", "tourAwesome": "Fantastico!", "tourSplendid": "Splendido!", @@ -75,9 +79,9 @@ "welcome1": "Crea un semplice avatar.", "welcome1notes": "Questo avatar rappresenta te e i tuoi progressi nel gioco.", "welcome2": "Crea e personalizza le tue attività.", - "welcome2notes": "How well you do on your real-life tasks will control how well you do in the game!", - "welcome3": "Progress in life and the game!", - "welcome3notes": "As you improve your life, your avatar will level up and unlock pets, quests, equipment, and more!", + "welcome2notes": "La tua abilità nelle attività della vita reale determinerà la tua ", + "welcome3": "Progredisci nella vita e nel gioco!", + "welcome3notes": "Mentre migliori la tua vita, il tuo avatar salirà di livello e sbloccherà gli animali, le missioni, l'equipaggiamento, e molto altro ancora!", "welcome4": "Evita le cattive abitudini che ti fanno perdere Salute (HP), o il tuo avatar morirà!", "welcome5": "Ora personalizzerai il tuo avatar e imposterai le tue attività...", "imReady": "Entra in Habitica" diff --git a/common/locales/it/pets.json b/common/locales/it/pets.json index 3f8f6a7e94..956a22d364 100644 --- a/common/locales/it/pets.json +++ b/common/locales/it/pets.json @@ -1,13 +1,13 @@ { "pets": "Animali", "petsFound": "Animali trovati", - "magicPets": "Magic Potion Pets", + "magicPets": "Animali di Pozioni Magiche", "rarePets": "Animali rari", "questPets": "Animali delle missioni", "mounts": "Cavalcature", "mountsTamed": "Cavalcature domate", "questMounts": "Cavalcature delle missioni", - "magicMounts": "Magic Potion Mounts", + "magicMounts": "Cavalcature di Pozioni Magiche", "rareMounts": "Cavalcature rare", "etherealLion": "Leone Etereo", "veteranWolf": "Lupo Veterano", @@ -18,7 +18,7 @@ "mammoth": "Mammut Lanoso", "orca": "Orca", "royalPurpleGryphon": "Grifone Viola Reale", - "phoenix": "Phoenix", + "phoenix": "Fenice", "rarePetPop1": "Clicca sulla zampa d'oro per scoprire come ottenere questo raro animale contribuendo a migliorare Habitica!", "rarePetPop2": "Come ottenere questo animale?", "potion": "Pozione <%= potionType %>", @@ -34,8 +34,8 @@ "foodText": "cibo", "food": "Cibo e Selle", "noFood": "Non hai cibo o selle.", - "dropsExplanation": "Get these items faster with Gems if you don't want to wait for them to drop when completing a task. Learn more about the drop system.", - "premiumPotionNoDropExplanation": "Magic Hatching Potions cannot be used on eggs received from Quests. The only way to get Magic Hatching Potions is by buying them below, not from random drops.", + "dropsExplanation": "Ottieni questi oggetti più velocemente con le Gemme se non vuoi aspettare di ottenerli come drop quando completi un'attività. Per saperne di più sul sistema di drop. ", + "premiumPotionNoDropExplanation": "Le Pozioni di Schiusura Magiche non possono essere usate sulle uova ottenute dalle Missioni. L'unico modo per ottenere Pozioni di Schiusura Magiche è comprarle qui sotto, non da drop casuali.", "beastMasterProgress": "Progresso in Re delle Bestie", "stableBeastMasterProgress": "Progresso in Re delle Bestie: <%= number %> Animali trovati", "beastAchievement": "Hai ottenuto la medaglia \"Re delle Bestie\" per aver collezionato tutti gli animali!", @@ -58,8 +58,16 @@ "firstDrop": "Hai sbloccato il sistema di drop! Ora, quando completi un'attività, hai una piccola probabilità di trovare un oggetto, tra cui uova, pozioni e cibo! Hai appena trovato un Uovo di <%= eggText %>! <%= eggNotes %>", "useGems": "Se hai messo gli occhi su un animale, ma non vuoi più aspettare per averlo, usa le gemme in Inventario > Mercato per comparne uno!", "hatchAPot": "Far nascere <%= egg %> <%= potion %>?", + "hatchedPet": "E' nato un <%= egg %> <%= potion %>!", + "displayNow": "Mostra ora", + "displayLater": "Mostra più tardi", + "earnedCompanion": "Con tutta la tua produttività, ti sei guadagnato un nuovo compagno. Nutrilo per farlo crescere!", "feedPet": "Dare da mangiare <%= article %><%= text %> al tuo <%= name %>?", "useSaddle": "Mettere la sella a <%= pet %>?", + "raisedPet": "Hai fatto crescere un <%= pet %>!", + "earnedSteed": "Completando le tue attività, hai ottenuto un fidato destriero!", + "rideNow": "Cavalca ora", + "rideLater": "Cavalca più tardi", "petName": "<%= egg %> <%= potion %>", "mountName": "<%= mount %> <%= potion %>", "petKeyName": "Chiave dell'Allevamento", diff --git a/common/locales/it/quests.json b/common/locales/it/quests.json index 9722c0363b..fe06dc0824 100644 --- a/common/locales/it/quests.json +++ b/common/locales/it/quests.json @@ -13,6 +13,7 @@ "youReceived": "Hai ricevuto", "dropQuestCongrats": "Congratulazioni per aver ottenuto questa Pergamena! Puoi invitare la tua squadra a cominciare questa missione ora, oppure puoi farlo in un secondo momento andando in Inventario > Missioni.", "questSend": "Cliccando \"Invita\" manderai un invito ai membri della tua squadra. Quando tutti i membri avranno accettato o rifiutato, la missione inizierà. Vedi lo stato in Social > Squadra.", + "questSendBroken": "Cliccando \"Invita\" manderai un invito ai membri della tua squadra... Quando tutti i membri avranno accettato o rifiutato, la missione inizierà... Vedi lo stato in Social > Squadra...", "inviteParty": "Invita squadra nella missione", "questInvitation": "Invito alla missione:", "questInvitationTitle": "Invito alla missione", @@ -24,19 +25,25 @@ "rejected": "Rifiutata", "pending": "In attesa", "questStart": "Una volta che ogni membro ha accettato o rifiutato, la missione inizia. Solo chi ha selezionato \"Accetta\" potrà partecipare e ricevere le ricompense. Se dei membri rimangono in attesa per troppo tempo (forse perché inattivi?) il Capomissione può iniziare la missione senza di loro selezionando \"Inizia\". Può anche annullare la missione e riottenere la Pergamena selezionando \"Annulla\".", + "questStartBroken": "Una volta che ogni membro ha accettato o rifiutato, la missione inizia... Solo chi ha selezionato \"Accetta\" potrà partecipare e ricevere le ricompense... Se dei membri rimangono in attesa per troppo tempo (forse perché inattivi?) il Capomissione può iniziare la missione senza di loro selezionando \"Inizia\"... Può anche annullare la missione e riottenere la Pergamena selezionando \"Annulla\"...", "begin": "Inizia", "bossHP": "Salute del Boss", "bossStrength": "Forza del Boss", - "rage": "Rage", + "rage": "Furia", "collect": "Raccogli", "collected": "Collezionati", "collectionItems": "<%= number %> <%= items %>", "itemsToCollect": "Oggetti da raccogliere", "bossDmg1": "Ogni Daily e To-Do completata e ogni Habit positiva danneggiano il boss. Puoi infliggere danni maggiori con le attività più rosse, con Attacco Brutale e con Fiammata. I boss danneggeranno ogni partecipante per le Daily mancate (moltiplicate per la Forza del boss) oltre al loro normale danno, quindi tieni in forze la tua squadra completando le tue Daily! I danni inflitti e ricevuti dal boss sono calcolati al cambio di giorno (all'ora da te impostata).", "bossDmg2": "Solo i partecipanti potranno combattere il boss e condividere il bottino della missione.", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "Ogni Daily e To-Do completata e ogni Habit positiva danneggiano il boss... Puoi infliggere danni maggiori con le attività più rosse, con Attacco Brutale e con Fiammata... I boss danneggeranno ogni partecipante per le Daily mancate (moltiplicate per la Forza del boss) oltre al loro normale danno, quindi tieni in forze la tua squadra completando le tue Daily... I danni inflitti e ricevuti dal boss sono calcolati al cambio di giorno (all'ora da te impostata)...", + "bossDmg2Broken": "Solo i partecipanti combatteranno il boss e si divideranno il bottino della missione...", + "tavernBossInfo": "Competa Attività Giornaliere e To-Do e conquista Abitudini positive per danneggiare il Boss Mondiale! Attività Giornaliere non completate riempiono la Barra del Colpo Esaustivo. Quando la Barra del Colpo Esaustivo é piena, il Boss Mondiale attaccherà un PNG. Un Boss Mondiale non danneggerà mai giocatori individuali o account in nessuna maniera. Solo le Attivitá di account attivi che non stanno riposando nella Locanda verranno conteggiate.", + "tavernBossInfoBroken": "Competa Attività Giornaliere e To-Do e conquista Abitudini positive per danneggiare il Boss Mondiale! Attività Giornaliere non completate riempiono la Barra del Colpo Esaustivo. Quando la Barra del Colpo Esaustivo é piena, il Boss Mondiale attaccherà un PNG. Un Boss Mondiale non danneggerà mai giocatori individuali o account in nessuna maniera. Solo le Attivitá di account attivi che non stanno riposando nella Locanda verranno conteggiate.", "bossColl1": "Per ottenere gli oggetti, completa delle attività positive. Gli oggetti delle missioni compaiono come quelli normali; non li vedrai però fino al giorno dopo, quando tutto quello che hai trovato verrà raccolto e aggiunto agli oggetti già trovati.", "bossColl2": "Solo i partecipanti potranno collezionare gli oggetti e condividere il bottino della missione.", + "bossColl1Broken": "Per raccogliere oggetti, completa le tue attività positive... Gli oggetti delle missioni compaiono come oggetti normali; tuttavia, non vedrai gli oggetti fino al giorno successivo, dopodiché tutto ciò che hai trovato verrà conteggiato e aggiunto ai tuoi oggetti.", + "bossColl2Broken": "Solo i partecipanti potranno collezionare gli oggetti e condividere il bottino della missione.", "abort": "Annulla", "leaveQuest": "Abbandona missione", "sureLeave": "Vuoi davvero abbandonare la missione attiva? Tutti i tuoi progressi nella missione andranno persi.", @@ -63,10 +70,13 @@ "sureAbort": "Vuoi davvero annullare questa missione? Questo causerà l'annullamento della missione anche per tutti i membri della tua squadra ed ogni progresso andrà perduto. La Pergamena verrà restituita al Capomissione.", "doubleSureAbort": "Sei veramente sicuro? Assicurati che non ti odieranno per sempre!", "questWarning": "Se altri giocatori si uniscono alla squadra prima che la missione abbia inizio, anche loro riceveranno un invito. Tuttavia, una volta che la missione sarà iniziata, nessun altro membro della squadra potrà unirsi ai partecipanti.", + "questWarningBroken": "Se altri giocatori si uniscono alla squadra prima che la missione abbia inizio, anche loro riceveranno un invito. Tuttavia, una volta che la missione sarà iniziata, nessun altro membro della squadra potrà unirsi ai partecipanti.", "bossRageTitle": "Furia", "bossRageDescription": "Quando questa barra sarà completamente piena, il boss eseguirà un attacco speciale!", "startAQuest": "COMINCIA UNA MISSIONE", "startQuest": "Comincia missione", "whichQuestStart": "Che missione vuoi cominciare?", - "getMoreQuests": "Ottieni altre missioni" + "getMoreQuests": "Ottieni altre missioni", + "unlockedAQuest": "Hai sbloccato una missione!", + "leveledUpReceivedQuest": "Sei salito di livello a Livello <%= level %> e hai ricevuto una pergamena della missione!" } \ No newline at end of file diff --git a/common/locales/it/questscontent.json b/common/locales/it/questscontent.json index 2bdd9d1adf..71a366b3c5 100644 --- a/common/locales/it/questscontent.json +++ b/common/locales/it/questscontent.json @@ -58,15 +58,15 @@ "questSpiderBoss": "Ragno del Gelo", "questSpiderDropSpiderEgg": "Ragno (uovo)", "questSpiderUnlockText": "Sblocca l'acquisto delle uova di ragno nel Mercato", - "questVice1Text": "Vice, Part 1: Free Yourself of the Dragon's Influence", + "questVice1Text": "Vyce, Parte 1: Liberati dall'Influsso del Drago", "questVice1Notes": "

Dicono che una terribile minaccia si celi nelle caverne del monte Habitica. Un mostro la cui presenza stravolge la volontà dei forti eroi della terra, spingendoli verso le cattive abitudini e la pigrizia! La bestia è un enorme drago dall'immenso potere, ed è composto delle ombre stesse. Vyce, l'infida Viverna Oscura. Coraggio Habiteers, alzatevi e sconfiggete questa immonda creatura una volta per tutte, ma solo se vi ritenete all'altezza della sua incredibile potenza.

Vyce Parte 1:

Come potete aspettarvi di sconfiggere la bestia se essa ha già il controllo su di voi? Non cadete vittime della pigrizia e di Vyce! Lavorate duramente per liberarvi dall'influsso dell'oscuro drago!

", "questVice1Boss": "Ombra di Vyce", "questVice1DropVice2Quest": "Vyce - Parte 2 (Pergamena)", - "questVice2Text": "Vice, Part 2: Find the Lair of the Wyrm", + "questVice2Text": "Vyce, Parte 2: Trova la Tana della Viverna", "questVice2Notes": "Ora che l'influsso di Vyce è stato dissipato, sentite tornare dentro di voi un'ondata di forza che non sapevate di avere. Confidenti in voi stessi e nella vostra capacità di contrastare l'influsso del dragone, la tua squadra si incammina verso il Monte Habitica. Appena arrivati all'entrata della caverna, vi fermate. Rivoli d'ombra, simili a nebbia, aleggiano intorno all'ingresso, rendendo quasi impossibile vedere cosa c'è davanti a voi. La luce delle vostre lanterne sembra interrompersi improvvisamente nel punto in cui iniziano le ombre. Si dice che solo la luce magica possa penetrare l'infernale foschia del drago. Se riuscirete a trovare abbastanza cristalli di luce, potrete usarli per farvi strada fino al drago.", "questVice2CollectLightCrystal": "Cristalli di Luce", "questVice2DropVice3Quest": "Vyce - Parte 3 (Pergamena)", - "questVice3Text": "Vice, Part 3: Vice Awakens", + "questVice3Text": "Vyce, Parte 3: Il Risveglio di Vyce", "questVice3Notes": "Dopo innumerevoli sforzi, il tuo gruppo ha scoperto la tana di Vyce. Il gigantesco mostro guarda la tua squadra con disgusto. Mentre un'ombra turbina intorno a te, una voce sussurra nella tua testa: \"Altri sciocchi cittadini di Habitica venuti a fermarmi? Che carini. Sarebbe stato più saggio non venire.\" Lo squamoso titano alza di nuovo la testa e si prepara ad attaccare. Questa è la tua occasione! Dai il meglio di te e sconfiggi Vyce volta per tutte!", "questVice3Completion": "Le ombre svaniscono dalla caverna, lasciando un pesante silenzio. Congratulazioni, ce l'hai fatta! Hai sconfitto Vyce! Tu e la tua squadra potete finalmente tirare un respiro di sollievo. Godetevi la vittoria, coraggiosi Habiteers, ma fate tesoro delle lezioni imparate dalla battaglia con Vyce ed andate avanti. Ci sono ancora molte buone abitudini da allenare e forse mali ancora peggiori da estirpare!", "questVice3Boss": "Vyce, la Viverna Oscura", @@ -87,7 +87,7 @@ "questMoonstone3Boss": "Necro-Vyce", "questMoonstone3DropRottenMeat": "Carne ammuffita (Cibo)", "questMoonstone3DropZombiePotion": "Pozione di schiusura Zombie", - "questGoldenknight1Text": "The Golden Knight, Part 1: A Stern Talking-To", + "questGoldenknight1Text": "Il Cavaliere Dorato, Parte 1: Una Severa Ramanzina", "questGoldenknight1Notes": "

Il Cavaliere d'Oro si sta intromettendo nelle questioni dei poveri abtanti di Habitica. Non hai fatto tutte le tue Daily? Hai violato un Habit? Lei si sentirà in diritto di importunarti su come dovresti seguire il suo esempio: lei è il modello perfetto di abitante di Habitica, e tu non sei nient'altro che una delusione. Beh, questo non è per niente carino da parte sua! Tutti possono sbagliare, e nessuno dovrebbe essere trattato così duramente per questo. Forse è il momento che tu raccolga un po' di testimonianze da abitanti bistrattati e faccia una bella ramanzina al Cavaliere d'Oro!

", "questGoldenknight1CollectTestimony": "Testimonianze", "questGoldenknight1DropGoldenknight2Quest": "Il Cavaliere Dorato Parte 2: L'oro offuscato (Pergamena)", @@ -128,15 +128,15 @@ "questSeahorseBoss": "Stallone Marino", "questSeahorseDropSeahorseEgg": "Cavalluccio Marino (Uovo)", "questSeahorseUnlockText": "Sblocca l'acquisto delle uova di cavalluccio marino nel Mercato", - "questAtom1Text": "Attack of the Mundane, Part 1: Dish Disaster!", + "questAtom1Text": "Attacco del Mondano, Parte 1: Disastro di Stoviglie!", "questAtom1Notes": "Hai raggiunto le rive del Lago Lavapiatti per un po' di relax... Ma il lago è infestato da piatti da lavare! Come sarà successo? Beh, non puoi permettere che il lago rimanga in questo stato. C'è soltanto una cosa da fare: lavare i piatti e salvare il vostro luogo di villeggiatura! Sarà meglio trovare un po' di sapone per pulire questa porcheria. Molto sapone...", "questAtom1CollectSoapBars": "Barrette di Sapone", "questAtom1Drop": "Il Mostro di SnackLess (Pergamena)", - "questAtom2Text": "Attack of the Mundane, Part 2: The SnackLess Monster", + "questAtom2Text": "Attacco del Mondano, Parte 2: Il Mostro Senza-Snack", "questAtom2Notes": "Phew, questo posto sembra molto più bello con tutti questi piatti puliti. Forse, adesso potrai finalmente rilassarti un po'. Oh - sembrerebbe un cartone della pizza quello che sta galleggiando nel lago. Beh, cosa sarà mai un'altra cosa da pulire in fondo? Ma, dannazione, non è un semplice cartone di pizza! Con uno scatto improvviso la scatola si solleva dall'acqua per rivelare la sua vera natura: è la testa di un mostro. Non può essere! Il leggendario Mostro di Snackless? Si dice che abbia vissuto nascosto sin dalla preistoria: una creatura generata dagli avanzi di cibo e dall'immondizia degli antichi abitanti di Habitica. Bleah!", "questAtom2Boss": "Il Mostro di SnackLess", "questAtom2Drop": "Il Bucatomante (Pergamena)", - "questAtom3Text": "Attack of the Mundane, Part 3: The Laundromancer", + "questAtom3Text": "Attacco del Mondano, Parte 3: Il Lavamante", "questAtom3Notes": "Con un urlo assordante, e cinque deliziosi tipi di formaggio che cadono dalla sua bocca, il Mostro di Snackless cade in pezzi. \"COME OSI!\" echeggia una voce da sotto la superficie dell'acqua. Una figura che indossa una tunica blu emerge dall'acqua, brandendo uno spazzolino da water magico. Dalla superficie del lago, inizia ad emergere biancheria sporchissima. \"Sono il Bucatomante!\" annuncia rabbioso. \"Sei davvero coraggioso - lavare i miei piatti deliziosamente sporchi, distruggere il mio servitore, ed entrare nel mio regno con abiti così puliti. Preparati a sentire la sozza furia della mia magia anti-bucato\"!", "questAtom3Completion": "Il pazzo Bucatomante è stato sconfitto! Bucato pulito si deposita a pile intorno a te. Le cose sembrano andare molto bene da queste parti. Mentre inizi a farti strada tra le armature stirate da poco, un bagliore di metallo attrae la tua attenzione, ed il tuo sguardo si posa su un elmo luccicante. Non sai chi possa aver indossato prima questo oggetto luminoso, ma mentre lo indossi, senti la calda presenza di uno spirito generoso. Un peccato che non ci abbiano cucito sopra un'etichetta col nome.", "questAtom3Boss": "Il Bucatomante", @@ -184,7 +184,7 @@ "questRockBoss": "Il Colosso di Cristallo", "questRockCompletion": "La tua diligenza ti ha permesso di trovare un sentiero sicuro tra le montagne viventi. In piedi al sole, il tuo amico @intune nota qualcosa di scintillante al suolo vicino all'uscita della caverna. Ti abbassi per raccoglierlo, e vedi che è una piccola roccia attraversata da una vena dorata. Al suo fianco ci sono svariate rocce dalla forma peculiare. Sembrano quasi... uova?", "questRockDropRockEgg": "Roccia (Uovo)", - "questRockUnlockText": "Sblocca l'cquisto delle uova di roccia nel Mercato", + "questRockUnlockText": "Sblocca l'acquisto delle uova di roccia nel Mercato", "questBunnyText": "La Coniglietta Assassina", "questBunnyNotes": "Dopo molti giorni difficili, raggiungi la cima del Monte Procrastinazione e ti trovi di fronte alle imponenti porte della Fortezza della Negligenza. Leggi l'inscrizione nella pietra. \"All'interno risiede la creatura che incarna le tue più grandi paure, la ragione dietro la tua mancanza di azione. Bussa e confronta il tuo demone!\" Tremi, immaginando l'orrore all'interno e senti l'istinto di scappare come hai fatto così tante volte in precedenza. @Draayder ti trattiene. \"Sta calmo, amico mio! È giunta l'ora. Devi affrontarlo!\"

Bussi e le porte si aprono verso l'interno. Dall'oscurità senti un ruggito assordante e sfoderi la tua arma.", "questBunnyBoss": "Coniglietta Assassina", @@ -203,63 +203,75 @@ "questSheepCompletion": "Colpita dalla tua diligenza, l'Ariete Tuonante è prosciugata della sua furia. Lancia tre enormi chicchi di grandine nella tua direzione, e poi scompare con un cupo rombo. Guardandoli meglio, scopri che i chicchi di grandine sono in realtà tre uova morbide e pelose. Le raccogli, e ti incammini verso casa sotto un cielo azzurro.", "questSheepDropSheepEgg": "Pecorella (Uovo)", "questSheepUnlockText": "Sblocca l'acquisto delle uova di pecorella nel Mercato", - "questKrakenText": "The Kraken of Inkomplete", + "questKrakenText": "Il Kraken dell'Inkompletezza", "questKrakenNotes": "It's a warm, sunny day as you sail across the Inkomplete Bay, but your thoughts are clouded with worries about everything that you still need to do. It seems that as soon as you finish one task, another crops up, and then another...

Suddenly, the boat gives a horrible jolt, and slimy tentacles burst out of the water on all sides! \"We're being attacked by the Kraken of Inkomplete!\" Wolvenhalo cries.

\"Quickly!\" Lemoness calls to you. \"Strike down as many tentacles and tasks as you can, before new ones can rise up to take their place!\"", "questKrakenBoss": "The Kraken of Inkomplete", "questKrakenCompletion": "As the Kraken flees, several eggs float to the surface of the water. Lemoness examines them, and her suspicion turns to delight. \"Cuttlefish eggs!\" she says. \"Here, take them as a reward for everything you've completed.\"", "questKrakenDropCuttlefishEgg": "Seppia (Uovo)", "questKrakenUnlockText": "Sblocca l'acquisto delle uova di seppia nel Mercato", - "questWhaleText": "Wail of the Whale", + "questWhaleText": "Il Lamento della Balena", "questWhaleNotes": "You arrive at the Diligent Docks, hoping to take a submarine to watch the Dilatory Derby. Suddenly, a deafening bellow forces you to stop and cover your ears. \"Thar she blows!\" cries Captain @krazjega, pointing to a huge, wailing whale. \"It's not safe to send out the submarines while she's thrashing around!\"

\"Quick,\" calls @UncommonCriminal. \"Help me calm the poor creature so we can figure out why she's making all this noise!\"", - "questWhaleBoss": "Wailing Whale", - "questWhaleCompletion": "After much hard work, the whale finally ceases her thunderous cry. \"Looks like she was drowning in waves of negative habits,\" @zoebeagle explains. \"Thanks to your consistent effort, we were able to turn the tides!\" As you step into the submarine, several whale eggs bob towards you, and you scoop them up.", + "questWhaleBoss": "Balena Lamentosa", + "questWhaleCompletion": "Dopo molto duro lavoro, la balena finalmente cessa il suo lamento portentoso. \"Sembra che stesse affogando nelle onde delle abitudini negative\", spiega @zoebeagle. \"Grazie al tuo impegno costate, siamo riusciti a cambiare la situazione!\" Mentre entri nel sottomarino, diverse uova di balena fluttuano verso di te, e tu le raccogli.", "questWhaleDropWhaleEgg": "Balena (Uovo)", "questWhaleUnlockText": "Sblocca l'acquisto delle uova di balena nel Mercato", - "questDilatoryDistress1Text": "Dilatory Distress, Part 1: Message in a Bottle", - "questDilatoryDistress1Notes": "A message in a bottle arrived from the newly rebuilt city of Dilatory! It reads: \"Dear Habiticans, we need your help once again. Our princess has disappeared and the city is under siege by some unknown watery demons! The mantis shrimps are holding the attackers at bay. Please aid us!\" To make the long journey to the sunken city, one must be able to breathe water. Fortunately, the alchemists @Benga and @hazel can make it all possible! You only have to find the proper ingredients.", - "questDilatoryDistress1Completion": "You don the the finned armor and swim to Dilatory as quickly as you can. The merfolk and their mantis shrimp allies have managed to keep the monsters outside the city for the moment, but they are losing. No sooner are you within the castle walls than the horrifying siege descends!", + "questDilatoryDistress1Text": "Dilatoria sotto Attacco, Parte 1: Messaggio in Bottiglia", + "questDilatoryDistress1Notes": "Un messaggio in una bottiglia é arrivato dalla nuovamente ricostruita città di Dilatoria! C'é scritto: \"Cari abitanti di Habitica, abbiamo bisogno del vostro aiuto un'altra volta. La nostra principessa é sparita e la città é tenuta sotto assedio da misteriosi demoni dell'acqua! Le Canocchie stanno trattenendo gli attaccanti. Per favore aiutateci!\" Per intraprendere il lungo viaggio verso la città sommersa, é necessario essere in grado di respirare sott'acqua. Fortunatamente gli alchimisti @Benga e @hazel possono renderlo possibile! Devi solo trovare gli ingredienti adatti. ", + "questDilatoryDistress1Completion": "Indossi l'armatura con le pinne e nuoti fino a Dilatoria più velocemente che puoi. La gente del mare e i loro alleati canocchie sono riusciti a tenere i mostri fuori dalla città per il momento, ma stanno perdendo. Non fai quasi in tempo ad arrivare all'interno delle mura del castello che l'orribile assedio comincia! ", "questDilatoryDistress1CollectFireCoral": "Corallo di Fuoco", "questDilatoryDistress1CollectBlueFins": "Pinne Azzurre", - "questDilatoryDistress1DropArmor": "Finned Oceanic Armor (Armor)", - "questDilatoryDistress2Text": "Dilatory Distress, Part 2: Creatures of the Crevasse", - "questDilatoryDistress2Notes": "The siege can be seen from miles away: thousands of disembodied skulls rushing through a portal in the crevasse walls and making their way towards Dilatory.

When you meet King Manta in his war room, his eyes seem sunken, and his face is worried. \"My daughter Adva disappeared into the Dark Crevasse just before this siege began. Please find her and bring her back home safely! I will lend you my Fire Coral Circlet to aid you. If you succeed, it is yours.\"", - "questDilatoryDistress2Completion": "You vanquish the nightmarish horde of skulls, but you feel no closer to finding Adva. You speak to @Kiwibot, the royal tracker, to see if she has any ideas. \"The mantis shrimps that defend the city must have seen Adva escape,\" @Kiwibot says. \"Try following them into the Dark Crevasse.\"", - "questDilatoryDistress2Boss": "Water Skull Swarm", - "questDilatoryDistress2RageTitle": "Swarm Respawn", - "questDilatoryDistress2RageDescription": "Swarm Respawn: This bar fills when you don't complete your Dailies. When it is full, the Water Skull Swarm will heal 30% of its remaining health!", + "questDilatoryDistress1DropArmor": "Armatura Oceanica con le Pinne (Armatura)", + "questDilatoryDistress2Text": "Dilatoria sotto Attacco, Parte 2: Le Creature del Crepaccio", + "questDilatoryDistress2Notes": "L'assedio può essere visto da miglia di distanza: migliaia di teschi senza corpo si affrettano attraverso un portale nelle pareti del crepaccio e vanno in direzione di Dilatoria.

Quando incontri Re Manta nella sua sala della guerra, i suoi occhi sembrano infossati, e la sua faccia é preoccupata. \"Mia figlia Adva é scomparsa dentro al Crepaccio Oscuro appena prima che l'assedio cominciasse. Per favore, trovala e portala a casa sana e salve! Ti presterò il mio Cerchietto del Corallo di Fuoco per aiutarti. Se avrai successo, sarà tuo.\"", + "questDilatoryDistress2Completion": "Sconfiggi l'infernale orda di teschi, ma non ti senti affatto più vicino a trovare Adva. Parli a @Kiwibot, l'investigatore reale, per sapere se lei ha qualche idea. \"Le canocchie che difendono la città devono aver visto Adva scappare,\" dice @Kiwibot. \"Prova a seguirle dentro al Crepaccio Oscuro.\"", + "questDilatoryDistress2Boss": "Sciame di Teschi dell'Acqua", + "questDilatoryDistress2RageTitle": "Rinascita dello Sciame", + "questDilatoryDistress2RageDescription": "Rinascita dello Sciame: Questa barra si riempie quando non completi le tue Attività giornaliere. Quando é piena, lo Sciame di Teschi d'Acqua curerà il 30% della sua salute restante!", "questDilatoryDistress2RageEffect": "`Water Skull Swarm uses SWARM RESPAWN!`\n\nEmboldened by their victories, more skulls pour forth from the crevasse, bolstering the swarm!", "questDilatoryDistress2DropSkeletonPotion": "Pozione Scheletro", "questDilatoryDistress2DropCottonCandyBluePotion": "Pozione Blu Zucchero Filato", "questDilatoryDistress2DropHeadgear": "Tiara di Corallo di Fuoco (Copricapo)", - "questDilatoryDistress3Text": "Dilatory Distress, Part 3: Not a Mere Maid", - "questDilatoryDistress3Notes": "You follow the mantis shrimps deep into the Crevasse, and discover an underwater fortress. Princess Adva, escorted by more watery skulls, awaits you inside the main hall. \"My father has sent you, has he not? Tell him I refuse to return. I am content to stay here and practice my sorcery. Leave now, or you shall feel the wrath of the ocean's new queen!\" Adva seems very adamant, but as she speaks you notice a strange, ruby pendant on her neck glowing ominously... Perhaps her delusions would cease should you break it?", - "questDilatoryDistress3Completion": "Finally, you manage to pull the bewitched pendant from Adva's neck and throw it away. Adva clutches her head. \"Where am I? What happened here?\" After hearing your story, she frowns. \"This necklace was given to me by a strange ambassador - a lady called 'Tzina'. I don't remember anything after that!\"

Back at Dilatory, Manta is overjoyed by your success. \"Allow me to reward you with this trident and shield! I ordered them from @aiseant and @starsystemic as a gift for Adva, but... I'd rather not put weapons in her hands any time soon.\"", - "questDilatoryDistress3Boss": "Adva, the Usurping Mermaid", + "questDilatoryDistress3Text": "Dilatoria sotto Attacco, Parte 3: Non una semplice serva", + "questDilatoryDistress3Notes": "Segui le canocchie nelle profondità del Crepaccio, e scopri una fortezza subacquea. La Principessa Adva, scortata da altri teschi acquatici, ti aspetta nella sala principale. \"Mio padre ti ha mandato, vero? Digli che io rifiuto di tornare. Sono soddisfatta di rimanere qui ed esercitarmi nella mia stregoneria. Vattene ora, o scoprirai la furia della nuova regina dell'oceano!\" Ava sembra molto decisa, ma mentre parla, tu noti uno strano pendente di rubino sul suo collo brillare inquietantemente... Forse le sue illusioni cesserebbero se tu lo rompessi? ", + "questDilatoryDistress3Completion": "Finalmente riesci a strappare il pendente stregato dal collo di Adva e gettarlo via. Adva si stringe la testa. \"Dove sono? Cos'é successo qui?\" Dopo aver sentito la storia, si acciglia. \"Questa collana mi é stata data da uno strano ambasciatore - una donna chiama 'Tzina'. Non ricordo nulla dopo di ciò!\"

Tornato a Dilatoria, Manta é sopraffatto dalla gioia per il tuo successo. \"Permettimi di ricompensarti con questo tridente e scudo! Li ho ordinati da @aisean e @starsystemic come dono per Adva, ma... preferirei non mettere armi nelle sue mani nell'immediato futuro.\"", + "questDilatoryDistress3Boss": "Adva, la Sirena Usurpatrice", "questDilatoryDistress3DropFish": "Pesce (Cibo)", - "questDilatoryDistress3DropWeapon": "Trident of Crashing Tides (Weapon)", - "questDilatoryDistress3DropShield": "Moonpearl Shield (Shield-Hand Item)", - "questCheetahText": "Such a Cheetah", + "questDilatoryDistress3DropWeapon": "Tridente delle Maree Fragorose (Arma)", + "questDilatoryDistress3DropShield": "Scudo di Perle Lunari (Oggetto da mano secondaria)", + "questCheetahText": "Un tal Ghepardo", "questCheetahNotes": "As you hike across the Sloensteadi Savannah with your friends @PainterProphet, @tivaquinn, @Unruly Hyena, and @Crawford, you're startled to see a Cheetah screeching past with a new Habitican clamped in its jaws. Under the Cheetah's scorching paws, tasks burn away as though complete -- before anyone has the chance to actually finish them! The Habitican sees you and yells, \"Please help me! This Cheetah is making me level too quickly, but I'm not getting anything done. I want to slow down and enjoy the game. Make it stop!\" You fondly remember your own fledgling days, and know that you have to help the newbie by stopping the Cheetah!", - "questCheetahCompletion": "The new Habitican is breathing heavily after the wild ride, but thanks you and your friends for your help. \"I'm glad that Cheetah won't be able to grab anyone else. It did leave some Cheetah eggs for us, so maybe we can raise them into more trustworthy pets!\"", + "questCheetahCompletion": "Il nuovo abitante di Habitica ha il fiatone dopo la cavalcata selvaggia, ma ringrazia te e i tuoi amici per il vostro aiuto. \"Sono felice che il Ghepardo non potrà prendersi nessun altro. Ha lasciato dietro di sé un po' di uova di Ghepardo per noi, quindi magari possiamo allevare per farne degli animali domestici!\"", "questCheetahBoss": "Ghepardo", "questCheetahDropCheetahEgg": "Ghepardo (Uovo)", "questCheetahUnlockText": "Sblocca l'acquisto delle uova di ghepardo nel Mercato", - "questHorseText": "Ride the Night-Mare", + "questHorseText": "Cavalca il Destriero dell'Incubo", "questHorseNotes": "While relaxing in the Tavern with @beffymaroo and @JessicaChase, the talk turns to good-natured boasting about your adventuring accomplishments. Proud of your deeds, and perhaps getting a bit carried away, you brag that you can tame any task around. A nearby stranger turns toward you and smiles. One eye twinkles as he invites you to prove your claim by riding his horse.\nAs you all head for the stables, @UncommonCriminal whispers, \"You may have bitten off more than you can chew. That's no horse - that's a Night-Mare!\" Looking at its stamping hooves, you begin to regret your words...", "questHorseCompletion": "It takes all your skill, but finally the horse stamps a couple of hooves and nuzzles you in the shoulder before allowing you to mount. You ride briefly but proudly around the Tavern grounds while your friends cheer. The stranger breaks into a broad grin.\n\"I can see that was no idle boast! Your determination is truly impressive. Take these eggs to raise horses of your own, and perhaps we'll meet again one day.\" You take the eggs, the stranger tips his hat... and vanishes.", - "questHorseBoss": "Night-Mare", - "questHorseDropHorseEgg": "Horse (Egg)", - "questHorseUnlockText": "Unlocks purchasable Horse eggs in the Market", - "questBurnoutText": "Burnout and the Exhaust Spirits", + "questHorseBoss": "Destriero dell'Incubo", + "questHorseDropHorseEgg": "Cavallo (Uovo)", + "questHorseUnlockText": "Sblocca l'acquisto delle uova di cavallo nel Mercato", + "questBurnoutText": "Burnout e gli Spiriti Esausti", "questBurnoutNotes": "It is well past midnight, still and stiflingly hot, when Redphoenix and scout captain Kiwibot abruptly burst through the city gates. \"We need to evacuate all the wooden buildings!\" Redphoenix shouts. \"Hurry!\"

Kiwibot grips the wall as she catches her breath. \"It's draining people and turning them into Exhaust Spirits! That's why everything was delayed. That's where the missing people have gone. It's been stealing their energy!\"

\"'It'?'\" asks Lemoness.

And then the heat takes form.

It rises from the earth in a billowing, twisting mass, and the air chokes with the scent of smoke and sulphur. Flames lick across the molten ground and contort into limbs, writhing to horrific heights. Smoldering eyes snap open, and the creature lets out a deep and crackling cackle.

Kiwibot whispers a single word.

\"Burnout.\"", "questBurnoutCompletion": "Burnout is DEFEATED!

With a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.

Ian, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!

\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!

One of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"

Her tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"

She claps her hands. \"Now - let's celebrate!\"", "questBurnoutCompletionChat": "`Burnout is DEFEATED!`\n\nWith a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.\n\nIan, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!\n\n\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!\n\nOne of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"\n\nHer tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"\n\nShe claps her hands. \"Now - let's celebrate!\"\n\nAll Habiticans receive:\n\nPhoenix Pet\nPhoenix Mount\nAchievement: Savior of the Flourishing Fields\nBasic Candy\nVanilla Candy\nSand Candy\nCinnamon Candy\nChocolate Candy\nRotten Candy\nSour Pink Candy\nSour Blue Candy\nHoney Candy", "questBurnoutBoss": "Burnout", - "questBurnoutBossRageTitle": "Exhaust Strike", - "questBurnoutBossRageDescription": "When this gauge fills, Burnout will unleash its Exhaust Strike on Habitica!", - "questBurnoutDropPhoenixPet": "Phoenix (Pet)", - "questBurnoutDropPhoenixMount": "Phoenix (Mount)", + "questBurnoutBossRageTitle": "Colpo d'Esaurimento", + "questBurnoutBossRageDescription": "Quando questa barra si riempie, Burnout userà il suo Colpo dell'Esaurimento su Habitica!", + "questBurnoutDropPhoenixPet": "Fenice (Animale)", + "questBurnoutDropPhoenixMount": "Fenice (Cavalcatura)", "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!", + "questFrogText": "Palude della Rana del Disordine", + "questFrogNotes": "Mentre tu e i tuoi amici state avanzando faticosamente attraverso le Paludi della Stagnazione, @starsystemic indica un grande cartello. \"Rimanete sul sentiero -- se riuscite\"

\"Non può essere così difficile!\" dice @RosemonkeyCT. \"É largo e benvisibile.\"

Ma mentre continuate, vi accorgete che il sentiero viene gradualmente sommerso dalla mucillagine della palude, mista a strani pezzi di detriti blu e macerie, finché é impossibile procedere.

Mentre vi guardate intorno, chiedendo come ha fatto a diventare così sporca, @Jon Arjinbon grida, \"Attenti!\" Una rana infuriata salta fuori dalla melma, vestita di biancheria sporca e accesa di fuoco blu. Dovrete superare questa velenosa Rana delle Macerie per andare oltre!\"", + "questFrogCompletion": "La rana si ritira nella mucillagine, sconfitta. Mentre salta via, la melma blu sbiadisce, aprendo la strana innanzi.

Appoggiate nel mezzo del sentiero ci sono tre uova perfettamente pulite. \"Si vedono persino i minuscoli girini attraverso il guscio!\" dice @Breaedstrings. \"Ecco, dovresti prenderle.\"", + "questFrogBoss": "Rana del Disordine", + "questFrogDropFrogEgg": "Rana (Uovo)", + "questFrogUnlockText": "Sblocca l'acquisto delle uova di rana nel Mercato", + "questSnakeText": "Il Serpente dell Distrazione", + "questSnakeNotes": "Ci vuole un'anima resistente per vivere tra le Dune di Sabbia della Distrazione. L'arido deserto non è certo un luogo produttivo, e le scintillanti dune hanno portato molti viaggiatori fuori strada. Tuttavia, qualcosa ha spaventato anche la gente del posto. Le sabbie stanno spostando e capovolgendo interi villaggi. I residenti sostengono che un mostro con un enorme corpo di serpente giace in attesa sotto la sabbia, e hanno tutti messi insieme una ricompensa per chiunque li aiuti a trovarlo e a fermarlo. i tanto lodati incantatori di serpenti @EmeraldOx e @PainterProphet hanno accosentito ad aiutarti ad evocare la bestia. Riuscirai a fermare il Serpente della Distrazione?", + "questSnakeCompletion": "Con l'aiuto degli incantatori, riesci a scacciare il Serpente della Distrazione. Anche se sei felice di aver aiutato gli abitanti delle Dune, non puoi fare a meno di essere un po' triste per il tuo nemico caduto. Mentre contempli la vista @LordDarkly ti si avvicina. \"Grazie! Non è molto, ma spero che questo possa esprimere adeguatamente la nostra gratitudine.\" Ti porge un po' d'Oro e... alcune uova di serpente! Vedrai ancora una volta quel maestoso animale, dopo tutto.", + "questSnakeBoss": "Serpente della Distrazione", + "questSnakeDropSnakeEgg": "Serpente (Uovo)", + "questSnakeUnlockText": "Sblocca l'acquisto delle uova di serpente nel Mercato" } \ No newline at end of file diff --git a/common/locales/it/rebirth.json b/common/locales/it/rebirth.json index 1fc77cac38..68066d707e 100644 --- a/common/locales/it/rebirth.json +++ b/common/locales/it/rebirth.json @@ -2,9 +2,9 @@ "rebirthNew": "Rinascita: una nuova avventura è disponibile!", "rebirthUnlock": "Hai sbloccato Rinascita! Questo speciale oggetto del Mercato ti permette di iniziare una nuova partita al livello 1, ma mantenendo le tue attività, gli obiettivi, gli animali, ed altro. Usalo per dare nuova vita ad Habitica se senti di avere già ottenuto tutto, oppure per provare le nuove funzionalità con gli occhi di un personaggio principiante!", "rebirthBegin": "Rinascita: comincia una nuova avventura", - "rebirthStartOver": "Rebirth starts your character over from Level 1.", + "rebirthStartOver": "La rinascita riporta il tuo personaggio al livello 1.", "rebirthAdvList1": "Torni ad avere tutti i punti vita.", - "rebirthAdvList2": "You have no Experience, Gold, or Equipment (with the exception of free items like Mystery items).", + "rebirthAdvList2": "Non hai punti esperienza, oro o equipaggiamento (ad eccezione degli oggetti gratuiti come gli Oggetti Misteriosi)", "rebirthAdvList3": "Le tue Habit, le Daily e i To-Do si resettano tornando al colore giallo, e le serie si azzerano.", "rebirthAdvList4": "La tua classe iniziale sarà Guerriero fino a quando non otterrai una nuova classe.", "rebirthInherit": "Il tuo nuovo personaggio eredita delle cose dal suo predecessore:", @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "Ottieni inoltre una Medaglia per aver iniziato una nuova avventura!", "beReborn": "Rinasci", "rebirthAchievement": "Hai iniziato una nuova avventura! Questa è la rinascita numero <%= number %> per te, il livello più alto che hai raggiunto è <%= level %>. Per ottenere un'altra medaglia, inizia una nuova avventura quando avrai raggiunto un livello ancora più alto!", + "rebirthAchievement100": "Hai iniziato una nuova avventura! Questa è la rinascita numero <%= number %> per te, il livello più alto che hai raggiunto è 100 o superiore. Per ottenere un'altra medaglia, inizia una nuova avventura quando avrai raggiunto almeno il livello 100!", "rebirthBegan": "Ha cominciato una nuova avventura", "rebirthText": "Ha cominciato <%= rebirths %> nuove avventure", "rebirthOrb": "Ha utilizzato una Sfera della Rinascita al livello", + "rebirthOrb100": "Ha utilizzato una Sfera della Rinascita al livello 100 o superiore.", "rebirthPop": "Ricomincia con un nuovo personaggio al livello 1 mantenendo medaglie, oggetti, attività e cronologia.", "rebirthName": "Sfera della Rinascita", "reborn": "Rinasci, livello massimo <%= reLevel %>" diff --git a/common/locales/it/settings.json b/common/locales/it/settings.json index 3f94a14700..18d152a759 100644 --- a/common/locales/it/settings.json +++ b/common/locales/it/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "Selezionando questa opzione, la lista dei tag dell'attività che stai modificando verrà inizialmente nascosta.", "startAdvCollapsed": "Comprimi opzioni avanzate", "startAdvCollapsedPop": "Selezionando questa opzione, la sezione delle opzioni avanzate verrà nascosta quando modifichi un'attività.", + "dontShowAgain": "Non mostrare di nuovo", + "suppressLevelUpModal": "Non mostrare popup quando sali di livello", + "suppressHatchPetModal": "Non mostrare popup quando fai schiudere un uovo", + "suppressRaisePetModal": "Non mostrare popup quando trasformi un animale in una cavalcatura", + "suppressStreakModal": "Non mostrare popup quando ottieni la medaglia Serie", "showTour": "Mostra il tour introduttivo", "restartTour": "Resetta il tour introduttivo della prima volta che hai utilizzato Habitica.", "showBailey": "Mostra Bailey", @@ -81,7 +86,6 @@ "emailChange1": "Per cambiare il tuo indirizzo email, per favore manda un'email a", "emailChange2": "admin@habitica.com", "emailChange3": "inserendo sia il vecchio che il tuo nuovo indirizzo email assieme al tuo ID Utente", - "username": "Nome utente", "usernameOrEmail": "Nome di login o email", "email": "Email", "registeredWithFb": "Registrato tramite Facebook", @@ -89,7 +93,7 @@ "loginNameDescription2": "Utente->Profilo", "loginNameDescription3": "per cambiare il nome che appare nel tuo avatar e nei messaggi della chat.", "emailNotifications": "Notifiche via email", - "wonChallenge": "Hai vinto una sfida", + "wonChallenge": "Hai vinto una Sfida!", "newPM": "Hai ricevuto un messaggio privato", "giftedGems": "Ti vengono regalate delle Gemme", "giftedGemsInfo": "<%= amount %> Gemme - da <%= name %>", @@ -118,5 +122,29 @@ "promoCode": "Codice promozionale", "promoCodeApplied": "Codice promozionale applicato! Controlla il tuo inventario", "promoPlaceholder": "Inserisci codice promozionale", - "displayInviteToPartyWhenPartyIs1": "Mostra il bottone di invito alla squadra quando la squadra ha solo 1 membro." + "displayInviteToPartyWhenPartyIs1": "Mostra il bottone di invito alla squadra quando la squadra ha solo 1 membro.", + "saveCustomDayStart": "Salva Inizio del Giorno Personalizzato", + "registration": "Registrazione", + "addLocalAuth": "Aggiungi autenticazione locale", + "generateCodes": "Genera Codici", + "generate": "Genera", + "getCodes": "Ottieni Codici", + "webhooks": "Webhooks", + "enabled": "Abilitato", + "webhookURL": "URL Webhook", + "add": "Aggiungi", + "buyGemsGoldCap": "Limite alzato a <%= amount %>", + "mysticHourglass": "<%= amount %> Clessidra Mistica", + "mysticHourglassText": "Le Clessidre Mistiche ti permettono di acquistare i set di Oggetti Misteriosi del mese precedente.", + "purchasedPlanId": "<%= price %>$ ogni <%= months %> mese/i (<%= plan %>)", + "purchasedPlanExtraMonths": "Ti rimangono <%= months %> mesi di credito di abbonamento.", + "consecutiveSubscription": "Abbonamento Consecutivo", + "consecutiveMonths": "Mesi Consecutivi:", + "gemCapExtra": "Limite Gemme Extra:", + "mysticHourglasses": "Clessidre Mistiche", + "paypal": "PayPal", + "amazonPayments": "Pagamenti su Amazon", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/it/subscriber.json b/common/locales/it/subscriber.json index fdec9cd864..081667ea3c 100644 --- a/common/locales/it/subscriber.json +++ b/common/locales/it/subscriber.json @@ -60,7 +60,7 @@ "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> e <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitle": "Misteriosi viaggiatori del tempo", "timeTravelersPopoverNoSub": "Hai bisogno di una Clessidra Mistica per evocare i misteriosi viaggiatori del tempo! Gli <%= linkStart %>abbonati<%= linkEnd %> ne ottengono una ogni tre mesi di abbonamento consecutivi. Torna qui quando avrai una Clessidra Mistica, e i viaggiatori del tempo ti porteranno un raro animale, cavalcatura o set di Oggetti Misteriosi dal passato...o forse persino dal futuro!", - "timeTravelersPopover": "Abbiamo notato che possiedi una Clessidra Mistica, quindi saremo felici di tornare indietro nel tempo per te! Scegli l'animale, la cavalcatura o il set di Oggetti Misteriosi che desideri. Puoi vedere una lista dei set di oggetti passati in <%= linkStart %>questa pagina<%= linkEnd %>! Se questi non ti soddisfano, forse preferiresti uno dei nostri raffinati e futuristici set di oggetti steampunk?", + "timeTravelersPopover": "Abbiamo notato che possiedi una Clessidra Mistica, quindi saremo felici di tornare indietro nel tempo per te! Scegli l'animale, la cavalcatura o il set di Oggetti Misteriosi che desideri. Puoi vedere una lista degli oggetti dei set passati qui! Se questi non ti soddisfano, forse preferiresti uno dei nostri raffinati e futuristici set di oggetti steampunk?", "timeTravelersAlreadyOwned": "Congratulazioni! Possiedi già tutto ciò che i Viaggiatori del Tempo possono attualmente offrire. Grazie per il tuo supporto al sito!", "mysticHourglassPopover": "La Clessidra Mistica ti permette di acquistare alcuni oggetti a disponibilità limitata, come i set mensili di Oggetti Misteriosi le ricompense degli eventi mondiali, dal passato!", "subUpdateCard": "Aggiorna Carta", diff --git a/common/locales/it/tasks.json b/common/locales/it/tasks.json index 12d677e30c..6884bd2d62 100644 --- a/common/locales/it/tasks.json +++ b/common/locales/it/tasks.json @@ -54,7 +54,7 @@ "complete": "Completi", "dated": "Con scadenza", "due": "Incomplete", - "notDue": "Not Due", + "notDue": "Non dovuto", "grey": "Grigie", "score": "Punti", "rewards": "Ricompense", @@ -75,7 +75,7 @@ "startDateHelp": "Imposta la data in cui l'attività sarà \"attiva\". Non sarà necessario completarla prima di quel giorno.", "streakName": "Medaglie Serie", "streakText": "Ha completato <%= streaks %> serie di 21 giorni nelle Daily.", - "streakSingular": "Streaker", + "streakSingular": "Perfezionista", "streakSingularText": "Ha completato una serie di 21 giorni su una Daily.", "perfectName": "Giorni Perfetti", "perfectText": "Ha completato tutte le Daily attive <%= perfects %> volte. Grazie a questa medaglia ottieni un bonus a tutti gli attributi pari a +livello/2 per il giorno successivo. Per i livelli superiori a 100 non c'è alcun effetto aggiuntivo oltre al bonus.", @@ -88,8 +88,7 @@ "fortifyText": "La fortificazione farà tornare tutte le attività allo stato neutro (colore giallo), proprio come se le avessi appena create, e riempirà la tua barra della salute. Questo è un ottimo aiuto se le tue attività rosse stanno rendendo il gioco troppo difficile, o se quelle blu stanno rendendo il gioco troppo semplice. Se ripartire con calma suona come una buona idea, spendi qualche gemma e fai vedere alle tue attività chi comanda!", "sureDelete": "Vuoi davvero eliminare questa attività?", "streakCoins": "Bonus serie!", - "pushTaskToTop": "Metti in cima alla lista", - "pushTaskToBottom": "Metti in fondo alla lista", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "Inserisci prima il titolo dell'attività.", "dailiesRestingInInn": "Stai riposando nella Locanda! Le tue Daily NON ti danneggeranno stanotte, PERÒ si resetteranno comunque ogni giorno. Se stai partecipando ad una missione, non infliggerai danni/raccoglierai oggetti finchè non lasci la Locanda, ma puoi comunque essere danneggiato dal Boss se i tuoi compagni di squadra non completano le proprie Daily.", "habitHelp1": "Gli Habit Positivi sono quelli che completi spesso. Ti premiano con Oro ed Esperienza ogni volta che clicchi <%= plusIcon %>.", @@ -98,16 +97,16 @@ "newbieGuild": "Hai altre domande? Chiedile nella <%= linkStart %>Gilda dei Newbies<%= linkEnd %>!", "dailyHelp1": "Le Daily si ripetono <%= emphasisStart %>ogni giorno<%= emphasisEnd %> in cui sono attive. Clicca <%= pencilIcon %> per cambiare i giorni in cui sono attive.", "dailyHelp2": "Se non completi le Daily attive perdi Salute quando la giornata finisce.", - "dailyHelp3": "Dailies turn <%= emphasisStart %>redder<%= emphasisEnd %> when you miss them, and <%= emphasisStart %>bluer<%= emphasisEnd %> when you complete them. The redder the Daily, the more it will reward you... or hurt you.", - "dailyHelp4": "To change when your day rolls over, go to <%= linkStart %> Settings > Site<%= linkEnd %> > Custom Day Start.", + "dailyHelp3": "Le attività giornaliere diventano <%= emphasisStart %>rosso scuro<%= emphasisEnd %> quando non le porti a termine, e <%= emphasisStart %>blu scuro<%= emphasisEnd %> quando le completi. Più l'attività giornaliera è rossa, più questa ti premierà... o danneggerà.", + "dailyHelp4": "Per cambiare quando il tuo giorno finisce, vai su <%= linkStart %> Impostazioni > Sito <%= linkEnd %> > Inizio Giorno Personalizzato.", "dailyHelp5": "Per cercare ispirazione, prova a guardare questi esempi di Daily! (in inglese)", "toDoHelp1": "Le To-Do appena create sono gialle, e più tempo ci metti a completarle più diventano rosse (aumentano di valore).", "toDoHelp2": "I To-Do non ti fanno del male! Ti premiamo solo con Oro ed Esperienza.", "toDoHelp3": "Suddividere una To-Do in una lista di attività più piccole (una checklist) la renderà meno spaventosa, a aumenterà i tuoi punti!", - "toDoHelp4": "For inspiration, check out these sample To-Dos!", + "toDoHelp4": "Per trovare inspirazione, dai un'occhiata a queste attività d'esempio!", "rewardHelp1": "L'equipaggiamento che compri per il tuo avatar viene messo in <%= linkStart %>Inventario > Equipaggiamento<%= linkEnd %>.", "rewardHelp2": "L'equipaggiamento condiziona le tue statistiche (<%= linkStart %>Utente > Statistiche<%= linkEnd %>).", - "rewardHelp3": "Equipaggiamenti speciali compariranno qui durante gli Eventi Globali.", + "rewardHelp3": "Gli equipaggiamenti speciali compariranno qui durante gli Eventi Globali.", "rewardHelp4": "Non aver paura di impostare le tue ricompense! guarda qualche esempio qui.", "clickForHelp": "Fai click per suggerimenti" } \ No newline at end of file diff --git a/common/locales/ja/backgrounds.json b/common/locales/ja/backgrounds.json index 5a3337c19d..d39a64e4c0 100644 --- a/common/locales/ja/backgrounds.json +++ b/common/locales/ja/backgrounds.json @@ -118,5 +118,19 @@ "backgroundSlimySwampText": "Slimy Swamp", "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness.", + "backgrounds112015": "SET 18: Released November 2015", + "backgroundFloatingIslandsText": "Floating Islands", + "backgroundFloatingIslandsNotes": "Hop across the Floating Islands.", + "backgroundNightDunesText": "Night Dunes", + "backgroundNightDunesNotes": "Walk peacefully through the Night Dunes.", + "backgroundSunsetOasisText": "Sunset Oasis", + "backgroundSunsetOasisNotes": "Bask in the Sunset Oasis.", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/ja/challenge.json b/common/locales/ja/challenge.json index 893a9e79b4..4406f35d3d 100644 --- a/common/locales/ja/challenge.json +++ b/common/locales/ja/challenge.json @@ -59,5 +59,9 @@ "challengeNotEnoughGems": "このチャレンジをポストするためにジェムの数が足りません。", "noPermissionEditChallenge": "You don't have permissions to edit this challenge", "noPermissionDeleteChallenge": "You don't have permissions to delete this challenge", - "noPermissionCloseChallenge": "You don't have permissions to close this challenge" + "noPermissionCloseChallenge": "You don't have permissions to close this challenge", + "congratulations": "Congratulations!", + "hurray": "Hurray!", + "noChallengeOwner": "no owner", + "noChallengeOwnerPopover": "This challenge does not have an owner because the person who created the challenge deleted their account." } \ No newline at end of file diff --git a/common/locales/ja/character.json b/common/locales/ja/character.json index e2685ef63d..d1a6da5b59 100644 --- a/common/locales/ja/character.json +++ b/common/locales/ja/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "クラスボーナス", "battleGear": "バトルギア", "battleGearText": "これは身につけるバトル用の道具です。タスクに接するときの数字に影響を及ぼす。", + "autoEquipBattleGear": "新しいギアを自動装備する", "costume": "衣装", "costumeText": "もし装備中のギアより他のギアの見た目が好ましい場合、「衣装する」のボックスをチェックしてください。そうすると、バトルギアを着たまま衣装が表れます。", "useCostume": "衣装する", @@ -64,6 +65,10 @@ "ultimGearText": "以下のクラスの最高武器と防具セットを揃えた:", "level": "レベル", "levelUp": "レベルアップ!", + "gainedLevel": "You gained a level!", + "leveledUp": "By accomplishing your real-life goals, you've grown to Level <%= level %>!", + "fullyHealed": "You have been fully healed!", + "huzzah": "Huzzah!", "mana": "魔法", "hp": "再生", "mp": "魔法点", diff --git a/common/locales/ja/content.json b/common/locales/ja/content.json index 3ce6c779da..cd7f6e9dd4 100644 --- a/common/locales/ja/content.json +++ b/common/locales/ja/content.json @@ -6,7 +6,7 @@ "armoireLastItem": "最後のレア装備を魔法の戸棚から出した。", "armoireNotesEmpty": "毎月の最初の日に戸棚に新しい装備が入ります。それまでに、経験値や食べ物をもらうためにクリック続けて下さい!", "dropEggWolfText": "狼", - "dropEggWolfMountText": "Wolf", + "dropEggWolfMountText": "狼", "dropEggWolfAdjective": "a loyal", "dropEggTigerCubText": "トラの子", "dropEggTigerCubMountText": "トラ", @@ -18,7 +18,7 @@ "dropEggLionCubMountText": "ライオン", "dropEggLionCubAdjective": "a regal", "dropEggFoxText": "狐", - "dropEggFoxMountText": "Fox", + "dropEggFoxMountText": "キツネ", "dropEggFoxAdjective": "a wily", "dropEggFlyingPigText": "空飛ぶ豚", "dropEggFlyingPigMountText": "Flying Pig", @@ -27,7 +27,7 @@ "dropEggDragonMountText": "Dragon", "dropEggDragonAdjective": "a mighty", "dropEggCactusText": "サボテン", - "dropEggCactusMountText": "Cactus", + "dropEggCactusMountText": "サボテン", "dropEggCactusAdjective": "a prickly", "dropEggBearCubText": "熊の子", "dropEggBearCubMountText": "熊", @@ -39,7 +39,7 @@ "questEggHedgehogMountText": "Hedgehog", "questEggHedgehogAdjective": "a spiky", "questEggDeerText": "鹿", - "questEggDeerMountText": "Deer", + "questEggDeerMountText": "鹿", "questEggDeerAdjective": "an elegant", "questEggEggText": "たまご", "questEggEggMountText": "たまご入れ", @@ -60,16 +60,16 @@ "questEggRoosterMountText": "Rooster", "questEggRoosterAdjective": "a strutting", "questEggSpiderText": "クモ", - "questEggSpiderMountText": "Spider", + "questEggSpiderMountText": "蜘蛛", "questEggSpiderAdjective": "a creepy", "questEggOwlText": "フクロウ", "questEggOwlMountText": "Owl", "questEggOwlAdjective": "a wise", "questEggPenguinText": "ペンギン", - "questEggPenguinMountText": "Penguin", + "questEggPenguinMountText": "ペンギン", "questEggPenguinAdjective": "a perspicacious", "questEggTRexText": "ティラノサウルス", - "questEggTRexMountText": "Tyrannosaur", + "questEggTRexMountText": "ティラノサウルス", "questEggTRexAdjective": "a tiny-armed", "questEggRockText": "ロック", "questEggRockMountText": "Rock", @@ -78,7 +78,7 @@ "questEggBunnyMountText": "Bunny", "questEggBunnyAdjective": "a snuggly", "questEggSlimeText": "マシュマロ スライム", - "questEggSlimeMountText": "Marshmallow Slime", + "questEggSlimeMountText": "マシュマロスライム", "questEggSlimeAdjective": "a sweet", "questEggSheepText": "羊", "questEggSheepMountText": "Sheep", @@ -90,11 +90,17 @@ "questEggWhaleMountText": "Whale", "questEggWhaleAdjective": "a splashy", "questEggCheetahText": "チーター", - "questEggCheetahMountText": "Cheetah", + "questEggCheetahMountText": "チーター", "questEggCheetahAdjective": "an honest", "questEggHorseText": "馬", "questEggHorseMountText": "Horse", "questEggHorseAdjective": "a galloping", + "questEggFrogText": "カエル", + "questEggFrogMountText": "カエル", + "questEggFrogAdjective": "a princely", + "questEggSnakeText": "Snake", + "questEggSnakeMountText": "Snake", + "questEggSnakeAdjective": "a slithering", "eggNotes": "Find a hatching potion to pour on this egg, and it will hatch into <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "普通の", "hatchingPotionWhite": "白い", diff --git a/common/locales/ja/death.json b/common/locales/ja/death.json index a9f7cdeca1..3816ebbb0a 100644 --- a/common/locales/ja/death.json +++ b/common/locales/ja/death.json @@ -3,5 +3,14 @@ "dontDespair": "絶望してはいけません!", "deathPenaltyDetails": "レベル、コイン、装備品を失いますが、たくさん戦えば再び手に入ります!あなたが活躍することを期待しています。", "refillHealthTryAgain": "HPが回復しました。もう一度チャレンジしましょう", - "dyingOftenTips": "よく発生していますか? ここにヒントがあります!" + "dyingOftenTips": "よく発生していますか? ここにヒントがあります!", + "losingHealthWarning": "Careful - You're Losing Health!", + "losingHealthWarning2": "HPがゼロになると、レベルが一つ下がり、ゴールドと装備一つを失います。", + "toRegainHealth": "To regain Health:", + "lowHealthTips1": "レベルアップで全回復します。", + "lowHealthTips2": "Buy a Health Potion from the Rewards column to restore 15 Health Points.", + "losingHealthQuickly": "Losing Health quickly?", + "lowHealthTips3": "Incomplete Dailies hurt you overnight, so be careful not to add too many at first!", + "lowHealthTips4": "If a Daily isn't due on a certain day, you can disable it by clicking the pencil icon.", + "goodLuck": "Good luck!" } \ No newline at end of file diff --git a/common/locales/ja/faq.json b/common/locales/ja/faq.json index ddbb314174..0cc78b9bf9 100644 --- a/common/locales/ja/faq.json +++ b/common/locales/ja/faq.json @@ -2,7 +2,7 @@ "frequentlyAskedQuestions": "よくある質問", "faqQuestion0": "I'm confused. Where do I get an overview?", "iosFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn experience and gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as Pets, Skills, and Quests! You can customize your character under Menu > Customize Avatar.\n\n Some basic ways to interact: click the (+) in the upper-right-hand corner to add a new task. Tap on an existing task to edit it, and swipe left on a task to delete it. You can sort tasks using Tags in the upper-left-hand corner, and expand and contract checklists by clicking on the checklist bubble.", - "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, the wiki has an excellent step-by-step overview of the game [right here](http://habitica.wikia.com/wiki/Habitica_Wiki).", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", "faqQuestion1": "How do I set up my tasks?", "iosFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.", "webFaqAnswer1": "Good Habits (the ones with a ) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a ) are tasks that you should avoid, like biting nails. Habits with a and a have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n

\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n

\n To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.", @@ -16,9 +16,9 @@ "iosFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you tap a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your Party and one of your Party mates did not complete all their Dailies, the Boss will attack you.\n\n The main way to heal is to gain a level, which restores all your health. You can also buy a Health Potion with gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a Party with a Healer, they can heal you as well.", "webFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you click a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your party and one of your party mates did not complete all their Dailies, the Boss will attack you.\n

\n The main way to heal is to gain a level, which restores all your Health. You can also buy a Health Potion with Gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a party (under Social > Party) with a Healer, they can heal you as well.", "faqQuestion5": "How do I play Habitica with my friends?", - "iosFaqAnswer5": "The best way is to invite them to a Party with you, via the [website](https://habitica.com/#/options/groups/party)! We'll add the ability to create a Party from this app soon, but in the meantime you can use the [website](https://habitica.com/#/options/groups/party). Parties can go on quests, battle monsters, and cast skills to support each other. On the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", + "iosFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on quests, battle monsters, and cast skills to support each other. Go to Menu > Party and click \"Create New Party\" if you don't already have a Party. Then tap on the Members list, and tap Invite in the upper right-hand corner to invite your friends by entering their User ID (a string of numbers and letters that they can find under Settings > Account Details on the app, and Settings > API on the website). On the website, you can also invite friends via email, which we will add to the app in a future update.\n\nOn the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", "webFaqAnswer5": "The best way is to invite them to a party with you, under Social > Party! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n

\n For more detailed info, check out the wiki pages on [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).", - "faqQuestion6": "How do I get a Pet or Mount?", + "faqQuestion6": "ペットやマウントはどうやって手に入れるの?", "iosFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch Egg.\" Then choose a hatching potion to determine its color! Go to Menu > Pets to equip your new Pet to your avatar by clicking on it. \n\n You can also grow your Pets into Mounts by feeding them under Menu > Pets. Tap on a Pet, and then select \"Feed Pet\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Menu > Mounts and tap on it to equip it to your avatar.\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", "webFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Inventory > Market.\n

\n To hatch a Pet, you'll need an egg and a hatching potion. Click on the egg to determine the species you want to hatch, and then click on the hatching potion to determine its color! Go to Inventory > Pets to equip it to your avatar by clicking on it.\n

\n You can also grow your Pets into Mounts by feeding them under Inventory > Pets. Click on a Pet, and then click on a piece of food from the right-hand menu to feed it! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Inventory > Mounts and click on it to equip it to your avatar.\n

\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", "faqQuestion7": "How do I become a Warrior, Mage, Rogue, or Healer?", @@ -28,14 +28,17 @@ "iosFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Use Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in a special section in the Rewards Column. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You’ll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "faqQuestion9": "How do I fight monsters and go on Quests?", - "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party on the [website](https://habitica.com/#/options/groups/party), you'll be rewarded with the Basi-List Scroll! (We will add this feature to the app in a future update.)\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for gold and gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", + "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for Gold and Gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "webFaqAnswer9": "First, you need to join or start a party (under Social > Party). Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n

\n Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are three ways to get a scroll:\n

\n * When you invite people to your party, you’ll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Page (Inventory > Quests) for Gold and Gems.\n

\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your party at the same time that you damage the Boss.\n

\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "faqQuestion10": "What are gems, and how do I get them?", + "faqQuestion10": "What are Gems, and how do I get them?", "iosFaqAnswer10": "Gems are purchased with real money by tapping on the gem icon in the header. When people buy gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying gems directly, there are three other ways players can gain gems:\n\n * Win a Challenge on the [website](https://habitica.com) that has been set up by another player under Social > Challenges. (We will be adding Challenges to the app in a future update!)\n * Subscribe on the [website](https://habitica.com/#/options/settings/subscription) and unlock the ability to buy a certain number of gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with gems do not offer any statistical advantages, so players can still make use of the app without them!", "webFaqAnswer10": "Gems are [purchased with real money](https://habitica.com/#/options/settings/subscription), although [subscribers](https://habitica.com/#/options/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n

\n In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n

\n * Win a Challenge that has been set up by another player under Social > Challenges.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", "faqQuestion11": "How do I report a bug or request a feature?", "iosFaqAnswer11": "You can report a bug, request a feature, or send feedback under Menu > Report a Bug and Menu > Send Feedback! We'll do everything we can to assist you.", "webFaqAnswer11": "Bug reports are collected on GitHub. Go to [Help > Report a Bug](https://github.com/HabitRPG/habitrpg/issues/2760) and follow the instructions. Don't worry, we'll get you fixed up soon!\n

\n Feature requests are collected on Trello. Go to [Help > Request a Feature](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) and follow the instructions. Ta-da!", + "faqQuestion12": "How do I battle a World Boss?", + "iosFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", + "webFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n

\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n

\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n

\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", "iosFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the Tavern chat under Menu > Tavern! We're happy to help.", "webFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the [Newbies Guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help." } \ No newline at end of file diff --git a/common/locales/ja/front.json b/common/locales/ja/front.json index e348063813..c49c2c81ea 100644 --- a/common/locales/ja/front.json +++ b/common/locales/ja/front.json @@ -74,7 +74,7 @@ "infhQuote": "[Habitica]は、学校に居たころ、私の学生生活にストラクチャーを加える大きな手助けだったわ。", "invalidEmail": "パスワードをリセットするために有効なメールアドレスが必要です。", "irishfeet123Quote": "僕は食後の食卓を片付けられないでコップをいろんなところに置きっぱなしの僕の最悪な癖があったんだ。それが治したのは[Habitica]だったよ!", - "joinOthers": "250,000人の登録ユーザーに混ざって今から目標を楽しく達成しよう!", + "joinOthers": "Join <%= userCount %> people making it fun to achieve goals!", "kazuiQuote": "Before [Habitica], I was stuck with my thesis, as well as dissatisfied with my personal discipline regarding housework and things like learning vocabulary and studying Go theory. It turns out breaking down these tasks into smaller manageable checklists is quite the thing to keep me motivated and constantly working.", "landingadminlink": "管理向けパッケージ", "landingend": "まだ納得していませんか?", @@ -179,5 +179,14 @@ "businessInquiries": "ビジネスに関するお問い合わせ", "merchandiseInquiries": "商品化窓口お問い合わせ", "marketingInquiries": "マーケティング・ソーシャルメディアに関するお問い合わせ", - "tweet": "Tweet" + "tweet": "ツイート", + "apps": "Apps", + "notifyAndroidApp": "Want us to notify you when the Android app is ready? Sign up for this mailing list!", + "checkOutIOSApp": "Check out our new iOS App!", + "imagine1": "Imagine if improving your life were as fun as playing a game.", + "landingCopy1": "Advance in the game by completing your real-life tasks.", + "landingCopy2": "Battle monsters with friends to stay accountable to your goals.", + "landingCopy3": "Join over <%= userCount %> people having fun as they improve their lives.", + "alreadyHaveAccount": "I already have an account!", + "getStartedNow": "Get Started Now!" } \ No newline at end of file diff --git a/common/locales/ja/gear.json b/common/locales/ja/gear.json index f31e3abf76..581667a937 100644 --- a/common/locales/ja/gear.json +++ b/common/locales/ja/gear.json @@ -149,13 +149,19 @@ "weaponArmoireRancherLassoText": "牧童の投げ縄", "weaponArmoireRancherLassoNotes": "Lassos: the ideal tool for rounding up and wrangling. Increases Strength by <%= str %>, Perception by <%= per %>, and Intelligence by <%= int %>. Enchanted Armoire: Rancher Set (Item 3 of 3).", "weaponArmoireMythmakerSwordText": "Mythmaker Sword", - "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3)", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Iron Crook", - "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3)", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Gold Wing Staff", "weaponArmoireGoldWingStaffNotes": "The wings on this staff constantly flutter and twist. Increases all attributes by <%= attrs %> each. Enchanted Armoire: Independent Item.", "weaponArmoireBatWandText": "Bat Wand", "weaponArmoireBatWandNotes": "This wand can turn any task into a bat! Wave it about and watch them fly away. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireShepherdsCrookText": "Shepherd's Crook", + "weaponArmoireShepherdsCrookNotes": "Useful for herding gryphons. Increases Constitution by <%= con %>. Enchanted Armoire: Shepherd Set (Item 1 of 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "鎧", "armorBase0Text": "無地の服", "armorBase0Notes": "普通の服。効果なし。", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "ばかげたパーティーローブ", "armorSpecialBirthday2015Notes": "Habiticaの誕生日おめでとう!この素晴らしい日を祝うために、このばかげたパーティーローブを着てください。効果なし。", "armorSpecialGaymerxText": "虹色の戦士の鎧", - "armorSpecialGaymerxNotes": "プライドシーズンとGaymerXを記念するこの特殊な鎧は、輝くカラフルな虹模様で飾られている! GaymerXはLGBTQやゲームを祝うゲーム大会で、誰でも参加することができる。これは、7月の11日-13日までにサンフランシスコのダウンタウンインターコンチネンタルで開催される!効果なし。", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "キャットスーツ", "armorSpecialSpringRogueNotes": "完璧に手入れを施されている。知覚が<%= per %>上がる。2014年春季限定版装備。", "armorSpecialSpringWarriorText": "クローバーの鎧", @@ -306,7 +312,9 @@ "armorMystery201508Text": "Cheetah Costume", "armorMystery201508Notes": "Run fast as a flash in the fluffy Cheetah Costume! Confers no benefit. August 2015 Subscriber Item.", "armorMystery201509Text": "Werewolf Costume", - "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201509Notes": "これ本当に衣装だよね?効果なし。2015年9月購読者アイテム。", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "スチームパンクスーツ", "armorMystery301404Notes": "小粋な、そして、颯爽とした!効果なし。3015年2月購読者アイテム。", "armorArmoireLunarArmorText": "Soothing Lunar Armor", @@ -315,12 +323,18 @@ "armorArmoireGladiatorArmorNotes": "剣闘士になるには賢いだけではなく、強くなければならない。知覚を<%= per %>、力を<%= str %>上げる。魔法の戸棚:剣闘士セット (3アイテム中2番)。", "armorArmoireRancherRobesText": "牧童のローブ", "armorArmoireRancherRobesNotes": "Wrangle your mounts and round up your pets while wearing these magical Rancher Robes! Increases Strength by <%= str %>, Perception by <%= per %>, and Intelligence by <%= int %>. Enchanted Armoire: Rancher Set (Item 2 of 3).", - "armorArmoireGoldenTogaText": "Golden Toga", + "armorArmoireGoldenTogaText": "黄金のトーガ", "armorArmoireGoldenTogaNotes": "This glimmering toga is only worn by true heroes. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 1 of 3).", "armorArmoireHornedIronArmorText": "Horned Iron Armor", "armorArmoireHornedIronArmorNotes": "Fiercely hammered from iron, this horned armor is nearly impossible to break. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Horned Iron Set (Item 2 of 3).", "armorArmoirePlagueDoctorOvercoatText": "Plague Doctor Overcoat", "armorArmoirePlagueDoctorOvercoatNotes": "An authentic overcoat worn by the doctors who battle the Plague of Procrastination! Increases Intelligence by <%= int %>, Strength by <%= str %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 3 of 3).", + "armorArmoireShepherdRobesText": "Shepherd Robes", + "armorArmoireShepherdRobesNotes": "The fabric is cool and breathable, perfect for a hot day herding gryphons in the desert. Increases Strength and Perception by <%= attrs %> each. Enchanted Armoire: Shepherd Set (Item 2 of 3).", + "armorArmoireRoyalRobesText": "Royal Robes", + "armorArmoireRoyalRobesNotes": "Wonderful ruler, rule all day long! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 3 of 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "ヘッドギア", "headBase0Text": "兜なし", "headBase0Notes": "ヘッドギアなし", @@ -441,7 +455,7 @@ "headSpecialFall2015HealerText": "Hat of Frog", "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", "headSpecialGaymerxText": "虹色の戦士の兜", - "headSpecialGaymerxNotes": "プライドシーズンとGaymerXを記念するこの特殊な兜は、輝くカラフルな虹模様で飾られている!GaymerXはLGBTQやゲームを祝うゲーム大会で、誰でも参加することができる。これは、7月の11日-13日までにサンフランシスコのダウンタウンインターコンチネンタルで開催される!効果がない。", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "羽かぶと", "headMystery201402Notes": "この羽のついた頭飾りは着用者に風のスピードを吹き込みます!効果なし。2014年2月購読者アイテム。", "headMystery201405Text": "マインドの炎", @@ -463,7 +477,9 @@ "headMystery201508Text": "Cheetah Hat", "headMystery201508Notes": "This cozy cheetah hat is very fuzzy! Confers no benefit. August 2015 Subscriber Item.", "headMystery201509Text": "Werewolf Mask", - "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201509Notes": "これ本当にマスクだよね?効果なし。2015年9月購読者アイテム。", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 Subscriber Item.", "headMystery301404Text": "ファンシートップハット", "headMystery301404Notes": "最上の良家の人々のためのファンシートップハット!3015年1月購読者アイテム。効果なし。", "headMystery301405Text": "ベーシックトップハット", @@ -481,7 +497,7 @@ "headArmoireBlueHairbowText": "Blue Hairbow", "headArmoireBlueHairbowNotes": "Become perceptive, tough, and smart while wearing this beautiful Blue Hairbow! Increases Perception by <%= per %>, Constitution by <%= con %>, and Intelligence by <%= int %>. Enchanted Armoire: Independent Item.", "headArmoireRoyalCrownText": "Royal Crown", - "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Royal Set (Item 1 of 3).", "headArmoireGoldenLaurelsText": "Golden Laurels", "headArmoireGoldenLaurelsNotes": "These golden laurels reward those who have conquered bad habits. Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 2 of 3).", "headArmoireHornedIronHelmText": "Horned Iron Helm", @@ -496,6 +512,12 @@ "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", "headArmoireOrangeCatText": "Orange Cat Hat", "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireBlueFloppyHatText": "Blue Floppy Hat", + "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireShepherdHeaddressText": "Shepherd Headdress", + "headArmoireShepherdHeaddressNotes": "Sometimes the gryphons that you herd like to chew on this headdress, but it makes you seem more intelligent nonetheless. Increases Intelligence by <%= int %>. Enchanted Armoire: Shepherd Set (Item 3 of 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "利き手でないほうの手のアイテム", "shieldBase0Text": "利き手でないほうの手の装備はありません", "shieldBase0Notes": "盾、またはセカンドウェポンがありません。", @@ -579,6 +601,8 @@ "shieldArmoireGladiatorShieldNotes": "剣闘士になるには…あー、もうどうでもいいや、盾で殴っとけ。体質を<%= con %>、力を<%= str %>上げる。魔法の戸棚:剣闘士セット (3アイテム中3番)。", "shieldArmoireMidnightShieldText": "Midnight Shield", "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "shieldArmoireRoyalCaneText": "Royal Cane", + "shieldArmoireRoyalCaneNotes": "Hooray for the ruler, worthy of song! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 2 of 3).", "back": "背中アクセサリー", "backBase0Text": "バックアクセサリーがありません", "backBase0Notes": "バックアクセサリーがありません。", @@ -592,6 +616,8 @@ "backMystery201504Notes": "ブンブンブン!タスクからタスクへと飛び回ります。効果なし。2015年4月購読者アイテム。", "backMystery201507Text": "素晴らしいサーフボード", "backMystery201507Notes": "Surf off the Diligent Docks and ride the waves in Inkomplete Bay! Confers no benefit. July 2015 Subscriber Item.", + "backMystery201510Text": "Goblin Tail", + "backMystery201510Notes": "Prehensile and powerful! Confers no benefit. October 2015 Subscriber Item.", "backSpecialWonderconRedText": "マイティケープ", "backSpecialWonderconRedNotes": "強さと美しさにヒュッと音がします。効果なし。コンベンション特別版アイテム。", "backSpecialWonderconBlackText": "卑劣なケープ", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "この強力な鹿の角は葉っぱと共に色が変わる。効果なし。2014年9月購読者アイテム。", "headAccessoryMystery201502Text": "思想の羽", "headAccessoryMystery201502Notes": "あなたの想像を飛び立たせ!効果なし。2015年2月購読者限定アイテム。", + "headAccessoryMystery201510Text": "Goblin Horns", + "headAccessoryMystery201510Notes": "These fearsome horns are slightly slimy. Confers no benefit. October 2015 Subscriber Item.", "headAccessoryMystery301405Text": "ヘッドウェアゴーグル", "headAccessoryMystery301405Notes": "「ゴーグルはかけるものだ」、「かぶりものにしか使えないゴーグルなんてだれも要らないぞ」って何だ!ほら!違うだろう?効果なし。3015年8月購読者限定アイテム。", "eyewear": "眼鏡", diff --git a/common/locales/ja/generic.json b/common/locales/ja/generic.json index d1747d5a8c..6d28e177ee 100644 --- a/common/locales/ja/generic.json +++ b/common/locales/ja/generic.json @@ -28,7 +28,7 @@ "market": "市場", "subscriberItem": "不思議なアイテム", "newSubscriberItem": "新しい不思議なアイテム", - "subscriberItemText": "毎月、加入者はミステリーアイテムを受け取ることになります。これは通常、月末までに1週間ほどリリースされています。確定期日については、wikiの「ミステリーアイテム」ページを参照してください。", + "subscriberItemText": "Each month, subscribers will receive a mystery item. This is usually released about one week before the end of the month. See the wiki's 'Mystery Item' page for more information.", "all": "全ての", "none": "なし", "or": "または", @@ -69,8 +69,9 @@ "habiticaDayPluralText": "Celebrated <%= number %> Naming Days! Thanks for being a fantastic user.", "achievementDilatory": "先延ばしの救世主", "achievementDilatoryText": "2014サマースプラッシュイベント期間中「先延ばしのドレッド・ドラゴン」の打倒バトルに戦いました!", - "costumeContest": "2014年衣装コンテスト", - "costumeContestText": "2014 ハロウィン仮装コンテストに参加しました。 blog.habitica.com/tagged/cosplay でいくつかのエントリを参照してください!", + "costumeContest": "Costume Contestant", + "costumeContestText": "Participated in the Habitoween Costume Contest. See some of the entries on the Habitica blog!", + "costumeContestTextPlural": "Participated in <%= number %> Habitoween Costume Contests. See some of the entries on the Habitica blog!", "memberSince": "メンバー登録日", "lastLoggedIn": "最近ログイン", "notPorted": "この機能はオリジナルサイトからまだ移植されていません", @@ -79,6 +80,7 @@ "errorUpCase": "エラー:", "newPassSent": "新しいパスワードを送信しました。", "serverUnreach": "現在サーバ側の反応がありません。", + "requestError": "Yikes, an error occurred! Please reload the page, your last action may not have been saved correctly.", "seeConsole": "もしエラーがずっと続くなら、どうか\"Help > Report a Bug\"からお伝えください。もしあなたが使っているブラウザコンソールに詳しいのであれば、どんなエラーメッセージでも含めてお願いします。", "error": "エラー", "menu": "メニュー", @@ -122,7 +124,7 @@ "greeting0": "今日は!", "greeting1": "Just saying hello :)", "greeting2": "`waves frantically`", - "greeting3": "Hey you!", + "greeting3": "そこのあなた!", "greetingCardAchievementTitle": "Cheery Chum", "greetingCardAchievementText": "今日は!ハロー!<%= cards %>挨拶のカードを送くるか受けました。", "thankyouCard": "Thank-You Card", @@ -133,5 +135,17 @@ "thankyou2": "Sending you a thousand thanks.", "thankyou3": "心よりありがとうございました。", "thankyouCardAchievementTitle": "Greatly Grateful", - "thankyouCardAchievementText": "Thanks for being thankful! Sent or received <%= cards %> Thank-You cards." + "thankyouCardAchievementText": "Thanks for being thankful! Sent or received <%= cards %> Thank-You cards.", + "streakAchievement": "You earned a streak achievement!", + "firstStreakAchievement": "21-Day Streak", + "streakAchievementCount": "<%= streaks %> 21-Day Streaks", + "twentyOneDays": "You've completed your Daily for 21 days in a row!", + "dontBreakStreak": "Amazing job. Don't break the streak!", + "dontStop": "Don't Stop Now!", + "levelUpShare": "I leveled up in Habitica by improving my real-life habits!", + "questUnlockShare": "I unlocked a new quest in Habitica!", + "hatchPetShare": "I hatched a new pet by completing my real-life tasks!", + "raisePetShare": "I raised a pet into a mount by completing my real-life tasks!", + "wonChallengeShare": "I won a challenge in Habitica!", + "achievementShare": "I earned a new achievement in Habitica!" } \ No newline at end of file diff --git a/common/locales/ja/groups.json b/common/locales/ja/groups.json index 5ea92cd57c..4f78dc7b58 100644 --- a/common/locales/ja/groups.json +++ b/common/locales/ja/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "宿屋をチェックアウト", "innCheckIn": "宿屋に泊まる", "innText": "あなたは宿屋に泊まっています!チェックインしている間、一日の終わりに日課が未実施でもダメージを受けません、ですが日課は毎日リフレッシュされます。注意: もしあなたがボスクエストに参加しているなら、あなたのパーティの仲間が日課をし損ねたとき、その仲間も宿屋に泊まっていない限り、あなたはダメージを受けます!また、あなたのボスへのダメージ(または収集したアイテム)は宿屋をチェックアウトするまで適用されません。", + "innTextBroken": "You're resting in the Inn, I guess... While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day... If you are participating in a Boss Quest, the Boss will still damage you for your party mates' missed Dailies... unless they are also in the Inn... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn... so tired...", "lfgPosts": "グループポスト(メンバー募集)を探してください", "tutorial": "チュートリアル", "glossary": "小辞典", @@ -33,7 +34,7 @@ "leave": "やめる", "invitedTo": "<%= name %>に招待されました", "invitedToNewParty": "You were invited to join a party! Do you want to leave this party and join <%= partyName %>?", - "joinNewParty": "Join New Party", + "joinNewParty": "新しいパーティーに参加する", "declineInvitation": "Decline Invitation", "loadingNewParty": "Your new party is loading. Please wait...", "newMsg": "\"<%= name %>\"で新しいメッセージがあります", @@ -113,10 +114,10 @@ "leaderOnlyChallenges": "グループリーダーだけがチャレンジを作成できます", "sendGift": "贈り物を送る", "inviteFriends": "友達を招待する", - "inviteByEmail": "Invite by Email", + "inviteByEmail": "メールで招待する", "inviteByEmailExplanation": "If a friend joins Habitica via your email, they'll automatically be invited to your party!", "inviteFriendsNow": "Invite Friends Now", - "inviteFriendsLater": "Invite Friends Later", + "inviteFriendsLater": "後で友達を招待する", "inviteAlertInfo": "If you have friends already using Habitica, invite them by User ID here.", "inviteExistUser": "Invite Existing Users", "byColon": "で", @@ -139,11 +140,12 @@ "partyExplanation1": "Play Habitica with friends to stay accountable!", "partyExplanation2": "Battle monsters and create Challenges!", "partyExplanation3": "Invite friends now to earn a Quest Scroll!", - "wantToStartParty": "Do you want to start a party?", + "wantToStartParty": "パーティーを作りますか?", "exclusiveQuestScroll": "Inviting a friend to your party will grant you an exclusive Quest Scroll to battle the Basi-List together!", "nameYourParty": "Name your new party!", "partyEmpty": "You're the only one in your party. Invite your friends!", "partyChatEmpty": "Your party chat is empty! Type a message in the box above to start chatting.", "guildChatEmpty": "This guild's chat is empty! Type a message in the box above to start chatting.", - "possessiveParty": "<%= name %>'s Party" + "possessiveParty": "<%= name %>のパーティー", + "requestAcceptGuidelines": "If you would like to post messages in the Tavern or any party or guild chat, please first read our <%= linkStart %>Community Guidelines<%= linkEnd %> and then click the button below to indicate that you accept them." } \ No newline at end of file diff --git a/common/locales/ja/limited.json b/common/locales/ja/limited.json index f5f798ebfe..188bbd48e4 100644 --- a/common/locales/ja/limited.json +++ b/common/locales/ja/limited.json @@ -21,6 +21,7 @@ "valentineCardAchievementText": "ああ、貴方と貴方の友達はとっても仲がいいんですね!<%= cards %> 個のバレンタインカードを送信または受信しました。", "polarBear": "シロクマ", "turkey": "シチメンチョウ", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "シロクマの子", "jackolantern": "ジャック・オ・ランタン", "seasonalShop": "季節品ショップ", @@ -30,6 +31,7 @@ "seasonalShopText": "季節限定ショップへようこそ! 春の 季節限定版グッズを揃えています。ここにあるものはすべて毎年スプリングフリング期間中に買う事ができますが、4月30日までしかオープンしていません。ですので今買い備えないと、買うのにまた一年またなければなりませんよ!", "seasonalShopSummerText": "季節限定ショップへようこそ! 夏の 季節限定版グッズを揃えています。ここにあるものはすべて毎年サマースプラッシュイベント期間中に買う事ができますが、7月31日までしかオープンしていません。ですので今買い備えないと、買うのにまた一年またなければなりませんよ!", "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31, so be sure to stock up now, or you'll have to wait a year to buy these items again!", + "seasonalShopFallTextBroken": "Oh.... Welcome to the Seasonal Shop... We're stocking autumn Seasonal Edition goodies, or something... Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31... I guess you should to stock up now, or you'll have to wait... and wait... and wait... *sigh*", "seasonalShopRebirth": "If you've used the Orb of Rebirth, you can repurchase this equipment in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.", "candycaneSet": "キャンディケイン (魔道士)", "skiSet": "スキーアサシン(盗賊)", @@ -58,7 +60,7 @@ "roguishPirateSet": "いたずら好きな海賊(盗賊)", "monsterOfScienceSet": "Monster of Science (Warrior)", "witchyWizardSet": "Witchy Wizard (Mage)", - "mummyMedicSet": "Mummy Medic (Healer)", + "mummyMedicSet": "ミイラメディック (神官)", "vampireSmiterSet": "Vampire Smiter (Rogue)", "fallEventAvailability": "Available until October 31" } \ No newline at end of file diff --git a/common/locales/ja/messages.json b/common/locales/ja/messages.json index ca023bee18..d6e1b53197 100644 --- a/common/locales/ja/messages.json +++ b/common/locales/ja/messages.json @@ -30,5 +30,26 @@ "messageAlreadyOwnGear": "このアイテムはもう有します。装備ページに行って装備して下さい。", "armoireEquipment": "<%= image %>戸棚で珍しい装備を見つけました:<%= dropText %>! 素晴らしい!", "armoireFood": "<%= image %>戸棚で漁って <%= dropArticle %><%= dropText %>. を見つけます。何でこの所に?", - "armoireExp": "戸棚と組み付いてエクスペリエンスを得ます。持ってけ!" + "armoireExp": "戸棚と組み付いてエクスペリエンスを得ます。持ってけ!", + "messageInsufficientGems": "Not enough gems!", + "messageAuthPasswordMustMatch": ":password and :confirmPassword don't match", + "messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword required", + "messageAuthUsernameTaken": "Username already taken", + "messageAuthEmailTaken": "Email already taken", + "messageAuthNoUserFound": "No user found.", + "messageAuthMustBeLoggedIn": "ログインしてください", + "messageAuthMustIncludeTokens": "You must include a token and uid (user id) in your request", + "messageGroupNotFound": "Group not found or you don't have access.", + "messageGroupAlreadyInParty": "Already in a party, try refreshing.", + "messageGroupOnlyLeaderCanUpdate": "Only the group leader can update the group!", + "messageGroupRequiresInvite": "Can't join a group you're not invited to.", + "messageGroupCannotRemoveSelf": "You cannot remove yourself!", + "messageGroupChatBlankMessage": "You cannot send a blank message", + "messageGroupChatLikeOwnMessage": "Can't like your own message. Don't be that person.", + "messageGroupChatFlagOwnMessage": "Can't report your own message.", + "messageGroupChatFlagAlreadyReported": "You have already reported this message", + "messageGroupChatNotFound": "Message not found!", + "messageGroupChatAdminClearFlagCount": "Only an admin can clear the flag count!", + "messageUserOperationProtected": "path `<%= operation %>` was not saved, as it's a protected path.", + "messageUserOperationNotFound": "<%= operation %> operation not found" } \ No newline at end of file diff --git a/common/locales/ja/noscript.json b/common/locales/ja/noscript.json new file mode 100644 index 0000000000..6057268ef2 --- /dev/null +++ b/common/locales/ja/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Alas! Your browser doesn't have JavaScript enabled", + "jsDisabledHeadingFull": "Alas! Your browser doesn't have JavaScript enabled and without it, Habitica can't work properly", + "jsDisabledText": "Habitica can't properly display the site without it!", + "jsDisabledLink": "Please enable JavaScript to continue!" +} \ No newline at end of file diff --git a/common/locales/ja/npc.json b/common/locales/ja/npc.json index 73a04ad8e8..c7537b1ab0 100644 --- a/common/locales/ja/npc.json +++ b/common/locales/ja/npc.json @@ -7,15 +7,19 @@ "daniel": "ダニエル", "danielText": "酒場へようこそ!しばらく滞在して、地元の人と会いましょう。あなたに休息が必要な場合 (休暇? 病気?)、私が宿であなたを元気にします。チェックインしている間、あなたの日課は未実施でも一日の終わりにあなたを傷つけませんが、印を付けて実施済みにできます。", "danielText2": "注意してください: あなたがボスの冒険に参加している場合は、あなたのパーティーの仲間が日課を逃したことで、ボスはまだあなたを傷つけます! また、あなたがボスに与えるダメージ(もしくは集めたアイテム)は宿をチェックアウトするまでt適用されません。", + "danielTextBroken": "Welcome to the Tavern... I guess... If you need to rest, I'll set you up at the Inn... While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off... if you have the energy...", + "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": "アレクサンダー商人", "welcomeMarket": "マーケットへようこそ!レアペットとポーションを買えます。", - "sellForGold": "<%= item %>を<%= gold %>ゴールドで売る", - "sellEggForGold": "<%= itemType %>のたまごを<%= gold %>ゴールドで売る", - "sellPotionForGold": "<%= itemType %>ポーションを<%= gold %>ゴールドで売る", + "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?", + "sellForGold": "Sell it for <%= gold %> Gold", "buyGems": "ジェムを買う", "justin": "ジャスティン", "ian": "イアン", "ianText": "クエストショップへようこそ!ここでは友達と一緒にモンスターと戦えるクエストの巻物を手に入れられます。この美しい品ぞろえを確認して、右側で購入しましょう!", + "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...", "USD": "ドル", "newStuff": "新しい事", "cool": "後で伝える", @@ -71,7 +75,7 @@ "tourHabitsProceed": "なるほど!", "tourRewardsBrief": "報酬リスト
  • あなたが稼いだゴールドはここです!
  • アバターの装備を購入したり、カスタム報酬を設定できます。
", "tourRewardsProceed": "以上です!", - "welcomeToHabit": "Welcome to Habitica!", + "welcomeToHabit": "Habiticaへようこそ!", "welcome1": "Create a basic avatar.", "welcome1notes": "This avatar will represent you as you progress.", "welcome2": "Set up your tasks.", diff --git a/common/locales/ja/pets.json b/common/locales/ja/pets.json index c3eadf4966..be7416b1ac 100644 --- a/common/locales/ja/pets.json +++ b/common/locales/ja/pets.json @@ -1,13 +1,13 @@ { "pets": "ペット", "petsFound": "見つけたペット", - "magicPets": "Magic Potion Pets", + "magicPets": "魔法ポーションのペット", "rarePets": "レアペット", "questPets": "クエストペット", "mounts": "マウントペット", "mountsTamed": "飼い慣らされたマウントペット", "questMounts": "クエストマウントペット", - "magicMounts": "Magic Potion Mounts", + "magicMounts": "魔法ポーションのマウント", "rareMounts": "レアマウントペット", "etherealLion": "エーテルライオン", "veteranWolf": "ベテラン狼", @@ -18,7 +18,7 @@ "mammoth": "長毛マンモス", "orca": "シャチ", "royalPurpleGryphon": "貝紫色のグリフォン", - "phoenix": "Phoenix", + "phoenix": "フェニックス", "rarePetPop1": "Habiticaに貢献することを通してどのようにこの珍しいペットを得ることができるかについて、より多くを学ぶために、金の足をクリックしてください!", "rarePetPop2": "このペットを得る方法!", "potion": "<%= potionType %> ポーション", @@ -27,15 +27,15 @@ "eggSingular": "たまご", "noEggs": "たまごを持っていない。", "hatchingPotions": "孵化ポーション", - "magicHatchingPotions": "Magic Hatching Potions", + "magicHatchingPotions": "魔法孵化ポーション", "hatchingPotion": "孵化ポーション", "noHatchingPotions": "孵化ポーションを持っていない。", "inventoryText": "たまごをクリックし、緑色にハイライトされた使用可能のポーションを確認して、クリックで1つ選んで孵化に使用します。緑色にハイライトされたポーションがない場合は、もう一度そのたまごをクリックして、選択を解除します。次にポーションをクリックし、ハイライトされたたまごを探してください。また、アレキサンダー商人に不要なドロップを売ることができます。", "foodText": "餌", "food": "エサと鞍", "noFood": "エサか鞍がありません。", - "dropsExplanation": "Get these items faster with Gems if you don't want to wait for them to drop when completing a task. Learn more about the drop system.", - "premiumPotionNoDropExplanation": "Magic Hatching Potions cannot be used on eggs received from Quests. The only way to get Magic Hatching Potions is by buying them below, not from random drops.", + "dropsExplanation": "このアイタムは普通にタスクを完了したときにドロップします。待ちたくなかったら、ジェムでもっと早く買えるよ。ドロップシステムについてを読む。", + "premiumPotionNoDropExplanation": "魔法孵化ポーションをクエストのたまごに使えません。ランダムドロップから魔法孵化ポーションを取りられません、下に買ってください。", "beastMasterProgress": "ビーストマスター進捗", "stableBeastMasterProgress": "ビーストマスター進捗: <%= number %> 匹のペットを見つけた。", "beastAchievement": "全てのペットを集めたので「ビーストマスター」の称号を手に入れた!", @@ -43,7 +43,7 @@ "beastMasterText": "90匹のペットを全て見つけた(凄く難しい、祝福しよう!)", "beastMasterText2": "それに <%= count %>度ペットを逃がしました。", "mountMasterProgress": "マウントペットマスター進捗", - "stableMountMasterProgress": "Mount Master Progress: <%= number %> Mounts Tamed", + "stableMountMasterProgress": "マウントマスターの進展: <%= number %> 飼い慣らしたマウント", "mountAchievement": "全てのマウントペットを飼いならしたので「マウントペットマスター」の称号を手に入れた!", "mountMasterName": "マウントペットマスター", "mountMasterText": "90匹のマウントペット全てを飼いならした (さらに難しい、祝福しよう!)", @@ -58,8 +58,16 @@ "firstDrop": "ドロップシステムが解除されました!今後タスクを完了したとき、たまごやポーションやエサといったアイテムが見つかる可能性があります!あなたは今<%= eggText %>たまごを見つけました! <%= eggNotes %>", "useGems": "もしあなたがペットをじっと見守りつづけていて、これ以上ドロップを待てないのであれば、ジェムを使って所持品 > 市場 で買ってください!", "hatchAPot": "<%= potion %>の<%= egg %>を孵しますか?", + "hatchedPet": "You hatched a <%= potion %> <%= egg %>!", + "displayNow": "Display Now", + "displayLater": "Display Later", + "earnedCompanion": "With all your productivity, you've earned a new companion. Feed it to make it grow!", "feedPet": "<%= name %>に<%= article %><%= text %>をやりますか?", "useSaddle": "<%= pet %>に鞍を置きますか?", + "raisedPet": "You grew a <%= pet %>!", + "earnedSteed": "By completing your tasks, you've earned a faithful steed!", + "rideNow": "Ride Now", + "rideLater": "Ride Later", "petName": "<%= potion %> <%= egg %>", "mountName": "<%= potion %> <%= egg %>を孵しますか?", "petKeyName": "犬小屋への鍵", diff --git a/common/locales/ja/quests.json b/common/locales/ja/quests.json index b47ebc2904..6afa889e49 100644 --- a/common/locales/ja/quests.json +++ b/common/locales/ja/quests.json @@ -13,6 +13,7 @@ "youReceived": "受け取りました", "dropQuestCongrats": "おめでとうございます!クエストの巻物を取得しました。クエストにパーティメンバーを招待してクエストを開始できます。所持品>クエストから好きな時に開始できます。", "questSend": "Clicking \"Invite\" will send an invitation to your party members. When all members have accepted or denied, the quest begins. See status under Social > Party.", + "questSendBroken": "Clicking \"Invite\" will send an invitation to your party members... When all members have accepted or denied, the quest begins... See status under Social > Party...", "inviteParty": "Invite Party to Quest", "questInvitation": "クエストへの招待状:", "questInvitationTitle": "クエストへの招待", @@ -24,6 +25,7 @@ "rejected": "拒否されました", "pending": "未決", "questStart": "一旦、すべてのメンバーが受け入れまたは拒否のどちらかを選択すると、クエストが開始されます。「受け入れる」をクリックしたものだけがクエストに参加して、ドロップを受け取ることができるようになります。メンバーが長い間保留 (非アクティブ?) している場合は、クエストオーナーは「開始」をクリックして彼ら抜きでクエストを開始することができます。また、クエストオーナーは、「キャンセル」をクリックして、クエストをキャンセルし、クエストスクロールを取り戻すことができます。", + "questStartBroken": "Once all members have either accepted or rejected, the quest begins... Only those that clicked \"accept\" will be able to participate in the quest and receive the drops... If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\"... The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\"...", "begin": "始める", "bossHP": "ボスの体力", "bossStrength": "ボスの力", @@ -34,9 +36,14 @@ "itemsToCollect": "Items to Collect", "bossDmg1": "Each completed Daily and To-Do and each positive Habit hurts the boss. Hurt it more with redder tasks or Brutal Smash and Burst of Flames. The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies! All damage to and from a boss is tallied on cron (your day roll-over).", "bossDmg2": "参加者だけがボスと戦い、クエストの勝利品を共有することができる", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "Each completed Daily and To-Do and each positive Habit hurts the boss... Hurt it more with redder tasks or Brutal Smash and Burst of Flames... The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies... All damage to and from a boss is tallied on cron (your day roll-over)...", + "bossDmg2Broken": "Only participants will fight the boss and share in the quest loot...", + "tavernBossInfo": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "tavernBossInfoBroken": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss... Incomplete Dailies fill the Exhaust Strike Bar... When the Exhaust Strike bar is full, the World Boss will attack an NPC... A World Boss will never damage individual players or accounts in any way... Only active accounts not resting in the Inn will have their tasks tallied...", "bossColl1": "アイテムを収集するには、良いタスクを実行します。クエストアイテムは通常のアイテムのようにドロップします。ただし、翌日までドロップは表示されません。その後あなたが見つけたものはすべて集計されて、山に寄与します。", "bossColl2": "参加者だけがアイテムを探索し、クエストの勝利品を共有することができる", + "bossColl1Broken": "To collect items, do your positive tasks... Quest items drop just like normal items; however, you won't see the drops until the next day, then everything you've found will be tallied up and contributed to the pile...", + "bossColl2Broken": "Only participants can collect items and share in the quest loot...", "abort": "中止", "leaveQuest": "Leave Quest", "sureLeave": "Are you sure you want to leave the active quest? All your quest progress will be lost.", @@ -63,10 +70,13 @@ "sureAbort": "このミッションを中止してもよろしいですか? あなたのパーティのすべての人に対して中止し、すべての進行状況が失われます。クエストスクロールはクエストオーナーに戻されます。", "doubleSureAbort": "本当に二つ同時に行うのですか?途中で嫌にならないか、きちんと考えてくださいね。", "questWarning": "クエストが始まる前に新しいプレイヤーがパーティに参加した場合、彼らもまた、招待状を受け取ります。ただし、クエストが開始した後は、新しいパーティメンバーはクエストに参加できません。", + "questWarningBroken": "If new players join the party before the quest starts, they will also receive an invitation... However once the quest has started, no new party members can join the quest...", "bossRageTitle": "怒り", "bossRageDescription": "もしこのバーが満タンになると、ボスは特殊攻撃を放ちます!", - "startAQuest": "START A QUEST", + "startAQuest": "クエストを始める", "startQuest": "クエストを始めよう", - "whichQuestStart": "Which quest do you want to start?", - "getMoreQuests": "Get more quests" + "whichQuestStart": "どのクエストを始めますか?", + "getMoreQuests": "Get more quests", + "unlockedAQuest": "You unlocked a quest!", + "leveledUpReceivedQuest": "You leveled up to Level <%= level %> and received a quest scroll!" } \ No newline at end of file diff --git a/common/locales/ja/questscontent.json b/common/locales/ja/questscontent.json index 43d491b16d..57d2448526 100644 --- a/common/locales/ja/questscontent.json +++ b/common/locales/ja/questscontent.json @@ -241,7 +241,7 @@ "questCheetahText": "Such a Cheetah", "questCheetahNotes": "As you hike across the Sloensteadi Savannah with your friends @PainterProphet, @tivaquinn, @Unruly Hyena, and @Crawford, you're startled to see a Cheetah screeching past with a new Habitican clamped in its jaws. Under the Cheetah's scorching paws, tasks burn away as though complete -- before anyone has the chance to actually finish them! The Habitican sees you and yells, \"Please help me! This Cheetah is making me level too quickly, but I'm not getting anything done. I want to slow down and enjoy the game. Make it stop!\" You fondly remember your own fledgling days, and know that you have to help the newbie by stopping the Cheetah!", "questCheetahCompletion": "The new Habitican is breathing heavily after the wild ride, but thanks you and your friends for your help. \"I'm glad that Cheetah won't be able to grab anyone else. It did leave some Cheetah eggs for us, so maybe we can raise them into more trustworthy pets!\"", - "questCheetahBoss": "Cheetah", + "questCheetahBoss": "チーター", "questCheetahDropCheetahEgg": "Cheetah (Egg)", "questCheetahUnlockText": "Unlocks purchasable Cheetah eggs in the Market", "questHorseText": "Ride the Night-Mare", @@ -257,9 +257,21 @@ "questBurnoutBoss": "Burnout", "questBurnoutBossRageTitle": "Exhaust Strike", "questBurnoutBossRageDescription": "When this gauge fills, Burnout will unleash its Exhaust Strike on Habitica!", - "questBurnoutDropPhoenixPet": "Phoenix (Pet)", - "questBurnoutDropPhoenixMount": "Phoenix (Mount)", + "questBurnoutDropPhoenixPet": "不死鳥 (ペット)", + "questBurnoutDropPhoenixMount": "不死鳥 (マウント)", "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!", + "questFrogText": "Swamp of the Clutter Frog", + "questFrogNotes": "As you and your friends are slogging through the Swamps of Stagnation, @starsystemic points at a large sign. \"Stay on the path -- if you can.\"

\"Surely that isn't hard!\" @RosemonkeyCT says. \"It's broad and clear.\"

But as you continue, you notice that path is gradually overtaken by the muck of the swamp, laced with bits of strange blue debris and clutter, until it's impossible to proceed.

As you look around, wondering how it got this messy, @Jon Arjinborn shouts, \"Look out!\" An angry frog leaps from the sludge, clad in dirty laundry and lit by blue fire. You will have to overcome this poisonous Clutter Frog to progress!", + "questFrogCompletion": "The frog cowers back into the muck, defeated. As it slinks away, the blue slime fades, leaving the way ahead clear.

Sitting in the middle of the path are three pristine eggs. \"You can even see the tiny tadpoles and through the clear casing!\" @Breadstrings says. \"Here, you should take them.\"", + "questFrogBoss": "Clutter Frog", + "questFrogDropFrogEgg": "Frog (Egg)", + "questFrogUnlockText": "Unlocks purchasable Frog eggs in the Market", + "questSnakeText": "The Serpent of Distraction", + "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveler astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", + "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", + "questSnakeBoss": "Serpent of Distraction", + "questSnakeDropSnakeEgg": "Snake (Egg)", + "questSnakeUnlockText": "Unlocks purchasable Snake eggs in the Market" } \ No newline at end of file diff --git a/common/locales/ja/rebirth.json b/common/locales/ja/rebirth.json index 3a73c0859a..3a8d05a0b8 100644 --- a/common/locales/ja/rebirth.json +++ b/common/locales/ja/rebirth.json @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "また新しい冒険を開始するために、実績を獲得しましょう!", "beReborn": "転生する", "rebirthAchievement": "あなたは新しい冒険を始めました! これは転生 <%= number %> で、あなたが達成した最高レベルは <%= level %>.です。この実績を積み重ねるために、より高いレベルに達したときに、次の新しい冒険を始めましょう!", + "rebirthAchievement100": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is 100 or higher. To stack this Achievement, begin your next new adventure when you've reached at least 100!", "rebirthBegan": "新しい冒険が始まりました", "rebirthText": "<%= rebirths %> 新しい冒険を始めました", "rebirthOrb": "レベルに達成したらオーブオブリバースを使って再スタートしてください", + "rebirthOrb100": "Used an Orb of Rebirth to start over after attaining Level 100 or higher", "rebirthPop": "実績、グッズ、およびタスクと履歴を保持して、レベル1で新しいキャラクターを始めます。", "rebirthName": "転生のオーブ", "reborn": "転生しました、最大レベル<%= reLevel %>" diff --git a/common/locales/ja/settings.json b/common/locales/ja/settings.json index 7bbbad7687..a31112720b 100644 --- a/common/locales/ja/settings.json +++ b/common/locales/ja/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "このオプションを設定すると、編集のために最初にタスクを開いたときに、タスクのリストタグが非表示になります。", "startAdvCollapsed": "タスクの拡張オプションが崩れました", "startAdvCollapsedPop": "このオプションを設定すると、編集のために最初にタスクを開いたときに、拡張オプションが非表示になります。", + "dontShowAgain": "Don't show this again", + "suppressLevelUpModal": "Don't show popup when gaining a level", + "suppressHatchPetModal": "Don't show popup when hatching a pet", + "suppressRaisePetModal": "Don't show popup when raising a pet into a mount", + "suppressStreakModal": "Don't show popup when attaining a Streak achievement", "showTour": "ツアーを表示する。", "restartTour": "Habiticaを始めた時の紹介ツアーを見る。", "showBailey": "Baileyを表示する", @@ -81,7 +86,6 @@ "emailChange1": "あなたのメールアドレスを変更するには、", "emailChange2": "admin@habitica.com", "emailChange3": "へ、あなたの古いメールアドレスとユーザID、そして新しく使いたいユーザーIDを含め、Eメールを送信してください。", - "username": "ログイン名", "usernameOrEmail": "ログイン名またはメールアドレス", "email": "メール", "registeredWithFb": "Facebookで登録", @@ -89,7 +93,7 @@ "loginNameDescription2": "ユーザー->プロフィール", "loginNameDescription3": "で変更できます。", "emailNotifications": "メール通知", - "wonChallenge": "チャレンジが達成されました", + "wonChallenge": "You won a Challenge!", "newPM": "プライベートメッセージが届きました", "giftedGems": "贈られたジェム", "giftedGemsInfo": "<%= name %>から<%= amount %>ジェム", @@ -118,5 +122,29 @@ "promoCode": "プロモコード", "promoCodeApplied": "プロモコードが適用されました!所持品を確認してください", "promoPlaceholder": "プロモコードを入力してください", - "displayInviteToPartyWhenPartyIs1": "パーティにメンバーが1人の場合に「パーティに招待する」ボタンを表示する" + "displayInviteToPartyWhenPartyIs1": "パーティにメンバーが1人の場合に「パーティに招待する」ボタンを表示する", + "saveCustomDayStart": "Save Custom Day Start", + "registration": "Registration", + "addLocalAuth": "Add local authentication:", + "generateCodes": "Generate Codes", + "generate": "Generate", + "getCodes": "Get Codes", + "webhooks": "Webhooks", + "enabled": "Enabled", + "webhookURL": "Webhook URL", + "add": "Add", + "buyGemsGoldCap": "Cap raised to <%= amount %>", + "mysticHourglass": "<%= amount %> Mystic Hourglass", + "mysticHourglassText": "Mystic Hourglasses allow purchasing a previous month's Mystery Item set.", + "purchasedPlanId": "Recurring $<%= price %> each <%= months %> Month(s) (<%= plan %>)", + "purchasedPlanExtraMonths": "You have <%= months %> months of subscription credit.", + "consecutiveSubscription": "Consecutive Subscription", + "consecutiveMonths": "Consecutive Months:", + "gemCapExtra": "Gem Cap Extra:", + "mysticHourglasses": "Mystic Hourglasses:", + "paypal": "PayPal", + "amazonPayments": "Amazon Payments", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/ja/subscriber.json b/common/locales/ja/subscriber.json index 5e703b9b2f..576fd4d913 100644 --- a/common/locales/ja/subscriber.json +++ b/common/locales/ja/subscriber.json @@ -60,7 +60,7 @@ "timeTravelersTitleNoSub": "<%= linkStartTyler %>タイラー<%= linkEnd %>と<%= linkStartVicky %>ビッキー<%= linkEnd %>", "timeTravelersTitle": "謎のタイムトラベラーズ", "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.", - "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 <%= linkStart %>here<%= linkEnd %>! If those don't satisfy you, perhaps you'd be interested in one of our fashionably futuristic Steampunk Item Sets?", + "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!", "subUpdateCard": "クレジットカード情報を変更する", @@ -69,7 +69,7 @@ "notEnoughHourglasses": "You don't have enough Mystic Hourglasses.", "hourglassBuyEquipSetConfirm": "Buy this full set of items for 1 Mystic Hourglass?", "hourglassBuyItemConfirm": "Buy this item for 1 Mystic Hourglass?", - "petsAlreadyOwned": "Pet already owned.", + "petsAlreadyOwned": "このペットは既に飼っています", "mountsAlreadyOwned": "Mount already owned.", "typeNotAllowedHourglass": "Item type not supported for purchase with Mystic Hourglass. Allowed types:", "petsNotAllowedHourglass": "Pet not available for purchase with Mystic Hourglass.", diff --git a/common/locales/ja/tasks.json b/common/locales/ja/tasks.json index 66f757765e..74c182220b 100644 --- a/common/locales/ja/tasks.json +++ b/common/locales/ja/tasks.json @@ -88,8 +88,7 @@ "fortifyText": "Fortify will return all your tasks to a neutral (yellow) state, as if you'd just added them, and top your Health off to full. This is great if all your red tasks are making the game too hard, or all your blue tasks are making the game too easy. If starting fresh sounds much more motivating, spend the Gems and catch a reprieve!", "sureDelete": "本当にこのタスクを削除しても良いですか?", "streakCoins": "連続実行ボーナス!", - "pushTaskToTop": "タスクを一番上に上げる", - "pushTaskToBottom": "タスクを一番下に下げる", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "タスクのタイトルをまず入力してください。", "dailiesRestingInInn": "あなたは宿に泊まっています!日課が未実施でも今晩あなたはダメージを受けません。ですが日課は毎日リフレッシュされます。もしクエスト中であれば、宿をチェックアウトするまでダメージをうけたりアイテムを集めたりできません、ですがあなたのパーティの仲間が日課をスキップしたら、あなたはダメージを受けます。", "habitHelp1": "よい習慣は、あなたがよく行っている行動です。<%= plusIcon %> をクリックするたびに、良い習慣からコインと経験値を獲得することができます。", diff --git a/common/locales/nl/backgrounds.json b/common/locales/nl/backgrounds.json index 948a920cc5..3d7cdfb63a 100644 --- a/common/locales/nl/backgrounds.json +++ b/common/locales/nl/backgrounds.json @@ -106,17 +106,31 @@ "backgroundTwinklyPartyLightsText": "Feestlampjes", "backgroundTwinklyPartyLightsNotes": "Dans onder de feestlampjes!", "backgrounds092015": "SET 16: Uitgebracht in september 2015", - "backgroundMarketText": "Habitica markt", - "backgroundMarketNotes": "Inkopen bij de Habitica markt", - "backgroundStableText": "Habitica stal", - "backgroundStableNotes": "Verzorg de rijdieren in de Habitica stal.", - "backgroundTavernText": "Habitica herberg", - "backgroundTavernNotes": "Bezoek de Habitica herberg", - "backgrounds102015": "SET 17: Released October 2015", - "backgroundHarvestMoonText": "Harvest Moon", - "backgroundHarvestMoonNotes": "Cackle under the Harvest Moon.", - "backgroundSlimySwampText": "Slimy Swamp", - "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", - "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgroundMarketText": "De markt van Habitica", + "backgroundMarketNotes": "Inkopen doen bij de markt van Habitica", + "backgroundStableText": "De stal van Habitica", + "backgroundStableNotes": "Verzorg rijdieren in de stal van Habitica", + "backgroundTavernText": "De herberg van Habitica", + "backgroundTavernNotes": "Bezoek de herberg van Habitica", + "backgrounds102015": "Set 17: Uitgebracht in oktober 2015", + "backgroundHarvestMoonText": "Oogstmaan", + "backgroundHarvestMoonNotes": "Kom kakelen onder de oogstmaan", + "backgroundSlimySwampText": "Slijmerig moeras", + "backgroundSlimySwampNotes": "Ploeter door een slijmerig moeras", + "backgroundSwarmingDarknessText": "Allesverhullende duisternis", + "backgroundSwarmingDarknessNotes": "Bibber in de allesverhullende duisternis.", + "backgrounds112015": "SET 18: Uitgebracht in november 2015", + "backgroundFloatingIslandsText": "Drijvende eilanden", + "backgroundFloatingIslandsNotes": "Spring van één drijvend eiland naar de volgende.", + "backgroundNightDunesText": "Nachtduinen", + "backgroundNightDunesNotes": "Maak een vredige wandeling door de nachtduinen.", + "backgroundSunsetOasisText": "Oase bij zonsondergang", + "backgroundSunsetOasisNotes": "Baadt in de ondergaande oasezon.", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/nl/challenge.json b/common/locales/nl/challenge.json index f6eb2fcd65..8d5046e7cc 100644 --- a/common/locales/nl/challenge.json +++ b/common/locales/nl/challenge.json @@ -43,8 +43,8 @@ "exportChallengeCSV": "Exporteren naar CSV", "selectGroup": "Groep selecteren", "challengeCreated": "Uitdaging aangemaakt", - "sureDelCha": "Are you sure you want to delete this challenge?", - "sureDelChaTavern": "Are you sure you want to delete this challenge? Your gems will not be refunded.", + "sureDelCha": "Weet je zeker dat je deze uitdaging wilt verwijderen?", + "sureDelChaTavern": "Weet je zeker dat je deze uitdaging wilt verwijderen? Je krijgt je edelstenen niet terug.", "removeTasks": "Taken verwijderen", "keepTasks": "Taken behouden", "closeCha": "Uitdaging afsluiten en...", @@ -57,7 +57,11 @@ "prizeValue": "<%= gemcount %> <%= gemicon %> prijs", "clone": "Kopiëren", "challengeNotEnoughGems": "Je hebt niet genoeg edelstenen om deze uitdaging te plaatsen.", - "noPermissionEditChallenge": "You don't have permissions to edit this challenge", - "noPermissionDeleteChallenge": "You don't have permissions to delete this challenge", - "noPermissionCloseChallenge": "You don't have permissions to close this challenge" + "noPermissionEditChallenge": "Je hebt geen toestemming om deze uitdaging te bewerken", + "noPermissionDeleteChallenge": "Je hebt geen toestemming om deze uitdaging te verwijderen", + "noPermissionCloseChallenge": "Je hebt geen toestemming om deze uitdaging te sluiten", + "congratulations": "Gefeliciteerd!", + "hurray": "Hoera!", + "noChallengeOwner": "geen eigenaar", + "noChallengeOwnerPopover": "Deze uitdaging heeft geen eigenaar omdat de eigenaar zijn of haar account heeft verwijderd." } \ No newline at end of file diff --git a/common/locales/nl/character.json b/common/locales/nl/character.json index 5290408380..01deebaa09 100644 --- a/common/locales/nl/character.json +++ b/common/locales/nl/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "Klassebonus", "battleGear": "Strijduitrusting", "battleGearText": "Dit is de uitrusting die je in de strijd draagt. Het beïnvloedt scores als je met taken bezig bent.", + "autoEquipBattleGear": "Automatisch nieuwe uitrusting gebruiken", "costume": "Kostuum", "costumeText": "Als een andere uitrusting mooier vindt dan de uitrusting die je gebruikt, vink dan \"Kostuum gebruiken\" aan om een andere uitrusting zichtbaar te maken terwijl je je strijduitrusting eronder draagt.", "useCostume": "Kostuum gebruiken", @@ -64,6 +65,10 @@ "ultimGearText": "Heeft de hoogst haalbare wapen- en uitrustingset voor de volgende klassen:", "level": "Niveau", "levelUp": "Niveau erbij!", + "gainedLevel": "Je bent een niveau gestegen!", + "leveledUp": "Door het voltooien van je doelen in het echte leven, ben je gevorderd naar niveau <%= level %>!", + "fullyHealed": "Je bent volledig genezen!", + "huzzah": "Hoezee!", "mana": "Mana", "hp": "GP", "mp": "MP", diff --git a/common/locales/nl/communityguidelines.json b/common/locales/nl/communityguidelines.json index c162b60e06..af575ed6a5 100644 --- a/common/locales/nl/communityguidelines.json +++ b/common/locales/nl/communityguidelines.json @@ -25,7 +25,7 @@ "commGuidePara011b": "op GitHub/Wikia", "commGuidePara011c": "op Wikia", "commGuidePara011d": "op GitHub", - "commGuidePara012": "Als je moderator-gerelateerde problemen of zorgen hebt, stuur dan een mail naar Lemoness (leslie@habitica).", + "commGuidePara012": "Als een probleem hebt met of zorgen over een specifieke moderator, stuur alsjeblieft een e-mail naar Lemoness (leslie@habitica).", "commGuidePara013": "In een gemeenschap zo groot als Habitica is het zo dat gebruikers komen en gaan en dat ook beheerders soms hun mantels neer moeten leggen om te ontspannen. De volgende mensen zijn emeritus beheerder. Ze handelen niet meer met het gezag van een beheerder, maar toch willen we hun werk eren!", "commGuidePara014": "Emeritus beheerders:", "commGuideHeadingPublicSpaces": "Openbare ruimtes in Habitica", @@ -52,7 +52,7 @@ "commGuideHeadingPublicGuilds": "Openbare gildes", "commGuidePara029": "Openbare gildes lijken op de herberg, behalve dat ze een eigen thema hebben en niet zo gericht zijn op algemene gesprekken. Openbare chat in de gildes moet dit thema in het oog houden. Leden van het Wordsmith-gilde vinden het waarschijnlijk niet leuk als het gesprek opeens over tuinieren gaat in plaats van over schrijven, en een Drakenfokkersgilde is misschien niet geïnteresseerd in het ontcijferen van oeroude runen. Sommige gilden zijn hier minder streng in dan anderen, maar over het algemeen geldt: houd je aan het onderwerp!", "commGuidePara031": "Sommige openbare gildes bespreken gevoelige onderwerpen zoals depressie, religie, politiek, enz. Dit is prima, zolang de gesprekken in het gilde de algemene voorwaarden of richtlijnen voor openbare ruimtes niet overtreden, en zolang ze over het onderwerp blijven gaan.", - "commGuidePara033": "Openbare gildes mogen geen volwassen (18+-)materiaal bevatten. Als ze van plan zijn om regelmatig gevoelig materiaal te bespreken, moeten ze dat aangeven in de titel van het gilde. Dit houdt Habitica voor iedereen veilig en comfortabel. Als het gilde over andere gevoelige onderwerpen gaat, is het goed om respect te tonen naar je mede-Habiticanen door een waarschuwing te plaatsen in je berichten (zoals \"Waarschuwing: verwijzing naar zelfverminking\"). Daarnaast moet het gevoelige materiaal wel te maken hebben met het onderwerp. Zelfverminking aanhalen in een gilde dat zich richt op het bestrijden van depressie is logisch, maar het is minder logisch in een muziekgilde. Als je merkt dat iemand deze richtlijn blijft overtreden, zelfs na regelmatig verzoek hiermee te stoppen, stuur dan een e-mail met screenshots naar leslie@habitica.com.", + "commGuidePara033": "Openbare gildes mogen geen volwassen (18+-)materiaal bevatten. Als ze van plan zijn om regelmatig gevoelig materiaal te bespreken, moeten ze dat aangeven in de titel van het gilde. Dit houdt Habitica voor iedereen veilig en comfortabel. Als het gilde over andere gevoelige onderwerpen gaat, is het goed om respect te tonen naar je mede-Habiticanen door een waarschuwing te plaatsen in je berichten (zoals \"Waarschuwing: verwijzing naar zelfverminking\"). Daarnaast moet het gevoelige materiaal wel te maken hebben met het onderwerp. Zelfverminking aanhalen in een gilde dat zich richt op het bestrijden van depressie kan logisch zijn, maar het past minder in een muziekgilde. Als je merkt dat iemand deze richtlijn blijft overtreden, zelfs na regelmatig verzoek hiermee te stoppen, stuur dan een e-mail met screenshots naar leslie@habitica.com.", "commGuidePara035": "Er mogen geen gildes, openbaar of besloten, gecreëerd worden met het doel om een persoon of groep aan te vallen. Zo'n gilde starten is reden voor een onmiddellijke royering. Vecht tegen je slechte gewoontes, niet tegen je mede-avonturiers!", "commGuidePara037": "Alle uitdagingen die door de herberg of door openbare gildes georganiseerd worden, moeten zich ook aan deze regels houden.", "commGuideHeadingBackCorner": "De Back Corner", @@ -71,9 +71,9 @@ "commGuidePara043": "Habitica gebruikt GitHub om bugs bij te houden en bijdrages te leveren aan de programmacode. Dat is de smidse waar onze onvermoeibare Blacksmiths de functionaliteiten smeden! Alle regels voor openbare ruimtes zijn van toepassing. Wees beleefd tegen de Blacksmiths - ze hebben er een hele kluif aan om de site in de lucht te houden. Hoera voor de Blacksmiths!", "commGuidePara044": "De volgende gebruikers zijn leden van de Habitica-repo:", "commGuideHeadingWiki": "Wiki", - "commGuidePara045": "De Habitica-wiki verzamelt informatie over de website. Er zijn ook een paar fora, vergelijkbaar met de gildes in Habitica. Daarom zijn alle regels voor openbare ruimtes van toepassing.", + "commGuidePara045": "De Habitica-wiki verzamelt informatie over de website. Zij host ook een paar fora, vergelijkbaar met de gildes in Habitica. Daarom zijn alle regels voor openbare ruimtes daar ook van toepassing.", "commGuidePara046": "De Habitica-wiki kan beschouwd worden als een database voor alles wat met Habitica te maken heeft. Er zijn artikelen over de functionaliteiten van de site, spelhandleidingen, tips voor hoe je kunt bijdragen aan Habitica en plekken waar je je gilde of groep kunt aanprijzen of kunt stemmen over bepaalde onderwerpen", - "commGuidePara047": "Omdat de wiki gehost wordt door Wikia zijn, naast de regels die door Habitica en de Habitica-wiki vastgesteld zijn, ook de algemene voorwaarden van Wikia van toepassing.", + "commGuidePara047": "Omdat de wiki gehost wordt door Wikia, zijn naast de regels die door Habitica en de Habitica-wiki vastgesteld zijn, ook de algemene voorwaarden van Wikia van toepassing.", "commGuidePara048": "De wiki is een samenwerking tussen alle redacteurs, dus er zijn enkele aanvullende richtlijnen van toepassing:", "commGuideList04A": "Vraag nieuwe pagina's of grote veranderingen aan op het Wiki Trello-board", "commGuideList04B": "Sta open voor suggesties over jouw redactievoorstellen", @@ -139,7 +139,7 @@ "commGuidePara062": "De e-mail waarin de gevolgen van je acties worden uitgelegd (of, voor kleine gevolgen, de aankondiging door een beheerder of medewerker) is een goede bron van informatie. Werk mee aan de beperkingen die je zijn opgelegd, en probeer te voldoen aan de voorwaarden voor het opheffen van de beperkingen.", "commGuidePara063": "Als je de gevolgen niet begrijpt, of niet begrijpt wat je overtreding is geweest, vraag dan de medewerkers of beheerders om hulp zodat je in de toekomst niet weer de fout in gaat.", "commGuideHeadingContributing": "Een bijdrage leveren aan Habitica", - "commGuidePara064": "Habitica is een open-sourceproject, wat betekent dat iedere Habiticaan bij kan dragen! Degenen die dat doen, worden beloond volgens de hieronder beschreven beloningsniveaus:", + "commGuidePara064": "Habitica is een open-sourceproject, wat betekent dat iedere Habiticaan bij mag dragen! Degenen die dat doen, worden beloond volgens de hieronder beschreven beloningsniveaus:", "commGuideList12A": "Habitica-bijdragersbadge, plus 3 edelstenen", "commGuideList12B": "Bijdragersharnas, plus 3 edelstenen.", "commGuideList12C": "Bijdragershelm, plus 3 edelstenen.", @@ -154,7 +154,7 @@ "commGuideList13C": "Rangen beginnen niet \"opnieuw\" in verschillende velden. Bij het inschatten van de moeilijkheidsgraad kijken we naar al je bijdrages, zodat mensen die een klein beetje kunst leveren, en daarna een kleine bug repareren, en daarna een beetje in de wiki doen niet sneller vooruitgang boeken dan mensen die hard werken aan een enkele taak. Dat houdt de zaak eerlijk!", "commGuideList13D": "Gebruikers met een voorwaardelijke straf kunnen de volgende rang niet bereiken. Beheerders hebben het recht om vooruitgang te bevriezen als gebruikers overtredingen begaan. Als dit gebeurt zal de gebruiker altijd op de hoogte gebracht worden van de beslissing en hoe dat te corrigeren. Het is ook mogelijk dat rangen afgenomen worden door overtredingen of voorwaardelijke straffen.", "commGuideHeadingFinal": "Het laaste stuk", - "commGuidePara067": "Dat waren ze dan, dappere Habiticaan - de gemeenschapsrichtlijnen! Veeg het zweet van je voorhoofd en geef jezelf wat XP als beloning voor het lezen hiervan. Als je vragen of zorgen hebt over deze gemeenschapsrichtlijnen, stuur dan een mail naar Lemoness (leslie@habitica.com) en ze zal je met plezier vertellen hoe alles werkt.", + "commGuidePara067": "Dat waren ze dan, dappere Habiticaan - de gemeenschapsrichtlijnen! Veeg het zweet van je voorhoofd en geef jezelf wat XP als beloning voor het lezen hiervan. Als je vragen of zorgen hebt over deze gemeenschapsrichtlijnen, stuur dan een mail naar Lemoness (leslie@habitica.com) en ze zal met plezier dingen voor je ophelderen.", "commGuidePara068": "Trek de wijde wereld in, dappere avonturier, en versla je dagelijkse taken!", "commGuideHeadingLinks": "Nuttige links", "commGuidePara069": "De volgende talentvolle artiesten hebben een bijdrage geleverd aan deze illustraties:", diff --git a/common/locales/nl/content.json b/common/locales/nl/content.json index a35ceb997f..d04707b33c 100644 --- a/common/locales/nl/content.json +++ b/common/locales/nl/content.json @@ -7,95 +7,101 @@ "armoireNotesEmpty": "Het kabinet krijgt in de eerste week van iedere maand nieuwe uitrustingsstukken. Tot die tijd kun je blijven klikken voor ervaring en voedsel!", "dropEggWolfText": "Wolf", "dropEggWolfMountText": "Wolf", - "dropEggWolfAdjective": "a loyal", + "dropEggWolfAdjective": "loyale", "dropEggTigerCubText": "Tijgerwelp", "dropEggTigerCubMountText": "Tijger", - "dropEggTigerCubAdjective": "a fierce", + "dropEggTigerCubAdjective": "felle", "dropEggPandaCubText": "Pandawelp", "dropEggPandaCubMountText": "Panda", - "dropEggPandaCubAdjective": "a gentle", + "dropEggPandaCubAdjective": "zachtaardige", "dropEggLionCubText": "Leeuwenwelp", "dropEggLionCubMountText": "Leeuw", - "dropEggLionCubAdjective": "a regal", + "dropEggLionCubAdjective": "vorstelijke", "dropEggFoxText": "Vos", - "dropEggFoxMountText": "Fox", - "dropEggFoxAdjective": "a wily", + "dropEggFoxMountText": "Vos", + "dropEggFoxAdjective": "sluwe", "dropEggFlyingPigText": "Vliegend Varken", - "dropEggFlyingPigMountText": "Flying Pig", - "dropEggFlyingPigAdjective": "a whimsical", + "dropEggFlyingPigMountText": "Vliegend Varken", + "dropEggFlyingPigAdjective": "wispelturige", "dropEggDragonText": "Draak", - "dropEggDragonMountText": "Dragon", - "dropEggDragonAdjective": "a mighty", + "dropEggDragonMountText": "Draak", + "dropEggDragonAdjective": "machtige", "dropEggCactusText": "Cactus", "dropEggCactusMountText": "Cactus", - "dropEggCactusAdjective": "a prickly", + "dropEggCactusAdjective": "prikkelbare", "dropEggBearCubText": "Berenwelp", "dropEggBearCubMountText": "Beer", - "dropEggBearCubAdjective": "a cuddly", + "dropEggBearCubAdjective": "knuffelige", "questEggGryphonText": "Griffioen", - "questEggGryphonMountText": "Gryphon", - "questEggGryphonAdjective": "a proud", + "questEggGryphonMountText": "Griffioen", + "questEggGryphonAdjective": "trotse", "questEggHedgehogText": "Egel", - "questEggHedgehogMountText": "Hedgehog", - "questEggHedgehogAdjective": "a spiky", + "questEggHedgehogMountText": "Egel", + "questEggHedgehogAdjective": "puntige", "questEggDeerText": "Hert", - "questEggDeerMountText": "Deer", - "questEggDeerAdjective": "an elegant", + "questEggDeerMountText": "Hert", + "questEggDeerAdjective": "elegant", "questEggEggText": "Ei", "questEggEggMountText": "Eiermand", - "questEggEggAdjective": "a colorful", + "questEggEggAdjective": "kleurrijke", "questEggRatText": "Rat", "questEggRatMountText": "Rat", - "questEggRatAdjective": "a dirty", + "questEggRatAdjective": "vieze", "questEggOctopusText": "Octopus", "questEggOctopusMountText": "Octopus", - "questEggOctopusAdjective": "a slippery", + "questEggOctopusAdjective": "een gladde", "questEggSeahorseText": "Zeepaardje", - "questEggSeahorseMountText": "Seahorse", - "questEggSeahorseAdjective": "a prize", + "questEggSeahorseMountText": "Zeepaard", + "questEggSeahorseAdjective": "eersteklas", "questEggParrotText": "Papegaai", - "questEggParrotMountText": "Parrot", - "questEggParrotAdjective": "a vibrant", + "questEggParrotMountText": "Papegaai", + "questEggParrotAdjective": "veelkleurige", "questEggRoosterText": "Haan", - "questEggRoosterMountText": "Rooster", - "questEggRoosterAdjective": "a strutting", + "questEggRoosterMountText": "Haan", + "questEggRoosterAdjective": "paraderende", "questEggSpiderText": "Spin", - "questEggSpiderMountText": "Spider", - "questEggSpiderAdjective": "a creepy", + "questEggSpiderMountText": "Spin", + "questEggSpiderAdjective": "griezelige", "questEggOwlText": "Uil", - "questEggOwlMountText": "Owl", - "questEggOwlAdjective": "a wise", + "questEggOwlMountText": "Uil", + "questEggOwlAdjective": "wijze", "questEggPenguinText": "Pinguïn", - "questEggPenguinMountText": "Penguin", - "questEggPenguinAdjective": "a perspicacious", + "questEggPenguinMountText": "Pinguïn", + "questEggPenguinAdjective": "spitsvondige", "questEggTRexText": "Tyrannosaurus", - "questEggTRexMountText": "Tyrannosaur", - "questEggTRexAdjective": "a tiny-armed", + "questEggTRexMountText": "Tyrannosaurus", + "questEggTRexAdjective": "kortarmige", "questEggRockText": "Steen", - "questEggRockMountText": "Rock", - "questEggRockAdjective": "a lively", + "questEggRockMountText": "Steen", + "questEggRockAdjective": "levendige", "questEggBunnyText": "Konijn", - "questEggBunnyMountText": "Bunny", - "questEggBunnyAdjective": "a snuggly", + "questEggBunnyMountText": "Konijn", + "questEggBunnyAdjective": "knuffelig", "questEggSlimeText": "Marshmallowslijm", - "questEggSlimeMountText": "Marshmallow Slime", - "questEggSlimeAdjective": "a sweet", + "questEggSlimeMountText": "Marshmallowslijm", + "questEggSlimeAdjective": "zoete", "questEggSheepText": "Schaap", - "questEggSheepMountText": "Sheep", - "questEggSheepAdjective": "a woolly", + "questEggSheepMountText": "Schaap", + "questEggSheepAdjective": "wollig", "questEggCuttlefishText": "Inktvis", - "questEggCuttlefishMountText": "Cuttlefish", - "questEggCuttlefishAdjective": "a cuddly", + "questEggCuttlefishMountText": "Zeekat", + "questEggCuttlefishAdjective": "knuffelige", "questEggWhaleText": "Walvis", - "questEggWhaleMountText": "Whale", - "questEggWhaleAdjective": "a splashy", + "questEggWhaleMountText": "Walvis", + "questEggWhaleAdjective": "spetterende", "questEggCheetahText": "Cheetah", "questEggCheetahMountText": "Cheetah", - "questEggCheetahAdjective": "an honest", + "questEggCheetahAdjective": "eerlijke", "questEggHorseText": "Paard", - "questEggHorseMountText": "Horse", - "questEggHorseAdjective": "a galloping", - "eggNotes": "Find a hatching potion to pour on this egg, and it will hatch into <%= eggAdjective(locale) %> <%= eggText(locale) %>.", + "questEggHorseMountText": "Paard", + "questEggHorseAdjective": "galopperend", + "questEggFrogText": "Kikker", + "questEggFrogMountText": "Kikker", + "questEggFrogAdjective": "prinselijke", + "questEggSnakeText": "Slang", + "questEggSnakeMountText": "Slang", + "questEggSnakeAdjective": "een slissende", + "eggNotes": "Vind een uitbroedtoverdrank om over dit ei te gieten en er zal een <%= eggAdjective(locale) %> <%= eggText(locale) %> uitkomen.", "hatchingPotionBase": "Normale", "hatchingPotionWhite": "Witte", "hatchingPotionDesert": "Woestijnkleurige", @@ -106,9 +112,9 @@ "hatchingPotionCottonCandyPink": "Suikerspinroze", "hatchingPotionCottonCandyBlue": "Suikerspinblauwe", "hatchingPotionGolden": "Gouden", - "hatchingPotionSpooky": "Spooky", + "hatchingPotionSpooky": "spookachtige", "hatchingPotionNotes": "Giet dit over een ei, en er zal een <%= potText(locale) %> dierlijke metgezel uitkomen.", - "premiumPotionAddlNotes": "Not usable on quest pet eggs.", + "premiumPotionAddlNotes": "Niet te gebruiken op eieren van queeste-huisdieren.", "foodMeat": "Vlees", "foodMilk": "Melk", "foodPotatoe": "Aardappel", diff --git a/common/locales/nl/death.json b/common/locales/nl/death.json index 2279cf2d87..4922f91224 100644 --- a/common/locales/nl/death.json +++ b/common/locales/nl/death.json @@ -1,16 +1,16 @@ { "lostAllHealth": "Je gezondheidspunten zijn op!", "dontDespair": "Wanhoop niet!", - "deathPenaltyDetails": "Je hebt een niveau, je goud en een stuk van je uitrusting verloren, maar je kan het allemaal terug krijgen door hard te werken! Succes! Je zult het fantastisch doen.", + "deathPenaltyDetails": "Je hebt een niveau, je goud en een stuk van je uitrusting verloren, maar je kunt het allemaal terug krijgen door hard te werken! Succes! Je zult het fantastisch doen.", "refillHealthTryAgain": "Vul je gezondheid aan en probeer het opnieuw", "dyingOftenTips": "Gebeurt dit vaker? Hier zijn een paar tips!", - "losingHealthWarning": "Voorzichtig - je verliest gezondheid!", - "losingHealthWarning2": "Laat je gezondheid niet to nul vallen! Als je dat doet, verlies je een niveau, je goud, en een stuk uitrusting.", + "losingHealthWarning": "Voorzichtig - je gezondheid gaat achteruit!", + "losingHealthWarning2": "Laat je gezondheid niet to nul zakken! Als dat gebeurt verlies je een niveau, je goud, en een stuk uitrusting.", "toRegainHealth": "Om gezondheid te herstellen:", - "lowHealthTips1": "Level op om volledig te genezen!", + "lowHealthTips1": "Ga een niveau omhoog om volledig te genezen!", "lowHealthTips2": "Koop een gezonheidsdrankje van de beloning kolom om 15 gezondheidspunten te herstellen.", "losingHealthQuickly": "Snel gezondheid aan het verliezen?", - "lowHealthTips3": "Onvolledige dagelijkse taken doen je 's nachts pijn, dus wees voorzichtig en voeg in de eerste instantie niet te veel toe!", - "lowHealthTips4": "Als een dagelijkse taak op een dag niet hoeft worden gedaan, kan je die dag uitschakelen door op het potlood te klikken.", + "lowHealthTips3": "Onvolledige dagelijkse taken doen je 's nachts pijn, dus wees voorzichtig en voeg in eerste instantie niet te veel toe!", + "lowHealthTips4": "Als een dagelijkse taak op een bepaalde dag niet gedaan hoeft te worden kun je die dag uitschakelen door op het potlood te klikken.", "goodLuck": "Veel plezier!" } \ No newline at end of file diff --git a/common/locales/nl/faq.json b/common/locales/nl/faq.json index 5793d157c1..8cb683fd76 100644 --- a/common/locales/nl/faq.json +++ b/common/locales/nl/faq.json @@ -1,41 +1,44 @@ { "frequentlyAskedQuestions": "Veelgestelde vragen", - "faqQuestion0": "Ik ben verward. Waar kan ik een overzicht vinden? ", - "iosFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn experience and gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as Pets, Skills, and Quests! You can customize your character under Menu > Customize Avatar.\n\n Some basic ways to interact: click the (+) in the upper-right-hand corner to add a new task. Tap on an existing task to edit it, and swipe left on a task to delete it. You can sort tasks using Tags in the upper-left-hand corner, and expand and contract checklists by clicking on the checklist bubble.", - "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, the wiki has an excellent step-by-step overview of the game [right here](http://habitica.wikia.com/wiki/Habitica_Wiki).", + "faqQuestion0": "Ik ben in de war. Waar kan ik een overzicht vinden? ", + "iosFaqAnswer0": "Allereerst zet je de taken op die je in je dagelijkse leven wil doen. Vervolgens, als je de taken volbrengt en afvinkt, verdien je ervaring en goud. Goud wordt gebruikt om uitrusting en sommige voorwerpen te kopen, evenals voor persoonlijke beloningen. Ervaring zorgt ervoor dat je karakter omhoog gaat in niveau en dat je spelinhoud als huisdieren, vaardigheden en queesten vrijspeelt! Je kunt je karakter aanpassen onder Menu > Avatar aanpassen.\n\nWat simpele dingen om te beginnen: klik op de (+) in de rechterbovenhoek om een nieuwe taak toe te voegen. Tik op een bestaande taak om hem aan te passen en veeg hem naar links om de taak te verwijderen. Je kunt taken sorteren door labels te gebruiken in de linkerbovenhoek en checklists in- en uitklappen door op het checklist-bolletje te klikken.", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", "faqQuestion1": "Hoe stel ik mijn taken in?", - "iosFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.", - "webFaqAnswer1": "Good Habits (the ones with a ) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a ) are tasks that you should avoid, like biting nails. Habits with a and a have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n

\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n

\n To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.", - "faqQuestion2": "Wat voor soort taken kan zijn er?", - "iosFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n

\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", - "webFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", + "iosFaqAnswer1": "Goede gewoonten (degenen met een +) zijn taken die je meerdere keren per dag kunt doen, zoals groenten eten. Slechte gewoonten (degenen met een -) zijn taken die je zou moeten nalaten, zoals op je nagels bijten. Gewoonten met een + en een - hebben een goede en een slechte keuze, bijvoorbeeld de trap nemen tegenover de lift nemen. Goede gewoonten belonen je met ervaring en goud. Slechte gewoonten doen je levenspunten verliezen.\n\nDagelijkse taken zijn taken die je iedere dag moet doen, zoals je tanden poetsen of je e-mail bekijken. Je kunt de dagen aanpassen waarop je een bepaalde dagelijkse taak moet doen door erop te drukken en hem te bewerken. Als je een dagelijkse taak overslaat op een dag dat hij gedaan moet worden, zal je avatar gedurende de nacht schade oplopen. Wees voorzichtig en voeg niet teveel dagelijkse taken tegelijk toe!\n\nTo-do's zijn de dingen die je nog een keer moet doen. Een to-do afvinken levert geld en ervaringspunten op. Je kunt nooit levenspunten kwijtraken door een to-do. Je kunt een geplande voltooiingsdatum toevoegen aan een to-do door er op te tikken om hem aan te passen.", + "webFaqAnswer1": "Goede gewoonten (degenen met een ) zijn taken die je meerdere keren per dag kunt doen, zoals groenten eten. Slechte gewoonten (degenen met een ) zijn taken die je zou moeten nalaten, zoals op je nagels bijten. Gewoonten met een en een hebben een goede en een slechte keuze, bijvoorbeeld de trap nemen tegenover de lift nemen. Goede gewoonten belonen je met ervaring en goud. Slechte gewoonten doen je levenspunten verliezen.\n

\nDagelijkse taken zijn taken die je iedere dag moet doen, zoals je tanden poetsen of je e-mail bekijken. Je kunt de dagen aanpassen waarop je een bepaalde dagelijkse taak moet doen door erop te drukken en hem te bewerken. Als je een dagelijkse taak overslaat op een dag dat hij gedaan moet worden, zal je avatar gedurende de nacht schade oplopen. Wees voorzichtig en voeg niet teveel dagelijkse taken tegelijk toe!\n

\nTo-do's zijn de dingen die je nog een keer moet doen. Een to-do afvinken levert geld en ervaringspunten op. Je kunt nooit levenspunten kwijtraken door een to-do. Je kunt een geplande voltooiingsdatum toevoegen aan een to-do toevoegen door er op te drukken om hem aan te passen.", + "faqQuestion2": "Welke soort taken kunnen er zijn?", + "iosFaqAnswer2": "De wiki heeft vier lijsten van voorbeeldtaken om als inspiratie te gebruiken:\n

\n* [Voorbeeld gewoontes](http://habitica.wikia.com/wiki/Sample_Habits)\n* [Voorbeeld dagelijkse taken](http://habitica.wikia.com/wiki/Sample_Dailies)\n* [Voorbeeld to-do's](http://habitica.wikia.com/wiki/Sample_To-Dos)\n* [Voorbeeld persoonlijke beloningen](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", + "webFaqAnswer2": "De wiki heeft vier lijsten van voorbeeldtaken om als inspiratie te gebruiken:\n* [Voorbeeld gewoontes](http://habitica.wikia.com/wiki/Sample_Habits)\n* [Voorbeeld dagelijkse taken](http://habitica.wikia.com/wiki/Sample_Dailies)\n* [Voorbeeld to-do's](http://habitica.wikia.com/wiki/Sample_To-Dos)\n* [Voorbeeld persoonlijke beloningen](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", "faqQuestion3": "Waarom veranderen mijn taken van kleur?", - "iosFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it's a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", - "webFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it’s a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", - "faqQuestion4": "Why did my avatar lose health, and how do I regain it?", - "iosFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you tap a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your Party and one of your Party mates did not complete all their Dailies, the Boss will attack you.\n\n The main way to heal is to gain a level, which restores all your health. You can also buy a Health Potion with gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a Party with a Healer, they can heal you as well.", - "webFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you click a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your party and one of your party mates did not complete all their Dailies, the Boss will attack you.\n

\n The main way to heal is to gain a level, which restores all your Health. You can also buy a Health Potion with Gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a party (under Social > Party) with a Healer, they can heal you as well.", + "iosFaqAnswer3": "Je taken veranderen van kleur afhankelijk van hoe goed je ze op dat moment voltooit! Iedere taak begint als neutraal geel. Voltooi dagelijkse taken of positieve gewoonten en ze veranderen naar blauw. Mis een dagelijkse taak of geef toe aan een slechte gewoonte en de taak verandert naar rood. Hoe roder de taak, hoe meer je beloond zult worden, maar als het een dagelijkse taak of slechte gewoonte is, des te meer schade doet hij je! Dit helpt je te motiveren om problematische taken te voltooien.", + "webFaqAnswer3": "Je taken veranderen van kleur afhankelijk van hoe goed je ze op dat moment voltooit! Iedere taak begint als neutraal geel. Voltooi dagelijkse taken of positieve gewoonten en ze veranderen naar blauw. Mis een dagelijkse taak of geef toe aan een slechte gewoonte en de taak verandert naar rood. Hoe roder de taak, hoe meer je beloond zult worden, maar als het een dagelijkse taak of slechte gewoonte is, des te meer schade doet hij je! Dit helpt je te motiveren om problematische taken te voltooien.", + "faqQuestion4": "Waarom heeft mijn avatar levenspunten verloren en hoe krijg ik ze terug?", + "iosFaqAnswer4": "Er zijn verschillende dingen die je kunnen schaden. Ten eerste: als je dagelijkse taken 's nachts incompleet zijn, doen ze schade. Ten tweede: als je een slechte gewoonte aanklikt, zal het je schade doen. Tenslotte: als je in een gevecht met een eindbaas bent met je groep en een van je groepsleden niet al zijn/haar taken gedaan heeft, dan zal de baas je aanvallen.\n\nDe belangrijkste manier om te genezen is om een level omhoog te gaan, dat herstelt al je levenspunten. Je kunt ook met goud een gezondheidsdrankje kopen in de beloningskolom. Daarbij, op level 10 en daarboven, kun je ervoor kiezen om een genezer te worden en dan kun je genezingsvaardigheden leren. Als je in een groep zit met een genezer, kan deze je ook genezen.", + "webFaqAnswer4": "Er zijn verschillende dingen die je kunnen schaden. Ten eerste: als je dagelijkse taken 's nachts incompleet zijn, doen ze schade. Ten tweede: als je een slechte gewoonte aanklikt, zal het je schade doen. Tenslotte: als je in een gevecht met een eindbaas bent met je groep en een van je groepsleden niet al zijn/haar taken gedaan heeft, dan zal de baas je aanvallen.\n

\nDe belangrijkste manier om te genezen is om een level omhoog te gaan, dat herstelt al je levenspunten. Je kunt ook met goud een gezondheidsdrankje kopen in de beloningskolom. Daarbij, op level 10 en daarboven, kun je ervoor kiezen om een genezer te worden en dan kun je genezingsvaardigheden leren. Als je in een groep zit (onder Sociaal > Groep) met een genezer, kan deze je ook genezen.", "faqQuestion5": "Hoe speel ik Habitica samen met mijn vrienden?", - "iosFaqAnswer5": "The best way is to invite them to a Party with you, via the [website](https://habitica.com/#/options/groups/party)! We'll add the ability to create a Party from this app soon, but in the meantime you can use the [website](https://habitica.com/#/options/groups/party). Parties can go on quests, battle monsters, and cast skills to support each other. On the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", - "webFaqAnswer5": "The best way is to invite them to a party with you, under Social > Party! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n

\n For more detailed info, check out the wiki pages on [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).", + "iosFaqAnswer5": "De beste manier is om ze uit te nodigen voor een groep met jou! Groepen kunnen queestes doen, monsters bevechten en vaardigheden uitspreken om elkaar te ondersteunen. Ga naar Menu > Groep en klik op \"Maak Nieuwe Groep\" als je er nog geen hebt. Druk dan op de ledenlijst en druk op Uitnodigen in de rechterbovenhoek om je vrienden uit te nodigen door hun Gebruikers-ID in te voeren (een serie nummers en letters die ze kunnen vinden onder Instellingen > Account in de app en Instellingen > API op de website). Op de website kun je ook vrienden uitnodigen via e-mail, hetgeen we in een latere update aan de app zullen toevoegen.\n\nOp de website kunnen jij en je vrienden je ook aansluiten bij Gildes, dat zijn publieke chatrooms. Gildes worden aan de app toegevoegd in een toekomstige update.", + "webFaqAnswer5": "De beste manier is om ze uit te nodigen voor een groep met jou, via Sociaal > Groep! Groepen kunnen queestes doen, monsters bestrijden en vaardigheden uitspreken om elkaar te ondersteunen. Je kunt je ook samen aansluiten bij gildes (Sociaal > Gildes). Gildes zijn chatrooms die zicht richten op een gedeelde interesse of het nastreven van een zelfde doel en kunnen publiek of privé zijn. Je kunt je aansluiten bij zoveel gildes als je wilt, maar slechts bij één groep.\n

\nVoor meer gedetailleerde informatie, kun je kijken op de wiki-pagina's over [groepen](http://habitrpg.wikia.com/wiki/Party) en [gildes](http://habitrpg.wikia.com/wiki/Guilds).", "faqQuestion6": "Hoe kan ik een huisdier of een rijdier krijgen?", - "iosFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch Egg.\" Then choose a hatching potion to determine its color! Go to Menu > Pets to equip your new Pet to your avatar by clicking on it. \n\n You can also grow your Pets into Mounts by feeding them under Menu > Pets. Tap on a Pet, and then select \"Feed Pet\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Menu > Mounts and tap on it to equip it to your avatar.\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", - "webFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Inventory > Market.\n

\n To hatch a Pet, you'll need an egg and a hatching potion. Click on the egg to determine the species you want to hatch, and then click on the hatching potion to determine its color! Go to Inventory > Pets to equip it to your avatar by clicking on it.\n

\n You can also grow your Pets into Mounts by feeding them under Inventory > Pets. Click on a Pet, and then click on a piece of food from the right-hand menu to feed it! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Inventory > Mounts and click on it to equip it to your avatar.\n

\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", + "iosFaqAnswer6": "Op level 3 speel je het vondstensysteem vrij. Iedere keer dat je een taak voltooid, zul je een willekeurige kans hebben een ei, een uitbroedtoverdrank of eten te ontvangen. Ze zullen opgeslagen worden in Menu > Boedel.\n\nOm een huisdier te laten uitkomen, heb je een ei en een uitbroedtoverdrank nodig. Druk op het ei om de soort te bepalen en selecteer 'Laat ei uitkomen'. Kies daarna een uitbroedtoverdrank om de kleur te bepalen! Ga naar Menu > Huisdieren en om je avatar uit te rusten met je nieuwe huisdier door erop te drukken.\n\nJe kunt je huisdieren ook laten opgroeien tot rijdieren door ze te voeren onder Menu > Huisdieren. Druk op het huisdier en selecteer dan 'Huisdier Voeren'. Je zult een huisdier vele malen moeten voeren voordat het verandert in een rijdier, maar als je zijn favoriete voedsel kan bepalen, zal hij sneller groeien. Probeer het met vallen en opstaan of [zie het het verklapt](http://habitica.wikia.com/wiki/Food#Food_Preferences). Als je eenmaal een rijdier hebt, kun je het toevoegen aan je avatar onder Menu > Rijdieren.\n\nJe kunt ook eieren van queeste-huisdieren krijgen door bepaalde queesten te voltooien. (Lees hieronder meer over queesten.) ", + "webFaqAnswer6": "Op level 3 speel je het vondstensysteem vrij. Iedere keer dat je een taak voltooid, zul je een willekeurige kans hebben een ei, een uitbroedtoverdrank of eten te ontvangen. Ze zullen opgeslagen worden in Boedel > Markt.\n

\nOm een huisdier te laten uitkomen, heb je een ei en een uitbroedtoverdrank nodig. Klik op het ei om de soort te bepalen en klik daarna op een uitbroedtoverdrank om de kleur te bepalen! Ga naar Boedel > Huisdieren en om je avatar uit te rusten met je nieuwe huisdier door erop te klikken.\n

\nJe kunt je huisdieren ook laten opgroeien tot rijdieren door ze te voeren onder Boedel > Huisdieren. Klik op een huisdier en klik daarna op een stuk eten uit het menu aan de rechterkant om hem te voeren! Je zult een huisdier vele malen moeten voeren voordat het verandert in een rijdier, maar als je zijn favoriete voedsel kan bepalen, zal hij sneller groeien. Probeer het met vallen en opstaan of [zie het het verklapt](http://habitica.wikia.com/wiki/Food#Food_Preferences). Als je eenmaal een rijdier hebt, kun je het toevoegen aan je avatar onder Boedel > Rijdieren.\n

\nJe kunt ook eieren van queeste-huisdieren krijgen door bepaalde queesten te voltooien. (Lees hieronder meer over queesten.) ", "faqQuestion7": "Hoe word ik een Krijger, Magiër, Dief of Heler?", - "iosFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their Party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most gold and find the most item drops, and they can help their Party do the same. Finally, Healers can heal themselves and their Party members.\n\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click “Decide Later” and choose later under Menu > Choose Class.", - "webFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most Gold and find the most item drops, and they can help their party do the same. Finally, Healers can heal themselves and their party members.\n

\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click \"Opt Out\" and re-enable it later under User > Stats.", - "faqQuestion8": "What is the blue stat bar that appears in the Header after level 10?", - "iosFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Use Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", - "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in a special section in the Rewards Column. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You’ll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", - "faqQuestion9": "How do I fight monsters and go on Quests?", - "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party on the [website](https://habitica.com/#/options/groups/party), you'll be rewarded with the Basi-List Scroll! (We will add this feature to the app in a future update.)\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for gold and gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "webFaqAnswer9": "First, you need to join or start a party (under Social > Party). Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n

\n Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are three ways to get a scroll:\n

\n * When you invite people to your party, you’ll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Page (Inventory > Quests) for Gold and Gems.\n

\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your party at the same time that you damage the Boss.\n

\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "faqQuestion10": "What are gems, and how do I get them?", - "iosFaqAnswer10": "Gems are purchased with real money by tapping on the gem icon in the header. When people buy gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying gems directly, there are three other ways players can gain gems:\n\n * Win a Challenge on the [website](https://habitica.com) that has been set up by another player under Social > Challenges. (We will be adding Challenges to the app in a future update!)\n * Subscribe on the [website](https://habitica.com/#/options/settings/subscription) and unlock the ability to buy a certain number of gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with gems do not offer any statistical advantages, so players can still make use of the app without them!", - "webFaqAnswer10": "Gems are [purchased with real money](https://habitica.com/#/options/settings/subscription), although [subscribers](https://habitica.com/#/options/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n

\n In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n

\n * Win a Challenge that has been set up by another player under Social > Challenges.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", - "faqQuestion11": "How do I report a bug or request a feature?", - "iosFaqAnswer11": "You can report a bug, request a feature, or send feedback under Menu > Report a Bug and Menu > Send Feedback! We'll do everything we can to assist you.", - "webFaqAnswer11": "Bug reports are collected on GitHub. Go to [Help > Report a Bug](https://github.com/HabitRPG/habitrpg/issues/2760) and follow the instructions. Don't worry, we'll get you fixed up soon!\n

\n Feature requests are collected on Trello. Go to [Help > Request a Feature](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) and follow the instructions. Ta-da!", - "iosFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the Tavern chat under Menu > Tavern! We're happy to help.", - "webFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the [Newbies Guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help." + "iosFaqAnswer7": "Je kan pas kiezen om een krijger, magiër, dief of heler te worden als je niveau 10 bereikt hebt. (Alle spelers beginnen standaard als krijger.) Elke klasse heeft andere uitrusting, verschillende vaardigheden die ze kunnen uitspreken na niveau 11 en meer verschillende voordelen. Krijgers kunnen veel schade aanrichten bij eindbazen, schade weerstaan van taken en hun groep sterker maken. Magiërs kunnen ook makkelijk schade aanrichten bij eindbazen, evenals sneller niveaus behalen en extra mana geven aan de groep. Dieven verdienen het meeste geld en vinden sneller voorwerpen en kunnen hun groep hetzelfde laten doen. Tenslotte kunnen helers hunzelf, en mensen uit hun groep, helen.\n\nAls je nog niet direct een klasse wilt kiezen -- als je bijvoorbeeld nog al je uitrusting wilt kopen voor je huidige klasse -- kun je op \"later beslissen\" klikken en later kiezen bij menu > kies klasse.", + "webFaqAnswer7": "Je kan pas kiezen om een krijger, magiër, dief of heler te worden als je niveau 10 bereikt hebt. (Alle spelers beginnen standaard als krijger.) Elke klasse heeft andere uitrusting, verschillende vaardigheden die ze kunnen uitspreken na niveau 11 en meer verschillende voordelen. Krijgers kunnen veel schade aanrichten bij eindbazen, schade weerstaan van taken en hun groep sterker maken. Magiërs kunnen ook makkelijk schade aanrichten bij eindbazen, evenals sneller niveaus behalen en extra mana geven aan de groep. Dieven verdienen het meeste geld en vinden sneller voorwerpen en kunnen hun groep hetzelfde laten doen. Tenslotte kunnen helers hunzelf, en mensen uit hun groep, helen.\n

\nAls je nog niet direct een klasse wilt kiezen -- als je bijvoorbeeld nog al je uitrusting wilt kopen voor je huidige klasse -- kun je op \"later beslissen\" klikken en later kiezen bij Gebruiker > Statistieken.", + "faqQuestion8": "Wat is de blauwe statusbalk die in de bovenbalk verschijnt na level 10?", + "iosFaqAnswer8": "The blauwe balk die verscheen toen je level 10 bereikte en een klasse koos, is je mana-balk. Als je een hoger level wordt, speel je speciale vaardigheden vrij die mana kostne om te gebruiken. Elke klasse heeft andere vaardigheden, die vanaf level 11 verschijnen onder Menu > Gebruik vaardigheden. Anders dan bij je gezondheidsbalk, reset je mana-balk niet als je een nieuw level bereikt. In plaats daarvan krijg je meer mana wanneer je goede gewoonten, dagelijkse taken en to-do's doet en verlies je het wanneer je hebt toegegeven aan slechte gewoonten. Je krijgt 'snachts ook wat mana terug -- hoe meer dagelijkse taken je voltooide, hoe meer je verdient.", + "webFaqAnswer8": "The blauwe balk die verscheen toen je level 10 bereikte en een klasse koos, is je mana-balk. Als je een hoger level wordt, speel je speciale vaardigheden vrij die mana kosten om te gebruiken. Elke klasse heeft andere vaardigheden, die vanaf level 11 verschijnen onder Menu > Gebruik vaardigheden. Anders dan bij je gezondheidsbalk, reset je mana-balk niet als je een nieuw level bereikt. In plaats daarvan krijg je meer mana wanneer je goede gewoonten, dagelijkse taken en to-do's doet en verlies je het wanneer je hebt toegegeven aan slechte gewoonten. Je krijgt 'snachts ook wat mana terug -- hoe meer dagelijkse taken je voltooide, hoe meer je verdient.", + "faqQuestion9": "Hoe vecht ik tegen monsters en ga ik op queesten?", + "iosFaqAnswer9": "Eerst moet je je aansluiten bij een groep of er een beginnen (zie hierboven). Hoewel je monsters alleen kunt bestrijden, raden we spelen in een groep aan, omdat het queesten veel makkelijker maakt. Plus, een vriend hebben om je aan te moedigen als je je taken voltooid is erg motiverend!\n\nVervolgens heb je een queeste-perkamentrol nodig, die zijn opgeslagen onder Menu > Voorwerpen. Er zijn drie manieren om een perkamentrol te krijgen:\n\n-Op niveau 15 krijg je een queeste-reeks, oftewel drie gelieerde queesten. Meer queeste-reeksen speel je vrij op levels 30, 40 en 60.\n-Als je vrienden uitnodigd voor je groep, ontvang je de Basi-List perkamentrol@\n-Je kunt queesten kopen van de queesten pagina op de [website](https://habitica.com/#/options/inventory/quests) voor goud en edelstenen. (We zullen deze functie in een toekomstige update aan de app toevoegen.)\n\nOm de baas te bestrijdenof voorwerpen te verzamelen voor een Verzamel-queeste, moet je gewoon je taken voltooien, 'snachts zal de schade die ze doen berekend worden. (Herladen door het scherm naar beneden te trekken kan nodig zijn om de levensbalk van de baas omlaag te zien gaan.) Als je een baas aan het bevechten bent en je hebt dagelijkse taken gemist, dan schaadt de baas je groep op hetzelfde moment als jullie de baas schaden.\n\nNa level 11 krijgen Magiërs en Krijgers vaardigheden die ervoor zorgen dat ze extra schade kunnen doen aan de baas, dus dit zijn goede klassen om te kiezen op level 10 als je rake klappen uit wilt delen.", + "webFaqAnswer9": "Eerst moet je je aansluiten bij een groep of er een beginnen (onder Sociaal > Groep). Hoewel je monsters alleen kunt bestrijden, raden we spelen in een groep aan, omdat het queesten veel makkelijker maakt. Plus, een vriend hebben om je aan te moedigen als je je taken voltooid is erg motiverend!\n

\nVervolgens heb je een queeste-perkamentrol nodig, die zijn opgeslagen onder Menu > Voorwerpen. Er zijn drie manieren om een perkamentrol te krijgen:\n

\n-Op niveau 15 krijg je een queeste-reeks, oftewel drie gelieerde queesten. Meer queeste-reeksen speel je vrij op levels 30, 40 en 60.\n-Als je vrienden uitnodigd voor je groep, ontvang je de Basi-List perkamentrol@\n-Je kunt queesten kopen van de queesten pagina (Boedel > Queesten) voor goud en edelstenen.\n

\nOm de baas te bestrijdenof voorwerpen te verzamelen voor een Verzamel-queeste, moet je gewoon je taken voltooien, 'snachts zal de schade die ze doen berekend worden. (Verversen van de pagina kan nodig zijn om de levensbalk van de baas omlaag te zien gaan.) Als je een baas aan het bevechten bent en je hebt dagelijkse taken gemist, dan schaadt de baas je groep op hetzelfde moment als jullie de baas schaden.\n

\nNa level 11 krijgen Magiërs en Krijgers vaardigheden die ervoor zorgen dat ze extra schade kunnen doen aan de baas, dus dit zijn goede klassen om te kiezen op level 10 als je rake klappen uit wilt delen.", + "faqQuestion10": "Wat zijn edelstenen en hoe krijg ik ze?", + "iosFaqAnswer10": "Edelstenen kunnen gekocht worden met echt geld, door op het edelstenen-icoon te klikken in de menubalk. Wanneer mensen edelstenen kopen, helpen ze ons om de site draaiende te houden. We zijn erg dankbaar voor hun steun!\n\nBuiten ze direct te kopen, zijn er drie andere manieren waarop spelers edelstenen kunnen krijgen:\n\n* Win op de [website](https://habitica.com) een uitdaging die door een andere speler is opgezet onder Sociaal > Uitdagingen. (We zullen uitdagingen aan de app toevoegen in een toekomstige update)\n* Abonneer je op de [website](https://habitica.com/#/options/settings/subscription) en ontgrendel de mogelijkheid om een aantal edelstenen per maand met goud te kopen.\n* Draag met je vaardigheden bij aan het Habitica-project. Bekijk deze wiki voor meer details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\nHoudt in gedachten dat voorwerpen die gekocht zijn met edelstenen geen statistische voordelen bieden, zodat spelers ook zonder ze van de app gebruik kunnen maken!", + "webFaqAnswer10": "Edelstenen kunnen [gekocht worden met echt geld](https://habitica.com/#/options/settings/subscription), hoewel [abonnees](https://habitica.com/#/options/settings/subscription) ze kunnen kopen met goud. Wanneer mensen zich abonneren of edelstenen kopen, helpen ze ons de site draaiende te houden. We zijn erg dankbaar voor hun steun!\n

\nBuiten ze direct te kopen of een abonnee te worden, zijn er twee andere manieren waarop spelers edelstenen kunnen krijgen:\n

\n* Win een uitdaging die door een andere speler is opgezet onder Sociaal > Uitdagingen.\n* Draag met je vaardigheden bij aan het Habitica-project. Bekijk deze wiki voor meer details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n

\nHoudt in gedachten dat voorwerpen die gekocht zijn met edelstenen geen statistische voordelen bieden, zodat spelers ook zonder ze van de app gebruik kunnen maken!", + "faqQuestion11": "Hoe rapporteer ik een bug of vraag ik een feature aan?", + "iosFaqAnswer11": "Je kunt een bug rapporteren, een functionaliteit aan vragen of feedback versturen onder Menu > Fout melden en Menu > Stuur feedback! We zullen alles doen wat we kunnen om je te helpen.", + "webFaqAnswer11": "Rapporten van bugs worden verzameld op GitHub. Ga naar [Help > Fout melden](https://github.com/HabitRPG/habitrpg/issues/2760) en volg de instructies. Maak je geen zorgen, we zullen het snel maken!\n

\nVerzoeken voor functies zijn verzameld op Trello. ga naar [Help > Functie aanvragen](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) en volg de instructies. Ta-da!", + "faqQuestion12": "Hoe strijd ik tegen een Wereldbaas?", + "iosFaqAnswer12": "Wereldbazen zijn speciale monsters die in de herberg verschijnen. Alle actieve gebruikers vechten automatisch tegen de baas en hun taken en vaardigheden beschadigen de baas zoals gebruikelijk.\n\nJe kunt ook tegelijkertijd een normale queeste aan het doen zijn. Je taken en vaardigheden tellen dan zowel tegen de wereldbaas als tegen de baas/ verzamelqueeste van je groep.\n\nEen wereldbaas zal jou of je account nooit beschadigen. In plaats daarvan heeft het een furie-balk die vult wanneer gebruikers dagelijkse taken overslaan. Als de furie-balk gevuld is, valt de baas een van de NPC's op de site aan en hun afbeelding verandert dan.\n\nJe kunt meer lezen over [wereldbazen uit het verleden](http://habitica.wikia.com/wiki/World_Bosses) op de wiki.", + "webFaqAnswer12": "Wereldbazen zijn speciale monsters die in de herberg verschijnen. Alle actieve gebruikers vechten automatisch tegen de baas en hun taken en vaardigheden beschadigen de baas zoals gebruikelijk.\n

\nJe kunt ook tegelijkertijd een normale queeste aan het doen zijn. Je taken en vaardigheden tellen dan zowel tegen de wereldbaas als tegen de baas/ verzamelqueeste van je groep.\n

\nEen wereldbaas zal jou of je account nooit beschadigen. In plaats daarvan heeft het een furie-balk die vult wanneer gebruikers dagelijkse taken overslaan. Als de furie-balk gevuld is, valt de baas een van de NPC's op de site aan en hun afbeelding verandert dan.\n

\nJe kunt meer lezen over [wereldbazen uit het verleden](http://habitica.wikia.com/wiki/World_Bosses) op de wiki.", + "iosFaqStillNeedHelp": "Als je een vraag hebt die niet in deze lijst staat, vraag het in de herberg-chat onder Menu > Herberg! We zijn blij dat we kunnen helpen.", + "webFaqStillNeedHelp": "Als je een vraag hebt die niet op deze lijst staat, vraag het in de [Newbies gilde](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We zijn blij je te kunnen helpen." } \ No newline at end of file diff --git a/common/locales/nl/front.json b/common/locales/nl/front.json index c4584cd0f0..597d3f8dcd 100644 --- a/common/locales/nl/front.json +++ b/common/locales/nl/front.json @@ -32,7 +32,7 @@ "companyPrivacy": "Privacy", "companyTerms": "Voorwaarden", "companyVideos": "Video's", - "contribUse": "Tools die worden gebruikt om aan Habitica bij te dragen", + "contribUse": "Habitica-bijdragers gebruiken", "dragonsilverQuote": "Je wil niet weten hoeveel tijd- en taakmanagementprogramma's ik al heb geprobeerd over de jaren... [Habitica] is de enige die ik heb gebruikt die daadwerkelijk helpt om dingen gedaan te krijgen en niet alleen alles op een lijstje te zetten.", "dreimQuote": "Toen ik [Habitica] afgelopen zomer ontdekte, was ik net gezakt voor de helft van mijn examens. Dankzij de dagelijkse taken kon ik mezelf discipline aanleren, zo ben ik een maand geleden daadwerkelijk voor al mijn examens geslaagd met heel goede cijfers.", "elmiQuote": "Elke ochtend heb ik zin om ' s ochtends op te staan zodat ik wat goud kan verdienen!", @@ -74,7 +74,7 @@ "infhQuote": "[Habitica] heeft me echt geholpen om structuur aan te brengen in mijn leven op de universiteit.", "invalidEmail": "Om het wachtwoord te resetten is een geldig e-mailadres vereist.", "irishfeet123Quote": "Ik had verschrikkelijke gewoontes wat betreft opruimen na het eten en liet overal kopjes slingeren. [Habitica] heeft me daarvan genezen!", - "joinOthers": "Sluit je aan bij 250.000 anderen en maak het leuk om je doelen te halen!", + "joinOthers": "Sluit je aan bij <%= userCount %> anderen en maak het leuk om je doelen te bereiken!", "kazuiQuote": "Voor [Habitica] zat ik vast met mijn thesis en was ik ontevreden met mijn persoonlijke discipline op het gebied van het huishouden en dingen zoals vocabulaire leren en Go-theorie leren. Het blijkt dat deze taken opbreken in kleinere, behapbare checklijsten precies is wat nodig was om me gemotiveerd te houden.", "landingadminlink": "administratieve pakketten", "landingend": "Nog niet overtuigd?", @@ -83,7 +83,7 @@ "landingend4": "die perfect zijn voor families, leraren, groepen en bedrijven.", "landingfeatureslink": "onze functionaliteiten", "landingp1": "Het probleem met de meeste productiviteits-apps op de markt is dat ze geen reden geven om ze te blijven gebruiken. Habitica lost dit op door het creëren van gewoontes leuk te maken! Door je te belonen voor je successen en te bestraffen voor je uitglijders zorgt Habitica voor een motivatie van buitenaf om je je dagelijkse activiteiten te doen voltooien.", - "landingp2": "Elke keer dat je een positieve gewoonte bekrachtigt, een dagelijkse taak volbrengt, of een oude to-do voltooit, beloont Habitica je onmiddellijk met ervaringspunten en goud. Naarmate je meer ervaring krijgt, kun je stijgen in niveau, waardoor je statistieken verhoogd worden en er meer functies vrijkomen, zoals klasses en huisdieren. Je kunt goud uitgeven aan spelvoorwerpen die veranderen hoeveel ervaringspunten je verdient of aan gepersonaliseerde beloningen die je hebt gemaakt om je te motiveren. Wanneer zelfs de kleinste successen je onmiddellijk een beloning opleveren, is het minder waarschijnlijk dat je dingen uitstelt.", + "landingp2": "Elke keer dat je een positieve gewoonte bekrachtigt, een dagelijkse taak volbrengt, of een oude to-do voltooit, beloont Habitica je onmiddellijk met ervaringspunten en goud. Naarmate je meer ervaring krijgt, kun je stijgen in niveau, waardoor je statistieken verhoogd worden en er meer functies ontgrendelen, zoals klassen en huisdieren. Je kunt goud uitgeven aan spelvoorwerpen die veranderen hoeveel ervaringspunten je verdient of aan gepersonaliseerde beloningen die je hebt gemaakt om je te motiveren. Wanneer zelfs de kleinste successen je onmiddellijk een beloning opleveren, is het minder waarschijnlijk dat je dingen uitstelt.", "landingp2header": "Onmiddellijke voldoening", "landingp3": "Wanneer je je laat verleiden tot een slechte gewoonte of je een dagelijkse taak laat liggen, verlies je gezondheidspunten. Als je gezondheid te laag wordt ga je dood en verlies je een deel van je voortgang. Door meteen consequenties aan je gedrag te verbinden kan Habitica je helpen te stoppen met uitstelgedrag en slechte gewoontes voordat ze serieuze problemen veroorzaken in de echte wereld.", "landingp3header": "Consequenties", @@ -101,7 +101,7 @@ "marketing1Lead3": "Maak kans om prijzen te vinden. Voor sommigen is het motiverend om op willekeurige momenten beloningen te krijgen (dit heet \"stochastische beloning\") . Habitica gebruikt alle typen motiveringstactieken: positief, negatief, voorspelbaar en willekeurig.", "marketing1Lead3Title": "Maak kans om prijzen te vinden", "marketing2Header": "Doe wedstrijden met vrienden, sluit je aan bij interessegroepen", - "marketing2Lead1": "Hoewel je Habitica solo kunt spelen, wordt het pas echt leuk als je gaat samenwerken en concurreren, en als je elkaar bij de les houdt. Het meest effectieve deel van een zelfverbeteringsprogramma is sociale verantwoordelijkheid, en welke omgeving is nou beter voor competitie en vertantwoording afleggen dan een computerspel?", + "marketing2Lead1": "Hoewel je Habitica solo kunt spelen, wordt het pas echt leuk als je gaat samenwerken en concurreren, en als je elkaar bij de les houdt. Het meest effectieve deel van een zelfverbeteringsprogramma is sociale verantwoordelijkheid, en welke omgeving is nou beter voor competitie en verantwoording afleggen dan een computerspel?", "marketing2Lead2": "Vecht tegen Eindbazen. Wat is een Rollenspel zonder battles? Vecht tegen eindbazen met je groep. Eindbazen houden je \"superverantwoordelijk\" - als jij een dag geen zin hebt om te sporten, raakt de baas iedereen.", "marketing2Lead2Title": "Eindbazen", "marketing2Lead3": "Uitdagingen laten je concurreren met vrienden en onbekenden. Wie het het beste heeft gedaan aan het einde van een uitdaging wint speciale prijzen.", @@ -160,7 +160,7 @@ "tasks": "Taken", "teamSample1": "Vergaderagenda opstellen voor dinsdag", "teamSample2": "Brainstormen over growth hacking", - "teamSample3": "KPIs discussie van de week", + "teamSample3": "Bespreek KPI's van deze week", "teams": "Teams", "terms": "algemene voorwaarden", "testimonialHeading": "Wat mensen zeggen...", @@ -179,5 +179,14 @@ "businessInquiries": "Zakelijke aanvragen", "merchandiseInquiries": "Vragen over merchandise", "marketingInquiries": "Vragen over marketing/social media", - "tweet": "Tweet" + "tweet": "Tweet", + "apps": "Apps", + "notifyAndroidApp": "Wil je bericht van ons ontvangen als de Android app klaar is? Schrijf je in op deze mailinglijst!", + "checkOutIOSApp": "Probeer onze nieuwe iOS App uit!", + "imagine1": "Stel je voor dat het verbeteren van je leven net zo leuk is als het spelen van een spel.", + "landingCopy1": "Vorder door je taken in het echte leven af te vinken.", + "landingCopy2": "Speel met vrienden tegen eindbazen om verantwoordelijk te zijn in je levensdoelen.", + "landingCopy3": "Sluit je aan bij <%= userCount %> anderen die spelenderwijs hun levens verbeteren!", + "alreadyHaveAccount": "Ik heb al een account!", + "getStartedNow": "Ga aan de slag!" } \ No newline at end of file diff --git a/common/locales/nl/gear.json b/common/locales/nl/gear.json index ea4b0f0423..f1d1d66166 100644 --- a/common/locales/nl/gear.json +++ b/common/locales/nl/gear.json @@ -87,7 +87,7 @@ "weaponSpecialSpringHealerText": "Mooi bot", "weaponSpecialSpringHealerNotes": "APPORT! Verhoogt Intelligentie met <%= int %>. Beperkte oplage lente-uitrusting 2014.", "weaponSpecialSummerRogueText": "Piratensabel", - "weaponSpecialSummerRogueNotes": "Avast! You'll make those Dailies walk the plank! Increases Strength by <%= str %>. Limited Edition 2014 Summer Gear.", + "weaponSpecialSummerRogueNotes": "Eindelijk! Je zult die dagelijkse taken kielhalen! Verhoogt kracht met <%= str %>. Beperkte oplage zomeruitrusting 2014", "weaponSpecialSummerWarriorText": "Zeevaardersslagzwaard", "weaponSpecialSummerWarriorNotes": "Er is geen taak op je To-do-lijst die het aandurft met dit knoestige mes te worstelen. Verhoogt Kracht met <%= str %>. Beperkte oplage zomeruitrusting 2014.", "weaponSpecialSummerMageText": "Zeewiervanger", @@ -115,7 +115,7 @@ "weaponSpecialSpring2015WarriorText": "Botte knots", "weaponSpecialSpring2015WarriorNotes": "Het is een echt botte knots voor echte woeste hondjes en het is zeker geen kauwspeeltje dat de Seizoenstovenares je hebt gegeven, want wie is hier een braaf hondje? Wie is hier braaaaaf hondje?? Dat ben jij!!! Jij bent een braaf hondje!!! Verhoogt Kracht met <%= str %>. Beperkte oplage lente-uitrusting 2015.", "weaponSpecialSpring2015MageText": "Toverstaf van de goochelaar", - "weaponSpecialSpring2015MageNotes": "Conjure up a carrot for yourself with this fancy wand. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2015 Spring Gear.", + "weaponSpecialSpring2015MageNotes": "Tover een wortel voor jezelf met deze luxe staf. Verhoogt intelligentie met <%= int %> en perceptie met <%= per %>. Beperkte oplage lenteuitrusting 2015", "weaponSpecialSpring2015HealerText": "Kattenrammelaar", "weaponSpecialSpring2015HealerNotes": "Als je er mee zwaait maakt het een fascinerend klikkend geluid waarmee IEDEREEN zich urenlang vermaakt. Verhoogt Intelligentie met <%= int %>. Beperkte oplage lente-uitrusting 2015.", "weaponSpecialSummer2015RogueText": "Schietgraag koraal", @@ -126,14 +126,14 @@ "weaponSpecialSummer2015MageNotes": "Verborgen kracht fonkelt in de edelstenen van deze staf. Verhoogt Intelligentie met <%= int %> en Percentie met <%= per %>. Beperkte oplage zomeruitrusting 2015.", "weaponSpecialSummer2015HealerText": "Staf van de golven", "weaponSpecialSummer2015HealerNotes": "Heelt zee-ziekte en zeeziekte! Verhoogt Intelligentie met <%= int %>. Beperkte oplage zomeruitrusting 2015.", - "weaponSpecialFall2015RogueText": "Bat-tle Ax", - "weaponSpecialFall2015RogueNotes": "Fearsome To-Dos cower before the flapping of this ax. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "weaponSpecialFall2015WarriorText": "Wooden Plank", - "weaponSpecialFall2015WarriorNotes": "Great for elevating things in cornfields and/or smacking tasks. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "weaponSpecialFall2015MageText": "Enchanted Thread", - "weaponSpecialFall2015MageNotes": "A powerful Stitch Witch can control this enchanted thread without even touching it! Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "weaponSpecialFall2015HealerText": "Swamp-Slime Potion", - "weaponSpecialFall2015HealerNotes": "Brewed to perfection! Now you just have to convince yourself to drink it. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", + "weaponSpecialFall2015RogueText": "Vleermuisbijl", + "weaponSpecialFall2015RogueNotes": "Angstige dagelijkse taken vrezen het meppen van deze bijl. Verhoogt kracht met <%= str %>. Beperkte oplage herfstuitrusting 2015.", + "weaponSpecialFall2015WarriorText": "Houten plank", + "weaponSpecialFall2015WarriorNotes": "Goed om dingen te verhogen in maïsvelden en/of taken te slaan. Verhoogt kracht met <%= str %>. Beperkte oplage herfstuitrusting 2015.", + "weaponSpecialFall2015MageText": "Betoverde draad", + "weaponSpecialFall2015MageNotes": "Een machtige Haak Heks kan deze betoverde draad controleren zonder hem zelfs maar aan te raken! Verhoogt intelligentie met <%= int %> en perceptie met <%= per %>. Beperkte oplage herfstuitrusting 2015.", + "weaponSpecialFall2015HealerText": "Moerasslijmtoverdrank", + "weaponSpecialFall2015HealerNotes": "Gebrouwen tot perfectie! Nu hoef je alleen nog jezelf over te halen het te drinken. Verhoogt intelligentie met <%= int %>. Beperkte oplage herfstuitrusting 2015.", "weaponMystery201411Text": "Feestmaal-hooivork", "weaponMystery201411Notes": "Steek je vijanden neer of neem een schep van je favoriete eten - met deze hooivork kan het allemaal! Verleent geen voordelen. Abonnee-uitrusting november 2014.", "weaponMystery201502Text": "Glimmende gevleugelde staff der liefde alsook wijsheid", @@ -149,13 +149,19 @@ "weaponArmoireRancherLassoText": "Cowboylasso", "weaponArmoireRancherLassoNotes": "Lasso's: het ideale gereedschap voor vangen en hangen. Verhoogt Kracht met <%= str %>, Perceptie met <%= per %> en Intelligentie met <%= int %>. Betoverd kabinet: cowboyset (voorwerp 3 van 3).", "weaponArmoireMythmakerSwordText": "Zwaard van de mythemaker", - "weaponArmoireMythmakerSwordNotes": "Het lijkt misschien nederig, maar dit zwaard heeft menig held tot mythe gemaakt. Verhoogt Perceptie en Kracht met elk <%= attrs %>. Betoverd Kabinet: Gouden Togaset (Onderdeel 3 van 3)", - "weaponArmoireIronCrookText": "Ijzeren staf", - "weaponArmoireIronCrookNotes": "Deze ijzeren staf is van heftig gehamerd ijzer en kan goed schapen hoeden. Verhoogt Perceptie en Kracht met elk <%= attrs %>. Betoverd Kabinet: Gehoornde Yzerset (Onderdeel 3 van 3)", - "weaponArmoireGoldWingStaffText": "Goud gevleugelde staf", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", + "weaponArmoireIronCrookText": "IJzeren staf", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", + "weaponArmoireGoldWingStaffText": "Goudgevleugelde staf", "weaponArmoireGoldWingStaffNotes": "De vleugels op deze staf zijn altijd aan het trillen en draaien. Verhoogt elk attribuut met <%= attrs%>. Betoverd kabinet: losstaand voorwerp.", - "weaponArmoireBatWandText": "Bat Wand", - "weaponArmoireBatWandNotes": "This wand can turn any task into a bat! Wave it about and watch them fly away. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireBatWandText": "Vleermuisstaf", + "weaponArmoireBatWandNotes": "Deze staf kan iedere taak in een vleermuis veranderen! Zwaai hem in het rond en zie ze wegvliegen. verhoogt intelligentie met <%= int %> en perceptie met <%= per %>. Betoverd kabinet: Onafhankelijk voorwerp.", + "weaponArmoireShepherdsCrookText": "Herdersstaf", + "weaponArmoireShepherdsCrookNotes": "Handig voor het hoeden van Griffioenen. Verhoogt Lichaam met <%= con %>. Betoverd Kabinet: Herdersset (voorwerp 1 van 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "wapenrusting", "armorBase0Text": "Eenvoudige kleding", "armorBase0Notes": "Normale kleding. Verleent geen voordelen.", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "Dwaze feestmantel", "armorSpecialBirthday2015Notes": "Gefeliciteerd met je verjaardag, Habitica! Draag deze dwaze feestmantel om deze prachtige dag te vieren. Verleent geen voordelen.", "armorSpecialGaymerxText": "Harnas van de Regenboogkrijger", - "armorSpecialGaymerxNotes": "Om het pride-seizoen en GaymerX te herdenken heeft dit harnas een stralend en kleurrijk regenboogpatroon! GaymerX is een spelconferentie in het teken van LHBTQ en gamen, en iedereen is welkom. Het vindt plaats in het InterContinental in hartje San Francisco op 11-13 juli! Verleent geen voordelen.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "Kittig pakje", "armorSpecialSpringRogueNotes": "Onberispelijk verzorgd. Verhoogt Perceptie met <%= per %>. Beperkte oplage lente-uitrusting 2014.", "armorSpecialSpringWarriorText": "Klavertjes-stalen harnas", @@ -269,14 +275,14 @@ "armorSpecialSummer2015MageNotes": "Verborgen krachten huizen in de pof van deze mouwen. Verhoogt Intelligentie met <%= int %>. Beperkte oplage zomeruitrusting 2015.", "armorSpecialSummer2015HealerText": "Zeemanswapenrusting", "armorSpecialSummer2015HealerNotes": "Deze wapenrusting laat iedereen zien dat je een eerlijke handelaar en zeeman bent die er niet aan moet denken zich te gedragen als een schobbejak. Verhoogt Lichaam met <%= con %>. Beperkte oplage zomeruitrusting 2015.", - "armorSpecialFall2015RogueText": "Bat-tle Armor", - "armorSpecialFall2015RogueNotes": "Fly into bat-tle! Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "armorSpecialFall2015WarriorText": "Scarecrow Armor", - "armorSpecialFall2015WarriorNotes": "Despite being stuffed with straw, this armor is extremely hefty! Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", - "armorSpecialFall2015MageText": "Stitched Robes", - "armorSpecialFall2015MageNotes": "Every stitch in this armor shimmers with enchantment. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", - "armorSpecialFall2015HealerText": "Potioner Robes", - "armorSpecialFall2015HealerNotes": "What? Of course that was a potion of constitution. No, you are definitely not turning into a frog! Don't be ribbiticulous. Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", + "armorSpecialFall2015RogueText": "Vleermuisharnas", + "armorSpecialFall2015RogueNotes": "Vlieg de strijd in! Verhoogt perceptie met <%= per %>. Beperkte oplage herfstuitrusting 2015.", + "armorSpecialFall2015WarriorText": "Vogelverschrikkersharnas", + "armorSpecialFall2015WarriorNotes": "Ondanks dat het vol het stro zit, is deze wapenrusting enorm zwaar! Verhoogt lichaam met <%= con %>. Beperkte oplage herfstuitrusting 2015.", + "armorSpecialFall2015MageText": "Gestikt gewaad", + "armorSpecialFall2015MageNotes": "Iedere steek in deze wapenrusting glimt van betovering. Verhoogt intelligentie met <%= int %>. Beperkte oplage herfstuitrusting 2015.", + "armorSpecialFall2015HealerText": "Gewaden van de toverdrankbrouwer", + "armorSpecialFall2015HealerNotes": "Wat? Natuurlijk was dat een lichaamsverhogend drankje. Nee, je verandert zeker niet in een kikker! Loop niet zo te kwaken. Verhoogt lichaam met <%= con %>. Beperkte oplage herfstuitrusting 2015.", "armorMystery201402Text": "Boodschappersgewaden", "armorMystery201402Notes": "Het gewaad is glinsterend en sterk en heeft vele zakken om brieven te dragen. Verleent geen voordelen. Abonnee-uitrusting februari 2014.", "armorMystery201403Text": "Woudlopersharnas", @@ -303,10 +309,12 @@ "armorMystery201504Notes": "Je wordt zo productief als een bezige bij met deze prachtige mantel! Verleent geen voordelen. Abonnee-uitrusting april 2015.", "armorMystery201506Text": "Snorkelpak", "armorMystery201506Notes": "Snorkel door het koraalrif in dit felgekleurde zwempak! Verleent geen voordelen. Abonnee-uitrusting juni 2015.", - "armorMystery201508Text": "Cheetah Kostuum", - "armorMystery201508Notes": "Run fast as a flash in the fluffy Cheetah Costume! Confers no benefit. August 2015 Subscriber Item.", - "armorMystery201509Text": "Werewolf Costume", - "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201508Text": "Cheetahkostuum", + "armorMystery201508Notes": "Ren zo snel als de bliksem in dit pluizige cheetahkostuum! Verleent geen voordelen. Abonnee-uitrusting augustus 2015.", + "armorMystery201509Text": "Weerwolvenkostuum", + "armorMystery201509Notes": "Dit IS een kostuum, toch? Verleent geen voordelen. Abonnee-uitrusting september 2015.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Steampunkpak", "armorMystery301404Notes": "Net en zwierig, niet? Verleent geen voordelen. Abonnee-uitrusting februari 3015.", "armorArmoireLunarArmorText": "Kalmerend maanharnas", @@ -319,8 +327,14 @@ "armorArmoireGoldenTogaNotes": "Deze glinsterende toga wordt alleen gedragen door echte helden. Verhoogt Kracht en Lichaam elk met <%= attrs %>. Betoverd kabinet: Gouden togaset (Onderdeel 1 van 3).", "armorArmoireHornedIronArmorText": "Gehoornd ijzeren harnas", "armorArmoireHornedIronArmorNotes": "Dit gehoornde harnas is van heftig gehamerd ijzer waardoor het bijna onmogelijk is om het kapot te krijgen. Verhoogt Lichaam met <%= con %> en Perceptie met <%= per %> . Betoverd Kabinet: Gehoornde Yzerset (Onderdeel 2 van 3)", - "armorArmoirePlagueDoctorOvercoatText": "Plague Doctor Overcoat", - "armorArmoirePlagueDoctorOvercoatNotes": "An authentic overcoat worn by the doctors who battle the Plague of Procrastination! Increases Intelligence by <%= int %>, Strength by <%= str %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 3 of 3).", + "armorArmoirePlagueDoctorOvercoatText": "Pestmeestersjas", + "armorArmoirePlagueDoctorOvercoatNotes": "Een authentieke overjas die nog gedragen werd door dokters tijdens de procastinatiepest. Verhoogt Intelligentie met <%= int %>, Kracht met <%= str %> en Lichaam met <%= con %>. Betoverd kabinet: pestmeesterset (voorwerp 3 van 3).", + "armorArmoireShepherdRobesText": "Herdersgewaad", + "armorArmoireShepherdRobesNotes": "De stof is koel en ademend, perfect voor het hoeden van griffioenen op een hete dag in de woestijn. Verhoogt Kracht en Perceptie elk met <%= attrs %> . Betoverd Kabinet: Herderset (Onderdeel 2 van 3).", + "armorArmoireRoyalRobesText": "Koninklijke Mantel", + "armorArmoireRoyalRobesNotes": "Wonderbaarlijke heerser, heers de hele dag! Verhoogt Lichaam, Intelligentie en Perceptie elk met <%= attrs %> . Betoverd Kabinet: Koninklijke set (Onderdeel 3 van 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "hoofdbescherming", "headBase0Text": "Geen helm", "headBase0Notes": "Geen hoofdbescherming.", @@ -432,16 +446,16 @@ "headSpecialSummer2015MageNotes": "Er fonkelt verborgen kracht in de draden van deze sjaal. Verhoogt Perceptie met <%= per %>. Beperkte oplage zomeruitrusting 2015.", "headSpecialSummer2015HealerText": "Zeemanspet", "headSpecialSummer2015HealerNotes": "Met je zeemanspet stevig op je hoofd geplant kun je zelfs de meest stormachtige zeeën trotseren. Verhoogt Intelligentie met <%= int %>. Beperkte oplage zomeruitrusting 2015.", - "headSpecialFall2015RogueText": "Bat-tle Wings", - "headSpecialFall2015RogueNotes": "Echolocate your enemies with this powerful helm! Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "headSpecialFall2015WarriorText": "Scarecrow Hat", - "headSpecialFall2015WarriorNotes": "Everyone would want this hat--if they only had a brain. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "headSpecialFall2015MageText": "Stitched Hat", - "headSpecialFall2015MageNotes": "Every stitch in this hat augments its power. Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "headSpecialFall2015HealerText": "Hat of Frog", - "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", + "headSpecialFall2015RogueText": "Vleermuisvleugels", + "headSpecialFall2015RogueNotes": "Vind je vijanden met echolocatie door deze krachtige helm! verhoogt perceptie met <%= per %>. Beperkte oplage herfstuitrusting 2015.", + "headSpecialFall2015WarriorText": "Vogelverschikkershoed", + "headSpecialFall2015WarriorNotes": "Iedereen zou deze hoed willen--als ze nou maar een brein hadden. Verhoogt kracht met <%= str %>. Beperkte oplage herfstuitrusting 2015.", + "headSpecialFall2015MageText": "Gestikte hoed", + "headSpecialFall2015MageNotes": "Iedere steek in deze hoed versterkt zijn krachten. Verhoogt perceptie met <%= per %>. Beperkte oplage herfstuitrusting 2015.", + "headSpecialFall2015HealerText": "Kikkerhoed", + "headSpecialFall2015HealerNotes": "Dit is een extreem serieuze hoed die alleen de meest ontwikkelde toverdrankbrouwers waardig is. Verhoogt intelligentie met <%= int %>. Beperkte oplage herfstuitrusting 2015.", "headSpecialGaymerxText": "Helm van de Regenboogkrijger", - "headSpecialGaymerxNotes": "Om het pride-seizoen en GaymerX te herdenken is deze speciale helm versierd met een stralend, kleurrijk regenboogpatroon! GaymerX is een spelconferentie waar in het teken van LHBTQ en gamen, en iedereen is welkom. Het vindt plaats in het InterContinental in hartje San Francisco op 11-13 juli! Verleent geen voordelen.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "Gevleugelde helm", "headMystery201402Notes": "Deze gevleugelde diadeem doordrenkt de drager met de snelheid van de wind! Verleent geen voordelen. Abonnee-uitrusting februari 2014.", "headMystery201405Text": "Geestvlam", @@ -460,10 +474,12 @@ "headMystery201501Notes": "Sterrenbeelden flonkeren en wervelen in deze helm, en helpen de drager zijn gedachten te concentreren. Verleent geen voordelen. Abonnee-uitrusting januari 2015.", "headMystery201505Text": "Lans van de Groene Ridder", "headMystery201505Notes": "De groene pluim op deze stalen helm wappert fier. Verleent geen voordelen. Abonnee-uitrusting mei 2015", - "headMystery201508Text": "Cheetah Hoed", - "headMystery201508Notes": "This cozy cheetah hat is very fuzzy! Confers no benefit. August 2015 Subscriber Item.", - "headMystery201509Text": "Werewolf Mask", - "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201508Text": "Cheetahhhoed", + "headMystery201508Notes": "Deze knusse cheetahhoed is erg pluizig! Verleent geen voordelen. Abonnee-uitrusting augustus 2015.", + "headMystery201509Text": "Weerwolvenmasker", + "headMystery201509Notes": "Dit IS een masker toch? Verleent geen voordelen. Abonnee-uitrusting september 2015.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 Subscriber Item.", "headMystery301404Text": "Chique hoge hoed", "headMystery301404Notes": "Een chique hoge hoed voor lieden van deftigen huize! Abonnee-uitrusting januari 3015. Verleent geen voordelen.", "headMystery301405Text": "Standaard hoge hoed", @@ -481,21 +497,27 @@ "headArmoireBlueHairbowText": "Blauwe strik", "headArmoireBlueHairbowNotes": "Word scherpzinnig, onverzettelijk en slim terwijl je deze prachtige blauwe strik draagt! Verhoogt Perceptie met <%= per %>, Lichaam met <%= con %> en Intelligentie met <%= int %>. Betoverd kabinet: losstaand voorwerp.", "headArmoireRoyalCrownText": "Koninklijke kroon", - "headArmoireRoyalCrownNotes": "Hoezee voor de monarch, machtig en sterk! Verhoogt Kracht met <%= str %>. Betoverd kabinet: onafhankelijk voorwerp.", + "headArmoireRoyalCrownNotes": "Hoezee voor de vorst, machtig en sterk! Verhoogt Kracht met <%= str %>. Betoverd Kabinet: Koninklijke set (Onderdeel 1 van 3).", "headArmoireGoldenLaurelsText": "Gouden laurier", "headArmoireGoldenLaurelsNotes": "Deze gouden laurieren belonen hen die slechte gewoonten hebben overwonnen. Verhoogt Perceptie en Lichaam met elk <%= attrs %>. Betoverd kabinet: Gouden Togaset (Onderdeel 2 van 3).", "headArmoireHornedIronHelmText": "Gehoornde ijzeren helm", "headArmoireHornedIronHelmNotes": "Deze gehoornde helm is van heftig gehamerd ijzer waardoor het bijna onmogelijk is om het kapot te krijgen. Verhoogt Lichaam met <%= con %> en Kracht met <%= str %> . Betoverd Kabinet: Gehoornde Yzerset (Onderdeel 1 van 3)", - "headArmoireYellowHairbowText": "Yellow Hairbow", - "headArmoireYellowHairbowNotes": "Become perceptive, strong, and smart while wearing this beautiful Yellow Hairbow! Increases Perception, Strength, and Intelligence by <%= attrs %> each. Enchanted Armoire: Independent Item.", - "headArmoireRedFloppyHatText": "Red Floppy Hat", - "headArmoireRedFloppyHatNotes": "Vele spreuken zijn genaaid in deze eenvoudige hoed, daardoor kreeg het deze stralende rode kleur. Verhoogt Lichaam, Intelligentie en Perceptie met <%= attrs%>. Betoverd kabinet: losstaand voorwerp.", - "headArmoirePlagueDoctorHatText": "Plague Doctor Hat", - "headArmoirePlagueDoctorHatNotes": "An authentic hat worn by the doctors who battle the Plague of Procrastination! Increases Strength by <%= str %>, Intelligence by <%= int %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 1 of 3).", - "headArmoireBlackCatText": "Black Cat Hat", - "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", - "headArmoireOrangeCatText": "Orange Cat Hat", - "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireYellowHairbowText": "Gele strik", + "headArmoireYellowHairbowNotes": "Wordt opmerkzaam, sterk en slim terwijl je deze beeldschone gele strik draagt! Verhoogt perceptie, kracht en intelligentie elk met <%= attrs %>. Betoverd Kabinet: Onafhankelijk Voorwerp.", + "headArmoireRedFloppyHatText": "Slappe rode hoed", + "headArmoireRedFloppyHatNotes": "Vele spreuken zijn genaaid in deze eenvoudige hoed, daardoor kreeg het deze stralende rode kleur. Verhoogt Lichaam, Intelligentie en Perceptie elk met <%= attrs%>. Betoverd kabinet: Onafhankelijk voorwerp.", + "headArmoirePlagueDoctorHatText": "Pestmeestershoed", + "headArmoirePlagueDoctorHatNotes": "Een authentieke hoed die nog gedragen werd door dokters tijdens de procastinatiepest! Verhoogt Kracht met <%= str %>, Intelligentie met <%= int %> en Lichaam met <%= con %> Betoverd kabinet: pestmeesterset (voorwerp 1 van 3).", + "headArmoireBlackCatText": "Zwarte kattenhoed", + "headArmoireBlackCatNotes": "Deze zwarte hoed is... aan het spinnen. En zwaait met zijn staart. En ademt? Ja, je hebt gewoon een slapende kat op je hoofd. Verhoogt intelligentie en perceptie elk met <%= attrs %>. Betoverd kabinet: Onafhankelijk voorwerp.", + "headArmoireOrangeCatText": "Oranje kattenhoed", + "headArmoireOrangeCatNotes": "Deze oranje hoed is... aan het spinnen. En zwaait met zijn staart. En ademt? Ja, je hebt gewoon een slapende kat op je hoofd. Verhoogt kracht en lichaam elk met <%= attrs %>. Betoverd kabinet: Onafhankelijk voorwerp.", + "headArmoireBlueFloppyHatText": "Blauwe flaphoed", + "headArmoireBlueFloppyHatNotes": "Vele spreuken zijn genaaid in deze eenvoudige hoed, daardoor kreeg het deze briljante blauwe kleur. Verhoogt Lichaam, Intelligentie en Perceptie elk met <%= attrs%>. Betoverd kabinet: Onafhankelijk voorwerp.", + "headArmoireShepherdHeaddressText": "Herders Hoofdtooi", + "headArmoireShepherdHeaddressNotes": "Soms houden jouw griffioenen ervan om van deze hoofdtooi te snoepen, maar het maakt je daardoor des te intelligenter. Verhoogt Intelligentie met <%= int %>. Betoverd kabinet: Herder set (voorwerp 3 van 3). ", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "artikel voor schildhand", "shieldBase0Text": "Geen uitrusting voor schildhand", "shieldBase0Notes": "Geen schild of tweede wapen.", @@ -567,18 +589,20 @@ "shieldSpecialSummer2015WarriorNotes": "Dit schild, gesmeed uit metaal uit het diepste van de oceaan door de werklieden van Dralen, straalt als het zand en de zee. Verhoogt Lichaam met <%= con %>. Beperkte oplage zomeruitrusting 2015.", "shieldSpecialSummer2015HealerText": "Stevig schild", "shieldSpecialSummer2015HealerNotes": "Gebruik dit schild om scheepsratten aan de kant te beuken. Verhoogt Lichaam met <%= con %>. Beperkte oplage zomeruitrusting 2015.", - "shieldSpecialFall2015RogueText": "Bat-tle Ax", - "shieldSpecialFall2015RogueNotes": "Fearsome To-Dos cower before the flapping of this ax. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "shieldSpecialFall2015WarriorText": "Birdseed Bag", - "shieldSpecialFall2015WarriorNotes": "It's true that you're supposed to be SCARING the crows, but there's nothing wrong with making friends! Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", - "shieldSpecialFall2015HealerText": "Stirring Stick", - "shieldSpecialFall2015HealerNotes": "This stick can stir anything without melting, dissolving, or bursting into flame! It can also be used to fiercely poke enemy tasks. Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", + "shieldSpecialFall2015RogueText": "Vleermuisbijl", + "shieldSpecialFall2015RogueNotes": "Angstige dagelijkse taken vrezen het meppen van deze bijl. Verhoogt kracht met <%= str %>. Beperkte oplage herfstuitrusting 2015.", + "shieldSpecialFall2015WarriorText": "Tas met vogelzaad", + "shieldSpecialFall2015WarriorNotes": "Het is waar dat je de kraaien BANG moet maken, maar er is niets mis met vrienden maken! Verhoogt lichaam met <%= con %>. Beperkte oplage 2015 herfstuitrusting.", + "shieldSpecialFall2015HealerText": "Roerstok", + "shieldSpecialFall2015HealerNotes": "Deze stok kan alles roeren zonder te smelten, op te lossen of vlam te vatten! Het kan ook gebruikt worden om fel te prikken in vijandige taken. Verhoogt lichaam met <%= con %>. Beperkte oplage 2015 herfstuitrusting.", "shieldMystery301405Text": "Klokkenschild", "shieldMystery301405Notes": "Je hebt alle tijd van de wereld met dit enorme klokkenschild! Verleent geen voordelen. Abonnee-uitrusting juni 3015.", "shieldArmoireGladiatorShieldText": "Gladiatorenschild", "shieldArmoireGladiatorShieldNotes": "Om een gladiator te kunnen zijn moet je... eh, wat maakt het uit, mep ze gewoon met je schild. Verhoogt Lichaam met <%= con %> en Kracht met <%= str %>. Betoverd kabinet: gladiatorset (voorwerp 3 van 3).", - "shieldArmoireMidnightShieldText": "Midnight Shield", - "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "shieldArmoireMidnightShieldText": "Schild van Middernacht", + "shieldArmoireMidnightShieldNotes": "Dit schild is klokslag middernacht het meest krachtig! Verhoogt lichaam met <%= con %> en kracht met <%= str %>. Betoverd kabinet: Onafhankelijk voorwerp.", + "shieldArmoireRoyalCaneText": "Koninklijke Wandelstok", + "shieldArmoireRoyalCaneNotes": "Hulde voor de leider, waard om bezongen te worden! Verhoogt lichaam, intelligentie en perceptie elk met <%= attrs %>. Betoverd Kabinet: Koninklijke set (voorwerp 2 van 3).", "back": "Lichaamsaccessoire", "backBase0Text": "Geen rugaccessoire", "backBase0Notes": "Geen rugaccessoire.", @@ -592,6 +616,8 @@ "backMystery201504Notes": "Bzzz bzzz bzzz! Vlieg van taak naar taak. Verleent geen voordelen. Abonnee-uitrusting april 2015.", "backMystery201507Text": "Koele Surfplank", "backMystery201507Notes": "Surf uit de IJverige Havens en berijd de golven in Baai Incompleet! Verleent geen voordelen. Abonnee-uitrusting juli 2015.", + "backMystery201510Text": "Koboldstaart", + "backMystery201510Notes": "Grijpgraag en krachtig! Geeft geen voordeel. Abonnee-uitrusting oktober 2015.", "backSpecialWonderconRedText": "Machtige cape", "backSpecialWonderconRedNotes": "Zwiept met kracht en schoonheid. Verleent geen voordelen. Speciale congresuitrusting.", "backSpecialWonderconBlackText": "Sluiperscape", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "Dit krachtige gewei verkleurt gelijk met de bladeren. Verleent geen voordelen. Abonnee-uitrusting september 2014.", "headAccessoryMystery201502Text": "Gevleugelde gedachten", "headAccessoryMystery201502Notes": "Geef je fantasie de vrije vlucht! Verleent geen voordelen. Abonnee-uitrusting februari 2015.", + "headAccessoryMystery201510Text": "Koboldhoorns", + "headAccessoryMystery201510Notes": "Deze angstaanjagende hoorns zijn een beetje slijmerig. Geeft geen voordeel. Abonnee-uitrusting oktober 2015.", "headAccessoryMystery301405Text": "Veiligheidsbril voor op je hoofd", "headAccessoryMystery301405Notes": "\"Veiligheidsbrillen zijn voor je ogen,\" zeiden ze. \"Niemand wil een veiligheidsbril die je alleen maar op je hoofd kunt dragen,\" zeiden ze. Ha! Jij hebt ze laten zien hoe het echt moet! Verleent geen voordelen. Abonnee-uitrusting augustus 3015.", "eyewear": "Oogaccessoire", @@ -685,6 +713,6 @@ "eyewearMystery301404Notes": "Er is geen chiquer oogaccessoire dan een veiligheidsbril - behalve misschien een monocle. Verleent geen voordelen. Abonnee-uitrusting april 3015.", "eyewearMystery301405Text": "Monocle", "eyewearMystery301405Notes": "Er is geen chiquer oogaccessoire dan een monocle - behalve misschien een veiligheidsbril. Verleent geen voordelen. Abonnee-uitrusting juli 3015.", - "eyewearArmoirePlagueDoctorMaskText": "Plague Doctor Mask", - "eyewearArmoirePlagueDoctorMaskNotes": "An authentic mask worn by the doctors who battle the Plague of Procrastination. Confers no benefit. Enchanted Armoire: Plague Doctor Set (Item 2 of 3)." + "eyewearArmoirePlagueDoctorMaskText": "Pestmeestersmasker", + "eyewearArmoirePlagueDoctorMaskNotes": "Een authentiek masker dat nog gedragen werd door dokters tijdens de procastinatiepest! Verleent geen voordelen. Betoverd kabinet: pestmeesterset (voorwerp 2 van 3)." } \ No newline at end of file diff --git a/common/locales/nl/generic.json b/common/locales/nl/generic.json index 25dca0297e..f3f0a2fb86 100644 --- a/common/locales/nl/generic.json +++ b/common/locales/nl/generic.json @@ -28,7 +28,7 @@ "market": "Markt", "subscriberItem": "Verrassingsartikel", "newSubscriberItem": "Nieuw verrassingsartikel", - "subscriberItemText": "Elke maand ontvangen abonnees een verrassingsartikel. Meestal gebeurt dat ongeveer een week voor het eind van de maand. Bekijk de 'Mystery Item'-pagina op de wiki voor de exacte datum.", + "subscriberItemText": "Elke maand ontvangen abonnees een verrassingsvoorwerp. Dit voorwerp wordt meestal in de laatste week van de maand uitgebracht. Zie de wikipagina 'Mystery Item' voor meer informatie.", "all": "Alle", "none": "Geen", "or": "Of", @@ -64,13 +64,14 @@ "habitBirthday": "Habitica-verjaardagsfeest", "habitBirthdayText": "Heeft meegedaan aan het verjaardagsfeest van Habitica!", "habitBirthdayPluralText": "Heeft <%= number %> keer de verjaardag van Habitica gevierd!", - "habiticaDay": "Habitica Benamingsdag", - "habiticaDaySingularText": "Vierde Habitica's Benamingsdag! Dankjewel dat je een fantastische gebruiker bent.", - "habiticaDayPluralText": "Vierde <%= number %> Benamingsdagen! Dankjewel dat je een fantastische gebruiker bent.", + "habiticaDay": "Naamdag van Habitica", + "habiticaDaySingularText": "Heeft de naamdag van Habitica gevierd! Dankjewel dat je een fantastische gebruiker bent.", + "habiticaDayPluralText": "Heeft <%= number %> naamdagen gevierd! Dankjewel dat je een fantastische gebruiker bent.", "achievementDilatory": "Redder van Dralen", "achievementDilatoryText": "Heeft geholpen de Donkere Draak van Dralen te verslaan tijdens het Zomerse Spetterevenement 2014!", - "costumeContest": "Verkleedwedstrijd 2014", - "costumeContestText": "Heeft meegedaan aan de verkleedwedstrijd voor Halloween 2014. Bekijk enkele van de inzendingen op blog.habitica.com/tagged/cosplay!", + "costumeContest": "Deelnemer verkleedwedstrijd", + "costumeContestText": "Heeft meegedaan aan de verkleedwedstrijd voor Halloween. Bekijk enkele van de inzendingen op de blog van Habitica!", + "costumeContestTextPlural": "Heeft meegedaan aan <%= number %> verkleedwedstrijden voor Halloween. Bekijk enkele van de inzendingen op de blog van Habitica!", "memberSince": "- Lid sinds", "lastLoggedIn": "- Laatst ingelogd op", "notPorted": "Deze functie is nog niet overgedragen van de originele site.", @@ -79,6 +80,7 @@ "errorUpCase": "FOUT:", "newPassSent": "Nieuw wachtwoord verstuurd.", "serverUnreach": "Server momenteel niet bereikbaar.", + "requestError": "Oei, er is iets fout gegaan!Laad de pagina opnieuw in, je laatste handelingen zijn misschien niet goed opgeslagen.", "seeConsole": "Als de fout blijft optreden, geef dat dan door via Help > Fout melden. Als je de console van je browser kunt vinden, geef dan alsjeblieft de foutmeldingen mee door.", "error": "Fout", "menu": "Menu", @@ -110,28 +112,40 @@ "December": "December", "dateFormat": "Datumweergave", "achievementStressbeast": "Redder van Stoïkalm", - "achievementStressbeastText": "Helped defeat the Abominable Stressbeast during the 2014 Winter Wonderland Event!", - "achievementBurnout": "Savior of the Flourishing Fields", - "achievementBurnoutText": "Helped defeat Burnout and restore the Exhaust Spirits during the 2015 Fall Festival Event!", + "achievementStressbeastText": "Heeft geholpen het Verschrikkelijke Stressbeest te verslaan tijdens het Winter Wonderland-evenement van 2014!", + "achievementBurnout": "Verlosser van de Bloeiende Velden", + "achievementBurnoutText": "Heeft geholpen Burnout te verslaan tijdens het Najaarsvolksfeest van 2015!", "checkOutProgress": "Moet je mijn vooruitgang in Habitica eens zien!", "cardReceived": "Kaart ontvangen!", "cardReceivedFrom": "<%= cardType %> van <%= userName %>", "greetingCard": "Kaartje", - "greetingCardExplanation": "Jullie ontvangen allebei de Vrolijke Vriend prestatie!", + "greetingCardExplanation": "Jullie ontvangen allebei de Vrolijke Vriend-prestatie!", "greetingCardNotes": "Stuur een kaart naar een groepslid.", "greeting0": "Hoi!", "greeting1": "Gewoon, om je even gedag te zeggen :)", "greeting2": "`zwaait uitbundig`", - "greeting3": "Hey jij!", + "greeting3": "He jij!", "greetingCardAchievementTitle": "Vrolijke Vriend", "greetingCardAchievementText": "Hey! Hoi! Hallo! Je hebt <%= cards %> kaarten verstuurd of ontvangen.", "thankyouCard": "Bedankkaartje", - "thankyouCardExplanation": "Jullie krijgen allebei de Duizendmaal Dank prestatie!", + "thankyouCardExplanation": "Jullie krijgen allebei de Duizendmaal Dank-prestatie!", "thankyouCardNotes": "Stuur een bedankkaartje naar een groepslid.", "thankyou0": "Heel erg bedankt!", "thankyou1": "Bedankt, bedankt, bedankt!", "thankyou2": "Ik stuur je duizendmaal dank.", "thankyou3": "Ik ben je heel dankbaar - dankjewel!", "thankyouCardAchievementTitle": "Duizendmaal Dank", - "thankyouCardAchievementText": "Bedankt voor het dankbaar zijn! Je hebt <%= cards %> bedankkaartjes verstuurd of ontvangen." + "thankyouCardAchievementText": "Bedankt voor het dankbaar zijn! Je hebt <%= cards %> bedankkaartjes verstuurd of ontvangen.", + "streakAchievement": "Je hebt een serie prestaties verdiend!", + "firstStreakAchievement": "Serie van 21 dagen", + "streakAchievementCount": "<%= streaks %> Series van 21 dagen", + "twentyOneDays": "Je hebt een dagelijkse taak 21 dagen achterelkaar voltooid!", + "dontBreakStreak": "Geweldig gedaan. Doorbreek de serie niet!", + "dontStop": "Nu niet stoppen!", + "levelUpShare": "Ik ben een niveau gevorderd in Habitica door mijn gewoontes uit het echte leven te verbeteren!", + "questUnlockShare": "Ik heb een nieuwe queeste vrijgespeeld in Habitica!", + "hatchPetShare": "Ik heb een nieuw huisdier uitgebroed door mijn taken uit het echte leven te voltooien!", + "raisePetShare": "Ik heb een huisdier opgevoed naar een rijdier door mijn taken uit het echte leven te voltooien!", + "wonChallengeShare": "Ik heb een uitdaging gewonnen in Habitica!", + "achievementShare": "Ik heb een nieuwe prestatie behaald in Habitica!" } \ No newline at end of file diff --git a/common/locales/nl/groups.json b/common/locales/nl/groups.json index 8564c84b4d..0f289a3bd4 100644 --- a/common/locales/nl/groups.json +++ b/common/locales/nl/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "Uitchecken bij de herberg", "innCheckIn": "Rusten in de herberg", "innText": "Je ben aan het uitrusten in de herberg! Zolang je hier verblijft, zullen je dagelijkse taken je geen pijn doen aan het eind van de dag, maar ze zullen wel elke dag verversen. Wees gewaarschuwd: als je meedoet aan een queeste met een eindbaas, zal de eindbaas je nog steeds pijn doen voor de dagelijkse taken die je groepsgenoten missen, tenzij ze ook in de herberg verblijven! Je zult zelf ook geen schade toebrengen aan de eindbaas (of voorwerpen krijgen) totdat je de herberg verlaat.", + "innTextBroken": "Je ben aan het uitrusten in de herberg... Waarschijnlijk.. Zolang je hier verblijft, zullen je dagelijkse taken je geen pijn doen aan het eind van de dag, maar ze zullen wel elke dag verversen... Wees gewaarschuwd: als je meedoet aan een queeste met een eindbaas, zal de eindbaas je nog steeds pijn doen voor de dagelijkse taken die je groepsgenoten missen... tenzij ze ook in de herberg verblijven... Je zult zelf ook geen schade toebrengen aan de eindbaas (of voorwerpen krijgen) totdat je de herberg verlaat... Ik ben zo moe...", "lfgPosts": "Berichten: groep gezocht", "tutorial": "Handleiding", "glossary": "Woordenlijst", @@ -15,7 +16,7 @@ "askQuestionNewbiesGuild": "Vraag stellen (Newbies Guild)", "tavernTalk": "Herbergchat", "tavernAlert1": "Let op: ontwikkelaars zien het niet als je hier een bug meldt. Gebruik daar liever", - "tavernAlert2": "gebruik GitHub", + "tavernAlert2": "GitHub voor", "moderatorIntro1": "Herberg- en gildebeheerders zijn:", "communityGuidelines": "Gemeenschapsrichtlijnen", "communityGuidelinesRead1": "Lees alsjeblieft onze", @@ -25,15 +26,15 @@ "updatedParty": "Groepsinstellingen bijgewerkt.", "noPartyText": "Of je zit niet in een groep, of het duurt een tijdje om je groep in te laden. Je kunt eventueel een nieuwe groep aanmaken en vrienden uitnodigen; als je je bij een bestaande groep aan wil sluiten, laat ze dan onderstaand unieke gebruikers-ID invoeren en kom dan hier terug voor de uitnodiging:", "LFG": "Ga om je nieuwe groep te promoten of om een groep te vinden naar het gilde voor <%= linkStart %>berichten: groep gezocht<%= linkEnd %>.", - "wantExistingParty": "Wil je bij een bestaande groep aansluiten? Ga dan naar de <%= linkStart %>Party Wanted Guild<%= linkEnd %> en post deze Gebruikers ID:", - "joinExistingParty": "Aansluiten bij andermans groep", + "wantExistingParty": "Wil je je bij een bestaande groep aansluiten? Ga dan naar de <%= linkStart %>Party Wanted Guild<%= linkEnd %> en post deze Gebruikers ID:", + "joinExistingParty": "Aansluiten bij de groep van iemand anders", "create": "Creëren", "userId": "Gebruikers-ID", "invite": "Uitnodigen", "leave": "Verlaten", "invitedTo": "Uitgenodigd voor <%= name %>", "invitedToNewParty": "Je bent uitgenodigd om bij een groep aan te sluiten! Wil je deze groep verlaten en lid van <%= partyName %> worden?", - "joinNewParty": "Aansluiten bij nieuw groep", + "joinNewParty": "Aansluiten bij nieuwe groep", "declineInvitation": "Uitnodiging weigeren", "loadingNewParty": "Je nieuwe groep is aan het laden. Even geduld aub…", "newMsg": "Nieuw bericht in \"<%= name %>\"", @@ -52,7 +53,7 @@ "logoUrl": "URL logo", "assignLeader": "Groepsleider aanwijzen", "members": "Leden", - "partyList": "Sorteren van groepsleden", + "partyList": "Volgorde van groepsleden in bovenbalk", "banTip": "Lid verwijderen", "moreMembers": "overige leden", "invited": "Uitgenodigd", @@ -114,7 +115,7 @@ "sendGift": "Geschenk versturen", "inviteFriends": "Vrienden Uitnodigen", "inviteByEmail": "Per email uitnodigen", - "inviteByEmailExplanation": "Habitica karakters gemaakt via deze email, zullen automatisch in je groep uitgenodigd worden.", + "inviteByEmailExplanation": "Als een vriend mee doet met Habitica via deze email, zal hij automatisch in je groep uitgenodigd worden.", "inviteFriendsNow": "Nu vrienden uitnodigen", "inviteFriendsLater": "Later vrienden uitnodigen", "inviteAlertInfo": "Als je vrienden kent die al Habitica gebruiken, nodig ze uit met een Gebruikers ID hier.", @@ -132,18 +133,19 @@ "sendGiftMessagePlaceholder": "Persoonlijk bericht (optioneel)", "sendGiftSubscription": "<%= months %> maand(en): $<%= price %>", "battleWithFriends": "Strijd met je vrienden tegen monsters", - "startPartyWithFriends": "Maak een groep met je vrienden!", + "startPartyWithFriends": "Start een groep met je vrienden!", "startAParty": "Een groep beginnen", "addToParty": "Iemand aan je groep toevoegen", "likePost": "Klik hier als je dit bericht leuk vindt!", - "partyExplanation1": "Speel Habitica met vrienden en blijf verantwoordelijk!", + "partyExplanation1": "Speel Habitica met vrienden om verantwoordelijk te blijven!", "partyExplanation2": "Strijd tegen monsters en maak uitdagingen!", - "partyExplanation3": "Nodig je vrienden uit om een Quest Scroll te krijgen!", + "partyExplanation3": "Nodig je vrienden uit om een queeste-perkamentrol te krijgen!", "wantToStartParty": "Wil je een groep oprichten?", - "exclusiveQuestScroll": "Als je een vriend in je groep uitnodigd, krijg je een exclusieve Quest Scroll om de Basi-list samen te bestrijden!", + "exclusiveQuestScroll": "Als je een vriend in je groep uitnodigt, krijg je een exclusieve queeste-perkamentrol om de Basi-list samen te bestrijden!", "nameYourParty": "Geef je nieuwe groep een naam!", - "partyEmpty": "Je bent de enige lid van je groep. Nodig je vrienden uit!", + "partyEmpty": "Je bent het enige lid van je groep. Nodig je vrienden uit!", "partyChatEmpty": "Je groepschat is leeg! Typ een bericht in het bovenstaande vak om een conversatie te beginnen.", "guildChatEmpty": "De gildechat is leeg! Typ een bericht in het bovenstaande vak om een conversatie te beginnen.", - "possessiveParty": "<%= name %>s groep" + "possessiveParty": "<%= name %>s groep", + "requestAcceptGuidelines": "Als je berichten in de herberg of een groep- of gildechat wilt plaatsen, lees dan eerst onze <%= linkStart %>Gemeenschapsrichtlijnen<%= linkEnd %> en klik dan op de knop onderaan om aan te geven dat je ze accepteert." } \ No newline at end of file diff --git a/common/locales/nl/limited.json b/common/locales/nl/limited.json index 1f4c863c2a..d88b6a5c3b 100644 --- a/common/locales/nl/limited.json +++ b/common/locales/nl/limited.json @@ -18,9 +18,10 @@ "valentine2": "\"Rozen zijn rood\nDie dichtstijl is oud\nIk hoop dat je 't leuk vindt\nHet kostte 10 goud.\"", "valentine3": "\"Rozen zijn rood\nEn ijsdraken blauw\nGeen schat is me liever\nDan mijn tijd met jou!\"", "valentineCardAchievementTitle": "Liefhebbende vrienden", - "valentineCardAchievementText": "Aww, jij en je vriend moeten wel heel erg veel om elkaar geven! Heeft <%= cards %> Valentijnskaarten verzonden of ontvangen.", + "valentineCardAchievementText": "Aww, jij en je vriend moeten wel heel erg veel om elkaar geven! Heeft <%= cards %> valentijnskaarten verzonden of ontvangen.", "polarBear": "IJsbeer", "turkey": "Kalkoen", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "IJsbeerwelp", "jackolantern": "Jack-O-Lantern-pompoen", "seasonalShop": "Seizoenswinkel", @@ -29,7 +30,8 @@ "seasonalShopClosedText": "De Seizoenswinkel is momenteel gesloten!! Ik weet niet waar de Seizoenstovenares nu is, maar ik durf te wedden dat ze er tijdens het volgende Grote Gala weer is!", "seasonalShopText": "Welkom in de Seizoenswinkel! We hebben op dit moment seizoensgoederen uit de lente-editie op voorraad. Alles wat je hier ziet is te koop tijdens het jaarlijkse Lente-evenement, maar we zijn slechts open tot 30 april! Koop nu wat je wilt hebben, want anders moet je een jaar wachten tot deze artikelen weer te krijgen zijn!", "seasonalShopSummerText": "Welkom in de Seizoenswinkel!! We hebben nu seizoensspulletjes uit de zomereditie in het assortiment. Alles hier is ieder jaar te koop tijdens het Zomerspetterevenement, maar we zijn slechts open tot 31 juli. Zorg er dus voor dat je nu inslaat of je moet een jaar wachten om deze voorwerpen te kunnen kopen!", - "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31, so be sure to stock up now, or you'll have to wait a year to buy these items again!", + "seasonalShopFallText": "Welkom in de Seizoenswinkel! We hebben op het moment najaars seizoenseditie spullen in voorraad. Alles is te koop tijdens het Najaars Volksfeest-evenement ieder jaar, maar we zijn maar open tot 31 oktober. Dus zorg dat je nu inslaat of je moet een jaar wachten voordat je deze voorwerpen weer kunt kopen!", + "seasonalShopFallTextBroken": "Oh... Welkom in de Seizoenswinkel... We hebben op het moment najaars spullen in voorraad, ofzo... Alles is te koop tijdens het Najaars Volksfeest-evenement ieder jaar, maar we zijn maar open tot 31 oktober... Zorg maar dat je inslaat anders zou je moeten wachten... wachten... en nog eens wachten... *zucht*", "seasonalShopRebirth": "Als je een Bol der Hergeboorte gebruikt hebt, kun je deze uitrustingsstukken weer kopen in de beloningen kolom. In het begin kun je alleen de uitrustingsstukken van je huidige klasse kopen (dat is standaard Krijger), maar vrees niet, de uitrustingsstukken die bij een andere klasse horen komen weer beschikbaar als je die klasse kiest.", "candycaneSet": "Zuurstok (Magiër)", "skiSet": "Skimoordenaar (Dief)", @@ -56,9 +58,9 @@ "emeraldMermageSet": "Smaragden meermagiër (magiër)", "reefSeahealerSet": "Zeeheler uit het Rif (heler)", "roguishPirateSet": "Doortrapte piraat (dief)", - "monsterOfScienceSet": "Monster of Science (Warrior)", - "witchyWizardSet": "Witchy Wizard (Mage)", - "mummyMedicSet": "Mummy Medic (Healer)", - "vampireSmiterSet": "Vampire Smiter (Rogue)", - "fallEventAvailability": "Available until October 31" + "monsterOfScienceSet": "Monster van de Wetenschap (Krijger)\n=", + "witchyWizardSet": "Hekserige Tovenaar (Magiër)", + "mummyMedicSet": "Mummie Medicus (Heler)", + "vampireSmiterSet": "Vampier Uitbanner (Dief)", + "fallEventAvailability": "Beschikbaar tot 31 oktober" } \ No newline at end of file diff --git a/common/locales/nl/messages.json b/common/locales/nl/messages.json index 1449d15cf8..3c8f475cd2 100644 --- a/common/locales/nl/messages.json +++ b/common/locales/nl/messages.json @@ -5,7 +5,7 @@ "messageTagNotFound": "Label niet gevonden.", "messagePetNotFound": ":pet niet gevonden in user.items.pets", "messageFoodNotFound": ":food niet gevonden in user.items.food", - "messageNotAvailable": "This item is not currently available for purchase.", + "messageNotAvailable": "Dit voorwerp is op dit moment niet te koop.", "messageCannotFeedPet": "Dit huisdier kan niet gevoerd worden.", "messageAlreadyMount": "Je hebt dat rijdier al. Probeer een ander huisdier te voeren.", "messageEvolve": "Je hebt <%= egg %> getemd; laten we op weg gaan!", @@ -15,7 +15,7 @@ "messageEquipped": "<%= itemText %> in gebruik genomen.", "messageUnEquipped": "<%= itemText %> weggelegd.", "messageMissingEggPotion": "Je mist of dat ei, of dat drankje.", - "messageInvalidEggPotionCombo": "You can't hatch Quest Pet Eggs with Magic Hatching Potions! Try a different egg.", + "messageInvalidEggPotionCombo": "Je kunt eieren van queeste-huisdieren niet met magische uitbroedtoverdranken uit laten komen! Probeer een ander ei.", "messageAlreadyPet": "Je hebt dat huisdier al. Probeer een andere combinatie uit te broeden!", "messageHatched": "Je ei is uitgekomen! Ga naar de stal om je dier te bekijken en mee te nemen.", "messageNotEnoughGold": "Niet genoeg goud", @@ -30,5 +30,26 @@ "messageAlreadyOwnGear": "Je hebt dit uitrustingsstuk al. Je kunt het aantrekken op de uitrustingspagina.", "armoireEquipment": "<%= image %> Je hebt een zeldzaam uitrustingsstuk gevonden in het kabinet: <%= dropText %>! Super!", "armoireFood": "<%= image %> Je rommelt wat in het kabinet en vindt <%= dropText %>. Hoe komt dat nou hier?", - "armoireExp": "Je worstelt met het kabinet en krijgt er ervaringspunten bij. Daar met je!" + "armoireExp": "Je worstelt met het kabinet en krijgt er ervaringspunten bij. Daar met je!", + "messageInsufficientGems": "Niet genoeg edelstenen!", + "messageAuthPasswordMustMatch": ":password en :confirmPassword komen niet overeen", + "messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword required", + "messageAuthUsernameTaken": "Gebruikersnaam reeds in rebruik", + "messageAuthEmailTaken": "E-mailadres al in gebruik", + "messageAuthNoUserFound": "Geen gebruiker gevonden.", + "messageAuthMustBeLoggedIn": "Je moet ingelogd zijn.", + "messageAuthMustIncludeTokens": "Je moet een token en gid (gebruikers-ID) bijvoegen in je verzoek", + "messageGroupNotFound": "Groep niet gevonden of je hebt geen toegang.", + "messageGroupAlreadyInParty": "Zit al in een groep, probeer te verversen.", + "messageGroupOnlyLeaderCanUpdate": "Alleen de groepsleider kan de groep updaten!", + "messageGroupRequiresInvite": "Je kunt je niet aansluiten bij een groep waar je niet voor bent uitgenodigd.", + "messageGroupCannotRemoveSelf": "Je kunt jezelf niet verwijderen!", + "messageGroupChatBlankMessage": "Je kunt geen leeg bericht sturen", + "messageGroupChatLikeOwnMessage": "Je kunt jezelf geen +1 geven. Zo iemand wil je niet zijn.", + "messageGroupChatFlagOwnMessage": "Je kunt je eigen bericht niet rapporteren.", + "messageGroupChatFlagAlreadyReported": "Je hebt dit bericht al gerapporteerd.", + "messageGroupChatNotFound": "Bericht niet gevonden.", + "messageGroupChatAdminClearFlagCount": "Alleen een admin kan de flag-telling leegmaken!", + "messageUserOperationProtected": "path `<%= operation %>` is niet opgeslagen, omdat het een beschermd path is.", + "messageUserOperationNotFound": "<%= operation %> operatie niet gevonden" } \ No newline at end of file diff --git a/common/locales/nl/noscript.json b/common/locales/nl/noscript.json new file mode 100644 index 0000000000..fe0cc56f23 --- /dev/null +++ b/common/locales/nl/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Helaas! Je browser heeft Javascript niet geactiveerd", + "jsDisabledHeadingFull": "Helaas! Je browser heeft Javascript niet geactiveerd en zonder dat kan Habitica niet goed werken", + "jsDisabledText": "Habitica kan zonder dat de site niet goed weergeven!", + "jsDisabledLink": "Activeer alsjeblieft Javascript om door te gaan!" +} \ No newline at end of file diff --git a/common/locales/nl/npc.json b/common/locales/nl/npc.json index d50cee09e9..68c293f9f0 100644 --- a/common/locales/nl/npc.json +++ b/common/locales/nl/npc.json @@ -7,22 +7,26 @@ "daniel": "Daniël", "danielText": "Welkom in de Herberg! Blijf en tijdje en ontmoet de stamgasten. Als je wat rust nodig hebt (vakantie? ziekte?), zal ik je een kamer geven in de herberg. Terwijl je ingecheckt bent, zullen je Dagelijkse Taken je geen pijn doen aan het einde van de dag, maar je kunt ze nog steeds afkruisen.", "danielText2": "Wees gewaarschuwd: Als je meedoet aan een queeste met een eindbaas, zal de eindbaas je nog steeds pijn doen voor de gemiste dagelijkse taken van je groepsgenoten, tenzij ze ook in de herberg verblijven! Je zult zelf ook geen schade toebrengen aan de eindbaas (of voorwerpen krijgen) totdat je de Herberg verlaat.", + "danielTextBroken": "Welkom in de herberg... Denk ik... Als je rust nodig hebt, zal ik je onderbrengen in de herberg... Zolang je ingecheckt bent, zullen je dagelijkse taken je geen pijn doen aan het eind van de dag... Je kunt ze nog wel afvinken... Als je daar de energie voor hebt...", + "danielText2Broken": "Oh... Als je meedoet aan een queeste met een eindbaas, zal de eindbaas je nog steeds pijn doen voor de gemiste dagelijkse taken van je groepsgenoten... Je zult zelf ook geen schade toebrengen aan de eindbaas (of voorwerpen vinden) totdat je de Herberg verlaat...", "alexander": "Alexander de Koopman", "welcomeMarket": "Welkom op de markt! Koop zeldzame eieren en drankjes! Verkoop je overschot! Gebruik nuttige diensten! Kom langs en bekijk zelf wat we voor je hebben.", - "sellForGold": "Verkoop <%= item %> voor <%= gold %> goud", - "sellEggForGold": "Verkoop <%= itemType %> ei voor <%= gold %> goud", - "sellPotionForGold": "Verkoop <%= itemType %> toverdrank voor <%= gold %> goud", + "displayItemForGold": "Wil je een <%= itemType %> verkopen?", + "displayEggForGold": "Wil je een <%= itemType %> Ei verkopen?", + "displayPotionForGold": "Wil je een <%= itemType %> Toverdrank verkopen?", + "sellForGold": "Verkopen voor <%= gold %> Goud", "buyGems": "Koop edelstenen", "justin": "Justin", "ian": "Ian", "ianText": "Welkom in de queestenwinkel! Hier kun je queesten inzetten om samen met je vrienden monsters te verslaan. Neem een kijkje aan de rechterkant om te bekijken welke prachtige queesten te koop zijn!", + "ianBrokenText": "Welkom in de queestenwinkel... Hier kun je queeste-perkamentrollen gebruiken om samen met je vrienden monsters te verslaan... Neem een kijkje aan de rechterkant om te bekijken welke prachtige queesten er te koop zijn...", "USD": "USD ($)", "newStuff": "Nieuwe informatie", "cool": "Een andere keer lezen", "dismissAlert": "Boodschap verbergen", "donateText1": "Voegt 20 edelstenen toe aan je account. Edelstenen kunnen worden gebruikt om speciale digitale objecten te kopen, zoals shirts en kapsels.", "donateText2": "Steun Habitica", - "donateText3": "Habitica is een open-sourceproject dat afhankelijk is van onze gebruikers voor ondersteuning. Het geld dat jij uitgeeft aan edelstenen helpt ons om de servers te laten lopen, een kleine sta groep medewerkers te onderhouden, nieuwe functies te ontwikkelen en onze vrijwillige programmeurs te prikkelen. Bedankt voor je gulheid!", + "donateText3": "Habitica is een open-sourceproject dat afhankelijk is van onze gebruikers voor ondersteuning. Het geld dat jij uitgeeft aan edelstenen helpt ons om de servers te laten lopen, een kleine stafgroep medewerkers te onderhouden, nieuwe functies te ontwikkelen en onze vrijwillige programmeurs te prikkelen. Bedankt voor je gulheid!", "donationDesc": "20 edelstenen, donatie aan Habitica", "payWithCard": "Betaal met creditcard", "payNote": "Opmerking: PayPal doet er soms lang over om een betaling te verwerken. We raden je aan te betalen met een creditcard.", @@ -54,10 +58,10 @@ "tourPartyPage": "Jouw groep helpt je verantwoordelijk te blijven. Nodig je vrienden uit en speel een queeste-perkamentrol vrij!", "tourGuildsPage": "Gildes zijn chatgroepen met gezamenlijke interesses: door de spelers, voor de spelers. Bekijk de lijst en word lid van de gildes die je interesseren. Kijk eens bij de populaire Newbies-gilde, waar iedereen vragen kan stellen over Habitica!", "tourChallengesPage": "Uitdagingen zijn takenlijsten met een thema, aangemaakt door andere gebruikers! Als je meedoet aan een uitdaging worden de bijbehorende taken toegevoegd aan je account. Wedijver met andere gebruikers om edelstenen te winnen!", - "tourMarketPage": "Vanaf niveau 4 kun je eieren en uitbroedtoverdranken vinden als je een taak afvinkt. Ze verschijnen hier - gebruik ze om huisdieren te maken! Je kunt ook artikelen kopen in de markt.", + "tourMarketPage": "Vanaf niveau 3 kun je eieren en uitbroedtoverdranken vinden als je een taak afvinkt. Ze verschijnen hier - gebruik ze om huisdieren uit te broeden! Je kunt ook artikelen kopen in de markt.", "tourHallPage": "Welkom in de Heldenhal, waar mensen die een bijdrage leveren aan Habitica worden geëerd. Door programmeren, kunst, muziek, schrijven, of zelfs door behulpzaam te zijn hebben zij edelstenen, exclusieve uitrusting en prestigieuze titels verdiend. Als je wilt, kun jij ook bijdragen aan Habitica!", - "tourPetsPage": "Dit is de Stal! Na niveau 4 kan je huisdieren laten uitkomen door middel van eieren en toverdranken. Als je een huisdier laat uitkomen in de markt verschijnt het hier! Klik op het plaatje van een huisdier om het aan je avatar toe te voegen. Voer je huisdieren met het voedsel wat je vindt na niveau 4 om ze te laten uitgroeien tot krachtige rijdieren.", - "tourMountsPage": "Als je een huisdier genoeg hebt gevoerd en het in een rijdier verandert, verschijnt het hier. (Huisdieren, rijdieren en voedsel zijn beschikbaar na niveau 4.) Klik op een rijdier om op te zadelen!", + "tourPetsPage": "Dit is de Stal! Na niveau 3 kan je huisdieren laten uitkomen door middel van eieren en toverdranken. Als je een huisdier laat uitkomen in de markt verschijnt het hier! Klik op het plaatje van een huisdier om het aan je avatar toe te voegen. Voer je huisdieren met het voedsel wat je vindt na niveau 3 om ze te laten uitgroeien tot krachtige rijdieren.", + "tourMountsPage": "Als je een huisdier genoeg gevoerd hebt en het in een rijdier verandert, verschijnt het hier. (Huisdieren, rijdieren en voedsel zijn beschikbaar na niveau 3.) Klik op een rijdier om op te zadelen!", "tourEquipmentPage": "Hier wordt je uitrusting opgeslagen. Je strijduitrusting heeft effect op je statistieken. Als je wilt dat je avatar er anders uitziet zonder dat de statistieken veranderen, zet dan \"Kostuum gebruiken\" aan.", "tourOkay": "Oké!", "tourAwesome": "Super!", @@ -72,10 +76,10 @@ "tourRewardsBrief": "Beloningenlijst
  • Geef hier je welverdiende goud uit!
  • Koop uitrustingsstukken voor je avatar of verzin je eigen beloningen.
", "tourRewardsProceed": "Dat was alles!", "welcomeToHabit": "Welkom bij Habitica!", - "welcome1": "Maak een basis avatar.", - "welcome1notes": "Deze avatar stelt jou en jouw voor vooruitgang voor.", + "welcome1": "Maak een simpele avatar.", + "welcome1notes": "Deze avatar stelt jou en jouw vooruitgang voor.", "welcome2": "Maak je taken aan.", - "welcome2notes": "Hoe goed je je taken in het echte leven uitvoert, bepaalt hoe goed je het spel speelt.", + "welcome2notes": "Hoe goed je je taken in het echte leven uitvoert, bepaalt hoe goed het met je gaat in het spel.", "welcome3": "Boek vooruitgang in je leven en in het spel!", "welcome3notes": "Terwijl je je leven verbetert, zal je avatar een hoger niveau bereiken en huisdieren, queesten, uitrusting en nog meer vrijspelen!", "welcome4": "Vermijd slechte gewoontes die je gezondheid (HP) verminderen, want anders gaat je avatar dood!", diff --git a/common/locales/nl/pets.json b/common/locales/nl/pets.json index e2391b36cd..4f08aaf6ed 100644 --- a/common/locales/nl/pets.json +++ b/common/locales/nl/pets.json @@ -1,13 +1,13 @@ { "pets": "Huisdieren", "petsFound": "Huisdieren gevonden", - "magicPets": "Magic Potion Pets", + "magicPets": "Huisdieren van magische toverdrank", "rarePets": "Zeldzame huisdieren", "questPets": "Huisdieren van queesten", "mounts": "Rijdieren", "mountsTamed": "Rijdieren getemd", "questMounts": "Rijdieren van queesten", - "magicMounts": "Magic Potion Mounts", + "magicMounts": "Rijdieren van magische toverdrank", "rareMounts": "Zeldzame rijdieren", "etherealLion": "Etherische Leeuw", "veteranWolf": "Veteranenwolf", @@ -17,8 +17,8 @@ "mantisShrimp": "Bidsprinkhaankreeft", "mammoth": "Wolharige Mammoet", "orca": "Orka", - "royalPurpleGryphon": "Koninklijke Paarse Griffioen", - "phoenix": "Phoenix", + "royalPurpleGryphon": "Regaal Paarse Griffioen", + "phoenix": "Feniks", "rarePetPop1": "Klik op de gouden pootafdruk om meer te weten te komen over hoe je dit zeldzame dier kunt ontvangen door bij te dragen aan Habitica!", "rarePetPop2": "Hoe krijg ik dit huisdier?", "potion": "<%= potionType %> uitbroedtoverdrank", @@ -27,15 +27,15 @@ "eggSingular": "ei", "noEggs": "Je hebt geen eieren.", "hatchingPotions": "Uitbroedtoverdranken", - "magicHatchingPotions": "Magic Hatching Potions", + "magicHatchingPotions": "Magische uitbroedtoverdranken", "hatchingPotion": "uitbroedtoverdrank", "noHatchingPotions": "Je hebt geen uitbroedtoverdranken.", "inventoryText": "Klik op een ei om bruikbare drankjes in het groen gemarkeerd te zien en klik dan op één van de gemarkeerde drankjes om een dier uit te broeden. Als er geen drankjes zijn gemarkeerd, klik dan opnieuw op het ei om de selectie te verwijderen; klik in plaats daarvan op een drankje om te zien of er bruikbare eieren gemarkeerd worden. Je kunt ongewenste voorwerpen ook verkopen aan Alexander de Koopman.", "foodText": "voedsel", "food": "Voedsel en zadels", "noFood": "Je hebt geen voedsel of zadels.", - "dropsExplanation": "Get these items faster with Gems if you don't want to wait for them to drop when completing a task. Learn more about the drop system.", - "premiumPotionNoDropExplanation": "Magic Hatching Potions cannot be used on eggs received from Quests. The only way to get Magic Hatching Potions is by buying them below, not from random drops.", + "dropsExplanation": "Verkrijg deze voorwerpen sneller met edelstenen als je niet wilt wachten tot je ze vindt als je een taak afrondt. Leer meer over het vondstensysteem.", + "premiumPotionNoDropExplanation": "Magische uitbroedtoverdranken kunnen niet worden gebruikt op eieren die je ontvangen hebt door queesten. De enige manier om magische uitbroedtoverdranken te krijgen is door ze hier beneden te kopen; je krijgt ze niet door willekeurige vondsten.", "beastMasterProgress": "Voortgang tot dierenmeester", "stableBeastMasterProgress": "Voortgang tot dierenmeester: <%= number %> huisdieren gevonden.", "beastAchievement": "Je hebt de \"Dierenmeester\"-prestatie behaald voor het verzamelen van alle huisdieren!", @@ -43,7 +43,7 @@ "beastMasterText": "Heeft alle 90 huisdieren gevonden (ontzettend moeilijk, feliciteer deze gebruiker!)", "beastMasterText2": "en heeft zijn of haar huisdieren in totaal <%= count %> keer vrijgelaten", "mountMasterProgress": "Voortgang tot rijdiermeester", - "stableMountMasterProgress": "Voortgang tot ritmeester: <%= number %> rijdieren gevonden.", + "stableMountMasterProgress": "Voortgang tot rijdiermeester: <%= number %> rijdieren gevonden.", "mountAchievement": "Je hebt de prestatie \"Rijdiermeester\" behaald voor het temmen van alle rijdieren!", "mountMasterName": "Rijdiermeester", "mountMasterText": "Heeft alle 90 rijdieren getemd (nog veel moeilijker, dus feliciteer deze gebruiker!)", @@ -58,8 +58,16 @@ "firstDrop": "Je hebt het vondstensysteem vrijgespeeld! Als je nu een taak volbrengt, heb je een kleine kans om een voorwerp te vinden, zoals eieren, drankjes en voedsel! Je hebt net een <%= eggText %> ei gevonden! <%= eggNotes %>", "useGems": "Als je je oog hebt laten vallen op een huisdier, maar niet wilt wachten tot je het juiste ei of drankje vindt, gebruik dan edelstenen in Boedel > Markt om er één te kopen!", "hatchAPot": "<%= potion %> <%= egg %> uitbroeden?", + "hatchedPet": "Je heb een <%= potion %> <%= egg %> uitgebroed!", + "displayNow": "Toon nu", + "displayLater": "Toon later", + "earnedCompanion": "Door al jouw productiviteit heb je een nieuwe kameraad verdiend. Voer hem en laat hem groeien! ", "feedPet": "<%= text %> aan je <%= name %> voeren?", "useSaddle": "<%= pet %> zadelen?", + "raisedPet": "Je hebt een <%= pet %> laten opgroeien!", + "earnedSteed": "Door het voltooien van taken heb je een trouw ros verdiend!", + "rideNow": "Berijd nu", + "rideLater": "Berijd later", "petName": "<%= potion %> <%= egg %>", "mountName": "<%= potion %> <%= mount %>", "petKeyName": "Sleutel van de Hokken", diff --git a/common/locales/nl/quests.json b/common/locales/nl/quests.json index f8beab4b93..32fe399cf9 100644 --- a/common/locales/nl/quests.json +++ b/common/locales/nl/quests.json @@ -13,6 +13,7 @@ "youReceived": "Je hebt ontvangen", "dropQuestCongrats": "Gefeliciteerd, je hebt een queeste-perkamentrol gevonden! Je kunt je groep uitnodigen om er direct mee te beginnen, of er later alsnog mee starten via Boedel > Queesten.", "questSend": "Op \"Uitnodigen\" klikken stuurt een uitnodiging naar de groepsleden. Wanneer alle leden hebben geaccepteerd of geweigerd, begint de queeste. Zie de status onder Sociaal > Groep.", + "questSendBroken": "Op \"Uitnodigen\" klikken stuurt een uitnodiging naar de groepsleden... Wanneer alle leden hebben geaccepteerd of geweigerd, begint de queeste... Zie de status onder Sociaal > Groep...", "inviteParty": "Groep uitnodigen voor queeste", "questInvitation": "Uitnodiging voor queeste:", "questInvitationTitle": "Uitnodiging voor queeste", @@ -24,21 +25,27 @@ "rejected": "Geweigerd", "pending": "In afwachting", "questStart": "De queeste begint wanneer alle groepsleden de uitnodiging ofwel geaccepteerd ofwel geweigerd hebben. Alleen de leden die geaccepteerd hebben, nemen deel aan de queeste en ontvangen de daarbij horende vondsten. Als groepsleden te lang in afwachting zijn (inactief?), kan de eigenaar van de queeste zonder hen beginnen door op 'Starten' te klikken. De eigenaar van de queeste kan de queeste-perkamentrol terugkrijgen en de queeste annuleren door op 'Annuleren' te klikken.", + "questStartBroken": "De queeste begint wanneer alle groepsleden de uitnodiging ofwel geaccepteerd ofwel geweigerd hebben... Alleen de leden die geaccepteerd hebben, nemen deel aan de queeste en ontvangen de daarbij horende vondsten... Als groepsleden te lang in afwachting zijn (inactief?), kan de eigenaar van de queeste zonder hen beginnen door op 'Starten' te klikken... De eigenaar van de queeste kan de queeste-perkamentrol terugkrijgen en de queeste annuleren door op 'Annuleren' te klikken...", "begin": "Starten", "bossHP": "Gezondheid eindbaas", "bossStrength": "Kracht eindbaas", - "rage": "Rage", + "rage": "Furie", "collect": "Verzamel", "collected": "Verzameld", "collectionItems": "<%= number %> <%= items %>", "itemsToCollect": "Objecten om te verzamelen", "bossDmg1": "Elke voltooide Dagelijkse Taak en To-do en elke positieve Gewoonte brengt schade toe aan de eindbaas. Breng meer schade toe met rodere taken of Wrede Slag en Uiteenspatting van Vlammen. De eindbaas brengt iedereen die meedoet aan de queeste schade toe voor iedere Dagelijkse Taak die je gemist hebt (vermenigvuldigd met de Kracht van de eindbaas), bovenop je normale schade, dus houd je groep gezond door je dagelijkse taken te doen! Alle schade van en aan een eindbaas wordt verrekend tijdens cron (je dagelijkse nieuwe start).", "bossDmg2": "Alleen deelnemers bevechten de eindbaas en delen de buit.", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "Elke voltooide Dagelijkse Taak en To-do en elke positieve Gewoonte brengt schade toe aan de eindbaas... Breng meer schade toe met rodere taken of Wrede Slag en Uiteenspatting van Vlammen... De eindbaas brengt iedereen die meedoet aan de queeste schade toe voor iedere Dagelijkse Taak die je gemist hebt (vermenigvuldigd met de Kracht van de eindbaas), bovenop je normale schade, dus houd je groep gezond door je dagelijkse taken te doen... Alle schade van en aan een eindbaas wordt verrekend tijdens cron (je dagelijkse nieuwe start)...", + "bossDmg2Broken": "Alleen deelnemers bevechten de eindbaas en delen de buit...", + "tavernBossInfo": "Voltooi dagelijkse taken en to-do's en vink positieve gewoontes af om de Wereldbaas schade toe te brengen! Onvoltooide dagelijkse taken vullen de 'Oncontroleerbare Furie'-balk. Als de 'Oncontroleerbare Furie'-balk vol is, valt de Wereldbaas een NPC aan. Een Wereldbaas zal nooit schade doen aan individuele spelers of accounts. Alleen de taken van actieve accounts, die niet verblijven in de herberg, worden meegerekend.", + "tavernBossInfoBroken": "Voltooi dagelijkse taken en to-do's en vink positieve gewoontes af om de Wereldbaas schade toe te brengen... Onvoltooide dagelijkse taken vullen de 'Oncontroleerbare Furie'-balk... Als de 'Oncontroleerbare Furie'-balk vol is, valt de Wereldbaas een NPC aan... Een Wereldbaas zal nooit schade doen aan individuele spelers of accounts... Alleen de taken van actieve accounts, die niet verblijven in de herberg, worden meegerekend...", "bossColl1": "Om vondsten te verzamelen moet je positieve taken doen. De vondsten van de queeste werken hetzelfde als normale vondsten; je zult de vondsten echter niet zien tot de volgende dag, wanneer alles wat je hebt gevonden wordt opgeteld en aan de buit wordt toegevoegd.", "bossColl2": "Alleen deelnemers kunnen vondsten verzamelen en de buit delen.", + "bossColl1Broken": "Om vondsten te verzamelen moet je positieve taken doen... Voorwerpen van queesten vind je hetzelfde als normale vondsten; je zult ze echter niet zien tot de volgende dag, wanneer alles wat je gevonden hebt wordt opgeteld en aan de buit wordt toegevoegd...", + "bossColl2Broken": "Alleen deelnemers kunnen vondsten verzamelen en de buit delen...", "abort": "Afbreken", - "leaveQuest": "Verlaat queeste", + "leaveQuest": "Queeste verlaten", "sureLeave": "Weet je zeker dat je de queeste wilt verlaten? Al jouw vooruitgang binnen de queeste zal verloren raken.", "questOwner": "Eigenaar van de queeste", "questOwnerNotInPendingQuest": "De eigenaar van de queeste heeft de queeste verlaten en kan deze niet meer handmatig starten. Advies is om de queeste te annuleren. De eigenaar van de queeste houdt de queeste-perkamentrol.", @@ -63,10 +70,13 @@ "sureAbort": "Weet je zeker dat je deze missie wilt afbreken? De missie wordt afgebroken voor iedereen in jouw groep; alle vorderingen gaan verloren. De queeste-perkamentrol wordt teruggegeven aan de eigenaar van de queeste.", "doubleSureAbort": "Weet je het echt heel zeker? Zorg ervoor dat ze niet voor altijd een hekel aan je krijgen!", "questWarning": "Als nieuwe spelers bij de groep komen voordat de queeste begint, krijgen ze ook een uitnodiging. Als de queeste eenmaal begonnen is, kunnen nieuwe groepsleden zich echter niet bij de queeste aansluiten.", + "questWarningBroken": "Als nieuwe spelers bij de groep komen voordat de queeste begint, krijgen ze ook een uitnodiging... Als de queeste eenmaal begonnen is, kunnen nieuwe groepsleden zich echter niet bij de queeste aansluiten...", "bossRageTitle": "Woede", "bossRageDescription": "Als deze balk vol is, zal de eindbaas een speciale aanval ontketenen.", "startAQuest": "START EEN QUEESTE", - "startQuest": "Start de queeste", + "startQuest": "Queeste starten", "whichQuestStart": "Welke queeste wil je beginnen?", - "getMoreQuests": "Krijg meer queesten" + "getMoreQuests": "Verkrijg meer queesten", + "unlockedAQuest": "Je hebt een queeste vrijgespeeld!", + "leveledUpReceivedQuest": "Je hebt niveau <%= level %> bereikt en hebt een queeste ontvangen!" } \ No newline at end of file diff --git a/common/locales/nl/questscontent.json b/common/locales/nl/questscontent.json index 47149f0196..90f7b56d9f 100644 --- a/common/locales/nl/questscontent.json +++ b/common/locales/nl/questscontent.json @@ -96,7 +96,7 @@ "questGoldenknight2Boss": "Gouden Ridder", "questGoldenknight2DropGoldenknight3Quest": "De Gouden Ridder-serie deel 3: De IJzeren Ridder (perkamentrol)", "questGoldenknight3Text": "De Gouden Ridder, deel 3: De IJzeren Ridder", - "questGoldenknight3Notes": "

@Jon Arinbjorn slaakt een kreet om je aandacht te trekken. Na afloop van je gevecht is er een nieuwe figuur verschenen. Een ridder in een pantser van gezwart ijzer komt met getrokken zwaard langzaam naderbij. De Gouden Ridder roept \"Vader, nee!\" naar de verschijning, maar de ridder blijft maar komen. Ze keert zich naar je toe en zegt \"Het spijt me. Ik ben dom geweest, en mijn ego was te groot om te zien hoe wreed ik ben geweest. Maar mijn vader is wreder dan ik ooit zou kunnen zijn. Als hij niet tegengehouden wordt, zal hij ons allemaal vernietigen. Hier, neem mijn morgenster en stop de IJzeren Ridder!\"

", + "questGoldenknight3Notes": "

@Jon Arinbjorn slaakt een kreet om je aandacht te trekken. Na afloop van je gevecht is er een nieuwe figuur verschenen. Een ridder in een pantser van gezwart ijzer komt met getrokken zwaard langzaam naderbij. De Gouden Ridder roept \"Vader, nee!\" naar de verschijning, maar de ridder blijft maar komen. Ze keert zich naar je toe en zegt \"Het spijt me. Ik ben dom geweest, en mijn ego was te groot om te zien hoe wreed ik ben geweest. Maar mijn vader is wreder dan ik ooit zou kunnen zijn. Als hij niet tegengehouden wordt, zal hij ons allemaal vernietigen. Hier, neem mijn morgenster en houd de IJzeren Ridder tegen!\"

", "questGoldenknight3Completion": "

Met een bevredigend geratel valt de IJzeren Ridder op zijn knieën en zakt hij ineen. \"Jij bent best sterk,\" hijgt hij. \"Ik ben vandaag verootmoedigd.\" De Gouden Ridder komt nabij en zegt \"Dankjewel. Ik geloof dat we allebei wat nederigheid geleerd hebben van onze ontmoeting. Ik ga met mijn vader praten en hem de klachten over ons uitleggen. Misschien kunnen we beginnen door onze verontschuldigingen aan te bieden aan de andere Habiticanen.\" Even verzinkt ze in gedachten voordat ze zich weer naar jou richt. \"Hier - als ons geschenk aan jou wil ik dat je mijn morgenster houdt. Hij is nu van jou.\"

", "questGoldenknight3Boss": "De IJzeren Ridder", "questGoldenknight3DropHoney": "Honing (voedsel)", @@ -179,7 +179,7 @@ "questTRexUndeadRageEffect": "'Skeletachtige Tyrannosaurus gebruikt Skeletgenezing!'\n\nHet monster slaakt een onaardse brul, en een paar van zijn beschadigde botten komen weer terug op de goede plaats.", "questTRexDropTRexEgg": "Tyrannosaurus (ei)", "questTRexUnlockText": "Maakt het kopen van tyrannosauruseieren in de markt mogelijk", - "questRockText": "Ontsnap van het Grottenmonster", + "questRockText": "Ontsnap aan het Grottenmonster", "questRockNotes": "Terwijl je door de Meanderende Bergen van Habitica aan het trekken bent met enkele vrienden, kampeer je op een avond in een prachtige grot doorspekt met glanzende mineralen. Maar als je de volgende ochtend wakker wordt, is de ingang verdwenen, en verschuift de vloer van de grot zich onder je.

\"De berg leeft!\" schreeuwt je reismakker @pfeffernusse. \"Dit zijn geen kristallen - het zijn tanden!\"

@Painter de Cluster grijpt je hand. \"We moeten een andere uitweg zien te vinden - blijf bij mij in de buurt en laat je niet afleiden, want anders zitten we hier misschien wel voor eeuwig gevangen!\"", "questRockBoss": "Kristallen Kolos", "questRockCompletion": "Door jullie ijverigheid is het gelukt een veilige route door de bergen te vinden. Je compagnon @intune, genietend van het zonlicht, ziet iets glitteren op de grond bij de uitgang van de grot. Je bukt om het op de rapen en ziet dat het een kleine rots is waar een goudader doorheen loopt. Ernaast liggen enkele vreemdgevormde rotsen. Het lijken wel... eieren?", @@ -238,28 +238,40 @@ "questDilatoryDistress3DropFish": "Vis (voedsel)", "questDilatoryDistress3DropWeapon": "Drietand van verpletterend getij (wapen)", "questDilatoryDistress3DropShield": "Maanparelschild (schild)", - "questCheetahText": "Wat een Cheetah", - "questCheetahNotes": "As you hike across the Sloensteadi Savannah with your friends @PainterProphet, @tivaquinn, @Unruly Hyena, and @Crawford, you're startled to see a Cheetah screeching past with a new Habitican clamped in its jaws. Under the Cheetah's scorching paws, tasks burn away as though complete -- before anyone has the chance to actually finish them! The Habitican sees you and yells, \"Please help me! This Cheetah is making me level too quickly, but I'm not getting anything done. I want to slow down and enjoy the game. Make it stop!\" You fondly remember your own fledgling days, and know that you have to help the newbie by stopping the Cheetah!", - "questCheetahCompletion": "De nieuwe Habiticaan ademt zwaar na de wilde rit, maar bedankt jou en je vrienden voor jullie hulp. \"Ik ben blij dat Cheetah niet meer iemand anders zal kunnen grijpen. Hij heeft enkele cheetah eieren voor ons achtergelaten, dus misschien kunnen we die opvoeden tot betrouwbaardere huisdieren!\"", - "questCheetahBoss": "Cheetah", + "questCheetahText": "Wat een lui Jachtluipaard!", + "questCheetahNotes": "Wanneer je door de Tragengestaagsavanne loopt met je vrienden @PainterProphet, @tivaquinn, @Unruly Hyena en @Crawford, schrik je ervan een cheetah langs te zien gieren met een nieuwe Habiticaan in zijn kaken. Onder de verzengende poten van de cheetah verbranden taken alsof ze voltooid zijn -- voordat iemand de kans heeft gehad ze te doen! De Habiticaan ziet je en roept: \"Help me alsjeblieft! Deze cheetah zorgt ervoor dat ik er te snel niveaus bij krijg, maar ik krijg niets gedaan. Ik wil afremmen en van het spel genieten. Hou hem tegen!\" Je herinnert je met plezier je eigen dagen als jonge hond en weet dat je het groentje moet helpen door de cheetah te stoppen!", + "questCheetahCompletion": "De nieuwe Habiticaan ademt zwaar na de wilde rit, maar bedankt jou en je vrienden voor jullie hulp. \"Ik ben blij dat die cheetah niet meer iemand anders zal kunnen grijpen. Hij heeft enkele cheetah-eieren voor ons achtergelaten, dus misschien kunnen we die opvoeden tot betrouwbaardere huisdieren!\"", + "questCheetahBoss": "Luie Cheetah", "questCheetahDropCheetahEgg": "Cheetah (ei)", - "questCheetahUnlockText": "Maakt het kopen van cheetah eieren in de markt mogelijk", + "questCheetahUnlockText": "Maakt het kopen van cheetah-eieren in de markt mogelijk", "questHorseText": "Berijd de Nacht-Merrie", - "questHorseNotes": "While relaxing in the Tavern with @beffymaroo and @JessicaChase, the talk turns to good-natured boasting about your adventuring accomplishments. Proud of your deeds, and perhaps getting a bit carried away, you brag that you can tame any task around. A nearby stranger turns toward you and smiles. One eye twinkles as he invites you to prove your claim by riding his horse.\nAs you all head for the stables, @UncommonCriminal whispers, \"You may have bitten off more than you can chew. That's no horse - that's a Night-Mare!\" Looking at its stamping hooves, you begin to regret your words...", - "questHorseCompletion": "It takes all your skill, but finally the horse stamps a couple of hooves and nuzzles you in the shoulder before allowing you to mount. You ride briefly but proudly around the Tavern grounds while your friends cheer. The stranger breaks into a broad grin.\n\"I can see that was no idle boast! Your determination is truly impressive. Take these eggs to raise horses of your own, and perhaps we'll meet again one day.\" You take the eggs, the stranger tips his hat... and vanishes.", + "questHorseNotes": "Terwijl je ontspant in de herberg met @Beffymaroo en @JessicaChase, verandert het gespreksonderwerp naar goedgehumeurd opscheppen over je avontuurlijke prestaties. Trots op je daden en misschien omdat je een beetje meegesleept wordt schep je op dat je iedere taak die er is kunt temmen. Een nabij gezeten vreemdeling draait zich naar je toe en glimlacht. Zijn oog glinstert als hij je uitdaagt om je uitspraak kracht bij te zetten door zijn paard te berijden.\nTerwijl jullie allemaal naar de stallen lopen, fluistert @Uncommoncriminal: \"Misschien heb je te veel hooi op je vork genomen. Dat is geen paard - dat is een Nacht-Merrie!\" Kijkend naar de stampende hoeven begin je spijt te krijgen van je woorden...", + "questHorseCompletion": "Het vergt al je kunde, maar uiteindelijk stampt het paard met zijn hoeven, snuffelt hij aan je schouder en laat je opstijgen. Je rijdt kort, maar trots, over het herbergterrein terwijl je vrienden juichen. De vreemdeling laat een brede lach zien. \"Ik kan zien dat het geen ijdele grootspraak was! Je doorzettingsvermogen is waarlijk indrukwekkend. Neem deze eieren om je eigen paarden te fokken, en misschien ontmoeten we elkaar op een dag weer.\" Je pakt de eieren aan, de vreemdeling geeft een tikje tegen zijn hoed... en verdwijnt.", "questHorseBoss": "Nacht-Merrie", "questHorseDropHorseEgg": "Paard (ei)", "questHorseUnlockText": "Maakt het kopen van paardeneieren in de markt mogelijk", - "questBurnoutText": "Burnout and the Exhaust Spirits", - "questBurnoutNotes": "It is well past midnight, still and stiflingly hot, when Redphoenix and scout captain Kiwibot abruptly burst through the city gates. \"We need to evacuate all the wooden buildings!\" Redphoenix shouts. \"Hurry!\"

Kiwibot grips the wall as she catches her breath. \"It's draining people and turning them into Exhaust Spirits! That's why everything was delayed. That's where the missing people have gone. It's been stealing their energy!\"

\"'It'?'\" asks Lemoness.

And then the heat takes form.

It rises from the earth in a billowing, twisting mass, and the air chokes with the scent of smoke and sulphur. Flames lick across the molten ground and contort into limbs, writhing to horrific heights. Smoldering eyes snap open, and the creature lets out a deep and crackling cackle.

Kiwibot whispers a single word.

\"Burnout.\"", - "questBurnoutCompletion": "Burnout is DEFEATED!

With a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.

Ian, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!

\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!

One of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"

Her tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"

She claps her hands. \"Now - let's celebrate!\"", - "questBurnoutCompletionChat": "`Burnout is DEFEATED!`\n\nWith a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.\n\nIan, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!\n\n\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!\n\nOne of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"\n\nHer tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"\n\nShe claps her hands. \"Now - let's celebrate!\"\n\nAll Habiticans receive:\n\nPhoenix Pet\nPhoenix Mount\nAchievement: Savior of the Flourishing Fields\nBasic Candy\nVanilla Candy\nSand Candy\nCinnamon Candy\nChocolate Candy\nRotten Candy\nSour Pink Candy\nSour Blue Candy\nHoney Candy", + "questBurnoutText": "Burnout en de Ontladingsgeesten", + "questBurnoutNotes": "Het is ver na middernacht, kalm en verstikkend heet, wanneer Redphoenix en kapitein der verkenners Kiwibot plots door de stadspoorten komen gerend. 'We moeten alle houten gebouwen evacueren!' roept Redphoenix. 'Opschieten!'

Kiwibot leunt tegen de muur terwijl ze op adem probeert te komen. 'Het zuigt mensen leeg en verandert ze in Ontladingsgeesten! Dat is waarom alles is vertraagd. Dat is waar de vermiste mensen heen zijn. Het steelt hun energie!'

'Het?' vraagt Lemoness.

En dan neemt de hitte een vorm aan.

Het stijgt op van de aarde in een golvende, kolkende massa en de lucht is verstikkend door de geur van rook en zwavel. Vlammen likken over de gesmolten grond en vertrekken tot ledematen, kronkelen tot afschrikwekkende hoogten. Gloeiende ogen klappen open en het creatuur laat een diepe en krakende kakel weerklinken.

Kiwibot fluistert een enkel woord

'Burnout.'", + "questBurnoutCompletion": " Burnout is VERSLAGEN!

Met een grote, zachte zucht, laat Burnout langzaam de vurige energie ontsnappen die zijn vuur aanwakkerde. Wanneer het monster stil tot as vergaat, schittert zijn gestolen energie door de lucht, de Ontladingsgeesten verjongend en tot hun ware gedaantes terugkerend.

Ian, Daniel en de Tovenares der Seizoenen juichen als de Habiticanen zich haasten om hen te groeten en alle vermiste personen van de Bloeiende Velden omhelzen kun vrienden en familie. De laatste Ontladingsgeest verandert in Vrolijke Hein zelf!

'Kijk!' fluistert @baconsaur, terwijl de as begint te glitteren. Langzaam lossen zijn op tot honderden stralende feniksen!

Een van de stralende vogels strijkt neer op de knokige arm van Vrolijke Hein en ze grijnst ernaar. 'Het is een lange tijd geleden dat ik het zeldzame privilege heb gehad een feniks te zien in de Bloeiende Velden,' zegt ze. 'Ondanks dat de recente gebeurtenissen, moet ik zeggen, hoogst toepasselijk zijn!'

Haar toon versombert, al blijft (vanzelfsprekend) haar grijns. 'We zijn er hier om bekend hardwerkend te zijn, maar we zijn ook bekend om onze feesten en festiviteiten. Hoe ironisch, te vooronderstellen dat terwijl we een spectaculair feest aan het organiseren waren, we onszelf geen tijd voor plezier gunden. We zullen de fout geen twee keer maken!'

Ze klapt in haar handen. \"En nu - Laat ons feesten!\"", + "questBurnoutCompletionChat": "'Burnout is VERSLAGEN!'\n\nMet een grote, zachte zucht laat Burnout langzaam de vurige energie ontsnappen die zijn vuur aanwakkerde. Terwijl het monster stilletjes tot as vergaat, schittert zijn gestolen energie door de lucht, waardoor de ontladingsgeesten opleven en tot hun ware gedaantes terugkeren.\n\nIan, Daniel en de Seizoenstovenares juichen wanneer de Habiticanen zich haasten om hen te groeten. Ook alle vermiste personen van de Bloeiende Velden omhelzen kun vrienden en familie. De laatste ontladingsgeest verandert in Vrolijke Hein zelf!\n\n\"Kijk!\" fluistert @baconsaur, terwijl de as begint te glinsteren. Langzaam komen de asdeeltjes samen tot honderden stralende feniksen!\n\nEen van de stralende vogels strijkt neer op de knokige arm van Vrolijke Hein en ze grijnst ernaar. \"Het is lang geleden dat ik het zeldzame privilege had om een feniks te zien in de Bloeiende Velden,\" zegt ze. \"Gezien de recente gebeurtenissen moet ik echter zeggen dat het hoogst toepasselijk is!\"\n\nHaar toon versombert, al blijft haar grijns (vanzelfsprekend). \"We staan er hier om bekend hard te werken, maar we zijn ook bekend om onze banketten en festiviteiten. Het is ironisch, denk ik, dat we een zó spectaculair feest aan het organiseren waren dat we onszelf geen tijd voor plezier gunden. We zullen die fout geen twee keer maken!\"\n\nZe klapt in haar handen. \"En nu - laat ons feesten!\"\n\nAlle Habiticanen ontvangen:\n\nEen Feniks-huisdier\nEen Feniks-rijdier\nDe prestatie 'Verlosser van de Bloeiende Velden'\nStandaardsnoep\nVanillesnoep\nZandsnoep\nKaneelsnoep\nChocoladesnoep\nBedorven snoep\nZuur roze snoep\nZuur blauw snoep\nHoningsnoep", "questBurnoutBoss": "Burnout", - "questBurnoutBossRageTitle": "Exhaust Strike", - "questBurnoutBossRageDescription": "When this gauge fills, Burnout will unleash its Exhaust Strike on Habitica!", - "questBurnoutDropPhoenixPet": "Phoenix (Pet)", - "questBurnoutDropPhoenixMount": "Phoenix (Mount)", - "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", - "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTitle": "Ontladingsaanval", + "questBurnoutBossRageDescription": "Als deze meter vol is, zal Burnout zijn Ontladingsaanval loslaten op Habitica!", + "questBurnoutDropPhoenixPet": "Phoenix (huisdier)", + "questBurnoutDropPhoenixMount": "Phoenix (rijdier)", + "questBurnoutBossRageQuests": "'Burnout gebruikt ONTLADINGSAANVAL!'\n\nO nee! Ondanks onze beste pogingen hebben we wat dagelijkse taken laten ontsnappen en nu is Burnout ontstoken met energie! Met een kakelende sneer overspoelt hij Ian de queestemeester met een golf van spookachtig vuur. De gevallen queesterollen smeulen en de rook lost op: je ziet dat de energie uit Ian gezogen is en dat hij veranderd is in een doelloze ontladingsgeest!\n\nAlleen het verslaan van Burnout kan de betovering doorbreken en onze geliefde queestemeester terugbrengen. Laten we onze dagelijkse taken in toom houden en dit monster verslaan voordat hij weer aanvalt!", + "questBurnoutBossRageSeasonalShop": "'Burnout gebruikt ONTLADINGSAANVAL!'\n\nAh! Onze onafgemaakte dagelijkse taken hebben de vlammen van Burnout gevoed en nu heeft hij genoeg energie om opnieuw aan te vallen! Hij laat een pilaar van spookachtige vlammen los die de seizoenswinkel verschroeien. Vol afgrijzen zie je dat de vrolijke Seizoenstovenares veranderd is in een lijzige ontladingsgeest.\n\nWe moeten onze NPC's redden! Haast je, Habiticanen, voltooi je taken en versla Burnout voordat hij voor een derde keer toeslaat!", + "questBurnoutBossRageTavern": "'Burnout gebruikt ONTLADINGSAANVAL!'\n\nVeel Habicitanen hebben zich voor Burnout verstopt in de herberg, maar niet langer! Met een schelle huil harkt Burnout de herberg omver met zijn withete handen. Terwijl de gasten van de herberg vluchten, wordt Daniel gevangen in de greep van Burnout en verandert hij voor je neus in een ontladingsgeest!\n\nDeze heethoofdige nachtmerrie heeft te lang geduurd. Geef niet op... we zijn er heel dichtbij Burnout voor eens en voor altijd te verslaan!", + "questFrogText": "Moeras van de Belemmerende Kikker", + "questFrogNotes": "Terwijl jij en je vrienden door het Moeras van Stagnatie aan het ploeteren zijn, wijst @starsystemic naar een groot uithangbord. \"Blijf op het pad -- als je kan.\"

\"Dat is toch niet moeilijk!\" zegt @RosemonkeyCT. \"Het pad is breed en vrij.\"

Maar als je doorgaat, merk je dat het pad langzamerhand wordt ingenomen door drek uit het moeras, doorspekt met stukjes vreemde blauwe troep en rommel, totdat het is onmogelijk om verder te gaan.

Als je om je heen kijkt en je afvraagt hoe dit zo is gekomen roept @Jon Arjinborn: \"Kijk uit!\" Een boze kikker springt uit het slib, bekleed met vuile was en verlicht door blauw vuur. Je moet de giftige belemmerende kikker overwinnen om vooruitgang te boeken!", + "questFrogCompletion": "De kikker krimpt ineen en verdwijnt in de drek, verslagen. Terwijl hij wegebt, verdwijnt ook het blauwe slijm en komt de weg vooruit vrij.

In het midden van het pad liggen drie onbevlekte eieren. \"Je kunt zelfs de kleine kikkervisjes zien door het heldere omhulsel heen!\" zegt @Breadstrings. \"Hier, neem jij ze maar.\"", + "questFrogBoss": "Belemmerende Kikker", + "questFrogDropFrogEgg": "Kikker (ei)", + "questFrogUnlockText": "Maakt het kopen van kikkereieren in de markt mogelijk", + "questSnakeText": "De Slang van Afleiding", + "questSnakeNotes": "Je hebt de moed van een doorgewinterde ziel nodig om in de Duinen van Afleiding te kunnen leven. De dorre woestijn is verre van een productive plek, en de glimmende duinen hebben meerdere reizigers laten verdwalen. Echter, iets heeft de lokale bevolking laten schrikken. Het zand is gaan verschuiven en heeft hele dorpen omgedraaid. De inwoners beweren dat er een gigantisch monster met een slangachtig lichaam op de loer ligt onder het zand, en ze hebben een gezamelijke beloning voor degene die hen zal helpen om hem te vinden en te stoppen. De veelgeprezen slangenbezweerders @EmeraldOx en @PainterProphet hebben je aangeboden om je te helpen het beest op te roepen. Kan jij de Slang van Afleiding stoppen?", + "questSnakeCompletion": "Met hulp van de slangenbezweerder heb je de Slang van Afleiding verbannen. Ook al was je blij om de bewoners van de duinen te helpen, ben je ook een beetje verdrietig dat je het beest hebt weggejaagd. Terwijl je in de verte staart, komt @LordDarkly naar je toe: \"Dankjewel! Het is niet veel, maar ik hoop dat het gebaar genoeg is.\" Hij overhandigt je goud en... slangeneieren! Je zal dat majestueuze dier toch nog terug zien.", + "questSnakeBoss": "Slang van Afleiding", + "questSnakeDropSnakeEgg": "Slang (ei)", + "questSnakeUnlockText": "Maakt het kopen van slangeneieren in de markt mogelijk" } \ No newline at end of file diff --git a/common/locales/nl/rebirth.json b/common/locales/nl/rebirth.json index d3b6db96fc..6f7f0ae778 100644 --- a/common/locales/nl/rebirth.json +++ b/common/locales/nl/rebirth.json @@ -4,7 +4,7 @@ "rebirthBegin": "Hergeboorte: begin een nieuw avontuur", "rebirthStartOver": "Hergeboorte start je personage opnieuw vanaf niveau 1.", "rebirthAdvList1": "Je krijgt je volle gezondheid terug.", - "rebirthAdvList2": "Je hebt geen ervaring, goud, of uitrusting (met uitzondering van gratis items zoals Mystery items).", + "rebirthAdvList2": "Je hebt geen ervaring, goud, of uitrusting (met uitzondering van gratis items zoals verrassingsartikelen).", "rebirthAdvList3": "Je Gewoontes, Dagelijkse Taken en To-do's zijn op geel gezet, en series zijn teruggezet op nul.", "rebirthAdvList4": "Je hebt de startklasse van Krijger tot je een nieuwe klasse verwerft.", "rebirthInherit": "Je nieuwe personage erft een paar dingen van zijn voorganger:", @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "Je kunt ook een prestatie verdienen voor het beginnen van een nieuw avontuur!", "beReborn": "Herboren worden", "rebirthAchievement": "Je bent een nieuw avontuur begonnen! Dit is hergeboorte <%= number %> voor jou, en het hoogste niveau dat je behaald hebt is <%= level %>. Begin je volgende nieuwe avontuur als je een nog hoger niveau hebt bereikt om deze prestatie nog een keer te behalen!", + "rebirthAchievement100": "Je bent een nieuw avontuur begonnen! Dit is hergeboorte <%= number %> voor je en het hoogste niveau dat je hebt bereikt is 100 of hoger. Om deze prestatie te stapelen, begin dan je nieuwe avontuur wanneer je op zijn minst level 100 hebt bereikt!", "rebirthBegan": "Is een nieuw avontuur begonnen", "rebirthText": "Is <%= rebirths %> nieuwe avonturen begonnen", "rebirthOrb": "Heeft een Bol der Hergeboorte gebruikt om opnieuw te beginnen na het bereiken van niveau", + "rebirthOrb100": "Heeft een Bol der Hergeboorte gebruikt om opnieuw te beginnen na level 100 of hoger te hebben bereikt", "rebirthPop": "Begin een nieuw personage vanaf niveau 1 terwijl je je prestaties, verzamelobjecten en taken met hun geschiedenis behoudt.", "rebirthName": "Bol der Hergeboorte", "reborn": "Herboren, maximale niveau <%= reLevel %>" diff --git a/common/locales/nl/settings.json b/common/locales/nl/settings.json index 4771bb1087..49b6ae1676 100644 --- a/common/locales/nl/settings.json +++ b/common/locales/nl/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "Deze optie verbergt aanvankelijk de lijst met labels als je een taak opent om hem te bewerken.", "startAdvCollapsed": "Geavanceerde opties in taken aanvankelijk ingeklapt laten zien", "startAdvCollapsedPop": "Deze optie verbergt de geavanceerde opties wanneer je voor het eerst een taak opent om hem te bewerken.", + "dontShowAgain": "Laat dit niet meer zien", + "suppressLevelUpModal": "Geen pop-up tonen wanneer ik een hoger niveau bereik", + "suppressHatchPetModal": "Geen pop-up tonen wanneer ik een huisdier uitbroed", + "suppressRaisePetModal": "Geen pop-up tonen wanneer ik een huisdier laat uitgroeien tot een rijdier", + "suppressStreakModal": "Geen pop-up tonen wanneer ik een serie-prestatie bereik", "showTour": "Rondleiding starten", "restartTour": "Herhaal de introductierondleiding van toen je net begon met Habitica.", "showBailey": "Bailey laten zien", @@ -41,7 +46,7 @@ "customDayStart": "Begin van de dag aanpassen", "changeCustomDayStart": "Begin van de dag aanpassen? ", "sureChangeCustomDayStart": "Weet je zeker dat je het begin van de dag wilt aanpassen?", - "nextCron": "Jouw dagelijkse taken zullen resetten als je Habatica voor het eerst gebruikt na <%= time %>. Wees zeker dat je je dagelijkse taken voor die tijd afrond!", + "nextCron": "Je dagelijkse taken worden gereset de eerste keer dat je Habitica gebruikt na <%= time %>. Zorg ervoor dat je je dagelijkse taken voor die tijd afrondt!", "customDayStartInfo1": "Standaard controleert en reset Habitica je dagelijkse taken elke dag om middernacht. Je kunt dit hier aanpassen.", "misc": "Diversen", "showHeader": "Bovenbalk laten zien", @@ -81,7 +86,6 @@ "emailChange1": "Stuur om je e-mailadres te veranderen een e-mail naar", "emailChange2": "admin@habitica.com", "emailChange3": "met zowel je oude en nieuwe e-mailadres en je Gebruikers-ID.", - "username": "Inlognaam", "usernameOrEmail": "Loginnaam of e-mail", "email": "E-mail", "registeredWithFb": "Geregistreerd met Facebook", @@ -100,7 +104,7 @@ "weeklyRecaps": "Samenvatting van je accountactiviteit in de afgelopen week", "questStarted": "Je queeste is begonnen", "invitedQuest": "Uitgenodigd voor queeste", - "kickedGroup": "Uit de groep gegooid", + "kickedGroup": "Uit de groep gezet", "remindersToLogin": "Herinneringsberichten om Habitica te checken", "unsubscribedSuccessfully": "Afmelden succesvol!", "unsubscribedTextUsers": "Je hebt je succesvol afgemeld van alle Habitica e-mail. Je kunt in de instellingen aangeven welke e-mail je wel wilt ontvangen. (Hier moet je voor ingelogd zijn.)", @@ -118,5 +122,29 @@ "promoCode": "Promotiecode", "promoCodeApplied": "Promotiecode toegepast! Kijk in je boedel", "promoPlaceholder": "Voer promotiecode in", - "displayInviteToPartyWhenPartyIs1": "Toon de 'Uitnodigen voor groep'-knop wanneer de groep 1 lid heeft." + "displayInviteToPartyWhenPartyIs1": "Toon de 'Uitnodigen voor groep'-knop wanneer de groep 1 lid heeft.", + "saveCustomDayStart": "Begin van de dag opslaan", + "registration": "Registratie", + "addLocalAuth": "Plaatselijke authenticatie toevoegen:", + "generateCodes": "Codes genereren", + "generate": "Genereren", + "getCodes": "Codes verkrijgen", + "webhooks": "Webhooks", + "enabled": "Ingeschakeld", + "webhookURL": "Webhook-URL", + "add": "Toevoegen", + "buyGemsGoldCap": "Capaciteit verhoogd naar <%= amount %>", + "mysticHourglass": "<%= amount %> mystieke zandloper(s)", + "mysticHourglassText": "Met mystieke zandlopers kun je abonnee-uitrusting uit eerdere maanden kopen.", + "purchasedPlanId": "Terugkerend $<%= price %> elke <%= months %> maand(en) (<%= plan %>)", + "purchasedPlanExtraMonths": "Je hebt <%= months %> maanden abonnementkrediet.", + "consecutiveSubscription": "Opeenvolgende abonnementen: ", + "consecutiveMonths": "Opeenvolgende maanden:", + "gemCapExtra": "Extra edelsteencapaciteit:", + "mysticHourglasses": "Mystieke zandlopers:", + "paypal": "PayPal", + "amazonPayments": "Amazon-betalingen", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/nl/subscriber.json b/common/locales/nl/subscriber.json index 2963bce2c5..17c088ed67 100644 --- a/common/locales/nl/subscriber.json +++ b/common/locales/nl/subscriber.json @@ -17,12 +17,12 @@ "groupPlans": "Zakelijk abonnement", "indivPlan1": "Voor particulieren is het spelen van Habitica gratis. Zelfs voor kleine belangengroepen kunnen de gratis (of goedkope)", "indivPlan2": "worden gebruikt om deelnemers te motiveren hun gedrag te veranderen. Denk aan schrijversgroepen, kunstuitdagingen, en meer.", - "groupText1": "Maar sommige groepsleiders willen meer controle, privacy, veiligheid en ondersteuning. Voorbeelden van zulke groepen zijn families, gezondheids- en welzijnsgroepen, werknemersgroepen, en meer. Deze plannen bieden particuliere instanties van Habitica voor jouw groep of organisatie, veilig en onafhankelijk van", + "groupText1": "Maar sommige groepsleiders willen meer controle, privacy, veiligheid en ondersteuning. Voorbeelden van zulke groepen zijn families, gezondheids- en welzijnsgroepen, werknemersgroepen, en meer. Deze plannen geven jouw groep of organisatie een particuliere instantie van Habitica, veilig en onafhankelijk van", "groupText2": "Zie hieronder voor aanvullende voordelen van de plannen, en neem contact op voor meer informatie!", "planFamily": "Familie (binnenkort verkrijgbaar)", "planGroup": "Groep (binnenkort verkrijgbaar)", "dedicatedHost": "Dedicated hosting", - "dedicatedHostText": "Dedicated hosting: je eigen database en server worden gehost door Habitica; een andere optie is dat we Habitica op het netwerk van jouw organisatie installeren. Indien dit niet aangevinkt wordt, gebruikt het plan \"gedeelde hosting\": je organisatie gebruikt dezelfde database als de normale Habitica terwijl de database onafhankelijk Habitica uitvoert. Je leden zijn afgeschermd van de herberg en de gildes, maar zijn nog steeds op dezelfde server/database.", + "dedicatedHostText": "Dedicated hosting: je eigen database en server worden gehost door Habitica; een andere optie is dat we Habitica op het netwerk van jouw organisatie installeren. Indien deze optie niet aangevinkt wordt, gebruikt het plan \"gedeelde hosting\": je organisatie gebruikt dezelfde database als de normale Habitica terwijl de database onafhankelijk Habitica uitvoert. Je leden zijn afgeschermd van de herberg en de gildes, maar zitten nog steeds op dezelfde server/database.", "individualSub": "Individueel abonnement", "subscribe": "Abonnement nemen", "subscribed": "Geabonneerd", @@ -31,7 +31,7 @@ "adminSub": "Beheerdersabonnementen", "morePlans": "Meer plannen
binnenkort verwacht", "organizationSub": "Privéorganisatie", - "organizationSubText": "Leden van de organisatie nemen deel buiten de normale Habitica, wat voor focus voor je deelnemers zorgt.", + "organizationSubText": "Leden van de organisatie kunnen meedoen buiten de normale Habitica om, wat ervoor zorgt dat ze zich beter kunnen focussen.", "hostingType": "Type hosting", "hostingTypeText": "Gedeeld hosten betekent dat je organisatie dezelfde database gebruikt als de normale Habitica, hoewel je geen interactie hebt met Habitica. Dedicated betekent dat je een eigen database en server krijgt. Je kunt ervoor kiezen om Habitica je server/database te laten hosten, of om het op je eigen servers te laten installeren.", "dedicated": "Dedicated", @@ -59,21 +59,21 @@ "timeTravelers": "Tijdreizigers", "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> en <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitle": "Mysterieuze tijdreizigers", - "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.", - "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 <%= linkStart %>here<%= linkEnd %>! 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!", + "timeTravelersPopoverNoSub": "Je hebt een mystieke zandloper nodig om de mysterieuze Tijdreizigers te ontbieden! <%= linkStart %>Abonnees<%= linkEnd %> verdienen een mystieke zandloper voor elke drie maanden van achtereenvolgend lidmaatschap. Kom terug wanneer je een mystieke zandloper hebt en de Tijdreizigers zullen een zeldzaam huisdier, rijdier of set abonnee-artikelen voor je ophalen uit het verleden... of misschien zelfs de toekomst.", + "timeTravelersPopover": "We zien dat je een mystieke zandloper hebt, dus we reizen graag terug in de tijd voor je! Kies het huisdier, rijdier of de verrassingsvoorwerpset die je wilt. Je kunt hier een lijst zien van de voorwerpsets uit het verleden! Als deze je niet bevallen, ben je dan misschien meer geïnteresseerd in een van onze modebewuste futuristische Steampunk voorwerpsets?", + "timeTravelersAlreadyOwned": "Gefeliciteerd! Je bezit alles al dat de Tijdreizigers op dit moment aanbieden. Dankjewel voor het steunen van de site!", + "mysticHourglassPopover": "Met een mystieke zandloper kun je sommige voorwerpen met een beperkte oplage kopen, zoals maandelijkse verrassingsvoorwerpsets en beloningen van Wereldbazen uit het verleden!", "subUpdateCard": "Creditcard aanpassen", "subUpdateTitle": "Aanpassen", "subUpdateDescription": "Verander welke creditcard gebruikt wordt", - "notEnoughHourglasses": "You don't have enough Mystic Hourglasses.", - "hourglassBuyEquipSetConfirm": "Buy this full set of items for 1 Mystic Hourglass?", - "hourglassBuyItemConfirm": "Buy this item for 1 Mystic Hourglass?", - "petsAlreadyOwned": "Pet already owned.", - "mountsAlreadyOwned": "Mount already owned.", - "typeNotAllowedHourglass": "Item type not supported for purchase with Mystic Hourglass. Allowed types:", - "petsNotAllowedHourglass": "Pet not available for purchase with Mystic Hourglass.", - "mountsNotAllowedHourglass": "Mount not available for purchase with Mystic Hourglass.", - "hourglassPurchase": "Purchased an item using a Mystic Hourglass!", - "hourglassPurchaseSet": "Purchased an item set using a Mystic Hourglass!" + "notEnoughHourglasses": "Je hebt niet genoeg mystieke zandlopers.", + "hourglassBuyEquipSetConfirm": "Wil je deze volledige set voorwerpen kopen voor 1 mystieke zandloper?", + "hourglassBuyItemConfirm": "Wil je dit voorwerp kopen voor 1 mystieke zandloper?", + "petsAlreadyOwned": "Je hebt dit huisdier al.", + "mountsAlreadyOwned": "Je hebt dit rijdier al.", + "typeNotAllowedHourglass": "Je kunt dit soort voowerpen niet kopen met een mystieke zandloper. Toegestane soorten:", + "petsNotAllowedHourglass": "Huisdier kan niet worden gekocht met mystieke zandloper.", + "mountsNotAllowedHourglass": "Rijdier kan niet worden gekocht met mystieke zandloper.", + "hourglassPurchase": "Je hebt een voorwerp gekocht met een mystieke zandloper!", + "hourglassPurchaseSet": "Je hebt een set voorwerpen gekocht met een mystieke zandloper!" } \ No newline at end of file diff --git a/common/locales/nl/tasks.json b/common/locales/nl/tasks.json index c003e0e8e4..d78705dcae 100644 --- a/common/locales/nl/tasks.json +++ b/common/locales/nl/tasks.json @@ -39,8 +39,8 @@ "repeat": "Herhalen", "repeatEvery": "Herhaal elke", "repeatHelpTitle": "Hoe vaak moet deze taak herhaald worden?", - "dailyRepeatHelpContent": "Deze taak zal elke X dagen vervallen. Je kan de betreffende waarde hieronder invullen.", - "weeklyRepeatHelpContent": "Deze taak zal vervallen op de onderstaande gemarkeerde dagen. Klik op hem te activeren of deactiveren.", + "dailyRepeatHelpContent": "Deze taak zal elke X dagen gedaan moeten worden. Je kunt de waarde van X hieronder invullen.", + "weeklyRepeatHelpContent": "Deze taak zal op de onderstaande gemarkeerde dagen gedaan moeten zijn. Klik op een dag om hem te activeren of deactiveren.", "repeatDays": "Elke X dagen", "repeatWeek": "Op bepaalde dagen van de week", "day": "Dag", @@ -54,7 +54,7 @@ "complete": "Gedaan", "dated": "Met datum", "due": "Onvoltooid", - "notDue": "Niet vervallen", + "notDue": "Verloopt niet", "grey": "Grijs", "score": "Score", "rewards": "Beloningen", @@ -78,18 +78,17 @@ "streakSingular": "Streaker", "streakSingularText": "Heeft een serie van 21 dagen behaald op een Dagelijkse Taak", "perfectName": "perfecte dagen", - "perfectText": "Heeft alle actieve Dagelijkse Taken binnen één dag voltooid. Met deze prestatie krijg je de volgende dag je een +niveau/2 bonus op alle eigenschappen. Niveaus hoger dan 100 krijgen geen extra effecten op versterkingen.", + "perfectText": "Heeft <%= perfects %> keer alle actieve Dagelijkse Taken voltooid. Met deze prestatie krijg je de volgende dag je een +niveau/2 bonus op alle eigenschappen. Niveaus hoger dan 100 geven geen extra effecten op versterkingen.", "perfectSingular": "Perfecte dag", - "perfectSingularText": "Heeft <%= perfects %> keer alle openstaande Dagelijkse Taken voltooid. Met deze prestatie krijg je de volgende dag een +niveau/2 bonus op alle eigenschappen. Niveaus hoger dan 100 krijgen geen extra effecten op versterkingen.", + "perfectSingularText": "Je hebt alle openstaande Dagelijkse Taken voltooid in één dag. Met deze prestatie krijg je de volgende dag een +niveau/2 bonus op alle eigenschappen. Niveaus hoger dan 100 geven geen extra effecten op versterkingen.", "streakerAchievement": "Je hebt de \"Streaker\"-prestatie verkregen! Een taak 21 dagen achter elkaar uitvoeren is een mijlpaal voor gewoontevorming. Deze prestatie wordt verhoogd voor elke bijkomende 21 dagen, voor deze Dagelijkse Taak of een andere.", "fortifyName": "Versterkingsdrankje", "fortifyPop": "Geeft alle taken een neutrale waarde (gele kleur), en herstelt alle verloren gezondheidspunten.", "fortify": "Versterk", - "fortifyText": "Versterken brengt al je taken terug tot een neutrale (gele) staat, alsof je ze net toegevoegd hebt, en vult je gezondheidsbalk weer helemaal. Dit is geweldig wanneer al je rode taken het spel te moeilijk maken, of wanneer al je blauwe taken het te makkelijk maken. Als een frisse start bemoedigend klinkt, geef dan een paar edelstenen uit en haal opgelucht adem!", + "fortifyText": "Versterken brengt al je taken terug tot een neutrale (gele) staat, alsof je ze net toegevoegd hebt, en vult je gezondheidsbalk weer helemaal aan. Dit is geweldig wanneer al die rode taken het spel te moeilijk maken, of wanneer al je blauwe taken het te makkelijk maken. Als een frisse start bemoedigend klinkt, geef dan een paar edelstenen uit en haal opgelucht adem!", "sureDelete": "Weet je zeker dat je deze taak wilt verwijderen?", "streakCoins": "seriebonus!", - "pushTaskToTop": "Taak bovenaan zetten", - "pushTaskToBottom": "Taak onderaan zetten", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "Voer eerst de titel van de taak in.", "dailiesRestingInInn": "Je bent aan het uitrusten in de Herberg! Je dagelijkse tagen doen je vannacht GEEN schade, maar ze zullen WEL iedere dag verversen. Als je op een queeste bent, dan doe je geen schade/verzamel je geen voorwerpen tot je uitcheckt, maar je kunt nog steeds schade krijgen van een eindbaas als je groepsleden hun dagelijkse taken overslaan.", "habitHelp1": "Goede gewoontes zijn dingen die je vaak doet. Ze belonen je met goud en ervaringspunten elke keer dat je op <%= plusIcon %> klikt.", diff --git a/common/locales/pl/backgrounds.json b/common/locales/pl/backgrounds.json index ff32996928..9867ed5cd8 100644 --- a/common/locales/pl/backgrounds.json +++ b/common/locales/pl/backgrounds.json @@ -100,23 +100,37 @@ "backgroundSunkenShipNotes": "Badaj zatopiony statek.", "backgrounds082015": "ZESTAW 15: Opublikowany w sierpniu 2015", "backgroundPyramidsText": "Piramidy", - "backgroundPyramidsNotes": "Podziwiaj piramidy", + "backgroundPyramidsNotes": "Podziwiaj piramidy.", "backgroundSunsetSavannahText": "Sawanna Zachodzącego Słońca", - "backgroundSunsetSavannahNotes": "Buszuj po Sawannie Zachodzącego Słońca", + "backgroundSunsetSavannahNotes": "Buszuj po Sawannie Zachodzącego Słońca.", "backgroundTwinklyPartyLightsText": "Migotliwe imprezowe światełka", "backgroundTwinklyPartyLightsNotes": "Tańcz w blasku migotliwych imprezowych światełek!", "backgrounds092015": "ZESTAW 16: Opublikowany we Wrześniu 2015", - "backgroundMarketText": "Targowisko Habitici", - "backgroundMarketNotes": "Stragan na Targowisku Habitici.", - "backgroundStableText": "Stajnia Habitici", - "backgroundStableNotes": "Namiot wierzchowców w Stajni Habitici.", - "backgroundTavernText": "Karczma Habitici", - "backgroundTavernNotes": "Odwiedź Karczmę Habitici.", - "backgrounds102015": "SET 17: Released October 2015", - "backgroundHarvestMoonText": "Harvest Moon", - "backgroundHarvestMoonNotes": "Cackle under the Harvest Moon.", - "backgroundSlimySwampText": "Slimy Swamp", - "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", - "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgroundMarketText": "Targowisko Habitiki", + "backgroundMarketNotes": "Stragan na Targowisku Habitiki.", + "backgroundStableText": "Stajnia Habitiki", + "backgroundStableNotes": "Namiot wierzchowców w Stajni Habitiki.", + "backgroundTavernText": "Karczma Habitiki", + "backgroundTavernNotes": "Odwiedź Karczmę Habitiki.", + "backgrounds102015": "ZESTAW 17: Opublikowany w październiku 2015", + "backgroundHarvestMoonText": "Dożynkowy Księżyc", + "backgroundHarvestMoonNotes": "Rechocz w świetle Dożynkowego Księżyca.", + "backgroundSlimySwampText": "Grząskie Bagno", + "backgroundSlimySwampNotes": "Przedzieraj się przez Grząskie Bagno", + "backgroundSwarmingDarknessText": "Zarojona Ciemność", + "backgroundSwarmingDarknessNotes": "Drżyj w Zarojonej Ciemności", + "backgrounds112015": "ZESTAW 18: Opublikowany w listopadzie 2015", + "backgroundFloatingIslandsText": "Latające Wyspy", + "backgroundFloatingIslandsNotes": "Skacz przez Latające Wyspy.", + "backgroundNightDunesText": "Nocne wydmy", + "backgroundNightDunesNotes": "Wybierz się na spacer przez Nocne Wydmy.", + "backgroundSunsetOasisText": "Oaza o zachodzie słońca", + "backgroundSunsetOasisNotes": "Odpocznij w oazie o zachodzie słońca.", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/pl/challenge.json b/common/locales/pl/challenge.json index fe40bd8f8e..de7998d9c4 100644 --- a/common/locales/pl/challenge.json +++ b/common/locales/pl/challenge.json @@ -43,8 +43,8 @@ "exportChallengeCSV": "Eksportuj do pliku CSV", "selectGroup": "Wybierz grupę", "challengeCreated": "Wyzwanie zostało stworzone", - "sureDelCha": "Are you sure you want to delete this challenge?", - "sureDelChaTavern": "Are you sure you want to delete this challenge? Your gems will not be refunded.", + "sureDelCha": "Czy na pewno chcesz usunąć to wyzwanie?", + "sureDelChaTavern": "Czy na pewno chcesz usunąć to wyzwanie? Twoje klejnoty nie zostaną zwrócone.", "removeTasks": "Usuń zadania", "keepTasks": "Zachowaj zadania", "closeCha": "Zakończ wyzwanie i...", @@ -57,7 +57,11 @@ "prizeValue": "<%= gemcount %> <%= gemicon %> Nagroda", "clone": "Klon", "challengeNotEnoughGems": "Nie masz wystarczającej ilości klejnotów, by wystawić to wyzwanie.", - "noPermissionEditChallenge": "You don't have permissions to edit this challenge", - "noPermissionDeleteChallenge": "You don't have permissions to delete this challenge", - "noPermissionCloseChallenge": "You don't have permissions to close this challenge" + "noPermissionEditChallenge": "Nie posiadasz uprawnień, by edytować to wyzwanie", + "noPermissionDeleteChallenge": "Nie posiadasz uprawnień, by usunąć to wyzwanie", + "noPermissionCloseChallenge": "Nie posiadasz uprawnień, by zamknąć to wyzwanie", + "congratulations": "Gratulacje!", + "hurray": "Hurra!", + "noChallengeOwner": "brak właściciela", + "noChallengeOwnerPopover": "To wyzwanie nie posiada właściciela, ponieważ osoba zakładająca to wyzwanie usunęła swoje konto." } \ No newline at end of file diff --git a/common/locales/pl/character.json b/common/locales/pl/character.json index 84717d0070..cb429a33c3 100644 --- a/common/locales/pl/character.json +++ b/common/locales/pl/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "Premia klasowa", "battleGear": "Wyposażenie bojowe", "battleGearText": "Z tym wyposażeniem ruszasz do boju. Ma ono wpływ na punkty podczas interakcji z zadaniami.", + "autoEquipBattleGear": "Automatycznie załóż nowe wyposażenie", "costume": "Kostium", "costumeText": "Jeśli podoba Ci się inny strój, niż ten, w którym chcesz walczyć, zaznacz \"Załóż kostium\". Odziana w kostium, Twoja postać będzie nadal miała pod spodem wybrany strój bojowy.", "useCostume": "Załóż kostium", @@ -64,6 +65,10 @@ "ultimGearText": "Zdobył najpotężniejsze uzbrojenie następujących klas:", "level": "Poziom", "levelUp": "Zyskujesz poziom!", + "gainedLevel": "Zdobyłeś poziom!", + "leveledUp": "Realizując cele życia codziennego, osiągnąłeś poziom <%= level %>!", + "fullyHealed": "Zostałeś całkowicie uleczony!", + "huzzah": "Taaak!", "mana": "Mana", "hp": "PZ", "mp": "PM", @@ -77,7 +82,7 @@ "allocatePerPop": "Dodaj punkt do Percepcji", "allocateInt": "Punkty przydzielone do Inteligencji:", "allocateIntPop": "Dodaj punkt do Inteligencji", - "noMoreAllocate": "Teraz gdy osiągniesz poziom 100, nie będziesz już zyskiwać punktów atrybutów. Możesz dalej podnosić poziom lub zacząć przygodę nową od poziomu 1 używając Kuli Odrodzenia, dostępnej teraz za darmo na Targu.", + "noMoreAllocate": "Teraz, gdy osiągnąłeś poziom 100, nie będziesz już zyskiwać punktów atrybutów. Możesz dalej podnosić poziom lub zacząć przygodę nową od poziomu 1 używając Kuli Odrodzenia, dostępnej teraz za darmo na Targu.", "stats": "Statystyki", "strength": "Siła", "strengthText": "Siła zwiększa szansę na losowe \"trafienia krytyczne\", a także wpływa na ilość otrzymanego za nie Złota, Doświadczenia i prawdopodobieństwa łupów. Pomaga także zadawać obrażenia bossom.", diff --git a/common/locales/pl/communityguidelines.json b/common/locales/pl/communityguidelines.json index 270c9ed255..6e8d70d444 100644 --- a/common/locales/pl/communityguidelines.json +++ b/common/locales/pl/communityguidelines.json @@ -61,18 +61,18 @@ "commGuideHeadingTrello": "Tablice Trello", "commGuidePara040": "Trello służy jako otwarte forum przeznaczone do dzielenia się sugestiami i prowadzenia dyskusji na temat funkcji strony. Habitiką zarządzają ludzie poprzez różnego rodzaju wkład - wszyscy razem budujemy tę stronę. Trello to system, który nadaje temu szaleństwu metodę. Przez wzgląd na dobro strony starajcie się streszczać swoje myśli w pojedynczych komentarzach, zamiast pisać parę razy z rzędu na tej samej karcie. Jeśli wpadniecie na coś nowego, nie krępujcie się edytować Waszych starych komentarzy. Prosimy, miejcie litość nad tymi z nas, którzy otrzymują powiadomienie za każdym razem, gdy ktoś doda nowy komentarz. Wytrzymałość naszych skrzynek odbiorczych ma swoje granice.", "commGuidePara041": "Habitica używa na Trello pięciu różnych tablic:", - "commGuideList03A": "Main Board (Tablica Główna) koncentruje się na nowych funkcjach HabitRPG. Można na nią wpisywać prośby ich dotyczące oraz głosować w ankietach.", + "commGuideList03A": "Main Board (Tablica Główna) koncentruje się na nowych funkcjach Habitiki. Można na nią wpisywać prośby ich dotyczące oraz głosować w ankietach.", "commGuideList03B": "Mobile Board (Tablica Urządzeń Przenośnych) to miejsce poświęcone funkcjom aplikacji mobilnych. Tutaj przedstawiamy własne pomysły dotyczące tych funkcji i głosujemy na cudze.", - "commGuideList03C": "Pixel Art Board (Tablica Grafiki Pikselowej) to miejsce na dyskusje o grafice pikselowej i umieszczanie własnych prac wykonanych tą techniką dla HabitRPG.", - "commGuideList03D": "Quest Board (Tablica Misji) służy opracowywaniu nowych misji.", + "commGuideList03C": "Pixel Art Board (Tablica Grafiki Pikselowej) to miejsce na dyskusje o grafice pikselowej i umieszczanie własnych prac wykonanych tą techniką dla Habitiki.", + "commGuideList03D": "Quest Board (Tablica Misji) to miejsce do zgłaszania i dyskusji na temat nowych misji.", "commGuideList03E": "Na Wiki Board (Tablica Wiki) wysuwamy propozycje dotyczące zarówno ulepszeń istniejących stron naszej wiki jak i napisania nowych artykułów. ", "commGuidePara042": "Wszystkie mają precyzyjne reguły, a zasady Przestrzeni Publicznych nadal obowiązują. Użytkownicy powinni unikać zbaczania z tematu na tablicach i kartach. Uwierzcie, tablice i bez tego są przepełnione. Przedłużające się dyskusje powinny być przenoszone do Gildii na Zapleczu.", "commGuideHeadingGitHub": "GitHub", "commGuidePara043": "Habitica używa GitHuba do śledzenia bugów i dostarczania kodu.To kuźnia, w której Kowale bez wytchnienia wytwarzają nowe funkcje! Wszystkie reguły Przestrzeni Społecznych w niej także obowiązują.Bądźcie mili wobec Kowali, jako że podtrzymywanie działania strony kosztuje ich wiele pracy. Na Waszą cześć - wiwat, Kowale!", - "commGuidePara044": "Użytkownicy poniżej są członkami repozytorium kodu Habitiki:", + "commGuidePara044": "Użytkownicy poniżej są członkami repozytorium kodu Habitiki:", "commGuideHeadingWiki": "Wiki", "commGuidePara045": " Wiki Habitica zbiera informacje o tej stronie. Wiki posiada fora podobne do Gildii w Habitice. W związku z tym, wszystkie Zasady Przestrzeni Publicznych dotyczą także stron wiki.", - "commGuidePara046": "Wiki Habitica można nazwać bazą danych na temat Habitiki. Jest źródłem informacji na temat funkcji strony, wskazówek do gry, porad, jak przysłużyć się rozwojowi HabitRPG, a także miejscem na reklamę Waszych gildii i drużyn. Umożliwia też głosowanie na tematy.", + "commGuidePara046": "Wiki Habitica można nazwać bazą danych na temat Habitiki. Jest źródłem informacji na temat funkcji strony, wskazówek do gry, porad, jak przysłużyć się rozwojowi Habitiki, a także miejscem na reklamę Waszych gildii i drużyn. Umożliwia też głosowanie na tematy.", "commGuidePara047": "Ponieważ wiki jest obsługiwana przez Wikię, zasady użytkowania Wikii obowiązują dodatkowo oprócz zasad nałożonych przez Habitikę i wiki Habitica.", "commGuidePara048": "Wiki powstaje przez współpracę wszystkich edytorów, wobec czego dochodzą kolejne reguły:", "commGuideList04A": "Propozycje utworzenia nowych stron lub wprowadzenia większych zmian na wiki zgłaszamy na odpowiedniej tablicy na Trello", diff --git a/common/locales/pl/content.json b/common/locales/pl/content.json index a282caec46..2f80067053 100644 --- a/common/locales/pl/content.json +++ b/common/locales/pl/content.json @@ -10,22 +10,22 @@ "dropEggWolfAdjective": "lojalny", "dropEggTigerCubText": "tygrysiątko", "dropEggTigerCubMountText": "tygrys", - "dropEggTigerCubAdjective": "a fierce", + "dropEggTigerCubAdjective": "dziki", "dropEggPandaCubText": "mała panda", "dropEggPandaCubMountText": "panda", - "dropEggPandaCubAdjective": "a gentle", + "dropEggPandaCubAdjective": "łagodna", "dropEggLionCubText": "lwiątko", "dropEggLionCubMountText": "lew", - "dropEggLionCubAdjective": "a regal", + "dropEggLionCubAdjective": "królewski", "dropEggFoxText": "lis", "dropEggFoxMountText": "\nLis", - "dropEggFoxAdjective": "a wily", + "dropEggFoxAdjective": "chytry", "dropEggFlyingPigText": "latająca świnia", "dropEggFlyingPigMountText": "Latająca świnia", - "dropEggFlyingPigAdjective": "a whimsical", + "dropEggFlyingPigAdjective": "urojona", "dropEggDragonText": "smok", "dropEggDragonMountText": "Smok", - "dropEggDragonAdjective": "a mighty", + "dropEggDragonAdjective": "potężny", "dropEggCactusText": "kaktus", "dropEggCactusMountText": "Kaktus", "dropEggCactusAdjective": "kłujący", @@ -43,59 +43,65 @@ "questEggDeerAdjective": "elegancki", "questEggEggText": "jajo", "questEggEggMountText": "koszyk na jajka", - "questEggEggAdjective": "a colorful", + "questEggEggAdjective": "kolorowy", "questEggRatText": "szczur", "questEggRatMountText": "Szczur", - "questEggRatAdjective": "a dirty", + "questEggRatAdjective": "brudny", "questEggOctopusText": "ośmiornica", "questEggOctopusMountText": "Ośmiornica", - "questEggOctopusAdjective": "a slippery", + "questEggOctopusAdjective": "śliska", "questEggSeahorseText": "konik morski", "questEggSeahorseMountText": "Konik morski", - "questEggSeahorseAdjective": "a prize", + "questEggSeahorseAdjective": "cenny", "questEggParrotText": "papuga", "questEggParrotMountText": "Papuga", - "questEggParrotAdjective": "a vibrant", + "questEggParrotAdjective": "jaskrawa", "questEggRoosterText": "kogut", "questEggRoosterMountText": "Kogut", - "questEggRoosterAdjective": "a strutting", + "questEggRoosterAdjective": "dumny", "questEggSpiderText": "pająk", - "questEggSpiderMountText": "Spider", - "questEggSpiderAdjective": "a creepy", + "questEggSpiderMountText": "Pająk", + "questEggSpiderAdjective": "pełzający", "questEggOwlText": "sowa", - "questEggOwlMountText": "Owl", - "questEggOwlAdjective": "a wise", + "questEggOwlMountText": "Sowa", + "questEggOwlAdjective": "mądra", "questEggPenguinText": "Pingwin", - "questEggPenguinMountText": "Penguin", - "questEggPenguinAdjective": "a perspicacious", + "questEggPenguinMountText": "Pingwin", + "questEggPenguinAdjective": "przenikliwy", "questEggTRexText": "tyranozaur", - "questEggTRexMountText": "Tyrannosaur", - "questEggTRexAdjective": "a tiny-armed", + "questEggTRexMountText": "Tyranozaur", + "questEggTRexAdjective": "krótkołapy", "questEggRockText": "kamień", - "questEggRockMountText": "Rock", - "questEggRockAdjective": "a lively", + "questEggRockMountText": "Kamień", + "questEggRockAdjective": "ruchliwy", "questEggBunnyText": "króliczek", - "questEggBunnyMountText": "Bunny", - "questEggBunnyAdjective": "a snuggly", + "questEggBunnyMountText": "Króliczek", + "questEggBunnyAdjective": "przytulaśny", "questEggSlimeText": "piankowy śluz", - "questEggSlimeMountText": "Marshmallow Slime", - "questEggSlimeAdjective": "a sweet", + "questEggSlimeMountText": "Piankowy Śluz", + "questEggSlimeAdjective": "słodki", "questEggSheepText": "owca", - "questEggSheepMountText": "Sheep", - "questEggSheepAdjective": "a woolly", + "questEggSheepMountText": "Owca", + "questEggSheepAdjective": "wełnista", "questEggCuttlefishText": "mątwa", - "questEggCuttlefishMountText": "Cuttlefish", - "questEggCuttlefishAdjective": "przytulaśny", + "questEggCuttlefishMountText": "Mątwa", + "questEggCuttlefishAdjective": "milusia", "questEggWhaleText": "wieloryb", - "questEggWhaleMountText": "Whale", - "questEggWhaleAdjective": "a splashy", + "questEggWhaleMountText": "Wieloryb", + "questEggWhaleAdjective": "pluskający", "questEggCheetahText": "Gepard", - "questEggCheetahMountText": "Cheetah", - "questEggCheetahAdjective": "an honest", + "questEggCheetahMountText": "Gepard", + "questEggCheetahAdjective": "szczery", "questEggHorseText": "Koń", - "questEggHorseMountText": "Horse", - "questEggHorseAdjective": "a galloping", - "eggNotes": "Find a hatching potion to pour on this egg, and it will hatch into <%= eggAdjective(locale) %> <%= eggText(locale) %>.", + "questEggHorseMountText": "Koń", + "questEggHorseAdjective": "galopujący", + "questEggFrogText": "Żaba", + "questEggFrogMountText": "Żaba", + "questEggFrogAdjective": "książęca", + "questEggSnakeText": "Wąż", + "questEggSnakeMountText": "Wąż", + "questEggSnakeAdjective": "wijący się", + "eggNotes": "Znajdź eliksir wyklucia i wylej go na to jajo, a wykluje się z niego <%= eggAdjective(locale) %> <%= eggText(locale) %>. ", "hatchingPotionBase": "Zwyczajny", "hatchingPotionWhite": "Biały", "hatchingPotionDesert": "Pustynny", @@ -106,9 +112,9 @@ "hatchingPotionCottonCandyPink": "Cukierkoworóżowy", "hatchingPotionCottonCandyBlue": "Cukierkowoniebieski", "hatchingPotionGolden": "Złoty", - "hatchingPotionSpooky": "Spooky", + "hatchingPotionSpooky": "Upiorny", "hatchingPotionNotes": "Wylej go na jajko, a wykluje się z niego <%=potText(locale)%>.", - "premiumPotionAddlNotes": "Not usable on quest pet eggs.", + "premiumPotionAddlNotes": "Nie nadaje się do użytku na jajach otrzymanych za misje.", "foodMeat": "Mięso", "foodMilk": "Mleko", "foodPotatoe": "Ziemniak", diff --git a/common/locales/pl/death.json b/common/locales/pl/death.json index 3d74587b26..be8404013b 100644 --- a/common/locales/pl/death.json +++ b/common/locales/pl/death.json @@ -1,13 +1,13 @@ { - "lostAllHealth": "Kończą Ci się punkty zdrowia!", + "lostAllHealth": "Skończyły ci się punkty zdrowia!", "dontDespair": "Nie rozpaczaj!", "deathPenaltyDetails": "Tracisz poziom, złoto i część wyposażenia, ale możesz to wszystko odzyskać przykładając się do pracy. Powodzenia, na pewno dasz radę! ", "refillHealthTryAgain": "Uzupełnij punkty zdrowia i spróbuj jeszcze raz", "dyingOftenTips": "Czy to się często zdarza? Tutaj znajdziesz pewne wskazówki!", "losingHealthWarning": "Ostrożnie - tracisz zdrowie!", - "losingHealthWarning2": "Nie pozwól swojemu zdrowiu spaść do zera! Jeśli to się stanie, to stracisz poziom, złoto i element wyposażenia.", + "losingHealthWarning2": "Nie pozwól swojemu zdrowiu spaść do zera! Jeśli się to stanie, stracisz poziom, złoto i element wyposażenia.", "toRegainHealth": "By odzyskać zdrowie:", - "lowHealthTips1": "Zdobądź poziom, by odzyskać zdrowie!", + "lowHealthTips1": "Zdobądź poziom, by odzyskać pełne zdrowie!", "lowHealthTips2": "Kup Eliksir uzdrawiający z kolumny Nagrody, by przywrócić 15 punktów zdrowia.", "losingHealthQuickly": "Szybko tracisz zdrowie?", "lowHealthTips3": "Niewykonane Codzienne ranią ciebie w nocy, więc uważaj, by na początku nie dodać ich zbyt dużo!", diff --git a/common/locales/pl/defaulttasks.json b/common/locales/pl/defaulttasks.json index 98b429be9c..e689a434c5 100644 --- a/common/locales/pl/defaulttasks.json +++ b/common/locales/pl/defaulttasks.json @@ -1,7 +1,7 @@ { "defaultHabit1Text": "Produktywna praca (kliknij ołówek aby edytować)", "defaultHabit1Notes": "Przykładowe dobre nawyki: + Zjedz warzywo + 15 minut produktywnej pracy", - "defaultHabit2Text": "Jedz śmiecowe jedzenie (kliknij ołówek aby edytować)", + "defaultHabit2Text": "Jedz śmieciowe jedzenie (kliknij ołówek aby edytować)", "defaultHabit2Notes": "Przykładowe złe Nawyki: - Palenie - Odkładanie na później", "defaultHabit3Text": "Wybierz schody/windę (kliknij ołówek aby edytować)", "defaultHabit3Notes": "Przykładowe dobre i złe Nawyki: +/- Użyj schodów/windy ; +/- Wypij wodę/napój gazowany", diff --git a/common/locales/pl/faq.json b/common/locales/pl/faq.json index 195763a40c..2fe68079ab 100644 --- a/common/locales/pl/faq.json +++ b/common/locales/pl/faq.json @@ -2,25 +2,25 @@ "frequentlyAskedQuestions": "Najczęściej Zadawane Pytania", "faqQuestion0": "Jestem zdezorientowany. Gdzie znajdę instrukcję?", "iosFaqAnswer0": "Po pierwsze, ustaw zadania, które chcesz wypełniać w swoim życiu na co dzień. Kiedy wykonujesz zadania i odhaczasz je, zdobywasz doświadczenie i złoto. Złoto służy do kupowania ekwipunku i innych przedmiotów, a także ustawionych przez ciebie nagród. Dzięki doświadczeniu twoja postać zdobywa poziomy i odblokowuje możliwości takie jak hodowla chowańców, zdobywanie umiejętności i wypełnianie misji. Swoją postać możesz personalizować w Menu > personanizuj awatar.\nPodstawowe sposoby na iterakcję: kliknij (+) w prawym górnym rogu aby dodać nowe zadanie. Puknij w istniejące zadanie aby je edytować. Przeciągnij zadanie w lewo aby je usunąć. Możesz sortować swoje zadania w lewym górnym rogu. ", - "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, the wiki has an excellent step-by-step overview of the game [right here](http://habitica.wikia.com/wiki/Habitica_Wiki).", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", "faqQuestion1": "Jak ustawić swoje zadania?", - "iosFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.", - "webFaqAnswer1": "Good Habits (the ones with a ) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a ) are tasks that you should avoid, like biting nails. Habits with a and a have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n

\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n

\n To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.", + "iosFaqAnswer1": "Dobre Nawyki (oznaczone +) to zadania, które możesz wykonać kilka razy dziennie, np. jedzenie warzyw. Złe Nawyki (oznaczone -) to czynności, których powinieneś unikać, takie jak obgryzanie paznokci. Nawyki z plusem oraz minusem symbolizują dobry lub zły wybór, np. wyjście do góry po schodach w przeciwieństwie do wyjechania windą. Dobre Nawyki nagrodzą cię Doświadczeniem i Złotem. Złe Nawyki zmniejszą twoje zdrowie.\n\nCodzienne to zadania, które musisz wykonać każdego dnia, takie jak umycie zębów lub sprawdzenie poczty elektronicznej. Możesz zmienić w jakie dni powinieneś ukończyć Codzienny klikając na dane zadanie. Jeśli pominiesz Codziennie zadanie zaplanowane na dzisiaj twój awatar w nocy otrzyma obrażenia. Uważaj by nie dodać zbyt wielu Codziennych naraz!\n\nDo-Zrobienia stanowią twoją listę zadań do wykonania. Za ukończenie Do-Zrobienia zyskujesz Złoto oraz Doświadczenie. Nigdy nie stracisz punktów zdrowia z powodu zadań Do-Zrobienia. Możesz ustalić ostateczny termin wykonania tego zadania klikając na nie w celu edycji.", + "webFaqAnswer1": "Dobre Nawyki (oznaczone ) to zadania, które możesz wykonać kilka razy dziennie, np. jedzenie warzyw. Złe Nawyki (oznaczone ) to czynności, których powinieneś unikać, takie jak obgryzanie paznokci. Nawyki z oraz symbolizują dobry lub zły wybór, np. wyjście do góry po schodach w przeciwieństwie do wyjechania windą. Dobre Nawyki nagrodzą cię Doświadczeniem i Złotem. Złe Nawyki zmniejszą twoje zdrowie.\n

\nCodzienne to zadania, które musisz wykonać każdego dnia, takie jak umycie zębów lub sprawdzenie poczty elektronicznej. Możesz zmienić w jakie dni powinieneś ukończyć Codzienny klikając na dane zadanie. Jeśli pominiesz Codziennie zadanie zaplanowane na dzisiaj twój awatar w nocy otrzyma obrażenia. Uważaj by nie dodać zbyt wielu Codziennych naraz!\n

\nDo-Zrobienia stanowią twoją listę zadań do wykonania. Za ukończenie Do-Zrobienia zyskujesz Złoto oraz Doświadczenie. Nigdy nie stracisz punktów zdrowia z powodu zadań Do-Zrobienia. Możesz ustalić ostateczny termin wykonania tego zadania klikając na nie w celu edycji.", "faqQuestion2": "Jakie są przykładowe zadania?", "iosFaqAnswer2": "Na wiki są cztery listy przykładowych zadań jako inspiracja:\n

\n*[Przykładowe Nawyki](http://habitica.wikia.com/wiki/Sample_Habits)\n*[Przykładowe Codzienne](http://habitica.wikia.com/wiki/Sample_Dailies)\n*[Przykładowe Do-Zrobienia](http://habitica.wikia.com/wiki/Sample_To-Dos)\n*[Przykładowe losowe nagrody](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", - "webFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", + "webFaqAnswer2": "Wiki ma cztery listy przykładowych zadań, które możesz wykorzystać jako inspirację\n* [Przykładowe Nawyki](http://habitica.wikia.com/wiki/Sample_Habits)\n* [Przykładowe Codzienne](http://habitica.wikia.com/wiki/Sample_Dailies)\n* [Przykładowe Do-Zrobienia](http://habitica.wikia.com/wiki/Sample_To-Dos)\n* [Przykładowe Nagrody](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", "faqQuestion3": "Dlaczego moje zadania zmieniają kolory?", - "iosFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it's a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", - "webFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it’s a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", + "iosFaqAnswer3": "Twoje zadania zmieniają kolor w zależności od tego, jak dobrze idzie ci ich wypełnianie! Każde nowe zadanie ma na początku kolor żółty. Wypełniaj Codzienne albo dobre Nawyki częściej, a będą coraz bardziej niebieskie. Opuść Codzienne lub poddaj się złemu Nawykowi, a zadanie będzie coraz bardziej czerwone. Im więcej czerwieni, tym większą nagrodę zdobędziesz za to zadanie, ale jeśli to Codzienne albo zły Nawyk, tym bardziej cię zrani! To pomaga motywować cię do wypełniania zadań, które sprawiają ci kłopot.", + "webFaqAnswer3": "Twoje zadania zmieniają kolor w zależności od tego, jak dobrze idzie ci ich wypełnianie! Każde nowe zadanie ma na początku kolor żółty. Wypełniaj Codzienne albo dobre Nawyki częściej, a będą coraz bardziej niebieskie. Opuść Codzienne lub poddaj się złemu Nawykowi, a zadanie będzie coraz bardziej czerwone. Im więcej czerwieni, tym większą nagrodę zdobędziesz za to zadanie, ale jeśli to Codzienne albo zły Nawyk, tym bardziej cię zrani! To pomaga motywować cię do wypełniania zadań, które sprawiają ci kłopot.", "faqQuestion4": "Dlaczego mój awatar stracił zdrowie i jak je odzyskać?", - "iosFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you tap a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your Party and one of your Party mates did not complete all their Dailies, the Boss will attack you.\n\n The main way to heal is to gain a level, which restores all your health. You can also buy a Health Potion with gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a Party with a Healer, they can heal you as well.", - "webFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you click a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your party and one of your party mates did not complete all their Dailies, the Boss will attack you.\n

\n The main way to heal is to gain a level, which restores all your Health. You can also buy a Health Potion with Gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a party (under Social > Party) with a Healer, they can heal you as well.", + "iosFaqAnswer4": "Jest kilka rzeczy, które mogą zadać ci obrażenia. Po pierwsze, jeśli nie wypełnisz Codziennego zadania do końca dnia. Po drugie, jeśli poddasz się złemu Nawykowi. Po trzecie, jeśli walczysz z bossem w swojej drużynie i jeden z jej członków nie wypełnił swojego Codziennego, wtedy boss cię zaatakuje.\n\nGłównym sposobem leczenia się jest zdobycie poziomu, co przywraca całe zdrowie. Możesz też zapłacić złotem za eliksir zdrowia z kolumny Nagrody. Poza tym, od poziomu 10. wzwyż, możesz stać się Uzdrowicielem, a wtedy nauczysz się leczenia. Jeśli masz w drużynie Uzdrowiciela, też może cię wyleczyć.", + "webFaqAnswer4": "Jest kilka rzeczy, które mogą zadać ci obrażenia. Po pierwsze, jeśli nie wypełnisz Codziennego zadania do końca dnia. Po drugie, jeśli poddasz się złemu Nawykowi. Po trzecie, jeśli walczysz z bossem w swojej drużynie i jeden z jej członków nie wypełnił swojego Codziennego, wtedy boss cię zaatakuje.\n

\nGłównym sposobem leczenia się jest zdobycie poziomu, co przywraca całe zdrowie. Możesz też zapłacić złotem za eliksir zdrowia z kolumny Nagrody. Poza tym, od poziomu 10. wzwyż, możesz stać się Uzdrowicielem, a wtedy nauczysz się leczenia. Jeśli masz w drużynie (Społeczność > Drużyna) Uzdrowiciela, też może cię wyleczyć.", "faqQuestion5": "Jak grać w Habiticę z moimi przyjaciółmi?", - "iosFaqAnswer5": "The best way is to invite them to a Party with you, via the [website](https://habitica.com/#/options/groups/party)! We'll add the ability to create a Party from this app soon, but in the meantime you can use the [website](https://habitica.com/#/options/groups/party). Parties can go on quests, battle monsters, and cast skills to support each other. On the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", - "webFaqAnswer5": "The best way is to invite them to a party with you, under Social > Party! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n

\n For more detailed info, check out the wiki pages on [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).", + "iosFaqAnswer5": "Najlepszy sposób to zaproszenie ich do twojej drużyny! W drużynie można wypełniać misje, walczyć z potworami i używać umiejętności, aby wzajemnie się wspierać. Wejdź w Menu > Drużyna i kliknij \"Załóż Drużynę\", jeśli jeszcze nie masz drużyny. Następnie kliknij w listę członków, a potem w Zaproś w prawym górnym rogu, aby zaprosić swoich przyjaciół, wpisując ich ID użytkownika (ciąg liczb i znaków, który mogą znaleźć w Ustawienia > Szczegóły konta w aplikacji lub Ustawienia > API na stronie). Na stronie możesz też zaprosić przyjaciół przez email, co dodamy do aplikacji w przyszłej aktualizacji.\n\nNa stronie ty i twoi przyjaciele możecie też dołączyć do gildii, czyli publicznych czatów. Gildie zostaną dodane w aplikacji w przyszłej aktualizacji!", + "webFaqAnswer5": "Najlepszy sposób to zaproszenie ich do Twojej drużyny, przez Społeczność > Drużyna! W drużynie można wypełniać misje, walczyć z potworami i używać umiejętności aby wspierać się wzajemnie. Możecie również razem dołączyć do gildii (Społeczność > Gildie). Gildie są publicznymi czatami, poświęconymi wspólnym zainteresowaniom lub celom i mogą być publiczne lub prywatne. Możesz dołączyć do dowolnej liczby gildii, ale tylko do jednej drużyny. \n

\nAby uzyskac szczegółowe informacje, zajrzyj na strony wiki: [Drużyny](http://habitrpg.wikia.com/wiki/Party) i [Gildie](http://habitrpg.wikia.com/wiki/Guilds).", "faqQuestion6": "Jak zdobyć chowańca albo wierzchowca?", - "iosFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch Egg.\" Then choose a hatching potion to determine its color! Go to Menu > Pets to equip your new Pet to your avatar by clicking on it. \n\n You can also grow your Pets into Mounts by feeding them under Menu > Pets. Tap on a Pet, and then select \"Feed Pet\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Menu > Mounts and tap on it to equip it to your avatar.\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", - "webFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Inventory > Market.\n

\n To hatch a Pet, you'll need an egg and a hatching potion. Click on the egg to determine the species you want to hatch, and then click on the hatching potion to determine its color! Go to Inventory > Pets to equip it to your avatar by clicking on it.\n

\n You can also grow your Pets into Mounts by feeding them under Inventory > Pets. Click on a Pet, and then click on a piece of food from the right-hand menu to feed it! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Inventory > Mounts and click on it to equip it to your avatar.\n

\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", + "iosFaqAnswer6": "Na poziomie 3. odblokujesz system zdobyczy. Za każdym razem, gdy ukończysz zadanie, dostaniesz szansę na zdobycie jaja, eliksiru wyklucia lub jedzenia. Znajdziesz je w Menu > Przedmioty.\n\nAby wykluć Chowańca, potrzebujesz jaja oraz eliksiru wyklucia. Kliknij na jajo aby wybrać gatunek, jaki chcesz wykluć, a potem na \"Wykluj Jajo\". Następnie wybierz eliksir wyklucia, aby wybrać jego kolor! Idź do Menu > Chowańce aby dodać swojego nowego Chowańca do swojego awatara, klikając na niego.\n\nMożesz też sprawić, że twój Chowaniec wyrośnie na Wierzchowca, karmiąc go w Menu > Chowańce. Kliknij na Chowańca, a potem na \"Nakarm Chowańca\"! Musisz nakarmić Chowańca dużo razy, zanim stanie się Wierzchowcem, ale jeśli odnajdziesz jego ulubione jedzenie, będzie szybciej rósł. Możesz to zrobić metodą prób i błędów albo [skorzystać z podpowiedzi](http://habitica.wikia.com/wiki/Food#Food_Preferences). Gdy już masz Wierzchowca, idź do Menu > Wierzchowce i kliknij na niego, aby twój awatar go dosiadł.\n\nMożesz też otrzymać jaja Chowańców z Misji, kończąc niektóre Misje. (Patrz niżej, aby dowiedzieć się więcej o Misjach).", + "webFaqAnswer6": "Na poziomie 3. odblokujesz system zdobyczy. Za każdym razem, gdy ukończysz zadanie, dostaniesz szansę na zdobycie jaja, eliksiru wyklucia lub jedzenia. Znajdziesz je w Ekwipunek > Targ.\n

\nAby wykluć Chowańca, potrzebujesz jaja oraz eliksiru wyklucia. Kliknij na jajo aby wybrać gatunek, jaki chcesz wykluć, a potem na \"Wykluj Jajo\". Następnie wybierz eliksir wyklucia, aby wybrać jego kolor! Idź do Ekwipunek > Chowańce aby dodać swojego nowego Chowańca do swojego awatara, klikając na niego.\n

\nMożesz też sprawić, że twój Chowaniec wyrośnie na Wierzchowca, karmiąc go w Ekwipunek > Chowańce. Kliknij na Chowańca, a potem na jedzeniu w menu z prawej strony, aby go nakarmić! Musisz nakarmić Chowańca dużo razy, zanim stanie się Wierzchowcem, ale jeśli odnajdziesz jego ulubione jedzenie, będzie szybciej rósł. Możesz to zrobić metodą prób i błędów albo [skorzystać z podpowiedzi](http://habitica.wikia.com/wiki/Food#Food_Preferences). Gdy już masz Wierzchowca, idź do Ekwipunek > Wierzchowce i kliknij na niego, aby twój awatar go dosiadł.\n

\nMożesz też otrzymać jaja Chowańców z Misji, kończąc niektóre Misje. (Patrz niżej, aby dowiedzieć się więcej o Misjach).", "faqQuestion7": "Jak zostać Wojownikiem, Magiem, Złodziejem lub Uzdrowicielem?", "iosFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their Party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most gold and find the most item drops, and they can help their Party do the same. Finally, Healers can heal themselves and their Party members.\n\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click “Decide Later” and choose later under Menu > Choose Class.", "webFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most Gold and find the most item drops, and they can help their party do the same. Finally, Healers can heal themselves and their party members.\n

\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click \"Opt Out\" and re-enable it later under User > Stats.", @@ -28,7 +28,7 @@ "iosFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Use Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in a special section in the Rewards Column. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You’ll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "faqQuestion9": "Jak walczyć z bossami i wykonywać misje?", - "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party on the [website](https://habitica.com/#/options/groups/party), you'll be rewarded with the Basi-List Scroll! (We will add this feature to the app in a future update.)\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for gold and gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", + "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for Gold and Gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "webFaqAnswer9": "First, you need to join or start a party (under Social > Party). Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n

\n Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are three ways to get a scroll:\n

\n * When you invite people to your party, you’ll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Page (Inventory > Quests) for Gold and Gems.\n

\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your party at the same time that you damage the Boss.\n

\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "faqQuestion10": "Czym są klejnoty i jak je zdobywać?", "iosFaqAnswer10": "Gems are purchased with real money by tapping on the gem icon in the header. When people buy gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying gems directly, there are three other ways players can gain gems:\n\n * Win a Challenge on the [website](https://habitica.com) that has been set up by another player under Social > Challenges. (We will be adding Challenges to the app in a future update!)\n * Subscribe on the [website](https://habitica.com/#/options/settings/subscription) and unlock the ability to buy a certain number of gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with gems do not offer any statistical advantages, so players can still make use of the app without them!", @@ -36,6 +36,9 @@ "faqQuestion11": "Jak mogę zgłosić błąd lub zaproponować funkcjonalność?", "iosFaqAnswer11": "You can report a bug, request a feature, or send feedback under Menu > Report a Bug and Menu > Send Feedback! We'll do everything we can to assist you.", "webFaqAnswer11": "Bug reports are collected on GitHub. Go to [Help > Report a Bug](https://github.com/HabitRPG/habitrpg/issues/2760) and follow the instructions. Don't worry, we'll get you fixed up soon!\n

\n Feature requests are collected on Trello. Go to [Help > Request a Feature](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) and follow the instructions. Ta-da!", - "iosFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the Tavern chat under Menu > Tavern! We're happy to help.", - "webFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the [Newbies Guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help." + "faqQuestion12": "How do I battle a World Boss?", + "iosFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", + "webFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n

\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n

\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n

\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", + "iosFaqStillNeedHelp": "Jeśli masz pytanie, którego nie ma na tej liście, zadaj je na czacie w Karczmie pod Menu > Karczma! Zawsze jesteśmy chętni do pomocy.", + "webFaqStillNeedHelp": "Jeśli masz pytanie, którego nie ma na tej licie, zadaj je w [Gildii Świeżaków (Newbies Guild)](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! Zawsze jesteśmy chętni do pomocy." } \ No newline at end of file diff --git a/common/locales/pl/front.json b/common/locales/pl/front.json index aa89fb249a..7adb728986 100644 --- a/common/locales/pl/front.json +++ b/common/locales/pl/front.json @@ -68,13 +68,13 @@ "healthSample1": "Wybierz zwykłą wodę/napój gazowany", "healthSample2": "Żuj gumę/pal papierosy", "healthSample3": "Wejdź schodami/pojedź windą", - "healthSample4": "Zjedz zdrowe/szkodliwe jedzenie", + "healthSample4": "Zjedz zdrowe/śmieciowe jedzenie", "healthSample5": "Przelewaj pot przez 1 godz.", "history": "Historia", "infhQuote": "[Habitica] naprawdę pomogła mi poukładać sobie życie na studiach.", "invalidEmail": "Do zresetowania hasła potrzebny jest ważny adres e-mail.", "irishfeet123Quote": "Miałam okropne nawyki związane z porządnym sprzątaniem po posiłkach i rozstawianiem wszędzie kubków. [Habitica] to wyleczyła!", - "joinOthers": "Dołącz do 250,000 osób, które bawią się osiągając cele!", + "joinOthers": "Dołącz do <%= userCount %> osób, które bawią się, osiągając cele!", "kazuiQuote": "Przed [Habitiką] utknęłam na swojej pracy dyplomowej, byłam też niezadowolona ze stanu swojej osobistej dyscypliny wykonywania prac domowych i prowadzenia spraw takich jak nauka słówek czy studiowanie teorii go. Okazało się, że rozbicie zadań na łatwiejsze do wykonania kroki jest wyjątkowo dobrym sposobem na podtrzymywanie motywacji i nieporzucanie pracy.", "landingadminlink": "pakietami dla administratorów", "landingend": "Wciąż nieprzekonany?", @@ -179,5 +179,14 @@ "businessInquiries": "Zapytania biznesowe", "merchandiseInquiries": "Zapytania handlowe", "marketingInquiries": "Zapytania marketingowe/społecznościowe", - "tweet": "Tweetuj" + "tweet": "Tweetuj", + "apps": "Aplikacje", + "notifyAndroidApp": "Chcesz, żebyśmy cię powiadomili, kiedy aplikacja na Androida będzie gotowa? Zapisz się na naszą listę mailingową!", + "checkOutIOSApp": "Wypróbuj naszą nową aplikację na system iOS!", + "imagine1": "Imagine if improving your life were as fun as playing a game.", + "landingCopy1": "Advance in the game by completing your real-life tasks.", + "landingCopy2": "Battle monsters with friends to stay accountable to your goals.", + "landingCopy3": "Join over <%= userCount %> people having fun as they improve their lives.", + "alreadyHaveAccount": "Już mam swoje konto!", + "getStartedNow": "Zacznij teraz!" } \ No newline at end of file diff --git a/common/locales/pl/gear.json b/common/locales/pl/gear.json index 73ba4dc259..faa6180e94 100644 --- a/common/locales/pl/gear.json +++ b/common/locales/pl/gear.json @@ -87,7 +87,7 @@ "weaponSpecialSpringHealerText": "Śliczna kość", "weaponSpecialSpringHealerNotes": "APORT! Zwiększa Inteligencję o <%= int %>. Edycja Limitowana Wiosna 2014.", "weaponSpecialSummerRogueText": "Szabla piracka", - "weaponSpecialSummerRogueNotes": "A niech je dunder świśnie! Wyrzucisz te Codzienne za burtę! Zwiększa siłę o <%= str %>. Edycja Limitowana, lato 2014.", + "weaponSpecialSummerRogueNotes": "A niech je dunder świśnie! Wyrzucisz te Codzienne za burtę! Zwiększa Siłę o <%= str %>. Edycja Limitowana Lato 2014.", "weaponSpecialSummerWarriorText": "Nóż Morski", "weaponSpecialSummerWarriorNotes": "Nie ma takiego zadania ani listy Do-Zrobienia, które stawiłyby opór temu sękatemu nożowi! Zwiększa Siłę o <%= str %>. Edycja Limitowana Lato 2014.", "weaponSpecialSummerMageText": "Chwytak wodorostów", @@ -105,7 +105,7 @@ "weaponSpecialWinter2015RogueText": "Kolec Lodu", "weaponSpecialWinter2015RogueNotes": "Z całą pewnością, zdecydowanie, najzwyczajniej to po prostu leżało sobie na ziemi. Zwiększa Siłę o <%= str %>. Edycja Limitowana Zima 2014-2015.", "weaponSpecialWinter2015WarriorText": "Żelkowy Miecz", - "weaponSpecialWinter2015WarriorNotes": "Ten smakowity miecz prawdopodobnie przyciąga potwory... ale chcesz podjąć wyzwanie! Zwiększa Siłę o <%= str %>. Edycja Limitowana Zimowego Wyposażenia 2014-2015.", + "weaponSpecialWinter2015WarriorNotes": "Ten smakowity miecz prawdopodobnie przyciąga potwory... ale chcesz podjąć wyzwanie! Zwiększa Siłę o <%= str %>. Edycja Limitowana Zima 2014-2015.", "weaponSpecialWinter2015MageText": "Laska zimowego światła", "weaponSpecialWinter2015MageNotes": "Światło kryształu tej laski wypełnia serce radością. Zwiększa Inteligencją o <%= int %> oraz Percepcję o <%= per %>. Edycja Limitowana Zima 2014-2015 .", "weaponSpecialWinter2015HealerText": "Kojące berło", @@ -115,7 +115,7 @@ "weaponSpecialSpring2015WarriorText": "Kościana maczuga", "weaponSpecialSpring2015WarriorNotes": "To prawdziwa kość dla prawdziwie zaciętych piesków i to na pewno nie jest zabawka do gryzienia otrzymana od Sezonowej Czarodziejki, ponieważ kto jest dobrym pieskiem? Ktooo jest dobrym pieskiem?? To Ty!!! Ty jesteś dobrym pieskiem!!! Zwiększa Siłę o <%= str %>. Edycja Limitowana Wiosna 2015.", "weaponSpecialSpring2015MageText": "Magiczna różdzka", - "weaponSpecialSpring2015MageNotes": "Wyczaruj sobie marchewkę tą fantazyjną różdżką. Zwiększa Inteligencję o <%= int %> i Percepcję o <%= per %>. Edycja Limitowana, wiosna 2015.", + "weaponSpecialSpring2015MageNotes": "Wyczaruj sobie marchewkę tą fantazyjną różdżką. Zwiększa Inteligencję o <%= int %> i Percepcję o <%= per %>. Edycja Limitowana Wiosna 2015.", "weaponSpecialSpring2015HealerText": "Kocia grzechotka", "weaponSpecialSpring2015HealerNotes": "Kiedy tym machasz, wytwarza się fascynujący dźwięk kliknięcia, który KAŻDEGO zabawia przez długie godziny. Zwiększa Inteligencję o <%= int %>. Edycja Limitowana Wiosna 2015.", "weaponSpecialSummer2015RogueText": "Strzelający koralowiec", @@ -127,13 +127,13 @@ "weaponSpecialSummer2015HealerText": "Falująca różdżka", "weaponSpecialSummer2015HealerNotes": "Leczy chorobę morską i chorobę na morzu! Zwiększa Inteligencję o <%= int %>. Edycja Limitowana Lato 2015.", "weaponSpecialFall2015RogueText": "Nietoperzy topór", - "weaponSpecialFall2015RogueNotes": "Bojaźliwe Do-Zrobienia chowają się przed machnięciami tego topora. Zwiększa siłę o <%= str $>. Edycja Limitowana, jesień 2015.", + "weaponSpecialFall2015RogueNotes": "Bojaźliwe Do-Zrobienia chowają się przed machnięciami tego topora. Zwiększa Siłę o <%= str $>. Edycja Limitowana Jesień 2015.", "weaponSpecialFall2015WarriorText": "Drewniana deska", - "weaponSpecialFall2015WarriorNotes": "Great for elevating things in cornfields and/or smacking tasks. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "weaponSpecialFall2015MageText": "Enchanted Thread", - "weaponSpecialFall2015MageNotes": "A powerful Stitch Witch can control this enchanted thread without even touching it! Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "weaponSpecialFall2015HealerText": "Swamp-Slime Potion", - "weaponSpecialFall2015HealerNotes": "Brewed to perfection! Now you just have to convince yourself to drink it. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", + "weaponSpecialFall2015WarriorNotes": "Świetna do podnoszenia przedmiotów na polu kukurydzy i/lub miażdżenia zadań. Zwiększa Siłę o <%= str %> Edycja Limitowana Jesień 2015.", + "weaponSpecialFall2015MageText": "Zaczarowana Nić", + "weaponSpecialFall2015MageNotes": "Potężna Wiedźma Szwaczka nawet nie potrzebuje dotykać tej zaczarowanej nici, aby ją kontrolować! Zwiększa Inteligencję o <%= int %> i Percepcję o <%= per %>. Edycja Limitowana Jesień 2015.", + "weaponSpecialFall2015HealerText": "Eliksir z mułu bagiennego", + "weaponSpecialFall2015HealerNotes": "Doskonale uwarzony! Teraz musisz tylko przekonać się do wypicia go. Ponosi Inteligencję o <%= int %>. Edycja Limitowana Jesień 2015.", "weaponMystery201411Text": "Widły Ucztowania", "weaponMystery201411Notes": "Dźgaj swoich wrogów lub rzuć się na ulubione potrawy - te wielofunkcyjne widły nadają się do wszystkiego! Brak dodatkowych korzyści. Przedmiot Abonencki Listopad 2014.", "weaponMystery201502Text": "Lśniąca Skrzydlata Laska Miłości oraz Prawdy", @@ -141,7 +141,7 @@ "weaponMystery201505Text": "Lanca zielonego rycerza", "weaponMystery201505Notes": "Ta zielona i srebrna lanca zdjęła z siodeł ich wierzchowców wielu przeciwników. Brak dodatkowych korzyści. Przedmiot Abonencki Maj 2015.", "weaponMystery301404Text": "Steampunkowa laska", - "weaponMystery301404Notes": "Doskonały na przejażdżkę po mieście. Przedmiot Abonencki Marzec 3015. Brak dodatkowych korzyści.", + "weaponMystery301404Notes": "Doskonała na wycieczkę po mieście. Przedmiot Abonencki Marzec 3015. Brak dodatkowych korzyści.", "weaponArmoireBasicCrossbowText": "Zwyczajna kusza", "weaponArmoireBasicCrossbowNotes": "Ta kusza potrafi przebić pancerz zadania z bardzo daleka! Zwiększa Siłę o <%= str %>, Percepcję o <%= per %> i Kondycję o <%= con %>. Zaczarowana szafa: przedmiot niezależny.", "weaponArmoireLunarSceptreText": "Księżycowe Kojące Berło", @@ -149,13 +149,19 @@ "weaponArmoireRancherLassoText": "Lasso farmerskie", "weaponArmoireRancherLassoNotes": "Lassa: idealne narzędzia do robienia obław i zaganiania. Zwiększają siłę o <%= str %>, percepcję o <%= per %> i inteligencję o <%= int %>. Zaczarowana szafa: zestaw farmerski (przedmiot 3 z 3).", "weaponArmoireMythmakerSwordText": "Miecz Twórca Legend", - "weaponArmoireMythmakerSwordNotes": "To może zabrzmieć nazbyt skromnie, ale dzięki temu mieczowi świat zyskał wielu mitycznych bohaterów. Zwiększa Percepcję i Siłę o <%= attrs %>. Zaczarowana szafa: zestaw Złota Toga (przedmiot 3 z 3).", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Żelazny kij pasterski", - "weaponArmoireIronCrookNotes": "Ukształtowany zaciekłymi uderzeniami młota, ten żelazny pręt zakończony hakiem dobrze się sprawi jako kij pasterski. Poprawia percepcję i siłę o <%= attrs %>. Zaczarowana szafa: Zestaw Rogate Żelazo (przedmiot 3 z 3.)", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Złotoskrzydła laska", "weaponArmoireGoldWingStaffNotes": "Skrzydła tej laski ciągle trzepoczą i skręcają się. Zwiększa wszystkie atrybuty o <%= attrs %>. Zaczarowana szafa: przedmiot niezależny.", "weaponArmoireBatWandText": "Różdżka nietoperza", "weaponArmoireBatWandNotes": "Ta różdżka może zamienić każde zadanie w nietoperza! Pomachaj nią i patrz jak odlatują. Zwiększa inteligencję o <%= int %> i percepcję o <%= per %>. Zaczarowana szafa: przedmiot niezależny.", + "weaponArmoireShepherdsCrookText": "Shepherd's Crook", + "weaponArmoireShepherdsCrookNotes": "Useful for herding gryphons. Increases Constitution by <%= con %>. Enchanted Armoire: Shepherd Set (Item 1 of 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "zbroja", "armorBase0Text": "Zwykłe ubranie", "armorBase0Notes": "Zwyczajne ubranie. Nie ma na nic wpływu.", @@ -210,27 +216,27 @@ "armorSpecialYetiText": "Szata poskramiacza yeti", "armorSpecialYetiNotes": "Puchaty i bezwzględny. Zwiększa Kondycję o <%= con %>. Edycja Limitowana Zima 2013-2014.", "armorSpecialSkiText": "Parka szusującego asasyna", - "armorSpecialSkiNotes": "Pełna ukrytych sztyletów i map tras narciarskich. Zwiększa percepcję o <%= per %>. Edycja Limitowana Zimowego Wyposażenia 2013-2014.", + "armorSpecialSkiNotes": "Pełna ukrytych sztyletów i map tras narciarskich. Zwiększa percepcję o <%= per %>. Edycja Limitowana Zima 2013-2014.", "armorSpecialCandycaneText": "Cukierkowa szata", - "armorSpecialCandycaneNotes": "Utkana z cukru i jedwabiu. Zwiększa inteligencję o <%= int %>. Edycja Limitowana Zimowego Wyposażenia 2013-2014.", + "armorSpecialCandycaneNotes": "Utkana z cukru i jedwabiu. Zwiększa inteligencję o <%= int %>. Edycja Limitowana Zima 2013-2014.", "armorSpecialSnowflakeText": "Szata śnieżynki", - "armorSpecialSnowflakeNotes": "Szata zapewni Ci ciepło nawet podczas zamieci. Podnosi kondycję o <%= con %>. Edycja Limitowana Zimowego Wyposażenia 2013-2014.", + "armorSpecialSnowflakeNotes": "Szata zapewni Ci ciepło nawet podczas zamieci. Podnosi kondycję o <%= con %>. Edycja Limitowana Zima 2013-2014.", "armorSpecialBirthdayText": "Absurdalne szaty imprezowe", "armorSpecialBirthdayNotes": "Wszystkiego najlepszego z okazji urodzin, Habitiko! Załóż Niedorzeczne Szaty Urodzinowe, aby świętować ten wspaniały dzień. Nie dają żadnych korzyści.", "armorSpecialBirthday2015Text": "Głupawe Szaty Urodzinowe", "armorSpecialBirthday2015Notes": "Wszystkiego najlepszego z okazji urodzin, Habitiko! Załóż Głupawe Szaty Urodzinowe, aby świętować ten wspaniały dzień. Nie dają żadnych korzyści.", "armorSpecialGaymerxText": "Zbroja tęczowego wojownika", - "armorSpecialGaymerxNotes": "Aby uczcić porę dumy i konwent GaymerX, ta specjalna zbroja jest przyozdobiona lśniącym, kolorowym wzorem tęczy! GaymerX to konwent poświęcony środowisku LGBTQ i grom komputerowym i jest otwarty dla wszystkich. Odbywa się w InterContinental w centrum San Francisco między 11 a 13 lipca! Nie zapewnia żadnych korzyści.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "Lśniący kostium kota", - "armorSpecialSpringRogueNotes": "Nieskazitelnie zadbany. Dodaje <%= per %> punktów percepcji. Limitowana Edycja Wyposażenia, wiosna 2014.", + "armorSpecialSpringRogueNotes": "Nieskazitelnie zadbany. Dodaje <%= per %> punktów percepcji. Edycja Limitowana Wiosna 2014.", "armorSpecialSpringWarriorText": "Koniczystalowa zbroja", - "armorSpecialSpringWarriorNotes": "Miękka jak koniczyna, mocna jak stal!! Dodaje <%= con %> punktów kondycji. Limitowana Edycja Wyposażenia, wiosna 2014.", + "armorSpecialSpringWarriorNotes": "Miękka jak koniczyna, mocna jak stal!! Dodaje <%= con %> punktów kondycji. Edycja Limitowana Wiosna 2014.", "armorSpecialSpringMageText": "Szczurze szaty", - "armorSpecialSpringMageNotes": "Myszy się słyszy! Dodaje <%= int %> puntów inteligencji. Limitowana Edycja Wyposażenia, wiosna 2014.", + "armorSpecialSpringMageNotes": "Myszy się słyszy! Dodaje <%= int %> puntów inteligencji. Edycja Limitowana Wiosna 2014.", "armorSpecialSpringHealerText": "Szaty kudłatego szczeniaczka", - "armorSpecialSpringHealerNotes": "Ciepłe i przytulne, ale chronią właścicieli przed krzywdą. Dodaje <%= con %> punktów kondycji. Limitowana Edycja Wyposażenia, wiosna 2014.", + "armorSpecialSpringHealerNotes": "Ciepłe i przytulne, ale chronią właścicieli przed krzywdą. Dodaje <%= con %> punktów kondycji. Edycja Limitowana Wiosna 2014.", "armorSpecialSummerRogueText": "Szata pirata", - "armorSpecialSummerRogueNotes": "Do stu diabłów, przytulne te szaty! Dodają <%= str %> punktów percepcji. Limitowana Edycja Wyposażenia, wiosna 2014.", + "armorSpecialSummerRogueNotes": "Do stu diabłów, przytulne te szaty! Dodają <%= str %> punktów percepcji. Edycja Limitowana Wiosna 2014.", "armorSpecialSummerWarriorText": "Szaty zawadiaki", "armorSpecialSummerWarriorNotes": "Komplet z płaszczem, oraz ze szpadą. Zwiększa Kondycję o <%= con %>. Limitowana Edycja Wyposażenia Lato 2014.", "armorSpecialSummerMageText": "Szmaragdowy ogon", @@ -254,7 +260,7 @@ "armorSpecialWinter2015HealerText": "Strój Łyżwiarski", "armorSpecialWinter2015HealerNotes": "Łyżwiarstwo jest bardzo relaksujące, ale nie powinno się go próbować bez ochronnego wyposażenia na wypadek ataku soplowych smoków. Zwiększa kondycję o <%= con %>. Edycja Limitowana Zimowego Wyposażenia 2014-2015.", "armorSpecialSpring2015RogueText": "Piskliwa Szata", - "armorSpecialSpring2015RogueNotes": "Futrzasty, miękki oraz zdecydowanie niełatwopalny. Zwiększa percepcję o<%= per %>. Edycja Limitowana, wiosna 2015.", + "armorSpecialSpring2015RogueNotes": "Futrzana, miękka oraz zdecydowanie niełatwopalna. Zwiększa percepcję o<%= per %>. Edycja Limitowana, wiosna 2015.", "armorSpecialSpring2015WarriorText": "Zbroja \"Strzeż Się\"", "armorSpecialSpring2015WarriorNotes": "Tylko najwaleczniejsze psiaki mogą być tak puszyste. Zwiększa kondycję o <%= con %>. Limitowana Edycja Wiosennego Wyposażenia 2015.", "armorSpecialSpring2015MageText": "Króliczy strój iluzjonisty", @@ -269,14 +275,14 @@ "armorSpecialSummer2015MageNotes": "Ukryta moc drzemie w tych bufiastych rękawach. Zwiększa Inteligencję o <%= int %>. Edycja Limitowana, lato 2015.", "armorSpecialSummer2015HealerText": "Zbroja marynarza", "armorSpecialSummer2015HealerNotes": "Ta zbroja daje wszystkim do zrozumienia, że zarabiasz uczciwym morskim handlem i nigdy by Ci nie przeszło przez myśl łobuzowanie. Zwiększa kondycję o <%= con %>. Edycja Limitowana, lato 2015.", - "armorSpecialFall2015RogueText": "Bat-tle Armor", - "armorSpecialFall2015RogueNotes": "Fly into bat-tle! Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "armorSpecialFall2015WarriorText": "Scarecrow Armor", - "armorSpecialFall2015WarriorNotes": "Despite being stuffed with straw, this armor is extremely hefty! Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", - "armorSpecialFall2015MageText": "Stitched Robes", - "armorSpecialFall2015MageNotes": "Every stitch in this armor shimmers with enchantment. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", + "armorSpecialFall2015RogueText": "Nietoperza Zbroja", + "armorSpecialFall2015RogueNotes": "Leć do walki! Zwiększa Percepcję o <%= per %>. Limitowana Edycja Wyposażenia, jesień 2015.", + "armorSpecialFall2015WarriorText": "Zbroja Stracha na Wróble", + "armorSpecialFall2015WarriorNotes": "Chociaż wypchana słomą, ta zbroja jest niezwykle wytrzymała! Zwiększa Kondycję o <%= con %>. Edycja Limitowana Edycja Jesień 2015.", + "armorSpecialFall2015MageText": "Szyta szata", + "armorSpecialFall2015MageNotes": "Każdy szew w tej zbroi lśni od zaklęć. Zwiększa Inteligencję o <%= int %>. Edycja Limitowana Jesień 2015.", "armorSpecialFall2015HealerText": "Potioner Robes", - "armorSpecialFall2015HealerNotes": "What? Of course that was a potion of constitution. No, you are definitely not turning into a frog! Don't be ribbiticulous. Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", + "armorSpecialFall2015HealerNotes": "Co? Oczywiście, że to był eliksir Kondycji. Nie, na pewno nie zmieniasz się w żabę. Nie kumkam, o co ci chodzi. Zwiększa Kondycję o <%= con %>. Edycja Limitowana Jesień 2015.", "armorMystery201402Text": "Szaty posłańca", "armorMystery201402Notes": "Połyskujące i wytrzymałe, te szaty mają wiele kieszeni na listy. Brak dodatkowych korzyści. Przedmiot Abonencki, luty 2014.", "armorMystery201403Text": "Zbroja przemierzania lasów", @@ -286,9 +292,9 @@ "armorMystery201406Text": "Szata ośmiornicy", "armorMystery201406Notes": "Noszenie tak elastycznej szata sprawia, że możesz prześlizgnąć się nawet przez najmniejszą szczelinę. Brak dodatkowych korzyści. Przedmiot Abonencki, czerwiec 2014.", "armorMystery201407Text": "Strój podmorskiego odkrywcy", - "armorMystery201407Notes": "Opisywany też jako \"pluskaty\", \"za gruby\" i \"szczerze, trochę kłopotliwy\", taki strój jest najlepszym przyjacielem nieustraszonych morskich odkrywców. Przedmiot dla Abonentów z lipca 2014. Nie ma na nic wpływu.", + "armorMystery201407Notes": "Opisywany też jako \"pluskaty\", \"za gruby\" i \"szczerze, trochę kłopotliwy\", taki strój jest najlepszym przyjacielem nieustraszonych morskich odkrywców. Brak dodatkowych korzyści. Przedmiot Abonencki, lipiec 2014.", "armorMystery201408Text": "Szaty Słońca", - "armorMystery201408Notes": "Te szaty są utkane z promieni słońca i złota. Żadnych dodatkowych korzyści. Sierpień 2014. Przedmiot abonencki", + "armorMystery201408Notes": "Te szaty są utkane z promieni słońca i złota. Brak dodatkowych korzyści. Przedmiot Abonencki, sierpień 2014. ", "armorMystery201409Text": "Kamizelka obieżyświata", "armorMystery201409Notes": "Kamizelka pokryta liśćmi zapewnia świetny kamuflaż. Brak dodatkowych korzyści. Przedmiot Abonencki, wrzesień 2014.", "armorMystery201410Text": "Goblińskie wyposażenie", @@ -298,7 +304,7 @@ "armorMystery201501Text": "Gwiaździsta Zbroja", "armorMystery201501Notes": "Galaktyki błyszczą w metalu takich zbrój, wzmacniając determinację walczących. Brak dodatkowych korzyści. Przedmiot Abonencki, styczeń 2015.", "armorMystery201503Text": "Akwamarynowa zbroja", - "armorMystery201503Notes": "Niebieski minerał symbolizuje szczęście, radość oraz wieczną produktywność. Nie daje żadnych korzyści. Marzec 2015 Przedmiot Abonenta.", + "armorMystery201503Notes": "Ten niebieski minerał symbolizuje szczęście, radość oraz wieczną produktywność. Nie daje żadnych korzyści. Przedmiot Abonencki, marzec 2015.", "armorMystery201504Text": "Szata Pracowitej Pszczółki", "armorMystery201504Notes": "W tej uroczej szacie dorównujesz produktywnością pracowitej pszczółce! Brak dodatkowych korzyści. Przedmiot Abonencki, kwiecień 2015.", "armorMystery201506Text": "Kombinezon do nurkowania", @@ -307,6 +313,8 @@ "armorMystery201508Notes": "Biegaj szybko jak błyskawica w tym puszystym kostiumie geparda! Brak dodatkowych korzyści. Przedmiot abonencki, sierpień 2015.", "armorMystery201509Text": "Strój wilkołaka", "armorMystery201509Notes": "To JEST strój, prawda? Brak dodatkowych korzyści. Przedmiot Abonencki, wrzesień 2015.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Steampunkowy garnitur", "armorMystery301404Notes": "Elegancki i stylowy! Brak dodatkowych korzyści. Przedmiot Abonencki, luty 2015.", "armorArmoireLunarArmorText": "Księżycowa Kojąca Zbroja", @@ -321,6 +329,12 @@ "armorArmoireHornedIronArmorNotes": "Ukształtowana zaciekłymi uderzeniami młota, ta żelazna Rogata Zbroja jest prawie niezniszczalna. Poprawia kondycję o <%= con %> i percepcję o <%= per %>. Zaczarowana szafa: Zestaw Rogate Żelazo (przedmiot 2 z 3.)", "armorArmoirePlagueDoctorOvercoatText": "Płaszcz Medyków", "armorArmoirePlagueDoctorOvercoatNotes": "Autentyczny płaszcz noszony przez medyków czasów Plagi Prokrastynacji! Podnosi inteligencję o <%= int %>, siłę o <%= str %> i kondycję o <%= con %>. Zaczarowana szafa: zestaw medyka (przedmiot 3 z 3).", + "armorArmoireShepherdRobesText": "Szata pasterza", + "armorArmoireShepherdRobesNotes": "Jest z chłodnej i przewiewnej tkaniny, świetna do pasania gryfów w gorące pustynne dni. Zwiększa Siłę i Percepcję o <%= attrs %>. Zaczarowana szafa: zestaw pasterza (przedmiot 2 z 3).", + "armorArmoireRoyalRobesText": "Królewskie szaty", + "armorArmoireRoyalRobesNotes": "Panuj nam jak najdłużej, od wiosny aż do zimy! Zwiększa kondycję, inteligencję i percepcję o <%= attrs %>. Zaczarowana Szafa: zestaw królewski (przedmiot 3 z 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "nakrycie głowy", "headBase0Text": "Bez hełmu", "headBase0Notes": "Bez nakrycia głowy.", @@ -432,16 +446,16 @@ "headSpecialSummer2015MageNotes": "Ukryta moc przebłyskuje spomiędzy nici tej apaszki. Zwiększa percepcję o <%= per %>. Edycja Limitowana, lato 2015.", "headSpecialSummer2015HealerText": "Marynarska czapka", "headSpecialSummer2015HealerNotes": "Z tą marynarską czapką pewnie nasadzoną na głowę, możesz nawigować po najburzliwszych morzach! Zwiększa inteligencję o <%= int %>. Edycja Limitowana, lato 2015.", - "headSpecialFall2015RogueText": "Bat-tle Wings", - "headSpecialFall2015RogueNotes": "Echolocate your enemies with this powerful helm! Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "headSpecialFall2015WarriorText": "Scarecrow Hat", - "headSpecialFall2015WarriorNotes": "Everyone would want this hat--if they only had a brain. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "headSpecialFall2015MageText": "Stitched Hat", - "headSpecialFall2015MageNotes": "Every stitch in this hat augments its power. Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "headSpecialFall2015HealerText": "Hat of Frog", + "headSpecialFall2015RogueText": "Nietoperze skrzydła", + "headSpecialFall2015RogueNotes": "Wykorzystaj echolokację, by znaleźć swoich przeciwników! Zwiększa Percepcję o <%= per %>. Limitowana Edycja Wyposażenia, jesień 2015.", + "headSpecialFall2015WarriorText": "Kapelusz Stracha na Wróble.", + "headSpecialFall2015WarriorNotes": "Każdy by taki chciał - gyby tylko miał mózg. Zwiększa Siłę o <%= str %> Limitowana Edycja Jesiennego Wyposażenia 2015.", + "headSpecialFall2015MageText": "Szyty kapelusz", + "headSpecialFall2015MageNotes": "Każdy szew w tym kapeluszu dodaje mu mocy. Zwiększa Percepcję o <%= per %>. Limitowana Edycja Wyposażenia, jesień 2015.", + "headSpecialFall2015HealerText": "Żabi Kapelusz", "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", "headSpecialGaymerxText": "Hełm tęczowego wojownika", - "headSpecialGaymerxNotes": "Aby uczcić porę dumy i konwent GaymerX, ten specjalny hełm jest przyozdobiony lśniącym, kolorowym wzorem tęczy! GaymerX to konwent poświęcony środowisku LGBTQ oraz grom komputerowym i jest otwarty dla każdego. Odbywa się w InterContinental w centrum San Francisco w dniach 11-13 lipca! Brak dodatkowych korzyści.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "Skrzydlaty hełm", "headMystery201402Notes": "Ta skrzydlata opaska przepełnia Cię prędkością wiatru! Brak dodatkowych korzyści. Przedmiot Abonencki, luty 2014.", "headMystery201405Text": "Płomień umysłu", @@ -464,6 +478,8 @@ "headMystery201508Notes": "Ten przytulny kapelusz geparda jest bardzo puchaty! Brak dodatkowych korzyści. Przedmiot abonencki, sierpień 2015.", "headMystery201509Text": "Maska wilkołaka", "headMystery201509Notes": "To JEST maska, prawda? Brak dodatkowych korzyści. Przedmiot Abonencki, wrzesień 2015.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 Subscriber Item.", "headMystery301404Text": "Szykowny cylinder", "headMystery301404Notes": "Fantazyjny cylinder dla najwyżej urodzonych. Przedmiot Abonencki, styczeń 2015. Brak dodatkowych korzyści.", "headMystery301405Text": "Klasyczny cylinder", @@ -481,7 +497,7 @@ "headArmoireBlueHairbowText": "Niebieska kokarda", "headArmoireBlueHairbowNotes": "Zwiększ swą spostrzegawczość, determinację i mądrość dzięki tej pięknej niebieskiej kokardzie! Podnosi percepcję o <%= per %>, kondycję o <%= con %> i inteligencję o <%= int %>. Zaczarowana szafa: przedmiot niezależny.", "headArmoireRoyalCrownText": "Królewska korona", - "headArmoireRoyalCrownNotes": "Niech żyją władcy, potężni i silni! Zwiększa siłę o <%= str %>. Zaczarowana szafa: przedmiot niezależny", + "headArmoireRoyalCrownNotes": "Panuj nam miłościwie, twą siłę i moc sławimy! Zwiększa siłę o <%= str %>. Zaczarowana Szafa: zestaw królewski (przedmiot 1 z 3).", "headArmoireGoldenLaurelsText": "Złoty laur", "headArmoireGoldenLaurelsNotes": "Złoty laur wieńczy czoła tych, co pokonali złe nawyki. Zwiększa percepcję i kondycję o <%= attrs %>. Zaczarowana szafa: zestaw Złota Toga (przedmiot 2 z 3).", "headArmoireHornedIronHelmText": "Żelazny Rogaty Hełm", @@ -492,10 +508,16 @@ "headArmoireRedFloppyHatNotes": "W takie proste kapelusze wszywano wiele czarów, co przydawało im żywej czerwonej barwy. Ten egzepmlarz podnosi kondycję, inteligencję i percepcję o <%= attrs %>. Zaczarowana szafa: przedmiot niezależny.", "headArmoirePlagueDoctorHatText": "Kapelusz Medyków", "headArmoirePlagueDoctorHatNotes": "Autentyczny kapelusz medyka z czasów Plagi Prokrastynacji! Podnosi siłę o <%= str %>, inteligencję o <%= int %> i kondycję o <%= con %>. Zaczarowana szafa: zestaw medyka (przedmiot 1 z 3).", - "headArmoireBlackCatText": "Black Cat Hat", - "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", - "headArmoireOrangeCatText": "Orange Cat Hat", - "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireBlackCatText": "Czarny koci kapelusz", + "headArmoireBlackCatNotes": "Ten czarny kapelusz... mruczy. I macha ogonem. I oddycha? Tak, po prostu masz na głowie śpiącego kota. Zwiększa Inteligencję i Percepcję o <%= attrs %>. Zaczarowana szafa: przedmiot niezależny.", + "headArmoireOrangeCatText": "Rudy koci kapelusz", + "headArmoireOrangeCatNotes": "Ten rudy kapelusz... mruczy. I macha ogonem. I oddycha? Tak, po prostu masz na głowie śpiącego kota. Zwiększa Siłę i Kondycję o <%= attrs %>. Zaczarowana szafa: przedmiot niezależny.", + "headArmoireBlueFloppyHatText": "Blue Floppy Hat", + "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireShepherdHeaddressText": "Shepherd Headdress", + "headArmoireShepherdHeaddressNotes": "Sometimes the gryphons that you herd like to chew on this headdress, but it makes you seem more intelligent nonetheless. Increases Intelligence by <%= int %>. Enchanted Armoire: Shepherd Set (Item 3 of 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "Tarcza", "shieldBase0Text": "Brak tarczy w ekwipunku.", "shieldBase0Notes": "Bez tarczy lub drugiej broni.", @@ -569,16 +591,18 @@ "shieldSpecialSummer2015HealerNotes": "Używaj tej tarczy, by odrzucać daleko szczury zęzowe. Zwiększa kondycję o <%= con %>. Edycja Limitowana, lato 2015.", "shieldSpecialFall2015RogueText": "Topór wojenny", "shieldSpecialFall2015RogueNotes": "Bojaźliwe Do-Zrobienia chowają się przed machnięciami tego topora. Zwiększa siłę o <%= str $>. Edycja Limitowana, jesień 2015.", - "shieldSpecialFall2015WarriorText": "Birdseed Bag", - "shieldSpecialFall2015WarriorNotes": "It's true that you're supposed to be SCARING the crows, but there's nothing wrong with making friends! Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", - "shieldSpecialFall2015HealerText": "Stirring Stick", - "shieldSpecialFall2015HealerNotes": "This stick can stir anything without melting, dissolving, or bursting into flame! It can also be used to fiercely poke enemy tasks. Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", + "shieldSpecialFall2015WarriorText": "Torebka z ziarnem.", + "shieldSpecialFall2015WarriorNotes": "Rzeczywiście powinieneś STRASZYĆ wróble, ale równie dobrze możesz się z nimi zaprzyjaźnić. Zwiększa kondycję o <%= con %>. Edycja Limitowana Wyposażenia, jesień 2015.", + "shieldSpecialFall2015HealerText": "Mieszadło", + "shieldSpecialFall2015HealerNotes": "Ten kij może wymieszać wszystko i nie stopi się, nie rozpuści, ani nie stanie w płomieniach! Możesz go również użyć do zaciekłego trącania wrogich zadań. Zwiększa Kondycję o <%= con %>. Limitowana Edycja Wyposażenia, jesień 2015.", "shieldMystery301405Text": "Tarcza zegarowa", "shieldMystery301405Notes": "Czas jest po Twojej stronie z tą tarczą zegarową. Brak dodatkowych korzyści. Przedmiot Abonencki, czerwiec 2015.", "shieldArmoireGladiatorShieldText": "Tarcza gladiatora", "shieldArmoireGladiatorShieldNotes": "Do bycia gladiatorem nie wystarczy... a, zresztą, po prostu przygrzmoć im tarczą. Zwiększa kondycję o <%= con %> i siłę o <%= str %>. Zaczarowana szafa: zestaw gladiatora (przedmiot 3 z 3).", - "shieldArmoireMidnightShieldText": "Midnight Shield", - "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "shieldArmoireMidnightShieldText": "Tarcza Północy", + "shieldArmoireMidnightShieldNotes": "Ta tarcza ma najwięcej mocy o północy! Zwięsza Kondycję o <%= con %> i Siłę o <%= str %>. Zaczarowana Szafa: przedmiot niezależny.", + "shieldArmoireRoyalCaneText": "Królewska laska", + "shieldArmoireRoyalCaneNotes": "Panuj nam miłościwie, o tobie pieśni nucimy! Zwiększa kondycję, inteligencję i percepcję o <%= attrs %>. Zaczarowana Szafa: zestaw królewski (przedmiot 2 z 3).", "back": "Osprzęt na plecy", "backBase0Text": "Nic na plecach", "backBase0Notes": "Nic na plecach.", @@ -592,6 +616,8 @@ "backMystery201504Notes": "Bzz bzz bzz! Śmigaj od zadania do zadania. Brak dodatkowych korzyści. Przedmiot Abonencki, kwiecień 2015.", "backMystery201507Text": "Awangardowa deska surfingowa", "backMystery201507Notes": "Surfuj na Starannych Nabrzeżach i ujeżdżaj fale w Zatoce Niedoskonałości! Brak dodatkowych korzyści. Przedmiot Abonencki, lipiec 2015.", + "backMystery201510Text": "Goblini ogon", + "backMystery201510Notes": "Prehensile and powerful! Confers no benefit. October 2015 Subscriber Item.", "backSpecialWonderconRedText": "Potężna peleryna", "backSpecialWonderconRedNotes": "Świszcze z siłą i pięknem. Nie daje żadnych korzyści. Edycja Specjalna - Konwent.", "backSpecialWonderconBlackText": "Podstępna peleryna", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "To potężne poroże zmienia kolor wraz z liśćmi. Brak dodatkowych korzyści. Przedmiot Abonencki, wrzesień 2014.", "headAccessoryMystery201502Text": "Skrzydła myśli", "headAccessoryMystery201502Notes": "Niech Twa wyobraźnia odleci! Brak dodatkowych korzyści. Przedmiot Abonencki, luty 2015.", + "headAccessoryMystery201510Text": "Goblinie rogi", + "headAccessoryMystery201510Notes": "These fearsome horns are slightly slimy. Confers no benefit. October 2015 Subscriber Item.", "headAccessoryMystery301405Text": "Gogle na głowę", "headAccessoryMystery301405Notes": "\"Gogle nosi się na oczach\", mówili. \"Nikt nie chce gogli które można nosić tylko na głowie\", mówili. Ha! Niech spojrzą na Ciebie! Brak dodatkowych korzyści. Przedmiot Abonencki, sierpień 2015.", "eyewear": "Okulary", diff --git a/common/locales/pl/generic.json b/common/locales/pl/generic.json index 0c331eea48..0924c7e55a 100644 --- a/common/locales/pl/generic.json +++ b/common/locales/pl/generic.json @@ -28,7 +28,7 @@ "market": "Targ", "subscriberItem": "Tajemniczy przedmiot", "newSubscriberItem": "Nowy tajemniczy przedmiot", - "subscriberItemText": "Każdego miesiąca, abonenci otrzymają tajemniczy przedmiot. Zazwyczaj następuje to około tydzień przed końcem miesiąca. Dokładną datę sprawdzisz w wiki na stronie 'Tajemniczy przedmiot'.", + "subscriberItemText": "W każdym miesiącu abonenci otrzymają tajemniczy przedmiot. Zazwyczaj jest on wydawany około tygodnia przed końcem miesiąca. Aby uzyskać więcej informacji, zobacz stronę \"Mystery Item\" w wiki.", "all": "Wszystkie", "none": "Żadne", "or": "Lub", @@ -69,8 +69,9 @@ "habiticaDayPluralText": "Świętował <%= number %> dni nadania nazwy! Dzięki za bycie fantastycznym użytkownikiem.", "achievementDilatory": "Zbawca Atleńtydy", "achievementDilatoryText": "Pomógł pokonać Straszliwego Smoka Atleńtydy podczas Obchodów Letniego Plusku 2014!", - "costumeContest": "Konkurs Kostiumowy 2014", - "costumeContestText": "Brał udział w Konkursie Kostiumów Halloweenowych w 2014. Przejrzyj niektóre zgłoszenia na blog.habitica.com/tagged/cosplay!", + "costumeContest": "Costume Contestant", + "costumeContestText": "Participated in the Habitoween Costume Contest. See some of the entries on the Habitica blog!", + "costumeContestTextPlural": "Participated in <%= number %> Habitoween Costume Contests. See some of the entries on the Habitica blog!", "memberSince": "- Członek od", "lastLoggedIn": "- Ostatnio zalogowany", "notPorted": "Ta funkcja nie jest jeszcze zaimportowana z oryginalnej strony.", @@ -79,6 +80,7 @@ "errorUpCase": "BŁĄD:", "newPassSent": "Nowe hasło zostało wysłane.", "serverUnreach": "Serwer jest obecnie nieosiągalny.", + "requestError": "Ups, wystąpił błąd! Odśwież stronę, twoja ostatnia czynność mogła nie zostać poprawnie zapisana.", "seeConsole": "Jeśli błąd się powtarza, zgłoś go przez Pomoc > Zgłoś błąd. Jeśli jesteś zaznajomiony z konsolą przeglądarki, dołącz wszelkie komunikaty błędów.", "error": "Błąd", "menu": "Menu", @@ -110,9 +112,9 @@ "December": "Grudzień", "dateFormat": "Format daty", "achievementStressbeast": "Zbawca Stoikonii", - "achievementStressbeastText": "Helped defeat the Abominable Stressbeast during the 2014 Winter Wonderland Event!", - "achievementBurnout": "Savior of the Flourishing Fields", - "achievementBurnoutText": "Helped defeat Burnout and restore the Exhaust Spirits during the 2015 Fall Festival Event!", + "achievementStressbeastText": "Pomógł pokonać Śnieżną Stresobestię poczas Obchoów Cudownej Zimy w 2014.", + "achievementBurnout": "Wybawca Kwitnących Pól", + "achievementBurnoutText": "Pomógł pokonać Wypaleńca i przywrócić Wycieńczone Duchy do ich prawdziwych postaci podczas obchodów Jesiennego Festiwalu 2015!", "checkOutProgress": "Sprawdź swój postęp w Habitice!", "cardReceived": "Otrzymano kartkę!", "cardReceivedFrom": "<%= cardType %> od <%= userName %>", @@ -133,5 +135,17 @@ "thankyou2": "Wysyłam Ci tysiąc podziękowań.", "thankyou3": "Jestem bardzo wdzięczny - dziękuję!", "thankyouCardAchievementTitle": "Ogromnie wdzięczny", - "thankyouCardAchievementText": "Dzięki za bycie wdzięcznym! Wysłał lub otrzymał <%= cards %> kartek z podziękowaniem." + "thankyouCardAchievementText": "Dzięki za bycie wdzięcznym! Wysłał lub otrzymał <%= cards %> kartek z podziękowaniem.", + "streakAchievement": "Zdobyłeś osiągnięcie serii!", + "firstStreakAchievement": "21-dniowa seria", + "streakAchievementCount": "<%= streaks %> 21-dniowych serii", + "twentyOneDays": "Ukończyłeś swoje Codzienne przez 21 dni z rzędu!", + "dontBreakStreak": "Amazing job. Don't break the streak!", + "dontStop": "Don't Stop Now!", + "levelUpShare": "I leveled up in Habitica by improving my real-life habits!", + "questUnlockShare": "I unlocked a new quest in Habitica!", + "hatchPetShare": "I hatched a new pet by completing my real-life tasks!", + "raisePetShare": "I raised a pet into a mount by completing my real-life tasks!", + "wonChallengeShare": "I won a challenge in Habitica!", + "achievementShare": "Zdobyto nowe osiągnięcie w Habitice!" } \ No newline at end of file diff --git a/common/locales/pl/groups.json b/common/locales/pl/groups.json index dacd8576a1..de0c3b4c2f 100644 --- a/common/locales/pl/groups.json +++ b/common/locales/pl/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "Wymelduj się z Gospody", "innCheckIn": "Odpoczywaj w Gospodzie", "innText": "Odpoczywasz w Gospodzie! Dopóki jesteś zameldowany, twoje Codzienne nie zadadzą ci obrażeń na koniec dnia, jednak w dalszym ciągu codziennie będą się odświeżać. Uważaj: Jeśli uczestniczysz w misji z bossem, wciąż może on zadać tobie obrażenia, jeśli członkowie twojej drużyny ominą Codzienne, chyba że również odpoczywają w Gospodzie! Również twoje obrażenia zadane bossowi (lub zebrane przedmioty) nie zostaną uwzględnione, dopóki nie wymeldujesz się z Gospody.", + "innTextBroken": "Odpoczywasz w gospodzie, czy jakoś tak... Dopóki jesteś zameldowany, twoje Codzienne nie zadadzą ci obrażeń na koniec dnia, jednak w dalszym ciągu codziennie będą się odświeżać... Jeśli uczestniczysz w misji z bossem, wciąż może on zadać tobie obrażenia, jeśli członkowie twojej drużyny ominą Codzienne... chyba że również odpoczywają w gospodzie... Również twoje obrażenia zadane bossowi (lub zebrane przedmioty) nie zostaną uwzględnione, dopóki nie wymeldujesz się z gospody... jestem taki zmęczony...", "lfgPosts": "Sekcja dla poszukujących drużyny", "tutorial": "Samouczek", "glossary": "Słownik", @@ -12,7 +13,7 @@ "community": "Forum społeczności", "dataTool": "Narzędzie podglądu danych", "resources": "Zasoby", - "askQuestionNewbiesGuild": "Zadaj pytanie (Gildia Nowicjuszy)", + "askQuestionNewbiesGuild": "Zadaj pytanie (Gildia Świeżaków)", "tavernTalk": "Pogaduszki w Karczmie", "tavernAlert1": "Uwaga: nie zgłaszaj tu błędów w grze, bo Twórcy nie zauważą Twojego wpisu. Zgłoś błędy", "tavernAlert2": "w zamian użyj GitHuba", @@ -25,7 +26,7 @@ "updatedParty": "Zaktualizowano stawienia drużyny.", "noPartyText": "Nie jesteś w drużynie albo twoja drużyna jeszcze się nie wczytała. Możesz albo stworzyć własną i zaprosić przyjaciół, albo - jeśli wolisz dołączyć do już istniejącej - poproś Przywódcę tej Drużyny aby wpisał twój unikalny ID użytkownika poniżej, a wtedy znajdziesz tutaj zaproszenie.", "LFG": "Aby zareklamować swoją nową drużynę lub znaleźć jakąś do przyłączenia się, idź do Gildii <%= linkStart %>Drużyna poszukiwana (szukam grupy)<%= linkEnd %>", - "wantExistingParty": "Want to join an existing party? Go to the <%= linkStart %>Party Wanted Guild<%= linkEnd %> and post this User ID:", + "wantExistingParty": "Chcesz dołączyć do istniejącej drużyny? Przejdź do <%= linkStart %>Party Wanted Guild<%= linkEnd %> i wpisz następujący ID użytkownika:", "joinExistingParty": "Dołącz do drużyny innego gracza", "create": "Stwórz", "userId": "ID Użytkownika", @@ -52,7 +53,7 @@ "logoUrl": "Link do logo", "assignLeader": "Przydziel przywódcę grupy", "members": "Członkowie", - "partyList": "Order for party members in header", + "partyList": "Kolejność wyświetlania członków drużyny", "banTip": "Wywal gracza z Drużyny", "moreMembers": "więcej członków", "invited": "Zaproszenie", @@ -117,7 +118,7 @@ "inviteByEmailExplanation": "Jeśli przyjaciel dołączy do Habitici przez twojego e-maila, automatycznie dołączy do twojej drużyny!", "inviteFriendsNow": "Zaproś znajomych teraz", "inviteFriendsLater": "Zaproś znajomych później", - "inviteAlertInfo": "If you have friends already using Habitica, invite them by User ID here.", + "inviteAlertInfo": "Jeżeli masz znajomych, którzy już używają Habitiki, zaproś ich poprzez ID użytkownika tutaj.", "inviteExistUser": "Zaproś istniejących użytkowników", "byColon": "Przez:", "inviteNewUsers": "Zaproś nowych użytkowników", @@ -136,14 +137,15 @@ "startAParty": "Utwórz drużynę", "addToParty": "Dodaj kogoś do swojej drużyny", "likePost": "Kliknij jeśli lubisz ten post!", - "partyExplanation1": "Play Habitica with friends to stay accountable!", + "partyExplanation1": "Graj w Habitikę z przyjaciółmi, by być odpowiedzialnym!", "partyExplanation2": "Walcz z bossami i twórz Wyzwania!", "partyExplanation3": "Zaproś przyjaciół by zdobyć Zwój Misji!", "wantToStartParty": "Czy chcesz założyć drużynę?", - "exclusiveQuestScroll": "Inviting a friend to your party will grant you an exclusive Quest Scroll to battle the Basi-List together!", + "exclusiveQuestScroll": "Za zaproszenie przyjaciela do drużyny otrzymasz wyjątkowy zwój misji abyście mogli wspólnie walczyć z Bazy-Listą", "nameYourParty": "Nazwij twoją nową drużynę!", "partyEmpty": "W twojej drużynie jesteś tylko ty. Zaproś swoich przyjaciół!", "partyChatEmpty": "Twój czat drużynowy jest pusty! Napisz wiadomość w powyższym okienku, by zacząć rozmowę.", "guildChatEmpty": "Czat tej gildii jest pusty! Napisz wiadomość w powyższym okienku, by zacząć rozmowę.", - "possessiveParty": "Drużyna należąca do <%= name %>" + "possessiveParty": "Drużyna należąca do <%= name %>", + "requestAcceptGuidelines": "Jeżeli chcesz pisać w Gospodzie lub drużynie, czy też jakimkolwiek czacie gildii, proszę, przeczytaj najpierw <%= linkStart %>Wytyczne Społeczności<%= linkEnd %>, a następnie kliknij poniższy przycisk, aby potwierdzić, że je akceptujesz." } \ No newline at end of file diff --git a/common/locales/pl/limited.json b/common/locales/pl/limited.json index 8ef8021320..dc5ceb1fa1 100644 --- a/common/locales/pl/limited.json +++ b/common/locales/pl/limited.json @@ -7,7 +7,7 @@ "alarmingFriends": "Niepokojący przyjaciele", "alarmingFriendsText": "Przestraszony <%= spookDust %> razy przez członków drużyny.", "agriculturalFriends": "Rolniczy przyjaciele", - "agriculturalFriendsText": "Przemieniony w kwiata <%= seeds %> razy przez członków drużyny.", + "agriculturalFriendsText": "Przemieniony w kwiat <%= seeds %> razy przez członków drużyny.", "aquaticFriends": "Wodni przyjaciele", "aquaticFriendsText": "Ochlapany <%= seafoam %> razy przez członków drużyny.", "valentineCard": "Kartka Walentynkowa", @@ -15,12 +15,13 @@ "valentineCardNotes": "Wyślij kartkę walentynkową do członka drużyny.", "valentine0": "\"Róże są czerwone\n\nNiebieskie są me Codzienne\n\nJestem z Tobą w drużynie\n\nCieszy mnie to niezmiernie!\"", "valentine1": "\"Róże są czerwone\n\nFiołeczki są śliczne\n\nDajmy wszyscy razem\n\nZłym Nawykom prztyczka!\"", - "valentine2": "\"Na górze róże\n\nTen wiersz w starym stylu\n\nObyś go polubił\n\nBoś o dziesięć złota do tyłu.\"", + "valentine2": "\"Na górze róże\n\nTen wiersz w starym stylu\n\nObyś go polubił\n\nBom o dziesięć złota do tyłu.\"", "valentine3": "\"Na górze czerwone róże\n\nLodowego smoka mam na oku\n\nNie ma większego skarbu\n\nNiż czas spędzony u Twego boku!\"", "valentineCardAchievementTitle": "Kochani przyjaciele", "valentineCardAchievementText": "Och, ty i twój przyjaciel musicie naprawdę troszczyć się o siebie! Wysłał lub otrzymał <%= cards %> kartek walentynkowych.", "polarBear": "Niedźwiedź polarny", "turkey": "Indor", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "Niedźwiadek polarny", "jackolantern": "Lampion z dyni", "seasonalShop": "Sklepik sezonowy", @@ -29,7 +30,8 @@ "seasonalShopClosedText": "Sklepik sezonowy jest aktualnie zamknięty! Nie wiem gdzie obecnie znajduje się Sezonowa Wróżka, ale na pewno zjawi się na kolejną Wielką Galę!", "seasonalShopText": "Witaj w Sezonowym Sklepiku!! Aktualnie mamy na składzie wiosenne przedmioty z Edycji sezonowej. Wszystko dostępne tutaj będzie w sprzedaży co roku podczas Wiosennego Szaleństwa, , lecz będziemy otwarci tylko do 30 kwietnia. Zrób więc teraz odpowiednie zapasy, inaczej będziesz zmuszony czekać cały rok, aby móc kupić te przedmioty ponownie!", "seasonalShopSummerText": "Witaj w Sezonowym Sklepiku!! Aktualnie mamy na składzie letnie przedmioty z Edycji sezonowej. Wszystko dostępne tutaj będzie w sprzedaży co roku podczas Letniego Plusku, lecz będziemy otwarci tylko do 31 lipca. Zrób więc teraz odpowiednie zapasy, inaczej będziesz zmuszony czekać cały rok, aby móc kupić te przedmioty ponownie!", - "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31, so be sure to stock up now, or you'll have to wait a year to buy these items again!", + "seasonalShopFallText": "Witaj w Sezonowym Sklepiku!! Aktualnie mamy na składzie jesienne przedmioty z Edycji sezonowej. Wszystko dostępne tutaj będzie w sprzedaży co roku podczas Jesiennego Festiwalu, lecz będziemy otwarci tylko do 31 października. Zrób więc teraz odpowiednie zapasy, inaczej będziesz zmuszony czekać cały rok, aby móc kupić te przedmioty ponownie!", + "seasonalShopFallTextBroken": "Oh... Witaj w Sezonowym Sklepiku... Aktualnie mamy na składzie jesienne przedmioty z Edycji sezonowej lub coś w tym rodzaju... Wszystko dostępne tutaj będzie w sprzedaży co roku podczas Jesiennego Festiwalu, lecz będziemy otwarci tylko do 31 października... Powinieneś więc teraz zrobić odpowiednie zapasy, inaczej będziesz zmuszony czekać... i czekać... i czekać... *ehh*", "seasonalShopRebirth": "Jeśli użyłeś Kuli Odrodzenia, możesz ponownie kupić to wyposażenie w kolumnie nagród. Na początku będziesz mógł nabyć tylko ekwipunek dla swojej obecnej klasy (domyślnie Wojownik), ale nie martw się, przedmioty należące do innych klas pojawią się, jeśli zmienisz klasę.", "candycaneSet": "Cukierkowa laska (Mag)", "skiSet": "Narto-bójca (Łotrzyk)", @@ -56,9 +58,9 @@ "emeraldMermageSet": "Szmaragdowy Syremagik (Mag)", "reefSeahealerSet": "Koralowy Morskozdrowiciel (Uzdrowiciel)", "roguishPirateSet": "Psotliwy Pirat (Łotrzyk)", - "monsterOfScienceSet": "Monster of Science (Warrior)", - "witchyWizardSet": "Witchy Wizard (Mage)", - "mummyMedicSet": "Mummy Medic (Healer)", - "vampireSmiterSet": "Vampire Smiter (Rogue)", - "fallEventAvailability": "Available until October 31" + "monsterOfScienceSet": "Potwór laboratoryjny (Wojownik)", + "witchyWizardSet": "Wiedźmi czarodziej (Mag)", + "mummyMedicSet": "Ratownik mumiczny (Uzdrowiciel)", + "vampireSmiterSet": "Łowca wampirów (Łotrzyk)", + "fallEventAvailability": "Dostępne do 31 października" } \ No newline at end of file diff --git a/common/locales/pl/messages.json b/common/locales/pl/messages.json index ce8ce4aef1..53ad59693b 100644 --- a/common/locales/pl/messages.json +++ b/common/locales/pl/messages.json @@ -15,7 +15,7 @@ "messageEquipped": "Przedmiot: <%= itemText %> założony.", "messageUnEquipped": "Przedmiot: <%= itemText %> ściągnięty.", "messageMissingEggPotion": "Brakuje Ci takiego jaja lub eliksiru.", - "messageInvalidEggPotionCombo": "You can't hatch Quest Pet Eggs with Magic Hatching Potions! Try a different egg.", + "messageInvalidEggPotionCombo": "Nie możesz użyć Magicznego Eliksiru Wyklucia na jaju z misji. Spróbuj innego jaja.", "messageAlreadyPet": "Już masz takiego chowańca. Spróbuj innej kombinacji!", "messageHatched": "Z Twojego jaja wykluł się chowaniec! Odwiedź stajnię, by wziąć go ze sobą.", "messageNotEnoughGold": "Nie masz wystarczająco dużo złota", @@ -30,5 +30,26 @@ "messageAlreadyOwnGear": "Już posiadasz ten przedmiot. Przejdź do strony z wyposażeniem, aby zacząć go używać.", "armoireEquipment": "<%= image %> Znalazłeś część rzadkiego wyposażenia w Zaczarowanej Szafie: <%= dropText %>! Fantastycznie!", "armoireFood": "<%= image %> Przeszukując Zaczarowaną Szafę znaleziono <%= dropArticle %><%= dropText %>. Co to tutaj robi?", - "armoireExp": "Mocujesz się z Zaczarowaną Szafą i zyskujesz doświadczenie. Masz za swoje!" + "armoireExp": "Mocujesz się z Zaczarowaną Szafą i zyskujesz doświadczenie. Masz za swoje!", + "messageInsufficientGems": "Masz za mało klejnotów!", + "messageAuthPasswordMustMatch": "Hasło i potwierdzenie hasła nie są identyczne", + "messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword wymagane", + "messageAuthUsernameTaken": "Nazwa użytkownika już zajęta", + "messageAuthEmailTaken": "Adres e-mail już zajęty.", + "messageAuthNoUserFound": "Nie znaleziono użytkownika.", + "messageAuthMustBeLoggedIn": "Musisz się zalogować.", + "messageAuthMustIncludeTokens": "Musisz dołączyć token i uid (identyfikator użytkownika) do swojego zapytania", + "messageGroupNotFound": "Grupa nie została odnaleziona lub nie masz do niej dostępu.", + "messageGroupAlreadyInParty": "Już jesteś w drużynie. Spróbuj odświeżyć.", + "messageGroupOnlyLeaderCanUpdate": "Tylko przywódca grupy może edytować grupę!", + "messageGroupRequiresInvite": "Nie możesz dołączyć do grupy, do której cię nie zaproszono.", + "messageGroupCannotRemoveSelf": "Nie możesz usunąć siebie!", + "messageGroupChatBlankMessage": "Nie możesz wysłać pustej wiadomości.", + "messageGroupChatLikeOwnMessage": "Nie możesz polubić własnej wiadomości. Nie bądź taki.", + "messageGroupChatFlagOwnMessage": "Nie możesz zgłosić własnej wiadomości.", + "messageGroupChatFlagAlreadyReported": "Już zgłosiłeś tę wiadomość.", + "messageGroupChatNotFound": "Nie znaleziono wiadomości!", + "messageGroupChatAdminClearFlagCount": "Tylko administrator może wyczyścić licznik flag!", + "messageUserOperationProtected": "Ścieżka `<%= operation %>` nie została zapisana, gdyż jest chronniona przed zapisem.", + "messageUserOperationNotFound": "Operacja <%= operation %> nie znaleziona" } \ No newline at end of file diff --git a/common/locales/pl/noscript.json b/common/locales/pl/noscript.json new file mode 100644 index 0000000000..6df4d4f9f6 --- /dev/null +++ b/common/locales/pl/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Niestety! Twoja przeglądarka nie ma włączonej obsługi JavaScript", + "jsDisabledHeadingFull": "Niestety! Twoja przeglądarka nie ma włączonej obsługi JavaScript a bez niej Habitica nie może działać poprawnie.", + "jsDisabledText": "Habitica nie może bez niej wyświetlić strony poprawnie!", + "jsDisabledLink": "Proszę, włącz obsługę JavaScript, aby kontynuować!" +} \ No newline at end of file diff --git a/common/locales/pl/npc.json b/common/locales/pl/npc.json index e3c061f2df..e15ed25319 100644 --- a/common/locales/pl/npc.json +++ b/common/locales/pl/npc.json @@ -3,19 +3,23 @@ "npcText": "Wsparł projekt Kickstarter na maksymalnym poziomie!", "mattBoch": "Matt Boch", "mattShall": "Mam przyprowadzić wierzchowca, <%= name %>? Gdy nakarmisz chowańca wystarczającą ilością jedzenia, by zamienił się w wierzchowca, pojawi się tutaj. Kliknij wierzchowca, by go osiodłać!", - "mattBochText1": "Witaj w stajni! Mam na imię Matt i jestem władcą chowańców. Od poziomu 4 możesz za pomocą jaj i eliksirów wykluwać chowańce. Gdy na Targu wyklujesz chowańca, to pojawi się on tutaj! Kliknij na obrazek jednego z nich, by pojawił się na twoim awatarze. Karm chowańce jedzeniem znajdowanym od poziomu 4, by wyrosły z nich potężne wierzchowce.", + "mattBochText1": "Witaj w stajni! Mam na imię Matt i jestem władcą chowańców. Od poziomu 3 możesz za pomocą jaj i eliksirów wykluwać chowańce. Gdy na Targu wyklujesz chowańca, to pojawi się on tutaj! Kliknij na obrazek jednego z nich, by pojawił się na twoim awatarze. Karm chowańce jedzeniem znajdowanym od poziomu 3, by wyrosły z nich potężne wierzchowce.", "daniel": "Daniel", "danielText": "Witaj w Karczmie! Zostań na chwilę i porozmawiaj z mieszkańcami. Jeśli potrzebujesz odpoczynku (wakacje? choroba?), znajdę dla Ciebie pokój w Gospodzie. Kiedy odpoczywasz, twoje Codzienne nie skrzywdzą ciebie na koniec dnia, jednak nadal możesz je odhaczać.", "danielText2": "Uważaj: Jeśli uczestniczysz w walce z bossem, wciąż może on zadać tobie obrażenia, jeśli członkowie twojej drużyny ominą Codzienne! Również twoje obrażenia dla bossa (lub zebrane przedmioty) nie zostaną zaaplikowane, dopóki nie zakończysz odpoczynku w Gospodzie.", + "danielTextBroken": "Witaj w Karczmie... czy jakoś tak... Jeśli potrzebujesz odpoczynku, znajdę dla ciebie pokój w gospodzie... Kiedy odpoczywasz, twoje Codzienne nie skrzywdzą ciebie na koniec dnia, jednak nadal możesz je odhaczać... jeśli starczy ci energii...", + "danielText2Broken": "Aha... Jeśli uczestniczysz w walce z bossem, wciąż może on zadać ci obrażenia, jeśli członkowie twojej drużyny ominą Codzienne... Twoje obrażenia dla bossa (lub zebrane przedmioty) też nie zostaną zaaplikowane, dopóki nie zakończysz odpoczynku w gospodzie...", "alexander": "Handlarz Aleksander", "welcomeMarket": "Witaj na Targu! Tu kupisz rzadkie jaja oraz eliksiry! Sprzedasz nadmiar towaru! Zamówisz usługi! Zobacz, co dla Ciebie mamy.", - "sellForGold": "Sprzedaj <%= item %> za <%= gold %> Złota", - "sellEggForGold": "Sprzedaj <%= itemType %> jajo za <%= gold %> złota", - "sellPotionForGold": "Sprzedaj <%= itemType %> eliksir za <%= gold %> złota", + "displayItemForGold": "Czy chcesz sprzedać <%= itemType %>?", + "displayEggForGold": "Czy chcesz sprzedać <%= itemType %> Jajo?", + "displayPotionForGold": "Czy chcesz sprzedać <%= itemType %> Eliksir?", + "sellForGold": "Sprzedaj za <%= gold %> szt. złota", "buyGems": "Kup Klejnoty", "justin": "Justin", "ian": "Ian", "ianText": "Witaj w sklepie z misjami! Możesz tutaj wykorzystać zwoje misji, by wraz z przyjaciółmi toczyć boje z potworami. Już teraz koniecznie sprawdź naszą wspaniałą tablicę ze zwojami misji możliwymi do zakupu!", + "ianBrokenText": "Witaj w sklepie z misjami... Możesz tutaj wykorzystać zwoje misji, by wraz z przyjaciółmi toczyć boje z potworami... Już teraz koniecznie sprawdź naszą wspaniałą tablicę ze zwojami misji możliwymi do zakupu...", "USD": "USD", "newStuff": "Nowości", "cool": "Przypomnij mi później", @@ -42,22 +46,22 @@ "tourExp": "Świetna robota! Odhaczanie zadań daje Ci doświadczenie i złoto.", "tourDailies": "Ta kolumna jest dla zadań Codziennych. Aby kontynuować, wprowadź zadanie, które powinieneś robić każdego dnia! Przykładowe Codzienne: Pościel łóżko, Umyj zęby, Sprawdź służbowego e-maila", "tourCron": "Wspaniale! Twoje Codzienne zadania będą resetowane codziennie.", - "tourHP": "Uważaj! Jeśli nie dokończysz Codziennego Zadania do północy odniesiesz szkodę!", + "tourHP": "Uważaj! Jeśli nie zakończysz Codziennego Zadania do północy odniesiesz szkodę!", "tourHabits": "Ta kolumna jest dla dobrych i złych Nawyków, które możesz robić wiele razy dziennie. Aby kontynuować, kliknij na ołówek w celu edycji nazwy, a następnie kliknij na ptaszka w celu zapisania.", "tourStats": "Dobre nawyki dodają Doświadczenia i Złota. Złe nawyki zabierają Życie.", "tourGP": "Aby kontynuować kup Miecz treningowy za właśnie zarobione złoto!", "tourAvatar": "Dostosuj swój awatar
  • Twój awatar reprezentuje Ciebie.
  • Dostosuj go teraz, lub wróć do tego później.
  • Twój awatar zaczyna bez wyposażenia - musisz je zdobyć!
", "tourScrollDown": "Zobacz całą stronę aby upewnić się, że widziałeś wszystkie opcje! Kliknij ponownie na swój awatar aby wrócić do strony zadań.", "tourMuchMore": "Gdy zakończysz zadania, możesz wraz z przyjaciółmi stworzyć Drużynę, czatować o wspólnych zainteresowaniach w Gildiach, dołączyć do Wyzwań i więcej!", - "tourStatsPage": "To jest twoja strona Statystyki! Zdobądź osiągnięcia wykonując wymienione zadania.", + "tourStatsPage": "To jest strona z twoimi Statystykami! Zdobywaj osiągnięcia wykonując wymienione zadania.", "tourTavernPage": "Witaj w Karczmie, wielowiekowym czacie! W przypadku choroby lub podróży możesz tutaj powstrzymać swoje Codzienne od zadawania ci obrażeń klikając \"Odpoczywaj w Gospodzie\". Przywitaj się!", "tourPartyPage": "Twoja drużyna pomoże Ci zostać odpowiedzialnym. Zaproś przyjaciół aby odblokować zwój misji!", - "tourGuildsPage": "Gildie są grupami czatowymi zrzeszającymi graczy o wspólnych zainteresowaniach. Tworzone są przez graczy i dla graczy. Przeszukaj listę i dołącz do Gildii, które Cię interesują. Zajrzyj do popularnej Newbies Guild (Gildii Nowicjuszy), gdzie wszyscy mogą zadawać pytania dotyczące Habitiki!", + "tourGuildsPage": "Gildie są grupami czatowymi zrzeszającymi graczy o wspólnych zainteresowaniach. Tworzone są przez graczy i dla graczy. Przeszukaj listę i dołącz do Gildii, które Cię interesują. Zajrzyj do popularnej Newbies Guild (Gildii Świeżaków), gdzie wszyscy mogą zadawać pytania dotyczące Habitiki!", "tourChallengesPage": "Wyzwania są tematycznymi listami zadań utworzonymi przez użytkowników! Dołączenie do wyzwania spowoduje dodanie jego zadań do Twojego konta. Rywalizuj z innymi i wygrywaj klejnoty!", - "tourMarketPage": "Od poziomu 4, jaja i eliksiry wyklucia zdobywasz losowo po ukończeniu zadań. Pojawiają się one tutaj - użyj ich, a wyklują się chowańce! Możesz także kupować przedmioty na Targu.", + "tourMarketPage": "Od poziomu 3, jaja i eliksiry wyklucia zdobywasz losowo po ukończeniu zadań. Pojawiają się one tutaj - użyj ich, a wyklują się chowańce! Możesz także kupować przedmioty na Targu.", "tourHallPage": "Witaj w Galerii Bohaterów, gdzie honorujemy wolontariuszy pracujących na rzecz Habitiki. Współtworzyli kod, obrazy, muzykę, pisali teksty albo byli po prostu pomocni, za co otrzymali klejnoty, wyjątkowe wyposażenie i prestiżowe tytuły. Ty także możesz dać Habitice coś od siebie!", - "tourPetsPage": "Oto i stajnia! Po uzyskaniu 4 poziomu można, przy użyciu jaj i eliksirów, wykluwać chowańce. Chowaniec wykluty na targu pojawi się tutaj! Kliknij na obrazku przedstawiającym chowańca, aby dołączył do Twojego awatara. Racz chowańce karmą, która będzie dostępna od poziomu 4, a wyrosną na potężne wierzchowce.", - "tourMountsPage": "Kiedy ofiarujesz chowańcowi wystarczającą ilość karmy, by zmienił się w wierzchowca, pojawi się tutaj. (Chowańce, wierzchowce i karmę odblokowuje uzyskanie poziomu 4.) Kliknij na wierzchowcu, aby go osiodłać!", + "tourPetsPage": "Oto i stajnia! Po uzyskaniu 3 poziomu można, przy użyciu jaj i eliksirów, wykluwać chowańce. Chowaniec wykluty na targu pojawi się tutaj! Kliknij na obrazku przedstawiającym chowańca, aby dołączył do Twojego awatara. Racz chowańce karmą, która będzie dostępna od poziomu 3, a wyrosną na potężne wierzchowce.", + "tourMountsPage": "Kiedy ofiarujesz chowańcowi wystarczającą ilość karmy, by zmienił się w wierzchowca, pojawi się tutaj. (Chowańce, wierzchowce i karmę odblokowuje uzyskanie poziomu 3.) Kliknij na wierzchowcu, aby go osiodłać!", "tourEquipmentPage": "Tutaj znajduje się Twoje wyposażenie! Twój rynsztunek wpływa na statystyki. Jeśli chcesz, by Twój awatar posiadał inny rynsztunek bez zmiany statystyk, kliknij \"Dostosuj strój\".", "tourOkay": "Oki!", "tourAwesome": "Świetnie!", @@ -75,9 +79,9 @@ "welcome1": "Stwórz podstawowy awatar.", "welcome1notes": "Ten awatar będzie reprezentował Cię w trakcie Twojego rozwoju.", "welcome2": "Ustaw swoje zadania.", - "welcome2notes": "Twoja efektywność w prawdziwym życiu równa się Twojej efektywności w grze!", + "welcome2notes": "Twoja efektywność w prawdziwym życiu kontroluje Twoją efektywność w grze!", "welcome3": "Rób postępy w życiu i w grze!", - "welcome3notes": "Gdy będziesz ulepszać swoje życie, twój awatar będzie zyskiwał poziomy i odblokowywał chowańce, misje, wyposażenie i więcej!", + "welcome3notes": "W miarę jak będziesz ulepszać swoje życie, twój awatar będzie zyskiwał poziomy i odblokowywał chowańce, misje, wyposażenie i więcej!", "welcome4": "Unikaj złych nawyków, które wysysają punkty Zdrowia (HP), inaczej Twój awatar umrze!", "welcome5": "Teraz spersonalizujesz swój awatar i ustawisz swoje zadania...", "imReady": "Wejdź do Habitiki" diff --git a/common/locales/pl/pets.json b/common/locales/pl/pets.json index 68c1c1fe97..0881d10909 100644 --- a/common/locales/pl/pets.json +++ b/common/locales/pl/pets.json @@ -1,13 +1,13 @@ { "pets": "Chowańce", "petsFound": "Znalezione chowańce", - "magicPets": "Magic Potion Pets", + "magicPets": "Magiczne chowańce", "rarePets": "Rzadkie chowańce", "questPets": "Chowańce z Misji", "mounts": "Wierzchowce", "mountsTamed": "Oswojonych wierzchowców", "questMounts": "Wierzchowce z Misji", - "magicMounts": "Magic Potion Mounts", + "magicMounts": "Magiczne wierzchowce", "rareMounts": "Rzadkie Wierzchowce", "etherealLion": "Eteryczny lew", "veteranWolf": "Wilk weteran", @@ -18,8 +18,8 @@ "mammoth": "Wełniany Mamut", "orca": "Orka", "royalPurpleGryphon": "Purpurowy królewski gryf", - "phoenix": "Phoenix", - "rarePetPop1": "Kliknij na złotą łapkę, aby dowiedzieć się, jak możesz zdobyć tego rzadkiego chowańca poprzez pomoc w tworzeniu Habitica!", + "phoenix": "Feniks", + "rarePetPop1": "Kliknij na złotą łapę, aby dowiedzieć się, jak możesz zdobyć tego rzadkiego chowańca poprzez pomoc w tworzeniu Habitica!", "rarePetPop2": "Jak zdobyć tego Chowańca?", "potion": "Eliksir <%= potionType %>", "egg": "<%= eggType %> jajo", @@ -34,32 +34,40 @@ "foodText": "karma", "food": "Jedzenie i siodła", "noFood": "Nie masz żadnego jedzenia ani siodeł.", - "dropsExplanation": "Get these items faster with Gems if you don't want to wait for them to drop when completing a task. Learn more about the drop system.", - "premiumPotionNoDropExplanation": "Magic Hatching Potions cannot be used on eggs received from Quests. The only way to get Magic Hatching Potions is by buying them below, not from random drops.", + "dropsExplanation": "Zdobądź te przedmioty szybciej przy pomocy Klejnotów jeśli nie chcesz czekać aż wypadną przy ukończeniu zadania. Dowiedz się więcej o systemie zdobyczy.", + "premiumPotionNoDropExplanation": "Magiczne Eliksiry Wyklucia nie mogą zostać użyte na jajach otrzymanych z Misji. Jedynym sposobem na zdobycie Magicznych Eliksirów Wyklucia jest kupienie ich poniżej, nie stanowią losowych zdobyczy.", "beastMasterProgress": "Postęp Władcy chowańców", "stableBeastMasterProgress": "Postęp Władcy chowańców: znaleziono <%= number %> chowańców", "beastAchievement": "Zdobyłeś odznakę \"Władca Chowańców\", gdyż zebrałeś wszystkie możliwe Chowańce!", "beastMasterName": "Władca chowańców", "beastMasterText": "Odnalazł wszystkie 90 chowańców (niesłychanie trudne, pogratuluj tej osobie!).", - "beastMasterText2": "i wypuścił swoje chowańce <%= count %> razy.", + "beastMasterText2": "i wypuścił swoje chowańce <%= count %> razy", "mountMasterProgress": "Postęp Władcy wierzchowców", "stableMountMasterProgress": "Postęp Władcy wierzchowców: oswojono <%= number %> wierzchowców", "mountAchievement": "Zdobyłeś odznakę „Władca wierzchowców\" za oswojenie wszystkich wierzchowców!", "mountMasterName": "Władca wierzchowców", "mountMasterText": "Oswoił wszystkie 90 wierzchowców (to jeszcze trudniejsze, pogratuluj tej osobie!)", - "mountMasterText2": "i wypuścił wszystkie swoje wierzchowce <%= count %> razy.", + "mountMasterText2": "i wypuścił wszystkie swoje wierzchowce <%= count %> razy", "beastMountMasterName": "Władca chowańców i Władca wierzchowców", "triadBingoName": "Potrójne bingo", "triadBingoText": "Odnalazł wszystkie 90 chowańców, wszystkie 90 wierzchowców, a potem JESZCZE RAZ wszystkie 90 chowańców (JAK CI SIĘ TO UDAŁO?!).", - "triadBingoText2": "i wypuścił całą stajnię <%= count %> razy.", + "triadBingoText2": "i wypuścił całą stajnię <%= count %> razy", "triadBingoAchievement": "Zdobyłeś odznakę „Potrójne bingo” za odnalezienie wszystkich chowańców, oswojenie wierzchowców i ponowne odnalezienie wszystkich chowańców!", "dropsEnabled": "Łupy włączone!", "itemDrop": "Znaleziono łup!", "firstDrop": "Odblokowałeś System Zdobyczy! Od teraz po ukończeniu zadań, masz niewielką szansę znalezienia przedmiotu, włączając w to jaja, eliksiry i jedzenie! Właśnie znalazłeś <%= eggText %> Jajo! <%= eggNotes %>", "useGems": "Jeśli masz na oku zwierzaka, ale nie możesz się doczekać jego zdobycia, użyj Klejnotów w Ekwipunek > Targ, by go kupić!", "hatchAPot": "Wykluć <%= potion %> <%= egg %>?", + "hatchedPet": "Wyklułeś <%= potion %> <%= egg %>!", + "displayNow": "Wyświetl teraz", + "displayLater": "Wyświetl później", + "earnedCompanion": "Swoją produktywnością zyskałeś nowego towarzysza. Nakarm go by urósł!", "feedPet": "Nakarmić <%= text %> twojego <%= name %>?", "useSaddle": "Osiodłać <%= pet %>?", + "raisedPet": "Wyhodowałeś <%= pet %>!", + "earnedSteed": "Dzięki ukończeniu swoich zadań masz teraz wiernego wierzchowca!", + "rideNow": "Pójdź na przejażdżkę teraz", + "rideLater": "Pójdź na przejażdżkę później", "petName": "<%= potion %> <%= egg %>", "mountName": "<%= potion %> <%= mount %>", "petKeyName": "Klucz do schroniska", diff --git a/common/locales/pl/quests.json b/common/locales/pl/quests.json index 1c86dc37cd..13dc636da2 100644 --- a/common/locales/pl/quests.json +++ b/common/locales/pl/quests.json @@ -13,6 +13,7 @@ "youReceived": "Otrzymałeś", "dropQuestCongrats": "Gratulacje za zdobycie tego zwoju misji! Teraz możesz zaprosić swoją drużynę i od razu rozpocząć misję, albo powrócić do niej w dowolnym momencie z poziomu Ekwipunek > Misje.", "questSend": "Naciśnięcie \"Zaproś\" wyśle zaproszenie do członków twojej drużyny. Gdy już wszyscy członkowie zaakceptują lub odrzucą zaproszenie, misja zostanie rozpoczęta. Możesz zobaczyć jej status pod Społeczność > Drużyna.", + "questSendBroken": "Naciśnięcie \"Zaproś\" wyśle zaproszenie do członków twojej drużyny... Gdy już wszyscy członkowie zaakceptują lub odrzucą zaproszenie, misja zostanie rozpoczęta... Możesz zobaczyć jej status pod Społeczność > Drużyna...", "inviteParty": "Zaproś Drużynę do Misji", "questInvitation": "Zaproszenie do misji:", "questInvitationTitle": "Zaproszenie do misji", @@ -24,19 +25,25 @@ "rejected": "Odrzucono", "pending": "Oczekujące", "questStart": "W momencie, gdy wszyscy członkowie zaakceptują lub odrzucą misję, ta rozpoczyna się. Tylko ci, którzy kliknęli 'zaakceptuj' będą mogli brać udział w misji i otrzymają nagrodę. Jeśli któryś ze członków zbyt długo zwleka z wyborem (być może jest nieaktywny?) właściciel misji może rozpocząć ją bez tej osoby, klikając 'Rozpocznij'. Właściciel misji może też zakończyć misję klikając \"Zakończ\", a zwój misji zostanie mu zwrócony.", + "questStartBroken": "Kiedy wszyscy członkowie zaakceptują lub odrzucą, misja rozpocznie się... Tylko ci, którzy \"zaakceptowali\", będą mogli uczestniczyć w misji i otrzymać nagrodę... Jeżeli czas oczekiwania na uczestników będzie zbyt długi (nieaktywni?), właściciel misji może rozpocząć bez nich, klikając \"Rozpocznij\"... Właściciel misji może również anulować misję i odzyskać zwój misji, klikając \"Anuluj\"...", "begin": "Rozpocznij", "bossHP": "Zdrowie Bossa", "bossStrength": "Siła bossa", - "rage": "Rage", + "rage": "Furia", "collect": "Zebrano", "collected": "Zebrano", "collectionItems": "<%= number %> <%= items %>", "itemsToCollect": "Przedmioty do zebrania", "bossDmg1": "Każde zakończone Codzienne i Do-Zrobienia oraz każdy pozytywny Nawyk rani bossa. Zrań go bardziej czerwieńszymi zadaniami lub Brutalnym uderzeniem i Eksplozją płomieni. Boss zada obrażenia każdemu uczestnikowi misji za każde pominięte Codzienne (pomnożone przez siłę bossa) jako dodatek do standardowych obrażeń, więc utrzymuj swoją drużynę w zdrowiu przez wypełnianie swoich Codziennych! Wszystkie obrażenia zadane bossowi i przez niego będą podsumowane przez crona (twoje przejście do następnego dnia).", "bossDmg2": "Tylko uczestnicy będą mogli walczyć z bossem i brać udział w podziale łupów.", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "Każde zakończone zadanie Codzienne i Do-Zrobienia i każdy pozytywny Nawyk zadają obrażenia bossowi... Zrań go bardziej czerwieńszymi zadaniami lub Brutalnym uderzeniem i Eksplozją płomieni... Boss zada obrażenia każdemu uczestnikowi misji za każde zadanie Codzienne, którego nie ukończono (pomnożone przez siłę bossa) oprócz standardowych obrażeń, więc pilnuj stanu zdrowia swojej drużyny, wypełniając codzienne zadania... Wszystkie obrażenia zadane bossowi lub przez niego będą podsumowane przez crona (rozpoczęcie nowego dnia)...", + "bossDmg2Broken": "Tylko uczestnicy będą mogli walczyć z bossem i brać udział w podziale łupów...", + "tavernBossInfo": "Wypełnij zadania Codzienne i Do-Zrobienia i zdobądź punkty za pozytywne Nawyki, aby zadać obrażenia Globalnemu Bossowi! Nieskończone Codzienne wypełniają pasek wzrastania Furii. Kiedy pasek Furii będzie pełny, Globalny Boss zaatakuje NPC-ta. Globalny Boss nigdy nie zada obrażeń indywidualnym graczom ani kontom. Liczą się wyłącznie zadania aktywnych graczy, którzy nie wypoczywają w Gospodzie.", + "tavernBossInfoBroken": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss... Incomplete Dailies fill the Exhaust Strike Bar... When the Exhaust Strike bar is full, the World Boss will attack an NPC... A World Boss will never damage individual players or accounts in any way... Only active accounts not resting in the Inn will have their tasks tallied...", "bossColl1": "Aby zbierać przedmioty, wykonuj pozytywne zadania. Przedmioty misyjne znajdujesz tak samo jak zwykłe, jednakże nie zobaczysz łupów aż do końca dnia – wtedy to wszystkie przedmioty zostaną wyszczególnione i dodane do sterty.", "bossColl2": "Tylko uczestnicy mogą zbierać przedmioty i brać udział w podziale łupów.", + "bossColl1Broken": "To collect items, do your positive tasks... Quest items drop just like normal items; however, you won't see the drops until the next day, then everything you've found will be tallied up and contributed to the pile...", + "bossColl2Broken": "Tylko uczestnicy mogą zbierać przedmioty i brać udział w podziale łupów...", "abort": "Przerwij", "leaveQuest": "Opuść misję", "sureLeave": "Czy na pewno chcesz opuścić aktywną misję? Cały twój postęp zostanie stracony.", @@ -51,22 +58,25 @@ "scrollsText1": "Do wykonania misji potrzebna jest drużyna. Jeśli chcesz je wykonywać w pojedynkę,", "scrollsText2": "stwórz pustą drużynę", "scrollsPre": "Jeszcze nie odblokowałeś tej misji!", - "alreadyEarnedQuestLevel": "Już zdobyłeś tą misję dzięki osiągnięciu poziomu <%= level %>.", - "alreadyEarnedQuestReward": "Już zdobyłeś tą misję dzięki ukończeniu <%= priorQuest %>.", + "alreadyEarnedQuestLevel": "Już zdobyłeś tę misję dzięki osiągnięciu poziomu <%= level %>.", + "alreadyEarnedQuestReward": "Już zdobyłeś tę misję dzięki ukończeniu <%= priorQuest %>.", "completedQuests": "Zakończył następujące misje", "mustComplete": "Musisz najpierw ukończyć <%= quest %>.", "mustLevel": "Musisz mieć co najmniej poziom <%= level %>, by rozpocząć tą misję!", "mustLvlQuest": "Musisz mieć co najmniej poziom <%= level %>, żeby kupić tę misję!", - "mustInviteFriend": "By zdobyć tą misję, zaproś przyjaciela do swojej drużyny. Zaprosić kogoś teraz?", - "unlockByQuesting": "By zdobyć tą misję, najpierw ukończ <%= title %>.", + "mustInviteFriend": "By zdobyć tę misję, zaproś przyjaciela do swojej drużyny. Zaprosić kogoś teraz?", + "unlockByQuesting": "By zdobyć tę misję, najpierw ukończ <%= title %>.", "sureCancel": "Czy na pewno chcesz zakończyć tę misję? Wszystkie zaakceptowane zaproszenia zostaną stracone. Właściciel misji zachowa zwój misji.", "sureAbort": "Czy na pewno chcesz porzucić tę misję? Zostanie przerwana dla każdego członka twojej drużyny i cały postęp zostanie stracony. Zwój misji zostanie zwrócony właścicielowi.", "doubleSureAbort": "Czy jesteś pewien? Drużyna się na Ciebie nie obrazi?", "questWarning": "Jeśli nowi gracze dołączą do drużyny zanim rozpocznie się misja, również dostaną zaproszenie do niej. Jednakże kiedy już misja się zacznie, żadni nowi członkowie drużyny nie będą mogli dołączyć do misji.", + "questWarningBroken": "Jeżeli nowi gracze dołączą do drużyny przed rozpoczęciem misji, również otrzymają zaproszenie... Jednak po rozpoczęciu misji żaden nowy uczestnik nie może już do niej dołączyć...", "bossRageTitle": "Furia", "bossRageDescription": "Gdy pasek się zapełni, boss wykona atak specjalny!", - "startAQuest": "ROZPOCZNIJ MISJE", - "startQuest": "Rozpocznij Misje", + "startAQuest": "ROZPOCZNIJ MISJĘ", + "startQuest": "Rozpocznij Misję", "whichQuestStart": "Którą misję chcesz rozpocząć?", - "getMoreQuests": "Zdobądź więcej misji" + "getMoreQuests": "Zdobądź więcej misji", + "unlockedAQuest": "Odblokowałeś misję!", + "leveledUpReceivedQuest": "Zyskałeś nowy poziom - Poziom <%= level %> - i otrzymałeś zwój misji!" } \ No newline at end of file diff --git a/common/locales/pl/questscontent.json b/common/locales/pl/questscontent.json index 2d747d5021..6f8da36837 100644 --- a/common/locales/pl/questscontent.json +++ b/common/locales/pl/questscontent.json @@ -250,16 +250,28 @@ "questHorseBoss": "Koń-Mara", "questHorseDropHorseEgg": "Koń (jajo)", "questHorseUnlockText": "Odblokowuje dostęp do kupna końskich jaj na Targu", - "questBurnoutText": "Burnout and the Exhaust Spirits", - "questBurnoutNotes": "It is well past midnight, still and stiflingly hot, when Redphoenix and scout captain Kiwibot abruptly burst through the city gates. \"We need to evacuate all the wooden buildings!\" Redphoenix shouts. \"Hurry!\"

Kiwibot grips the wall as she catches her breath. \"It's draining people and turning them into Exhaust Spirits! That's why everything was delayed. That's where the missing people have gone. It's been stealing their energy!\"

\"'It'?'\" asks Lemoness.

And then the heat takes form.

It rises from the earth in a billowing, twisting mass, and the air chokes with the scent of smoke and sulphur. Flames lick across the molten ground and contort into limbs, writhing to horrific heights. Smoldering eyes snap open, and the creature lets out a deep and crackling cackle.

Kiwibot whispers a single word.

\"Burnout.\"", - "questBurnoutCompletion": "Burnout is DEFEATED!

With a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.

Ian, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!

\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!

One of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"

Her tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"

She claps her hands. \"Now - let's celebrate!\"", - "questBurnoutCompletionChat": "`Burnout is DEFEATED!`\n\nWith a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.\n\nIan, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!\n\n\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!\n\nOne of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"\n\nHer tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"\n\nShe claps her hands. \"Now - let's celebrate!\"\n\nAll Habiticans receive:\n\nPhoenix Pet\nPhoenix Mount\nAchievement: Savior of the Flourishing Fields\nBasic Candy\nVanilla Candy\nSand Candy\nCinnamon Candy\nChocolate Candy\nRotten Candy\nSour Pink Candy\nSour Blue Candy\nHoney Candy", - "questBurnoutBoss": "Burnout", - "questBurnoutBossRageTitle": "Exhaust Strike", - "questBurnoutBossRageDescription": "When this gauge fills, Burnout will unleash its Exhaust Strike on Habitica!", - "questBurnoutDropPhoenixPet": "Phoenix (Pet)", - "questBurnoutDropPhoenixMount": "Phoenix (Mount)", - "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", - "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutText": "Wypaleniec i Wycieńczone Duchy", + "questBurnoutNotes": "Jest już dobrze po północy i duszno od gorąca, kiedy nagle Redphoenix i kapitan zwiadowców Kiwibot wpadają przez bramy miasta. \"Musimy ewakuować wszystkie drewniane budynki!\" krzyczy Redphoenix. \"Szybko!\"

Kiwibot łapie się ściany i próbuje złapać oddech. \"Wyczerpuje ludzi i zmienia ich w Wycieńczone Duchy! Dlatego wszystko jest opóźnione. Tak zaginęli ci ludzie. To kradnie ich energię!\"

\"To?\" pyta Lemoness.

A wtedy gorąco nabiera kształtu.

Kłębiąca się i wirująca masa podnosi się z ziemi, a w powietrzu pełno jest dławiącego dymu i siarki. Płomienie liżą stopioną ziemię i wyginają się w kończyny, wijąc się na niebotyczną wysokość. Stwór otwiera tlące się oczy i wydaje z siebie głęboki, skrzeczący rechot.

Kiwibot szepcze jedno słowo.

\"Wypaleniec.\"", + "questBurnoutCompletion": "Wypaleniec został POKONANY!

Z wielkim westchnieniem Wypaleniec powoli uwalnia gorliwą energię, która podtrzymywała jego płomień. Gdy potwór cicho zmienia się w popiół, powietrze skrzy się do skradzionej przez niego energii, odżywiającej Wycieńczone Duchy i przywracającej im prawdziwą postać.

Ian, Daniel i Sezonowa Czarodziejka wiwatują, Habitanie biegną im naprzeciw, a wszyscy zaginieni mieszkańcy Kwitnących Pól ściskają swoje rodziny i przyjaciół. Ostatni Wycieńczony Duch zmienia się w Wesołą Żniwiarkę we własnej osobie!

\"Patrzcie!\" szepcze @Baconsaur, gdy popiół zaczyna lśnić. Powoli wyłaniają się z niego setki błyszczących feniksów!

Jeden z gorejących ptaków siada na kościanym ramieniu Wesołej Żniwiarki, a ona uśmiecha się do niego. \"Od dawna nie miałam okazji ujrzeć feniksa na Kwitnących Polach\", mówi. \"Chociaż, biorąc pod uwagę ostatnie wydarzenia, muszę powiedzieć, że to bardzo adekwatne do okazji!\"

Jej głos poważnieje, chociaż (naturalnie) ciągle się uśmiecha. \"Jesteśmy znani z pracowitości, ale również z naszych uczt i uroczystości. Jakie to ironiczne: tak bardzo staraliśmy się zaplanować niezwykłe święto, że nie pozwoliliśmy sobie nawet na chwilę zabawy. Na pewno nie popełnimy znowu tego samego błędu!\"

Klaszcze w dłonie. \"A teraz - czas świętować!\"", + "questBurnoutCompletionChat": "`Wypaleniec został POKONANY!`\n\nZ wielkim westchnieniem Wypaleniec powoli uwalnia gorliwą energię, która podtrzymywała jego płomień. Gdy potwór cicho zmienia się w popiół, powietrze skrzy się do skradzionej przez niego energii, odżywiającej Wycieńczone Duchy i przywracającej im prawdziwą postać.\n\nIan, Daniel i Sezonowa Czarodziejka wiwatują, Habitanie biegną im naprzeciw, a wszyscy zaginieni mieszkańcy Kwitnących Pól ściskają swoje rodziny i przyjaciół. Ostatni Wycieńczony Duch zmienia się w Wesołą Żniwiarkę we własnej osobie!\n\nPatrzcie!\" szepcze @Baconsaur, gdy popiół zaczyna lśnić. Powoli wyłaniają się z niego setki błyszczących feniksów!\n\nJeden z gorejących ptaków siada na kościanym ramieniu Wesołej Żniwiarki, a ona uśmiecha się do niego. \"Od dawna nie miałam okazji ujrzeć feniksa na Kwitnących Polach\", mówi. \"Chociaż, biorąc pod uwagę ostatnie wydarzenia, muszę powiedzieć, że to bardzo adekwatne do okazji!\"\n\nJej głos poważnieje, chociaż (naturalnie) ciągle się uśmiecha. \"Jesteśmy znani z pracowitości, ale również z naszych uczt i uroczystości. Jakie to ironiczne: tak bardzo staraliśmy się zaplanować niezwykłe święto, że nie pozwoliliśmy sobie nawet na chwilę zabawy. Na pewno nie popełnimy znowu tego samego błędu!\"\n\nKlaszcze w dłonie. \"A teraz - czas świętować!\"\n\nWszyscy Habitanie otrzymują:\n\nChowańca Feniksa\nWierzchowca Feniksa\nOsiągnięcie: Wybawca Kwitnących Pól\nZwyczajny cukierek\nWaniliowy cukierek\nPiaskowy cukierek\nCynamonowy cukierek\nCzekoladowy cukierek\nZgniły cukierek\nKwaśny różowy cukierek\nKwaśny niebieski cukierek\nMiodowy cukierek", + "questBurnoutBoss": "Wypaleniec", + "questBurnoutBossRageTitle": "Atak Wycieńczenia", + "questBurnoutBossRageDescription": "Gdy ten wskaźnik się zapełni, Wypaleniec wykona Atak Wycieńczenia na Habitice.", + "questBurnoutDropPhoenixPet": "Feniks (Chowaniec)", + "questBurnoutDropPhoenixMount": "Feniks (Wierzchowiec)", + "questBurnoutBossRageQuests": "`Wypaleniec używa ATAKU WYCIEŃCZENIA!`\n\nO, nie! Mimo naszych wysiłków, opuściliśmy trochę Codziennych zadań, a Wypaleniec aż płonie z energii! Z trzaskającym warkotem pochłania Iana, Mistrza Zadań, w fali widmowego ognia. Gdy tlące się zwoje z zadaniami opadają, a dym się rozwiewa, widzisz, że z Iana została wyssana energia, co zmieniło go w Wycieńczonego Ducha!\n\nTylko pokonanie Wypaleńca może odwrócić zaklęcie i przywrócić naszemu drogiemu Mistrzowi Zadań prawdziwą postać. Pilnujmy naszych Codziennych zadań i pokonajmy tę bestię, zanim znowu zaatakuje!", + "questBurnoutBossRageSeasonalShop": "`Wypaleniec używa ATAKU WYCIEŃCZENIA!`\n\nAaa!!! Nasze niewykonane Codzienne zadania zasiliły płomień Wypaleńca i teraz ma dosyć energii, aby znowu zaatakować! Przywołuje słup widmowego ognia, który spala Sklepik Sezonowy. Z przerażeniem odkrywasz, że pogodna Sezonowa Czarodziejka zmieniła się w Wycieńczonego Ducha.\n\nMusimy uratować naszych NPC! Szybko, Habitanie, ukończcie wasze zadania i pokonajcie Wypaleńca, zanim zaatakuje po raz trzeci!", + "questBurnoutBossRageTavern": "`Wypaleniec używa ATAKU WYCIEŃCZENIA!`\n\nWielu Habitan chowało się przed Wypaleńcem w Karczmie, ale nie na długo! Z jękliwym wyciem Wypaleniec zagarnia Karczmę w swoje rozpalone do białości łapska. Podczas gdy klienci uciekają, Daniel, uwięziony w uścisku Wypaleńca, przemienia się w Wycieńczonego Ducha na twoich oczach!\n\nTen płomienny koszmar trwa już zbyt długo. Nie poddawajcie się... Jesteśmy już blisko pokonania Wypaleńca raz na zawsze!", + "questFrogText": "Bagno Śmieciowej Żaby", + "questFrogNotes": "As you and your friends are slogging through the Swamps of Stagnation, @starsystemic points at a large sign. \"Stay on the path -- if you can.\"

\"Surely that isn't hard!\" @RosemonkeyCT says. \"It's broad and clear.\"

But as you continue, you notice that path is gradually overtaken by the muck of the swamp, laced with bits of strange blue debris and clutter, until it's impossible to proceed.

As you look around, wondering how it got this messy, @Jon Arjinborn shouts, \"Look out!\" An angry frog leaps from the sludge, clad in dirty laundry and lit by blue fire. You will have to overcome this poisonous Clutter Frog to progress!", + "questFrogCompletion": "The frog cowers back into the muck, defeated. As it slinks away, the blue slime fades, leaving the way ahead clear.

Sitting in the middle of the path are three pristine eggs. \"You can even see the tiny tadpoles and through the clear casing!\" @Breadstrings says. \"Here, you should take them.\"", + "questFrogBoss": "Śmieciowa Żaba", + "questFrogDropFrogEgg": "Żaba (jajo)", + "questFrogUnlockText": "Odblokowuje dostęp do kupna żabich jaj na Targu", + "questSnakeText": "Wąż Rozproszenia", + "questSnakeNotes": "Trzeba mieć silnego ducha, by żyć na Wydmach Rozproszenia. Spieczona słońcem pustynia jest mało produktywnym miejscem, a na lśniących wydmach niejeden wędrowiec się zagubił. Jednak nawet miejscowi boją się czegoś. Piaski przesuwają i wywracają całe wioski. Mieszkańcy twierdzą, że potwór o ogromnym wężowatym cielsku czatuje na nich pod piaskami. Wszyscy razem ustalili nagrodę dla kogoś, kto pomoże im znaleźć i zatrzymać potwora. Znani i chwaleni zaklinacze węży, @EmeraldOx i @PainterProphet, zgodzili się pomóc ci wezwać bestię. Czy zdołasz ją pokonać?", + "questSnakeCompletion": "Z pomocą zaklinaczy wygnaliście Węża Rozproszenia. Cieszysz się, że pomogłeś mieszkańcom Wydm, jednak jest ci smutno z powodu pokonanego przeciwnika. Podczas gdy podziwiasz widoki, podchodzi do ciebie @LordDarkly. \"Dziękuję! To może nie jest wiele, ale mam nadzieję, że wystarczająco wyraża naszą wdzięczność.\" Wręcza ci trochę złota i... kilka jaj węża! Ostatecznie zobaczysz znowu to wspaniałe zwierzę.", + "questSnakeBoss": "Wąż rozproszenia", + "questSnakeDropSnakeEgg": "Wąż (jajo)", + "questSnakeUnlockText": "Odblokowuje dostęp do kupna jaj Węża na Targu" } \ No newline at end of file diff --git a/common/locales/pl/rebirth.json b/common/locales/pl/rebirth.json index fe85a8236f..104e55f842 100644 --- a/common/locales/pl/rebirth.json +++ b/common/locales/pl/rebirth.json @@ -2,9 +2,9 @@ "rebirthNew": "Odrodzenie – nowa przygoda czeka!", "rebirthUnlock": "Odblokowałeś opcję odrodzenia! Specjalna Kula, którą możesz kupić na targu, pozwoli Ci rozpocząć grę od nowa na poziomie 1, przy czym zachowasz wszystkie swoje zadania, chowańce, itd. Jeśli masz wrażenie, że wszystko już w tej grze osiągnąłeś, wykorzystaj tę funkcję aby ją odświeżyć. Poczuj się znów jak nowo narodzony!", "rebirthBegin": "Odrodzenie – rozpocznij nową przygodę", - "rebirthStartOver": "Rebirth starts your character over from Level 1.", + "rebirthStartOver": "Po odrodzeniu twoja postać rozpocznie grę na poziomie 1.", "rebirthAdvList1": "Odzyskujesz pełnię zdrowia.", - "rebirthAdvList2": "You have no Experience, Gold, or Equipment (with the exception of free items like Mystery items).", + "rebirthAdvList2": "Nie posiadasz żadnych punktów doświadczenia, złota ani ekwipunku (z pominięciem darmowych przedmiotów takich jak tajemnicze przedmioty).", "rebirthAdvList3": "Twoje Nawyki, Codzienne, oraz Do-Zrobienia zostaną zresetowane do poziomu żółtego, a ich serie wyzerowane.", "rebirthAdvList4": "Na początku jesteś w klasie Wojownika, dopóki nie zapracujesz sobie na zmianę klasy.", "rebirthInherit": "Twoja postać dziedziczy pewne cechy ze swojego poprzedniego wcielenia.", @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "Dodatkowo otrzymujesz nowe Osiągnięcie za rozpoczęcie nowej przygody!", "beReborn": "Odródź się.", "rebirthAchievement": "Rozpocząłeś nową przygodę! To Twoje Odrodzenie numer <%= number %>, a najwyższy poziom, jaki udało Ci się osiągnąć, to <%= level %>. Aby powielić to Osiągnięcie, rozpocznij następną przygodę, gdy osiągnąłeś jeszcze wyższy Poziom!", + "rebirthAchievement100": "Rozpocząłeś nową przygodę! To Twoje Odrodzenie numer <%= number %>, a najwyższy poziom, jaki udało Ci się osiągnąć, to 100 lub więcej. Aby powielić to Osiągnięcie, rozpocznij następną przygodę, gdy osiągnąłeś przynajmniej poziom 100!", "rebirthBegan": "Rozpoczął nową przygodę", "rebirthText": "Rozpoczął <%= rebirths %> nowych przygód.", "rebirthOrb": "Wykorzystał Kulę Odrodzenia aby rozpocząć grę od nowa po osiągnięciu Poziomu", + "rebirthOrb100": "Wykorzystano Kulę Odrodzenia aby rozpocząć grę od nowa po osiągnięciu Poziomu 100 lub większego", "rebirthPop": "Stwórz nową postać na Poziomie 1 zachowując osiągnięcia, przedmioty kolekcjonerskie oraz zadania wraz z historią.", "rebirthName": "Kula Odrodzenia", "reborn": "Odrodzony, najwyższy poziom <%= reLevel %>" diff --git a/common/locales/pl/settings.json b/common/locales/pl/settings.json index 57f59d6917..557a083a3a 100644 --- a/common/locales/pl/settings.json +++ b/common/locales/pl/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "Jeśli ta opcja jest włączona, lista tagów w zadaniach będzie ukryta, gdy po raz pierwszy otworzysz zadanie do edycji.", "startAdvCollapsed": "Zaawansowane Opcje w zadaniach startują zwinięte", "startAdvCollapsedPop": "Jeśli ta opcja jest włączona, Zaawansowane Opcje będą ukryte, gdy po raz pierwszy otworzysz zadanie do edycji.", + "dontShowAgain": "Nie pokazuj mi tego więcej", + "suppressLevelUpModal": "Nie pokazuj powiadomienia przy zdobywaniu poziomu", + "suppressHatchPetModal": "Nie pokazuj powiadomienia przy wykluwaniu chowańca", + "suppressRaisePetModal": "Nie pokazuj powiadomienia przy przemianie chowańca w wierzchowca", + "suppressStreakModal": "Nie pokazuj powiadomienia przy zdobywaniu Osiągnięcia Serii", "showTour": "Pokaż przewodnik", "restartTour": "Restartuje wprowadzający przewodnik, z czasu gdy dołączyłeś do Habitica", "showBailey": "Pokaż Bailey", @@ -81,7 +86,6 @@ "emailChange1": "Aby zmienić swój adres e-mail, wyślij wiadomość na", "emailChange2": "admin@habitica.com", "emailChange3": "w treści wpisując zarówno stary jak i nowy adres e-mail, a także swoje ID użytkownika.", - "username": "Nazwa użytkownika", "usernameOrEmail": "Login lub Email", "email": "E-mail", "registeredWithFb": "Logowanie / Rejestracja z użyciem Facebook'a", @@ -89,7 +93,7 @@ "loginNameDescription2": "Użytkownik → Profil", "loginNameDescription3": ", aby zmienić nazwę, która pojawia się na Twoim avatarze i przy wiadomościach na czacie.", "emailNotifications": "Powiadomienia e-mail", - "wonChallenge": "Wygrałeś wyzwanie", + "wonChallenge": "Wygrałeś wyzwanie!", "newPM": "Otrzymane wiadomości prywatne", "giftedGems": "Podarowane klejnoty", "giftedGemsInfo": "<%= amount %> klejnotów - przez <%= name %>", @@ -118,5 +122,29 @@ "promoCode": "Kod promocyjny", "promoCodeApplied": "Zastosowano kod promocyjny! Sprawdź swój ekwipunek", "promoPlaceholder": "Wpisz kod promocyjny", - "displayInviteToPartyWhenPartyIs1": "Wyświetl przycisk Zaproś do drużyny, gdy drużyna ma 1 członka." + "displayInviteToPartyWhenPartyIs1": "Wyświetl przycisk Zaproś do drużyny, gdy drużyna ma 1 członka.", + "saveCustomDayStart": "Zapisz własny początek dnia", + "registration": "Rejestracja", + "addLocalAuth": "Dodaj uwierzytelnianie lokalne:", + "generateCodes": "Generuj kody", + "generate": "Generuj", + "getCodes": "Zdobądź kody", + "webhooks": "Webhooks", + "enabled": "Włączone", + "webhookURL": "Webhook URL", + "add": "Dodaj", + "buyGemsGoldCap": "Limit podniesiony do <%= amount %>", + "mysticHourglass": "<%= amount %> Mistyczne Klepsydry", + "mysticHourglassText": "Mistyczna Klepsydra pozwala na zakup Zestawów tajemniczych przedmiotów z poprzednich miesięcy.", + "purchasedPlanId": "<%= price %> dolarów będzie pobierane z konta co każde <%= months %> miesięcy (<%= plan %>)", + "purchasedPlanExtraMonths": "Posiadasz <%= months %> miesięcy kredytu abonenckiego.", + "consecutiveSubscription": "Ciągłość abonamentu", + "consecutiveMonths": "Ilość miesięcy z rzędu:", + "gemCapExtra": "Dodatkowy limit łupów:", + "mysticHourglasses": "Mistyczne Klepsydry:", + "paypal": "PayPal", + "amazonPayments": "Płatności Amazon", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/pl/spells.json b/common/locales/pl/spells.json index e016cc0b04..bf6f116970 100644 --- a/common/locales/pl/spells.json +++ b/common/locales/pl/spells.json @@ -47,4 +47,4 @@ "spellSpecialSeafoamNotes": "Zamień przyjaciela w morskie stworzenie!", "spellSpecialSandText": "Piasek", "spellSpecialSandNotes": "Anuluj skutki Piany Morskiej" -} +} \ No newline at end of file diff --git a/common/locales/pl/subscriber.json b/common/locales/pl/subscriber.json index ba1cd1c6e3..aa71208a96 100644 --- a/common/locales/pl/subscriber.json +++ b/common/locales/pl/subscriber.json @@ -59,10 +59,10 @@ "timeTravelers": "Podróżnicy w Czasie", "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> i <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitle": "Tajemniczy Podróżnicy w Czasie", - "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.", - "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 <%= linkStart %>here<%= linkEnd %>! 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!", + "timeTravelersPopoverNoSub": "Potrzebujesz Mistycznej Klepsydry, aby wezwać tajemniczych Podróżników w Czasie! <%=linkStart %>Abonenci<%=linkEnd %> otrzymują jedną Mistyczną Klepsydrę za każde kolejne trzy miesiące subskrypcji. Wróć tu z Mistyczną Klepsydrą, a Podróżnicy w Czasie przyniosą ci rzadkiego chowańca, wierzchowca lub zestaw przedmiotów abonenckich z przeszłości... lub może nawet z przyszłości.", + "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": "Gratulacje! Posiadasz już wszystko,co Podróżnicy w Czasie aktualnie oferują. Dziękujemy za wspieranie strony!", + "mysticHourglassPopover": "Mistyczna Klepsydra pozwala na kupienie pewnych przedmiotów o ograniczonej czasowo dostępności, takich jak comiesięczne Zestawy Tajemniczych Przedmiotów i nagrody od Światowych bossów z przeszłości.", "subUpdateCard": "Karta Uaktualnienia", "subUpdateTitle": "Aktualizuj", "subUpdateDescription": "Uaktualnij kartę by ją naładować.", @@ -71,9 +71,9 @@ "hourglassBuyItemConfirm": "Kupić ten przedmiot za 1 Mistyczną Klepsydrę?", "petsAlreadyOwned": "Chowaniec obecnie posiadany.", "mountsAlreadyOwned": "Wierzchowiec obecnie posiadany.", - "typeNotAllowedHourglass": "Item type not supported for purchase with Mystic Hourglass. Allowed types:", - "petsNotAllowedHourglass": "Pet not available for purchase with Mystic Hourglass.", - "mountsNotAllowedHourglass": "Mount not available for purchase with Mystic Hourglass.", + "typeNotAllowedHourglass": "Tego przedmiotu nie można kupić za Mistyczne Klepsydry. Dostępne typy przedmiotów:", + "petsNotAllowedHourglass": "Tego chowańca nie można kupić za Mistyczne Klepsydry.", + "mountsNotAllowedHourglass": "Tego wierzchowca nie można kupić za Mistyczne Klepsydry.", "hourglassPurchase": "Kupiłeś przedmiot używając Mistycznej Klepsydry!", "hourglassPurchaseSet": "Kupiłeś zestaw przedmiotów używając Mistycznej Klepsydry!" } \ No newline at end of file diff --git a/common/locales/pl/tasks.json b/common/locales/pl/tasks.json index 47201b89d8..c1f37d4b44 100644 --- a/common/locales/pl/tasks.json +++ b/common/locales/pl/tasks.json @@ -88,14 +88,13 @@ "fortifyText": "Wzmocnienie przywróci wszystkie zadania do wartości neutralnej (żółty kolor), tak jakbyś dopiero co je dodał, a w dodatku uzdrowi cię do pełna. Jest to świetne rozwiązanie, jeśli czerwone zadania sprawiają w grze zbyt wiele trudności lub z powodu niebieskich zadań gra jest zbyt łatwa. Jeśli rozpoczęcie od zera brzmi znacznie bardziej motywująco, to poświęć Klejnoty i poczuj ulgę!", "sureDelete": "Jesteś pewien, że chcesz usunąć to zadanie?", "streakCoins": "Premia za serię!", - "pushTaskToTop": "Prześlij zadanie na górę", - "pushTaskToBottom": "Prześlij zadanie na spód", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "Najpierw wpisz nazwę zadania.", "dailiesRestingInInn": "Odpoczywasz w Gospodzie! Twoje Codzienne NIE zadadzą ci dzisiaj obrażeń, jednak w dalszym ciągu codziennie BĘDĄ się odświeżać. Jeśli uczestniczysz w misji, nie otrzymasz obrażeń/nie zbierzesz przedmiotów do czasu wymeldowania z Gospody, jednak wciąż możesz otrzymać obrażenia od bossa, jeśli członkowie twojej drużyny ominą swoje Codzienne.", "habitHelp1": "Dobre nawyki są czynnościami, które wykonujesz często. Dostajesz za to nagrody w postaci złota i punktów doświadczenia za każdym razem, gdy klikniesz <%= plusIcon %>.", "habitHelp2": "Złe nawyki są czynnościami, których należy unikać. Wysysają punkty zdrowia za każdym razem, gdy klikniesz <%= minusIcon %>.", "habitHelp3": "Dla inspiracji sprawdź te przykładowe nawyki!", - "newbieGuild": "Masz jeszcze jakieś pytania? Zadaj je w <%= linkStart %>Gildii Nowicjuszy (Newbies Guild)<%= linkEnd %>!", + "newbieGuild": "Masz jeszcze jakieś pytania? Zadaj je w <%= linkStart %>Gildii Świeżaków (Newbies Guild)<%= linkEnd %>!", "dailyHelp1": "Zadania codzienne powtarzają się <%= emphasisStart %>każdego dnia<%= emphasisEnd %>, kiedy są aktywne. Kliknij na <%= pencilIcon %>, aby zmienić dni, w których zadanie codzienne jest aktywne.", "dailyHelp2": "Jeśli nie wypełnisz aktywnych zadań codziennych, utracisz pewną liczbę punktów zdrowia, gdy dzień dobiegnie końca.", "dailyHelp3": "Zadania codzienne <%= emphasisStart %>czerwienieją<%= emphasisEnd %> kiedy je opuszczasz, zaś <%= emphasisStart %>niebieścieją<%= emphasisEnd %> gdy je wypełniasz. Im intensywniejszy kolor ma zadanie codzienne, tym większa Twoja nagroda... albo Twoje obrażenia.", diff --git a/common/locales/pt/backgrounds.json b/common/locales/pt/backgrounds.json index 81ddd9ff43..ad562cff03 100644 --- a/common/locales/pt/backgrounds.json +++ b/common/locales/pt/backgrounds.json @@ -112,11 +112,25 @@ "backgroundStableNotes": "Observe suas montaria no Estábulo de Habitica", "backgroundTavernText": "Taverna de Habitica", "backgroundTavernNotes": "Visite a Taverna de Habitica", - "backgrounds102015": "SET 17: Released October 2015", - "backgroundHarvestMoonText": "Harvest Moon", - "backgroundHarvestMoonNotes": "Cackle under the Harvest Moon.", - "backgroundSlimySwampText": "Slimy Swamp", - "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", - "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgrounds102015": "Conjunto 17: Lançado em Outubro de 2015", + "backgroundHarvestMoonText": "Lua da Colheita", + "backgroundHarvestMoonNotes": "Cacarejo sob a Lua da Colheita", + "backgroundSlimySwampText": "Pântano Pegajoso", + "backgroundSlimySwampNotes": "Se arrastar por Pântano Pegajoso", + "backgroundSwarmingDarknessText": "Escuridão Fervilhante", + "backgroundSwarmingDarknessNotes": "Trema na Escuridão Fervilhante", + "backgrounds112015": "SET 18: Lançado em Novembro de 2015", + "backgroundFloatingIslandsText": "Ilhas Flutuantes", + "backgroundFloatingIslandsNotes": "Saltite nas Ilhas Flutuantes.", + "backgroundNightDunesText": "Dunas Noturnas", + "backgroundNightDunesNotes": "Caminhar calmamente pelas Dunas à Noite", + "backgroundSunsetOasisText": "Oasis do pôr do sol", + "backgroundSunsetOasisNotes": "Corar no Oásis Pôr de Sol", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/pt/challenge.json b/common/locales/pt/challenge.json index 182ea2de55..9c9d98966e 100644 --- a/common/locales/pt/challenge.json +++ b/common/locales/pt/challenge.json @@ -43,8 +43,8 @@ "exportChallengeCSV": "Exportar para CSV", "selectGroup": "Favor selecionar grupo", "challengeCreated": "Desafio criado", - "sureDelCha": "Tem certeza que quer deletar esse desafio", - "sureDelChaTavern": "Tem certeza que quer deletar esse desafio? Suas gemas não serão reembosadas.", + "sureDelCha": "Tem certeza que deseja deletar esse desafio?", + "sureDelChaTavern": "Tem certeza que deseja deletar esse desafio? Suas gemas não serão reembosadas.", "removeTasks": "Remover Tarefas", "keepTasks": "Manter Tarefas", "closeCha": "Terminar desafio e...", @@ -59,5 +59,9 @@ "challengeNotEnoughGems": "Você não tem gemas suficientes para postar este desafio.", "noPermissionEditChallenge": "Você não têm permissões para editar esse desafio", "noPermissionDeleteChallenge": "Você não têm permissões para deletar esse desafio", - "noPermissionCloseChallenge": "Você não têm permissões para fechar esse desafio" + "noPermissionCloseChallenge": "Você não têm permissões para fechar esse desafio", + "congratulations": "Parabéns!", + "hurray": "Hurra!", + "noChallengeOwner": "sem dono", + "noChallengeOwnerPopover": "Esse desafio não possui um dono porque quem criou o desafio deletou sua conta." } \ No newline at end of file diff --git a/common/locales/pt/character.json b/common/locales/pt/character.json index d353202955..969589c1da 100644 --- a/common/locales/pt/character.json +++ b/common/locales/pt/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "Bônus de Classe", "battleGear": "Equipamento de Batalha", "battleGearText": "Este é o equipamento que você usa em batalha; ele influencia os números ao interagir com suas tarefas.", + "autoEquipBattleGear": "Auto-equipar novos equipamentos", "costume": "Traje", "costumeText": "Se preferir a aparência de outro equipamento em vez do que estiver usando, marque a opção \"Usar Traje\" para vestir um traje enquanto usa seu equipamento de batalha por baixo.", "useCostume": "Usar Traje", @@ -64,6 +65,10 @@ "ultimGearText": "Atualizou para o conjunto de arma e armadura máxima para as seguintes classes:", "level": "Nível", "levelUp": "Subiu de Nível!", + "gainedLevel": "Você subiu de nível!", + "leveledUp": "Atingindo seus objetivos na vida real, você subiu para o nível<%= level %>!", + "fullyHealed": "Você foi completamente curado!", + "huzzah": "Huzzah!", "mana": "Mana", "hp": "PV", "mp": "PM", diff --git a/common/locales/pt/content.json b/common/locales/pt/content.json index eb89bb9000..8d5dd1a5b8 100644 --- a/common/locales/pt/content.json +++ b/common/locales/pt/content.json @@ -64,7 +64,7 @@ "questEggSpiderAdjective": "uma assustadora", "questEggOwlText": "Coruja", "questEggOwlMountText": "Coruja", - "questEggOwlAdjective": "uma sábia", + "questEggOwlAdjective": "um sábio", "questEggPenguinText": "Pinguim", "questEggPenguinMountText": "Pinguim", "questEggPenguinAdjective": "um perspicaz", @@ -73,12 +73,12 @@ "questEggTRexAdjective": "um pequeno", "questEggRockText": "Pedra", "questEggRockMountText": "Pedra", - "questEggRockAdjective": "uma animada", + "questEggRockAdjective": "um animado", "questEggBunnyText": "Coelhinho", - "questEggBunnyMountText": "Coelho", - "questEggBunnyAdjective": "um aconchegado", + "questEggBunnyMountText": "Coelhinho", + "questEggBunnyAdjective": "um aconchegante", "questEggSlimeText": "Gosma de Marshmallow", - "questEggSlimeMountText": "Limo de Marshmallow", + "questEggSlimeMountText": "Gosma de Marshmallow", "questEggSlimeAdjective": "um doce", "questEggSheepText": "Ovelha", "questEggSheepMountText": "Ovelha", @@ -95,7 +95,13 @@ "questEggHorseText": "Cavalo", "questEggHorseMountText": "Cavalo", "questEggHorseAdjective": "um galopante", - "eggNotes": "Ache uma poção de eclosão para usá-la nesse ovo e ele irá eclodir em um <%= eggAdjective(locale) %> <%= eggText(locale) %>.", + "questEggFrogText": "Sapo", + "questEggFrogMountText": "Sapo", + "questEggFrogAdjective": "um principesco", + "questEggSnakeText": "Cobra", + "questEggSnakeMountText": "Cobra", + "questEggSnakeAdjective": "uma escorregadia", + "eggNotes": "Ache uma poção de eclosão para usar nesse ovo e ele irá eclodir em um <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "Básico", "hatchingPotionWhite": "Branco", "hatchingPotionDesert": "Deserto", diff --git a/common/locales/pt/faq.json b/common/locales/pt/faq.json index 4069efacc2..9899b1fb22 100644 --- a/common/locales/pt/faq.json +++ b/common/locales/pt/faq.json @@ -2,11 +2,11 @@ "frequentlyAskedQuestions": "Perguntas Frequentes", "faqQuestion0": "Estou confuso. Onde encontro uma visão geral?", "iosFaqAnswer0": "Primeiro, você criará tarefas que você quer realizar no seu dia-a-dia. Então, na medida que você for completando as tarefas na vida real e as marcando, você ganhará experiência e ouro. Ouro é usado para comprar equipamento e alguns itens, assim como recompensas personalizadas. A experiência faz seu personagem passar de nível e destravar conteúdos, tais como Mascotes, Habilidades e Missões! Você pode personalizar seu personagem no Menu > Personalizar Avatar.\n\nAlgumas maneiras básicas de interagir: clique no (+) no canto superior direito e adicione uma nova tarefa. Toque em uma tarefa existente para lhe editar e escorregue para esquerda para lhe deletar. Você pode classificar tarefas usando Etiquetas no canto superior esquerdo e expandir e contrair listas clicando na bolha da lista.", - "webFaqAnswer0": "Primeiro, você precisará configurar tarefas que deseja realizar no seu dia-a-dia. Depois, conforme você faz estas tarefas na vida real e marca elas no jogo, você ganhará Experiência e Ouro. O Ouro é usado para comprar equipamentos e outros items, assim como recompensas customizadas. A Experiência é necessária para subir o nível do seu personagem e desbloquear conteúdos novos, como mascotes, habilidades e missões! Para maiores detalhes, a Wiki possui uma visão geral excelente sobre o jogo [aqui mesmo](http://habitica.wikia.com/wiki/Habitica_Wiki).", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", "faqQuestion1": "Como configuro minhas tarefas?", "iosFaqAnswer1": "Bons Hábitos (aqueles com um +) são tarefas que você pode fazer várias vezes por dia, como comer vegetais. Maus Hábitos (aqueles com um -) são tarefas que você deve evitar, como roer unha. Hábitos com um + e um - tem uma escolha boa e uma escolha ruim, como usar as escadas vs. usar o elevador. Bons Hábitos te dão ouro e experiência. Maus Hábitos subtraem vida.\n\nTarefas Diárias são tarefas que você deve fazer todos os dias, como escovar os dentes ou conferir seu e-mail. Você pode ajustar os dias em que uma tarefa Diária é valida ao edita-la. Se você perder uma Diária que está valendo, seu avatar irá tomar dano no fim do dia. Tome cuidado para não adicionar muitas Diárias de uma vez!\n\nAfazeres é a sua lista de afazeres. Cumprir um Afazer te dá ouro e experiência. Você nunca perde vida com Afazeres. Você pode adicionar um prazo a um Afazer ao edita-lo.", "webFaqAnswer1": "Bons Hábitos (aqueles com um ) são tarefas que você pode fazer várias vezes por dia, como comer vegetais. Maus Hábitos (aqueles com um ) são tarefas que você deve evitar, como roer unha. Hábitos com um e um tem uma escolha boa e uma escolha ruim, como usar as escadas vs. usar o elevador. Bons Hábitos te dão ouro e experiência. Maus Hábitos subtraem vida.\n

\nTarefas Diárias são tarefas que você deve fazer todos os dias, como escovar os dentes ou conferir seu e-mail. Você pode ajustar os dias em que uma tarefa Diária é valida ao edita-la. Se você perder uma Diária que está valendo, seu avatar irá tomar dano no fim do dia. Tome cuidado para não adicionar muitas Diárias de uma vez!\n

\nAfazeres é a sua lista de afazeres. Cumprir um Afazer te dá ouro e experiência. Você nunca perde vida com Afazeres. Você pode adicionar um prazo a um Afazer ao edita-lo.", - "faqQuestion2": "O que são tarefas modelo?", + "faqQuestion2": "Há algumas tarefas modelo?", "iosFaqAnswer2": "Nossa wiki tem quatro listas de tarefas modelo para usar como inspiração:\n

\n* [Amostra de Hábitos](http://habitica.wikia.com/wiki/Sample_Habits)\n* [Amostra de tarefas Diárias](http://habitica.wikia.com/wiki/Sample_Dailies)\n* [Amostra de Afazeres](http://habitica.wikia.com/wiki/Sample_To-Dos)\n* [Amostra de Recompensas Personalizadas](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", "webFaqAnswer2": "Nossa wiki tem quatro listas de tarefas modelo para usar como inspiração:\n* [Amostra de Hábitos](http://habitica.wikia.com/wiki/Sample_Habits)\n* [Amostra de tarefas Diárias](http://habitica.wikia.com/wiki/Sample_Dailies)\n* [Amostra de Afazeres](http://habitica.wikia.com/wiki/Sample_To-Dos)\n* [Amostra de Recompensas Personalizadas](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", "faqQuestion3": "Porque minhas tarefas mudam de cor?", @@ -16,9 +16,9 @@ "iosFaqAnswer4": "Existem diversas coisas que podem te fazer tomar dano. Primeiro, se você deixar uma tarefa Diária incompleta até o fim do dia, ela te dará dano. Segundo, se você tiver um mau Hábito, ele te dará dano. Finalmente, se você estiver em uma Batalha de Chefe com sua Equipe e um de seus companheiros não completou todas suas tarefas Diárias, o Chefe irá te atacar.\n\nO principal modo de se curar é ganhando um nível, que restaura toda sua vida. Você também pode comprar uma Poção de Vida com ouro na coluna de Recompensas. Além disso, no nível 10 ou depois, você pode escolher se tornar um Curandeiro, e então você aprenderá habilidades de cura. Se você está em uma equipe com um Curandeiro, ele pode te curar também.", "webFaqAnswer4": "Existem diversas coisas que podem te fazer tomar dano. Primeiro, se você deixar uma tarefa Diária incompleta até o fim do dia, ela te dará dano. Segundo, se você tiver um mau Hábito, ele te dará dano. Finalmente, se você estiver em uma Batalha de Chefe com sua Equipe e um de seus companheiros não completou todas suas tarefas Diárias, o Chefe irá te atacar.\n

\nO principal modo de se curar é ganhando um nível, que restaura toda sua vida. Você também pode comprar uma Poção de Vida com ouro na coluna de Recompensas. Além disso, no nível 10 ou depois, você pode escolher se tornar um Curandeiro, e então você aprenderá habilidades de cura. Se você está em uma equipe (em Social > Equipe) com um Curandeiro, ele pode te curar também.", "faqQuestion5": "Como jogo Habitica com meus amigos?", - "iosFaqAnswer5": "O melhor jeito é convida-los para uma Equipe com você, pelo [site](https://habitica.com/#/options/groups/party)! Nós adicionaremos a habilidade de criar uma Equipe pelo aplicativo em breve, mas enquanto isso você pode usar o [site](https://habitica.com/#/options/groups/party). Equipes podem fazer missões, batalhar monstros, e usar habilidades que ajudam um ao outro. No site, você e seus amigos também podem se unir a Guildas, que são salas de bate-papo públicas. Guildas serão adicionadas ao aplicativo em uma atualização futura!", + "iosFaqAnswer5": "O melhor jeito é convida-los para uma Equipe com você! Equipes podem fazer missões, batalhar monstros e usar habilidades para ajudar um ao outro. Vá em Menu > Equipe e clique \"Criar Nova Equipe\" se você ainda não tiver uma Equipe. Em seguida toque na lista de Membros e toque em Convidar, no canto superior direito, para convidar amigos usando suas IDs de Usuário (uma linha de números e letras que pode ser encontrada em Configurações > Detalhes da Conta no aplicativo, e Configurações > API no site). No site, você também pode convidar amigos via email, que também adicionaremos ao aplicativo em uma atualização futura.\n\nNo site, você e seus amigos também podem se unir a Guildas, que são salas de bate-papo públicas. Guildas serão adicionadas ao aplicativo em uma atualização futura!", "webFaqAnswer5": "O melhor jeito é convida-los para uma equipe com você, em Social > Equipe! Equipes podem fazer missões, batalhar monstros e usar habilidades que ajudam um ao outro. Vocês também podem se unir a Guildas juntos (Social > Guildas). Guildas são salas de bate -papo focadas em um interesse em comum ou na busca de um mesmo objetivo, e podem ser tanto públicas como privadas. Você pode participar de quantas guildas desejar, mas apenas uma equipe.\n

\nPara informações mais detalhadas, confira nossas paginas na wiki em [Equipes](http://habitrpg.wikia.com/wiki/Party) e [Guildas](http://habitrpg.wikia.com/wiki/Guilds).", - "faqQuestion6": "Como recebo um Mascote ou uma Montaria?", + "faqQuestion6": "Como consigo um Mascote ou Montaria?", "iosFaqAnswer6": "No nível 3, você irá destravar o sistema de Drop. Toda vez que você completar uma tarefa, você terá uma chance aleatória de receber um ovo, uma poção de eclosão ou um pedaço de comida. Eles serão guardados em Menu > Itens.\n\nPara eclodir um Mascote, você precisará de um ovo e uma poção de eclosão. Toque no ovo para determinar que espécie você quer eclodir e selecione \"Eclodir Ovo.\" Depois escolha uma poção de eclosão para determinar sua cor! Vá para Menu > Mascotes para equipar o novo Mascote ao seu avatar ao toca-lo.\n\nVocê também pode transformar seus Mascotes em Montarias ao alimenta-los em Menu > Mascotes. Selecione um Mascote, e depois escolha \"Alimentar Mascote\"! Você tera que alimentar um mascote várias vezes antes dele se tornar uma Montaria, mas se você conseguir descobrir qual é sua comida favorita, ele crescerá mais rapidamente. Use tentativa e erro, ou [veja os spoilers aqui](http://habitica.wikia.com/wiki/Food#Food_Preferences). Logo que conseguir uma Montaria, vá para Menu > Montarias e toque nele para equipa-lo ao seu avatar.\n\nVocê também pode conseguir ovos para Mascotes de Missão ao completar certas Missões. (Veja abaixo para aprender mais sobre Missões.)", "webFaqAnswer6": "No nível 3, você irá desbloquear o sistema de Drop. Toda vez que completar uma tarefa, você terá uma chance aleatória de receber um ovo, uma poção de eclosão ou um pedaço de comida. Eles serão guardados em Inventário > Loja.\n

\nPara eclodir um Mascote, você precisará de um ovo e uma poção de eclosão. Clique em um ovo para determinar a espécie que você quer eclodir, e em seguida clique na poção de eclosão para determinar sua cor! Vá para Inventário > Mascotes para equipar o mascote ao ser avatar ao clica-lo.\n

\nVocê também pode transformar seus Mascotes em Montarias ao alimenta-los em Inventário > Mascotes. Clique em um Mascote, e depois clique em um pedaço de comida no menu direito para alimenta-lo! Você tera que alimentar um Mascote várias vezes antes deles se tornar uma Montaria, mas se vocÇe conseguir descobrir qual é a sua comida favorita, ele crescerá mais rapidamente. Use tentativa e erro, ou [veja os spoilers aqui](http://habitica.wikia.com/wiki/Food#Food_Preferences). Logo que conseguir uma Montaria, vá para Inventário > Montaria e clique na Montaria para equipa-la ao seu avatar.\n

\nVocê tambem pode conseguir ovos para Mascotes de Missão ao completar certas Missões. (Veja abaixo para aprender mais sobre Missões)", "faqQuestion7": "Como eu me torno um Guerreiro, Mago, Ladino ou Curandeiro?", @@ -28,14 +28,17 @@ "iosFaqAnswer8": "A barra azul que apareceu após você chegar no nível 10 e escolher sua Classe é sua barra de Mana. A medida que você continua ganhando níveis, você desbloqueará Habilidades especiais que custarão Mana para serem usadas. Cada Classe tem diferentes Habilidades, que aparecerão após o nível 11 em Menu > Usar Habilidades. Diferente da barra de vida, sua Mana não enche quando você ganha um nível. Ao invés disso, Mana é adquirida quando você completa Bons Hábitos, Diárias e Afazeres, e perdida quando você cede à Maus Hábitos. Você também irá recuperar um pouco de Mana ao fim do dia -- quanto mais Diárias você completar, mais você irá ganhar.", "webFaqAnswer8": "A barra azul que apareceu após você chegar no nível 10 e escolher sua Classe é sua barra de Mana. A medida que você continua ganhando níveis, você desbloqueará Habilidades especiais que custarão Mana para serem usadas. Cada Classe tem diferentes Habilidades, que aparecerão após o nível 11 em uma seção especial na Coluna de Recompensas. Diferente da barra de vida, sua Mana não enche quando você ganha um nível. Ao invés disso, Mana é adquirida quando você completa Bons Hábitos, Diárias e Afazeres, e perdida quando você cede à Maus Hábitos. Você também irá recuperar um pouco de Mana ao fim do dia -- quanto mais Diárias você completar, mais você irá ganhar.", "faqQuestion9": "Como eu faço para enfrentar monstros e participar de Missões?", - "iosFaqAnswer9": "Primeiro, você precisa criar ou se juntar a uma Equipe (veja acima). Apesar de você poder enfrentar monstros sozinho, nós recomendamos jogar com um grupo, pois isso deixará as Missões muito mais fáceis. Além disso, ter um amigo para comemorar com você ao completar tarefas é bem mais motivante!\n\nEm seguida, você precisará de um Pergaminho de Missão, que são guardados em Menu > Itens. Existem três maneiras de conseguir um pergaminho:\n\n-No nível 15, você receberá uma série de Missões, que são três missões interligadas. Mais séries de Missões são desbloqueadas nos níveis 30, 40 e 60, respectivamente.\n-Quando você convida pessoas para sua Equipe no [site](https://habitica.com/#/options/groups/party), você sera recompensado com o Pergaminho da Basi-Lista! (Nós adicionaremos essa função ao aplicativo em uma atualização futura.)\n-Você pode comprar Missões na página de Missões no [site](https://habitica.com/#/options/inventory/quests) usando ouro e gemas. (nòs adicionaremos essa função ao aplicativo em uma atualização futura)\n\nPara enfrentar o Chefão ou coletar itens para uma Missão de coleção, simplesmente complete suas tarefas normalmente e elas serão convertidas em dano no fim do dia. (Recarregar puxando a tela para baixo pode ser necessário para ver a vida do Chefe diminuir.) Se você está lutando contra um Chefão e você perdeu alguma Diárias, o Chefe causará dano à Equipe ao mesmo tempo que você causará dano a ele.\n\nApós o nível 11, Magos e Guerreiros ganham Habilidades que permitem causar dano adicional ao Chefe, então essas são classes execelentes para escolher após o nível 10 se você quiser ter um ataque poderoso.", + "iosFaqAnswer9": "Primeiro, você precisa criar ou se juntar a uma Equipe (veja acima). Apesar de você poder enfrentar monstros sozinho, nós recomendamos jogar com um grupo, pois isso deixará as Missões muito mais fáceis. Além disso, ter um amigo para comemorar com você ao completar tarefas é bem mais motivante!\n\nEm seguida, você precisará de um Pergaminho de Missão, que são guardados em Menu > Itens. Existem três maneiras de conseguir um pergaminho:\n\n-No nível 15, você receberá uma série de Missões, que são três missões interligadas. Mais séries de Missões são desbloqueadas nos níveis 30, 40 e 60, respectivamente.\n-Quando você convida pessoas para sua Equipe, você será recompensado com o Pergaminho da Basi-Lista!\n-Você pode comprar Missões na página de Missões no [site] (https://habitica.com/#/options/inventory/quests) usando Ouro e Gemas. (Nós adicionaremos essa função ao aplicativo em uma atualização futura)\n\nPara enfrentar o Chefão ou coletar itens para uma Missão de coleção, simplesmente complete suas tarefas normalmente e elas serão convertidas em dano no fim do dia. (Recarregar a página pode ser necessário para ver a vida do Chefe diminuir.) Se você está lutando contra um Chefão e você perdeu alguma Diárias, o Chefe causará dano à Equipe ao mesmo tempo que você causará dano a ele.\n\nApós o nível 11, Magos e Guerreiros ganham Habilidades que permitem causar dano adicional ao Chefe, então essas são classes execelentes para escolher após o nível 10 se você quiser ter um ataque poderoso.", "webFaqAnswer9": "Primeiro, você precisa criar ou se juntar a uma Equipe (em Social > Equipe). Apesar de você poder enfrentar monstros sozinho, nós recomendamos jogar com um grupo, pois isso deixará as Missões muito mais fáceis. Além disso, ter um amigo para comemorar com você ao completar tarefas é bem mais motivante!\n

\nEm seguida, você precisará de um Pergaminho de Missão, que são guardados em Inventário > Missões. Existem três maneiras de conseguir um pergaminho:\n

\n*Quando você convida pessoas para sua Equipe, você sera recompensado com o Pergaminho da Basi-Lista!\n*No nível 15, você receberá uma série de Missões, que são três missões interligadas. Mais séries de Missões são desbloqueadas nos níveis 30, 40 e 60, respectivamente.\n*Você pode comprar Missões na página de Missões (Inventário > Missões) usando Ouro e Gemas.\n

\nPara enfrentar o Chefão ou coletar itens para uma Missão de coleção, simplesmente complete suas tarefas normalmente e elas serão convertidas em dano no fim do dia. (Recarregar a página pode ser necessário para ver a vida do Chefe diminuir.) Se você está lutando contra um Chefão e você perdeu alguma Diárias, o Chefe causará dano à Equipe ao mesmo tempo que você causará dano a ele.\n

\nApós o nível 11, Magos e Guerreiros ganham Habilidades que permitem causar dano adicional ao Chefe, então essas são classes execelentes para escolher após o nível 10 se você quiser ter um ataque poderoso.", - "faqQuestion10": "O que são gemas e como eu as consigo?", - "iosFaqAnswer10": "Gemas são compradas com dinheiro real ao tocar no ícone no cabeçalho. Quando as pessoas compram gemas, elas estão nos ajudando a manter o site funcionando. Nós somos muito gratos pelo seu suporte!\n\nEm adição a comprar gemas diretamente, existem três outras maneiras que jogadores podem obter gemas:\n\n* Vença um Desafio no [site](https://habitica.com) que foi criado por outro jogador em Social > Desafios. (Nós iremos adicionar Desafios para o app numa futura atualização!)\n* Faça assinatura no [site](https://habitica.com/#/options/settings/subscription) and destrave a capacidade de comprar um certo número de gemas por mês.\n* Contribua com seus talentos para o projeto Habitica. Veja na página da wiki para mais detalhes: [Contribuindo com o Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\nTenha em mente que items comprados com gemas não oferecem nenhuma vantagem estatística, então os jogadores podem usar o app sem elas!", - "webFaqAnswer10": "Gemas são [compradas com dinheiro real](https://habitica.com/#/options/settings/subscription), apesar de que [assinantes](https://habitica.com/#/options/settings/subscription) podem compra-las usando Ouro. Quando alguém assina o site ou compra gemas, esta pessoa está nos ajudando a manter o site funcionando. Ficamos muito agradecidos com esse suporte!\n

\nAlém de comprar gemas diretamente, existem outras três maneiras de se conseguir gemas:\n

\n* Vença um Desafio feito por outro jogador em Social > Challenges.\n* Contribua com seus talentos para o projeto do Habitica. Veja essa pagina da wiki para mais detalhes: [Contribuindo com o Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\nTenha em mente que itens comprados com gemas não oferecem nenhuma vantagem estatística, então todos podem utilizar o site sem elas!", + "faqQuestion10": "O que são Gemas, e como as consigo?", + "iosFaqAnswer10": "Gemas são compradas com dinheiro real ao tocar no ícone de gema no cabeçalho. Quando alguém compra gemas, esta pessoa está nos ajudando a manter o site funcionando. Ficamos muito agradecidos com esse suporte! \n\nAlém de comprar gemas diretamente, existem outras três maneiras de se conseguir gemas: \n\n* Vença um Desafio no [site](https://habitica.com) feito por outro jogador em Social > Desafios. (Nós adicionaremos Desafios ao aplicativo em uma atualização futura!) \n* Inscreva-se no site [website](https://habitica.com/#/options/settings/subscription) e desbloqueie a habilidade de comprar um certo numero de gemas por mês. \n* Contribua com seus talentos para o projeto do Habitica. Veja essa pagina da wiki para mais detalhes: [Contribuindo com o Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica) \n\nTenha em mente que itens comprados com gemas não oferecem nenhuma vantagem estatística, então todos podem utilizar o aplicativo sem elas!", + "webFaqAnswer10": "Gemas são [compradas com dinheiro real](https://habitica.com/#/options/settings/subscription), apesar de que [assinantes](https://habitica.com/#/options/settings/subscription) podem compra-las usando Ouro. Quando alguém assina o site ou compra jóias, esta pessoa está nos ajudando a manter o site funcionando. Ficamos muito agradecidos com esse suporte!\n

\nAlém de comprar jóias diretamente, existem outras três maneiras de se conseguir jóias:\n

\n* Vença um Desafio feito por outro jogador em Social > Desafios.\n* Contribua com seus talentos para o projeto do Habitica. Veja essa pagina da wiki para mais detalhes: [Contribuindo com o Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\nTenha em mente que itens comprados com jóias não oferecem nenhuma vantagem estatística, então todos podem utilizar o site sem elas!", "faqQuestion11": "Como eu relato um bug ou solicito uma funcionalidade?", - "iosFaqAnswer11": "Você pode relatar um bug, solicitar uma funcionalidade ou enviar seu feedback através dos caminhos Ajuda > Reportar um Problema e Ajuda > Solicitar Funcionalidade! Vamos fazer tudo que pudermos para ajudá-lo.", + "iosFaqAnswer11": "Você pode relatar um bug, solicitar uma funcionalidade ou enviar sua opinião através do menu Ajuda > Reportar um Problema e Ajuda > Enviar Opnião! Vamos fazer tudo que pudermos para ajudá-lo.", "webFaqAnswer11": "Relatos de bugs são armazenados no GitHub. Vá para [Ajuda > Relatar um Bug](https://github.com/HabitRPG/habitrpg/issues/2760) e siga as instruções. Não se preocupe, nós o consertaremos em breve!\n

\nSolicitações de funcionalidade são armazenadas no Trello. Vá para [Ajuda > Solicitar Funcionalidade] (https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) e siga as instruções. Ta-dan!", - "iosFaqStillNeedHelp": "Se você tem uma pergunta que não está nesta lista, venha perguntar no chat da Taverna. Basta seguir o caminho Social > Taverna! Ficaremos felizes em ajudar você.", + "faqQuestion12": "Como luto contra um Chefão Global?", + "iosFaqAnswer12": "Chefões Globais são monstros especiais que aparecem na Taverna. Todos os usuários ativos estão o enfrentando automaticamente, suas tarefas e habilidades causarão dano no Chefão como de costume.\n\nVocê pode estar em uma Missão normal ao mesmo tempo. Suas tarefas e habilidades contarão para ambos Chefão Global e missões de Chefão/Coleta da sua equipe.\n\nUm Chefão Global nunca irá machucar você ou sua conta de qualquer maneira. Ao invés disso, ele tem uma Barra de Raiva que encherá quando usuários perdem Tarefas Diárias. Se a Barra de Raiva encher, ele atacará um dos Personagens-Não-Jogavéis do site e a imagem deles mudará.\n\nVocê pode ler mais sobre [past Chefões Globais](http://habitica.wikia.com/wiki/World_Bosses) na wiki.", + "webFaqAnswer12": "Chefões Globais são monstros especiais que aparecem na Taverna. Todos os usuários ativos estão o enfrentando automaticamente, suas tarefas e habilidades causarão dano no Chefão como de costume.\n

\nVocê pode estar em uma Missão normal ao mesmo tempo. Suas tarefas e habilidades contarão para ambos Chefão Global e missões de Chefão/Coleta da sua equipe.\n

\nUm Chefão Global nunca irá machucar você ou sua conta de qualquer maneira. Ao invés disso, ele tem uma Barra de Raiva que encherá quando usuários perdem Tarefas Diárias. Se a Barra de Raiva encher, ele atacará um dos Personagens-Não-Jogavéis do site e a imagem deles mudará.\n

\nVocê pode ler mais sobre [past Chefões Globais](http://habitica.wikia.com/wiki/World_Bosses) na wiki.", + "iosFaqStillNeedHelp": "Se você tem uma pergunta que não está nesta lista, venha perguntar no chat da Taverna. Basta seguir o caminho Menu> Taverna! Ficaremos felizes em ajudar você.", "webFaqStillNeedHelp": "Se você tem uma pergunta que não está nesta lista, venha perguntar na [Guilda The Newbies](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a). Ficaremos contentes em ajudar você." } \ No newline at end of file diff --git a/common/locales/pt/front.json b/common/locales/pt/front.json index c5488cb1d5..e77fc33a0a 100644 --- a/common/locales/pt/front.json +++ b/common/locales/pt/front.json @@ -74,7 +74,7 @@ "infhQuote": "[Habitica] me ajudou muito a atribuir estrutura à minha vida durante a graduação.", "invalidEmail": "Um endereço de e-mail válido é necessário para recuperar senha.", "irishfeet123Quote": "Eu tinha dificuldade em lavar a louça depois das refeições e hábitos horríveis de deixar copos por todo o lugar. [Habitica] resolveu isso!", - "joinOthers": "Junte-se a 250,000 pessoas atingindo metas de forma divertida!", + "joinOthers": "Join <%= userCount %> people making it fun to achieve goals!", "kazuiQuote": "Antes do [Habitica], eu estava empacado com minha tese, além de insatisfeito com minha disciplina nas atividades domésticas e coisas como aprendizado de vocabulário e estudo da teoria Go. No final das contas, dividir estas tarefas em pequenas listas foi a coisa certa para me manter motivado e constantemente trabalhando.", "landingadminlink": "pacotes administrativos", "landingend": "Ainda não está convencido?", @@ -179,5 +179,14 @@ "businessInquiries": "Consultas de Negócios", "merchandiseInquiries": "Consultas de Merchandise", "marketingInquiries": "Consultas de Marketing/Mídias Sociais", - "tweet": "Tweet" + "tweet": "Tweet", + "apps": "Aplicativos", + "notifyAndroidApp": "Want us to notify you when the Android app is ready? Sign up for this mailing list!", + "checkOutIOSApp": "Confira o nosso novo aplicativo para iOS!", + "imagine1": "Imagine se melhorar a sua vida fosse tão divertido quanto jogar um jogo.", + "landingCopy1": "Advance in the game by completing your real-life tasks.", + "landingCopy2": "Battle monsters with friends to stay accountable to your goals.", + "landingCopy3": "Junte-se a <%= userCount %> pessoas se divertindo enquanto melhoram as suas vidas!", + "alreadyHaveAccount": "Eu já tenho uma conta!", + "getStartedNow": "Comece agora!" } \ No newline at end of file diff --git a/common/locales/pt/gear.json b/common/locales/pt/gear.json index 9ae912b293..c80035c59d 100644 --- a/common/locales/pt/gear.json +++ b/common/locales/pt/gear.json @@ -115,7 +115,7 @@ "weaponSpecialSpring2015WarriorText": "Clava de Osso", "weaponSpecialSpring2015WarriorNotes": "É uma legítima clava de osso para cachorrinhos super ferozes e definitivamente não um brinquedo de mastigar que a Feiticeira Sazonal te deu porque quem é um bom garoto! Queeem é um bom garoto? Você!!! Você é um bom garoto!!! Aumenta Força em <%= str %>. Equipamento Edição Limitada de Primavera 2015.", "weaponSpecialSpring2015MageText": "Varinha do Mago", - "weaponSpecialSpring2015MageNotes": "Conjure uma cenoura pra si mesmo com essa varinha. Aumenta Inteligência em <%= int %> e Percepção em <%= per %>. Equipamento Edição Limitada de Primavera 2015.", + "weaponSpecialSpring2015MageNotes": "Conjure uma cenoura pra si mesmo com essa varinha. Aumenta Inteligência em <%= int %> e Percepção em <%= per %>. Equipamento de Primavera Edição Limitada 2015.", "weaponSpecialSpring2015HealerText": "Matraca de Gato", "weaponSpecialSpring2015HealerNotes": "Quando você sacode, faz um clique-claque fascinante que manteria QUALQUER UM entretido por horas. Aumenta Inteligência em <%= int %>. Equipamento Edição Limitada de Primavera 2015.", "weaponSpecialSummer2015RogueText": "Coral Atirador", @@ -128,10 +128,10 @@ "weaponSpecialSummer2015HealerNotes": "Cura enjôos e maresias! Aumenta a Inteligência em <%= int %>. Edição Limitada Conjunto de Verão 2015.", "weaponSpecialFall2015RogueText": "Machado de Morcego", "weaponSpecialFall2015RogueNotes": "Afazeres amedrontadores se acovardam frente à esse machado. Aumenta Força em <%= str %>. Equipamento Edição Limitada de Outono 2015.", - "weaponSpecialFall2015WarriorText": "Prancha de Madeira", - "weaponSpecialFall2015WarriorNotes": "Boa pra levantar coisas ou amassar tarefas. Aumenta Força em <%= str %>. Equipamento Edição Limitada de Outono 2015.", + "weaponSpecialFall2015WarriorText": "Placa de Madeira", + "weaponSpecialFall2015WarriorNotes": "Boa pra levantar coisas ou amassar tarefas. Aumenta Força em <%= str %>. Equipamento de Outono Edição Limitada 2015.", "weaponSpecialFall2015MageText": "Fio Encantado", - "weaponSpecialFall2015MageNotes": "Uma poderosa Bruxa da Costura pode controlar esse fio encantado sem nem tocar nele! Aumenta Inteligência em <%= int %> e Percepção em <%= per %>. Equipamento Edição Limitada de Outono 2015.", + "weaponSpecialFall2015MageNotes": "Uma poderosa Bruxa da Costura pode controlar esse fio encantado sem nem tocar nele! Aumenta Inteligência em <%= int %> e Percepção em <%= per %>. Equipamento de Outono Edição Limitada 2015.", "weaponSpecialFall2015HealerText": "Poção de Limo de Pântano", "weaponSpecialFall2015HealerNotes": "Fermentado com perfeição! Agora tudo que você precisa é se convencer a beber. Aumenta Inteligência em <%= int %>. Equipamento Edição Limitada de Outono 2015.", "weaponMystery201411Text": "Forcado de Banquete", @@ -149,13 +149,19 @@ "weaponArmoireRancherLassoText": "Laço do Rancheiro", "weaponArmoireRancherLassoNotes": "Laços: a ferramenta ideal para laçar e domar. Aumenta Força em <%= str %>, Percepção em <%= per %> e Inteligência em <%= int %>. Armário Encantado: Conjunto de Rancheiro (Item 3 de 3).", "weaponArmoireMythmakerSwordText": "Espada Criadora de Mitos", - "weaponArmoireMythmakerSwordNotes": "Apesar de parecer simples, esta espada criou muitos heróis míticos. Aumenta a Percepção e Força em <%= attrs %> cada. Armário Encantado: Conjunto de Toga Dourada (Item 3 de 3)", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Cajado de Ferro", - "weaponArmoireIronCrookNotes": "Martelado violentamente a partir do ferro, este cajado de ferro é bom para pastorear ovelhas. Aumenta a Percepção e a Força em <%= attrs %> cada. Armário Encantado: Conjunto de Ferro Encurvado (Item 3 de 3)", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Cajado Asa de Ouro", "weaponArmoireGoldWingStaffNotes": "As asas neste cajado vibram e giram constantemente. Aumenta todos os atributos em <%= attrs %> cada. Armário Encantado: Item Independente.", "weaponArmoireBatWandText": "Varinha de Morcego", "weaponArmoireBatWandNotes": "Esta varinha pode transformar qualquer tarefa em um morcego! Balance a varinha e veja as tarefas voarem para longe. Aumenta Inteligência em <%= int %> e Percepção em <%= per %>. Armário Encantado: Item Independente.", + "weaponArmoireShepherdsCrookText": "Cajado de Pastor", + "weaponArmoireShepherdsCrookNotes": "Útil para arrebanhar grifos. Aumenta Constituição em <%= con %>. Armário Encantado: Conjunto de Pastor (Item 1 de 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "armadura", "armorBase0Text": "Roupas Modestas", "armorBase0Notes": "Vestimenta ordinária Não concede benefícios.", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "Túnica Boba de Festa", "armorSpecialBirthday2015Notes": "Feliz Aniversário, Habitica! Vista essas Túnicas Bobas de Festa para celebrar este maravilhoso dia. Não confere benefícios.", "armorSpecialGaymerxText": "Armadura do Guerreiro Arco-Íris", - "armorSpecialGaymerxNotes": "Em celebração da temporada do orgulho e GaymerX, essa armadura especial é decorada com um radiante e colorido arco-íris! GaymerX é uma convenção de jogos celebrando a comunidade LGBTQ e jogos e é aberta a todos. Acontece no InterContinental, no centro de San Francisco, de 11-13 de julho! Não concede benefícios.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "Traje Elegante de Gato", "armorSpecialSpringRogueNotes": "Impecavelmente arrumado. Aumenta Percepção em <%= per %>. Equipamento Edição Limitada de Primavera 2014.", "armorSpecialSpringWarriorText": "Armadura Trevo-Metálica", @@ -270,13 +276,13 @@ "armorSpecialSummer2015HealerText": "Armadura de Marinheiro", "armorSpecialSummer2015HealerNotes": "Esta armadura deixa todo mundo sabendo que você é um honesto comerciante marinheiro que nunca sonharia em se comportar como um malandro. Aumenta Constituição em <%= con %>. Edição Limitada Conjunto de Verão 2015.", "armorSpecialFall2015RogueText": "Armadura de Morcego", - "armorSpecialFall2015RogueNotes": "Voe para a batalha! Aumenta Percepção em <%= per %>. Equipamento Edição Limitada de Outono 2015.", + "armorSpecialFall2015RogueNotes": "Voe para a batalha! Aumenta Percepção em <%= per %>. Equipamento de Outono Edição Limitada 2015.", "armorSpecialFall2015WarriorText": "Armadura de Espantalho", - "armorSpecialFall2015WarriorNotes": "Apesar ter sido enchida com canudinhos, esta armadura é extremamente forte! Aumenta Constituição em <%= con %>. Equipamento Edição Limitada de Outono 2015.", - "armorSpecialFall2015MageText": "Túnicas Costuradas", - "armorSpecialFall2015MageNotes": "Cada ponto de costura nesta armadura brilha com encanto. Aumenta Inteligência em <%= int %>. Equipamento Edição Limitada de Outono 2015.", - "armorSpecialFall2015HealerText": "Túnicas de Poção", - "armorSpecialFall2015HealerNotes": "O quê? Claro que essa era uma poção de constituição. Não, você definitivamente não está se transformando em um sapo! Não fique coaxando por aí. Aumenta Constituição em <%= con %>. Equipamento Edição Limitada de Outono 2015.", + "armorSpecialFall2015WarriorNotes": "Apesar ter sido enchida com canudinhos, esta armadura é extremamente forte! Aumenta Constituição em <%= con %>. Equipamento de Outono Edição Limitada 2015.", + "armorSpecialFall2015MageText": "Túnica Costurada", + "armorSpecialFall2015MageNotes": "Cada ponto de costura nesta armadura brilha com encanto. Aumenta Inteligência em <%= int %>. Equipamento de Outono Edição Limitada 2015.", + "armorSpecialFall2015HealerText": "Túnica de Poção", + "armorSpecialFall2015HealerNotes": "O quê? Claro que essa era uma poção de constituição. Não, você definitivamente não está se transformando em um sapo! Não fique coaxando por aí. Aumenta Constituição em <%= con %>. Equipamento de Outono Edição Limitada 2015.", "armorMystery201402Text": "Túnicas do Mensageiro", "armorMystery201402Notes": "Cintilantes e resistentes, essas túnicas tem vários bolsos para carregar cartas. Não concede benefícios. Item de Assinante de Fevereiro 2014.", "armorMystery201403Text": "Armadura do Andador da Floresta", @@ -305,8 +311,10 @@ "armorMystery201506Notes": "Faça snorkel por um recife de corais com esse traje de natação colorido e brilhante! Não concede benefícios. Item de Assinante Junho 2015.", "armorMystery201508Text": "Traje de guepardo", "armorMystery201508Notes": "Corra como um raio nesse fofo traje de guepardo! Não concede benefícios. Item de assinante de Agosto de 2015.", - "armorMystery201509Text": "Traje de Lobisomem", + "armorMystery201509Text": "Use o traje", "armorMystery201509Notes": "Este É um traje, não é? Não concede benefícios. Item de Assinante de Setembro 2015.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Fantasia Steampunk", "armorMystery301404Notes": "Elegante e distinto. Não concede benefícios. Item de Assinante de Fevereiro 3015.", "armorArmoireLunarArmorText": "Armadura Lunar Tranquilizadora", @@ -321,6 +329,12 @@ "armorArmoireHornedIronArmorNotes": "Martelada violentamente a partir do ferro, esta armadura de ferro encurvado é quase impossível de quebrar. Aumenta a Constituição em <%= con %> e a Percepção em <%= per %>. Armário Encantado: Conjunto de Ferro Encurvado (Item 2 de 3).", "armorArmoirePlagueDoctorOvercoatText": "Sobretudo Doutor Praga", "armorArmoirePlagueDoctorOvercoatNotes": "Um autêntico sobretudo usado pelos médicos que lutam contra a Praga da Procrastinação! Aumenta a inteligência em <%= int %>, Força em <%= str %>, e Constituição em <%= con %>. Armário Encantado: Conjunto Doutor Praga (Item 3 de 3).", + "armorArmoireShepherdRobesText": "Túnica de Pastor", + "armorArmoireShepherdRobesNotes": "O tecido é fresco e arejado, perfeito para um dia quente arrebanhando grifos no deserto. Aumenta Força e Percepção em <%= attrs %> cada. Armário Encantado: Conjunto de Pastor (Item 2 de 3).", + "armorArmoireRoyalRobesText": "Túnica Real", + "armorArmoireRoyalRobesNotes": "Maravilhoso governante, governe o dia todo! Aumenta Constiruição, Inteligência, e Percepção em <%= attrs %> cada. Armário Encantado: Conjunto Real (Item 3 de 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "capacete", "headBase0Text": "Sem Elmo", "headBase0Notes": "Sem capacete.", @@ -433,7 +447,7 @@ "headSpecialSummer2015HealerText": "Chapéu do Marinheiro", "headSpecialSummer2015HealerNotes": "Com seu chapéu de marinheiro firme na cabeça, você pode navegar até pelos mares mais tempestuosos! Aumenta Inteligência em <%= int %>. Edição Limitada Conjunto de Verão 2015.", "headSpecialFall2015RogueText": "Asas de Morcego", - "headSpecialFall2015RogueNotes": "Assuste seus inimigos com este elmo poderosos! Aumenta Percepção em <%= per %>. Equipamento Edição Limitada de Outono 2015.", + "headSpecialFall2015RogueNotes": "Assuste seus inimigos com este elmo poderosos! Aumenta Percepção em <%= per %>. Equipamento de Outono Edição Limitada 2015.", "headSpecialFall2015WarriorText": "Chapéu de Espantalho", "headSpecialFall2015WarriorNotes": "Todo mundo iria querer este chapéu - se ao menos tivessem um cérebro. Aumenta Força em <%= str %>. Equipamento Edição Limitada de Outono 2015.", "headSpecialFall2015MageText": "Chapéu Costurado", @@ -441,7 +455,7 @@ "headSpecialFall2015HealerText": "Chapéu de Sapo", "headSpecialFall2015HealerNotes": "Este é um chapéu extremamente sério digno apenas dos mais experientes criadores de poções. Aumenta Inteligência em <%= int %>. Equipamento Edição Limitada de Outono 2015.", "headSpecialGaymerxText": "Elmo do Guerreiro Arco-Íris", - "headSpecialGaymerxNotes": "Em celebração da temporada do orgulho e GaymerX, esse elmo especial é decorado com um radiante e colorido arco-íris! GaymerX é uma convenção de jogos celebrando a comunidade LGBTQ e jogos e é aberta a todos. Acontece no InterContinental, no centro de San Francisco, de 11-13 de julho! Não concede benefícios.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "Elmo Alado", "headMystery201402Notes": "Essa tiara alada imbui o utilizador com a velocidade do vento! Não concede benefícios. Item de Assinante de Fevereiro 2014.", "headMystery201405Text": "Chamas da Mente", @@ -464,6 +478,8 @@ "headMystery201508Notes": "Esse aconchegante chapéu de guepardo é muito peludo! Não concede benefícios. Item de assinante de agosto de 2015.", "headMystery201509Text": "Máscara de Lobisomem", "headMystery201509Notes": "Esta É uma máscara, não é? Não concede benefícios. Item de Assinante de Setembro 2015.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 Subscriber Item.", "headMystery301404Text": "Cartola Chique", "headMystery301404Notes": "Uma cartola chique para as damas e cavalheiros mais finos! Item de Assinante de Janeiro 3015. Não concede benefícios.", "headMystery301405Text": "Cartola Básica", @@ -481,7 +497,7 @@ "headArmoireBlueHairbowText": "Laço de Cabelo Azul", "headArmoireBlueHairbowNotes": "Torne-se perceptivo, resistente, e inteligente enquanto este belo Laço de Cabelo Azul! Aumenta a Percepção em <%= per %>, Constituição em <%= con %>, e inteligência em <%= int %>. Armário Encantado: Item independente.", "headArmoireRoyalCrownText": "Coroa Real", - "headArmoireRoyalCrownNotes": "Viva o Rei, forte e poderoso! Aumenta a Força em <%= str %>. Armário Encantado: Item independente.", + "headArmoireRoyalCrownNotes": "Hurra para o governante, poderoso e forte! Aumenta Força em <%= str %>. Armário Encantado: Conjunto Real (Item 1 de 3).", "headArmoireGoldenLaurelsText": "Louros Dourados", "headArmoireGoldenLaurelsNotes": "Estes louros dourados recompensam aqueles que subjugaram os maus hábitos. Aumenta a Percepção e a Constituição em <%= attrs %> cada. Armário Encantado: Conjunto de Toga Dourada (Item 2 de 3).", "headArmoireHornedIronHelmText": "Elmo de Ferro Encurvado", @@ -496,6 +512,12 @@ "headArmoireBlackCatNotes": "Este chapéu preto é... rosnante. E balança seu rabo. E respira? É, você tem um gato dormindo na sua cabeça. Aumenta Inteligência e Percepção em <%= attrs %> cada. Armário Encantado: Item Independente.", "headArmoireOrangeCatText": "Chapéu de Gato Laranja", "headArmoireOrangeCatNotes": "Este chapéu laranja é... rosnante. E balança seu rabo. E respira? É, você tem um gato dormindo na sua cabeça. Aumenta Força e Constituição em <%= attrs %> cada. Armário Encantado: Item Independente.", + "headArmoireBlueFloppyHatText": "Chapéu Desajeitado Azuljavascript:;", + "headArmoireBlueFloppyHatNotes": "Muitos encantamentos foram costurados nesse simples chapéu, dando a ele uma brilhante cor azul. Aumenta Constituição, Inteligência, e Percepção em <%= attrs %> cada. Armário Encantado: Item Independente", + "headArmoireShepherdHeaddressText": "Touca de Pastor", + "headArmoireShepherdHeaddressNotes": "Algumas vezes os grifos que você arrebanha gostam de mastigar essa touca, mas faz você parecer mais inteligente mesmo assim. Aumenta Inteligência em <%= int %>. Armário Encantado: Conjunto de Pastor (Item 3 de 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "item da segunda mão", "shieldBase0Text": "Sem Equipamento na Segunda Mão", "shieldBase0Notes": "Sem escudo ou segundo armamento.", @@ -579,6 +601,8 @@ "shieldArmoireGladiatorShieldNotes": "Para ser um gladiador você precisa... ah, tanto faz, só esmague eles com o seu escudo. Aumenta Constituição em <%= con %> e Força em <%= str %>. Armário Encantado: Conjunto de Gladiador (Item 3 de 3).", "shieldArmoireMidnightShieldText": "Escudo da Meia-noite", "shieldArmoireMidnightShieldNotes": "Este escudo é mais poderoso na marca da meia-noite! Aumenta Constituição em <%= con %> e Força em <%= str %>. Armário Encantado: Item Independente.", + "shieldArmoireRoyalCaneText": "Bengala Real", + "shieldArmoireRoyalCaneNotes": "Hurra para o governante, digno de música! Aumenta Constituição, Inteligência, e Percepção em <%= attrs %> cada. Armário Encantado: Conjunto Real (Item 2 de 3).", "back": "Acessório de Costas", "backBase0Text": "Sem Acessório de Fundo", "backBase0Notes": "Sem Acessório de Fundo.", @@ -592,6 +616,8 @@ "backMystery201504Notes": "Buzz buzz buzz! Voe de tarefa em tarefa. Não concede benefícios. Item de Assinante de Abril de 2015.", "backMystery201507Text": "Prancha de Surf Radical", "backMystery201507Notes": "Surfe na Doca dos Diligentes e monte nas ondas da Baia Imkompleta! Não concede benefícios. Item de Assinante Julho 2015.", + "backMystery201510Text": "Cauda de Goblin", + "backMystery201510Notes": "Multiuso e poderoso! Não concede benefícios. Item de Assinante de Outubro 2015.", "backSpecialWonderconRedText": "Capa Poderosa", "backSpecialWonderconRedNotes": "Sibila com força e beleza. Não concede benefícios. Equipamento Edição Especial de Convenção.", "backSpecialWonderconBlackText": "Capa Furtiva", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "Esses poderosos chifres mudam de cor com as folhas. Não concede benefícios. Item de Assinante de Setembro 2014.", "headAccessoryMystery201502Text": "Asas do Pensamento", "headAccessoryMystery201502Notes": "Deixe sua imaginação voar! Não concede benefícios. Item de Assinante de Fevereiro 2015.", + "headAccessoryMystery201510Text": "Chifres de Goblin", + "headAccessoryMystery201510Notes": "Esses chifres amedrontadores são pegajosos. Não concede benefícios. Item de Assinante de Outubro 2015.", "headAccessoryMystery301405Text": "Óculos de Proteção para Cabeça", "headAccessoryMystery301405Notes": "\"Óculos de proteção são para os olhos,\" eles disseram. \"Ninguém quer óculos que você só pode usar na cabeça,\" eles disseram. Ha! Você mostrou pra eles. Não concede benefícios. Item de Assinante de Agosto 3015.", "eyewear": "Óculos", diff --git a/common/locales/pt/generic.json b/common/locales/pt/generic.json index 91cf6669ec..7b7836f045 100644 --- a/common/locales/pt/generic.json +++ b/common/locales/pt/generic.json @@ -28,7 +28,7 @@ "market": "Mercado", "subscriberItem": "Item Misterioso", "newSubscriberItem": "Novo Item Misterioso", - "subscriberItemText": "Todo mês, assinantes receberão um item misterioso. Este item geralmente é lançado uma semana antes do fim do mês. Veja a página de Item Misterioso na wikia para a data exata.", + "subscriberItemText": "A cada mês, assinantes receberão um item misterioso. Ele normalmente é liberado cerca de uma semana antes do final do mês. Veja a página \"Item Misterioso\" da wiki para mais informações.", "all": "Todos", "none": "Nenhum", "or": "Ou", @@ -69,8 +69,9 @@ "habiticaDayPluralText": "Celebrou <%= number %> Dias da Nomeação! Obrigado por ser um usuário fantástico!", "achievementDilatory": "Salvador de Dilatory", "achievementDilatoryText": "Ajudou a derrotar o Dread Drag'on de Dilatory durante o Evento Summer Splash 2014!", - "costumeContest": "Concurso de Fantasia 2014", - "costumeContestText": "Participou no Concurso de Fantasia de Halloween 2014. Veja algumas inscrições em blog.habitica.com/tagged/cosplay!", + "costumeContest": "Costume Contestant", + "costumeContestText": "Participated in the Habitoween Costume Contest. See some of the entries on the Habitica blog!", + "costumeContestTextPlural": "Participated in <%= number %> Habitoween Costume Contests. See some of the entries on the Habitica blog!", "memberSince": "- Membro desde", "lastLoggedIn": "- Última conexão em", "notPorted": "Essa funcionalidade ainda não foi portada do site original.", @@ -79,6 +80,7 @@ "errorUpCase": "ERRO:", "newPassSent": "Nova senha enviada.", "serverUnreach": "Servidor não disponível no momento.", + "requestError": "Caramba, um errou ocorreu! Por favor recarregue a página, sua última ação pode não ter sido salva corretamente. ", "seeConsole": "Se o erro persistir, por favor reporte em Ajuda > Reportar um Problema. Se você estiver familiarizado com o console do seu navegador, por favor inclua quaisquer mensagens de erro.", "error": "Erro", "menu": "Menu", @@ -94,7 +96,7 @@ "audioTheme_luneFoxTheme": "Tema da Raposa Lunar", "askQuestion": "Fazer uma Pergunta", "reportBug": "Reportar um Problema", - "contributeToHRPG": "Contribuir para o Habitica", + "contributeToHRPG": "Contribuir com o Habitica", "overview": "Visão Geral para Novos Usuários.", "January": "Janeiro", "February": "Fevereiro", @@ -110,9 +112,9 @@ "December": "Dezembro", "dateFormat": "Formato de Data", "achievementStressbeast": "O Salvador de Stoïkalm", - "achievementStressbeastText": "Helped defeat the Abominable Stressbeast during the 2014 Winter Wonderland Event!", - "achievementBurnout": "Savior of the Flourishing Fields", - "achievementBurnoutText": "Helped defeat Burnout and restore the Exhaust Spirits during the 2015 Fall Festival Event!", + "achievementStressbeastText": "Ajudou a derrotar a Abominável Besta do Estresse durante o Evento de Inverno do País das Maravilhas em 2014!", + "achievementBurnout": "Salvador dos Campos Prósperos", + "achievementBurnoutText": "Ajudou a derrotar o Desgaste e recuperar os Espíritos Exaustos durante o evento do Festival de Outono de 2015!", "checkOutProgress": "Veja o meu progresso em Habitica! ", "cardReceived": "Recebeu um cartão!", "cardReceivedFrom": "<%= cardType %> de <%= userName %>", @@ -133,5 +135,17 @@ "thankyou2": "Agradecendo milhares de vezes.", "thankyou3": "Estou muito grato - obrigado!", "thankyouCardAchievementTitle": "Incrívelmente grato", - "thankyouCardAchievementText": "Agradeço por ser grato! Mandou ou recebeu <%= cards %> cartões de agradecimento." + "thankyouCardAchievementText": "Agradeço por ser grato! Mandou ou recebeu <%= cards %> cartões de agradecimento.", + "streakAchievement": "Você conquistou um combo de sequencias!", + "firstStreakAchievement": "Combo de 21 Dias", + "streakAchievementCount": "<%= streaks %> Combos de 21 Dias", + "twentyOneDays": "Você completou sua Diária por 21 dias seguidos!", + "dontBreakStreak": "Trabalho incrível. Não quebre sua sequencia!", + "dontStop": "Não pare agora!", + "levelUpShare": "Aumentei meu nível em Habitica melhorando meus hábitos na vida real!", + "questUnlockShare": "Desbloqueei uma nova missão no Habitica!", + "hatchPetShare": "Choquei um novo mascote completando minhas tarefas da vida real!", + "raisePetShare": "Transformei meu mascote em uma montaria completando minhas tarefas da vida real!", + "wonChallengeShare": "Venci um desafio no Habitica!", + "achievementShare": "Ganhei uma nova conquista no Habitica!" } \ No newline at end of file diff --git a/common/locales/pt/groups.json b/common/locales/pt/groups.json index efcb811a7d..00b0fc0cc9 100644 --- a/common/locales/pt/groups.json +++ b/common/locales/pt/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "Sair da Pousada", "innCheckIn": "Descansar na Pousada", "innText": "Você está descansando na Pousada! Enquanto estiver hospedado por aqui, suas Tarefas Diárias não lhe causarão dano na virada do dia, mas serão atualizadas normalmente todos os dias. Mas atenção: Se você estiver participando de uma Missão, Chefões continuarão a machucá-lo pelas Tarefas Perdidas de seus companheiros de equipe, a não ser que eles também estejam na Pousada! Além disso, seu dano no Chefão (ou itens coletados) não serão aplicados enquanto você não sair da Pousada.", + "innTextBroken": "Você está descansando na Pousada, eu acho... Enquanto estiver hospedado por aqui, suas Tarefas Diárias não lhe causarão dano na virada do dia, mas serão atualizadas normalmente todos os dias... Se você estiver participando de uma Missão, Chefões continuarão a machucá-lo pelas Tarefas Perdidas de seus companheiros de equipe... a não ser que eles também estejam na Pousada... Além disso, seu dano no Chefão (ou itens coletados) não serão aplicados enquanto você não sair da Pousada... tão cansado...", "lfgPosts": "Mensagens de Procura de Grupo (Equipe Desejada)", "tutorial": "Tutorial", "glossary": "Glossário", @@ -140,10 +141,11 @@ "partyExplanation2": "Lute contra monstros e crie Desafios!", "partyExplanation3": "Convide amigos agora para ganha um Pergaminho de Missão!", "wantToStartParty": "Você quer começar uma equipe?", - "exclusiveQuestScroll": "Convidar um amigo para a sua equipe lhe garantirá um exclusivo Pergaminho de Missão para lutar a Basi-Lista juntos!", + "exclusiveQuestScroll": "Convidar um amigo para a sua equipe lhe garantirá um exclusivo Pergaminho de Missão para que enfrentem a Basi-Lista juntos!", "nameYourParty": "Dê nome a sua nova equipe!", "partyEmpty": "Você é o único na sua equipe. Convide seus amigos!", - "partyChatEmpty": "Seu bate-papo da equipe está vazio! Digite uma mensagem na caixa abaixo para começar a conversar.", + "partyChatEmpty": "Seu bate-papo da equipe está vazio! Digite uma mensagem na caixa acima para começar a conversar.", "guildChatEmpty": "O bate-papo desta guilda está vazio! Digite uma mensagem na caixa abaixo para começar a conversar.", - "possessiveParty": "Equipe de <%= name %>" + "possessiveParty": "Equipe de <%= name %>", + "requestAcceptGuidelines": "Se você quiser postar mensagens na Taverna ou em qualquer chat de equipe ou guilda, por favor leia nossas <%= linkStart %>Diretrizes de Comunidade<%= linkEnd %> e então clique no botão abaixo para indicar que você as aceita." } \ No newline at end of file diff --git a/common/locales/pt/limited.json b/common/locales/pt/limited.json index 7fb529ef0a..7d7f609d32 100644 --- a/common/locales/pt/limited.json +++ b/common/locales/pt/limited.json @@ -21,6 +21,7 @@ "valentineCardAchievementText": "Aww, você e seu amigo devem se preocupar muito um com o outro! Enviou ou recebeu <%= cards %> Cartão(ões) do Dia dos Namorados.", "polarBear": "Urso Polar", "turkey": "Peru", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "Filhote de Urso Polar", "jackolantern": "O miserável Jack da Lanterna", "seasonalShop": "Loja Sazonal", @@ -30,6 +31,7 @@ "seasonalShopText": "Bem vindo a Loja Sazonal!! Nós estamos vendendo mercadorias Edição Sazonal de primavera no momento. Tudo aqui estará disponível para compra durante o Festival de Primavera todos os anos, mas nós só estaremos abertos até 30 de abril, então certifique-se de estocar agora ou você vai ter que esperar um ano para comprar esses items de novo!", "seasonalShopSummerText": "Bem-vindo à Loja Sazonal! No momento temos em estoque itens da Edição Sazonal de verão. Todos os itens daqui estarão disponíveis para compra durante o evento Splash de Verão de cada ano, mas ficaremos abertos somente até o dia 31 de julho, portanto certifique-se de garantir seus equipamentos agora, ou você terá que esperar um ano para comprar estes itens novamente.", "seasonalShopFallText": "Bem-vindo à Loja Sazonal!! Estamos estocando itens de Edição Sazonal de Outono no momento. Tudo aqui ficará a disposição para compra durante o Festival de Outono anual, mas ficaremos abertos apenas até o dia 31 de Outubro, então é melhor fazer seu próprio estoque agora ou você terá que esperar o ano que vem para comprar estes itens de novo.", + "seasonalShopFallTextBroken": "Ah... Bem-vindo à Loja Sazonal... Estamos estocando itens da Edição Sazonal de outono, ou algo assim... Tudo aqui ficará a disposição para compra durante o Festival de Outono anual, mas ficaremos abertos apenas até o dia 31 de Outubro... Acho que você deveria fazer seu próprio estoque agora, ou terá que esperar... e esperar... e esperar... *argh*", "seasonalShopRebirth": "Se você usou o Orbe de Renascimento, você pode recomprar esse equipamento na Coluna de Recompensas. Inicialmente, você só poderá comprar itens de sua classe atual(Guerreiro por padrão), mas não tema, os outros itens específicos de classe ficarão disponíveis se você trocar para aquela classe.", "candycaneSet": "Bastão Doce (Mago)", "skiSet": "Assa-ski-no (Ladino)", diff --git a/common/locales/pt/messages.json b/common/locales/pt/messages.json index 1d9cf2cc7c..4dc5145227 100644 --- a/common/locales/pt/messages.json +++ b/common/locales/pt/messages.json @@ -5,7 +5,7 @@ "messageTagNotFound": "Etiqueta não encontrada.", "messagePetNotFound": ":mascote não encontrado em user.items.pets", "messageFoodNotFound": ":comida não encontrada em user.items.food", - "messageNotAvailable": "Este item no momento não está disponível para compra.", + "messageNotAvailable": "No momento este item não está disponível para compra.", "messageCannotFeedPet": "Não foi possível alimentar esse mascote.", "messageAlreadyMount": "Você já possui essa montaria. Tente alimentar outro mascote.", "messageEvolve": "Você domou <%= egg %>, vamos dar um passeio.", @@ -15,7 +15,7 @@ "messageEquipped": "<%= itemText %> equipado.", "messageUnEquipped": "<%= itemText %> desequipado.", "messageMissingEggPotion": "Está faltando o ovo ou a poção.", - "messageInvalidEggPotionCombo": "Você não pode chocar Ovos de Mascotes de Missão com Poções Mágicas de Eclosão! Tente um ovo diferente.", + "messageInvalidEggPotionCombo": "Você não pode chocar Ovos de Mascotes de Missões com Poções Mágicas de Eclosão! Tente um ovo diferente.", "messageAlreadyPet": "Você já possui esse mascote. Tente uma combinação diferente!", "messageHatched": "Seu ovo chocou! Visite seu estábulo para equipar seu mascote.", "messageNotEnoughGold": "Ouro Insuficiente", @@ -30,5 +30,26 @@ "messageAlreadyOwnGear": "Você já possui este item. Vista-o indo até a página de equipamentos.", "armoireEquipment": "<%= image %> Você encontrou uma peça de Equipamento raro no Armário: <%= dropText %>! Incrível!", "armoireFood": "<%= image %> Você remexeu no Armário e encontrou <%= dropArticle %><%= dropText %>. O que aquilo estava fazendo lá?", - "armoireExp": "Você se engalfinhou com o Armário e ganhou Experiência. Pega essa!" + "armoireExp": "Você se engalfinhou com o Armário e ganhou Experiência. Pega essa!", + "messageInsufficientGems": "Gemas insuficientes!", + "messageAuthPasswordMustMatch": ":password e :confirmPassword não combinam", + "messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword requeridos", + "messageAuthUsernameTaken": "Nome de usuário já cadastrado", + "messageAuthEmailTaken": "Email já cadastrado", + "messageAuthNoUserFound": "Usuário não encontrado.", + "messageAuthMustBeLoggedIn": "Você deve estar logado.", + "messageAuthMustIncludeTokens": "Você deve incluir o token e uid (ID do Usuário) na sua requisição", + "messageGroupNotFound": "Grupo não encontrado ou você não tem acesso.", + "messageGroupAlreadyInParty": "Já em uma equipe, tente recarregar.", + "messageGroupOnlyLeaderCanUpdate": "Apenas o líder do grupo pode atualizar o grupo!", + "messageGroupRequiresInvite": "Não pode se unir a um grupo que você não vou convidado.", + "messageGroupCannotRemoveSelf": "Você não pode se remover!", + "messageGroupChatBlankMessage": "Você não pode mandar uma mensagem em branco", + "messageGroupChatLikeOwnMessage": "Não é possível curtir a própria mensagem. Não seja aquela pessoa.", + "messageGroupChatFlagOwnMessage": "Não é possível denunciar sua própria mensagem.", + "messageGroupChatFlagAlreadyReported": "Você já reportou essa mensagem.", + "messageGroupChatNotFound": "Mensagem não encontrada!", + "messageGroupChatAdminClearFlagCount": "Somente um administrador pode remover o contador de bandeira!", + "messageUserOperationProtected": "caminho `<%= operation %>` não foi salvo, já que é um caminho protegido.", + "messageUserOperationNotFound": "<%= operation %> operação não encontrada" } \ No newline at end of file diff --git a/common/locales/pt/noscript.json b/common/locales/pt/noscript.json new file mode 100644 index 0000000000..84bec152e5 --- /dev/null +++ b/common/locales/pt/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Seu navegador não esta com JavaScript habilitado", + "jsDisabledHeadingFull": "Seu navegador não esta com JavaScript habilitado e sem ele, Habitica não funcionará corretamente.", + "jsDisabledText": "Habitica não pode mostrar o site corretamente sem ele!", + "jsDisabledLink": "Por favor habilite o JavaScript para continuar!" +} \ No newline at end of file diff --git a/common/locales/pt/npc.json b/common/locales/pt/npc.json index 98bcd045f7..96e343b343 100644 --- a/common/locales/pt/npc.json +++ b/common/locales/pt/npc.json @@ -7,15 +7,19 @@ "daniel": "Daniel", "danielText": "Bem vindo à Taverna! Fique um pouco e conheça os locais. Se precisares descansar (férias? problemas de saúde?), eu me encarregarei de deixá-lo à vontade na Pousada. Enquanto descansa, suas Tarefas Diárias não lhe causarão dano na virada do dia, mas você ainda pode marcá-las como realizadas.", "danielText2": "Tenha cuidado: Se estiver participando de uma missão contra um Chefão, ele ainda lhe causará danos pelas Tarefas Diárias perdidas dos seus companheiros de equipe! Além disso, o seu dano no chefão (ou itens coletados) não serão aplicados até que você saia da Pousada.", + "danielTextBroken": "Bem vindo à Taverna... Eu acho... Se você precisa descansar, eu irei te hospedar na Pousada... Enquanto estiver hospedado, suas Tarefas Diárias não te machucarão no final do dia, mas você ainda pode marcá-las como realizadas... se você tiver energia...", + "danielText2Broken": "Oh... Se você estiver participando de uma missão de Chefão, ele ainda te causará dano pelas Tarefas Diárias perdidas dos teus colegas de equipe... Além disso, seu dano no Chefão (ou itens coletados) não serão aplicados até que você saia da Pousada...", "alexander": "Alexander o Comerciante", "welcomeMarket": "Bem-vindo ao Mercado! Compre ovos e poções difíceis de encontrar! Venda seus extras! Encomende serviços úteis! Veja ver o que temos para oferecer.", - "sellForGold": "Vender <%= item %> por <%= gold %> Ouro", - "sellEggForGold": "Vender Ovo de <%= itemType %> por <%= gold %> moedas de Ouro", - "sellPotionForGold": "Vender Porção de <%= itemType %> por <%= gold %> modedas de Ouro", + "displayItemForGold": "Você quer vender um <%= itemType %>?", + "displayEggForGold": "Você quer vender um Ovo <%= itemType %>?", + "displayPotionForGold": "Você quer vender uma Poção <%= itemType %>?", + "sellForGold": "Venda por <%= gold %> Ouro", "buyGems": "Comprar Gemas", "justin": "Justin", "ian": "Ian", "ianText": "Bem-vindo à Loja de Missões! Aqui você pode usar os Pergaminhos de Missões para lutar contra monstros com seus amigos. Não deixe de verificar nossa refinada lista de Pergaminhos de Missões para comprar à direita.", + "ianBrokenText": "Bem-vindo à Loja de Missões... Aqui você pode usar Pergaminhos de Missões para enfrentar monstros com seus amigos... Não deixe de dar uma olhada na nossa refinada coleção de Pergaminhos de Missões a venda na direita...", "USD": "USD", "newStuff": "Novidades", "cool": "Me diga depois", diff --git a/common/locales/pt/pets.json b/common/locales/pt/pets.json index a42c27a1a1..0e75b69701 100644 --- a/common/locales/pt/pets.json +++ b/common/locales/pt/pets.json @@ -18,7 +18,7 @@ "mammoth": "Mamute Felpudo", "orca": "Orca", "royalPurpleGryphon": "Grifo Real Roxo", - "phoenix": "Phoenix", + "phoenix": "Fênix", "rarePetPop1": "Clique na pata de ouro para saber mais em como obter esse mascote raro através de contribuições ao Habitica.", "rarePetPop2": "Como Conseguir esse Mascote!", "potion": "Poção <%= potionType %>", @@ -34,7 +34,7 @@ "foodText": "comida", "food": "Comida e Selas", "noFood": "Você não possui comida ou selas.", - "dropsExplanation": "Consiga estes itens mais rápido com Gemas, caso você não queira esperar que eles apareçam ao completar uma tarefa. Aprenda mais sobre o sistema de drop.", + "dropsExplanation": "Consiga estes itens mais rápido com Gemas, caso você não queira esperar que apareçam ao completar uma tarefa. Aprenda mais sobre o sistema de drop.", "premiumPotionNoDropExplanation": "Poções Mágicas de Eclosão não podem ser usadas em ovos recebidos de Missões. A única forma de conseguir Poções Mágicas de Eclosão é comprando-as abaixo, não recebendo de drops aleatórios.", "beastMasterProgress": "Progresso do Mestre das Bestas", "stableBeastMasterProgress": "Progresso como Mestre das Bestas: <%= number %> mascotes encontrados", @@ -58,8 +58,16 @@ "firstDrop": "Você liberou o Sistema de Drops! Agora quando completar tarefas, você terá uma pequena chance de encontrar um item, incluindo ovos, poções e comida! Você acabou de encontrar um <%= eggText %>Ovo! <%= eggNotes %>", "useGems": "Se você está de olho em um mascote, mas não consegue esperar mais para encontrá-lo, use Gemas em Inventário > Mercado para comprar um!", "hatchAPot": "Chocar um <%= potion %> <%= egg %>?", + "hatchedPet": "Você chocou um <%= potion %> <%= egg %>!", + "displayNow": "Mostrar Agora", + "displayLater": "Mostrar Depois", + "earnedCompanion": "Com toda sua produtividade, você conseguiu um novo companheiro. Lhe dê comida para fazê-lo crescer!", "feedPet": "Alimentar <%= article %><%= text %> para o seu <%= name %>?", "useSaddle": "Selar <%= pet %>?", + "raisedPet": "Você criou um <%= pet %>!", + "earnedSteed": "Completando suas tarefas, você conquistou uma fiel montaria!", + "rideNow": "Montar Agora", + "rideLater": "Montar Depois", "petName": "<%= egg %> <%= potion %>", "mountName": "<%= mount %> <%= potion %>", "petKeyName": "Chave dos Canis", diff --git a/common/locales/pt/quests.json b/common/locales/pt/quests.json index ef390e0a24..27840b0f76 100644 --- a/common/locales/pt/quests.json +++ b/common/locales/pt/quests.json @@ -13,6 +13,7 @@ "youReceived": "Você Recebeu", "dropQuestCongrats": "Parabéns, você ganhou um pergaminho de missão! Você pode convidar seu grupo para começar a missão agora mesmo, ou voltar a qualquer momento em Inventário > Missões.", "questSend": "Clicar em \"Convidar\" enviará um convite para os membros da sua equipe. Quando todos membros aceitarem ou rejeitarem, a missão começará. Veja o estado da missão em Social > Equipe.", + "questSendBroken": "Clicando em \"Convidar\" enviará um convite para os membros da sua equipe... Quando todos eles aceitarem ou recusarem a missão começa... Veja o estado da missão em Social > Equipe", "inviteParty": "Convidar equipe para a missão", "questInvitation": "Convite de Missão:", "questInvitationTitle": "Convite para Missão", @@ -24,19 +25,25 @@ "rejected": "Rejeitado", "pending": "Pendente", "questStart": "Assim que todos os membros tenham aceitado ou rejeitado, a missão começa. Apenas aqueles que clicaram \"aceitar\" participarão da missão e receberão os prêmios. Se os membros estiverem pendentes por muito tempo (inativos?), o dono da missão pode começá-la sem eles clicando em \"Começar\". O dono da missão também pode cancelá-la e recuperar o pergaminho de missão clicando em \"Cancelar\".", + "questStartBroken": "Assim que todos os membros tenham aceitado ou rejeitado, a missão começa... Apenas aqueles que clicaram \"aceitar\" participarão da missão e receberão os prêmios... Se os membros estiverem pendentes por muito tempo (inativos?), o dono da missão pode começá-la sem eles clicando em \"Começar\"... O dono da missão também pode cancelá-la e recuperar o pergaminho de missão clicando em \"Cancelar\".", "begin": "Começar", "bossHP": "Vida do Chefão", "bossStrength": "Força do Chefão", - "rage": "Rage", + "rage": "Ira", "collect": "Coletar", "collected": "Coletado", "collectionItems": "<%= number %> <%= items %>", "itemsToCollect": "Itens para Coletar", "bossDmg1": "Todos os Afazeres e Tarefas Diárias completadas e cada Hábito positivo causa dando no Chefão. Cause mais dano com tarefas mais vermelhas, com Destruição Brutal ou com Explosão de Chamas. O Chefão causará dano em todos os participantes da missão por cada Tarefa Diária perdida (multiplicada pela Força do Chefão) em adição ao seu dano normal, então mantenha a saúde da sua equipe completando suas Tarefas Diárias. Todo o dano recebido ou inflingido ao Chefão é computado no seu Cron (virada do dia).", "bossDmg2": "Apenas participantes lutarão contra o chefão e dividirão as recompensas da missão.", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "Cada Tarefa Diária e Afazer completados e Hábitos positivos machucam o Chefão... Cause mais dano com tarefas mais vermelhas, com Destruição Brutal ou com Explosão de Chamas... O Chefão irá causar dano a todos os participantes da missão por cada Tarefa Diária perdida (multiplicado pela Força do Chefão) em adição ao seu dano normal, então mantenha sua equipe saudável completando suas Tarefas Diárias... Todo dano recebido ou causado ao Chefão será computado no seu cron (sua virada de dia)...", + "bossDmg2Broken": "Somente participantes lutarão contra o Chefão e dividirão as recompensas da missão...", + "tavernBossInfo": "Tarefas Diárias e Afazeres completos e Hábitos positivos machucarão o Chefão Global! Tarefas perdidas enchem a Barra do Ataque de Exaustão. Quando essa barra enche, o Chefão Global atacará um NPC. Um Chefão Global nunca machucará jogadores ou contas de qualquer forma. Apenas contas ativas não descansando na Pousada terão suas Tarefas Diárias computadas. ", + "tavernBossInfoBroken": "Tarefas Diárias e Afazeres completos e Hábitos positivos machucarão o Chefão Global... Tarefas perdidas enchem a Barra do Ataque de Exaustão... Quando essa barra enche, o Chefão Global atacará um NPC... Um Chefão Global nunca machucará jogadores ou contas de qualquer forma... Apenas contas ativas não descansando na Pousada terão suas Tarefas Diárias computadas...", "bossColl1": "Para coletar itens, complete suas tarefas positivas. Itens de missão aparecem assim como itens normais; entretanto, você não verá a coleta até o dia seguinte, então tudo que você encontrou será registrado e contribuído à pilha.", "bossColl2": "Apenas participantes podem coletar itens e dividir as recompensas da missão.", + "bossColl1Broken": "Para coletar itens, complete suas tarefas positivas... Itens de missão aparecem assim como itens normais; entretanto, você não verá a coleta até o dia seguinte, então tudo que você encontrou será registrado e contribuído à pilha...", + "bossColl2Broken": "Apenas participantes podem coletar itens e dividir as recompensas da missão.", "abort": "Abortar", "leaveQuest": "Sair da missão", "sureLeave": "Tem certeza que deseja abandonar a missão ativa? Todo seu progresso nessa missão será perdido.", @@ -63,10 +70,13 @@ "sureAbort": "Você tem certeza que deseja abortar esta missão? Ela abortará para todos em sua equipe e todo progresso será perdido. O pergaminho de missão retornará para o dono da missão.", "doubleSureAbort": "Tem certeza mesmo? Certifique-se de que eles não o detestarão para sempre!", "questWarning": "Se novos jogadores se juntarem à equipe antes do início da missão, eles também receberão um convite. Contudo, uma vez que a missão comece, nenhum membro novo da equipe poderá entrar nela.", + "questWarningBroken": "Se novos jogadores se juntarem à equipe antes do início da missão, eles também receberão um convite... Contudo, uma vez que a missão comece, nenhum membro novo da equipe poderá entrar nela...", "bossRageTitle": "Ira", "bossRageDescription": "Quando essa barra encher, o chefão irá soltar um ataque especial!", "startAQuest": "INICIAR UMA MISSÃO", "startQuest": "Iniciar missão", "whichQuestStart": "Que missão deseja iniciar?", - "getMoreQuests": "Conseguir mais missões" + "getMoreQuests": "Conseguir mais missões", + "unlockedAQuest": "Você desbloqueou uma missão!", + "leveledUpReceivedQuest": "Você subiu para o nível <%= level %> e recebeu um pergaminho de missão!" } \ No newline at end of file diff --git a/common/locales/pt/questscontent.json b/common/locales/pt/questscontent.json index 6324f8e46c..15198e7067 100644 --- a/common/locales/pt/questscontent.json +++ b/common/locales/pt/questscontent.json @@ -212,7 +212,7 @@ "questWhaleText": "Lamento da Baleia", "questWhaleNotes": "Você chega na Doca dos Diligentes, na esperança de arranjar um submarino para ver a Corrida de Cavalos Marinhos de Dilatória. De repente, um berro ensurdecedor faz você parar e cobrir seus ouvidos. \"E ela sopra!\" o Capitão @krazjega Grita, apontando para uma enorme e barulhenta baleia. \"Não é seguro enviar os submarinos enquanto ela está se debatendo!\"

\"Rápido,\" diz ao @UncommonCriminal. \"Me ajude a acalmar a pobre criatura para podermos entender porque ela está fazendo todo este barulho!\"", "questWhaleBoss": "Baleia Chorona", - "questWhaleCompletion": "Depois de muito trabalho duro, finalmente a baleia cessa seu choro violento. \"Parece que ela estava se afogando em ondas de hábitos ruins,\" @zoebeagle explica. \"Graças ao seu esforço consistente, nós fomos capazes de virar a maré!\" Assim que você entra no submarino, vários ovos de baleia pulam em sua direção, e você os acolhe.", + "questWhaleCompletion": "Depois de muito trabalho duro, finalmente a baleia cessa seu choro violento. \"Parece que ela estava se afogando em ondas de hábitos negativos,\" @zoebeagle explica. \"Graças ao seu esforço consistente, nós fomos capazes de virar a maré!\" Assim que você entra no submarino, vários ovos de baleia pulam em sua direção, e você os acolhe.", "questWhaleDropWhaleEgg": "Baleia (Ovo)", "questWhaleUnlockText": "Desbloqueia a compra de ovos de baleia no Mercado", "questDilatoryDistress1Text": "Angustia da Dilatória, Parte 1: Mensagem na Garrafa", @@ -237,7 +237,7 @@ "questDilatoryDistress3Boss": "Adva, a Sereia Usurpadora", "questDilatoryDistress3DropFish": "Peixe (Comida).", "questDilatoryDistress3DropWeapon": "Tridente da Maré Absoluta (Arma)", - "questDilatoryDistress3DropShield": "Escudo de Pérola da Lua (Item para mão do escudo)", + "questDilatoryDistress3DropShield": "Escudo de Pérola Lunar (Item para mão do escudo)", "questCheetahText": "Tão Guepardo", "questCheetahNotes": "Enquanto você caminha pela Savana Sloensteadi com seus amigos @PainterProphet, @tivaquinn, @Unruly Hyena, e @Crawford, você fica assustado ao ver um Guepardo correndo com um novo Habiticano na boca. Embaixo das patas ferozes do Guepardo, tarefas somem mesmo sem serem completadas -- antes de alguém sequer ter a chance de finalizá-las. O Habiticano vê você e grita \"Por favor, me ajude! Este Guepardo está me fazendo subir de nível muito rápido, mas não estou terminando tarefa nenhuma. Quero ir mais devagar e aproveitar o jogo. Faça ele parar!\" Você lembra com carinho dos seus dias de iniciante e sabe que precisa ajudar o novato parando o Guepardo!", "questCheetahCompletion": "O novo Habiticano está ofegante depois do ocorrido com o Guepardo, mas agradece a você e aos seus amigos pela ajuda. \"Estou feliz que o Guepardo não poderá mais abocanhar ninguém. Ele até deixou alguns ovos de Guepardo para a gente, então talvez possamos criá-los como mascotes mais confiáveis!\"", @@ -250,16 +250,28 @@ "questHorseBoss": "Pesadelo", "questHorseDropHorseEgg": "Cavalo (Ovo)", "questHorseUnlockText": "Desbloqueie ovos de Cavalo no Mercado", - "questBurnoutText": "Burnout and the Exhaust Spirits", - "questBurnoutNotes": "It is well past midnight, still and stiflingly hot, when Redphoenix and scout captain Kiwibot abruptly burst through the city gates. \"We need to evacuate all the wooden buildings!\" Redphoenix shouts. \"Hurry!\"

Kiwibot grips the wall as she catches her breath. \"It's draining people and turning them into Exhaust Spirits! That's why everything was delayed. That's where the missing people have gone. It's been stealing their energy!\"

\"'It'?'\" asks Lemoness.

And then the heat takes form.

It rises from the earth in a billowing, twisting mass, and the air chokes with the scent of smoke and sulphur. Flames lick across the molten ground and contort into limbs, writhing to horrific heights. Smoldering eyes snap open, and the creature lets out a deep and crackling cackle.

Kiwibot whispers a single word.

\"Burnout.\"", - "questBurnoutCompletion": "Burnout is DEFEATED!

With a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.

Ian, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!

\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!

One of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"

Her tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"

She claps her hands. \"Now - let's celebrate!\"", + "questBurnoutText": "Queimadura e os Espíritos Exaustos", + "questBurnoutNotes": "Passou da meia-noite, mas o calor ainda queima quando Redphoenix e a capitã dos escoteiros, Kiwibot, entram abruptamente pelos portões da cidade. \"Precisamos evacuar todas as construções de madeira\", grita Redphoenix. \"Rápido!\"

Kiwibot se segura na parede enquanto recupera o fôlego. \"Ele está sugando pessoas e transformando-as em Espíritos Exaustos! É por isso que tudo estava atrasado. É isso que aconteceu com as pessoas desaparecidas. Ele está roubando a energia delas!\"

\"Ele?\", pergunta Lemoness.

E aí o calor toma forma.

Surge da terra em uma massa esvoaçante e torcida, enquanto o ar sucumbe ao cheiro da fumaça e do enxofre. Chamas avançam pelo chão derretido e transformam-se em patas, alcançando um tamanho assustador. Olhos ardentes se abrem e a criatura solta um alto estalo.

Kiwibot então sussura uma única palavra.

\"Queimadura.\"", + "questBurnoutCompletion": "Burnout foi DERROTADO!

Com um grande e suave suspiro, Burnout libera, devagar, sua energia ardente que estava alimentando seu fogo. Enquanto o monstro desaparece calmamente em cinzas, as energias que ele roubou brilham no ar, rejuvenescendo os Espíritos Exaustos e os devolvendo a suas verdadeiras formas.

Ian, Daniel e a Feiticeira Sazonal animam-se enquanto os Habiticanos correm para saudá-los e todos os cidadãos desaparecidos dos Campos Florescentes abraçam suas famílias e amigos. O último Espírito Exausto se transforma no Ceifador Alegre!

\"Olhem!\" sussura @Baconsaur, enquanto as cinzas começam a brilhar. Devagar, elas se transformam em centenas de fênix reluzentes!

Um dos brilhantes pássaros pousa no braço esqueleto do Ceifador Alegre e sorri para ele. \"Já faz bastante tempo que eu tive o raro privilégio de testemunhar uma fênix nos Campos Florescentes,\" ela disse. \"Apesar das ocorrências recentes, eu preciso dizer que isto é, realmente, tematicamente apropriado!\"

Seu tom de voz fica sereno, apesar de (natualmente) seu sorriso permanecer. \"Nós somos conhecidos por nosso trabalho duro aqui, mas também somos conhecidos por nossos banquetes e festivais. Bem irônico, eu suponho, enquanto nos esforçamos para planejar uma festa espetacular, nós nos recusamos a nos permitir qualquer tempo para diversão. Nós certamente não vamos cometer o mesmo erro outra vez!\"

Ela aplaude. \"Agora - vamos celebrar!\"", "questBurnoutCompletionChat": "`Burnout is DEFEATED!`\n\nWith a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.\n\nIan, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!\n\n\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!\n\nOne of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"\n\nHer tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"\n\nShe claps her hands. \"Now - let's celebrate!\"\n\nAll Habiticans receive:\n\nPhoenix Pet\nPhoenix Mount\nAchievement: Savior of the Flourishing Fields\nBasic Candy\nVanilla Candy\nSand Candy\nCinnamon Candy\nChocolate Candy\nRotten Candy\nSour Pink Candy\nSour Blue Candy\nHoney Candy", - "questBurnoutBoss": "Burnout", - "questBurnoutBossRageTitle": "Exhaust Strike", - "questBurnoutBossRageDescription": "When this gauge fills, Burnout will unleash its Exhaust Strike on Habitica!", - "questBurnoutDropPhoenixPet": "Phoenix (Pet)", - "questBurnoutDropPhoenixMount": "Phoenix (Mount)", - "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", - "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBoss": "Queimadura", + "questBurnoutBossRageTitle": "Golpe por Exaustão", + "questBurnoutBossRageDescription": "Quando este medidor estiver cheio, o Queimadura aplicará seu Golpe por Exaustão em todo Habitica.", + "questBurnoutDropPhoenixPet": "Fênix (Mascote)", + "questBurnoutDropPhoenixMount": "Fênix (Montaria)", + "questBurnoutBossRageQuests": "`Queimadura usou o GOLPE POR EXAUSTÃO!`\n\nAh não! Mesmo com nosso esforço, deixamos algumas Tarefas Diárias escapar e agora o Queimadura se inflamou com energia! Com um amedrontador grunhido, ele engole Ian, o Mestre das Missões, num espectro de fogo. Enquanto pergaminhos de missões caem queimadas, a fumaça espairece e você percebe que o Ian teve sua energia arrancada e se transformou num flutuante Espírito Exausto!\n\nApenas a derrota do Queimadura pode quebrar o feitiço e trazer de volta nosso querido Mestre das Missões. Vamos continuar fazendo nossas Tarefas Diárias e derrotar esse monstro antes que ele ataque novamente!", + "questBurnoutBossRageSeasonalShop": "`Queimadura usa ATAQUE DE EXAUSTÃO!`\n\nAhh !!! Nossas Tarefas Diárias incompletas têm alimentado as chamas do Queimadura, e agora ele tem energia suficiente para atacar novamente! Ele solta um jorro de chamas espectrais que cauteriza a Seasonal Shop. Você fica horrorizado ao ver que o animado Sorceress Sazonal, foi transformado em um abatido Espírito Exausto.\n\nTemos que resgatar nossos NPCs! Se apressem, Habiticanos, concluam suas tarefas e derrotem o Queimadura antes que ele ataque pela terceira vez!", + "questBurnoutBossRageTavern": "`Queimadura usa ATAQUE DE EXAUSTÃO!`\n\nMuitos Habiticanos tem se escondido do Queimadura na Taverna, mas não mais! Com um uivo estridente, Queimadura arranha a Taverna com as suas mãos ardentes. À medida que os clientes da Taverna fogem, Daniel é pego nas garras de Queimadura, e se transforma em um Espírito Exausto na sua frente! \n\nEste horror cabeça quente já dura tempo demais. Não desista... estamos tão perto de vencer o Queimadura de uma vez por todas!", + "questFrogText": "Pântano do Sapo Bagunceiro", + "questFrogNotes": "Enquanto você e seus amigos caminhão com dificuldade pelo Pântano da Estagnação, @starsystemic aponta para uma placa \"Fique no caminho -- se puder.\"

\"Com certeza isso não é difícil!\" @RosemonkeyCT diz. \"É amplo e claro.\"

Mas conforme você avança, nota que o caminho gradualmente vai sendo tomado pela sujeira do pântano, ladeado por estranhos detritos azuis, até que é impossível prosseguir.

Conforme você olha em volta, se perguntando como ficou tão bagunçado, @Jon Arjinborn grita \"Cuidado!\" Um sapo irritado pula do lodo, vestindo roupas sujas e iluminado por um fogo azul. Você terá que superar esse venenoso Sapo Bagunceiro para avançar!", + "questFrogCompletion": "O sapo se esconde de volta na sujeira, derrotado. Conforme ele escapule, o lodo azul desvanece, deixando o caminho a frente livre.

Parados no meio do caminho estão três ovos antigos. \"Você pode ver os pequenos girinos através da casca transparente!\" @Breadstrings diz. \"Aqui, você devia ficar com eles.\"", + "questFrogBoss": "Sapo Bagunceiro", + "questFrogDropFrogEgg": "Sapo (Ovo)", + "questFrogUnlockText": "Desbloqueia ovos de Sapo para compra no Mercado", + "questSnakeText": "A Serpente da Distração", + "questSnakeNotes": "É preciso um espírito durão para viver nas Duas da Distração. O deserto árido não é um lugar muito produtivo, e as dunas brilhantes têm levado muitos viajantes a se perderem. No entanto, alguma coisa tem assustado até mesmo os locais. As areias foram mudando e engolfando aldeias inteiras. Moradores alegam que um monstro com um enorme corpo de serpente está à espreita sob as areias, e todos eles oferecem juntos uma recompensa para aquele que irá ajudá-los a encontrá-lo e pará-lo. Os mais elogiados encantadores de serpentes @EmeraldOx e @PainterProphet concordaram em ajudá-lo a convocar a besta. Poderá você impedir a Serpente da Distração?", + "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", + "questSnakeBoss": "Serpente da Distração", + "questSnakeDropSnakeEgg": "Cobra (Ovo)", + "questSnakeUnlockText": "Desbloqueie ovos de Cobra para compra no Mercado" } \ No newline at end of file diff --git a/common/locales/pt/rebirth.json b/common/locales/pt/rebirth.json index c4fad257b9..d98d302dce 100644 --- a/common/locales/pt/rebirth.json +++ b/common/locales/pt/rebirth.json @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "Você também ganha uma Conquista por começar uma nova aventura!", "beReborn": "Renasça", "rebirthAchievement": "Você iniciou uma nova aventura! Esse é o seu Renascimento número <%= number %>, e o nível mais alto que você atingiu foi <%= level %>. Para acumular essa Conquista, comece sua próxima nova aventura quando atingir um Nível ainda maior!", + "rebirthAchievement100": "Você iniciou uma nova aventura! Esse é seu <%= number %> º Renascimento, e o nível mais alto que você atingiu foi 100 ou maior. Para acumular essa Conquista, comece sua próxima aventura quando atingir pelo menos nível 100!", "rebirthBegan": "Iniciou uma Nova Aventura", "rebirthText": "Iniciou <%= rebirths %> Novas Aventuras", "rebirthOrb": "Usou um Orbe do Renascimento para recomeçar depois de alcançar Nível", + "rebirthOrb100": "Usou um Orbe do Renascimento para recomeçar depois de alcançar nível 100 ou superior", "rebirthPop": "Comece um novo personagem do Nível 1 mantendo conquistas, colecionáveis, e tarefas com histórico.", "rebirthName": "Orbe do Renascimento", "reborn": "Renascido, nível max <%= reLevel %>" diff --git a/common/locales/pt/settings.json b/common/locales/pt/settings.json index bc6f7310d4..b7b01c3b9e 100644 --- a/common/locales/pt/settings.json +++ b/common/locales/pt/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "Com essa opção ativada, a lista de etiquetas das tarefas será omitida quando você abrir uma tarefa para edição.", "startAdvCollapsed": "Opções Avançadas das tarefas começam omitidas", "startAdvCollapsedPop": "Com essa opção ativada, Opções Avançadas estarão omitidas quando você abrir uma tarefa para edição.", + "dontShowAgain": "Não mostre isso novamente", + "suppressLevelUpModal": "Não mostre um popup quando subir de nível", + "suppressHatchPetModal": "Não mostre um popup quando nascer uma mascote", + "suppressRaisePetModal": "Não mostre um popup quando uma mascote evoluir para montaria", + "suppressStreakModal": "Não mostre um popup quando alcançar uma conquista combo.", "showTour": "Mostrar Tour", "restartTour": "Reiniciar o tour de introdução de quando você se juntou ao Habitica.", "showBailey": "Mostrar Bailey", @@ -81,7 +86,6 @@ "emailChange1": "Para alterar seu endereço de e-mail, por favor envie um e-mail a", "emailChange2": "admin@habitica.com", "emailChange3": "incluindo ambos os seus e-mails antigo e novo, bem como seu ID de Usuário.", - "username": "Nome de login", "usernameOrEmail": "Nome de usuário ou E-mail", "email": "E-mail", "registeredWithFb": "Registrado com o Facebook", @@ -89,7 +93,7 @@ "loginNameDescription2": "Usuário -> Perfil", "loginNameDescription3": "para alterar o nome que será apresentado em seu avatar e mensagens de chat.", "emailNotifications": "Notificações de E-mail", - "wonChallenge": "Você ganhou um Desafio", + "wonChallenge": "Você ganhou um desafio!", "newPM": "Recebeu Mensagem Privada", "giftedGems": "Gemas Presenteadas", "giftedGemsInfo": "<%= amount %> Gemas - por <%= name %>", @@ -118,5 +122,29 @@ "promoCode": "Código Promocional", "promoCodeApplied": "Código Promocional Aplicado! Verifique seu inventário", "promoPlaceholder": "Insira um Código Promocional", - "displayInviteToPartyWhenPartyIs1": "Mostrar o botão 'Convidar' para a Equipe quando a equipe tiver 1 membro." + "displayInviteToPartyWhenPartyIs1": "Mostrar o botão 'Convidar' para a Equipe quando a equipe tiver 1 membro.", + "saveCustomDayStart": "Salvar Início de Dia Personalizado", + "registration": "Registro", + "addLocalAuth": "Adicionar autenticação local:", + "generateCodes": "Gerar Códigos", + "generate": "Gerar", + "getCodes": "Obter Códigos", + "webhooks": "Webhooks", + "enabled": "Habilitado", + "webhookURL": "URL do Webhook", + "add": "Adicionar", + "buyGemsGoldCap": "Máximo aumentado para <%= amount %>", + "mysticHourglass": "<%= amount %> Ampulhetas Místicas", + "mysticHourglassText": "Ampulhetas Místicas te permitem comprar conjuntos Misteriosos de meses anteriores.", + "purchasedPlanId": "Recorrente $<%= price %> a cada <%= months %> mes(es) (<%= plan %>)", + "purchasedPlanExtraMonths": "Você tem <%= months %> meses de crédito de assinatura.", + "consecutiveSubscription": "Assinatura Consecutiva ", + "consecutiveMonths": "Meses Consecutivos:", + "gemCapExtra": "Número Máximo de Gemas extra:", + "mysticHourglasses": "Ampulhetas Místicas", + "paypal": "PayPal", + "amazonPayments": "Amazon Payments", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/pt/subscriber.json b/common/locales/pt/subscriber.json index 146e055f19..e8d255ff5b 100644 --- a/common/locales/pt/subscriber.json +++ b/common/locales/pt/subscriber.json @@ -60,7 +60,7 @@ "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> e <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitle": "Misteriosos Viajantes do Tempo", "timeTravelersPopoverNoSub": "Você precisará de uma Ampulheta Mística para convocar os misteriosos Viajantes do Tempo! <%= linkStart %>Assinantes<%= linkEnd %> ganham uma Ampulheta Mística para cada três meses consecutivos de assinatura. Volte quando você tiver uma Ampulheta Mística e os Viajantes do Tempo buscarão para você um mascote raro, uma montaria rara ou um Conjunto de Itens de Assinante do passado... ou até do futuro.", - "timeTravelersPopover": "Estamos vendo que você tem uma Ampulheta Mística, então teremos todo o prazer em viajar no tempo para você! Por favor, escolha o mascote, montaria ou Conjunto de Itens Misteriosos que você gostaria. Você pode ver uma lista dos conjuntos antigos <%= linkStart %>aqui<%= linkEnd %>! Se esses conjuntos não te satisfazem, talvez você estaria interessado em algum dos nossos elegantes Conjuntos de Itens Steampunk futuristas?", + "timeTravelersPopover": "Notamos que você tem uma Ampulheta Mística, então iremos felizes viajar de volta no tempo para você! Por favor escolha um mascote, montaria ou conjunto de Item Misterioso que você deseja. Você pode ver a lista de conjuntos passados aqui! Se esses não te agradarem, talvez você esteja interessado em um de nossos elegantes novos conjuntos futurísticos Steampunk?", "timeTravelersAlreadyOwned": "Parabéns! Você já possui todos os itens que os Viajantes do Tempo oferecem no momento. Obrigado por apoiar o site!", "mysticHourglassPopover": "A Ampulheta Mística permite a compra de certos itens limitados, como os Conjuntos de Itens Misteriosos e recompensas de chefões dos meses anteriores.", "subUpdateCard": "Atualizar Cartão", @@ -68,7 +68,7 @@ "subUpdateDescription": "Atualize o cartão para ser cobrado.", "notEnoughHourglasses": "Você não tem Ampulhetas Místicas suficientes.", "hourglassBuyEquipSetConfirm": "Comprar este conjunto completo de itens por 1 Ampulheta Mística?", - "hourglassBuyItemConfirm": "Comprar este item por 1 Ampulheta Mística", + "hourglassBuyItemConfirm": "Comprar este item por 1 Ampulheta Mística?", "petsAlreadyOwned": "Você já possui este mascote.", "mountsAlreadyOwned": "Você já possui esta montaria.", "typeNotAllowedHourglass": "Tipo de item não disponível para compra usando Ampulhetas Místicas. Tipos permitidos:", diff --git a/common/locales/pt/tasks.json b/common/locales/pt/tasks.json index de3f6a94d3..99dbc2104b 100644 --- a/common/locales/pt/tasks.json +++ b/common/locales/pt/tasks.json @@ -88,8 +88,7 @@ "fortifyText": "Fortificar reverterá todas as suas tarefas para o valor neutro (amarelo), como se tivesse acabado de adicioná-las, e completará sua vida até estar cheia. Esta é uma ótima opção caso suas tarefas vermelhas estejam tornando o jogo muito difícil, ou suas tarefas azuis tornando-o muito fácil. Se começar de novo parece mais empolgante, gaste suas Gemas e aproveite!", "sureDelete": "Tem certeza de que deseja deletar essa tarefa?", "streakCoins": "Bônus de Combo!", - "pushTaskToTop": "Enviar tarefa para o topo", - "pushTaskToBottom": "Enviar tarefa para o fundo", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "Insira o título da tarefa primeiro.", "dailiesRestingInInn": "Você está descansando na Pousada! Suas Tarefas Diárias NÃO vão lhe causar dano esta noite, mas elas ainda IRÃO atualizar normalmente todos os dias. Se você está em uma missão, você não causará dano ou coletará itens até que saia da Pousada, mas ainda poderá receber dano de um Chefão se os membros de sua Equipe não completarem as suas Tarefas Diárias.", "habitHelp1": "Bons Hábitos são coisas que você faz muitas vezes. Eles recompensam com Ouro e Experiência cada vez que você clica no botão <%= plusIcon %>.", diff --git a/common/locales/ro/backgrounds.json b/common/locales/ro/backgrounds.json index 3da7375115..e06f5c1fd8 100644 --- a/common/locales/ro/backgrounds.json +++ b/common/locales/ro/backgrounds.json @@ -16,7 +16,7 @@ "backgroundSeafarerShipNotes": "Cutreieră apele la bordul Navei Navigatorului.", "backgrounds082014": "SET 3: Lansat în august 2014", "backgroundCloudsText": "Nori", - "backgroundCloudsNotes": "Zboară printre Nori", + "backgroundCloudsNotes": "Zboară printre nori", "backgroundDustyCanyonsText": "Canion prăfuit", "backgroundDustyCanyonsNotes": "Plimbă-te printr-un canion prăfuit.", "backgroundVolcanoText": "Vulcan", @@ -24,7 +24,7 @@ "backgrounds092014": "SET 4: Lansat în septembrie 2014", "backgroundThunderstormText": "Furtună", "backgroundThunderstormNotes": "Transmite fulgere într-o furtună.", - "backgroundAutumnForestText": "Pădure de toamnă", + "backgroundAutumnForestText": "Pădure tomnatică", "backgroundAutumnForestNotes": "Cutreieră o pădure tomnatică", "backgroundHarvestFieldsText": "Câmpuri de recoltă", "backgroundHarvestFieldsNotes": "Cultivă-ți câmpurile de recoltă.", @@ -112,11 +112,25 @@ "backgroundStableNotes": "Ai grijă de animalele de călărit din Grajdul Habitica.", "backgroundTavernText": "Cârciuma Habitica", "backgroundTavernNotes": "Vizitează Cârciuma Habitica.", - "backgrounds102015": "SET 17: Released October 2015", - "backgroundHarvestMoonText": "Harvest Moon", - "backgroundHarvestMoonNotes": "Cackle under the Harvest Moon.", - "backgroundSlimySwampText": "Slimy Swamp", - "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", - "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgrounds102015": "SET 17: Lansat în Octombrie 2015", + "backgroundHarvestMoonText": "Luna recoltei", + "backgroundHarvestMoonNotes": "Chicotește sub luna tomnatică", + "backgroundSlimySwampText": "Mlaștină noroioasă", + "backgroundSlimySwampNotes": "Târăște-te prin mlaștina noroioasă", + "backgroundSwarmingDarknessText": "Întunecime roitoare", + "backgroundSwarmingDarknessNotes": "Dârdâie-ți dinții prin întunecimea roitoare", + "backgrounds112015": "SET 18: Lansat în noiembrie 2015", + "backgroundFloatingIslandsText": "Insule plutitoare", + "backgroundFloatingIslandsNotes": "Țopăie printre insulele plutitoare", + "backgroundNightDunesText": "Dunele nopții", + "backgroundNightDunesNotes": "Mergi lejer printre dunele nopții", + "backgroundSunsetOasisText": "Oaza de la apus", + "backgroundSunsetOasisNotes": "Lenevește prin oaza de la apus", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/ro/challenge.json b/common/locales/ro/challenge.json index 8bd936144f..cc7158e0cc 100644 --- a/common/locales/ro/challenge.json +++ b/common/locales/ro/challenge.json @@ -59,5 +59,9 @@ "challengeNotEnoughGems": "You do not have enough gems to post this challenge.", "noPermissionEditChallenge": "You don't have permissions to edit this challenge", "noPermissionDeleteChallenge": "You don't have permissions to delete this challenge", - "noPermissionCloseChallenge": "You don't have permissions to close this challenge" + "noPermissionCloseChallenge": "You don't have permissions to close this challenge", + "congratulations": "Congratulations!", + "hurray": "Hurray!", + "noChallengeOwner": "no owner", + "noChallengeOwnerPopover": "This challenge does not have an owner because the person who created the challenge deleted their account." } \ No newline at end of file diff --git a/common/locales/ro/character.json b/common/locales/ro/character.json index 04f2989bd3..1ea9c7fd67 100644 --- a/common/locales/ro/character.json +++ b/common/locales/ro/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "Class Bonus", "battleGear": "Echipament de luptă", "battleGearText": "This is the gear you wear into battle; it affects numbers when interacting with your tasks.", + "autoEquipBattleGear": "Auto-equip new gear", "costume": "Costum", "costumeText": "Dacă preferi aspectul altui echipament în loc de ce ai echipat, bifează cutiuța \"Poartă Costum\" ca să îmbraci la vedere un costum în timp ce porți îmbrăcămintea de luptă pe dedesubt.", "useCostume": "Poartă costum", @@ -64,6 +65,10 @@ "ultimGearText": "Has upgraded to the maximum weapon and armor set for the following classes:", "level": "Nivel", "levelUp": "Creștere de nivel!", + "gainedLevel": "You gained a level!", + "leveledUp": "By accomplishing your real-life goals, you've grown to Level <%= level %>!", + "fullyHealed": "You have been fully healed!", + "huzzah": "Huzzah!", "mana": "Mana", "hp": "PV", "mp": "PM", diff --git a/common/locales/ro/content.json b/common/locales/ro/content.json index bbe31fe815..b01fe7fbc1 100644 --- a/common/locales/ro/content.json +++ b/common/locales/ro/content.json @@ -1,114 +1,120 @@ { - "potionText": "Poțiune de sănătate", + "potionText": "Licoare de sănătate", "potionNotes": "Vindecă 15 puncte de sănătate (instantaneu)", - "armoireText": "Enchanted Armoire", - "armoireNotesFull": "Open the Armoire to randomly receive special Equipment, Experience, or food! Equipment pieces remaining:", - "armoireLastItem": "You've found the last piece of rare Equipment in the Enchanted Armoire.", - "armoireNotesEmpty": "The Armoire will have new Equipment in the first week of every month. Until then, keep clicking for Experience and Food!", + "armoireText": "Șifonier fermecat", + "armoireNotesFull": "Deschide șifonierul pentru a primi la întâmplare echipament, experiență sau mâncare! Piesele de echipament rămase:", + "armoireLastItem": "Ai găsit ultima piesă de echipament rar din șifonierul fermecat.", + "armoireNotesEmpty": "Șifonierul va avea noi echipamente în prima săptămână a fiecărei luni. Până atunci, continuă să faci clic pentru experiență și mâncare!", "dropEggWolfText": "Lup", - "dropEggWolfMountText": "Wolf", - "dropEggWolfAdjective": "a loyal", + "dropEggWolfMountText": "Lup", + "dropEggWolfAdjective": "loial", "dropEggTigerCubText": "Pui de tigru", "dropEggTigerCubMountText": "Tigru", - "dropEggTigerCubAdjective": "a fierce", + "dropEggTigerCubAdjective": "feroce", "dropEggPandaCubText": "Pui de Panda", "dropEggPandaCubMountText": "Panda", - "dropEggPandaCubAdjective": "a gentle", + "dropEggPandaCubAdjective": "blând", "dropEggLionCubText": "Pui de leu", "dropEggLionCubMountText": "Leu", - "dropEggLionCubAdjective": "a regal", + "dropEggLionCubAdjective": "regal", "dropEggFoxText": "Vulpoi", - "dropEggFoxMountText": "Fox", - "dropEggFoxAdjective": "a wily", + "dropEggFoxMountText": "Vulpoi", + "dropEggFoxAdjective": "șiret", "dropEggFlyingPigText": "Porc zburător", - "dropEggFlyingPigMountText": "Flying Pig", - "dropEggFlyingPigAdjective": "a whimsical", + "dropEggFlyingPigMountText": "Porc zburător", + "dropEggFlyingPigAdjective": "năbădăios", "dropEggDragonText": "Dragon", "dropEggDragonMountText": "Dragon", - "dropEggDragonAdjective": "a mighty", + "dropEggDragonAdjective": "măreţ", "dropEggCactusText": "Cactus", "dropEggCactusMountText": "Cactus", - "dropEggCactusAdjective": "a prickly", + "dropEggCactusAdjective": "spinos", "dropEggBearCubText": "Pui de urs", "dropEggBearCubMountText": "Urs", - "dropEggBearCubAdjective": "a cuddly", + "dropEggBearCubAdjective": "drăgălaș", "questEggGryphonText": "Grifon", - "questEggGryphonMountText": "Gryphon", - "questEggGryphonAdjective": "a proud", + "questEggGryphonMountText": "Grifon", + "questEggGryphonAdjective": "mândru", "questEggHedgehogText": "Arici", - "questEggHedgehogMountText": "Hedgehog", - "questEggHedgehogAdjective": "a spiky", + "questEggHedgehogMountText": "Arici", + "questEggHedgehogAdjective": "țepos", "questEggDeerText": "Cerb", - "questEggDeerMountText": "Deer", - "questEggDeerAdjective": "an elegant", + "questEggDeerMountText": "Căprioară", + "questEggDeerAdjective": "elegantă", "questEggEggText": "Ou", "questEggEggMountText": "Egg Basket", - "questEggEggAdjective": "a colorful", + "questEggEggAdjective": "colorat", "questEggRatText": "Șobolan", - "questEggRatMountText": "Rat", - "questEggRatAdjective": "a dirty", - "questEggOctopusText": "Octopus", - "questEggOctopusMountText": "Octopus", - "questEggOctopusAdjective": "a slippery", + "questEggRatMountText": "Șobolan", + "questEggRatAdjective": "murdar", + "questEggOctopusText": "Caracatiță", + "questEggOctopusMountText": "Caracatiță", + "questEggOctopusAdjective": "alunecoasă", "questEggSeahorseText": "Căluț de mare", - "questEggSeahorseMountText": "Seahorse", - "questEggSeahorseAdjective": "a prize", + "questEggSeahorseMountText": "Căluț de mare", + "questEggSeahorseAdjective": "premiant", "questEggParrotText": "Papagal", - "questEggParrotMountText": "Parrot", - "questEggParrotAdjective": "a vibrant", + "questEggParrotMountText": "Papagal", + "questEggParrotAdjective": "vioi", "questEggRoosterText": "Cocoș", - "questEggRoosterMountText": "Rooster", - "questEggRoosterAdjective": "a strutting", + "questEggRoosterMountText": "Cocoș", + "questEggRoosterAdjective": "țanțoș", "questEggSpiderText": "Păianjen", - "questEggSpiderMountText": "Spider", - "questEggSpiderAdjective": "a creepy", - "questEggOwlText": "Owl", - "questEggOwlMountText": "Owl", - "questEggOwlAdjective": "a wise", + "questEggSpiderMountText": "Păianjen", + "questEggSpiderAdjective": "fioros", + "questEggOwlText": "Bufniță", + "questEggOwlMountText": "Bufniță", + "questEggOwlAdjective": "înțeleaptă", "questEggPenguinText": "Pinguin", - "questEggPenguinMountText": "Penguin", - "questEggPenguinAdjective": "a perspicacious", - "questEggTRexText": "Tyrannosaur", - "questEggTRexMountText": "Tyrannosaur", - "questEggTRexAdjective": "a tiny-armed", - "questEggRockText": "Rock", - "questEggRockMountText": "Rock", - "questEggRockAdjective": "a lively", - "questEggBunnyText": "Bunny", - "questEggBunnyMountText": "Bunny", - "questEggBunnyAdjective": "a snuggly", - "questEggSlimeText": "Marshmallow Slime", - "questEggSlimeMountText": "Marshmallow Slime", - "questEggSlimeAdjective": "a sweet", - "questEggSheepText": "Sheep", - "questEggSheepMountText": "Sheep", - "questEggSheepAdjective": "a woolly", - "questEggCuttlefishText": "Cuttlefish", - "questEggCuttlefishMountText": "Cuttlefish", - "questEggCuttlefishAdjective": "a cuddly", - "questEggWhaleText": "Whale", - "questEggWhaleMountText": "Whale", - "questEggWhaleAdjective": "a splashy", - "questEggCheetahText": "Cheetah", - "questEggCheetahMountText": "Cheetah", - "questEggCheetahAdjective": "an honest", - "questEggHorseText": "Horse", - "questEggHorseMountText": "Horse", - "questEggHorseAdjective": "a galloping", - "eggNotes": "Find a hatching potion to pour on this egg, and it will hatch into <%= eggAdjective(locale) %> <%= eggText(locale) %>.", + "questEggPenguinMountText": "Pinguin", + "questEggPenguinAdjective": "perspicace", + "questEggTRexText": "Tiranozaur", + "questEggTRexMountText": "Tiranozaur", + "questEggTRexAdjective": "cu brațe minuscule", + "questEggRockText": "Piatră", + "questEggRockMountText": "Piatră", + "questEggRockAdjective": "vioaie", + "questEggBunnyText": "Iepuraș", + "questEggBunnyMountText": "Iepuraș", + "questEggBunnyAdjective": "drăgălaș", + "questEggSlimeText": "Bezele lipicioase", + "questEggSlimeMountText": "Bezele lipicioase", + "questEggSlimeAdjective": "o bomboană", + "questEggSheepText": "Oaie", + "questEggSheepMountText": "Oaie", + "questEggSheepAdjective": "lânoasă", + "questEggCuttlefishText": "Sepie", + "questEggCuttlefishMountText": "Sepie", + "questEggCuttlefishAdjective": "drăgălașă", + "questEggWhaleText": "Balenă", + "questEggWhaleMountText": "Balenă", + "questEggWhaleAdjective": "pleoscăindă", + "questEggCheetahText": "Ghepard", + "questEggCheetahMountText": "Ghepard", + "questEggCheetahAdjective": "onest", + "questEggHorseText": "Cal", + "questEggHorseMountText": "Cal", + "questEggHorseAdjective": "galopant", + "questEggFrogText": "Broască", + "questEggFrogMountText": "Broască", + "questEggFrogAdjective": "princiară", + "questEggSnakeText": "Snake", + "questEggSnakeMountText": "Snake", + "questEggSnakeAdjective": "a slithering", + "eggNotes": "Găsește o licoare de eclozat pentru a turna peste acest ou și va ecloza în <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "de bază", "hatchingPotionWhite": "Alb", - "hatchingPotionDesert": "de Deșert", + "hatchingPotionDesert": "Deșert", "hatchingPotionRed": "Roșu", - "hatchingPotionShade": "Fantomă", + "hatchingPotionShade": "Umbră", "hatchingPotionSkeleton": "Schelet", "hatchingPotionZombie": "Zombi", - "hatchingPotionCottonCandyPink": "roz bombon", - "hatchingPotionCottonCandyBlue": "bleo", + "hatchingPotionCottonCandyPink": "Roz bombon", + "hatchingPotionCottonCandyBlue": "Bleu", "hatchingPotionGolden": "Auriu", - "hatchingPotionSpooky": "Spooky", - "hatchingPotionNotes": "Pour this on an egg, and it will hatch as a <%= potText(locale) %> pet.", - "premiumPotionAddlNotes": "Not usable on quest pet eggs.", + "hatchingPotionSpooky": "Înfricoșător", + "hatchingPotionNotes": "Toarnă aceasta pe un ou și va ecloza ca un companion <%= potText(locale) %>.", + "premiumPotionAddlNotes": "Neutilizabil pe ouă de companioni obținute din expediții.", "foodMeat": "Carne", "foodMilk": "Lapte", "foodPotatoe": "Cartof", diff --git a/common/locales/ro/faq.json b/common/locales/ro/faq.json index 240985863b..0b92a02537 100644 --- a/common/locales/ro/faq.json +++ b/common/locales/ro/faq.json @@ -2,13 +2,13 @@ "frequentlyAskedQuestions": "Întrebări adresate frecvent", "faqQuestion0": "Sunt confuz(ă). De unde pot avea o privire de ansamblu?", "iosFaqAnswer0": "În primul rând, vei seta sarcini pe care vrei să le realizezi în viața de zi cu zi. Apoi, pe măsură ce completezi sarcinile în viața reală și le bifezi, vei câștiga experiență și aur. Aurul este folosit pentru a cumpăra echipament și alte articole, dar și premii personalizate. Experiența face ca personajul tău să avanseze în nivel și să aibă acces la conținut suplimentar, precum companioni, abilități și expediții! Poți individualiza personajul tău din Meniu > Personalizează avatar.\n\nNiște metode simple de a interacționa: clic pe (+) din colțul din dreapta-sus pentru a adăuga o nouă sarcină. Apasă pe o sarcină existentă pentru a o edita glisează spre stânga pentru a o șterge. Poți sorta sarcinile cu ajutorul etichetelor din colțul din stânga-sus și poți expanda sau contracta listele de verificare prin clic pe bula listei de verificare.", - "webFaqAnswer0": "Mai întâi vei seta sarcini pe care vrei să le realizezi în viața de zi cu zi. Apoi, pe măsură ce completezi sarcinile în viața reală și le bifezi, vei câștiga experiență și aur. Aurul este folosit pentru a cumpăra echipament și unele articole, dar și recompense personalizate. Experiența face ca personajul tău să avanseze în nivel și să descuie conținut cum ar fi companioni, abilități și expediții! Pentru mai multe detalii, wikiul are o excelentă privire de ansamblu pas-cu-pas a jocului [chiar aici](http://habitica.wikia.com/wiki/Habitica_Wiki).", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", "faqQuestion1": "Cum îmi setez sarcinile?", "iosFaqAnswer1": "Bunele obiceiuri (acelea marcate cu +) sunt sarcini pe care le poți efectua de mai multe ori pe zi, cum ar fi mâncatul legumelor. Proastele obiceiuri (cele marcate cu -) sunt sarcini pe care trebuie să le eviți, ca mâncatul unghiilor. Obiceiurile marcate cu + și - au asociate o alegere bună și o alegere proastă, cum ar fi mersul pe scări vs. mersul cu liftul. Bunele obiceiuri te răsplătesc cu experiență și aur. Proastele obiceiuri îți scad sănătatea.\n\nSarcinile zilnice sunt sarcini pe care le poți face în fiecare zi, cum ar fi spălatul pe dinți sau verificarea e-mailului. Poți ajusta zilele în care o sarcină trebuie efectuată printr-o apăsare pe aceasta pentru a o edita. Dacă sari peste o sarcină zilnică ce trebuie efectuată, avatarul va pierde sănătate peste noapte. Ai grijă să nu adaugi prea multe sarcini zilnice în același timp.\n\n„De făcut” este lista ta de sarcini de făcut. Prin completarea acestor sarcini câștigi aur și experiență. Nu pierzi niciodată sănătate prin nerealizarea acestor sarcini. Poți adăuga date limită pentru o sarcină „de făcut” prin atingerea acesteia pentru a o edita.", "webFaqAnswer1": "Obiceiurile bune (marcate cu ) sunt sarcini care pot fi realizate de mai multe ori pe zi, cum ar fi mâncatul legumelor. Obiceiurile proaste (marcate cu ) sunt sarcini pe care ar trebui să le eviți, cum ar fi mâncatul unghiilor. Obiceiurile marcate cu și au asociate o alegere bună și un a proastă, cum ar fi mersul pe scări vs. mersul cu liftul. Obiceiurile bune te răsplătesc cu experiență și aur iar obiceiurile proaste îți scad sănătatea.\n

\nSarcinile zilnice sunt sarcini pe care le poți face în fiecare zi, cum ar fi spălatul pe dinți sau verificarea e-mailului. Poți ajusta zilele în care trebuie realizată o sarcină zilnică printr-un clic pe iconița cu creion pentru a o edita. Dacă sari peste o sarcină zilnică ce trebuie realizată în acea zi, avatarul tău se va deteriora peste noapte. Ai grijă să nu adaugi prea multe sarcini zilnice în același timp.\n

\n „De făcut” sunt lista de sarcini de realizat. Prin completarea acestora câștigi aur și experiență. Nu pierzi niciodată sănătate prin nerealizarea acestor sarcini. Poți adăuga o dată limită pentru o sarcină „de făcut” printr-un clic pe iconița creion pentru a o edita.", - "faqQuestion2": "Care ar fi niște sarcini de încercat?", - "iosFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n

\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", - "webFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", + "faqQuestion2": "Care ar fi niște sarcini exemplu?", + "iosFaqAnswer2": "Wiki-ul are patru liste de sarcini exemplu de folosit ca inspirație:\n

\n * [Exemple de obiceiuri](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Exemple de sarcini zilnice](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Exemple de sarcini de făcut](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Exemple de recompense particularizate](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", + "webFaqAnswer2": "Wiki-ul are patru liste de sarcini exemplu de folosit ca inspirație:\n * [Exemple de obiceiuri](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Exemple de sarcini zilnice](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Exemple de sarcini de făcut](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Exemple de recompense particularizate](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", "faqQuestion3": "De ce își schimbă culorile sarcinile mele?", "iosFaqAnswer3": "Sarcinile tale își schimbă culoarea pe baza a cât de bine le realizezi! Fiecare nouă sarcină începe c o culoare galben neutru. Întreprinde sarcini zilnice sau obiceiuri pozitive mai frecvent și culoarea se va schimba mai mult înspre albastru. Ratează o sarcină zilnică, sau cedează în fața tentației unui obicei prost și sarcina culoarea se va schimba înspre roșu. Cu cât e mai roșie o sarcină, cu atât te va recompensa mai mult, dar dacă este vorba de o sarcină zilnică sau obicei prost, cu atât mai mult te va răni! Aceasta te va motiva să completezi sarcinile care îți pun probleme.", "webFaqAnswer3": "Sarcinile tale își schimbă culoarea pe baza a cât de bine le completezi în acel moment! Fiecare sarcină nouă începe cu o culoare galben neutru. Întreprinde sarcini zilnice sau obiceiuri pozitive mai frecvent și culoarea se va schimba mai mult înspre albastru. Ratează o sarcină zilnică sau cedează în fața tentației unui obicei prost iar culoarea se va schimba înspre roșu. Cu cât e mai roșie o sarcină, cu atât te va recompensa mai mult, dar dacă este vorba de o sarcină zilnică sau un obicei prost, cu atât mai mult te va râni! Aceasta te va motiva să completezi sarcinile care îți pun probleme.", @@ -16,11 +16,11 @@ "iosFaqAnswer4": "Mai multe lucruri te pot răni. În primul rând, sarcinile zilnice necompletate te vor răni peste noapte. În al doilea rând, dacă întreprinzi un obicei prost, aceasta te va răni. În fine, dacă ești într-o bătălie cu un Super Monstru și unul din colegii de ceată nu își completează sarcinile zilnice, Super Monstrul te va ataca.\n\n Metoda principală de a te vindeca este câștigarea unui nivel, ceea ce reface complet sănătatea. Poți cumpăra și o licoare de sănătate cu aur din coloana de Răsplăți. În plus, la nivelul 10 sau mai sus, poți alege să devii Vrăciuitor (vindecător), iar apoi vei învăța abilități de vindecare. Dacă ești într-o ceată ce conține un vrăciuitor, aceștia te pot vindeca și pe tine.", "webFaqAnswer4": "Mai multe lucruri te pot răni. În primul rând, sarcinile zilnice necompletate te vor răni peste noapte. În al doilea rând, dacă întreprinzi un obicei prost, aceasta te va răni. În fine, dacă ești într-o bătălie cu un Super Monstru și unul din colegii de ceată nu își completează sarcinile zilnice, Super Monstrul te va ataca.\n

\n Metoda principală de a te vindeca este câștigarea unui nivel, ceea ce reface complet sănătatea. Poți cumpăra și o licoare de sănătate cu aur din coloana de Răsplăți. În plus, la nivelul 10 sau mai sus, poți alege să devii Vrăciuitor (vindecător), iar apoi vei învăța abilități de vindecare. Dacă ești într-o ceată ce conține un vrăciuitor, aceștia te pot vindeca și pe tine.", "faqQuestion5": "Cum joc Habitica cu prietenii mei?", - "iosFaqAnswer5": "Cea mai bună metodă este să-i inviți într-o ceată cu tine, prin intermediul [site-ului](https://habitica.com/#/options/groups/party)! Vom face în curând posibilă crearea de cete direct din aplicație, dar între timp poți folosi [site-ul](https://habitica.com/#/options/groups/party). Cetele pot merge în expediții, pot lupta cu monștri și pot activa abilități pentru a se susține reciproc. Pe site tu și cu prietenii tăi puteți să vă alăturați breslelor, care sunt camere publice de chat. Breslele vor fi adăugate la aplicație într-o actualizare viitoare!", + "iosFaqAnswer5": "Cea mai bună metodă este să-i inviți într-o ceată cu tine! Cetele pot merge în expediții, lupta cu monștri și pot face vrăji pentru a se susține reciproc. Mergi la Meniu > Ceată și clic pe „Creează o nouă ceată” dacă nu ai deja o ceată activă. Apoi apasă pe lista de membri și apasă pe „Invită” în colțul din dreapta sus pentru a invita prieteni prin introducerea ID-urilor lor de utilizatori (un șir de numere și litere pe care le găsești în Setări > Detalii cont în aplicație și Setări > API pe site-ul web). Pe site poți invita prieteni și prin intermediul e-mailului, o funcție pe care o vom adăuga și aplicației într-o actualizare viitoare.\n\nPe site, tu și prietenii tăi vă puteți alătura și breslelor, care sunt camere de chat publice. Breslele vor fi adăugate aplicației într-o actualizare viitoare!", "webFaqAnswer5": "Cea mai bună metodă este să-i inviți într-o ceată cu tine în meniul Social > Ceată! Cetele pot merge în expediții, se pot lupta cu monștri și pot activa abilități pentru a se susține reciproc. Puteți să vă alăturați împreună și breslelor (Social > Bresle). Breslele sunt camere de chat axate pe interese comune și pot fi publice sau private. Poți să te alături oricâtor bresle vrei, dar unei singure cete la un moment dat.\n

\n Pentru informații mai detaliate, citește paginile de wiki despre [Cete](http://habitrpg.wikia.com/wiki/Party) și [Bresle](http://habitrpg.wikia.com/wiki/Guilds).", "faqQuestion6": "Cum pot obține un companion sau bidiviu (mount)?", "iosFaqAnswer6": "La nivelul 3 vei descuia sistemul de drop. De fiecare dată când completezi o sarcină ai o șansă să-ți pice un ou, o licoare de eclozat sau mâncare. Acestea sunt stocate în Meniu > Articole.\n\n Pentru a ecloza un companion, ai nevoie de un ou și o licoare de eclozat. Apasă pe ou pentru a stabili specia pe care vrei să o eclozezi și selectează „Eclozează oul”. Apoi alege licoarea de eclozat pentru a stabili culoarea acestuia. mergi la Meniu > Compaioni pentru a adăuga noul companion avatarului tău printr-un clic pe acesta.\n\n Poți să și crești companionii în bidivii (mounts) dacă îi hrănești - Meniu > Companioni, apoi selectează „Hrănește companion”! Va trebui să hrănești un companion de multe ori înainte ca acesta să devină bidiviu, dar dacă afli care e mâncarea sa preferată, acesta va crește mai repede. Poți afla prin încercarea repetată sau [poți vedea spoilerele aici](http://habitica.wikia.com/wiki/Food#Food_Preferences). Odată ce ai un bidiviu, mergi la Meniu > Bidivii și apasă pe acesta pentru a-l adăuga avatarului.\n\n Poți obține ouă pentru companioni de expediție prin completarea anumitor expediții. (Vezi mai jos pentru a afla mai multe despre expediții.)", - "webFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Inventory > Market.\n

\n To hatch a Pet, you'll need an egg and a hatching potion. Click on the egg to determine the species you want to hatch, and then click on the hatching potion to determine its color! Go to Inventory > Pets to equip it to your avatar by clicking on it.\n

\n You can also grow your Pets into Mounts by feeding them under Inventory > Pets. Click on a Pet, and then click on a piece of food from the right-hand menu to feed it! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Inventory > Mounts and click on it to equip it to your avatar.\n

\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", + "webFaqAnswer6": "La nivelul 3 vei descuia sistemul de drop. De fiecare dată când completezi o sarcină ai o șansă să-ți pice un ou, o licoare de eclozat sau mâncare. Acestea sunt stocate în Meniu > Articole.\n

\n Pentru a ecloza un companion, ai nevoie de un ou și o licoare de eclozat. Apasă pe ou pentru a stabili specia pe care vrei să o eclozezi și selectează „Eclozează oul”. Apoi alege licoarea de eclozat pentru a stabili culoarea acestuia. mergi la Meniu > Compaioni pentru a adăuga noul companion avatarului tău printr-un clic pe acesta.\n

\n Poți să și crești companionii în bidivii (mounts) dacă îi hrănești - Meniu > Companioni, apoi selectează „Hrănește companion”! Va trebui să hrănești un companion de multe ori înainte ca acesta să devină bidiviu, dar dacă afli care e mâncarea sa preferată, acesta va crește mai repede. Poți afla prin încercarea repetată sau [poți vedea spoilerele aici](http://habitica.wikia.com/wiki/Food#Food_Preferences). Odată ce ai un bidiviu, mergi la Meniu > Bidivii și apasă pe acesta pentru a-l adăuga avatarului.\n

\n Poți obține ouă pentru companioni de expediție prin completarea anumitor expediții. (Vezi mai jos pentru a afla mai multe despre expediții.)", "faqQuestion7": "Cum pot deveni războinic, mag, bandit sau vrăciuitor?", "iosFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their Party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most gold and find the most item drops, and they can help their Party do the same. Finally, Healers can heal themselves and their Party members.\n\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click “Decide Later” and choose later under Menu > Choose Class.", "webFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most Gold and find the most item drops, and they can help their party do the same. Finally, Healers can heal themselves and their party members.\n

\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click \"Opt Out\" and re-enable it later under User > Stats.", @@ -28,14 +28,17 @@ "iosFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Use Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in a special section in the Rewards Column. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You’ll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "faqQuestion9": "Cum lupt cu monștri și cum merg într-o expediție?", - "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party on the [website](https://habitica.com/#/options/groups/party), you'll be rewarded with the Basi-List Scroll! (We will add this feature to the app in a future update.)\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for gold and gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", + "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for Gold and Gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "webFaqAnswer9": "First, you need to join or start a party (under Social > Party). Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n

\n Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are three ways to get a scroll:\n

\n * When you invite people to your party, you’ll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Page (Inventory > Quests) for Gold and Gems.\n

\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your party at the same time that you damage the Boss.\n

\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "faqQuestion10": "Ce sunt nestematele și cum le obțin?", + "faqQuestion10": "What are Gems, and how do I get them?", "iosFaqAnswer10": "Gems are purchased with real money by tapping on the gem icon in the header. When people buy gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying gems directly, there are three other ways players can gain gems:\n\n * Win a Challenge on the [website](https://habitica.com) that has been set up by another player under Social > Challenges. (We will be adding Challenges to the app in a future update!)\n * Subscribe on the [website](https://habitica.com/#/options/settings/subscription) and unlock the ability to buy a certain number of gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with gems do not offer any statistical advantages, so players can still make use of the app without them!", "webFaqAnswer10": "Gems are [purchased with real money](https://habitica.com/#/options/settings/subscription), although [subscribers](https://habitica.com/#/options/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n

\n In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n

\n * Win a Challenge that has been set up by another player under Social > Challenges.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", "faqQuestion11": "Cum raportez un defect sau cer o funcționalitate?", "iosFaqAnswer11": "Poți raporta un defect, solicita o funcționalitate sau poți trimite feedback în dreptul Meniu > Raportează un defect și Meniu > Trimite feedback! Vom face tot ce putem pentru a te ajuta.", "webFaqAnswer11": "Rapoartele de defecte sunt colectate pe GitHub. Mergi la [Ajutor > Raportează un defect](https://github.com/HabitRPG/habitrpg/issues/2760) și urmează instrucțiunile. Nu-ți fă griji, le vom repare în curând!\n

\nCererile de funcționalitate sunt colectate pe Trello. Mergi la [Ajutor > Solicită o funcționalitate](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) și urmează instrucțiunile. Ta-da!", + "faqQuestion12": "Cum mă lupt cu un căpcăun șef?", + "iosFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", + "webFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n

\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n

\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n

\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", "iosFaqStillNeedHelp": "Dacă ai o întrebare ce nu este pe listă, vino și întreabă în chat-ul de pe Cârciumă în dreptul Meniu > Cârciumă! Suntem bucuroși să fim de ajutor.", "webFaqStillNeedHelp": "Dacă ai o întrebare ce nu este pe listă, vino și întreabă în [Breasla Novicilor](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! Suntem bucuroși să fim de ajutor." } \ No newline at end of file diff --git a/common/locales/ro/front.json b/common/locales/ro/front.json index aa7edba6a4..8e29a7978a 100644 --- a/common/locales/ro/front.json +++ b/common/locales/ro/front.json @@ -74,7 +74,7 @@ "infhQuote": "[Habitica] has really helped me impart structure to my life in graduate school.", "invalidEmail": "Este necesară o adresă validă de email pentru a reseta parola.", "irishfeet123Quote": "I've had horrible habits with clearing my place completely after meals and leaving cups all over the place. [Habitica] has cured that!", - "joinOthers": "Join 250,000 people making it fun to achieve goals!", + "joinOthers": "Join <%= userCount %> people making it fun to achieve goals!", "kazuiQuote": "Before [Habitica], I was stuck with my thesis, as well as dissatisfied with my personal discipline regarding housework and things like learning vocabulary and studying Go theory. It turns out breaking down these tasks into smaller manageable checklists is quite the thing to keep me motivated and constantly working.", "landingadminlink": "pachetele administrative", "landingend": "Încă nu te-ai convins?", @@ -179,5 +179,14 @@ "businessInquiries": "Business Inquiries", "merchandiseInquiries": "Merchandise Inquiries", "marketingInquiries": "Marketing/Social Media Inquiries", - "tweet": "Tweet" + "tweet": "Tweet", + "apps": "Apps", + "notifyAndroidApp": "Want us to notify you when the Android app is ready? Sign up for this mailing list!", + "checkOutIOSApp": "Check out our new iOS App!", + "imagine1": "Imagine if improving your life were as fun as playing a game.", + "landingCopy1": "Advance in the game by completing your real-life tasks.", + "landingCopy2": "Battle monsters with friends to stay accountable to your goals.", + "landingCopy3": "Join over <%= userCount %> people having fun as they improve their lives.", + "alreadyHaveAccount": "I already have an account!", + "getStartedNow": "Get Started Now!" } \ No newline at end of file diff --git a/common/locales/ro/gear.json b/common/locales/ro/gear.json index 405d5b297b..212e82e96b 100644 --- a/common/locales/ro/gear.json +++ b/common/locales/ro/gear.json @@ -149,13 +149,19 @@ "weaponArmoireRancherLassoText": "Rancher Lasso", "weaponArmoireRancherLassoNotes": "Lassos: the ideal tool for rounding up and wrangling. Increases Strength by <%= str %>, Perception by <%= per %>, and Intelligence by <%= int %>. Enchanted Armoire: Rancher Set (Item 3 of 3).", "weaponArmoireMythmakerSwordText": "Mythmaker Sword", - "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3)", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Iron Crook", - "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3)", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Gold Wing Staff", "weaponArmoireGoldWingStaffNotes": "The wings on this staff constantly flutter and twist. Increases all attributes by <%= attrs %> each. Enchanted Armoire: Independent Item.", "weaponArmoireBatWandText": "Bat Wand", "weaponArmoireBatWandNotes": "This wand can turn any task into a bat! Wave it about and watch them fly away. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireShepherdsCrookText": "Shepherd's Crook", + "weaponArmoireShepherdsCrookNotes": "Useful for herding gryphons. Increases Constitution by <%= con %>. Enchanted Armoire: Shepherd Set (Item 1 of 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "armură", "armorBase0Text": "Îmbrăcăminte simplă", "armorBase0Notes": "Haine obișnuite. Nu conferă niciun beneficiu.", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "Îmbrăcăminte aiurea pentru petrecere", "armorSpecialBirthday2015Notes": "Happy Birthday, Habitica! Wear these Silly Party Robes to celebrate this wonderful day. Confers no benefit.", "armorSpecialGaymerxText": "Armura curcubeu", - "armorSpecialGaymerxNotes": "In celebration of pride season and GaymerX, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGBTQ and gaming and is open to everyone. It takes place at the InterContinental in downtown San Francisco on July 11-13! Confers no benefit.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "Costum lucios de pisică", "armorSpecialSpringRogueNotes": "Impeccably groomed. Increases Perception by <%= per %>. Limited Edition 2014 Spring Gear.", "armorSpecialSpringWarriorText": "Armură din oțel-trifoi", @@ -307,6 +313,8 @@ "armorMystery201508Notes": "Run fast as a flash in the fluffy Cheetah Costume! Confers no benefit. August 2015 Subscriber Item.", "armorMystery201509Text": "Werewolf Costume", "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Steampunk Suit", "armorMystery301404Notes": "Dapper and dashing, wot! Confers no benefit. February 3015 Subscriber Item.", "armorArmoireLunarArmorText": "Soothing Lunar Armor", @@ -321,6 +329,12 @@ "armorArmoireHornedIronArmorNotes": "Fiercely hammered from iron, this horned armor is nearly impossible to break. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Horned Iron Set (Item 2 of 3).", "armorArmoirePlagueDoctorOvercoatText": "Plague Doctor Overcoat", "armorArmoirePlagueDoctorOvercoatNotes": "An authentic overcoat worn by the doctors who battle the Plague of Procrastination! Increases Intelligence by <%= int %>, Strength by <%= str %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 3 of 3).", + "armorArmoireShepherdRobesText": "Shepherd Robes", + "armorArmoireShepherdRobesNotes": "The fabric is cool and breathable, perfect for a hot day herding gryphons in the desert. Increases Strength and Perception by <%= attrs %> each. Enchanted Armoire: Shepherd Set (Item 2 of 3).", + "armorArmoireRoyalRobesText": "Royal Robes", + "armorArmoireRoyalRobesNotes": "Wonderful ruler, rule all day long! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 3 of 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "echipament pentru cap", "headBase0Text": "Fără cască", "headBase0Notes": "Fără echipament pentru cap", @@ -441,7 +455,7 @@ "headSpecialFall2015HealerText": "Hat of Frog", "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", "headSpecialGaymerxText": "Coiful curcubeu", - "headSpecialGaymerxNotes": "In celebration of pride season and GaymerX, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGBTQ and gaming and is open to everyone. It takes place at the InterContinental in downtown San Francisco on July 11-13! Confers no benefit.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "Coif înaripat", "headMystery201402Notes": "This winged circlet imbues the wearer with the speed of the wind! Confers no benefit. February 2014 Subscriber Item.", "headMystery201405Text": "Flacăra minții", @@ -464,6 +478,8 @@ "headMystery201508Notes": "This cozy cheetah hat is very fuzzy! Confers no benefit. August 2015 Subscriber Item.", "headMystery201509Text": "Werewolf Mask", "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 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", @@ -481,7 +497,7 @@ "headArmoireBlueHairbowText": "Blue Hairbow", "headArmoireBlueHairbowNotes": "Become perceptive, tough, and smart while wearing this beautiful Blue Hairbow! Increases Perception by <%= per %>, Constitution by <%= con %>, and Intelligence by <%= int %>. Enchanted Armoire: Independent Item.", "headArmoireRoyalCrownText": "Royal Crown", - "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Royal Set (Item 1 of 3).", "headArmoireGoldenLaurelsText": "Golden Laurels", "headArmoireGoldenLaurelsNotes": "These golden laurels reward those who have conquered bad habits. Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 2 of 3).", "headArmoireHornedIronHelmText": "Horned Iron Helm", @@ -496,6 +512,12 @@ "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", "headArmoireOrangeCatText": "Orange Cat Hat", "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireBlueFloppyHatText": "Blue Floppy Hat", + "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireShepherdHeaddressText": "Shepherd Headdress", + "headArmoireShepherdHeaddressNotes": "Sometimes the gryphons that you herd like to chew on this headdress, but it makes you seem more intelligent nonetheless. Increases Intelligence by <%= int %>. Enchanted Armoire: Shepherd Set (Item 3 of 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "shield-hand item", "shieldBase0Text": "No Shield-Hand Equipment", "shieldBase0Notes": "Niciun scut sau a doua armă", @@ -579,6 +601,8 @@ "shieldArmoireGladiatorShieldNotes": "To be a gladiator you must.... eh, whatever, just bash them with your shield. Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Gladiator Set (Item 3 of 3).", "shieldArmoireMidnightShieldText": "Midnight Shield", "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "shieldArmoireRoyalCaneText": "Royal Cane", + "shieldArmoireRoyalCaneNotes": "Hooray for the ruler, worthy of song! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 2 of 3).", "back": "Back Accessory", "backBase0Text": "Niciun accesoriu pentru spate", "backBase0Notes": "Niciun accesoriu pentru spate", @@ -592,6 +616,8 @@ "backMystery201504Notes": "Buzz buzz buzz! Flit from task to task. Confers no benefit. April 2015 Subscriber Item.", "backMystery201507Text": "Rad Surfboard", "backMystery201507Notes": "Surf off the Diligent Docks and ride the waves in Inkomplete Bay! Confers no benefit. July 2015 Subscriber Item.", + "backMystery201510Text": "Goblin Tail", + "backMystery201510Notes": "Prehensile and powerful! Confers no benefit. October 2015 Subscriber Item.", "backSpecialWonderconRedText": "Mantie măreață", "backSpecialWonderconRedNotes": "Swishes with strength and beauty. Confers no benefit. Special Edition Convention Item.", "backSpecialWonderconBlackText": "Mantie furtivă", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "These powerful antlers change colors with the leaves. Confers no benefit. September 2014 Subscriber Item.", "headAccessoryMystery201502Text": "Wings of Thought", "headAccessoryMystery201502Notes": "Let your imagination take flight! Confers no benefit. February 2015 Subscriber Item.", + "headAccessoryMystery201510Text": "Goblin Horns", + "headAccessoryMystery201510Notes": "These fearsome horns are slightly slimy. Confers no benefit. October 2015 Subscriber Item.", "headAccessoryMystery301405Text": "Headwear Goggles", "headAccessoryMystery301405Notes": "\"Goggles are for your eyes,\" they said. \"Nobody wants goggles that you can only wear on your head,\" they said. Hah! You sure showed them! Confers no benefit. August 3015 Subscriber Item.", "eyewear": "Eyewear", diff --git a/common/locales/ro/generic.json b/common/locales/ro/generic.json index eb0478b3e1..e634284f55 100644 --- a/common/locales/ro/generic.json +++ b/common/locales/ro/generic.json @@ -28,7 +28,7 @@ "market": "Piață", "subscriberItem": "Obiect Misterios", "newSubscriberItem": "Obiect Misterios Nou", - "subscriberItemText": "În fiecare lună, abonații vor primi un obiect misterios. Acesta este de obicei disponibil cu o săptămână înainte de sfârșitul lunii. Vezi pagina wiki 'Obiect misterios' pentru data exactă.", + "subscriberItemText": "Each month, subscribers will receive a mystery item. This is usually released about one week before the end of the month. See the wiki's 'Mystery Item' page for more information.", "all": "Toate", "none": "Niciunul", "or": "Sau", @@ -69,8 +69,9 @@ "habiticaDayPluralText": "Celebrated <%= number %> Naming Days! Thanks for being a fantastic user.", "achievementDilatory": "Salvatorul de la amânare", "achievementDilatoryText": "A ajutat la înfrângerea înfiorătorului Drag'on al Amânării în timpul evenimentului stropirii din vara lui 2014", - "costumeContest": "2014 Costume Contest", - "costumeContestText": "Participated in the 2014 Halloween Costume Contest. See some of the entries at blog.habitica.com/tagged/cosplay!", + "costumeContest": "Costume Contestant", + "costumeContestText": "Participated in the Habitoween Costume Contest. See some of the entries on the Habitica blog!", + "costumeContestTextPlural": "Participated in <%= number %> Habitoween Costume Contests. See some of the entries on the Habitica blog!", "memberSince": "- Membru din", "lastLoggedIn": "- S-a autentificat ultima oară pe", "notPorted": "Această facilitate nu a fost încă preluată de la situl original.", @@ -79,6 +80,7 @@ "errorUpCase": "EROARE:", "newPassSent": "Parola nouă a fost trimisă.", "serverUnreach": "Momentan, serverul nu poate fi contactat.", + "requestError": "Yikes, an error occurred! Please reload the page, your last action may not have been saved correctly.", "seeConsole": "If the error persists, please report it at Help > Report a Bug. If you're familiar with your browser's console, please include any error messages.", "error": "Eroare", "menu": "Meniu", @@ -133,5 +135,17 @@ "thankyou2": "Sending you a thousand thanks.", "thankyou3": "I'm very grateful - thank you!", "thankyouCardAchievementTitle": "Greatly Grateful", - "thankyouCardAchievementText": "Thanks for being thankful! Sent or received <%= cards %> Thank-You cards." + "thankyouCardAchievementText": "Thanks for being thankful! Sent or received <%= cards %> Thank-You cards.", + "streakAchievement": "You earned a streak achievement!", + "firstStreakAchievement": "21-Day Streak", + "streakAchievementCount": "<%= streaks %> 21-Day Streaks", + "twentyOneDays": "You've completed your Daily for 21 days in a row!", + "dontBreakStreak": "Amazing job. Don't break the streak!", + "dontStop": "Don't Stop Now!", + "levelUpShare": "I leveled up in Habitica by improving my real-life habits!", + "questUnlockShare": "I unlocked a new quest in Habitica!", + "hatchPetShare": "I hatched a new pet by completing my real-life tasks!", + "raisePetShare": "I raised a pet into a mount by completing my real-life tasks!", + "wonChallengeShare": "I won a challenge in Habitica!", + "achievementShare": "I earned a new achievement in Habitica!" } \ No newline at end of file diff --git a/common/locales/ro/groups.json b/common/locales/ro/groups.json index 05688a405c..143b6e1764 100644 --- a/common/locales/ro/groups.json +++ b/common/locales/ro/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "Părăsește hanul", "innCheckIn": "Odihnește-te la han", "innText": "You're resting in the Inn! While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day. Be warned: If you are participating in a Boss Quest, the Boss will still damage you for your party mates' missed Dailies unless they are also in the Inn! Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn.", + "innTextBroken": "You're resting in the Inn, I guess... While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day... If you are participating in a Boss Quest, the Boss will still damage you for your party mates' missed Dailies... unless they are also in the Inn... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn... so tired...", "lfgPosts": "Discuții despre grupuri (căutarea de echipe)", "tutorial": "Ghid", "glossary": "Glosar", @@ -145,5 +146,6 @@ "partyEmpty": "You're the only one in your party. Invite your friends!", "partyChatEmpty": "Your party chat is empty! Type a message in the box above to start chatting.", "guildChatEmpty": "This guild's chat is empty! Type a message in the box above to start chatting.", - "possessiveParty": "<%= name %>'s Party" + "possessiveParty": "<%= name %>'s Party", + "requestAcceptGuidelines": "If you would like to post messages in the Tavern or any party or guild chat, please first read our <%= linkStart %>Community Guidelines<%= linkEnd %> and then click the button below to indicate that you accept them." } \ No newline at end of file diff --git a/common/locales/ro/limited.json b/common/locales/ro/limited.json index 18cfceeb58..dceb74245e 100644 --- a/common/locales/ro/limited.json +++ b/common/locales/ro/limited.json @@ -21,6 +21,7 @@ "valentineCardAchievementText": "Aww, you and your friend must really care about each other! Sent or received <%= cards %> Valentine's Day cards.", "polarBear": "Urs polar", "turkey": "Curcan", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "Pui de urs polar", "jackolantern": "Dovleac de Halloween", "seasonalShop": "Seasonal Shop", @@ -30,6 +31,7 @@ "seasonalShopText": "Welcome to the Seasonal Shop!! We're stocking springtime Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Spring Fling event each year, but we're only open until April 30th, so be sure to stock up now, or you'll have to wait a year to buy these items again!", "seasonalShopSummerText": "Welcome to the Seasonal Shop!! We're stocking summertime Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Summer Splash event each year, but we're only open until July 31st, so be sure to stock up now, or you'll have to wait a year to buy these items again!", "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31, so be sure to stock up now, or you'll have to wait a year to buy these items again!", + "seasonalShopFallTextBroken": "Oh.... Welcome to the Seasonal Shop... We're stocking autumn Seasonal Edition goodies, or something... Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31... I guess you should to stock up now, or you'll have to wait... and wait... and wait... *sigh*", "seasonalShopRebirth": "If you've used the Orb of Rebirth, you can repurchase this equipment in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.", "candycaneSet": "Candy Cane (Mage)", "skiSet": "Ski-sassin (Rogue)", diff --git a/common/locales/ro/messages.json b/common/locales/ro/messages.json index 1baf5bea2a..b1b1f57adf 100644 --- a/common/locales/ro/messages.json +++ b/common/locales/ro/messages.json @@ -1,11 +1,11 @@ { "messageLostItem": "Ți s-a stricat <%= itemText %>.", "messageTaskNotFound": "Țelul nu a fost găsit.", - "messageDuplicateTaskID": "A task with that ID already exists.", + "messageDuplicateTaskID": "Există deja o sarcină cu acel ID.", "messageTagNotFound": "Eticheta nu a fost găsită.", "messagePetNotFound": ":pet nu a fost găsit în user.items.pets", "messageFoodNotFound": ":food nu a fost găsit în user.items.food", - "messageNotAvailable": "This item is not currently available for purchase.", + "messageNotAvailable": "Acest articol nu poate fi cumpărat momentan.", "messageCannotFeedPet": "Nu poți hrăni acest companion.", "messageAlreadyMount": "Ai deja acest animal de călărit. Încearcă să hrănești alt companion.", "messageEvolve": "Ai îmblînzit <%= egg %>, hai să mergem la o plimbare!", @@ -15,7 +15,7 @@ "messageEquipped": "<%= itemText %> echipat.", "messageUnEquipped": "<%= itemText %> dezechipat.", "messageMissingEggPotion": "Îți lipsește ori oul ori poțiunea necesară", - "messageInvalidEggPotionCombo": "You can't hatch Quest Pet Eggs with Magic Hatching Potions! Try a different egg.", + "messageInvalidEggPotionCombo": "Nu poți ecloza ouă de companioni de expediție fără licori magice de eclozare! Încearcă un alt ou.", "messageAlreadyPet": "Deja ai acest companion. Încearcă o altă combinație pentru eclozare!", "messageHatched": "Oul tău a eclozat! Vizitează grajdul pentru a-ți lua noul companion.", "messageNotEnoughGold": "Nu ai destul aur", @@ -23,12 +23,33 @@ "messageDropFood": "Ai găsit <%= dropArticle %><%= dropText %>! <%= dropNotes %>", "messageDropEgg": "Ai găsit un Ou <%= dropText %>! <%= dropNotes %>", "messageDropPotion": "Ai găsit o poțiune de eclozare <%= dropText %>! <%= dropNotes %>", - "messageDropQuest": "You've found a quest!", - "messageDropMysteryItem": "You open the box and find <%= dropText %>!", + "messageDropQuest": "Ai găsit o expediție!", + "messageDropMysteryItem": "Deschizi cutia și găsești <%= dropText %>!", "messageFoundQuest": "Ai găsit aventura \"<%= questText %>\"!", - "messageAlreadyPurchasedGear": "You purchased this gear in the past, but do not currently own it. You can buy it again in the rewards column on the tasks page.", - "messageAlreadyOwnGear": "You already own this item. Equip it by going to the equipment page.", - "armoireEquipment": "<%= image %> You found a piece of rare Equipment in the Armoire: <%= dropText %>! Awesome!", - "armoireFood": "<%= image %> You rummage in the Armoire and find <%= dropArticle %><%= dropText %>. What's that doing in here?", - "armoireExp": "You wrestle with the Armoire and gain Experience. Take that!" + "messageAlreadyPurchasedGear": "Ai cumpărat acest echipament în trecut, dar momentan nu-l deții. Poți să-l cumperi din nou în coloana de răsplăți pe pagina cu sarcini.", + "messageAlreadyOwnGear": "Deja deții acest articol. Echipează-l la pagina de echipamente.", + "armoireEquipment": "<%= image %> Ai găsit o piesă rară de echipament în șifonier: <%= dropText %>! Grozav!", + "armoireFood": "<%= image %> Ai răscolit prin șifonier și ai găsit <%= dropArticle %><%= dropText %>. Ce caută asta aici?", + "armoireExp": "Te-ai luptat cu șifonierul și ai câștigat experiență. Na!", + "messageInsufficientGems": "Nu ai destule nestemate!", + "messageAuthPasswordMustMatch": ":password și :confirmPassword nu se potrivesc", + "messageAuthCredentialsRequired": "sunt necesare :username, :email, :password și :confirmPassword", + "messageAuthUsernameTaken": "Numele de utilizator este deja folosit", + "messageAuthEmailTaken": "E-mailul este deja folosit", + "messageAuthNoUserFound": "Niciun utilizator găsit", + "messageAuthMustBeLoggedIn": "Trebuie să fii autentificat.", + "messageAuthMustIncludeTokens": "Trebuie să incluzi un token și uid (ID utilizator) în cererea ta", + "messageGroupNotFound": "Grup negăsit sau nu ai acces.", + "messageGroupAlreadyInParty": "Ești deja într-o ceată, reîmprospătează pagina.", + "messageGroupOnlyLeaderCanUpdate": "Doar șeful de grup poate actualiza grupul!", + "messageGroupRequiresInvite": "Nu te poți alătura unui grup în care nu ești invitat.", + "messageGroupCannotRemoveSelf": "Nu te poți elimina singur!", + "messageGroupChatBlankMessage": "Nu poți trimite un mesaj gol", + "messageGroupChatLikeOwnMessage": "Nu-ți poți aprecia propriul mesaj. Nu fi acea persoană.", + "messageGroupChatFlagOwnMessage": "Nu-ți poți raporta propriul mesaj.", + "messageGroupChatFlagAlreadyReported": "Ai raportat deja acest mesaj.", + "messageGroupChatNotFound": "Mesajul nu a fost găsit!", + "messageGroupChatAdminClearFlagCount": "Doar un administrator poate curăța numărul de atenționări!", + "messageUserOperationProtected": "calea `<%= operation %>` nu a fost salvată pentru că este protejată", + "messageUserOperationNotFound": "nu a fost găsită operațiunea <%= operation %>" } \ No newline at end of file diff --git a/common/locales/ro/noscript.json b/common/locales/ro/noscript.json new file mode 100644 index 0000000000..542be1c7e0 --- /dev/null +++ b/common/locales/ro/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Vai! Se pare că browserul tău nu are JavaScript activat", + "jsDisabledHeadingFull": "Vai! Se pare că browserul tău nu are JavaScript activat și fără acesta Habitica nu poate funcționa corect", + "jsDisabledText": "Habitica nu poate afișa site-ul fără aceasta!", + "jsDisabledLink": "Te rugăm să activezi JavaScript pentru a continua!" +} \ No newline at end of file diff --git a/common/locales/ro/npc.json b/common/locales/ro/npc.json index df1a5f11d8..5c39ab7ffc 100644 --- a/common/locales/ro/npc.json +++ b/common/locales/ro/npc.json @@ -7,15 +7,19 @@ "daniel": "Daniel", "danielText": "Welcome to the Tavern! Stay a while and meet the locals. If you need to rest (vacation? illness?), I'll set you up at the Inn. While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off.", "danielText2": "Be warned: 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.", + "danielTextBroken": "Welcome to the Tavern... I guess... If you need to rest, I'll set you up at the Inn... While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off... if you have the energy...", + "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": "Negustorul Alexander", "welcomeMarket": "Bine ai venit la Piață! Cumpără ouă și poțiuni greu de găsit! Vinde ce n-ai nevoie! Apelează la servicii utile! Vino să vezi ce avem de oferit.", - "sellForGold": "Vinde <%= item %> pentru <%= gold %> Aur", - "sellEggForGold": "Sell <%= itemType %> Egg for <%= gold %> Gold", - "sellPotionForGold": "Sell <%= itemType %> Potion for <%= gold %> Gold", + "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?", + "sellForGold": "Sell it for <%= gold %> Gold", "buyGems": "Cumpără Nestemate", "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!", + "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...", "USD": "USD", "newStuff": "Chestii noi", "cool": "Amintește-mi mai târziu", diff --git a/common/locales/ro/pets.json b/common/locales/ro/pets.json index f788bb2456..c7b2e3b966 100644 --- a/common/locales/ro/pets.json +++ b/common/locales/ro/pets.json @@ -58,8 +58,16 @@ "firstDrop": "You've unlocked the Drop System! Now when you complete tasks, you have a small chance of finding an item, including eggs, potions, and food! You just found a <%= eggText %> Egg! <%= eggNotes %>", "useGems": "If you've got your eye on a pet, but can't wait any longer for it to drop, use Gems in Inventory > Market to buy one!", "hatchAPot": "Eclozezi <%= potion %> <%= egg %> ?", + "hatchedPet": "You hatched a <%= potion %> <%= egg %>!", + "displayNow": "Display Now", + "displayLater": "Display Later", + "earnedCompanion": "With all your productivity, you've earned a new companion. Feed it to make it grow!", "feedPet": "Hrănești <%= name %> cu <%= article %><%= text %>?", "useSaddle": "Înșeuezi <%= pet %>?", + "raisedPet": "You grew a <%= pet %>!", + "earnedSteed": "By completing your tasks, you've earned a faithful steed!", + "rideNow": "Ride Now", + "rideLater": "Ride Later", "petName": "<%= egg %> <%= potion %>", "mountName": "<%= mount %> <%= potion %>", "petKeyName": "Cheia Adăposturilor", diff --git a/common/locales/ro/quests.json b/common/locales/ro/quests.json index bee9a44f94..39f3f53867 100644 --- a/common/locales/ro/quests.json +++ b/common/locales/ro/quests.json @@ -13,6 +13,7 @@ "youReceived": "Ai primit", "dropQuestCongrats": "Congratulations on earning this quest scroll! You can invite your party to begin the quest now, or come back to it any time in your Inventory > Quests.", "questSend": "Clicking \"Invite\" will send an invitation to your party members. When all members have accepted or denied, the quest begins. See status under Social > Party.", + "questSendBroken": "Clicking \"Invite\" will send an invitation to your party members... When all members have accepted or denied, the quest begins... See status under Social > Party...", "inviteParty": "Invite Party to Quest", "questInvitation": "Invitație la Aventuri:", "questInvitationTitle": "Quest Invitation", @@ -24,6 +25,7 @@ "rejected": "Refuzat", "pending": "În așteptare", "questStart": "Once all members have either accepted or rejected, the quest begins. Only those that clicked \"accept\" will be able to participate in the quest and receive the drops. If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\". The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\".", + "questStartBroken": "Once all members have either accepted or rejected, the quest begins... Only those that clicked \"accept\" will be able to participate in the quest and receive the drops... If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\"... The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\"...", "begin": "Începe", "bossHP": "Sănătatea Monstrului", "bossStrength": "Boss Strength", @@ -34,9 +36,14 @@ "itemsToCollect": "Items to Collect", "bossDmg1": "Each completed Daily and To-Do and each positive Habit hurts the boss. Hurt it more with redder tasks or Brutal Smash and Burst of Flames. The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies! All damage to and from a boss is tallied on cron (your day roll-over).", "bossDmg2": "Doar participanții se vor lupta cu monstrul și vor împărți prada aventurii.", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "Each completed Daily and To-Do and each positive Habit hurts the boss... Hurt it more with redder tasks or Brutal Smash and Burst of Flames... The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies... All damage to and from a boss is tallied on cron (your day roll-over)...", + "bossDmg2Broken": "Only participants will fight the boss and share in the quest loot...", + "tavernBossInfo": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "tavernBossInfoBroken": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss... Incomplete Dailies fill the Exhaust Strike Bar... When the Exhaust Strike bar is full, the World Boss will attack an NPC... A World Boss will never damage individual players or accounts in any way... Only active accounts not resting in the Inn will have their tasks tallied...", "bossColl1": "Pentru a aduna obiecte, îndeplinește țeluri pozitive. Obiectele specifice aventurii apar la fel ca obiectele obișnuite; totuși, nu le vei vedea decât a doua zi, atunci tot ce vei fi adunat va fi socotit și adăugat grămezii.", "bossColl2": "Doar participanții pot aduna obiecte și împărți prada aventurii.", + "bossColl1Broken": "To collect items, do your positive tasks... Quest items drop just like normal items; however, you won't see the drops until the next day, then everything you've found will be tallied up and contributed to the pile...", + "bossColl2Broken": "Only participants can collect items and share in the quest loot...", "abort": "Abandon", "leaveQuest": "Leave Quest", "sureLeave": "Are you sure you want to leave the active quest? All your quest progress will be lost.", @@ -63,10 +70,13 @@ "sureAbort": "Ești sigur că vrei să abandonezi această misiune? Ea va fi abandonată pentru toți din echipa ta și tot progresul va fi pierdut.", "doubleSureAbort": "Ești sigur sigur ? Asigură-te că nu te vor urî pentru totdeauna!", "questWarning": "Dacă jucători noi se înscriu în echipă înainte ca aventura să pornească, aceștia vor primi și ei o invitație. Dacă totuși aventura a început deja, niciun nou jucător nu se poate alătura acesteia.", + "questWarningBroken": "If new players join the party before the quest starts, they will also receive an invitation... However once the quest has started, no new party members can join the quest...", "bossRageTitle": "Furie", "bossRageDescription": "When this bar fills, the boss will unleash a special attack!", "startAQuest": "START A QUEST", "startQuest": "Start Quest", "whichQuestStart": "Which quest do you want to start?", - "getMoreQuests": "Get more quests" + "getMoreQuests": "Get more quests", + "unlockedAQuest": "You unlocked a quest!", + "leveledUpReceivedQuest": "You leveled up to Level <%= level %> and received a quest scroll!" } \ No newline at end of file diff --git a/common/locales/ro/questscontent.json b/common/locales/ro/questscontent.json index cd5cfa9cc1..30f95d4d98 100644 --- a/common/locales/ro/questscontent.json +++ b/common/locales/ro/questscontent.json @@ -261,5 +261,17 @@ "questBurnoutDropPhoenixMount": "Phoenix (Mount)", "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!", + "questFrogText": "Swamp of the Clutter Frog", + "questFrogNotes": "As you and your friends are slogging through the Swamps of Stagnation, @starsystemic points at a large sign. \"Stay on the path -- if you can.\"

\"Surely that isn't hard!\" @RosemonkeyCT says. \"It's broad and clear.\"

But as you continue, you notice that path is gradually overtaken by the muck of the swamp, laced with bits of strange blue debris and clutter, until it's impossible to proceed.

As you look around, wondering how it got this messy, @Jon Arjinborn shouts, \"Look out!\" An angry frog leaps from the sludge, clad in dirty laundry and lit by blue fire. You will have to overcome this poisonous Clutter Frog to progress!", + "questFrogCompletion": "The frog cowers back into the muck, defeated. As it slinks away, the blue slime fades, leaving the way ahead clear.

Sitting in the middle of the path are three pristine eggs. \"You can even see the tiny tadpoles and through the clear casing!\" @Breadstrings says. \"Here, you should take them.\"", + "questFrogBoss": "Clutter Frog", + "questFrogDropFrogEgg": "Frog (Egg)", + "questFrogUnlockText": "Unlocks purchasable Frog eggs in the Market", + "questSnakeText": "The Serpent of Distraction", + "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveler astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", + "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", + "questSnakeBoss": "Serpent of Distraction", + "questSnakeDropSnakeEgg": "Snake (Egg)", + "questSnakeUnlockText": "Unlocks purchasable Snake eggs in the Market" } \ No newline at end of file diff --git a/common/locales/ro/rebirth.json b/common/locales/ro/rebirth.json index ce1ed52972..a4d11a2a03 100644 --- a/common/locales/ro/rebirth.json +++ b/common/locales/ro/rebirth.json @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "Vei primi de asemenea o Realizare pentru începerea unei noi aventuri!", "beReborn": "Renaște-te", "rebirthAchievement": "Ai început o aventură nouă! Asta este Renașterea cu numărul <%= number %> pentru tine, iar cel mai înalt Nivel pe care l-ai atins este <%= level %>. Pentru a primi această Realizare din nou, începe-ți următoarea aventură când ai atins un Nivel și mai înalt!", + "rebirthAchievement100": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is 100 or higher. To stack this Achievement, begin your next new adventure when you've reached at least 100!", "rebirthBegan": "Începe un nou joc", "rebirthText": "A început <%= rebirths %> Aventuri Noi", "rebirthOrb": "A folosit un Glob al Renașterii pentru a o lua de la început după ce a atins Nivelul", + "rebirthOrb100": "Used an Orb of Rebirth to start over after attaining Level 100 or higher", "rebirthPop": "Începe un nou personaj la Nivelul 1 păstrând realizările, obiectele de colecție și țelurile cu istoric.", "rebirthName": "Globul Renașterii", "reborn": "Renăscut, nivel maxim <%= reLevel %>" diff --git a/common/locales/ro/settings.json b/common/locales/ro/settings.json index 6660d72945..13b8cf0bfa 100644 --- a/common/locales/ro/settings.json +++ b/common/locales/ro/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "Cu această opțiune activată, lista de etichete a unui țel va fi ascunsă atunci când deschizi o sarcină pentru modificare.", "startAdvCollapsed": "Opțiunile avansate ale țelurilor sunt ascunse", "startAdvCollapsedPop": "Cu această opțiune activată, Opțiunile Avansate vor fi ascunse atunci când deschizi pentru prima oară un țel pentru modificare.", + "dontShowAgain": "Don't show this again", + "suppressLevelUpModal": "Don't show popup when gaining a level", + "suppressHatchPetModal": "Don't show popup when hatching a pet", + "suppressRaisePetModal": "Don't show popup when raising a pet into a mount", + "suppressStreakModal": "Don't show popup when attaining a Streak achievement", "showTour": "Arată Tur de prezentare", "restartTour": "Repornește turul introductiv prezentat când ai intrat prima oară în Habitica.", "showBailey": "Arat-o pe Bailey", @@ -81,7 +86,6 @@ "emailChange1": "To change your email address, please send an email to", "emailChange2": "admin@habitica.com", "emailChange3": "including both your old and new email address as well as your User ID.", - "username": "Login Name", "usernameOrEmail": "Login Name or Email", "email": "Email", "registeredWithFb": "Registered with Facebook", @@ -89,7 +93,7 @@ "loginNameDescription2": "User->Profile", "loginNameDescription3": "to change the name that appears in your avatar and chat messages.", "emailNotifications": "Email Notifications", - "wonChallenge": "You Won a Challenge", + "wonChallenge": "You won a Challenge!", "newPM": "Received Private Message", "giftedGems": "Gifted Gems", "giftedGemsInfo": "<%= amount %> Gems - by <%= name %>", @@ -118,5 +122,29 @@ "promoCode": "Promo Code", "promoCodeApplied": "Promo Code Applied! Check your inventory", "promoPlaceholder": "Enter Promotion Code", - "displayInviteToPartyWhenPartyIs1": "Display Invite To Party button when party has 1 member." + "displayInviteToPartyWhenPartyIs1": "Display Invite To Party button when party has 1 member.", + "saveCustomDayStart": "Save Custom Day Start", + "registration": "Registration", + "addLocalAuth": "Add local authentication:", + "generateCodes": "Generate Codes", + "generate": "Generate", + "getCodes": "Get Codes", + "webhooks": "Webhooks", + "enabled": "Enabled", + "webhookURL": "Webhook URL", + "add": "Add", + "buyGemsGoldCap": "Cap raised to <%= amount %>", + "mysticHourglass": "<%= amount %> Mystic Hourglass", + "mysticHourglassText": "Mystic Hourglasses allow purchasing a previous month's Mystery Item set.", + "purchasedPlanId": "Recurring $<%= price %> each <%= months %> Month(s) (<%= plan %>)", + "purchasedPlanExtraMonths": "You have <%= months %> months of subscription credit.", + "consecutiveSubscription": "Consecutive Subscription", + "consecutiveMonths": "Consecutive Months:", + "gemCapExtra": "Gem Cap Extra:", + "mysticHourglasses": "Mystic Hourglasses:", + "paypal": "PayPal", + "amazonPayments": "Amazon Payments", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/ro/subscriber.json b/common/locales/ro/subscriber.json index 2c6475821d..78023499c0 100644 --- a/common/locales/ro/subscriber.json +++ b/common/locales/ro/subscriber.json @@ -1,20 +1,20 @@ { "subscription": "Abonament", "subscriptions": "Abonamente", - "subDescription": "Buy gems with gold, get monthly mystery items, retain progress history, double daily drop-caps, support the devs. Click for more info.", + "subDescription": "Cumpără nestemate cu aur, obține articole misterioase în fiecare lună, păstrează istoricul progresului, dublează limitele zilnice de picări, sprijină dezvoltatorii. Clic pentru mai multe informații.", "buyGemsGold": "Cumpără Nestemate cu Aur", - "buyGemsGoldText": "Alexander the Merchant will sell you gems at a cost of <%= gemCost %> gold per gem. His monthly shipments are initially capped at <%= gemLimit %> gems per month, but this cap increases by 5 gems for every three months of consecutive subscription, up to a maximum of 50 gems per month!", + "buyGemsGoldText": "Alexandru Negustoru îți va vinde nestematele la un preț de <%= gemCost %> aur pe nestemată. Livrările sale lunare sunt limitate inițial la <%= gemLimit %> nestemate pe lună, dar această limită crește cu câte 5 nestemate la fiecare trei luni de abonament consecuriv, până la un maxim de 50 de nestemate pe lună!", "retainHistory": "Reține tot istoricul", "retainHistoryText": "Face tot istoricul disponibil în grafice sau pentru export. Istoricul celor care nu sunt abonați este arhivat pentru optimizarea bazei de date.", "doubleDrops": "Limita maximă de obiecte câștigate este dublată", "doubleDropsText": "Umpleți grajdul mai repede!", "mysteryItem": "Obiecte unice pentru abonați lunar", - "mysteryItemText": "Each month you will receive a unique cosmetic item for your avatar! Plus, for every three months of consecutive subscription, the Mysterious Time Travelers will grant you access to historic (and futuristic!) cosmetic items.", - "supportDevs": "Susțineți dezvoltatorii", - "supportDevsText": "Your subscription helps keep Habitica thriving and helps fund the development of new features. Thank you for your generosity!", + "mysteryItemText": "În fiecare lună vei primi un articol unic cu rol cosmetic pentru avatarul tău! În plus, odată la fiecare trei luni de abonament consecutiv, misterioșii călători în timp îți vor acorda acces la articole cosmetice istorice (și futuriste!).", + "supportDevs": "Susține dezvoltatorii", + "supportDevsText": "Abonamentul tău permite Habiticei să prospere și ajută la dezvoltarea noilor funcționalități. Mulțumim pentru generozitate!", "monthUSD": "USD / Lună", "organization": "Organizație", - "groupPlans": "Corporate Plans", + "groupPlans": "Planuri corporatiste", "indivPlan1": "Habitica este gratuit pentru persoane fizice. Chiar și pentru grupuri mici, gratuit (sau ieftin)", "indivPlan2": "poate fi folosit pentru a motiva participanții în modificarea comportamentului. De exemplu cercuri literare de creație, provocări artistice și altele.", "groupText1": "Dar unii lideri de grup vor dori mai mult control, confidențialitate, securitate și asistență. Exemple de astfel de grupuri sunt: familii, grupuri de îngrijirea sănătății, grupuri de angajați și altele. Aceste abonamente furnizează copii private Habitica pentru grupul sau organizația dumneavoastră, sigure și independente de", @@ -27,7 +27,7 @@ "subscribe": "Abonare", "subscribed": "Abonat", "manageSub": "Apasă ca să gestionezi abonamentul", - "cancelSub": "Anulare abonament", + "cancelSub": "Anulează abonamentul", "adminSub": "Abonamente de administrator", "morePlans": "Mai multe abonamente
În curând", "organizationSub": "Organizație privată", @@ -59,21 +59,21 @@ "timeTravelers": "Călători în timp", "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> și <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitle": "Misterioși călători în timp", - "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.", - "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 <%= linkStart %>here<%= linkEnd %>! 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!", + "timeTravelersPopoverNoSub": "Vei avea nevoie de o clepsidră mistică pentru a invoca pe misterioșii călători în timp! <%= linkStart %>Abonații<%= linkEnd %> câștigă câte o clepsidră mistică la fiecare trei luni de abonament consecutiv. Revino când ai o clepsidră mistică și călătorii în timp îți vor aduce un companion rar, bidiviu sau set de articole pentru abonați din trecut... sau poate chiar din viitor.", + "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": "Felicitări! Deja deții tot ce este oferit de călătorii în timp. Mulțumim că susții site-ul!", + "mysticHourglassPopover": "O clepsidră mistică îți permite să cumperi anumite articole disponibile o perioadă limitată, cum ar fi seturi misterioase de articole disponibile lunar și premii de la căpcăunii șef din trecut!", "subUpdateCard": "Update Card", "subUpdateTitle": "Update", "subUpdateDescription": "Update the card to be charged.", - "notEnoughHourglasses": "You don't have enough Mystic Hourglasses.", - "hourglassBuyEquipSetConfirm": "Buy this full set of items for 1 Mystic Hourglass?", - "hourglassBuyItemConfirm": "Buy this item for 1 Mystic Hourglass?", - "petsAlreadyOwned": "Pet already owned.", - "mountsAlreadyOwned": "Mount already owned.", - "typeNotAllowedHourglass": "Item type not supported for purchase with Mystic Hourglass. Allowed types:", - "petsNotAllowedHourglass": "Pet not available for purchase with Mystic Hourglass.", - "mountsNotAllowedHourglass": "Mount not available for purchase with Mystic Hourglass.", - "hourglassPurchase": "Purchased an item using a Mystic Hourglass!", - "hourglassPurchaseSet": "Purchased an item set using a Mystic Hourglass!" + "notEnoughHourglasses": "Nu ai destule clepsidre mistice.", + "hourglassBuyEquipSetConfirm": "Cumpără acest set complet de articole pentru 1 clepsidră mistică?", + "hourglassBuyItemConfirm": "Cumperi acest articol pentru 1 clepsidră mistică?", + "petsAlreadyOwned": "Companionul este deja deținut.", + "mountsAlreadyOwned": "Bidiviul este deja deținut.", + "typeNotAllowedHourglass": "Tipul de articol nu poate fi cumpărat cu clepsidra mistică. Tipurile permise:", + "petsNotAllowedHourglass": "Companionul nu poate fi cumpărat cu clepsidra mistică.", + "mountsNotAllowedHourglass": "Bidiviul nu poate fi cumpărat cu clepsidra mistică.", + "hourglassPurchase": "Ai cumpărat un articol cu clepsidra mistică!", + "hourglassPurchaseSet": "Ai cumpărat un set de articole cu clepsidra mistică!" } \ No newline at end of file diff --git a/common/locales/ro/tasks.json b/common/locales/ro/tasks.json index 303c4fabb6..542d58bf67 100644 --- a/common/locales/ro/tasks.json +++ b/common/locales/ro/tasks.json @@ -88,8 +88,7 @@ "fortifyText": "Fortify will return all your tasks to a neutral (yellow) state, as if you'd just added them, and top your Health off to full. This is great if all your red tasks are making the game too hard, or all your blue tasks are making the game too easy. If starting fresh sounds much more motivating, spend the Gems and catch a reprieve!", "sureDelete": "Ești sigur că vrei să ștergi acest țel?", "streakCoins": "Bonus de realizare în șir!", - "pushTaskToTop": "Urcă sarcina în vârf", - "pushTaskToBottom": "Trimite sarcina la coadă.", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "Enter the task's title first.", "dailiesRestingInInn": "You're Resting in the Inn! Your Dailies will NOT hurt you tonight, but they WILL still refresh every day. If you're in a quest, you won't deal damage/collect items until you check out of the Inn, but you can still be injured by a Boss if your Party mates skip their own Dailies.", "habitHelp1": "Good Habits are things that you do often. They award Gold and Experience every time you click the <%= plusIcon %>.", diff --git a/common/locales/ru/backgrounds.json b/common/locales/ru/backgrounds.json index a47a975f67..1496f557c2 100644 --- a/common/locales/ru/backgrounds.json +++ b/common/locales/ru/backgrounds.json @@ -108,15 +108,29 @@ "backgrounds092015": "Набор 16: Выпущен в сентябре 2015", "backgroundMarketText": "Рынок Habitica", "backgroundMarketNotes": "Покупайте на рынке Habitica", - "backgroundStableText": "Стайня Habitica", - "backgroundStableNotes": "Заботьтесь о скакунах в стайне Habitica.", + "backgroundStableText": "Стойла Habitica", + "backgroundStableNotes": "Заботьтесь о скакунах в стойлах Habitica.", "backgroundTavernText": "Таверна Habitica", "backgroundTavernNotes": "Посетите таверну Habitica.", - "backgrounds102015": "SET 17: Released October 2015", - "backgroundHarvestMoonText": "Harvest Moon", - "backgroundHarvestMoonNotes": "Cackle under the Harvest Moon.", - "backgroundSlimySwampText": "Slimy Swamp", - "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", - "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgrounds102015": "Набор 17: Выпущен в октябре 2015", + "backgroundHarvestMoonText": "Полнолуние перед осенним равноденствием", + "backgroundHarvestMoonNotes": "Зловеще похихикайте на фоне полнолуния перед осенним равноденствием!", + "backgroundSlimySwampText": "Склизкое болото", + "backgroundSlimySwampNotes": "Проберитесь сквозь склизкое болото.", + "backgroundSwarmingDarknessText": "Кромешная тьма", + "backgroundSwarmingDarknessNotes": "Тряситесь от страха в кромешной тьме!", + "backgrounds112015": "Набор 18: Выпущен в ноябре 2015", + "backgroundFloatingIslandsText": "Парящие Острова", + "backgroundFloatingIslandsNotes": "Скачите по Парящим Островам.", + "backgroundNightDunesText": "Ночные Дюны", + "backgroundNightDunesNotes": "Тихо прогуляйтесь сквозь Ночные Дюны.", + "backgroundSunsetOasisText": "Закатный Оазис", + "backgroundSunsetOasisNotes": "Насладитесь Закатным Оазисом.", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/ru/challenge.json b/common/locales/ru/challenge.json index 039d12ae17..0d9e22bfde 100644 --- a/common/locales/ru/challenge.json +++ b/common/locales/ru/challenge.json @@ -43,7 +43,7 @@ "exportChallengeCSV": "Экспорт в CSV", "selectGroup": "Пожалуйста, выберите группу", "challengeCreated": "Испытание создано", - "sureDelCha": "Вы действительно хотите удалить это испытание?", + "sureDelCha": "Вы точно хотите удалить это испытание?", "sureDelChaTavern": "Вы уверены, что хотите удалить это испытание? Ваши самоцветы не будут возмещены.", "removeTasks": "Удалить задания", "keepTasks": "Оставить задания", @@ -59,5 +59,9 @@ "challengeNotEnoughGems": "У вас недостаточно самоцветов, чтобы разместить это испытание.", "noPermissionEditChallenge": "У вас нет прав на редактирование этого испытания.", "noPermissionDeleteChallenge": "У вас нет прав на удаление этого испытания.", - "noPermissionCloseChallenge": "У вас нет прав на закрытие этого испытания." + "noPermissionCloseChallenge": "У вас нет прав на закрытие этого испытания.", + "congratulations": "Поздравляю!", + "hurray": "Ура!", + "noChallengeOwner": "нет владельца", + "noChallengeOwnerPopover": "Это испытание не имеет владельца, потому что игрок, который его создал, удалил свой аккаунт." } \ No newline at end of file diff --git a/common/locales/ru/character.json b/common/locales/ru/character.json index 423c0f0c17..f4c948010e 100644 --- a/common/locales/ru/character.json +++ b/common/locales/ru/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "Бонус класса", "battleGear": "Боевая экипировка", "battleGearText": "Это ваша экипировка для сражений, она влияет на игровые результаты от взаимодействия с задачами.", + "autoEquipBattleGear": "Самонадевание нового снаряжения", "costume": "Костюм", "costumeText": "Если внешний вид какой-либо экипировки вам нравится больше, чем надетой сейчас, можете отметить «Использовать костюм» для того, чтобы визуально предстать в желаемом костюме поверх боевой экипировки.", "useCostume": "Использовать костюм", @@ -64,6 +65,10 @@ "ultimGearText": "Полностью усовершенствовал(а) оружие и комплект доспехов для следующих классов:", "level": "Уровень", "levelUp": "Новый уровень!", + "gainedLevel": "Вы получили уровень!", + "leveledUp": "За выполнение ваших жизненных целей вы выросли до <%= level %> уровня!", + "fullyHealed": "Вы полностью исцелены!", + "huzzah": "Ура!", "mana": "Мана", "hp": "здоровья", "mp": "М", diff --git a/common/locales/ru/content.json b/common/locales/ru/content.json index 175715c85c..b59573a47f 100644 --- a/common/locales/ru/content.json +++ b/common/locales/ru/content.json @@ -1,8 +1,8 @@ { "potionText": "Эликсир здоровья", "potionNotes": "Восстанавливает 15 здоровья (мгновенно)", - "armoireText": "Волшебный сундук", - "armoireNotesFull": "Откройте сундук, чтобы случайным образом получить особое снаряжение, опыт или еду! Осталось снаряжения:", + "armoireText": "Зачарованная Кладовая", + "armoireNotesFull": "Откройте Кладовую, чтобы случайным образом получить особое Снаряжение, Опыт или еду! Осталось снаряжения:", "armoireLastItem": "Вы получили последний редкий предмет из волшебного сундука.", "armoireNotesEmpty": "Новое снаряжение будет появляться в сундуке в начале каждого месяца. А пока что продолжайте кликать ради опыта и еды!", "dropEggWolfText": "Волк", @@ -95,6 +95,12 @@ "questEggHorseText": "Конь", "questEggHorseMountText": "Конь", "questEggHorseAdjective": "быстрый", + "questEggFrogText": "Лягушонок", + "questEggFrogMountText": "Лягушонок", + "questEggFrogAdjective": "царственный", + "questEggSnakeText": "Змея", + "questEggSnakeMountText": "Змея", + "questEggSnakeAdjective": "скользкая", "eggNotes": "Найдите инкубационный эликсир, чтобы полить им это яйцо, и из него вылупится <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "Обыкновенный", "hatchingPotionWhite": "Белый", diff --git a/common/locales/ru/faq.json b/common/locales/ru/faq.json index 15b1bf1a8e..2c3a01bfbf 100644 --- a/common/locales/ru/faq.json +++ b/common/locales/ru/faq.json @@ -2,7 +2,7 @@ "frequentlyAskedQuestions": "Часто задаваемые вопросы", "faqQuestion0": "Я не могу разобраться. Где можно прочитать, что к чему?", "iosFaqAnswer0": "Первым делом добавьте задания, которые вы хотели бы выполнять в своей жизни каждый день. Затем, когда вы будете выполнять эти задания в реальной жизни и отмечать их выполнение, вы будете получать очки опыта и золотые монеты. Золото используется для приобретения снаряжения и некоторых предметов, а также создаваемых игроком наград. Опыт необходим для повышения уровня вашего персонажа, что влечёт за собой постепенное открытие таких возможностей как выращивание питомцев, использование навыков или выполнение квестов. Вы можете настроить внешний вид вашего персонажа через Меню > Персонализировать аватар.\n\nВот пара простых способов обращения с программой: нажмите на (+) в правом верхнем углу, чтобы добавить новое задание. Нажмите на существующее задание, чтобы включить режим редактирования, или проведите по заданию пальцем влево, чтобы удалить его. Вы можете навести порядок в заданиях, используя теги, расположенные в левом верхнем углу. Также вы можете разворачивать и сворачивать вложенные списки нажатием на соответствующую иконку с пузырьком.", - "webFaqAnswer0": "Первым делом добавьте задания, которые вы хотели бы выполнять в своей жизни каждый день. Затем, когда вы будете выполнять эти задания в реальной жизни и отмечать их выполнение, вы будете получать очки опыта и золотые монеты. Золото используется для приобретения снаряжения и некоторых предметов, а также создаваемых игроком наград. Опыт необходим для повышения уровня вашего персонажа, что влечёт за собой постепенное открытие таких возможностей как выращивание питомцев, использование навыков или выполнение квестов. Если вам нужно больше информации, на Вики есть отличное руководство по игре, где всё подробно описано шаг за шагом. Чтобы ознакомиться с ним, перейдите по [этой ссылке](http://habitica.wikia.com/wiki/Habitica_Wiki).", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", "faqQuestion1": "Как правильно создавать задания?", "iosFaqAnswer1": "Хорошие привычки (отмеченные знаком +) — это задания, которые вы можете выполнять много раз в день: например, употребление в пищу овощей. Плохие привычки (отмеченные знаком -) — это те действия, от которых вам стоит отказаться: например, грызть ногти. Привычки, напротив которых стоит и плюс, и минус, предполагают двойственный выбор — либо в хорошую, либо в плохую сторону: например, восхождение по лестнице пешком против использования лифта. Хорошие привычки приносят опыт и золото, а плохие привычки уменьшают здоровье.\n\nЕжедневные задания — задания, которые необходимо выполнять каждый день: например, чистить зубы или проверять электронную почту. Чтобы указать дни, в которые ежедневное задание обязательно или не обязательно для выполнения, просто нажмите на него для редактирования. Если вы пропустите обязательное задание, ваш персонаж получит урон следующей ночью. Будьте осторожны и не добавляйте слишком много ежедневных заданий сразу!\n\nЗадачи — это список одноразовых дел, которые вам необходимо выполнить. Вы никогда не потеряете здоровье от невыполнения задач. Вы можете указать обязательный срок для выполнения задачи, нажав на неё для редактирования.", "webFaqAnswer1": "Хорошие привычки (отмеченные знаком ) — это задания, которые вы можете выполнять много раз в день: например, употребление в пищу овощей. Плохие привычки (отмеченные знаком ) — это те действия, от которых вам стоит отказаться: например, грызть ногти. Привычки, напротив которых стоит и , и , предполагают двойственный выбор — либо в хорошую, либо в плохую сторону: например, восхождение по лестнице пешком против использования лифта. Хорошие привычки приносят опыт и золото, а плохие привычки уменьшают здоровье.\n\n

\n\nЕжедневные задания — задания, которые необходимо выполнять каждый день: например, чистить зубы или проверять электронную почту. Чтобы указать дни, в которые ежедневное задание обязательно или не обязательно для выполнения, просто нажмите на иконку карандаша для редактирования. Если вы пропустите обязательное задание, ваш персонаж получит урон следующей ночью. Будьте осторожны и не добавляйте слишком много ежедневных заданий сразу!\n\n

\n\nЗадачи — это список одноразовых дел, которые вам необходимо выполнить. Вы никогда не потеряете здоровье от невыполнения задач. Вы можете указать обязательный срок для выполнения задачи, кликнув по иконке карандаша для редактирования.", @@ -16,7 +16,7 @@ "iosFaqAnswer4": "Существует несколько причин, из-за которых вы можете получать урон. Во-первых, ночью вам наносят урон ежедневные задания, которые вы не выполнили. Во-вторых, если вы нажимаете на плохую привычку, она наносит вам урон. И, наконец, если вы сражаетесь против босса в команде, и один из ваших сопартийцев не выполнил все свои ежедневные задания, босс вас атакует.\n\nОсновным способ вылечиться является получение уровня, что влечёт за собой восстановление всей шкалы здоровья. Также вы можете купить за золото эликсир здоровья, который находится в столбце наград. Кроме того, начиная с 10 уровня, вы можете выбрать профессию целителя, и тогда вы получите доступ к навыкам, восстанавливающим здоровье. Если у вас в команде есть целитель, он также может вас излечить.", "webFaqAnswer4": "Существует несколько причин, из-за которых вы можете получать урон. Во-первых, ночью вам наносят урон ежедневные задания, которые вы не выполнили. Во-вторых, если вы кликаете по плохой привычке, она наносит вам урон. И, наконец, если вы сражаетесь против босса в команде, и один из ваших сопартийцев не выполнил все свои ежедневные задания, босс вас атакует.\n\nОсновным способ вылечиться является получение уровня, что влечёт за собой восстановление всей шкалы здоровья. Также вы можете купить за золото эликсир здоровья, который находится в столбце наград. Кроме того, начиная с 10 уровня, вы можете выбрать профессию целителя, и тогда вы получите доступ к навыкам, восстанавливающим здоровье. Если у вас в команде (в меню Общение > Команда) есть целитель, он также может вас излечить.", "faqQuestion5": "Как играть вместе с друзьями?", - "iosFaqAnswer5": "Лучший способ — пригласить их в вашу команду с помощью [веб-сайта](https://habitica.com/#/options/groups/party)! Вскоре мы добавим возможность создания команды в этом приложении, а пока что вы можете сделать это через [сайт](https://habitica.com/#/options/groups/party). Команды могут участвовать в квестах, сражаться с монстрами и накладывать заклинания для поддержки друг друга. На веб-сайте вы с друзьями также можете вступить в гильдии, которые представляют собой публичные комнаты чата. Гильдии будут добавлены в приложение в будущем обновлении!", + "iosFaqAnswer5": "Лучший способ это пригласить их к себе в Команду! Команды могут выполнять квесты, биться с монстрами и накладывать заклинания, чтобы поддерживать друг друга. Нажмите Меню > Команда и кликните \"Создать новую Команду\" если у вас её ещё нет. Затем нажмите на список членов, и нажмите Пригласить в верхнем правом углу, чтобы пригласить своих друзей, введя их User ID (строка букв и цифр, которую можно найти под Настройками > Аккаунт в мобильном приложении и в Настройках > API на сайте). На сайте, вы также можете пригласить друзей через почту, эту функцию мы добавим в мобильное приложение в будущих обновлениях.\n\nНа сайте, вы и ваши друзья также можете записаться в Гильдии, которые являются открытыми чатрумами. Гильдии будут добавлены в мобильное приложение в будущем обновлении!", "webFaqAnswer5": "Лучший способ — пригласить их в вашу команду с помощью меню Общение > Команда! Команды могут участвовать в квестах, сражаться с монстрами и накладывать заклинания для поддержки друг друга. Также вы вместе можете вступать в гильдии (Общение > Гильдии). Гильдии — это комнаты чата, где участники сконцентрированы на общих интересах или на преследовании общей цели. Вы можете вступать в неограниченное количество гильдий, но состоять только в одной команде.\n

\nБолее подробную информацию вы можете узнать на страницах вики, содержащих информацию о [командах](http://habitrpg.wikia.com/wiki/Party) и [гильдиях](http://habitrpg.wikia.com/wiki/Guilds).", "faqQuestion6": "Как получить питомца или скакуна?", "iosFaqAnswer6": "На третьем уровне вы откроете систему выпадения предметов. Каждый раз, когда вы выполняете задание, есть небольшой шанс на то, что вы получите яйцо, инкубацонный эликсир или еду. Всё это будет храниться в Меню > Инвентарь.\n\nЧтобы выходить питомца, вам понадобится яйцо и инкубационный эликсир. Нажмите на яйцо, чтобы выбрать вид питомца, а потом выберите «инкубировать яйцо». Затем выберите инкубационный эликсир, чтобы задать цвет питомца! Перейдите в Меню > Питомцы и нажмите на вашего нового питомца, чтобы поместить его рядом со своим аватаром.\n\nВы также можете выращивать ваших питомцев до скакунов, скармливая им еду в разделе Меню > Питомцы. Нажмите на питомца, затем выберите «покормить питомца»! Вам придётся кормить питомца много раз, прежде чем он станет скакуном, но если вам удастся вычислить его любимую еду, он будет расти быстрее. Можете придерживаться метода проб и ошибок или же сразу узнать, чем кормить питомца здесь: [спойлер](http://habitica.wikia.com/wiki/Food#Food_Preferences). Как только у вас появится скакун, вы можете перейти в Меню > Скакуны и нажать на него, чтобы ваш аватар его оседлал.\n\nТакже вы можете получить яйца квестовых питомцев в качестве награды за выполнение определённых квестов. (О квестах читайте ниже.)", @@ -28,14 +28,17 @@ "iosFaqAnswer8": "Синяя шкала, которая появилась после того, как вы достилги уровня 10 и выбрали класс — ваш индикатор маны. Продолжая получать уровни, вы начнёте открывать особые навыки, использование которых стоит определенное количество очков маны. У каждого класса свой набор навыков, который открывается после уровня 11 в Меню > Использовать навыки. В отличие от шкалы здоровья, мана не восстанавливается полностью, когда вы получаете уровень. Вместо этого мана растёт, когда вы выполняете хорошие привычки, ежедневные задания и задачи, и убывает, когда вы не отказываете себе в плохих привычках. Также вы восстанавливаете некоторое количество маны ночью — чем больше ежедневных заданий вы выполнили, тем больше маны восстановите за ночь.", "webFaqAnswer8": "Синяя шкала, которая появилась после того, как вы достилги уровня 10 и выбрали класс — ваш индикатор маны. Продолжая получать уровни, вы начнёте открывать особые навыки, использование которых стоит определенное количество очков маны. У каждого класса свой набор навыков, который появляется после уровня 11 в столбце с наградами. В отличие от шкалы здоровья, мана не восстанавливается полностью, когда вы получаете уровень. Вместо этого мана растёт, когда вы выполняете хорошие привычки, ежедневные задания и задачи, и убывает, когда вы не отказываете себе в плохих привычках. Также вы восстанавливаете некоторое количество маны ночью — чем больше ежедневных заданий вы выполнили, тем больше маны восстановите за ночь.", "faqQuestion9": "Как сражаться с монстрами и участвовать в квестах?", - "iosFaqAnswer9": "В первую очередь вам необходимо присоединиться к команде или создать новую (см. выше). Хоть вы и можете сражаться против монстров в одиночку, мы рекомендуем играть в команде, потому что так будет намного проще выполнять квесты. Кроме того, подбадривания от друзей служат прекрасной мотивацией к выполнению заданий!\n\nДалее вам понадобится свиток квеста, который хранится в Меню > Предметы. Есть три способа получить свиток:\n\n- По достижении уровня 15 вы получаете доступ к квестовой линии, то есть к трём связанным в цепочку квестам. Другие квестовые линии открываются на уровнях 30, 40 и 60, соответственно.\n\n- Когда вы приглашаете людей вступить в вашу команду через [веб-сайт](https://habitica.com/#/options/groups/party), вы награждаетесь свитком Василиста! (Мы добавим эту функцию в приложение в будущем обновлении.)\n\n- Вы можете купить квест на странице квестов на [веб-сайте](https://habitica.com/#/options/inventory/quests) за золото и самоцветы. (Мы добавим эту функцию в приложение в будущем обновлении.)\n\nЧтобы принять участие в сражении с боссом или сборе квестовых предметов, просто выполняйте свои задачи так, как вы это обычно делаете, и эффект от них сложится в урон, который вы нанесёте ночью. (Чтобы увидеть изменения в здоровье босса, может потребоваться обновление страницы — для этого потяните экран вниз.) Если при сражении с боссом вы пропустили какие-либо ежедневные задания, босс нанесёт урон всей вашей команде в тот же момент, когда вы ударите босса.\n\nПосле получения 11-го уровня маги и воины приобретают навыки, позволяющие наносить дополнительные повреждения боссу. Если вы хотите стать сильным атакующим, то вам подойдёт один из этих классов при выборе на 10-м уровне.", + "iosFaqAnswer9": "Прежде всего, вам нужно присоединиться к команде или создать новую (в меню Общение > Команда). Хоть вы и можете сражаться против монстров в одиночку, мы советуем вам играть группой, ведь выполнить Квесты станет гораздо проще. Кроме того, когда у вас есть друзья, которые помогают вам - появляется прекрасная мотивация к действиям!\n\nВам понадобится свиток квеста, который хранится в меню Инвентарь > Квесты. Есть три способа получить свиток:\n\n* Когда вы приглашаете людей вступить в вашу команду, вы награждаетесь свитком Василиста!\n* По достижении уровня 15, вы получаете доступ к квестовой линии, то есть к трём связанным в цепочку квестам. Другие квестовые линии открываются на уровнях 30, 40 и 60, соответственно. \n* Вы можете купить квест на странице квестов [website](https://habitica.com/#/options/inventory/quests) (Инвентарь > Квесты) за золото и самоцветы. (Мы добавим эту функцию в приложение в ближайшее время)\n\nЧтобы принять участие в сражении с боссом или сборе квестовых предметов, просто выполняйте свои задачи так, как вы это обычно делаете, и эффект от них сложится в урон, который вы нанесёте ночью. (Чтобы увидеть изменения в здоровье босса, может потребоваться обновление страницы — для этого потяните экран вниз.) Если при сражении с боссом вы пропустили какие-либо ежедневные задания, босс нанесёт урон всей вашей команде в тот же момент, когда вы ударите босса.\n\nПосле получения 11-го уровня маги и воины приобретают навыки, позволяющие наносить дополнительные повреждения боссу. Если вы хотите стать сильным атакующим, то вам подойдёт один из этих классов при выборе на 10-м уровне.", "webFaqAnswer9": "В первую очередь вам необходимо присоединиться к команде или создать новую (в меню Общение > Команда). Хоть вы и можете сражаться против монстров в одиночку, мы рекомендуем играть в команде, потому что так будет намного проще выполнять квесты. Кроме того, подбадривания от друзей служат прекрасной мотивацией к выполнению заданий!\n

\nДалее вам понадобится свиток квеста, который хранится в меню Инвентарь > Квесты. Есть три способа получить свиток:\n

\n* Когда вы приглашаете людей вступить в вашу команду, вы награждаетесь свитком Василиста!\n* По достижении уровня 15 вы получаете доступ к квестовой линии, то есть к трём связанным в цепочку квестам. Другие квестовые линии открываются на уровнях 30, 40 и 60, соответственно.\n* Вы можете купить квест на странице квестов (Инвентарь > Квесты) за золото и самоцветы.\n

\nЧтобы принять участие в сражении с боссом или сборе квестовых предметов, просто выполняйте свои задачи так, как вы это обычно делаете, и эффект от них сложится в урон, который вы нанесёте ночью. (Чтобы увидеть изменения в здоровье босса, может потребоваться обновление страницы — для этого потяните экран вниз.) Если при сражении с боссом вы пропустили какие-либо ежедневные задания, босс нанесёт урон всей вашей команде в тот же момент, когда вы ударите босса.\n

\nПосле получения 11-го уровня маги и воины приобретают навыки, позволяющие наносить дополнительные повреждения боссу. Если вы хотите стать сильным атакующим, то вам подойдёт один из этих классов при выборе на 10-м уровне.", - "faqQuestion10": "Что за самоцветы, и где их получить?", + "faqQuestion10": "Что такое Самоцветы и как мне их получить?", "iosFaqAnswer10": "Самоцветы можно приобрести за реальные деньги. Чтобы сделать это, нажмите на иконку самоцвета в шапке приложения. Покупая самоцветы, игроки помогают нам поддерживать сайт в рабочем состоянии. Мы очень признательны им за их поддержку!\n\nКроме способа прямой покупки самоцветов, есть три других способа заработать их: \n\n* Победить в испытании на [веб-сайте](https://habitica.com), которое было создано другим игроком через меню Общение > Испытания. (Мы добавим испытания в приложение в будущем обновлении!) \n* Оформить подписку на [веб-сайте](https://habitica.com/#/options/settings/subscription) и открыть возможность покупать за золото определённое количество самоцветов в месяц. \n* Стать участником и сделать вклад в проект Habitica. Для дополнительной информации посетите эту страницу: [Помощь в развитии Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\nПомните, что предметы, купленные за самоцветы, не дают совершенно никаких преимуществ в статистике, так что игроки могут спокойно пользоваться приложением без них.", "webFaqAnswer10": "Самоцветы можно [приобрести за реальные деньги](https://habitica.com/#/options/settings/subscription), однако [подписчики](https://habitica.com/#/options/settings/subscription) могут приобрести их за золото. Покупая самоцветы, игроки помогают нам поддерживать сайт в рабочем состоянии. Мы очень признательны им за их поддержку!\n

\nКроме способа прямой покупки самоцветов, есть два других способа заработать их:\n

\n* Победить в испытании, которое было создано другим игроком через меню Общение > Испытания. \n* Стать участником и сделать вклад в проект Habitica с помощью своих умений. Для дополнительной информации посетите эту страницу: [Помощь в развитии Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n

\nПомните, что предметы, купленные за самоцветы, не дают совершенно никаких преимуществ в статистике, так что игроки могут спокойно пользоваться сайтом без них.", "faqQuestion11": "Как сообщить о проблеме или предложить новую функцию?", "iosFaqAnswer11": "Вы можете сообщить о проблеме, предложить новую функцию или оставить отзыв через Меню > Сообщить о проблеме и Меню > Оставить отзыв! Мы сделаем всё, что в наших силах, чтобы вам помочь.", "webFaqAnswer11": "Мы принимаем отчёты об ошибках на сайте GitHub. Перейдите в [Меню > Сообщить о проблеме](https://github.com/HabitRPG/habitrpg/issues/2760) и следуйте инструкции. Не беспокойтесь, мы очень скоро всё починим!\n

\nПредложения о новых функциях принимаются на сайте Trello. Перейдите в меню [Помощь > Предложить новую функцию](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) и следуйте инструкции. Та-да!", + "faqQuestion12": "Как сражаться с мировым боссом?", + "iosFaqAnswer12": "Всемирные Боссы - это особые монстры, которые появляются в Таверне. Все активные игроки автоматически начинают сражение с Боссом, и их задачи и умения наносят повреждения Боссу, так же, как и обычно.\n\nТакже вы можете брать обычные Квесты, в тоже самое время, когда сражаетесь с Всемирным Боссом. Ваши задачи и умения будут влиять и на Всемирного Босса, и на Босса\\Квест в вашей команде.\n\nВсемирный Босс никогда не побьёт вас лично, и не сломает ваш аккаунт. Но у него есть индикатор Ярости, который заполняется, когда игроки пропускают ежедневные задания. Если Ярость Босса достигнет предела, он злобно нападёт на одного из неигровых жителей славной Хабитики, и тому придётся настолько несладко, что сменится даже его внешний облик.\n\nВы можете почитать о [приходивших Всемирных Боссах](http://habitica.wikia.com/wiki/World_Bosses) в нашей вики.", + "webFaqAnswer12": "Всемирные Боссы - это особые монстры, которые появляются в Таверне. Все активные игроки автоматически начинают сражение с Боссом, и их задачи и умения наносят повреждения Боссу, так же, как и обычно.\n\nТакже вы можете брать обычные Квесты, в тоже самое время, когда сражаетесь с Всемирным Боссом. Ваши задачи и умения будут влиять и на Всемирного Босса, и на Босса\\Квест в вашей команде.\n\nВсемирный Босс никогда не побьёт вас лично, и не сломает ваш аккаунт. Но у него есть индикатор Ярости, который заполняется, когда игроки пропускают ежедневные задания. Если Ярость Босса достигнет предела, он злобно нападёт на одного из неигровых жителей славной Хабитики, и тому придётся настолько несладко, что сменится даже его внешний облик.\n\nВы можете почитать о [приходивших Всемирных Боссах](http://habitica.wikia.com/wiki/World_Bosses) в нашей вики.", "iosFaqStillNeedHelp": "Если у вас возник вопрос, которого нет в этом списке, приходите и задайте его в чате Таверны в Меню > Таверна! Мы будем рады помочь.", "webFaqStillNeedHelp": "Если у вас возник вопрос, которого нет в этом списке, приходите и задайте его в [гильдии новичков](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! Мы будем рады помочь." } \ No newline at end of file diff --git a/common/locales/ru/front.json b/common/locales/ru/front.json index 6e9b2ba68a..fcd10f31c2 100644 --- a/common/locales/ru/front.json +++ b/common/locales/ru/front.json @@ -74,7 +74,7 @@ "infhQuote": "[Habitica] действительно помогла мне организовать структурный подход к своей жизни во время учёбы в аспирантуре.", "invalidEmail": "Для изменения пароля необходимо указать существующий адрес электронной почты.", "irishfeet123Quote": "У меня была ужасная привычка не мыть за собой посуду после еды и оставлять везде кружки. [Habitica] полностью меня исправила!", - "joinOthers": "Присоединяйтесь к 250,000 человек, которые достигают своих целей с удовольствием!", + "joinOthers": "Присоединяйтесь к <%= userCount %> человек, которые превращают достижение целей в веселье!", "kazuiQuote": "До [Habitica] работа с моей диссертацией никак не продвигалась. Кроме того, вызывала недовольство моя недисциплинированность в отношении домашних дел и таких задач, как изучение новых слов и обучение игре Го. Оказывается, разбивка этих задач на списки из небольших подзаданий – как раз то, что мне нужно, чтобы сохранять мотивацию и постоянную работоспособность.", "landingadminlink": "административные пакеты,", "landingend": "Еще не уверены?", @@ -179,5 +179,14 @@ "businessInquiries": "Бизнес предложения", "merchandiseInquiries": "Предложения по использованию торговой марки", "marketingInquiries": "Предложения по маркетингу и рекламе в соц. сетях", - "tweet": "Твитнуть" + "tweet": "Твитнуть", + "apps": "Мобильные приложения", + "notifyAndroidApp": "Хотите, чтобы мы уведомили вас, когда будет готово Android приложение? Подпишитесь на эту рассылку!", + "checkOutIOSApp": "Попробуйте наше новое iOS приложение!", + "imagine1": "Представьте, что улучшать вашу жизнь так же весело, как играть в игру.", + "landingCopy1": "Прогрессируй в игре, завершая задачи в реальной жизни.", + "landingCopy2": "Сражайтесь с монстрами совместно с друзьями, чтобы быть ответственнее за свои цели.", + "landingCopy3": "Нас уже <%= userCount %>, кто получает удовольствие от улучшения своей жизни.", + "alreadyHaveAccount": "У меня уже есть аккаунт!", + "getStartedNow": "Начните сейчас!" } \ No newline at end of file diff --git a/common/locales/ru/gear.json b/common/locales/ru/gear.json index 3c8e471cd5..f6c7a6d53c 100644 --- a/common/locales/ru/gear.json +++ b/common/locales/ru/gear.json @@ -68,7 +68,7 @@ "weaponSpecial3Notes": "С дуэлями, монстрами и недомоганиями покончено! Сделай из них пюре! Увеличивает силу, интеллект и телосложение на <%= attrs %>.", "weaponSpecialCriticalText": "Молот победителя критических багов", "weaponSpecialCriticalNotes": "Этот борец разбил особо опасного неприятеля в битве на Github, в которой пали многие воины. Молот исполнен из костей Бага и наносит мощные критические удары. Увеличивает силу и восприятие на <%= attrs %>.", - "weaponSpecialTridentOfCrashingTidesText": "Трезубец сокрушительных приливов", + "weaponSpecialTridentOfCrashingTidesText": "Трезубец Сокрушительных Приливов", "weaponSpecialTridentOfCrashingTidesNotes": "Дает вам способность повелевать рыбами, а также наносить мощные удары задачам. Увеличивает интеллект на <%= int %>.", "weaponSpecialYetiText": "Копье укротителя Йети", "weaponSpecialYetiNotes": "Это копье позволяет владельцу управлять любым йети. Увеличивает силу на <%= str %>. Экипировка ограниченного выпуска зимы 2013-2014.", @@ -149,13 +149,19 @@ "weaponArmoireRancherLassoText": "Ковбойское лассо", "weaponArmoireRancherLassoNotes": "Лассо: идеальный инструмент для контролирования пасущегося стада. Увеличивает силу на<%= str %>, восприятие на <%= per %> и интеллект на <%= int %>. Волшебный сундук: Комплект ковбоя (предмет 3 из 3).", "weaponArmoireMythmakerSwordText": "Меч Мифотворца", - "weaponArmoireMythmakerSwordNotes": "Хотя этот меч может показаться простым, он сделал многих героев легендарными. Увеличивает восприятие и силу на <%= attrs %>. Волшебный сундук: Набор Золотой тоги (Предмет 3 из 3).", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Железный крюк", - "weaponArmoireIronCrookNotes": "Отчаянно выплавленный из железа, этот крюк прекрасно подходит для пастьбы овец. Увеличивает восприятие и силу на <%= attrs %>. Волшебный сундук: Набор Рогатого железа (Предмет 3 из 3).", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Посох Золотого Крыла", "weaponArmoireGoldWingStaffNotes": "Крылья на этом посохе постоянно трепещут и выгибаются. Увеличивает все характеристики на <%= attrs %>. Зачаровання коллекция: независимый предмет.", "weaponArmoireBatWandText": "Волшебная па... Дубина!", "weaponArmoireBatWandNotes": "Эта волшебная палочка может превратить любое задание в летучую мышь! Просто размахивайте ей и смотрите, как задания разлетаются во все стороны. Увеличивает интеллект на <%= int %> и восприятие на <%= per %>. Волшебный сундук: независимый предмет.", + "weaponArmoireShepherdsCrookText": "Пастуший Посох", + "weaponArmoireShepherdsCrookNotes": "Полезно для выпаса грифонов. Увеличивает Телосложение на by <%= con %>. Волшебный Сундук: Комплект Пастуха (1предмет из 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "Броня", "armorBase0Text": "Обычная одежда", "armorBase0Notes": "Обычная одежда. Бонусов не дает.", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "Мантия праздника абсурда", "armorSpecialBirthday2015Notes": "С днём рождения, Habitica! Примерьте эти нелепые наряды, чтобы отпраздновать этот замечательный день. Бонусов не дает.", "armorSpecialGaymerxText": "Радужные доспехи воина", - "armorSpecialGaymerxNotes": "Эти доспехи выкрашены в яркие радужные цвета в честь празднования эпохи процветания и GaymerX. GaymerX это интернациональная игровая конвенция, поддерживающая ЛГБТ-сообщества и видео игры, она открыта каждому. Она проходит в центре Сан-Франциско 11-13 июля. Бонусов не дает.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "Блестящий кошачий костюм", "armorSpecialSpringRogueNotes": "Безукоризненно ухоженный. Увеличивает восприятие на <%= per %>. Экипировка ограниченного выпуска весны 2014.", "armorSpecialSpringWarriorText": "Доспехи из клеверной стали", @@ -270,13 +276,13 @@ "armorSpecialSummer2015HealerText": "Доспех Морехода", "armorSpecialSummer2015HealerNotes": "Эти доспехи дают знать всем, что вы честный торговец-мореплаватель, никогда и не думавший плутовать. Увеличивают телосложение на <%= con %>. Ограниченный выпуск экипировки лета 2015.", "armorSpecialFall2015RogueText": "Бое-Вой Доспех", - "armorSpecialFall2015RogueNotes": "Fly into bat-tle! Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", + "armorSpecialFall2015RogueNotes": "Ворвись в Бит-ву! Увеличивает Восприятие на <%= per %>. Ограниченный Выпуск 2015 Осеннее Снаряжение.", "armorSpecialFall2015WarriorText": "Доспех Пугала", - "armorSpecialFall2015WarriorNotes": "Despite being stuffed with straw, this armor is extremely hefty! Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", + "armorSpecialFall2015WarriorNotes": "Эта броня, несмотря на то, что набита соломой, крайне тяжела! Увеличивает Телосложение на <%= con %>. Экипировка ограниченного выпуска осени 2015.", "armorSpecialFall2015MageText": "Клочковатая Роба", - "armorSpecialFall2015MageNotes": "Every stitch in this armor shimmers with enchantment. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", - "armorSpecialFall2015HealerText": "Potioner Robes", - "armorSpecialFall2015HealerNotes": "What? Of course that was a potion of constitution. No, you are definitely not turning into a frog! Don't be ribbiticulous. Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", + "armorSpecialFall2015MageNotes": "Каждый шов в этих доспехах мерцает волшебством. Увеличивает Интеллект на <%= int %>. Экипировка ограниченного выпуска осени 2015.", + "armorSpecialFall2015HealerText": "Облачение знахаря", + "armorSpecialFall2015HealerNotes": "Что? Конечно, это был эликсир Телосложения. Нет, ты совершенно точно НЕ превращаешься в жабу! Не квакай больше. Увеличивает Телосложение на <%= con %>. Экипировка ограниченного выпуска осени 2015.", "armorMystery201402Text": "Облачение посланника", "armorMystery201402Notes": "Сверкающая и крепкая, эта броня снабжена большим количеством карманов для переноски писем. Бонусов не дает. Подарок подписчикам февраля 2014.", "armorMystery201403Text": "Доспехи лесовика", @@ -306,7 +312,9 @@ "armorMystery201508Text": "Костюм гепарда", "armorMystery201508Notes": "Станьте быстрым как молния, наденьте пушистый костюм гепарда. Бонусов не дает. Подарок подписчикам августа 2015.", "armorMystery201509Text": "Костюм Оборотня", - "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201509Notes": "Это же и ЕСТЬ костюм, так? Бонусов не даёт. Подарок подписчикам сентября 2015.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Стимпанковский костюм", "armorMystery301404Notes": "Чудной и лихой! Бонусов не дает. Подарок подписчикам февраля 3015.", "armorArmoireLunarArmorText": "Лунные доспехи успокоения", @@ -321,6 +329,12 @@ "armorArmoireHornedIronArmorNotes": "Отчаянно выплавленные из железа, эти рогатые доспехи почти невозможно сломать. Увеличивает телосложение на <%= con %> и восприятие на <%= per %>. Волшебный сундук: Набор Рогатого железа (Предмет 2 из 3).", "armorArmoirePlagueDoctorOvercoatText": "Плащ чумного доктора", "armorArmoirePlagueDoctorOvercoatNotes": "Такие плащи носили доктора, боровшиеся с Чумой Прокрастинации. Увеличивает интеллект на <%= int %>, силу на <%= str %> и телосложение на <%= con %>. Зачарованная коллекция: Набор чумного доктора (3 из 3 предметов).", + "armorArmoireShepherdRobesText": "Одеяния пастуха", + "armorArmoireShepherdRobesNotes": "Ткань лёгкая и пропускает воздух, идеально для того, чтобы пасти грифонов в жаркий день в пустыне. Увеличивает Силу и Восприятие на <%= attrs %>. Волшебный Сундук: Комплект Пастуха (2 предмет из 3).", + "armorArmoireRoyalRobesText": "Королевские Одеяния", + "armorArmoireRoyalRobesNotes": "Чудесный правитель, царствуйте весь день подряд! Увеличивает Телосложение, Интеллект и Восприятие на <%= attrs %>. Волшебный сундук: Королевский Комплект (предмет 3 из 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "Головной убор", "headBase0Text": "Нет шлема", "headBase0Notes": "Нет головного убора.", @@ -433,15 +447,15 @@ "headSpecialSummer2015HealerText": "Шляпа Морехода", "headSpecialSummer2015HealerNotes": "Надев эту шляпу вы не пропадете даже в самый страшный шторм. Увеличивает Интеллект на <%= int %>. Экипировка ограниченного выпуска лета 2015.", "headSpecialFall2015RogueText": "Бое-Вые Крылья", - "headSpecialFall2015RogueNotes": "Echolocate your enemies with this powerful helm! Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", + "headSpecialFall2015RogueNotes": "Ваши враги будут найдены с помощью этой мощной шляпы-эхолота! Увеличивает Телосложение на <%= per %>. Экипировка ограниченного выпуска осени 2015.", "headSpecialFall2015WarriorText": "Шапка Пугала", - "headSpecialFall2015WarriorNotes": "Everyone would want this hat--if they only had a brain. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", + "headSpecialFall2015WarriorNotes": "Все бы хотели эту шляпу... Если бы у них были мозги. Увеличивает силу на <%= str %>. Экипировка ограниченного выпуска осени 2015.", "headSpecialFall2015MageText": "Клочковатая Шапка", - "headSpecialFall2015MageNotes": "Every stitch in this hat augments its power. Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", + "headSpecialFall2015MageNotes": "Каждый шов в этой шляпе прибавляет ей мощи. Увеличивает Восприятие на <%= per %>. Экипировка ограниченного выпуска осени 2015.", "headSpecialFall2015HealerText": "Шапка Лякухи", - "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", + "headSpecialFall2015HealerNotes": "Это чрезвычайно серьезная шляпа, которая достойна только самых передовых зельеваров. Увеличивает Интеллект на <%= int %>. Экипировка ограниченного выпуска осени 2015.", "headSpecialGaymerxText": "Радужный шлем воина.", - "headSpecialGaymerxNotes": "Этот шлем выкрашен в яркие радужные цвета в честь празднования эпохи процветания и GaymerX. GaymerX это интернациональная игровая конвенция, поддерживающая ЛГБТ-сообщества и видео игры, она открыта каждому. Она проходит в центре Сан-Франциско 11-13 июля.Бонусов не дает.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "Шлем с крыльями", "headMystery201402Notes": "Этот крылатый венец наделяет носителя скоростью ветра! Бонусов не дает. Подарок подписчикам февраля 2014.", "headMystery201405Text": "Пламенный ум", @@ -463,7 +477,9 @@ "headMystery201508Text": "Шляпа гепарда", "headMystery201508Notes": "Уютная пушистая гепардовая шляпа! Бонусов не даёт. Предмет подписчика августа 2015.", "headMystery201509Text": "Маска Оборотня", - "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201509Notes": "Это же и ЕСТЬ маска, так? Бонусов не даёт. Подарок подписчикам сентября 2015.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 Subscriber Item.", "headMystery301404Text": "Модный цилиндр", "headMystery301404Notes": "Модный цилиндр для самых уважаемых господ! Подарок подписчикам января 3015. Бонусов не дает.", "headMystery301405Text": "Обычный цилиндр", @@ -481,7 +497,7 @@ "headArmoireBlueHairbowText": "Синий бант", "headArmoireBlueHairbowNotes": "Станьте восприимчивым, стойким и находчивым, надев этот превосходный синий бант! Увеличивает восприятие на <%= per %>, телосложение на <%= con %> и интеллект на <%= int %>. Волшебный сундук: независимый предмет.", "headArmoireRoyalCrownText": "Королевская корона", - "headArmoireRoyalCrownNotes": "Да здравствует правитель, могучий и сильный! Увеличивает силу на <%= str %>. Волшебный сундук: независимый предмет.", + "headArmoireRoyalCrownNotes": "Слава правителю, сильному и могучему! Увеличивает Силу на <%= str %>. Волшебный сундук: Королевский Комплект (предмет 1 из 3).", "headArmoireGoldenLaurelsText": "Золотые лавры", "headArmoireGoldenLaurelsNotes": "Этими золотыми лаврами награждаются те, кто сумел покорить свои вредные привычки. Увеличивают восприятие и телосложение на <%= attrs %>. Волшебный сундук: набор золотой тоги (предмет 2 из 3).", "headArmoireHornedIronHelmText": "Шлем Рогатого железа", @@ -493,9 +509,15 @@ "headArmoirePlagueDoctorHatText": "Шляпа чумного доктора", "headArmoirePlagueDoctorHatNotes": "Аутентичная шляпа, которую носят доктора, борющиеся против чумы прокрастинации! Увеличивает силу на <%= str %>, интеллект на <%= int%> и телосложение на <%= con %>. Волшебный сундук: набор чумного доктора (предмет 1 из 3).", "headArmoireBlackCatText": "Шапка Чёрного Кота", - "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireBlackCatNotes": "Эта чёрная шляпа... мурлыкает. И подёргивает хвостом. И дышит? Ага, на вашей голове просто спит кот. Увеличивает Интеллект и Восприятие на <%= attrs %>. Волшебный сундук: самостоятельный предмет.", "headArmoireOrangeCatText": "Шапка Оранжевого Кота", - "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireOrangeCatNotes": "Эта оранжевая шляпа... мурлыкает. И подёргивает хвостом. И дышит? Ага, на вашей голове просто спит кот. Увеличивает Силу и Телосложение на <%= attrs %>. Волшебный сундук: самостоятельный предмет.", + "headArmoireBlueFloppyHatText": "Синяя Широкополая шляпа", + "headArmoireBlueFloppyHatNotes": "Многие заклинания были зашиты в эту простенькую шляпу, придавая ей искрящийся голубой цвет. Увеличивает Телосложение, Интеллект и Восприятие на <%= attrs %> каждый. Волшебный сундук: самостоятельный предмет.", + "headArmoireShepherdHeaddressText": " Головной убор Пастуха", + "headArmoireShepherdHeaddressNotes": "Иногда грифоны, которых вы пасёте, грызут этот головной убор, но несмотря на это, он придаёт вам умный вид. Увеличивает Интеллект на <%= int %>. Волшебный сундук: Комплект Пастуха (предмет 3 из 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "предмет для защитной руки", "shieldBase0Text": "Нет снаряжения для защитной руки", "shieldBase0Notes": "Нет щита или второго оружия.", @@ -539,46 +561,48 @@ "shieldSpecialSpringHealerNotes": "Под ударами испускает долгий, невыносимый визг, распугивающий врагов. Увеличивает телосложение на <%= con %>. Экипировка ограниченного выпуска весны 2014.", "shieldSpecialSummerRogueText": "Пираская сабля", "shieldSpecialSummerRogueNotes": "Тысяча чертей! Заставь свои задания прогуляться по доске! Увеличивает силу на <%= str %>. Экипировка ограниченного выпуска лета 2014.", - "shieldSpecialSummerWarriorText": "Деревянный щит", + "shieldSpecialSummerWarriorText": "Деревянный Щит", "shieldSpecialSummerWarriorNotes": "Этот щит из обломков корабельной древесины способен сдержать даже самые бурные задания. Увеличивает телосложение на <%= con %>. Экипировка ограниченного выпуска лета 2014.", - "shieldSpecialSummerHealerText": "Теневой щит", + "shieldSpecialSummerHealerText": "Щит Мелководья", "shieldSpecialSummerHealerNotes": "Никто не осмелится атаковать коралловый риф, увидав этот сияющий щит! Увеличивает телосложение на <%= con %>. Экипировка ограниченного выпуска лета 2014.", - "shieldSpecialFallRogueText": "Серебряная конфета", + "shieldSpecialFallRogueText": "Серебряная Конфета", "shieldSpecialFallRogueNotes": "Убивает нежить. Также дает преимущество против оборотней, ведь осторожность никогда не помешает. Увеличивает силу на <%= str %>. Экипировка ограниченного выпуска осени 2014.", - "shieldSpecialFallWarriorText": "Мощный эликсир науки", + "shieldSpecialFallWarriorText": "Мощный Эликсир Науки", "shieldSpecialFallWarriorNotes": "Мистическим образом проливается на лабораторные халаты. Увеличивает телосложение на <%= con %>. Экипировка ограниченного выпуска осени 2014.", - "shieldSpecialFallHealerText": "Щит с инкрустацией", + "shieldSpecialFallHealerText": "Щит с Инкрустацией", "shieldSpecialFallHealerNotes": "Этот сверкающий щит был найден а древней гробнице. Увеличивает телосложение на <%= con %>. Экипировка ограниченного выпуска осени 2014.", - "shieldSpecialWinter2015RogueText": "Ледяной шип", + "shieldSpecialWinter2015RogueText": "Ледяной Шип", "shieldSpecialWinter2015RogueNotes": "Вы точно, действительно, совершенно точно просто подобрали это с земли. Увеличивает Силу на <%= str %>. Экипировка ограниченного выпуска зимы 2014-2015.", "shieldSpecialWinter2015WarriorText": "Мармеладный щит", "shieldSpecialWinter2015WarriorNotes": "Этот, казалось бы, сахарный щит на самом деле состоит из питательных желатиновых овощей. Увеличивает Телосложение на <%= con %>. Экипировка ограниченного выпуска зимы 2014-2015.", - "shieldSpecialWinter2015HealerText": "Щит успокоения", + "shieldSpecialWinter2015HealerText": "Щит Успокоения", "shieldSpecialWinter2015HealerNotes": "Этот щит отражает леденящий ветер. Увеличивает телосложение на <%= con %>. Экипировка ограниченного выпуска зимы 2014-2015.", "shieldSpecialSpring2015RogueText": "Взрывной Писк", "shieldSpecialSpring2015RogueNotes": "Не дайте звуку обмануть вас – эта взрывчатка просто сбивает с ног. Увеличивает силу на <%= str %>. Экипировка ограниченного выпуска весны 2015.", "shieldSpecialSpring2015WarriorText": "Метательная Тарелка", "shieldSpecialSpring2015WarriorNotes": "Швырните ей во врага! Ну или оставьте себе, потому что к обеду в ней будет полно вкусного корма. Увеличивает телосложение на <%= con %>. Экипировка ограниченного выпуска весны 2015.", - "shieldSpecialSpring2015HealerText": "Узорчатая подушка", + "shieldSpecialSpring2015HealerText": "Узорчатая Подушка", "shieldSpecialSpring2015HealerNotes": "Вы можете уютно устроиться на этой подушке или же разодрать ее когтями в свое удовольствие. Рррр! Увеличивает телосложение на <%= con %>. Экипировка ограниченного выпуска весны 2015.", - "shieldSpecialSummer2015RogueText": "Огнестрельный коралл", + "shieldSpecialSummer2015RogueText": "Огнестрельный Коралл", "shieldSpecialSummer2015RogueNotes": "Этот сородич огненного коралла способен стрелять ядом сквозь толщу воды. Увеличивает Силу на <%= str %>. Экипировка ограниченного выпуска лета 2015.", "shieldSpecialSummer2015WarriorText": "Щит Солнечной Рыбы", "shieldSpecialSummer2015WarriorNotes": "Созданный из глубоководного металла мастерами из Дилатори, этот щит сияет словно море и песок. Увеличивает телосложение на <%= con %>. Экипировка ограниченного выпуска лета 2015.", "shieldSpecialSummer2015HealerText": "Заклеенный Щит", "shieldSpecialSummer2015HealerNotes": "Оглушайте этим щитом трюмных крыс. Увеличивает Телосложение на <%= con %>. Экипировка ограниченного выпуска лета 2015.", - "shieldSpecialFall2015RogueText": "Бое-вой ТопОр", + "shieldSpecialFall2015RogueText": "Бое-Вой Топор", "shieldSpecialFall2015RogueNotes": "Устрашающие задания трусливо прячутся при виде взмахов этим топором. Увеличивает силу на <%= str %>. Экипировка ограниченного выпуска осени 2015.", "shieldSpecialFall2015WarriorText": "Сумка Птичьих Семян", - "shieldSpecialFall2015WarriorNotes": "It's true that you're supposed to be SCARING the crows, but there's nothing wrong with making friends! Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", + "shieldSpecialFall2015WarriorNotes": "Это, конечно, правда, что вы должны быть ПУГАЛОМ и пугать ворон, но нет ничего плохого в том, чтобы с ними подружиться! Увеличивает Телосложение на <%= con %>. Экипировка ограниченного выпуска осени 2015.", "shieldSpecialFall2015HealerText": "Палка Для Помешиваня", "shieldSpecialFall2015HealerNotes": "Эта палка может помешивать всё без таяния, растворения, или воспламенения! Она может быть также использована что-бы яростно тыкать в задачи врага. Увеличивает Телосложение на <%= con %>. Ограниченный Выпуск Осеннего Снаряжения 2015.", - "shieldMystery301405Text": "Часовой щит", + "shieldMystery301405Text": "Часовой Щит", "shieldMystery301405Notes": "С этим монументальным часовым щитом время на вашей стороне! Подарок подписчикам июня 3015. Бонусов не дает.", "shieldArmoireGladiatorShieldText": "Щит Гладиатора", "shieldArmoireGladiatorShieldNotes": "Чтобы быть гладиатором, вы должны... а хотя, все равно, просто оглушайте врагов своим щитом. Увеличивает Телосложение на <%= con %> и Силу на <%= str %>. Волшебный сундук: Набор Гладиатора (Часть 3 из 3).", "shieldArmoireMidnightShieldText": "Полуночный Щит", "shieldArmoireMidnightShieldNotes": "Этот щит имеет самую большую мощь в самую полночь! Повышает Телосложение на <%= con %> и Силу на <%= str %>. Зачарованный Доспех: Независимый предмет.", + "shieldArmoireRoyalCaneText": "Королевская Трость", + "shieldArmoireRoyalCaneNotes": "Слава правителю, достойному хвалебных песен! Увеличивает Телосложение, Интеллект и Восприятие на <%= attrs %>. Королевский Комплект (предмет 2 из 3).", "back": "Аксессуар на спину", "backBase0Text": "Нет аксессуаров на спине", "backBase0Notes": "Нет аксессуаров на спине.", @@ -586,12 +610,14 @@ "backMystery201402Notes": "Перья на этих сияющих крыльях сверкают на солнце! Бонусов не дают. Подарок подписчикам февраля 2014.", "backMystery201404Text": "Крылья Сумеречной бабочки", "backMystery201404Notes": "Порхайте, как бабочка! Бонусов не дает. Подарок подписчикам апреля 2014.", - "backMystery201410Text": "Крылья гоблина", + "backMystery201410Text": "Крылья Гоблина", "backMystery201410Notes": "Проноситесь сквозь ночь на этих сильных крыльях. Бонусов не дают. Подарок подписчикам октября 2014.", "backMystery201504Text": "Крылья трудолюбивой пчелки", "backMystery201504Notes": "Бз - бзз - бззз! Перелетаем с задания на задание. Бонусов не дает. Подарок подписчикам в апреле 2015.", "backMystery201507Text": "Крутая доска для сёрфинга", "backMystery201507Notes": "Прокатитесь по волнам от причала Прилежности до бухты Незавершённости! Бонусов не даёт. Подарок подписчикам в июле 2015 года.", + "backMystery201510Text": "Хвост гоблина", + "backMystery201510Notes": "Хваткий и мощный! Бонусов не даёт. Подарок подписчикам октября 2015.", "backSpecialWonderconRedText": "Могущественный плащ", "backSpecialWonderconRedNotes": "Развевается мощно и красиво. Бонусов не дает. Предмет специального фестивального выпуска.", "backSpecialWonderconBlackText": "Тайный плащ", @@ -613,13 +639,13 @@ "bodySpecialSummer2015RogueNotes": "Нельзя быть настоящим ренегатом без пафоса... и пояса. Бонусов не дает. Экипировка ограниченного выпуска лета 2015.", "bodySpecialSummer2015WarriorText": "Океанические шипы", "bodySpecialSummer2015WarriorNotes": "Каждый шип сочится медузьим ядом, защищая владельца. Бонусов не дает. Экипировка ограниченного выпуска лета 2015.", - "bodySpecialSummer2015MageText": "Золотая пряжка", + "bodySpecialSummer2015MageText": "Золотая Пряжка", "bodySpecialSummer2015MageNotes": "Эта пряжка не добавляет абсолютно никакой силы, но зато она блестит. Бонусов не дает. Экипировка ограниченного выпуска лета 2015.", "bodySpecialSummer2015HealerText": "Шейный платок моряка", "bodySpecialSummer2015HealerNotes": "Йо-хо-хо? Не-не-не! Бонусов не дает. Экипировка ограниченного выпуска лета 2015.", "headAccessory": "аксессуар на голову", "accessories": "Аксессуары", - "animalEars": "Звериные уши", + "animalEars": "Звериные Уши", "headAccessoryBase0Text": "Нет аксессуаров на голове", "headAccessoryBase0Notes": "Нет аксессуаров на голове.", "headAccessorySpecialSpringRogueText": "Пурпурные кошачьи уши", @@ -630,13 +656,13 @@ "headAccessorySpecialSpringMageNotes": "Эти круглые мышиные уши мягкие, как шелк. Бонусов не дают. Экипировка ограниченного выпуска весны 2014.", "headAccessorySpecialSpringHealerText": "Желтые собачьи уши", "headAccessorySpecialSpringHealerNotes": "Слегка обвислые, но милые. Поиграем? Бонусов не дают. Экипировка ограниченного выпуска весны 2014.", - "headAccessorySpecialSpring2015RogueText": "Желтые мышиные уши", + "headAccessorySpecialSpring2015RogueText": "Желтые Мышиные Уши", "headAccessorySpecialSpring2015RogueNotes": "Эти уши оберегают сами себя от повреждений при громких звуках взрывов. Бонусов не дают. Экипировка ограниченного выпуска весны 2015.", - "headAccessorySpecialSpring2015WarriorText": "Пурпурные собачьи уши", + "headAccessorySpecialSpring2015WarriorText": "Пурпурные Собачьи Уши", "headAccessorySpecialSpring2015WarriorNotes": "Фиолетовые. Собачьи. Ушки. Не тратьте время на всю прочую никому не нужную ерунду. Бонусов не дают. Экипировка ограниченного выпуска весны 2015.", - "headAccessorySpecialSpring2015MageText": "Синие кроличьи уши", + "headAccessorySpecialSpring2015MageText": "Синие Кроличьи Уши", "headAccessorySpecialSpring2015MageNotes": "Эти ушки внимательно слушают, не раскрывает ли где поблизости фокусник свои секреты. Бонусов не дают. Экипировка ограниченного выпуска весны 2015.", - "headAccessorySpecialSpring2015HealerText": "Зеленые кошачьи уши", + "headAccessorySpecialSpring2015HealerText": "Зеленые Кошачьи Уши", "headAccessorySpecialSpring2015HealerNotes": "Эти милые кошачьи ушки заставят всех позеленеть от зависти. Бонусов не дают. Экипировка ограниченного выпуска весны 2015.", "headAccessoryBearEarsText": "Медвежьи уши", "headAccessoryBearEarsNotes": "С этими ушами вы выглядите, как пушистый мишка! Бонусов не дают.", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "Эти могучие рога меняют цвет вместе с листвой. Бонусов не дают. Подарок подписчикам сентября 2014.", "headAccessoryMystery201502Text": "Крылья раздумий", "headAccessoryMystery201502Notes": "Позвольте своему воображению унести вас в мир грез! Бонусов не дает. Подарок подписчикам в феврале 2015.", + "headAccessoryMystery201510Text": "Рога гоблина", + "headAccessoryMystery201510Notes": "Эти грозные рога немного склизкие. Бонусов не даёт. Подарок подписчикам октября 2015.", "headAccessoryMystery301405Text": "Очки на голове", "headAccessoryMystery301405Notes": "\"Защищать очками надо глаза,\" говорили они. \"Кому сдались защитные очки на макушке,\" говорили они. Ха! Вы им показали! Подарок подписчикам августа 3015. Бонусов не дает.", "eyewear": "Очки", diff --git a/common/locales/ru/generic.json b/common/locales/ru/generic.json index a7bdfa8c05..5156c4cfde 100644 --- a/common/locales/ru/generic.json +++ b/common/locales/ru/generic.json @@ -28,7 +28,7 @@ "market": "Рынок", "subscriberItem": "Таинственный предмет", "newSubscriberItem": "Новый таинственный предмет", - "subscriberItemText": "Каждый месяц подписчики получают таинственный предмет. Обычно это происходит примерно за неделю до конца месяца. Точную дату можно найти на вики-странице «Таинственный предмет».", + "subscriberItemText": "Каждый месяц подписчики получают таинственный предмет. Обычно это происходит за неделю до конца месяца. Читайте статью \"Таинственный предмет\" на вики для подробной информации.", "all": "Все", "none": "Ничего", "or": "Или", @@ -69,8 +69,9 @@ "habiticaDayPluralText": "Участвовал в праздновании Дня Наречения Habitica <%= number %> раз! Благодарность замечательному пользователю.", "achievementDilatory": "Спаситель Промедления", "achievementDilatoryText": "Помог(ла) уничтожить Повелителя Откладываемых-На-Завтра Заданий в дни Летнего Всплеска 2014.", - "costumeContest": "Конкурс костюмов 2014", - "costumeContestText": "Участвовал(-а) в конкурсе костюмов на Хэллоуин в 2014 году. Некоторые работы можно увидеть на странице blog.habitica.com/tagged/cosplay!", + "costumeContest": "Участник Конкурса Костюмов", + "costumeContestText": "Участвовал(а) в ", + "costumeContestTextPlural": "Участвовал(а) в <%= number %> Конкурсах Костюмов в честь Хэллоуина. Заходите посмотреть записи в блоге Habitica!", "memberSince": "- Участник с", "lastLoggedIn": "- Последний вход", "notPorted": "Эта функция еще не перенесена со старого сайта.", @@ -79,6 +80,7 @@ "errorUpCase": "ОШИБКА:", "newPassSent": "Новый пароль отправлен.", "serverUnreach": "Сервер сейчас недоступен.", + "requestError": "Упс, произошла ошибка! Пожалуйста, перезагрузите страницу, ваше последнее действие, возможно, было сохранено неправильно.", "seeConsole": "Если ошибка появляется вновь, пожалуйста, сообщите о ней через меню Помощь > Сообщить о проблеме. Если вы знакомы с консолью браузера, пожалуйста, включите в отчет возможные сообщения об ошибках.", "error": "Ошибка", "menu": "Меню", @@ -110,9 +112,9 @@ "December": "Декабрь", "dateFormat": "Формат даты", "achievementStressbeast": "Спаситель Стойкальма", - "achievementStressbeastText": "Helped defeat the Abominable Stressbeast during the 2014 Winter Wonderland Event!", - "achievementBurnout": "Savior of the Flourishing Fields", - "achievementBurnoutText": "Helped defeat Burnout and restore the Exhaust Spirits during the 2015 Fall Festival Event!", + "achievementStressbeastText": "Помог победить Отвратительного Стрессозверя в 2014 во время Зимнего События Чудостраны!", + "achievementBurnout": "Спаситель Процветающих Полей", + "achievementBurnoutText": "Помог победить Перегорание и восстановить Истощённых Духов во время Осеннего Фестиваля 2015 года!", "checkOutProgress": "Отметить мои достижения в Habitica!", "cardReceived": "Получено письмо!", "cardReceivedFrom": "<%= cardType %> от <%= userName %>", @@ -133,5 +135,17 @@ "thankyou2": "Тысяча благодарностей!", "thankyou3": "Я очень признателен. Спасибо тебе!", "thankyouCardAchievementTitle": "Благодарный", - "thankyouCardAchievementText": "Спасибо за спасибо! Отправлено или получено <%= cards %> Благодарственных писем." + "thankyouCardAchievementText": "Спасибо за спасибо! Отправлено или получено <%= cards %> Благодарственных писем.", + "streakAchievement": "Вы заработали достижение Серии!", + "firstStreakAchievement": "21-дневная Серия", + "streakAchievementCount": "<%= streaks %> 21-дневные Серии", + "twentyOneDays": "Вы завершали свои Ежедневные задания 21 день подряд!", + "dontBreakStreak": "Поразительная работа. Не прервите серию!", + "dontStop": "Не останавливайся сейчас!", + "levelUpShare": "Мой уровень в Habitica повышен благодаря улучшению привычек в реальной жизни!", + "questUnlockShare": "Я разблокировал новый квест в Habitica!", + "hatchPetShare": "У меня вылупился новый питомец благодаря завершению заданий в реальной жизни!", + "raisePetShare": "Мой питомец вырос в скакуна благодаря завершению заданий в реальной жизни!", + "wonChallengeShare": "Я выиграл испытание в Habitica!", + "achievementShare": "Я получил новое достижение в Habitica!" } \ No newline at end of file diff --git a/common/locales/ru/groups.json b/common/locales/ru/groups.json index fb4eaee7e7..fb41ac7603 100644 --- a/common/locales/ru/groups.json +++ b/common/locales/ru/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "Покинуть гостиницу", "innCheckIn": "В гостиницу", "innText": "Вы отдыхаете в Гостинице! Пропущенные Ежедневные задания не будут причинять вам вреда в конце дня, но отметки об их выполнении будут сбрасываться каждый день. Будьте осторожны: если ваша команда сражается с Боссом, он все же будет наносить вам урон за Ежедневные задания, пропущенные вашими товарищами, если только они также не в гостинице! Кроме того, нанесенный вами урон Боссу или найденные предметы не будут зарегистрированы, пока вы не покинете Гостиницу.", + "innTextBroken": "Вы отдыхаете в Гостинице, я так полагаю... Пропущенные Ежедневные задания не будут причинять вам вреда в конце дня, но отметки об их выполнении будут сбрасываться каждый день... Если вы участвуете в квесте с Боссом, он все же будет наносить вам урон за ежедневные задания, пропущенные вашими товарищами... Если только они не тоже находятся в Гостинице... Также, нанесённый вами урон Боссу (или найденные предметы) не будут засчитаны, пока вы не выпишитесь из Гостиницы... так устал...", "lfgPosts": "Объявления о поиске команды", "tutorial": "Обучение", "glossary": "Терминология", @@ -145,5 +146,6 @@ "partyEmpty": "Кроме вас в вашей команде никого нет. Пригласите друзей!", "partyChatEmpty": "Чат вашей команды пустует! Наберите сообщение в поле сверху, чтобы начать общаться.", "guildChatEmpty": "Чат этой гильдии пустует! Наберите сообщение в поле сверху, чтобы начать общаться.", - "possessiveParty": "Команда игрока <%= name %>." + "possessiveParty": "Команда игрока <%= name %>.", + "requestAcceptGuidelines": "Если вы хотите оставить сообщение в Таверне или в чате любой гильдии, сперва прочитайте Принципы Сообщества и нажмите кнопку \"Принять Принципы\" внизу. Это будет означать, что вы их принимаете и обязуетесь выполнять." } \ No newline at end of file diff --git a/common/locales/ru/limited.json b/common/locales/ru/limited.json index 8199719b74..d9957b3c98 100644 --- a/common/locales/ru/limited.json +++ b/common/locales/ru/limited.json @@ -21,6 +21,7 @@ "valentineCardAchievementText": "Как это мило! Вы так внимательны друг к другу! Отправлено или получено <%= cards %> валентинок.", "polarBear": "Белый медведь", "turkey": "Индейка", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "Детеныш белого медведя", "jackolantern": "Тыквенная лампа", "seasonalShop": "Сезонная лавка", @@ -30,6 +31,7 @@ "seasonalShopText": "Добро пожаловать в Сезонную лавку! Сейчас мы предлагаем товары весеннего сезонного выпуска. Товары будут доступны ежегодно в дни Весенней Веселухи, но мы открыты только до 30 апреля, так что спешите закупиться сейчас, иначе придется ждать целый год!", "seasonalShopSummerText": "Добро пожаловать в Сезонную лавку! Сейчас мы предлагаем товары летнего сезонного выпуска. Товары будут доступны ежегодно в дни Летнего Всплеска, но мы открыты только до 31 июля, так что спешите закупиться сейчас, иначе придется ждать целый год!", "seasonalShopFallText": "Добро пожаловать в Сезонную лавку! Сейчас мы предлагаем товары осеннего сезонного выпуска. Товары будут доступны ежегодно во время Осеннего Фестиваля, но только до 31 октября, так что спешите закупиться сейчас, иначе придется ждать целый год!", + "seasonalShopFallTextBroken": "Ох... Добро пожаловать в Сезонную Лавку... Мы предлагаем товары осеннего Сезонного выпуска, или что-то такое... Всё, что есть здесь, будет ежегодно доступно для покупки на протяжении Осеннего Фестиваля, но мы открыты только до 31 Октября... Я полагаю, вам стоит закупиться сейчас, либо придётся ждать... и ждать... и ждать... *вздох*", "seasonalShopRebirth": "Использовав шар возрождения, вы сможете повторно купить это снаряжение в колонке наград. Поначалу вы сможете купить только предметы для вашего текущего класса (класс по умолчанию – воин), но не волнуйтесь: после смены класса вам станут доступны другие классовые предметы.", "candycaneSet": "Карамельная палочка (Маг)", "skiSet": "Лыжник-ассасин (Разбойник)", diff --git a/common/locales/ru/messages.json b/common/locales/ru/messages.json index 70868eff1c..fd19532644 100644 --- a/common/locales/ru/messages.json +++ b/common/locales/ru/messages.json @@ -30,5 +30,26 @@ "messageAlreadyOwnGear": "У вас уже есть этот предмет. Наденьте его на странице снаряжения.", "armoireEquipment": "<%= image %> Вы нашли в сундуке редкий предмет: <%= dropText %>! Потрясающе!", "armoireFood": "<%= image %> Копаясь в сундуке, вы что-то находите. Откуда здесь <%= dropArticle %><%= dropText %>?", - "armoireExp": "Вы сражаетесь с сундуком и набираете опыт. Получай!" + "armoireExp": "Вы сражаетесь с сундуком и набираете опыт. Получай!", + "messageInsufficientGems": "Недостаточно самоцветов!", + "messageAuthPasswordMustMatch": ":password и :confirmPassword не совпадают", + "messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword обязательны", + "messageAuthUsernameTaken": "Имя пользователя уже занято", + "messageAuthEmailTaken": "Электронная почта уже занята", + "messageAuthNoUserFound": "Пользователь не найден.", + "messageAuthMustBeLoggedIn": "Вы должны быть авторизованы.", + "messageAuthMustIncludeTokens": "Вы должны указать токен и uid (идентификатор пользователя) в своём запросе", + "messageGroupNotFound": "Группа не найдена, либо вы не имеете доступа.", + "messageGroupAlreadyInParty": "Вы уже в команде, попробуйте обновить страницу.", + "messageGroupOnlyLeaderCanUpdate": "Только лидер группы может обновить её!", + "messageGroupRequiresInvite": "Невозможно присоединиться к группе, в которую вы не приглашены.", + "messageGroupCannotRemoveSelf": "Вы не можете удалить себя!", + "messageGroupChatBlankMessage": "Вы не можете отправить пустое сообщение.", + "messageGroupChatLikeOwnMessage": "Не стоит ставить лайк на своём сообщении. Не будьте таким человеком.", + "messageGroupChatFlagOwnMessage": "Вы не можете пожаловаться на своё сообщение.", + "messageGroupChatFlagAlreadyReported": "Вы уже отправили жалобу на это сообщение.", + "messageGroupChatNotFound": "Сообщение не найдено!", + "messageGroupChatAdminClearFlagCount": "Только администратор может очистить счётчик отметок.", + "messageUserOperationProtected": "путь `<%= operation %>` не был сохранён, это зарезервированный путь.", + "messageUserOperationNotFound": "Операция <%= operation %> не найдена" } \ No newline at end of file diff --git a/common/locales/ru/noscript.json b/common/locales/ru/noscript.json new file mode 100644 index 0000000000..4ba705bca4 --- /dev/null +++ b/common/locales/ru/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Увы! В вашем браузере не включён JavaScript", + "jsDisabledHeadingFull": "Увы! В вашем браузере не включён JavaScript, и без него Habitica не сможет работать как надо", + "jsDisabledText": "Habitica не может отобразить сайт должным образом без этого!", + "jsDisabledLink": "Пожалуйста, включите JavaScript, чтобы продолжить!" +} \ No newline at end of file diff --git a/common/locales/ru/npc.json b/common/locales/ru/npc.json index 51f7bed73a..c1c8ff170b 100644 --- a/common/locales/ru/npc.json +++ b/common/locales/ru/npc.json @@ -7,15 +7,19 @@ "daniel": "Даниэль", "danielText": "Добро пожаловать в Таверну! Задержитесь немного и поболтайте с местными жителями. Вам нужен отдых: (отпуск или больничный)? Я размещу вас в Гостинице. Пропущенные Ежедневные задания при этом не будут причинять вам вреда в конце дня, но вы так же сможете отмечать их выполнение.", "danielText2": "Будьте осторожны: если ваша команда сражается с Боссом, он все же будет наносить вам урон за Ежедневные задания, пропущенные вашими товарищами! Кроме того, нанесенный вами урон Боссу или найденные предметы не будут зарегистрированы, пока вы не покинете Гостиницу.", + "danielTextBroken": "Добро пожаловать в Таверну... Полагаю... Если вам нужен отдых, я размещу вас в Гостинице... При этом пропущенные ежедневные задания не будут наносить урон в конце дня, но вы все же сможете их отмечать... Если у вас хватит на это сил... ", + "danielText2Broken": "Ах да... Если вы участвуете в квесте с боссом, он все же будет наносить вам урон за ежедневные задания, не выполненные вашими друзьями по команде... Также, ваши повреждения боссу (или собранные квестовые предметы) не будут засчитаны, пока вы не покинете Гостиницу...", "alexander": "Торговец Александр", "welcomeMarket": "Заходите на рынок! Купите редкие яйца и эликсиры! Продайте то, что вам не нужно! Воспользуйтесь полезными услугами! Загляните и ознакомьтесь со всеми предложениями.", - "sellForGold": "Продать <%= item %> за <%= gold %> золота", - "sellEggForGold": "Продать <%= itemType %> в яйце за <%= gold %> золота", - "sellPotionForGold": "Продать <%= itemType %> эликсир за <%= gold %> золота", + "displayItemForGold": "Вы хотите продать <%= itemType %>?", + "displayEggForGold": "Вы хотите продать <%= itemType %> яйцо?", + "displayPotionForGold": "Вы хотите продать <%= itemType %> эликсир?", + "sellForGold": "Продать это за <%= gold %> золота", "buyGems": "Купить самоцветы", "justin": "Джастин", "ian": "Ян", "ianText": "Добро пожаловать в Лавку квестов! Здесь вы можете использовать Свитки Квестов, чтобы сразиться с монстрами вместе с друзьями. Не забудьте оценить справа стройные ряды Свитков Квестов на продажу!", + "ianBrokenText": "Добро пожаловать в Лавку квестов... Здесь вы можете использовать Свитки Квестов, чтобы сразиться с монстрами вместе с друзьями... Оцените стройные ряды Свитков Квестов на продажу справа от вас...", "USD": "долларов США", "newStuff": "Что-то новенькое", "cool": "Напомнить позже", diff --git a/common/locales/ru/pets.json b/common/locales/ru/pets.json index d6f1b039d0..1fefa2ad3c 100644 --- a/common/locales/ru/pets.json +++ b/common/locales/ru/pets.json @@ -18,7 +18,7 @@ "mammoth": "Шерстистый мамонт", "orca": "Косатка", "royalPurpleGryphon": "Королевский пурпурный грифон", - "phoenix": "Phoenix", + "phoenix": "Феникс", "rarePetPop1": "Нажмите золотую лапу, чтобы подробнее узнать, как получить этого редкого питомца, приняв участие в проекте Habitica!", "rarePetPop2": "Как получить этого питомца?", "potion": "<%= potionType %> эликсир", @@ -58,8 +58,16 @@ "firstDrop": "Вы открыли систему выпадения предметов! Теперь, когда вы выполняете задания, у вас есть маленький шанс найти предмет, включая яйца, эликсиры и еду! Вы только что нашли <%= eggText %> в яйце! <%= eggNotes %>", "useGems": "Если вы хотите питомца, но не можете больше ждать, когда он выпадет, купите его за самоцветы в меню Инвентарь > Рынок!", "hatchAPot": "Вылупится <%= potion %> <%= egg %>. Использовать эликсир?", + "hatchedPet": "У вас вылупился(ась) <%= potion %> <%= egg %>!", + "displayNow": "Показать сейчас", + "displayLater": "Показать позже", + "earnedCompanion": "Вы были так продуктивны, что заработали нового спутника. Кормите его, чтобы он вырос!", "feedPet": "Скормить <%= article %><%= text %> вашему питомцу: <%= name %>?", "useSaddle": "Оседлать <%= pet %>?", + "raisedPet": "У вас вырос(ла) <%= pet %>!", + "earnedSteed": "Завершая свои задания, вы заработали верного скакуна!", + "rideNow": "Оседлать Сейчас", + "rideLater": "Оседлать Позже", "petName": "<%= potion %> <%= egg %>", "mountName": "<%= potion %> <%= mount %>", "petKeyName": "Ключ от Вольеров", diff --git a/common/locales/ru/quests.json b/common/locales/ru/quests.json index 18abfaa5ea..1157cf66b9 100644 --- a/common/locales/ru/quests.json +++ b/common/locales/ru/quests.json @@ -13,6 +13,7 @@ "youReceived": "Вы получили", "dropQuestCongrats": "Поздравляем с получением этого свитка квеста! Вы можете пригласить команду для начала квеста прямо сейчас или вернуться к нему позже в любое время через раздел Инвентарь > Квесты.", "questSend": "Нажатие кнопки «Пригласить» отправит приглашения всем членам команды. Когда все члены команды ответят на него (согласием или отказом), квест начнется. Текущий статус можно посмотреть во вкладке Общение > Команда", + "questSendBroken": "Нажатие на \"Пригласить\" отправит приглашения членам вашей команды... Когда все члены примут либо откажутся, квест стартует... Статус отображается по адресу Общение > Команда...", "inviteParty": "Пригласить команду в квест", "questInvitation": "Приглашение на участие в квесте", "questInvitationTitle": "Приглашение на квест", @@ -24,19 +25,25 @@ "rejected": "Отклонено", "pending": "В ожидании", "questStart": "Квест начнется, когда все члены команды примут или отклонят его. Принять участие и получить выпадающие предметы смогут только те, кто нажал «принять». Если на приглашение не отвечают слишком долго (неактивный аккаунт?), владелец квеста может начать без них, нажав «Начать». Он также может отменить квест и получить свиток квеста обратно, нажав \"Отменить\"", + "questStartBroken": "Как только все члены команды примут либо отменят приглашение, квест начинается... Только те, кто нажали \"принять\", смогут участвовать в квесте и получить трофеи... Если члены слишком долго не действуют (либо неактивны), владелец квеста может начать квест без них, нажав \"Начать\"... Владелец квеста также может отменить квест и снова получить квестовый свиток, нажав \"Отмена\"...", "begin": "Начать", "bossHP": "Здоровье босса", "bossStrength": "Сила босса", - "rage": "Rage", + "rage": "Ярость", "collect": "Собрать", "collected": "Собрано", "collectionItems": "<%= items %>: <%= number %> шт. ", "itemsToCollect": "Предметы для сбора", "bossDmg1": "Босс получает урон от каждого завершенного ежедневного задания, каждой задачи и каждой полезной привычки. Вы можете нанести больше урона, выполняя красные задания и используя Мощный удар или Всплеск пламени. Босс нанесет урон каждому участнику квеста за каждое пропущенное ежедневное задание (ущерб от задания, умноженный на силу босса) в дополнение к обычному урону. Старайтесь поддерживать здоровье команды, выполняя ежедневные задания! Весь урон, нанесенный команде и боссу, засчитывается в момент смены суток (по окончании вашего дня).", "bossDmg2": "Только участники будут сражаться с боссом и разделят квестовые трофеи.", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "Босс получает урон от каждого завершенного ежедневного задания, каждой задачи и каждой полезной привычки... Вы можете нанести больше урона, выполняя красные задания и используя Мощный удар или Всплеск пламени... Босс нанесет урон каждому участнику квеста за каждое пропущенное ежедневное задание (ущерб от задания, умноженный на силу босса) в дополнение к обычному урону... Старайтесь поддерживать здоровье команды, выполняя ежедневные задания... Весь урон, нанесенный команде и боссу, засчитывается в момент смены суток (по окончании вашего дня)...", + "bossDmg2Broken": "Только участники будут сражаться с боссом и разделят квестовые трофеи.", + "tavernBossInfo": "Завершайте Ежедневные Задания и отмечайте положительные Привычки, чтобы нанести урон Мировому Боссу! Незавершённые Ежедневные Задания заполнят Шкалу Изнуряющего Удара. Когда Шкала Изнуряющего Удара заполнена, Мировой Босс нанесёт атаку неигровому персонажу. Мировой Босс никак и никогда не нанесёт урона вашему личному персонажу или вашему аккаунту. Задание будет засчитанно только активным аккаунтам, которые не отдыхают в Гостинице.", + "tavernBossInfoBroken": "Завершайте Ежедневные Задания и отмечайте положительные Привычки, чтобы нанести урон Мировому Боссу... Незавершённые Ежедневные Задания заполнят Шкалу Изнуряющего Удара... Когда Шкала Изнуряющего Удара заполнена, Мировой Босс нанесёт атаку неигровому персонажу... Мировой Босс никак и никогда не нанесёт урона вашему личному персонажу или вашему аккаунту... Задание будет засчитанно только активным аккаунтам, которые не отдыхают в Гостинице...", "bossColl1": "Чтобы собирать предметы, выполняйте положительные задания. Квестовые предметы падают точно так же, как обычные; однако, вы не увидите, что упало, до начала следующего дня — тогда всё, что вы нашли, будет посчитано и сложено в общую стопку.", "bossColl2": "Только участники могут собрать предметы и разделять квестовые трофеи.", + "bossColl1Broken": "Чтобы собрать предметы, выполняйте свои положительные задания... Квестовые предметы выпадают так же часто, как и обычные; однако, вы не увидите трофеи до следующего дня, тогда всё, что вы нашли, будет подсчитано и внесено в штабель...", + "bossColl2Broken": "Только участники могут собирать предметы и разделять квестовые трофеи.", "abort": "Прервать", "leaveQuest": "Покинуть квест", "sureLeave": "Вы уверены, что хотите покинуть активный квест? Весь ваш прогресс будет потерян.", @@ -63,10 +70,13 @@ "sureAbort": "Вы уверены, что хотите отменить эту миссию? Она отменится для всех членов группы, весь прогресс будет утерян. Свиток вернется к владельцу квеста.", "doubleSureAbort": "Вы точно-точно уверены? Подумайте, не будут ли они ненавидеть вас всю жизнь после этого?", "questWarning": "Получайте приглашение на участие в квесте до его начала, т.к. после старта ни один новый член команды не сможет к нему присоединиться.", + "questWarningBroken": "Если новые игроки присоединяются к команде до того, как квест начинается, они также получат приглашение... Однако, как только квест начался, новые члены команды не смогут присоединиться к квесту...", "bossRageTitle": "Ярость", "bossRageDescription": "Когда полоска заполнится, босс произведет особую атаку!", "startAQuest": "НАЧАТЬ КВЕСТ", "startQuest": "Начать квест", "whichQuestStart": "Какой квест вы хотите начать?", - "getMoreQuests": "Получить больше квестов" + "getMoreQuests": "Получить больше квестов", + "unlockedAQuest": "Вы разблокировали квест!", + "leveledUpReceivedQuest": "Вы повысили свой уровень до Уровня <%= level %> и получили квестовый свиток!" } \ No newline at end of file diff --git a/common/locales/ru/questscontent.json b/common/locales/ru/questscontent.json index 150e1f3cbb..8342959722 100644 --- a/common/locales/ru/questscontent.json +++ b/common/locales/ru/questscontent.json @@ -250,16 +250,28 @@ "questHorseBoss": "Лошмар", "questHorseDropHorseEgg": "Лошадь (яйцо)", "questHorseUnlockText": "Позволяет покупать на рынке лошадь в яйце.", - "questBurnoutText": "Burnout and the Exhaust Spirits", - "questBurnoutNotes": "It is well past midnight, still and stiflingly hot, when Redphoenix and scout captain Kiwibot abruptly burst through the city gates. \"We need to evacuate all the wooden buildings!\" Redphoenix shouts. \"Hurry!\"

Kiwibot grips the wall as she catches her breath. \"It's draining people and turning them into Exhaust Spirits! That's why everything was delayed. That's where the missing people have gone. It's been stealing their energy!\"

\"'It'?'\" asks Lemoness.

And then the heat takes form.

It rises from the earth in a billowing, twisting mass, and the air chokes with the scent of smoke and sulphur. Flames lick across the molten ground and contort into limbs, writhing to horrific heights. Smoldering eyes snap open, and the creature lets out a deep and crackling cackle.

Kiwibot whispers a single word.

\"Burnout.\"", + "questBurnoutText": "Перегорание и истощённые духи", + "questBurnoutNotes": "Уже далеко за полночь, в городе спокойно и очень душно. Вдруг Redphoenix и капитан скаутов Kiwibot резко врываются через городские ворота. \"Нам нужно спасти все деревянные здания!\" - кричит Redphoenix, - \"Торопитесь!\".

Kiwibot цепляется за стену, переводя дыхание. \"Оно высасывает силы людей и превращает их в Истощённых Духов! Вот почему все дела откладывались. Теперь ясно, куда пропали недостающие люди. Оно крало их энергию!\"

\"Оно..?\" - спросила Lemoness.

Неожиданно тепло обретает форму.

Оно поднимается с земли в форме развевающейся, скручивающейся массы, и воздух переполняется запахами дыма и серы. Корчась и поднимаясь до страшных высот, пламя растекается по расплавленной земле, на кончиках искривляясь. Дымящиеся глаза распахиваются, и тварь издаёт глубокое и трещащее гоготание.

Kiwibot прошептала единое слово.

\"Перегорание.\"", "questBurnoutCompletion": "Burnout is DEFEATED!

With a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.

Ian, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!

\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!

One of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"

Her tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"

She claps her hands. \"Now - let's celebrate!\"", "questBurnoutCompletionChat": "`Burnout is DEFEATED!`\n\nWith a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.\n\nIan, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!\n\n\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!\n\nOne of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"\n\nHer tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"\n\nShe claps her hands. \"Now - let's celebrate!\"\n\nAll Habiticans receive:\n\nPhoenix Pet\nPhoenix Mount\nAchievement: Savior of the Flourishing Fields\nBasic Candy\nVanilla Candy\nSand Candy\nCinnamon Candy\nChocolate Candy\nRotten Candy\nSour Pink Candy\nSour Blue Candy\nHoney Candy", - "questBurnoutBoss": "Burnout", - "questBurnoutBossRageTitle": "Exhaust Strike", - "questBurnoutBossRageDescription": "When this gauge fills, Burnout will unleash its Exhaust Strike on Habitica!", - "questBurnoutDropPhoenixPet": "Phoenix (Pet)", - "questBurnoutDropPhoenixMount": "Phoenix (Mount)", - "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", + "questBurnoutBoss": "Выгорание", + "questBurnoutBossRageTitle": "Изнуряющий Удар", + "questBurnoutBossRageDescription": "Когда эта шкала заполнится, Выгорание выпустит свой Изнуряющий Удар на страну Habitica!", + "questBurnoutDropPhoenixPet": "Феникс (питомец)", + "questBurnoutDropPhoenixMount": "Феникс (скакун)", + "questBurnoutBossRageQuests": "`Выгорание применяет ИЗНУРЯЮЩИЙ УДАР!`\n\nО нет! Несмотря на все наши усилия, мы упустили из виду несколько ежедневных заданий, и теперь Выгорание вспыхнуло энергией! Рыча с треском, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!", + "questFrogText": "Болото Лягушки Беспорядка", + "questFrogNotes": "Вы и ваши друзья пробираетесь через Болото Застоя, @starsystemic указывает на большой знак. \"Оставайтесь на тропе, если сможете.\"

\"Конечно, это не сложно!\" сказал @RosemonkeyCT. \"Она широкая и чистая.\"

Но когда вы пытаетесь пройти дальше, то замечаете, что тропу начинает покрывать болотная грязь с вкраплениями голубых обломков и мусора. Наконец вы понимаете, что не можете идти дальше..

Вы огляделись, удивляясь тому, откуда взялся этот беспорядок, @Jon Arjinborn вскрикнул \"Берегись!\" Злая лягушка выпрыгнула из ила, покрытая грязным бельем и святящаяся голубым огнем. Вам придется преодолеть эту отвратительную Лягушку Беспорядка, чтобы пройти дальше!", + "questFrogCompletion": "Проиграв, лягушка прячется обратно в грязь. Как только он ускользну, синяя слизь исчезла, открывая путь вперед.

В середине тропе лежат три нетронутых яйца. \"Вы даже можете увидеть крошечных головастиков через тонкую скорлупу!\" сказал @Breadstrings. \"Возьмите, вы должны их принять.\"", + "questFrogBoss": "Лягушка Беспорядка", + "questFrogDropFrogEgg": "Лягушонок (Яйцо)", + "questFrogUnlockText": "Позволяет покупать на рынке Лягушонка в яйце.", + "questSnakeText": "Змей Безумаия", + "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveler astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", + "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", + "questSnakeBoss": "Змей Безумаия", + "questSnakeDropSnakeEgg": "Змея (Яйцо)", + "questSnakeUnlockText": "Позволяет покупать на рынке Змею в яйце." } \ No newline at end of file diff --git a/common/locales/ru/rebirth.json b/common/locales/ru/rebirth.json index 4503109b0d..d100b6206b 100644 --- a/common/locales/ru/rebirth.json +++ b/common/locales/ru/rebirth.json @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "А еще вы получите достижение за начало нового приключения!", "beReborn": "Родитесь заново", "rebirthAchievement": "Вы начали новое приключение! Это ваше возрождение <%= number %> и самый высокий уровень, который вы достигали — <%= level %>. Чтобы увеличить это достижение, начните свое следующее новое приключение после того, как достигните еще более высокого уровня!", + "rebirthAchievement100": "Вы начали новое приключение! Это Возрождение <%= number %> для вас, и наивысший Уровень, которого вы достигли равен или больше 100. Чтобы накапливать это Достижение, начните своё следующее новое приключение, когда вы достигнете по крайней мере 100 уровня!", "rebirthBegan": "Начато новое приключение", "rebirthText": "Начато новых приключений: <%= rebirths %>", "rebirthOrb": "Использован шар возрождения, чтобы начать заново после достижения уровня", + "rebirthOrb100": "Использован шар возрождения, чтобы начать заново после достижения уровня 100 или выше.", "rebirthPop": "Начните заново с персонажем 1 уровня, сохранив достижения, коллекционные предметы и задания с историей.", "rebirthName": "Шар возрождения", "reborn": "Возрождение, макс. уровень <%= reLevel %>" diff --git a/common/locales/ru/settings.json b/common/locales/ru/settings.json index 4a760f72c8..2d9ef366d0 100644 --- a/common/locales/ru/settings.json +++ b/common/locales/ru/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "Когда этот параметр включен, при открытии задания для редактирования список тегов будет отображаться в свернутом виде.", "startAdvCollapsed": "Раздел «Дополнительные параметры» в задачах свернут по умолчанию", "startAdvCollapsedPop": "Когда этот параметр включен, при открытии задания для редактирования раздел «Дополнительные параметры» будет отображаться в свернутом виде.", + "dontShowAgain": "Не показывать это снова", + "suppressLevelUpModal": "Не показывать всплывающее сообщение при повышении уровня", + "suppressHatchPetModal": "Не показывать всплывающее сообщение при повышении уровня", + "suppressRaisePetModal": "Не показывать всплывающее сообщение при выращивании питомца в скакуна", + "suppressStreakModal": "Не показывать всплывающее сообщение при получении достижения Серии", "showTour": "Показать тур", "restartTour": "Запустить ознакомительный тур, который вы видели, когда зарегистрировались на Habitica.", "showBailey": "Показать Бэйли", @@ -81,7 +86,6 @@ "emailChange1": "Чтобы изменить ваш email, пожалуйста, отправьте email на", "emailChange2": "admin@habitica.com", "emailChange3": "включая ваш старый и новый адреса электронной почты, а также ваш User ID", - "username": "Имя пользователя", "usernameOrEmail": "Имя пользователя или e-mail", "email": "Электронная почта", "registeredWithFb": "Зарегистрирован с помощью Facebook", @@ -118,5 +122,29 @@ "promoCode": "Промокод", "promoCodeApplied": "Промокод принят! Проверьте инвентарь", "promoPlaceholder": "Введите Промокод", - "displayInviteToPartyWhenPartyIs1": "Отображать кнопку приглашения в команду, когда в команде 1 человек" + "displayInviteToPartyWhenPartyIs1": "Отображать кнопку приглашения в команду, когда в команде 1 человек", + "saveCustomDayStart": "Сохранить персональное начало суток", + "registration": "Регистрация", + "addLocalAuth": "Добавить локальную аутентификацию:", + "generateCodes": "Сгенерировать коды", + "generate": "Сгенерировать", + "getCodes": "Получить коды", + "webhooks": "Веб-хуки", + "enabled": "Включено", + "webhookURL": "Ссылка на веб-хук", + "add": "Добавить", + "buyGemsGoldCap": "Предел повышен до <%= amount %>", + "mysticHourglass": "Кол-во мистических песочных часов: <%= amount %>", + "mysticHourglassText": "Мистические Песочные часы позволяют покупку Комплекта Таинственных предметов предыдущего месяца", + "purchasedPlanId": "Возобновляемая подписка за <%= price %> долларов каждые <%= months %> мес. (<%= plan %>)", + "purchasedPlanExtraMonths": "Вы были подписаны в течение <%= months %> мес.", + "consecutiveSubscription": "Непрерывная подписка", + "consecutiveMonths": "Месяцев подряд:", + "gemCapExtra": "Доп. предел самоцветов:", + "mysticHourglasses": "Мистические песочные часы:", + "paypal": "PayPal", + "amazonPayments": "Платёж с помощью Amazon", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/ru/spells.json b/common/locales/ru/spells.json index 4e913eff47..879fe49dc5 100644 --- a/common/locales/ru/spells.json +++ b/common/locales/ru/spells.json @@ -19,7 +19,7 @@ "spellRoguePickPocketNotes": "Вы грабите ближайшую задачу. Вы получаете золото! Нажмите на одно из заданий для применения. (На основе ВОС)", "spellRogueBackStabText": "Удар в спину", "spellRogueBackStabNotes": "Вы предаете глупое задание. Вы получаете золото и очки опыта! Нажмите на одно из заданий для применения. (На основе СИЛ)", - "spellRogueToolsOfTradeText": "Орудия труда", + "spellRogueToolsOfTradeText": "Орудия Труда", "spellRogueToolsOfTradeNotes": "Вы делитесь своими талантами с друзьями. Вся ваша команда получает баф к восприятию! (На основе ВОС без бафов)", "spellRogueStealthText": "Уйти в тень", "spellRogueStealthNotes": "Вы скрытны и вас невозможно заметить. Часть невыполненных ежедневных заданий не нанесут вреда сегодня, и их серии / цвет не изменятся. (Наложите заклинание несколько раз, чтобы охватить больше ежедневных заданий)", @@ -37,7 +37,7 @@ "spellSpecialSaltNotes": "Кто-то кинул в вас снежок. Ха-ха, очень смешно. А теперь стряхните с меня снег!", "spellSpecialSpookDustText": "Зловещие искры", "spellSpecialSpookDustNotes": "Превратите друга в парящую простыню с глазами!", - "spellSpecialOpaquePotionText": "Эликсир непрозрачности", + "spellSpecialOpaquePotionText": "Зелье Непроницаемости", "spellSpecialOpaquePotionNotes": "Отменить эффект Зловещих искр", "spellSpecialShinySeedText": "Солнечное семя", "spellSpecialShinySeedNotes": "Превратите друга в радостный цветок!", diff --git a/common/locales/ru/subscriber.json b/common/locales/ru/subscriber.json index 0e5086958c..44e2a33bf4 100644 --- a/common/locales/ru/subscriber.json +++ b/common/locales/ru/subscriber.json @@ -60,7 +60,7 @@ "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> и <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitle": "Загадочные путешественники во времени", "timeTravelersPopoverNoSub": "Вам понадобятся мистические песочные часы, чтобы призвать загадочных путешественников во времени. <%= linkStart %>Подписчики<%= linkEnd %> получают одни песочные часы за каждые три месяца непрерывной подписки. Возвращайтесь, когда у вас будут песочные часы, и путешественники во времени добудут вам редкого питомца, скакуна или подарочный набор подписчика из прошлого... или даже из будущего.", - "timeTravelersPopover": "Раз у тебя вас мистические песочные часы, мы счастливы отправиться для тебя в прошлое! Пожалуйста, выбери питомца, скакуна или таинственный набор, который ты хочешь получить. Посмотреть список прошлых наборов можно <%= linkStart %>здесь<%= linkEnd %>! Если этого недостаточно, то, возможно, тебя заинтересует один из наших модных футуристических наборов в стиле стимпанк?", + "timeTravelersPopover": "Видно, что вы с Мистическими песочными часами, так что мы с радостью отправимся для вас в прошлое! Пожалуйста, выберите себе питомца, скакуна, или Комплект Таинственных предметов. Вы можете увидеть список прошлых комплектов здесь! Если они вам не подходят, возможно, вы будете заинтересованы в одном из наших модных футуристических Комплектов в стиле Стимпанк?", "timeTravelersAlreadyOwned": "Поздравляем! У вас уже есть все предметы, которые могут предложить путешественники во времени. Благодарим за поддержку сайта!", "mysticHourglassPopover": "Загадочные песочные часы позволят вам приобрести определённые предметы, которые были лишь временно доступны когда-то. Например, наборы таинственных предметов и награды за мировых боссов. Прямо из прошлого!", "subUpdateCard": "Обновить карточку", diff --git a/common/locales/ru/tasks.json b/common/locales/ru/tasks.json index e7f48c020e..7b1b8e9c71 100644 --- a/common/locales/ru/tasks.json +++ b/common/locales/ru/tasks.json @@ -88,8 +88,7 @@ "fortifyText": "Укрепление вернёт все ваши задания в нейтральный (жёлтый) цвет, как будто бы вы их только что добавили, и восстановит всё здоровье до максимума. Это пригодится, если все ваши красные задания слишком усложняют, а синие — слишком упрощают игру. Если новое, свежее начало даст вам больше сил и мотивации, не пожалейте самоцветов и получите временное облегчение!", "sureDelete": "Вы уверены, что хотите удалить эту задачу?", "streakCoins": "Бонус за серию!", - "pushTaskToTop": "Переместить задание наверх", - "pushTaskToBottom": "Переместить задание вниз", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "Сначала введите название задания.", "dailiesRestingInInn": "Вы отдыхаете в Гостинице! Пропущенные Ежедневные задания НЕ причинят вам вреда в конце сегодняшнего дня, но отметки об их выполнении БУДУТ сбрасываться каждый день. Если ваша Команда участвует к квесте, вы не будете наносить урон / находить предметы, пока не покинете Гостиницу. В то же время Босс все же будет наносить урон вам за Ежедневные задания, пропущенные вашими товарищами по Команде.", "habitHelp1": "Полезные привычки – это то, что вы делаете часто. За них вы получаете золото и опыт после каждого нажатия на <%= plusIcon %>.", diff --git a/common/locales/sk/backgrounds.json b/common/locales/sk/backgrounds.json index dfd4e45056..a2757e770f 100644 --- a/common/locales/sk/backgrounds.json +++ b/common/locales/sk/backgrounds.json @@ -118,5 +118,19 @@ "backgroundSlimySwampText": "Slimy Swamp", "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness.", + "backgrounds112015": "SET 18: Released November 2015", + "backgroundFloatingIslandsText": "Floating Islands", + "backgroundFloatingIslandsNotes": "Hop across the Floating Islands.", + "backgroundNightDunesText": "Night Dunes", + "backgroundNightDunesNotes": "Walk peacefully through the Night Dunes.", + "backgroundSunsetOasisText": "Sunset Oasis", + "backgroundSunsetOasisNotes": "Bask in the Sunset Oasis.", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/sk/challenge.json b/common/locales/sk/challenge.json index 78168ec06b..b499fd1143 100644 --- a/common/locales/sk/challenge.json +++ b/common/locales/sk/challenge.json @@ -59,5 +59,9 @@ "challengeNotEnoughGems": "Na vytvorenie výzvy nemáš dosť drahokamov.", "noPermissionEditChallenge": "You don't have permissions to edit this challenge", "noPermissionDeleteChallenge": "You don't have permissions to delete this challenge", - "noPermissionCloseChallenge": "You don't have permissions to close this challenge" + "noPermissionCloseChallenge": "You don't have permissions to close this challenge", + "congratulations": "Congratulations!", + "hurray": "Hurray!", + "noChallengeOwner": "no owner", + "noChallengeOwnerPopover": "This challenge does not have an owner because the person who created the challenge deleted their account." } \ No newline at end of file diff --git a/common/locales/sk/character.json b/common/locales/sk/character.json index 840edf3dbb..f22dc8034b 100644 --- a/common/locales/sk/character.json +++ b/common/locales/sk/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "Bonus za povolanie", "battleGear": "Bojová výzbroj", "battleGearText": "Toto je výzbroj, ktorú nosíš do boja; ovplyvňuje čísla pri interakcii s úlohami.", + "autoEquipBattleGear": "Auto-equip new gear", "costume": "Kostým", "costumeText": "Ak chceš radšej vyzerať inak, než vyzeráš so svojou aktuálnou bojovou výzbrojou, zaškrtni \"použiť kostým\", aby si si mohol zvoliť oblečenie, ktoré sa ti páči, no zároveň získavať bonusy za svoju najlepšiu bojovú výzbroj.", "useCostume": "Použiť kostým", @@ -64,6 +65,10 @@ "ultimGearText": "Has upgraded to the maximum weapon and armor set for the following classes:", "level": "Level", "levelUp": "Získal si nový level!", + "gainedLevel": "You gained a level!", + "leveledUp": "By accomplishing your real-life goals, you've grown to Level <%= level %>!", + "fullyHealed": "You have been fully healed!", + "huzzah": "Huzzah!", "mana": "Mana", "hp": "HP", "mp": "MP", diff --git a/common/locales/sk/communityguidelines.json b/common/locales/sk/communityguidelines.json index 4f49cf92a3..05303e0761 100644 --- a/common/locales/sk/communityguidelines.json +++ b/common/locales/sk/communityguidelines.json @@ -43,7 +43,7 @@ "commGuideList02I": "Do not spam. Spamming may include, but is not limited to: posting the same comment or query in multiple places, posting links without explanation or context, posting nonsensical messages, or posting many messages in a row. Repeatedly begging for gems or a subscription may also be considered spamming.", "commGuidePara019": "Na súkromných miestach, majú užívatelia viac voľnosti na diskusiu ľubovoľnej témy, ale stále nesmú porušiť Podmienky a Pravidlá Užívania, vrátane zdieľania akéhokoľvek diskriminačného, násilného alebo výhražného obsahu. ", "commGuidePara020": "Private Messages (PMs) have some additional guidelines. If someone has blocked you, do not contact them elsewhere to ask them to unblock you. Additionally, you should not send PMs to someone asking for support (since public answers to support questions are helpful to the community). Finally, do not send anyone PMs begging for a gift of gems or a subscription, as this can be considered spamming.", - "commGuidePara021": "Furthermore, some public spaces in Habitica have additional guidelines.", + "commGuidePara021": "Okrem toho majú niektoré verejné priestory vo svete Habitica ďalšie pokyny.", "commGuideHeadingTavern": "Hostinec", "commGuidePara022": "The Tavern is the main spot for Habiticans to mingle. Daniel the Barkeep keeps the place spic-and-span, and Lemoness will happily conjure up some lemonade while you sit and chat. Just keep in mind...", "commGuidePara023": "Conversation tends to revolve around casual chatting and productivity or life improvement tips.", diff --git a/common/locales/sk/content.json b/common/locales/sk/content.json index 7d41263119..fe555e67d3 100644 --- a/common/locales/sk/content.json +++ b/common/locales/sk/content.json @@ -95,6 +95,12 @@ "questEggHorseText": "Horse", "questEggHorseMountText": "Horse", "questEggHorseAdjective": "a galloping", + "questEggFrogText": "Frog", + "questEggFrogMountText": "Frog", + "questEggFrogAdjective": "a princely", + "questEggSnakeText": "Snake", + "questEggSnakeMountText": "Snake", + "questEggSnakeAdjective": "a slithering", "eggNotes": "Find a hatching potion to pour on this egg, and it will hatch into <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "Základný", "hatchingPotionWhite": "Biely", diff --git a/common/locales/sk/death.json b/common/locales/sk/death.json index b7032d7a73..600c6164d5 100644 --- a/common/locales/sk/death.json +++ b/common/locales/sk/death.json @@ -1,7 +1,16 @@ { - "lostAllHealth": "You ran out of Health!", - "dontDespair": "Don't despair!", - "deathPenaltyDetails": "You lost a Level, your Gold, and a piece of Equipment, but you can get them all back with hard work! Good luck--you'll do great.", - "refillHealthTryAgain": "Refill Health & Try Again", - "dyingOftenTips": "Is this happening often? Here are some tips!" + "lostAllHealth": "Došiel ti život!", + "dontDespair": "Nezúfaj!", + "deathPenaltyDetails": "Stratil si level, tvoje zlato a kus výstroje, ale s tvrdú prácu ich môžeš všetky získať späť! Veľa šťastia - pôjde ti to skvelo.", + "refillHealthTryAgain": "Doplň si život a skús znova", + "dyingOftenTips": "Stáva sa to často? Tu sú nejaké tipy! ", + "losingHealthWarning": "Pozor - Strácaš život!", + "losingHealthWarning2": "Nedopusti, aby tvoj život klesol na nulu! Ak sa to udeje, stratíš level, tvoje zlato a časť výstroje.", + "toRegainHealth": "Ak chcete znova získať život:", + "lowHealthTips1": "Dosiahni celý level, aby si sa plne uzdravil!", + "lowHealthTips2": "Zakúp si lektvar života zo stĺpca odmien, aby si obnovil 15 bodov života.", + "losingHealthQuickly": "Strácaš život rýchlo?", + "lowHealthTips3": "Nedokončené denné úlohy ťa ublížia cez noc, takže buď opatrní, aby si ich nepridal príliš veľa na začiatku.", + "lowHealthTips4": "Ak denná úloha nieje splatná na určitý deň, môžete to vypnúť kliknutím na ikonu ceruzky.", + "goodLuck": "Veľa šťastia!" } \ No newline at end of file diff --git a/common/locales/sk/faq.json b/common/locales/sk/faq.json index c2a7b7deaf..587ba838c6 100644 --- a/common/locales/sk/faq.json +++ b/common/locales/sk/faq.json @@ -2,7 +2,7 @@ "frequentlyAskedQuestions": "Frequently Asked Questions", "faqQuestion0": "I'm confused. Where do I get an overview?", "iosFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn experience and gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as Pets, Skills, and Quests! You can customize your character under Menu > Customize Avatar.\n\n Some basic ways to interact: click the (+) in the upper-right-hand corner to add a new task. Tap on an existing task to edit it, and swipe left on a task to delete it. You can sort tasks using Tags in the upper-left-hand corner, and expand and contract checklists by clicking on the checklist bubble.", - "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, the wiki has an excellent step-by-step overview of the game [right here](http://habitica.wikia.com/wiki/Habitica_Wiki).", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", "faqQuestion1": "How do I set up my tasks?", "iosFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.", "webFaqAnswer1": "Good Habits (the ones with a ) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a ) are tasks that you should avoid, like biting nails. Habits with a and a have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n

\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n

\n To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.", @@ -16,7 +16,7 @@ "iosFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you tap a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your Party and one of your Party mates did not complete all their Dailies, the Boss will attack you.\n\n The main way to heal is to gain a level, which restores all your health. You can also buy a Health Potion with gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a Party with a Healer, they can heal you as well.", "webFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you click a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your party and one of your party mates did not complete all their Dailies, the Boss will attack you.\n

\n The main way to heal is to gain a level, which restores all your Health. You can also buy a Health Potion with Gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a party (under Social > Party) with a Healer, they can heal you as well.", "faqQuestion5": "How do I play Habitica with my friends?", - "iosFaqAnswer5": "The best way is to invite them to a Party with you, via the [website](https://habitica.com/#/options/groups/party)! We'll add the ability to create a Party from this app soon, but in the meantime you can use the [website](https://habitica.com/#/options/groups/party). Parties can go on quests, battle monsters, and cast skills to support each other. On the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", + "iosFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on quests, battle monsters, and cast skills to support each other. Go to Menu > Party and click \"Create New Party\" if you don't already have a Party. Then tap on the Members list, and tap Invite in the upper right-hand corner to invite your friends by entering their User ID (a string of numbers and letters that they can find under Settings > Account Details on the app, and Settings > API on the website). On the website, you can also invite friends via email, which we will add to the app in a future update.\n\nOn the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", "webFaqAnswer5": "The best way is to invite them to a party with you, under Social > Party! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n

\n For more detailed info, check out the wiki pages on [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).", "faqQuestion6": "How do I get a Pet or Mount?", "iosFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch Egg.\" Then choose a hatching potion to determine its color! Go to Menu > Pets to equip your new Pet to your avatar by clicking on it. \n\n You can also grow your Pets into Mounts by feeding them under Menu > Pets. Tap on a Pet, and then select \"Feed Pet\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Menu > Mounts and tap on it to equip it to your avatar.\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", @@ -28,14 +28,17 @@ "iosFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Use Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in a special section in the Rewards Column. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You’ll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "faqQuestion9": "How do I fight monsters and go on Quests?", - "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party on the [website](https://habitica.com/#/options/groups/party), you'll be rewarded with the Basi-List Scroll! (We will add this feature to the app in a future update.)\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for gold and gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", + "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for Gold and Gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "webFaqAnswer9": "First, you need to join or start a party (under Social > Party). Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n

\n Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are three ways to get a scroll:\n

\n * When you invite people to your party, you’ll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Page (Inventory > Quests) for Gold and Gems.\n

\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your party at the same time that you damage the Boss.\n

\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "faqQuestion10": "What are gems, and how do I get them?", + "faqQuestion10": "What are Gems, and how do I get them?", "iosFaqAnswer10": "Gems are purchased with real money by tapping on the gem icon in the header. When people buy gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying gems directly, there are three other ways players can gain gems:\n\n * Win a Challenge on the [website](https://habitica.com) that has been set up by another player under Social > Challenges. (We will be adding Challenges to the app in a future update!)\n * Subscribe on the [website](https://habitica.com/#/options/settings/subscription) and unlock the ability to buy a certain number of gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with gems do not offer any statistical advantages, so players can still make use of the app without them!", "webFaqAnswer10": "Gems are [purchased with real money](https://habitica.com/#/options/settings/subscription), although [subscribers](https://habitica.com/#/options/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n

\n In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n

\n * Win a Challenge that has been set up by another player under Social > Challenges.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", "faqQuestion11": "How do I report a bug or request a feature?", "iosFaqAnswer11": "You can report a bug, request a feature, or send feedback under Menu > Report a Bug and Menu > Send Feedback! We'll do everything we can to assist you.", "webFaqAnswer11": "Bug reports are collected on GitHub. Go to [Help > Report a Bug](https://github.com/HabitRPG/habitrpg/issues/2760) and follow the instructions. Don't worry, we'll get you fixed up soon!\n

\n Feature requests are collected on Trello. Go to [Help > Request a Feature](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) and follow the instructions. Ta-da!", + "faqQuestion12": "How do I battle a World Boss?", + "iosFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", + "webFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n

\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n

\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n

\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", "iosFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the Tavern chat under Menu > Tavern! We're happy to help.", "webFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the [Newbies Guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help." } \ No newline at end of file diff --git a/common/locales/sk/front.json b/common/locales/sk/front.json index dc30d3dc54..264f9bb539 100644 --- a/common/locales/sk/front.json +++ b/common/locales/sk/front.json @@ -74,7 +74,7 @@ "infhQuote": "[Habitica] has really helped me impart structure to my life in graduate school.", "invalidEmail": "Ak chceš resetovať heslo, musíš zadať platnú emailovú adresu.", "irishfeet123Quote": "I've had horrible habits with clearing my place completely after meals and leaving cups all over the place. [Habitica] has cured that!", - "joinOthers": "Join 250,000 people making it fun to achieve goals!", + "joinOthers": "Join <%= userCount %> people making it fun to achieve goals!", "kazuiQuote": "Before [Habitica], I was stuck with my thesis, as well as dissatisfied with my personal discipline regarding housework and things like learning vocabulary and studying Go theory. It turns out breaking down these tasks into smaller manageable checklists is quite the thing to keep me motivated and constantly working.", "landingadminlink": "balíčky", "landingend": "Ešte stále sme ťa nepresvedčili?", @@ -179,5 +179,14 @@ "businessInquiries": "Business Inquiries", "merchandiseInquiries": "Merchandise Inquiries", "marketingInquiries": "Marketing/Social Media Inquiries", - "tweet": "Tweet" + "tweet": "Tweet", + "apps": "Apps", + "notifyAndroidApp": "Want us to notify you when the Android app is ready? Sign up for this mailing list!", + "checkOutIOSApp": "Check out our new iOS App!", + "imagine1": "Imagine if improving your life were as fun as playing a game.", + "landingCopy1": "Advance in the game by completing your real-life tasks.", + "landingCopy2": "Battle monsters with friends to stay accountable to your goals.", + "landingCopy3": "Join over <%= userCount %> people having fun as they improve their lives.", + "alreadyHaveAccount": "I already have an account!", + "getStartedNow": "Get Started Now!" } \ No newline at end of file diff --git a/common/locales/sk/gear.json b/common/locales/sk/gear.json index 4d8e80403a..f1544173ca 100644 --- a/common/locales/sk/gear.json +++ b/common/locales/sk/gear.json @@ -149,13 +149,19 @@ "weaponArmoireRancherLassoText": "Rancher Lasso", "weaponArmoireRancherLassoNotes": "Lassos: the ideal tool for rounding up and wrangling. Increases Strength by <%= str %>, Perception by <%= per %>, and Intelligence by <%= int %>. Enchanted Armoire: Rancher Set (Item 3 of 3).", "weaponArmoireMythmakerSwordText": "Mythmaker Sword", - "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3)", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Iron Crook", - "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3)", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Gold Wing Staff", "weaponArmoireGoldWingStaffNotes": "The wings on this staff constantly flutter and twist. Increases all attributes by <%= attrs %> each. Enchanted Armoire: Independent Item.", "weaponArmoireBatWandText": "Bat Wand", "weaponArmoireBatWandNotes": "This wand can turn any task into a bat! Wave it about and watch them fly away. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireShepherdsCrookText": "Shepherd's Crook", + "weaponArmoireShepherdsCrookNotes": "Useful for herding gryphons. Increases Constitution by <%= con %>. Enchanted Armoire: Shepherd Set (Item 1 of 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "armor", "armorBase0Text": "Prosté ošatenie", "armorBase0Notes": "Bežné ošatenie. Neposkytuje žiadne výhody.", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "Silly Party Robes", "armorSpecialBirthday2015Notes": "Happy Birthday, Habitica! Wear these Silly Party Robes to celebrate this wonderful day. Confers no benefit.", "armorSpecialGaymerxText": "Rainbow Warrior Armor", - "armorSpecialGaymerxNotes": "In celebration of pride season and GaymerX, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGBTQ and gaming and is open to everyone. It takes place at the InterContinental in downtown San Francisco on July 11-13! Confers no benefit.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "Priliehavý mačací oblek", "armorSpecialSpringRogueNotes": "Impeccably groomed. Increases Perception by <%= per %>. Limited Edition 2014 Spring Gear.", "armorSpecialSpringWarriorText": "Brnenie z ďatelinovej ocele", @@ -307,6 +313,8 @@ "armorMystery201508Notes": "Run fast as a flash in the fluffy Cheetah Costume! Confers no benefit. August 2015 Subscriber Item.", "armorMystery201509Text": "Werewolf Costume", "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Steampunk Suit", "armorMystery301404Notes": "Dapper and dashing, wot! Confers no benefit. February 3015 Subscriber Item.", "armorArmoireLunarArmorText": "Soothing Lunar Armor", @@ -321,6 +329,12 @@ "armorArmoireHornedIronArmorNotes": "Fiercely hammered from iron, this horned armor is nearly impossible to break. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Horned Iron Set (Item 2 of 3).", "armorArmoirePlagueDoctorOvercoatText": "Plague Doctor Overcoat", "armorArmoirePlagueDoctorOvercoatNotes": "An authentic overcoat worn by the doctors who battle the Plague of Procrastination! Increases Intelligence by <%= int %>, Strength by <%= str %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 3 of 3).", + "armorArmoireShepherdRobesText": "Shepherd Robes", + "armorArmoireShepherdRobesNotes": "The fabric is cool and breathable, perfect for a hot day herding gryphons in the desert. Increases Strength and Perception by <%= attrs %> each. Enchanted Armoire: Shepherd Set (Item 2 of 3).", + "armorArmoireRoyalRobesText": "Royal Robes", + "armorArmoireRoyalRobesNotes": "Wonderful ruler, rule all day long! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 3 of 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "headgear", "headBase0Text": "Bez helmy", "headBase0Notes": "Bez pokrývky hlavy.", @@ -441,7 +455,7 @@ "headSpecialFall2015HealerText": "Hat of Frog", "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", "headSpecialGaymerxText": "Rainbow Warrior Helm", - "headSpecialGaymerxNotes": "In celebration of pride season and GaymerX, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGBTQ and gaming and is open to everyone. It takes place at the InterContinental in downtown San Francisco on July 11-13! Confers no benefit.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "Okrídlená helma", "headMystery201402Notes": "This winged circlet imbues the wearer with the speed of the wind! Confers no benefit. February 2014 Subscriber Item.", "headMystery201405Text": "Oheň mysle", @@ -464,6 +478,8 @@ "headMystery201508Notes": "This cozy cheetah hat is very fuzzy! Confers no benefit. August 2015 Subscriber Item.", "headMystery201509Text": "Werewolf Mask", "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 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", @@ -481,7 +497,7 @@ "headArmoireBlueHairbowText": "Blue Hairbow", "headArmoireBlueHairbowNotes": "Become perceptive, tough, and smart while wearing this beautiful Blue Hairbow! Increases Perception by <%= per %>, Constitution by <%= con %>, and Intelligence by <%= int %>. Enchanted Armoire: Independent Item.", "headArmoireRoyalCrownText": "Royal Crown", - "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Royal Set (Item 1 of 3).", "headArmoireGoldenLaurelsText": "Golden Laurels", "headArmoireGoldenLaurelsNotes": "These golden laurels reward those who have conquered bad habits. Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 2 of 3).", "headArmoireHornedIronHelmText": "Horned Iron Helm", @@ -496,6 +512,12 @@ "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", "headArmoireOrangeCatText": "Orange Cat Hat", "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireBlueFloppyHatText": "Blue Floppy Hat", + "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireShepherdHeaddressText": "Shepherd Headdress", + "headArmoireShepherdHeaddressNotes": "Sometimes the gryphons that you herd like to chew on this headdress, but it makes you seem more intelligent nonetheless. Increases Intelligence by <%= int %>. Enchanted Armoire: Shepherd Set (Item 3 of 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "shield-hand item", "shieldBase0Text": "No Shield-Hand Equipment", "shieldBase0Notes": "Bez štítu alebo druhej zbrane.", @@ -579,6 +601,8 @@ "shieldArmoireGladiatorShieldNotes": "To be a gladiator you must.... eh, whatever, just bash them with your shield. Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Gladiator Set (Item 3 of 3).", "shieldArmoireMidnightShieldText": "Midnight Shield", "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "shieldArmoireRoyalCaneText": "Royal Cane", + "shieldArmoireRoyalCaneNotes": "Hooray for the ruler, worthy of song! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 2 of 3).", "back": "Back Accessory", "backBase0Text": "No Back Accessory", "backBase0Notes": "No Back Accessory.", @@ -592,6 +616,8 @@ "backMystery201504Notes": "Buzz buzz buzz! Flit from task to task. Confers no benefit. April 2015 Subscriber Item.", "backMystery201507Text": "Rad Surfboard", "backMystery201507Notes": "Surf off the Diligent Docks and ride the waves in Inkomplete Bay! Confers no benefit. July 2015 Subscriber Item.", + "backMystery201510Text": "Goblin Tail", + "backMystery201510Notes": "Prehensile and powerful! Confers no benefit. October 2015 Subscriber Item.", "backSpecialWonderconRedText": "Mocný plášť", "backSpecialWonderconRedNotes": "Swishes with strength and beauty. Confers no benefit. Special Edition Convention Item.", "backSpecialWonderconBlackText": "Tajomný plášť", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "These powerful antlers change colors with the leaves. Confers no benefit. September 2014 Subscriber Item.", "headAccessoryMystery201502Text": "Wings of Thought", "headAccessoryMystery201502Notes": "Let your imagination take flight! Confers no benefit. February 2015 Subscriber Item.", + "headAccessoryMystery201510Text": "Goblin Horns", + "headAccessoryMystery201510Notes": "These fearsome horns are slightly slimy. Confers no benefit. October 2015 Subscriber Item.", "headAccessoryMystery301405Text": "Headwear Goggles", "headAccessoryMystery301405Notes": "\"Goggles are for your eyes,\" they said. \"Nobody wants goggles that you can only wear on your head,\" they said. Hah! You sure showed them! Confers no benefit. August 3015 Subscriber Item.", "eyewear": "Eyewear", diff --git a/common/locales/sk/generic.json b/common/locales/sk/generic.json index 4b6edeb4ed..f653fb654a 100644 --- a/common/locales/sk/generic.json +++ b/common/locales/sk/generic.json @@ -28,7 +28,7 @@ "market": "Trh", "subscriberItem": "Záhadný predmet", "newSubscriberItem": "Nový tajomný predmet", - "subscriberItemText": "Each month, subscribers will receive a mystery item. This is usually released about one week before the end of the month. See the wiki's 'Mystery Item' page for the exact date.", + "subscriberItemText": "Each month, subscribers will receive a mystery item. This is usually released about one week before the end of the month. See the wiki's 'Mystery Item' page for more information.", "all": "Všetko", "none": "Nič", "or": "Alebo", @@ -69,8 +69,9 @@ "habiticaDayPluralText": "Celebrated <%= number %> Naming Days! Thanks for being a fantastic user.", "achievementDilatory": "Savior of Dilatory", "achievementDilatoryText": "Helped defeat the Dread Drag'on of Dilatory during the 2014 Summer Splash Event!", - "costumeContest": "2014 Costume Contest", - "costumeContestText": "Participated in the 2014 Halloween Costume Contest. See some of the entries at blog.habitica.com/tagged/cosplay!", + "costumeContest": "Costume Contestant", + "costumeContestText": "Participated in the Habitoween Costume Contest. See some of the entries on the Habitica blog!", + "costumeContestTextPlural": "Participated in <%= number %> Habitoween Costume Contests. See some of the entries on the Habitica blog!", "memberSince": "- Členom od", "lastLoggedIn": "- Posledné prihlásenie", "notPorted": "Táto funkcia ešte nie je prenesená z pôvodnej stránky.", @@ -79,6 +80,7 @@ "errorUpCase": "CHYBA:", "newPassSent": "Nové heslo odoslané.", "serverUnreach": "Server je dočasne nedostupný.", + "requestError": "Yikes, an error occurred! Please reload the page, your last action may not have been saved correctly.", "seeConsole": "If the error persists, please report it at Help > Report a Bug. If you're familiar with your browser's console, please include any error messages.", "error": "Chyba", "menu": "Menu", @@ -133,5 +135,17 @@ "thankyou2": "Sending you a thousand thanks.", "thankyou3": "I'm very grateful - thank you!", "thankyouCardAchievementTitle": "Greatly Grateful", - "thankyouCardAchievementText": "Thanks for being thankful! Sent or received <%= cards %> Thank-You cards." + "thankyouCardAchievementText": "Thanks for being thankful! Sent or received <%= cards %> Thank-You cards.", + "streakAchievement": "You earned a streak achievement!", + "firstStreakAchievement": "21-Day Streak", + "streakAchievementCount": "<%= streaks %> 21-Day Streaks", + "twentyOneDays": "You've completed your Daily for 21 days in a row!", + "dontBreakStreak": "Amazing job. Don't break the streak!", + "dontStop": "Don't Stop Now!", + "levelUpShare": "I leveled up in Habitica by improving my real-life habits!", + "questUnlockShare": "I unlocked a new quest in Habitica!", + "hatchPetShare": "I hatched a new pet by completing my real-life tasks!", + "raisePetShare": "I raised a pet into a mount by completing my real-life tasks!", + "wonChallengeShare": "I won a challenge in Habitica!", + "achievementShare": "I earned a new achievement in Habitica!" } \ No newline at end of file diff --git a/common/locales/sk/groups.json b/common/locales/sk/groups.json index eadae1cebf..4e4a4e06b8 100644 --- a/common/locales/sk/groups.json +++ b/common/locales/sk/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "Odíď z hostinca", "innCheckIn": "Odpočiň si v hostinci", "innText": "You're resting in the Inn! While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day. Be warned: If you are participating in a Boss Quest, the Boss will still damage you for your party mates' missed Dailies unless they are also in the Inn! Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn.", + "innTextBroken": "You're resting in the Inn, I guess... While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day... If you are participating in a Boss Quest, the Boss will still damage you for your party mates' missed Dailies... unless they are also in the Inn... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn... so tired...", "lfgPosts": "Príspevky ľudí hľadajúcich skupiny (\"Zháňam družinu\")", "tutorial": "Návod", "glossary": "Glosár", @@ -145,5 +146,6 @@ "partyEmpty": "You're the only one in your party. Invite your friends!", "partyChatEmpty": "Your party chat is empty! Type a message in the box above to start chatting.", "guildChatEmpty": "This guild's chat is empty! Type a message in the box above to start chatting.", - "possessiveParty": "<%= name %>'s Party" + "possessiveParty": "<%= name %>'s Party", + "requestAcceptGuidelines": "If you would like to post messages in the Tavern or any party or guild chat, please first read our <%= linkStart %>Community Guidelines<%= linkEnd %> and then click the button below to indicate that you accept them." } \ No newline at end of file diff --git a/common/locales/sk/limited.json b/common/locales/sk/limited.json index c0dbaf518e..966c23938e 100644 --- a/common/locales/sk/limited.json +++ b/common/locales/sk/limited.json @@ -21,6 +21,7 @@ "valentineCardAchievementText": "Aww, you and your friend must really care about each other! Sent or received <%= cards %> Valentine's Day cards.", "polarBear": "Polárny medveď", "turkey": "Moriak", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "Polárne medvieďa", "jackolantern": "Jack-O-Lantern", "seasonalShop": "Sezónny obchod", @@ -30,6 +31,7 @@ "seasonalShopText": "Welcome to the Seasonal Shop!! We're stocking springtime Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Spring Fling event each year, but we're only open until April 30th, so be sure to stock up now, or you'll have to wait a year to buy these items again!", "seasonalShopSummerText": "Welcome to the Seasonal Shop!! We're stocking summertime Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Summer Splash event each year, but we're only open until July 31st, so be sure to stock up now, or you'll have to wait a year to buy these items again!", "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31, so be sure to stock up now, or you'll have to wait a year to buy these items again!", + "seasonalShopFallTextBroken": "Oh.... Welcome to the Seasonal Shop... We're stocking autumn Seasonal Edition goodies, or something... Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31... I guess you should to stock up now, or you'll have to wait... and wait... and wait... *sigh*", "seasonalShopRebirth": "If you've used the Orb of Rebirth, you can repurchase this equipment in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.", "candycaneSet": "Candy Cane (Mage)", "skiSet": "Ski-sassin (Rogue)", diff --git a/common/locales/sk/messages.json b/common/locales/sk/messages.json index cc53d74984..b1a55e3395 100644 --- a/common/locales/sk/messages.json +++ b/common/locales/sk/messages.json @@ -30,5 +30,26 @@ "messageAlreadyOwnGear": "You already own this item. Equip it by going to the equipment page.", "armoireEquipment": "<%= image %> You found a piece of rare Equipment in the Armoire: <%= dropText %>! Awesome!", "armoireFood": "<%= image %> You rummage in the Armoire and find <%= dropArticle %><%= dropText %>. What's that doing in here?", - "armoireExp": "You wrestle with the Armoire and gain Experience. Take that!" + "armoireExp": "You wrestle with the Armoire and gain Experience. Take that!", + "messageInsufficientGems": "Not enough gems!", + "messageAuthPasswordMustMatch": ":password and :confirmPassword don't match", + "messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword required", + "messageAuthUsernameTaken": "Username already taken", + "messageAuthEmailTaken": "Email already taken", + "messageAuthNoUserFound": "No user found.", + "messageAuthMustBeLoggedIn": "You must be logged in.", + "messageAuthMustIncludeTokens": "You must include a token and uid (user id) in your request", + "messageGroupNotFound": "Group not found or you don't have access.", + "messageGroupAlreadyInParty": "Already in a party, try refreshing.", + "messageGroupOnlyLeaderCanUpdate": "Only the group leader can update the group!", + "messageGroupRequiresInvite": "Can't join a group you're not invited to.", + "messageGroupCannotRemoveSelf": "You cannot remove yourself!", + "messageGroupChatBlankMessage": "You cannot send a blank message", + "messageGroupChatLikeOwnMessage": "Can't like your own message. Don't be that person.", + "messageGroupChatFlagOwnMessage": "Can't report your own message.", + "messageGroupChatFlagAlreadyReported": "You have already reported this message", + "messageGroupChatNotFound": "Message not found!", + "messageGroupChatAdminClearFlagCount": "Only an admin can clear the flag count!", + "messageUserOperationProtected": "path `<%= operation %>` was not saved, as it's a protected path.", + "messageUserOperationNotFound": "<%= operation %> operation not found" } \ No newline at end of file diff --git a/common/locales/sk/noscript.json b/common/locales/sk/noscript.json new file mode 100644 index 0000000000..6057268ef2 --- /dev/null +++ b/common/locales/sk/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Alas! Your browser doesn't have JavaScript enabled", + "jsDisabledHeadingFull": "Alas! Your browser doesn't have JavaScript enabled and without it, Habitica can't work properly", + "jsDisabledText": "Habitica can't properly display the site without it!", + "jsDisabledLink": "Please enable JavaScript to continue!" +} \ No newline at end of file diff --git a/common/locales/sk/npc.json b/common/locales/sk/npc.json index 91148767d7..61f0089fab 100644 --- a/common/locales/sk/npc.json +++ b/common/locales/sk/npc.json @@ -1,21 +1,25 @@ { "npc": "NPC", "npcText": "Podporil projekt na Kickstarteri na najvyššej úrovni!", - "mattBoch": "Matt Boch", + "mattBoch": "Matúš Boch", "mattShall": "Shall I bring you your steed, <%= name %>? Once you've fed a pet enough food to turn it into a mount, it will appear here. Click a mount to saddle up!", "mattBochText1": "Welcome to the Stable! I'm Matt, the beast master. Starting at level 3, you can hatch pets using eggs and potions. When you hatch a pet in the Market, it will appear here! Click a pet's image to add it to your avatar. Feed them with the food you find after level 3, and they'll grow into hardy mounts.", "daniel": "Daniel", "danielText": "Welcome to the Tavern! Stay a while and meet the locals. If you need to rest (vacation? illness?), I'll set you up at the Inn. While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off.", "danielText2": "Be warned: 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.", + "danielTextBroken": "Welcome to the Tavern... I guess... If you need to rest, I'll set you up at the Inn... While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off... if you have the energy...", + "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": "Kupec Alexander", "welcomeMarket": "Vitaj na trhu! Kúp si u nás vzácne vajcia a elixíry! Predaj všetko, čo máš navyše! Objednaj si užitočné služby. Pozri sa, čo všetko ponúkame.", - "sellForGold": "Predať: <%= item %>? Cena v zlate: <%= gold %>", - "sellEggForGold": "Sell <%= itemType %> Egg for <%= gold %> Gold", - "sellPotionForGold": "Sell <%= itemType %> Potion for <%= gold %> Gold", + "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?", + "sellForGold": "Sell it for <%= gold %> Gold", "buyGems": "Kúpiť drahokamy", "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!", + "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...", "USD": "USD", "newStuff": "Novoty", "cool": "Upozorni ma neskôr", @@ -38,13 +42,13 @@ "spellsText": "Teraz môžeš odomknúť kúzla špecifické pre triedu. Prvé uvidíš na 11. leveli. Tvoja mana sa obnovuje rýchlosťou 10 bodov za deň a 1 bod za každé dokončené", "toDo": "Úlohy", "moreClass": "Pre viac informácií o povolaniach si pozri", - "tourWelcome": "Welcome to Habitica! This is your To-Do list. Check off a task to proceed!", - "tourExp": "Great job! Checking off a task gives you Experience and Gold!", + "tourWelcome": "Vitaj v Habitica! Toto je tvoj zoznam úloh. Odškrtni jednu úlohu aby si pokračoval(a).", + "tourExp": "Dobrá práca! Odškrtávanie úlohy ti dáva skúsenosti a zlato !", "tourDailies": "This column is for Daily tasks. To proceed, enter a task you should do every day! Sample Dailies: Make Bed, Floss, Check Work Email", "tourCron": "Splendid! Your Dailies will reset every day.", "tourHP": "Watch out! If you don't complete a Daily by midnight, it will hurt you!", "tourHabits": "This column is for good and bad Habits that you do many times a day! To proceed, click the pencil to edit the names, then click the checkmark to save.", - "tourStats": "Good Habits add Experience and Gold! Bad Habits remove health.", + "tourStats": "Dobré zvyky pridávajú skúsenosti a zlato! Zlé zvyky strhávajú život.", "tourGP": "To proceed, buy the Training Sword with the gold you just earned!", "tourAvatar": "Customize Your Avatar
  • Your avatar represents you.
  • Customize now, or return later.
  • Your avatar starts plain until you've earned Equipment!
", "tourScrollDown": "Be sure to scroll all the way down to see all the options! Click on your avatar again to return to the tasks page.", @@ -59,26 +63,26 @@ "tourPetsPage": "This is the Stable! After level 3, you can hatch pets using eggs and potions. When you hatch a pet in the Market, it will appear here! Click a pet's image to add it to your avatar. Feed them with the food you find after level 3, and they'll grow into powerful mounts.", "tourMountsPage": "Once you've fed a pet enough food to turn it into a mount, it will appear here. (Pets, mounts, and food are available after level 3.) Click a mount to saddle up!", "tourEquipmentPage": "This is where your Equipment is stored! Your Battle Gear affects your stats. If you want to show different Equipment on your avatar without changing your stats, click \"Enable Costume.\"", - "tourOkay": "Okay!", - "tourAwesome": "Awesome!", - "tourSplendid": "Splendid!", - "tourNifty": "Nifty!", - "tourAvatarProceed": "Show me my tasks!", + "tourOkay": "OK!", + "tourAwesome": "Úžasne!", + "tourSplendid": "Skvelé!", + "tourNifty": "Šikovne!", + "tourAvatarProceed": "Ukáž mi moje úlohy!", "tourToDosBrief": "To-Do List
  • Check off To-Dos to earn Gold & Experience!
  • To-Dos never make your avatar lose Health.
", "tourDailiesBrief": "Daily Tasks
  • Dailies repeat every day.
  • You lose Health if you skip Dailies.
", - "tourDailiesProceed": "I'll be careful!", + "tourDailiesProceed": "Budem si dávať pozor!", "tourHabitsBrief": "Good & Bad Habits
  • Good Habits award Gold & Experience.
  • Bad Habits make you lose Health.
", - "tourHabitsProceed": "Makes sense!", + "tourHabitsProceed": "Dáva to zmysel!", "tourRewardsBrief": "Reward List
  • Spend your hard-earned Gold here!
  • Purchase Equipment for your avatar, or set custom Rewards.
", - "tourRewardsProceed": "That's all!", - "welcomeToHabit": "Welcome to Habitica!", - "welcome1": "Create a basic avatar.", + "tourRewardsProceed": "To je všetko!", + "welcomeToHabit": "Vitaj vo svete Habitica!", + "welcome1": "Vyrobit si zakladného avatara.", "welcome1notes": "This avatar will represent you as you progress.", - "welcome2": "Set up your tasks.", + "welcome2": "Založ si úlohy.", "welcome2notes": "How well you do on your real-life tasks will control how well you do in the game!", "welcome3": "Progress in life and the game!", "welcome3notes": "As you improve your life, your avatar will level up and unlock pets, quests, equipment, and more!", "welcome4": "Avoid bad habits that drain Health (HP), or your avatar will die!", "welcome5": "Now you'll customize your avatar and set up your tasks...", - "imReady": "Enter Habitica" + "imReady": "Vstúp do sveta Habitica" } \ No newline at end of file diff --git a/common/locales/sk/pets.json b/common/locales/sk/pets.json index 342937c20e..4661ca7549 100644 --- a/common/locales/sk/pets.json +++ b/common/locales/sk/pets.json @@ -58,8 +58,16 @@ "firstDrop": "You've unlocked the Drop System! Now when you complete tasks, you have a small chance of finding an item, including eggs, potions, and food! You just found a <%= eggText %> Egg! <%= eggNotes %>", "useGems": "If you've got your eye on a pet, but can't wait any longer for it to drop, use Gems in Inventory > Market to buy one!", "hatchAPot": "Chceš vyliahnuť takéto zvieratko: <%= potion %> <%= egg %>?", + "hatchedPet": "You hatched a <%= potion %> <%= egg %>!", + "displayNow": "Display Now", + "displayLater": "Display Later", + "earnedCompanion": "With all your productivity, you've earned a new companion. Feed it to make it grow!", "feedPet": "Chceš nakŕmiť toto zvieratko: <%= name %> týmto: <%= article %><%= text %>?", "useSaddle": "Chceš osedlať toto zvieratko: <%= pet %>?", + "raisedPet": "You grew a <%= pet %>!", + "earnedSteed": "By completing your tasks, you've earned a faithful steed!", + "rideNow": "Ride Now", + "rideLater": "Ride Later", "petName": "<%= potion %> <%= egg %>", "mountName": "<%= potion %> <%= mount %>", "petKeyName": "Kľúč ku klietkam", diff --git a/common/locales/sk/quests.json b/common/locales/sk/quests.json index 1fa94b290e..4fa20544a8 100644 --- a/common/locales/sk/quests.json +++ b/common/locales/sk/quests.json @@ -13,6 +13,7 @@ "youReceived": "Získal si", "dropQuestCongrats": "Gratulujeme ti k získaniu zvitku výpravy! Teraz môžeš pozvať svoju družinu na výpravu alebo sa môžeš kedykoľvek vrátiť cez Inventár -> Výpravy.", "questSend": "Clicking \"Invite\" will send an invitation to your party members. When all members have accepted or denied, the quest begins. See status under Social > Party.", + "questSendBroken": "Clicking \"Invite\" will send an invitation to your party members... When all members have accepted or denied, the quest begins... See status under Social > Party...", "inviteParty": "Invite Party to Quest", "questInvitation": "Pozvánka na výpravu:", "questInvitationTitle": "Pozvánka na výpravu", @@ -24,6 +25,7 @@ "rejected": "Odmietnutá", "pending": "Čáká sa", "questStart": "V momente, keď všetci členovia prijmú alebo odmietnu, výprava sa začne. Len tí, ktorí klikli na \"prijať\" sa zúčastnia výpravy a po jej dokončení dostanú odmenu. Ak sa pridlho čaká na niektorých členov družiny (sú neaktívni?), vlastník výpravy môže začať aj bez nich kliknutím na \"začať\". Vlastník výpravy môže tiež zrušiť výpravu klinutím na \"zrušiť\" a tým sa mu vráti zvitok do inventára.", + "questStartBroken": "Once all members have either accepted or rejected, the quest begins... Only those that clicked \"accept\" will be able to participate in the quest and receive the drops... If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\"... The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\"...", "begin": "Začať", "bossHP": "Bossove zdravie", "bossStrength": "Boss Strength", @@ -34,9 +36,14 @@ "itemsToCollect": "Items to Collect", "bossDmg1": "Each completed Daily and To-Do and each positive Habit hurts the boss. Hurt it more with redder tasks or Brutal Smash and Burst of Flames. The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies! All damage to and from a boss is tallied on cron (your day roll-over).", "bossDmg2": "Len tí, čo sú na výprave môžu bojovať s bossom a podeliť sa o korisť.", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "Each completed Daily and To-Do and each positive Habit hurts the boss... Hurt it more with redder tasks or Brutal Smash and Burst of Flames... The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies... All damage to and from a boss is tallied on cron (your day roll-over)...", + "bossDmg2Broken": "Only participants will fight the boss and share in the quest loot...", + "tavernBossInfo": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "tavernBossInfoBroken": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss... Incomplete Dailies fill the Exhaust Strike Bar... When the Exhaust Strike bar is full, the World Boss will attack an NPC... A World Boss will never damage individual players or accounts in any way... Only active accounts not resting in the Inn will have their tasks tallied...", "bossColl1": "Pre získanie predmetov musíš plniť svoje dobré návyky. Predmety za ukončenie výpravy padajú ako normálne predmety, ale uvidíš ich až nasledujúci deň. Vtedy sa všetko sčíta a pridá na hromadu.", "bossColl2": "Len tí, čo sú na výprave môžu zbierať predmety a podeliť sa o korisť.", + "bossColl1Broken": "To collect items, do your positive tasks... Quest items drop just like normal items; however, you won't see the drops until the next day, then everything you've found will be tallied up and contributed to the pile...", + "bossColl2Broken": "Only participants can collect items and share in the quest loot...", "abort": "Ukončiť", "leaveQuest": "Leave Quest", "sureLeave": "Are you sure you want to leave the active quest? All your quest progress will be lost.", @@ -63,10 +70,13 @@ "sureAbort": "Si si istý, že chceš ukončiť misiu? Zruší sa všetkým v družine a stratíte všetky svoje pokroky. Zvitok s výpravou sa vráti naspäť jeho vlastníkovi.", "doubleSureAbort": "Si si naozaj istý? Uisti sa, že ťa potom nebudú naveky neznášať!", "questWarning": "Ak sa nový hráči pridajú do družiny pred začiatkom výpravy, dostanú pozvánku aj oni. Ale ak sa už výprava začala, noví hráči sa nebudú môcť na ňu pridať.", + "questWarningBroken": "If new players join the party before the quest starts, they will also receive an invitation... However once the quest has started, no new party members can join the quest...", "bossRageTitle": "Zúrivosť", "bossRageDescription": "When this bar fills, the boss will unleash a special attack!", "startAQuest": "START A QUEST", "startQuest": "Start Quest", "whichQuestStart": "Which quest do you want to start?", - "getMoreQuests": "Get more quests" + "getMoreQuests": "Get more quests", + "unlockedAQuest": "You unlocked a quest!", + "leveledUpReceivedQuest": "You leveled up to Level <%= level %> and received a quest scroll!" } \ No newline at end of file diff --git a/common/locales/sk/questscontent.json b/common/locales/sk/questscontent.json index 45a3456868..bacc7f11c9 100644 --- a/common/locales/sk/questscontent.json +++ b/common/locales/sk/questscontent.json @@ -261,5 +261,17 @@ "questBurnoutDropPhoenixMount": "Phoenix (Mount)", "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!", + "questFrogText": "Swamp of the Clutter Frog", + "questFrogNotes": "As you and your friends are slogging through the Swamps of Stagnation, @starsystemic points at a large sign. \"Stay on the path -- if you can.\"

\"Surely that isn't hard!\" @RosemonkeyCT says. \"It's broad and clear.\"

But as you continue, you notice that path is gradually overtaken by the muck of the swamp, laced with bits of strange blue debris and clutter, until it's impossible to proceed.

As you look around, wondering how it got this messy, @Jon Arjinborn shouts, \"Look out!\" An angry frog leaps from the sludge, clad in dirty laundry and lit by blue fire. You will have to overcome this poisonous Clutter Frog to progress!", + "questFrogCompletion": "The frog cowers back into the muck, defeated. As it slinks away, the blue slime fades, leaving the way ahead clear.

Sitting in the middle of the path are three pristine eggs. \"You can even see the tiny tadpoles and through the clear casing!\" @Breadstrings says. \"Here, you should take them.\"", + "questFrogBoss": "Clutter Frog", + "questFrogDropFrogEgg": "Frog (Egg)", + "questFrogUnlockText": "Unlocks purchasable Frog eggs in the Market", + "questSnakeText": "The Serpent of Distraction", + "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveler astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", + "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", + "questSnakeBoss": "Serpent of Distraction", + "questSnakeDropSnakeEgg": "Snake (Egg)", + "questSnakeUnlockText": "Unlocks purchasable Snake eggs in the Market" } \ No newline at end of file diff --git a/common/locales/sk/rebirth.json b/common/locales/sk/rebirth.json index 16731e1c03..7ca74f7469 100644 --- a/common/locales/sk/rebirth.json +++ b/common/locales/sk/rebirth.json @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "Za začatie nového dobrodružstva získavaš aj špeciálny odznak!", "beReborn": "Znovu sa zrodiť", "rebirthAchievement": "Začal si nové dobrodružstvo! Toto je tvoje znovuzrodenie čislo <%= number %> a najvušší level, ktorý si dosiahol je <%= level %>. Ak chceš tento odznak vylepšiť, začni nové dobrodružstvo po dosiahnutí ešte vyššieho levelu!", + "rebirthAchievement100": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is 100 or higher. To stack this Achievement, begin your next new adventure when you've reached at least 100!", "rebirthBegan": "Začal nové dobrodružstvo", "rebirthText": "Začal niekoľko nových dobrodružstiev: <%= rebirths %>", "rebirthOrb": "Použil Orb znovuzrodenia, aby začal odznovu, po dosiahnutí levelu", + "rebirthOrb100": "Used an Orb of Rebirth to start over after attaining Level 100 or higher", "rebirthPop": "Začni s novou postavou na leveli 1, pričom ti ostanú odznaky, zberateľské predmety, a úlohy.", "rebirthName": "Orb znovuzrodenia", "reborn": "Znovuzrodený, najvyšší dosiahnutý level: <%= reLevel %>" diff --git a/common/locales/sk/settings.json b/common/locales/sk/settings.json index 19ec5782e1..4c1596950d 100644 --- a/common/locales/sk/settings.json +++ b/common/locales/sk/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "Keď je zvolená táto možnosť, keď začneš upravovať úlohu, zoznam štítkov bude skrytý.", "startAdvCollapsed": "Zrolované pokročilé možnosti v úlohách", "startAdvCollapsedPop": "S nastavením tejto možnosti budú pokročilé možnosti v momente, keď prvý krát otvoríš úlohu na úpravy, skryté.", + "dontShowAgain": "Don't show this again", + "suppressLevelUpModal": "Don't show popup when gaining a level", + "suppressHatchPetModal": "Don't show popup when hatching a pet", + "suppressRaisePetModal": "Don't show popup when raising a pet into a mount", + "suppressStreakModal": "Don't show popup when attaining a Streak achievement", "showTour": "Zobraziť prehliadku", "restartTour": "Reštartovať úvodnú prehliadku prvej návštevy Habitica.", "showBailey": "Zobraziť Bailey", @@ -81,7 +86,6 @@ "emailChange1": "Pre zmenu emailovej adresy nás kontaktujte na", "emailChange2": "admin@habitica.com", "emailChange3": "including both your old and new email address as well as your User ID.", - "username": "Prihlasovacie meno", "usernameOrEmail": "Prihlasovacie meno alebo email", "email": "Email", "registeredWithFb": "Registrovať pomocou Facebook účtu", @@ -89,7 +93,7 @@ "loginNameDescription2": "Používateľ->Profil", "loginNameDescription3": "to change the name that appears in your avatar and chat messages.", "emailNotifications": "Email notifikácie", - "wonChallenge": "Vyhral si výzvu", + "wonChallenge": "You won a Challenge!", "newPM": "Received Private Message", "giftedGems": "Gifted Gems", "giftedGemsInfo": "<%= amount %> Gems - by <%= name %>", @@ -118,5 +122,29 @@ "promoCode": "Promo Code", "promoCodeApplied": "Promo Code Applied! Check your inventory", "promoPlaceholder": "Enter Promotion Code", - "displayInviteToPartyWhenPartyIs1": "Display Invite To Party button when party has 1 member." + "displayInviteToPartyWhenPartyIs1": "Display Invite To Party button when party has 1 member.", + "saveCustomDayStart": "Save Custom Day Start", + "registration": "Registration", + "addLocalAuth": "Add local authentication:", + "generateCodes": "Generate Codes", + "generate": "Generate", + "getCodes": "Get Codes", + "webhooks": "Webhooks", + "enabled": "Enabled", + "webhookURL": "Webhook URL", + "add": "Add", + "buyGemsGoldCap": "Cap raised to <%= amount %>", + "mysticHourglass": "<%= amount %> Mystic Hourglass", + "mysticHourglassText": "Mystic Hourglasses allow purchasing a previous month's Mystery Item set.", + "purchasedPlanId": "Recurring $<%= price %> each <%= months %> Month(s) (<%= plan %>)", + "purchasedPlanExtraMonths": "You have <%= months %> months of subscription credit.", + "consecutiveSubscription": "Consecutive Subscription", + "consecutiveMonths": "Consecutive Months:", + "gemCapExtra": "Gem Cap Extra:", + "mysticHourglasses": "Mystic Hourglasses:", + "paypal": "PayPal", + "amazonPayments": "Amazon Payments", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/sk/subscriber.json b/common/locales/sk/subscriber.json index 69f10739e6..c42064e3c5 100644 --- a/common/locales/sk/subscriber.json +++ b/common/locales/sk/subscriber.json @@ -60,7 +60,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.", - "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 <%= linkStart %>here<%= linkEnd %>! If those don't satisfy you, perhaps you'd be interested in one of our fashionably futuristic Steampunk Item Sets?", + "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!", "subUpdateCard": "Update Card", diff --git a/common/locales/sk/tasks.json b/common/locales/sk/tasks.json index cc851b164c..a78d1b236f 100644 --- a/common/locales/sk/tasks.json +++ b/common/locales/sk/tasks.json @@ -88,8 +88,7 @@ "fortifyText": "Fortify will return all your tasks to a neutral (yellow) state, as if you'd just added them, and top your Health off to full. This is great if all your red tasks are making the game too hard, or all your blue tasks are making the game too easy. If starting fresh sounds much more motivating, spend the Gems and catch a reprieve!", "sureDelete": "Si si istý, že chceš zmazať túto úlohu?", "streakCoins": "Bonus za sériu!", - "pushTaskToTop": "Presuň úlohu navrch", - "pushTaskToBottom": "Presuň úlohu naspodok", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "Enter the task's title first.", "dailiesRestingInInn": "You're Resting in the Inn! Your Dailies will NOT hurt you tonight, but they WILL still refresh every day. If you're in a quest, you won't deal damage/collect items until you check out of the Inn, but you can still be injured by a Boss if your Party mates skip their own Dailies.", "habitHelp1": "Good Habits are things that you do often. They award Gold and Experience every time you click the <%= plusIcon %>.", diff --git a/common/locales/sr/backgrounds.json b/common/locales/sr/backgrounds.json index 38484fa537..4bd023c031 100644 --- a/common/locales/sr/backgrounds.json +++ b/common/locales/sr/backgrounds.json @@ -118,5 +118,19 @@ "backgroundSlimySwampText": "Slimy Swamp", "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness.", + "backgrounds112015": "SET 18: Released November 2015", + "backgroundFloatingIslandsText": "Floating Islands", + "backgroundFloatingIslandsNotes": "Hop across the Floating Islands.", + "backgroundNightDunesText": "Night Dunes", + "backgroundNightDunesNotes": "Walk peacefully through the Night Dunes.", + "backgroundSunsetOasisText": "Sunset Oasis", + "backgroundSunsetOasisNotes": "Bask in the Sunset Oasis.", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/sr/challenge.json b/common/locales/sr/challenge.json index c95e122f46..79500b1f12 100644 --- a/common/locales/sr/challenge.json +++ b/common/locales/sr/challenge.json @@ -59,5 +59,9 @@ "challengeNotEnoughGems": "Nemate dovoljno dragulja da postavite ovaj izazov.", "noPermissionEditChallenge": "Nemate ovlašćenje da prepravite ovaj izazov.", "noPermissionDeleteChallenge": "Nemate ovlašćenje da izbrišete ovaj izazov.", - "noPermissionCloseChallenge": "Nemate ovlašćenje da zatvorite ovaj izazov." + "noPermissionCloseChallenge": "Nemate ovlašćenje da zatvorite ovaj izazov.", + "congratulations": "Congratulations!", + "hurray": "Hurray!", + "noChallengeOwner": "no owner", + "noChallengeOwnerPopover": "This challenge does not have an owner because the person who created the challenge deleted their account." } \ No newline at end of file diff --git a/common/locales/sr/character.json b/common/locales/sr/character.json index f070e51271..458a6d5a25 100644 --- a/common/locales/sr/character.json +++ b/common/locales/sr/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "Bonus klase", "battleGear": "Borbena oprema", "battleGearText": "Oprema u kojoj se borite. Utiče na interakciju sa zadacima.", + "autoEquipBattleGear": "Auto-equip new gear", "costume": "Kostim", "costumeText": "Ako niste zadovoljni izgledom svoje opreme, izaberite „Koristi kostim“ da biste obukli kostim preko borbene opreme.", "useCostume": "Kostim", @@ -64,6 +65,10 @@ "ultimGearText": "Unapredio oružje i oklop do maksimalnog nivoa za sledeće klase:", "level": "Nivo", "levelUp": "Novi nivo!", + "gainedLevel": "You gained a level!", + "leveledUp": "By accomplishing your real-life goals, you've grown to Level <%= level %>!", + "fullyHealed": "You have been fully healed!", + "huzzah": "Huzzah!", "mana": "Mana", "hp": "HP", "mp": "MP", diff --git a/common/locales/sr/content.json b/common/locales/sr/content.json index 9b18a11a6f..d33c405804 100644 --- a/common/locales/sr/content.json +++ b/common/locales/sr/content.json @@ -95,6 +95,12 @@ "questEggHorseText": "Horse", "questEggHorseMountText": "Horse", "questEggHorseAdjective": "a galloping", + "questEggFrogText": "Frog", + "questEggFrogMountText": "Frog", + "questEggFrogAdjective": "a princely", + "questEggSnakeText": "Snake", + "questEggSnakeMountText": "Snake", + "questEggSnakeAdjective": "a slithering", "eggNotes": "Find a hatching potion to pour on this egg, and it will hatch into <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "Običan", "hatchingPotionWhite": "Beli", diff --git a/common/locales/sr/faq.json b/common/locales/sr/faq.json index 6c98cee39b..f7e20d7a67 100644 --- a/common/locales/sr/faq.json +++ b/common/locales/sr/faq.json @@ -2,7 +2,7 @@ "frequentlyAskedQuestions": "Najčešće Postavljena Pitanja", "faqQuestion0": "Zbunjen sam. Gde mogu dobiti kratko objašnjenje?", "iosFaqAnswer0": "Prvo, postavićete sebi zadatke koje želite da uradite u vašem svakodnevnom životu. Onda, kako završavate zadatke u pravom životu i obeležavate, zaradićete iskustvo i zlato. Zlatom se kupuje oprema i neki predmeti,kao i nagrade koje ste sami napravili. Iskustvo daje vašem liku nivoe i otključava stvari kao što su Zveri, Veštine, (and Quests!) Možete da birate kako će vaš lik izgledati pod Meni > (Customize Avatar).\n\nNeki osnovni način interakcije: kliknite (+) u gornjem-desnom uglu da dodate nov zadatak. Tapnite na postojeći zadatak da ga prepravite, i prevucite nalevo na zadatak da ga obrišete. Možete da sortirate zadatke koristeći tagove u gornjem-levom-uglu, i proširite i skupite spisak.", - "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, the wiki has an excellent step-by-step overview of the game [right here](http://habitica.wikia.com/wiki/Habitica_Wiki).", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", "faqQuestion1": "How do I set up my tasks?", "iosFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.", "webFaqAnswer1": "Good Habits (the ones with a ) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a ) are tasks that you should avoid, like biting nails. Habits with a and a have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n

\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n

\n To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.", @@ -16,7 +16,7 @@ "iosFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you tap a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your Party and one of your Party mates did not complete all their Dailies, the Boss will attack you.\n\n The main way to heal is to gain a level, which restores all your health. You can also buy a Health Potion with gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a Party with a Healer, they can heal you as well.", "webFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you click a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your party and one of your party mates did not complete all their Dailies, the Boss will attack you.\n

\n The main way to heal is to gain a level, which restores all your Health. You can also buy a Health Potion with Gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a party (under Social > Party) with a Healer, they can heal you as well.", "faqQuestion5": "How do I play Habitica with my friends?", - "iosFaqAnswer5": "The best way is to invite them to a Party with you, via the [website](https://habitica.com/#/options/groups/party)! We'll add the ability to create a Party from this app soon, but in the meantime you can use the [website](https://habitica.com/#/options/groups/party). Parties can go on quests, battle monsters, and cast skills to support each other. On the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", + "iosFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on quests, battle monsters, and cast skills to support each other. Go to Menu > Party and click \"Create New Party\" if you don't already have a Party. Then tap on the Members list, and tap Invite in the upper right-hand corner to invite your friends by entering their User ID (a string of numbers and letters that they can find under Settings > Account Details on the app, and Settings > API on the website). On the website, you can also invite friends via email, which we will add to the app in a future update.\n\nOn the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", "webFaqAnswer5": "The best way is to invite them to a party with you, under Social > Party! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n

\n For more detailed info, check out the wiki pages on [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).", "faqQuestion6": "How do I get a Pet or Mount?", "iosFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch Egg.\" Then choose a hatching potion to determine its color! Go to Menu > Pets to equip your new Pet to your avatar by clicking on it. \n\n You can also grow your Pets into Mounts by feeding them under Menu > Pets. Tap on a Pet, and then select \"Feed Pet\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Menu > Mounts and tap on it to equip it to your avatar.\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", @@ -28,14 +28,17 @@ "iosFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Use Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in a special section in the Rewards Column. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You’ll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "faqQuestion9": "How do I fight monsters and go on Quests?", - "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party on the [website](https://habitica.com/#/options/groups/party), you'll be rewarded with the Basi-List Scroll! (We will add this feature to the app in a future update.)\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for gold and gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", + "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for Gold and Gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "webFaqAnswer9": "First, you need to join or start a party (under Social > Party). Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n

\n Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are three ways to get a scroll:\n

\n * When you invite people to your party, you’ll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Page (Inventory > Quests) for Gold and Gems.\n

\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your party at the same time that you damage the Boss.\n

\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "faqQuestion10": "What are gems, and how do I get them?", + "faqQuestion10": "What are Gems, and how do I get them?", "iosFaqAnswer10": "Gems are purchased with real money by tapping on the gem icon in the header. When people buy gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying gems directly, there are three other ways players can gain gems:\n\n * Win a Challenge on the [website](https://habitica.com) that has been set up by another player under Social > Challenges. (We will be adding Challenges to the app in a future update!)\n * Subscribe on the [website](https://habitica.com/#/options/settings/subscription) and unlock the ability to buy a certain number of gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with gems do not offer any statistical advantages, so players can still make use of the app without them!", "webFaqAnswer10": "Gems are [purchased with real money](https://habitica.com/#/options/settings/subscription), although [subscribers](https://habitica.com/#/options/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n

\n In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n

\n * Win a Challenge that has been set up by another player under Social > Challenges.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", "faqQuestion11": "How do I report a bug or request a feature?", "iosFaqAnswer11": "You can report a bug, request a feature, or send feedback under Menu > Report a Bug and Menu > Send Feedback! We'll do everything we can to assist you.", "webFaqAnswer11": "Bug reports are collected on GitHub. Go to [Help > Report a Bug](https://github.com/HabitRPG/habitrpg/issues/2760) and follow the instructions. Don't worry, we'll get you fixed up soon!\n

\n Feature requests are collected on Trello. Go to [Help > Request a Feature](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) and follow the instructions. Ta-da!", + "faqQuestion12": "How do I battle a World Boss?", + "iosFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", + "webFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n

\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n

\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n

\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", "iosFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the Tavern chat under Menu > Tavern! We're happy to help.", "webFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the [Newbies Guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help." } \ No newline at end of file diff --git a/common/locales/sr/front.json b/common/locales/sr/front.json index 080c386b13..df08766e82 100644 --- a/common/locales/sr/front.json +++ b/common/locales/sr/front.json @@ -74,7 +74,7 @@ "infhQuote": "[Habitica] has really helped me impart structure to my life in graduate school.", "invalidEmail": "Morate ukucati važeću adresu da biste zatražili novu lozinku.", "irishfeet123Quote": "I've had horrible habits with clearing my place completely after meals and leaving cups all over the place. [Habitica] has cured that!", - "joinOthers": "Join 250,000 people making it fun to achieve goals!", + "joinOthers": "Join <%= userCount %> people making it fun to achieve goals!", "kazuiQuote": "Before [Habitica], I was stuck with my thesis, as well as dissatisfied with my personal discipline regarding housework and things like learning vocabulary and studying Go theory. It turns out breaking down these tasks into smaller manageable checklists is quite the thing to keep me motivated and constantly working.", "landingadminlink": "administrativnim paketima", "landingend": "Još uvek niste uvereni?", @@ -179,5 +179,14 @@ "businessInquiries": "Business Inquiries", "merchandiseInquiries": "Merchandise Inquiries", "marketingInquiries": "Marketing/Social Media Inquiries", - "tweet": "Tweet" + "tweet": "Tweet", + "apps": "Apps", + "notifyAndroidApp": "Want us to notify you when the Android app is ready? Sign up for this mailing list!", + "checkOutIOSApp": "Check out our new iOS App!", + "imagine1": "Imagine if improving your life were as fun as playing a game.", + "landingCopy1": "Advance in the game by completing your real-life tasks.", + "landingCopy2": "Battle monsters with friends to stay accountable to your goals.", + "landingCopy3": "Join over <%= userCount %> people having fun as they improve their lives.", + "alreadyHaveAccount": "I already have an account!", + "getStartedNow": "Get Started Now!" } \ No newline at end of file diff --git a/common/locales/sr/gear.json b/common/locales/sr/gear.json index 9475d44cab..5ce8046a9a 100644 --- a/common/locales/sr/gear.json +++ b/common/locales/sr/gear.json @@ -149,13 +149,19 @@ "weaponArmoireRancherLassoText": "Rancher Lasso", "weaponArmoireRancherLassoNotes": "Lassos: the ideal tool for rounding up and wrangling. Increases Strength by <%= str %>, Perception by <%= per %>, and Intelligence by <%= int %>. Enchanted Armoire: Rancher Set (Item 3 of 3).", "weaponArmoireMythmakerSwordText": "Mythmaker Sword", - "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3)", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Iron Crook", - "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3)", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Gold Wing Staff", "weaponArmoireGoldWingStaffNotes": "The wings on this staff constantly flutter and twist. Increases all attributes by <%= attrs %> each. Enchanted Armoire: Independent Item.", "weaponArmoireBatWandText": "Bat Wand", "weaponArmoireBatWandNotes": "This wand can turn any task into a bat! Wave it about and watch them fly away. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireShepherdsCrookText": "Shepherd's Crook", + "weaponArmoireShepherdsCrookNotes": "Useful for herding gryphons. Increases Constitution by <%= con %>. Enchanted Armoire: Shepherd Set (Item 1 of 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "oklop", "armorBase0Text": "Obična odeća", "armorBase0Notes": "Potpuno obična odeća. Ne daje nikakav bonus.", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "Blesava odora za žurke", "armorSpecialBirthday2015Notes": "Srećan rođendan, Habitica! Obucite ovu Blesavu odoru za žurke i proslavite ovaj veliki dan. Ne daje nikakav bonus.", "armorSpecialGaymerxText": "Dugin ratnički oklop", - "armorSpecialGaymerxNotes": "Povodom obeležavanja sezone prajda i GaymerX-a, ovaj oklop je ukrašen bojama duge. GaymerX konvencija bavi se LGBT temama i video igrama, i otvorena je za sve zainteresovane. Održava se u InterContinental-u u San Francisku od 11. do 13. jula. Ne daje nikakav bonus.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "Otmeni kostim mačke", "armorSpecialSpringRogueNotes": "Ima besprekornu dlaku. Povećava Opažanje za <%= per %>. Oprema iz ograničene serije Proleće 2014.", "armorSpecialSpringWarriorText": "Oklop od čelične deteline", @@ -307,6 +313,8 @@ "armorMystery201508Notes": "Run fast as a flash in the fluffy Cheetah Costume! Confers no benefit. August 2015 Subscriber Item.", "armorMystery201509Text": "Werewolf Costume", "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Stimpank odelo", "armorMystery301404Notes": "Kicoško i zanosno! Ne daje nikakav bonus. Predmet za pretplatnike februar 3015..", "armorArmoireLunarArmorText": "Soothing Lunar Armor", @@ -321,6 +329,12 @@ "armorArmoireHornedIronArmorNotes": "Fiercely hammered from iron, this horned armor is nearly impossible to break. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Horned Iron Set (Item 2 of 3).", "armorArmoirePlagueDoctorOvercoatText": "Plague Doctor Overcoat", "armorArmoirePlagueDoctorOvercoatNotes": "An authentic overcoat worn by the doctors who battle the Plague of Procrastination! Increases Intelligence by <%= int %>, Strength by <%= str %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 3 of 3).", + "armorArmoireShepherdRobesText": "Shepherd Robes", + "armorArmoireShepherdRobesNotes": "The fabric is cool and breathable, perfect for a hot day herding gryphons in the desert. Increases Strength and Perception by <%= attrs %> each. Enchanted Armoire: Shepherd Set (Item 2 of 3).", + "armorArmoireRoyalRobesText": "Royal Robes", + "armorArmoireRoyalRobesNotes": "Wonderful ruler, rule all day long! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 3 of 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "šlemovi", "headBase0Text": "Bez šlema", "headBase0Notes": "Gola glava", @@ -441,7 +455,7 @@ "headSpecialFall2015HealerText": "Hat of Frog", "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", "headSpecialGaymerxText": "Dugin šlem", - "headSpecialGaymerxNotes": "Povodom sezone prajda i GaymerX, ovaj šlem je ukrašen bojama duge. GaymerX konvencija bavi se temama vezanim za LGBT i video igre i otvorena je za sve zainteresovane. Održava se u InterContinental-u u San Francisku od 11. do 13. jula. Ne daje nikakav bonus.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "Krilati šlem", "headMystery201402Notes": "Ova krilata kruna daje vlasniku brzinu vetra. Ne daje nikakav bonus. Predmet za pretplatnike februar 2014.", "headMystery201405Text": "Plamen iz uma", @@ -464,6 +478,8 @@ "headMystery201508Notes": "This cozy cheetah hat is very fuzzy! Confers no benefit. August 2015 Subscriber Item.", "headMystery201509Text": "Werewolf Mask", "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 Subscriber Item.", "headMystery301404Text": "Otmeni cilindar", "headMystery301404Notes": "Otmeni cilindar za pripadnike visokog društva! Predmet za pretplatnike januar 3015. Ne daje nikakav bonus.", "headMystery301405Text": "Jednostavni cilindar", @@ -481,7 +497,7 @@ "headArmoireBlueHairbowText": "Blue Hairbow", "headArmoireBlueHairbowNotes": "Become perceptive, tough, and smart while wearing this beautiful Blue Hairbow! Increases Perception by <%= per %>, Constitution by <%= con %>, and Intelligence by <%= int %>. Enchanted Armoire: Independent Item.", "headArmoireRoyalCrownText": "Royal Crown", - "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Royal Set (Item 1 of 3).", "headArmoireGoldenLaurelsText": "Golden Laurels", "headArmoireGoldenLaurelsNotes": "These golden laurels reward those who have conquered bad habits. Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 2 of 3).", "headArmoireHornedIronHelmText": "Horned Iron Helm", @@ -496,6 +512,12 @@ "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", "headArmoireOrangeCatText": "Orange Cat Hat", "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireBlueFloppyHatText": "Blue Floppy Hat", + "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireShepherdHeaddressText": "Shepherd Headdress", + "headArmoireShepherdHeaddressNotes": "Sometimes the gryphons that you herd like to chew on this headdress, but it makes you seem more intelligent nonetheless. Increases Intelligence by <%= int %>. Enchanted Armoire: Shepherd Set (Item 3 of 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "predmet za levu ruku", "shieldBase0Text": "Nema opreme za levu ruku", "shieldBase0Notes": "Nema štita ni drugog oružja", @@ -579,6 +601,8 @@ "shieldArmoireGladiatorShieldNotes": "To be a gladiator you must.... eh, whatever, just bash them with your shield. Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Gladiator Set (Item 3 of 3).", "shieldArmoireMidnightShieldText": "Midnight Shield", "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "shieldArmoireRoyalCaneText": "Royal Cane", + "shieldArmoireRoyalCaneNotes": "Hooray for the ruler, worthy of song! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 2 of 3).", "back": "Back Accessory", "backBase0Text": "Bez ukrasa na leđima", "backBase0Notes": "Bez ukrasa na leđima.", @@ -592,6 +616,8 @@ "backMystery201504Notes": "Bzzz Bzzz Bzzz! Letite sa zadatka na zadatak. Ne daje nikakav bonus. Predmet za pretplatnike april 2015.", "backMystery201507Text": "Rad Surfboard", "backMystery201507Notes": "Surf off the Diligent Docks and ride the waves in Inkomplete Bay! Confers no benefit. July 2015 Subscriber Item.", + "backMystery201510Text": "Goblin Tail", + "backMystery201510Notes": "Prehensile and powerful! Confers no benefit. October 2015 Subscriber Item.", "backSpecialWonderconRedText": "Plašt moći", "backSpecialWonderconRedNotes": "Ispunjen snagom i lepotom. Ne daje nikakav bonus. Predmet iz specijalne kolekcije povodom konvencije.", "backSpecialWonderconBlackText": "Plašt za šunjanje", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "Ovi moćni jelenji rogovi menjaju boju zajedno s lišćem. Ne daje nikakav bonus. Predmet za pretplatnike septembar 2014.", "headAccessoryMystery201502Text": "Krila misli", "headAccessoryMystery201502Notes": "Neka vaša mašta poleti! Ne daje nikakav bonus. Predmet za pretplatnike februar 2015.", + "headAccessoryMystery201510Text": "Goblin Horns", + "headAccessoryMystery201510Notes": "These fearsome horns are slightly slimy. Confers no benefit. October 2015 Subscriber Item.", "headAccessoryMystery301405Text": "Zaštitne naočare za čelo", "headAccessoryMystery301405Notes": "Svi tvrde da se zaštitne naočare nose na očima. Kažu da nikom ne trebaju naočare koje se nose na čeli. Ha! Pokažite im da nisu u pravu. Ne daje nikakav bonus.Predmet za pretplatnike avgust 3015.", "eyewear": "Eyewear", diff --git a/common/locales/sr/generic.json b/common/locales/sr/generic.json index 33f66cc8b2..ec9b393f0b 100644 --- a/common/locales/sr/generic.json +++ b/common/locales/sr/generic.json @@ -28,7 +28,7 @@ "market": "Pijaca", "subscriberItem": "Tajanstveni predmet", "newSubscriberItem": "Novi tajanstveni predmet", - "subscriberItemText": "Pretplatnici svakog meseca dobijaju tajanstveni predmet, najčešće nedelju dana pre kraja meseca. Tačan datum možete naći na wiki stranici „Tajanstveni predmet”.", + "subscriberItemText": "Each month, subscribers will receive a mystery item. This is usually released about one week before the end of the month. See the wiki's 'Mystery Item' page for more information.", "all": "Sve", "none": "Ništa", "or": "Ili", @@ -69,8 +69,9 @@ "habiticaDayPluralText": "Celebrated <%= number %> Naming Days! Thanks for being a fantastic user.", "achievementDilatory": "Spasilac odlagača", "achievementDilatoryText": "Borac iz bitke protiv Gospodara Odlaganja Zadataka tokom letnjeg festivala 2014.", - "costumeContest": "Takmičenje pod maskama 2014.", - "costumeContestText": "Učestvovao u takmičenju kostima za Noć veštica 2014. Radove učesnika možete videti na blog.habitica.com/tagged/cosplay", + "costumeContest": "Costume Contestant", + "costumeContestText": "Participated in the Habitoween Costume Contest. See some of the entries on the Habitica blog!", + "costumeContestTextPlural": "Participated in <%= number %> Habitoween Costume Contests. See some of the entries on the Habitica blog!", "memberSince": "- Član od", "lastLoggedIn": "- Poslednji put prijavljen", "notPorted": "Ova funkcija još uvek nije preneta sa starog sajta", @@ -79,6 +80,7 @@ "errorUpCase": "Greška:", "newPassSent": "Nova lozinka poslata.", "serverUnreach": "Server trenutno nije dostupan.", + "requestError": "Yikes, an error occurred! Please reload the page, your last action may not have been saved correctly.", "seeConsole": "Ako se greška još uvek pojavljuje, molimo Vas da je prijavite na Pomoć > Prijaviti grešku. Ako umete da koristite konzolu pretraživača, pošaljite nam i obaveštenje o grešci.", "error": "Greška", "menu": "Meni", @@ -133,5 +135,17 @@ "thankyou2": "Sending you a thousand thanks.", "thankyou3": "I'm very grateful - thank you!", "thankyouCardAchievementTitle": "Greatly Grateful", - "thankyouCardAchievementText": "Thanks for being thankful! Sent or received <%= cards %> Thank-You cards." + "thankyouCardAchievementText": "Thanks for being thankful! Sent or received <%= cards %> Thank-You cards.", + "streakAchievement": "You earned a streak achievement!", + "firstStreakAchievement": "21-Day Streak", + "streakAchievementCount": "<%= streaks %> 21-Day Streaks", + "twentyOneDays": "You've completed your Daily for 21 days in a row!", + "dontBreakStreak": "Amazing job. Don't break the streak!", + "dontStop": "Don't Stop Now!", + "levelUpShare": "I leveled up in Habitica by improving my real-life habits!", + "questUnlockShare": "I unlocked a new quest in Habitica!", + "hatchPetShare": "I hatched a new pet by completing my real-life tasks!", + "raisePetShare": "I raised a pet into a mount by completing my real-life tasks!", + "wonChallengeShare": "I won a challenge in Habitica!", + "achievementShare": "I earned a new achievement in Habitica!" } \ No newline at end of file diff --git a/common/locales/sr/groups.json b/common/locales/sr/groups.json index 8de5d325ee..c2ce55c778 100644 --- a/common/locales/sr/groups.json +++ b/common/locales/sr/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "Napustiti Gostionicu", "innCheckIn": "Odmorite se u Gostionici", "innText": "Odmarate se u Gostionici! Dok ste prijavljeni, nećete trpeti štetu od neurađenih svakodnevnih zadataka na kraju dana, ali će ti zadaci biti obeleženi kao neurađeni kad novi dan počne. Upozorenje: Ako se Vaša družina bori protiv bosa, njihovi propušteni zadaci će uticati i na Vas, osim ako su i oni u Gostionici! Takođe, šteta koju nanesete bosu (i predmeti koje nađete) neće se videti dok se ne odjavite iz Gostionice.", + "innTextBroken": "You're resting in the Inn, I guess... While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day... If you are participating in a Boss Quest, the Boss will still damage you for your party mates' missed Dailies... unless they are also in the Inn... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn... so tired...", "lfgPosts": "Tražim družinu", "tutorial": "Obuka", "glossary": "Glosar", @@ -145,5 +146,6 @@ "partyEmpty": "You're the only one in your party. Invite your friends!", "partyChatEmpty": "Your party chat is empty! Type a message in the box above to start chatting.", "guildChatEmpty": "This guild's chat is empty! Type a message in the box above to start chatting.", - "possessiveParty": "<%= name %>'s Party" + "possessiveParty": "<%= name %>'s Party", + "requestAcceptGuidelines": "If you would like to post messages in the Tavern or any party or guild chat, please first read our <%= linkStart %>Community Guidelines<%= linkEnd %> and then click the button below to indicate that you accept them." } \ No newline at end of file diff --git a/common/locales/sr/limited.json b/common/locales/sr/limited.json index 9821b5a4c8..961ca76208 100644 --- a/common/locales/sr/limited.json +++ b/common/locales/sr/limited.json @@ -21,6 +21,7 @@ "valentineCardAchievementText": "Aww, you and your friend must really care about each other! Sent or received <%= cards %> Valentine's Day cards.", "polarBear": "Beli medved", "turkey": "Ćurka", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "Mladunče belog medveda", "jackolantern": "Svetiljka od bundeve", "seasonalShop": "Prodavnica sezonskih predmeta", @@ -30,6 +31,7 @@ "seasonalShopText": "Dobro došli u Prodavnicu sezonskih predmeta!! Trenutno u ponudi imamo opremu iz prolećne Sezonske serije. Ovi predmeti biće u prodaju do 30. aprila. Nabavite ih sada, jer ćete sledeću priliku imati tek za godinu dana!", "seasonalShopSummerText": "Welcome to the Seasonal Shop!! We're stocking summertime Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Summer Splash event each year, but we're only open until July 31st, so be sure to stock up now, or you'll have to wait a year to buy these items again!", "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31, so be sure to stock up now, or you'll have to wait a year to buy these items again!", + "seasonalShopFallTextBroken": "Oh.... Welcome to the Seasonal Shop... We're stocking autumn Seasonal Edition goodies, or something... Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31... I guess you should to stock up now, or you'll have to wait... and wait... and wait... *sigh*", "seasonalShopRebirth": "If you've used the Orb of Rebirth, you can repurchase this equipment in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.", "candycaneSet": "Šećerna oprema (Čarobnjak)", "skiSet": "Skijaška oprema (Odmetnik)", diff --git a/common/locales/sr/messages.json b/common/locales/sr/messages.json index c2f84d63f6..22e44b788f 100644 --- a/common/locales/sr/messages.json +++ b/common/locales/sr/messages.json @@ -30,5 +30,26 @@ "messageAlreadyOwnGear": "You already own this item. Equip it by going to the equipment page.", "armoireEquipment": "<%= image %> You found a piece of rare Equipment in the Armoire: <%= dropText %>! Awesome!", "armoireFood": "<%= image %> You rummage in the Armoire and find <%= dropArticle %><%= dropText %>. What's that doing in here?", - "armoireExp": "You wrestle with the Armoire and gain Experience. Take that!" + "armoireExp": "You wrestle with the Armoire and gain Experience. Take that!", + "messageInsufficientGems": "Not enough gems!", + "messageAuthPasswordMustMatch": ":password and :confirmPassword don't match", + "messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword required", + "messageAuthUsernameTaken": "Username already taken", + "messageAuthEmailTaken": "Email already taken", + "messageAuthNoUserFound": "No user found.", + "messageAuthMustBeLoggedIn": "You must be logged in.", + "messageAuthMustIncludeTokens": "You must include a token and uid (user id) in your request", + "messageGroupNotFound": "Group not found or you don't have access.", + "messageGroupAlreadyInParty": "Already in a party, try refreshing.", + "messageGroupOnlyLeaderCanUpdate": "Only the group leader can update the group!", + "messageGroupRequiresInvite": "Can't join a group you're not invited to.", + "messageGroupCannotRemoveSelf": "You cannot remove yourself!", + "messageGroupChatBlankMessage": "You cannot send a blank message", + "messageGroupChatLikeOwnMessage": "Can't like your own message. Don't be that person.", + "messageGroupChatFlagOwnMessage": "Can't report your own message.", + "messageGroupChatFlagAlreadyReported": "You have already reported this message", + "messageGroupChatNotFound": "Message not found!", + "messageGroupChatAdminClearFlagCount": "Only an admin can clear the flag count!", + "messageUserOperationProtected": "path `<%= operation %>` was not saved, as it's a protected path.", + "messageUserOperationNotFound": "<%= operation %> operation not found" } \ No newline at end of file diff --git a/common/locales/sr/noscript.json b/common/locales/sr/noscript.json new file mode 100644 index 0000000000..6057268ef2 --- /dev/null +++ b/common/locales/sr/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Alas! Your browser doesn't have JavaScript enabled", + "jsDisabledHeadingFull": "Alas! Your browser doesn't have JavaScript enabled and without it, Habitica can't work properly", + "jsDisabledText": "Habitica can't properly display the site without it!", + "jsDisabledLink": "Please enable JavaScript to continue!" +} \ No newline at end of file diff --git a/common/locales/sr/npc.json b/common/locales/sr/npc.json index 53bec065a1..38428fa5c4 100644 --- a/common/locales/sr/npc.json +++ b/common/locales/sr/npc.json @@ -7,15 +7,19 @@ "daniel": "Danijel", "danielText": "Dobro došli u Krčmu! Smestite se i upoznajte se s meštanima. Ako poželite da se odmorite (ako idete na put, ili se razbolite), naći ću Vam slobodnu sobu u Gostionici. Dok ste naš gost, nećete trpeti štetu od neurađenih zadataka, ali ćete i dalje moći da ih obeležite kao urađene.", "danielText2": "Upozorenje: Ako učestvujete u borbi protiv bosa, trpećete štetu zbog propuštenih zadataka ostalih članova Vaše družine! Takođe, šteta koju nanesete bosu neće se videti dok ne napustite Gostionicu, niti će se predmeti koje nađete pojaviti u Vašem inventaru.", + "danielTextBroken": "Welcome to the Tavern... I guess... If you need to rest, I'll set you up at the Inn... While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off... if you have the energy...", + "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": "Trgovac Aleksander", "welcomeMarket": "Dobro došli na Pijacu! Kupite jaja i napitke koje ne možete da nađete! Prodajte što Vam nije potrebno! Razgledajte našu robu.", - "sellForGold": "Prodati <%= item %> za <%= gold %> Zlata", - "sellEggForGold": "Sell <%= itemType %> Egg for <%= gold %> Gold", - "sellPotionForGold": "Sell <%= itemType %> Potion for <%= gold %> Gold", + "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?", + "sellForGold": "Sell it for <%= gold %> Gold", "buyGems": "Kupiti dragulje", "justin": "Džastin", "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!", + "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...", "USD": "USD", "newStuff": "Novosti", "cool": "Pročitaću kasnije", diff --git a/common/locales/sr/pets.json b/common/locales/sr/pets.json index ec6b227221..13cf85ec6c 100644 --- a/common/locales/sr/pets.json +++ b/common/locales/sr/pets.json @@ -58,8 +58,16 @@ "firstDrop": "Sistem nalaženja predmeta je otključan! Ubuduće, kad završite zadatak, imaćete malu šansu da nađete predmete, uključujući jaja, napitke, i hranu. Upravi ste našli <%= eggText %> Jaje! <%= eggNotes %>", "useGems": "Ako želite neku zver i ne možete više da čekate da je nađete, u Inventar > Pijaca možete da ih kupite za dragulje.", "hatchAPot": "Želite li da se izlegne <%= potion %> <%= egg %>?", + "hatchedPet": "You hatched a <%= potion %> <%= egg %>!", + "displayNow": "Display Now", + "displayLater": "Display Later", + "earnedCompanion": "With all your productivity, you've earned a new companion. Feed it to make it grow!", "feedPet": "Želite li da <%= name %> pojede <%= article %><%= text %>?", "useSaddle": "Staviti sedlo na <%= pet %>?", + "raisedPet": "You grew a <%= pet %>!", + "earnedSteed": "By completing your tasks, you've earned a faithful steed!", + "rideNow": "Ride Now", + "rideLater": "Ride Later", "petName": "<%= potion %> <%= egg %>", "mountName": "<%= potion %> <%= mount %>", "petKeyName": "Ključ štenare", diff --git a/common/locales/sr/quests.json b/common/locales/sr/quests.json index 79ca4c06e9..946f9ceaad 100644 --- a/common/locales/sr/quests.json +++ b/common/locales/sr/quests.json @@ -13,6 +13,7 @@ "youReceived": "Dobili ste", "dropQuestCongrats": "Congratulations on earning this quest scroll! You can invite your party to begin the quest now, or come back to it any time in your Inventory > Quests.", "questSend": "Clicking \"Invite\" will send an invitation to your party members. When all members have accepted or denied, the quest begins. See status under Social > Party.", + "questSendBroken": "Clicking \"Invite\" will send an invitation to your party members... When all members have accepted or denied, the quest begins... See status under Social > Party...", "inviteParty": "Invite Party to Quest", "questInvitation": "Poziv u misiju:", "questInvitationTitle": "Poziv u misiju", @@ -24,6 +25,7 @@ "rejected": "Odbijeno", "pending": "Bez odgovora", "questStart": "Misija počinje kad svi članovi odgovore. Samo oni koji su prihvatili poziv moći će da učestvuju u misiji i dobiju predmete. Ako pozvani članovi ne odgovore posle dužeg perioda (ili su neaktivni), vlasnik misije može da je pokrene klikom na „Polazak“. Vlasnik misije može i da je otkaže, a u tom slučaju svitak s misijom biće mu vraćen.", + "questStartBroken": "Once all members have either accepted or rejected, the quest begins... Only those that clicked \"accept\" will be able to participate in the quest and receive the drops... If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\"... The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\"...", "begin": "Polazak", "bossHP": "Zdravlje bosa", "bossStrength": "Snaga Bosa", @@ -34,9 +36,14 @@ "itemsToCollect": "Items to Collect", "bossDmg1": "Završavajte svoje Svakodnevne i Jednokratne zadatke da biste naneli štetu bosu. Crveni zadaci, Vatra, i Divlji udarac načiniće još veću štetu. Za svaki propušten Svakodnevni zadatak bos nanosi štetu svakom učesniku misije (šteta od zadatka pomnožena sa snagom bosa) povrh normalne štete od zadatka. Završavajte Svakodnevne zadatke kako bi vaša družina bila zdrava. Sva šteta koju bos primi i nanese obračunava se na kraju dana.(odnosno u trenutku smene između dva dana).", "bossDmg2": "Samo učesnici će se boriti protiv bosa i dobiti deo plena.", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "Each completed Daily and To-Do and each positive Habit hurts the boss... Hurt it more with redder tasks or Brutal Smash and Burst of Flames... The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies... All damage to and from a boss is tallied on cron (your day roll-over)...", + "bossDmg2Broken": "Only participants will fight the boss and share in the quest loot...", + "tavernBossInfo": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "tavernBossInfoBroken": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss... Incomplete Dailies fill the Exhaust Strike Bar... When the Exhaust Strike bar is full, the World Boss will attack an NPC... A World Boss will never damage individual players or accounts in any way... Only active accounts not resting in the Inn will have their tasks tallied...", "bossColl1": "Da biste dobili predmete, radite pozitivne zadatke.Na misiji predmeti padaju na isti način kao i inače, ali nećete moći da ih vidite do sledećeg dana, kad će svi nađeni predmeti biti sakupljeni na gomilu.", "bossColl2": "Samo učesnici mogu da preuzmu predmete i dobiju deo plena.", + "bossColl1Broken": "To collect items, do your positive tasks... Quest items drop just like normal items; however, you won't see the drops until the next day, then everything you've found will be tallied up and contributed to the pile...", + "bossColl2Broken": "Only participants can collect items and share in the quest loot...", "abort": "Prekinuti", "leaveQuest": "Leave Quest", "sureLeave": "Are you sure you want to leave the active quest? All your quest progress will be lost.", @@ -63,10 +70,13 @@ "sureAbort": "Jeste li sigurni da želite da prekinete ovu misiju? Misija će biti prekinuta za celu družinu i sva dostignuća biće izgubljena. Vlasnik misije zadržaće svitak sa misijom.", "doubleSureAbort": "Jeste li sigurni da ste sigurni? Ne radite nešto zbog čega ćete se kajati.", "questWarning": "Ako novi igrači pristupe družini pre nego što misija počne, i oni će dobiti pozivnice. Kad misija počne, novi članovi družine ne mogu da se priključe.", + "questWarningBroken": "If new players join the party before the quest starts, they will also receive an invitation... However once the quest has started, no new party members can join the quest...", "bossRageTitle": "Bes", "bossRageDescription": "Kada se ova skala popuni, bos će upotrebiti specijalni napad.", "startAQuest": "START A QUEST", "startQuest": "Start Quest", "whichQuestStart": "Which quest do you want to start?", - "getMoreQuests": "Get more quests" + "getMoreQuests": "Get more quests", + "unlockedAQuest": "You unlocked a quest!", + "leveledUpReceivedQuest": "You leveled up to Level <%= level %> and received a quest scroll!" } \ No newline at end of file diff --git a/common/locales/sr/questscontent.json b/common/locales/sr/questscontent.json index 0d137100d2..22f7911467 100644 --- a/common/locales/sr/questscontent.json +++ b/common/locales/sr/questscontent.json @@ -261,5 +261,17 @@ "questBurnoutDropPhoenixMount": "Phoenix (Mount)", "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!", + "questFrogText": "Swamp of the Clutter Frog", + "questFrogNotes": "As you and your friends are slogging through the Swamps of Stagnation, @starsystemic points at a large sign. \"Stay on the path -- if you can.\"

\"Surely that isn't hard!\" @RosemonkeyCT says. \"It's broad and clear.\"

But as you continue, you notice that path is gradually overtaken by the muck of the swamp, laced with bits of strange blue debris and clutter, until it's impossible to proceed.

As you look around, wondering how it got this messy, @Jon Arjinborn shouts, \"Look out!\" An angry frog leaps from the sludge, clad in dirty laundry and lit by blue fire. You will have to overcome this poisonous Clutter Frog to progress!", + "questFrogCompletion": "The frog cowers back into the muck, defeated. As it slinks away, the blue slime fades, leaving the way ahead clear.

Sitting in the middle of the path are three pristine eggs. \"You can even see the tiny tadpoles and through the clear casing!\" @Breadstrings says. \"Here, you should take them.\"", + "questFrogBoss": "Clutter Frog", + "questFrogDropFrogEgg": "Frog (Egg)", + "questFrogUnlockText": "Unlocks purchasable Frog eggs in the Market", + "questSnakeText": "The Serpent of Distraction", + "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveler astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", + "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", + "questSnakeBoss": "Serpent of Distraction", + "questSnakeDropSnakeEgg": "Snake (Egg)", + "questSnakeUnlockText": "Unlocks purchasable Snake eggs in the Market" } \ No newline at end of file diff --git a/common/locales/sr/rebirth.json b/common/locales/sr/rebirth.json index b427c47669..b4bc11f66d 100644 --- a/common/locales/sr/rebirth.json +++ b/common/locales/sr/rebirth.json @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "Možete da steknete i odlikovanje za započinjanje nove avanture!", "beReborn": "Reinkarnirajte se", "rebirthAchievement": "Započeli ste novu avanturu! Ovo Vam je <%= number %>. reinkarnacija, a najviši nivo koji ste dostigli je <%= level %>. Da biste dobili još odlikovanja za reinkarnaciju, započnite novu avanturu kad dostignete još viši nivo!", + "rebirthAchievement100": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is 100 or higher. To stack this Achievement, begin your next new adventure when you've reached at least 100!", "rebirthBegan": "Započeo novu avanturu", "rebirthText": "Korisnik je započeo <%= rebirths %> novih avantura", "rebirthOrb": "Upotrebio Sferu za reinkarnaciju da se vrati na početak igre nakon što je dostigao nivo", + "rebirthOrb100": "Used an Orb of Rebirth to start over after attaining Level 100 or higher", "rebirthPop": "Počnite iz početka s nivoa 1, i zadržite odlikovanja, kolekcionarske predmete, i zadatke, zajedno sa istorijom.", "rebirthName": "Sfera za reinkarnaciju", "reborn": "Reinkarniran, najviši nivo <%= reLevel %>" diff --git a/common/locales/sr/settings.json b/common/locales/sr/settings.json index 4c80ebe760..ef02142a2c 100644 --- a/common/locales/sr/settings.json +++ b/common/locales/sr/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "Ako je opcija odabrana, spisak tagova će biti skriven kad otvorite prozor za izmenu zadatka.", "startAdvCollapsed": "Sakriti Napredna podešavanja", "startAdvCollapsedPop": "Ako je opcija odabrana, Napredna podešavanja će biti skrivena kad otvorite prozor za izmenu zadatka.", + "dontShowAgain": "Don't show this again", + "suppressLevelUpModal": "Don't show popup when gaining a level", + "suppressHatchPetModal": "Don't show popup when hatching a pet", + "suppressRaisePetModal": "Don't show popup when raising a pet into a mount", + "suppressStreakModal": "Don't show popup when attaining a Streak achievement", "showTour": "Prikazati uvod", "restartTour": "Pogledajte ponovo uvod koji ste videli kad ste prvi put došli u Habitica.", "showBailey": "Prikazati Bejli", @@ -81,7 +86,6 @@ "emailChange1": "Ako želite da promenite imejl adresu, pošaljite poruku na", "emailChange2": "admin@habitica.com", "emailChange3": "sa svojom novom i starom adresom, i sa svojim UID kodom.", - "username": "Korisničko ime", "usernameOrEmail": "Korisničko ime ili imejl-adresa", "email": "E-mail adresa", "registeredWithFb": "Prijava / Registracija preko Facebook-a", @@ -89,7 +93,7 @@ "loginNameDescription2": "Korisnik -> Profil", "loginNameDescription3": "da promenite ime koje se pojavljuje na Vašem avataru i u Krčmi.", "emailNotifications": "Obaveštenja imejlom", - "wonChallenge": "Savladali ste izazov", + "wonChallenge": "You won a Challenge!", "newPM": "Primljena privatna poruka", "giftedGems": "Poklonjeni dragulji", "giftedGemsInfo": "<%= amount %> Dragulja - od <%= name %>", @@ -118,5 +122,29 @@ "promoCode": "Kupon", "promoCodeApplied": "Kupon je aktiviran! Pogledajte u svoj inventar", "promoPlaceholder": "Unesite kod sa kupona", - "displayInviteToPartyWhenPartyIs1": "Prikazati opciju „Pozvati u družinu” kad družina ima 1 člana." + "displayInviteToPartyWhenPartyIs1": "Prikazati opciju „Pozvati u družinu” kad družina ima 1 člana.", + "saveCustomDayStart": "Save Custom Day Start", + "registration": "Registration", + "addLocalAuth": "Add local authentication:", + "generateCodes": "Generate Codes", + "generate": "Generate", + "getCodes": "Get Codes", + "webhooks": "Webhooks", + "enabled": "Enabled", + "webhookURL": "Webhook URL", + "add": "Add", + "buyGemsGoldCap": "Cap raised to <%= amount %>", + "mysticHourglass": "<%= amount %> Mystic Hourglass", + "mysticHourglassText": "Mystic Hourglasses allow purchasing a previous month's Mystery Item set.", + "purchasedPlanId": "Recurring $<%= price %> each <%= months %> Month(s) (<%= plan %>)", + "purchasedPlanExtraMonths": "You have <%= months %> months of subscription credit.", + "consecutiveSubscription": "Consecutive Subscription", + "consecutiveMonths": "Consecutive Months:", + "gemCapExtra": "Gem Cap Extra:", + "mysticHourglasses": "Mystic Hourglasses:", + "paypal": "PayPal", + "amazonPayments": "Amazon Payments", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/sr/subscriber.json b/common/locales/sr/subscriber.json index 9e86341459..99008b01d7 100644 --- a/common/locales/sr/subscriber.json +++ b/common/locales/sr/subscriber.json @@ -60,7 +60,7 @@ "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tajler<%= linkEnd %> i <%= linkStartVicky %>Viki<%= linkEnd %>", "timeTravelersTitle": "Tajanstveni putnici kroz vreme", "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.", - "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 <%= linkStart %>here<%= linkEnd %>! If those don't satisfy you, perhaps you'd be interested in one of our fashionably futuristic Steampunk Item Sets?", + "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!", "subUpdateCard": "Ažuriranje karte", diff --git a/common/locales/sr/tasks.json b/common/locales/sr/tasks.json index 33827b4f1f..77eebadc19 100644 --- a/common/locales/sr/tasks.json +++ b/common/locales/sr/tasks.json @@ -88,8 +88,7 @@ "fortifyText": "Fortify will return all your tasks to a neutral (yellow) state, as if you'd just added them, and top your Health off to full. This is great if all your red tasks are making the game too hard, or all your blue tasks are making the game too easy. If starting fresh sounds much more motivating, spend the Gems and catch a reprieve!", "sureDelete": "Jeste li sigurni da želite da obrišete ovaj zadatak?", "streakCoins": "Bonus zbog redovnog izvršavanja zadataka!", - "pushTaskToTop": "Premesti zadatak na vrh", - "pushTaskToBottom": "Premesti zadatak na dno", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "Prvo ukucajte naziv zadatka.", "dailiesRestingInInn": "Odmarate se u Gostionici! Svakodnevni zadaci će na početku dana biti obeleženi kao neurađeni, ali nećete trpeti štetu zbog neurađenih zadataka na kraju dana. Ako učestvujete u misiji, nećete nanositi štetu bosu, ni dobijati predmete, dok se ne odjavite iz Gostionice. Ako članovi družine budu imali neurađene svakodnevne zadatke, bos će povrediti i Vas.", "habitHelp1": "Good Habits are things that you do often. They award Gold and Experience every time you click the <%= plusIcon %>.", diff --git a/common/locales/sv/backgrounds.json b/common/locales/sv/backgrounds.json index 19a2552b70..20239e09f5 100644 --- a/common/locales/sv/backgrounds.json +++ b/common/locales/sv/backgrounds.json @@ -2,25 +2,25 @@ "backgrounds": "Bakgrunder", "backgrounds062014": "SET 1: Släpptes Juni 2014", "backgroundBeachText": "Strand", - "backgroundBeachNotes": "Strosa runt på en varm Strand.", + "backgroundBeachNotes": "Strosa runt på en varm strand.", "backgroundFairyRingText": "Älvring", - "backgroundFairyRingNotes": "Dansa i en Älvring.", + "backgroundFairyRingNotes": "Dansa i en älvring.", "backgroundForestText": "Skog", - "backgroundForestNotes": "Promenera genom en Sommarskog.", + "backgroundForestNotes": "Promenera genom en sommarskog.", "backgrounds072014": "SET 2: Släpptes Juli 2014", "backgroundCoralReefText": "Korallrev", - "backgroundCoralReefNotes": "Simma i ett Korallrev.", + "backgroundCoralReefNotes": "Simma i ett korallrev.", "backgroundOpenWatersText": "Öppna Vatten", - "backgroundOpenWatersNotes": "Njut av de Öppna Vattnen.", + "backgroundOpenWatersNotes": "Njut av de öppna vattnen.", "backgroundSeafarerShipText": "Havsfartyg", "backgroundSeafarerShipNotes": "Segla ombord ett Havsfartyg.", "backgrounds082014": "SET 3: Släpptes Augusti 2014", "backgroundCloudsText": "Moln", "backgroundCloudsNotes": "Flyg bland Molnen.", "backgroundDustyCanyonsText": "Dammig Ravin", - "backgroundDustyCanyonsNotes": "Vandra genom en Dammig Ravin.", + "backgroundDustyCanyonsNotes": "Vandra genom en dammig ravin.", "backgroundVolcanoText": "Vulkan", - "backgroundVolcanoNotes": "Värm dig inuti en Vulkan.", + "backgroundVolcanoNotes": "Värm dig inuti en vulkan.", "backgrounds092014": "SET 4: Släpptes September 2014", "backgroundThunderstormText": "Åskväder", "backgroundThunderstormNotes": "Led blixtar i ett Åskväder.", @@ -105,18 +105,32 @@ "backgroundSunsetSavannahNotes": "Vandra omkring på Savannen i Solnedgången.", "backgroundTwinklyPartyLightsText": "Blinkande Partybeysning", "backgroundTwinklyPartyLightsNotes": "Dansa under Blinkande Partybelysning!", - "backgrounds092015": "SET 16: Released September 2015", - "backgroundMarketText": "Habitica Market", - "backgroundMarketNotes": "Shop in the Habitica Market.", - "backgroundStableText": "Habitica Stable", - "backgroundStableNotes": "Tend mounts in the Habitica Stable.", - "backgroundTavernText": "Habitica Tavern", - "backgroundTavernNotes": "Visit the Habitica Tavern.", - "backgrounds102015": "SET 17: Released October 2015", - "backgroundHarvestMoonText": "Harvest Moon", - "backgroundHarvestMoonNotes": "Cackle under the Harvest Moon.", - "backgroundSlimySwampText": "Slimy Swamp", - "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", - "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgrounds092015": "SET 16: Släpptes September 2015", + "backgroundMarketText": "Habiticas marknad", + "backgroundMarketNotes": "Handla i Habiticas marknad", + "backgroundStableText": "Habiticas stall", + "backgroundStableNotes": "Ta hand om riddjur i Habiticas stall", + "backgroundTavernText": "Habiticas värdshus", + "backgroundTavernNotes": "Besök Habiticas värdshus", + "backgrounds102015": "SET 17: Släpptes Oktober 2015", + "backgroundHarvestMoonText": "Skördemåne", + "backgroundHarvestMoonNotes": "Kackla under skördemånen", + "backgroundSlimySwampText": "Slemmig Sumpmark", + "backgroundSlimySwampNotes": "Slaska genom en slemmig sumpmark", + "backgroundSwarmingDarknessText": "Myllrande Mörker", + "backgroundSwarmingDarknessNotes": "Rys i det myllrande mörkret", + "backgrounds112015": "SET 18: Released November 2015", + "backgroundFloatingIslandsText": "Floating Islands", + "backgroundFloatingIslandsNotes": "Hop across the Floating Islands.", + "backgroundNightDunesText": "Night Dunes", + "backgroundNightDunesNotes": "Walk peacefully through the Night Dunes.", + "backgroundSunsetOasisText": "Sunset Oasis", + "backgroundSunsetOasisNotes": "Bask in the Sunset Oasis.", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/sv/challenge.json b/common/locales/sv/challenge.json index 8ecba71765..1c92faac8b 100644 --- a/common/locales/sv/challenge.json +++ b/common/locales/sv/challenge.json @@ -17,7 +17,7 @@ "deleteOrSelect": "Ta bort eller välj vinnare", "endChallenge": "Avsluta utmaning", "challengeDiscription": "Det här är utmaningens uppgifter som kommer att läggas till dina uppgifter när du går med i utmaningen. Exempeluppgifterna här under kommer att ändra färg och få diagram som visar gruppens samlade framsteg.", - "hows": "Hur går det för alla?", + "hows": "Hur går det för er allihop?", "filter": "Filter", "groups": "Grupper", "all": "Alla", @@ -33,8 +33,8 @@ "challengeTagPop": "Utmaningar syns på tagglistor och uppgiftens verktygstips. Så du behöver en beskrivande titel, men även ett 'kort namn'. T.ex. 'Gå ner 5 kilo på 3 månader' som kan förkortas till '-5kg' (Klicka för mer information).", "challengeDescr": "Beskrivning", "prize": "Vinst", - "prizePop": "If someone can 'win' your challenge, you can optionally award that winner a Gem prize. The maximum number you can award is the number of gems you own (plus the number of guild gems, if you created this challenge's guild). Note: This prize can't be changed later.", - "prizePopTavern": "If someone can 'win' your challenge, you can award that winner a Gem prize. Max = number of gems you own. Note: This prize can't be changed later and Tavern challenges will not be refunded if the challenge is cancelled.", + "prizePop": "Om någon kan 'vinna' din utmaning så kan du välja att belöna vinnaren med Juveler som pris. Det högsta antalet du kan ge är antalet juveler du äger (plus antalet juveler gillet äger, om du skapade den här utmaningens gille). Obs: Detta pris kan inte ändras i efterhand.", + "prizePopTavern": "Om någon kan 'vinna' din utmaning så kan du belöna vinnaren med Juveler som pris. Max = antalet juveler du äger. Obs: Detta pris kan inte ändras i efterhand och utmaningar i Tavernan återbetalas inte om utmaningen blir inställd.", "publicChallenges": "Minst 1 Juvel för offentliga utmaningar (motverkar spam).", "officialChallenge": "Officiell Habitica-utmaning", "by": "av", @@ -43,8 +43,8 @@ "exportChallengeCSV": "Exportera till CSV", "selectGroup": "Var vänlig välj grupp", "challengeCreated": "Utmaning skapad", - "sureDelCha": "Are you sure you want to delete this challenge?", - "sureDelChaTavern": "Are you sure you want to delete this challenge? Your gems will not be refunded.", + "sureDelCha": "Är du säker på att du vill ta bort den här utmaningen?", + "sureDelChaTavern": "Är du säker på att du vill ta bort den här utmaningen? Dina juveler kommer inte att återbetalas.", "removeTasks": "Ta bort uppgifter", "keepTasks": "Ha kvar uppgifter", "closeCha": "Avsluta utmaning och...", @@ -56,8 +56,12 @@ "backToChallenges": "Tillbaka till alla utmaningar", "prizeValue": "<%= gemcount %> <%= gemicon %> Pris", "clone": "Klon", - "challengeNotEnoughGems": "You do not have enough gems to post this challenge.", - "noPermissionEditChallenge": "You don't have permissions to edit this challenge", - "noPermissionDeleteChallenge": "You don't have permissions to delete this challenge", - "noPermissionCloseChallenge": "You don't have permissions to close this challenge" + "challengeNotEnoughGems": "Du har inte tillräckligt med juveler för att skapa den här utmaningen.", + "noPermissionEditChallenge": "Du har inte tillstånd att ändra den här utmaningen.", + "noPermissionDeleteChallenge": "Du har inte tillstånd att ta bort den här utmaningen.", + "noPermissionCloseChallenge": "Du har inte tillstånd att stänga den här utmaningen.", + "congratulations": "Congratulations!", + "hurray": "Hurray!", + "noChallengeOwner": "no owner", + "noChallengeOwnerPopover": "This challenge does not have an owner because the person who created the challenge deleted their account." } \ No newline at end of file diff --git a/common/locales/sv/character.json b/common/locales/sv/character.json index f0565a1b2e..d06d0f4899 100644 --- a/common/locales/sv/character.json +++ b/common/locales/sv/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "Klassbonus", "battleGear": "Stridsutrustning", "battleGearText": "Detta är den utrustning som du bär i strid och den påverkar siffrorna när du hanterar dina uppgifter.", + "autoEquipBattleGear": "Auto-equip new gear", "costume": "Dräkt", "costumeText": "Om du föredrar utseendet på annan utrustning än den du har på dig, kryssa i rutan \"Använd Dräkt\" för att visa upp din favoritdräkt medan du har på dig din stridsutrustning undertill.", "useCostume": "Använd Dräkt", @@ -64,6 +65,10 @@ "ultimGearText": "Har uppgraderat till max för vapen och utrustning för de följande klasserna:", "level": "Level", "levelUp": "Level upp!", + "gainedLevel": "You gained a level!", + "leveledUp": "By accomplishing your real-life goals, you've grown to Level <%= level %>!", + "fullyHealed": "You have been fully healed!", + "huzzah": "Huzzah!", "mana": "Mana", "hp": "HP", "mp": "MP", diff --git a/common/locales/sv/content.json b/common/locales/sv/content.json index 3c1a264bca..7635bd95e6 100644 --- a/common/locales/sv/content.json +++ b/common/locales/sv/content.json @@ -6,96 +6,102 @@ "armoireLastItem": "Du har hittat den sista ovanliga utrustningen i det förtrollade vapenskåpet.", "armoireNotesEmpty": "Klädskåpet kommer att ha ny utrustning den första veckan varje månad. Tills dess kan du fortsätta klicka för erfarenhet och mat!", "dropEggWolfText": "varg", - "dropEggWolfMountText": "Wolf", - "dropEggWolfAdjective": "a loyal", + "dropEggWolfMountText": "Varg", + "dropEggWolfAdjective": "en lojal", "dropEggTigerCubText": "tigerunge", "dropEggTigerCubMountText": "tiger", - "dropEggTigerCubAdjective": "a fierce", + "dropEggTigerCubAdjective": "vild", "dropEggPandaCubText": "pandaunge", "dropEggPandaCubMountText": "panda", - "dropEggPandaCubAdjective": "a gentle", + "dropEggPandaCubAdjective": "lugn", "dropEggLionCubText": "lejonunge", "dropEggLionCubMountText": "lejon", - "dropEggLionCubAdjective": "a regal", + "dropEggLionCubAdjective": "kunglig", "dropEggFoxText": "räv", - "dropEggFoxMountText": "Fox", - "dropEggFoxAdjective": "a wily", + "dropEggFoxMountText": "Räv", + "dropEggFoxAdjective": "lömsk", "dropEggFlyingPigText": "flygande gris", - "dropEggFlyingPigMountText": "Flying Pig", - "dropEggFlyingPigAdjective": "a whimsical", + "dropEggFlyingPigMountText": "Flygande Gris", + "dropEggFlyingPigAdjective": "nyckfull", "dropEggDragonText": "drake", - "dropEggDragonMountText": "Dragon", - "dropEggDragonAdjective": "a mighty", + "dropEggDragonMountText": "Drake", + "dropEggDragonAdjective": "mäktig", "dropEggCactusText": "kaktus", - "dropEggCactusMountText": "Cactus", - "dropEggCactusAdjective": "a prickly", + "dropEggCactusMountText": "Kaktus", + "dropEggCactusAdjective": "retlig", "dropEggBearCubText": "björnunge", "dropEggBearCubMountText": "björn", - "dropEggBearCubAdjective": "a cuddly", + "dropEggBearCubAdjective": "kelig", "questEggGryphonText": "grip", - "questEggGryphonMountText": "Gryphon", - "questEggGryphonAdjective": "a proud", + "questEggGryphonMountText": "Grip", + "questEggGryphonAdjective": "stolt", "questEggHedgehogText": "igelkott", - "questEggHedgehogMountText": "Hedgehog", - "questEggHedgehogAdjective": "a spiky", + "questEggHedgehogMountText": "Igelkott", + "questEggHedgehogAdjective": "taggig", "questEggDeerText": "hjort", - "questEggDeerMountText": "Deer", - "questEggDeerAdjective": "an elegant", + "questEggDeerMountText": "Hjort", + "questEggDeerAdjective": "elegant", "questEggEggText": "ägg", "questEggEggMountText": "äggkorg", - "questEggEggAdjective": "a colorful", + "questEggEggAdjective": "ärgglad", "questEggRatText": "råtta", - "questEggRatMountText": "Rat", - "questEggRatAdjective": "a dirty", + "questEggRatMountText": "Råtta", + "questEggRatAdjective": "smutsig", "questEggOctopusText": "bläckfisk", - "questEggOctopusMountText": "Octopus", - "questEggOctopusAdjective": "a slippery", + "questEggOctopusMountText": "Bläckfisk", + "questEggOctopusAdjective": "slemmig", "questEggSeahorseText": "sjöhäst", - "questEggSeahorseMountText": "Seahorse", - "questEggSeahorseAdjective": "a prize", + "questEggSeahorseMountText": "Sjöhäst", + "questEggSeahorseAdjective": "vinst", "questEggParrotText": "papegoja", - "questEggParrotMountText": "Parrot", - "questEggParrotAdjective": "a vibrant", + "questEggParrotMountText": "Papegoja", + "questEggParrotAdjective": "livfull", "questEggRoosterText": "tupp", - "questEggRoosterMountText": "Rooster", - "questEggRoosterAdjective": "a strutting", + "questEggRoosterMountText": "Tupp", + "questEggRoosterAdjective": "svassande", "questEggSpiderText": "spindel", - "questEggSpiderMountText": "Spider", - "questEggSpiderAdjective": "a creepy", + "questEggSpiderMountText": "Spindel", + "questEggSpiderAdjective": "läskig", "questEggOwlText": "uggla", - "questEggOwlMountText": "Owl", - "questEggOwlAdjective": "a wise", + "questEggOwlMountText": "Uggla", + "questEggOwlAdjective": "vis", "questEggPenguinText": "pingvin", - "questEggPenguinMountText": "Penguin", - "questEggPenguinAdjective": "a perspicacious", + "questEggPenguinMountText": "Pingvin", + "questEggPenguinAdjective": "skarpsinnig", "questEggTRexText": "Tyrannosaurus", - "questEggTRexMountText": "Tyrannosaur", - "questEggTRexAdjective": "a tiny-armed", + "questEggTRexMountText": "Tyrannosaurus", + "questEggTRexAdjective": "kortarmad", "questEggRockText": "sten", - "questEggRockMountText": "Rock", - "questEggRockAdjective": "a lively", + "questEggRockMountText": "Sten", + "questEggRockAdjective": "livlig", "questEggBunnyText": "kanin", - "questEggBunnyMountText": "Bunny", - "questEggBunnyAdjective": "a snuggly", + "questEggBunnyMountText": "Kanin", + "questEggBunnyAdjective": "gosig", "questEggSlimeText": "marshmallowslem", "questEggSlimeMountText": "Marshmallow Slime", - "questEggSlimeAdjective": "a sweet", + "questEggSlimeAdjective": "söt", "questEggSheepText": "får", - "questEggSheepMountText": "Sheep", - "questEggSheepAdjective": "a woolly", + "questEggSheepMountText": "Får", + "questEggSheepAdjective": "ullig", "questEggCuttlefishText": "Bläckfisk", - "questEggCuttlefishMountText": "Cuttlefish", - "questEggCuttlefishAdjective": "a cuddly", + "questEggCuttlefishMountText": "Sepialiknande Bläckfisk", + "questEggCuttlefishAdjective": "kelig", "questEggWhaleText": "Val", - "questEggWhaleMountText": "Whale", - "questEggWhaleAdjective": "a splashy", - "questEggCheetahText": "Cheetah", - "questEggCheetahMountText": "Cheetah", - "questEggCheetahAdjective": "an honest", - "questEggHorseText": "Horse", - "questEggHorseMountText": "Horse", - "questEggHorseAdjective": "a galloping", - "eggNotes": "Find a hatching potion to pour on this egg, and it will hatch into <%= eggAdjective(locale) %> <%= eggText(locale) %>.", + "questEggWhaleMountText": "Val", + "questEggWhaleAdjective": "stänkig", + "questEggCheetahText": "Gepard", + "questEggCheetahMountText": "Gepard", + "questEggCheetahAdjective": "ärlig", + "questEggHorseText": "Häst", + "questEggHorseMountText": "Häst", + "questEggHorseAdjective": "galloperande", + "questEggFrogText": "Frog", + "questEggFrogMountText": "Frog", + "questEggFrogAdjective": "a princely", + "questEggSnakeText": "Snake", + "questEggSnakeMountText": "Snake", + "questEggSnakeAdjective": "a slithering", + "eggNotes": "Hitta en kläckningsdryck och häll på det här ägget så kommer det kläckas till <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "Standard", "hatchingPotionWhite": "Vit", "hatchingPotionDesert": "Öken", @@ -106,9 +112,9 @@ "hatchingPotionCottonCandyPink": "Ljusrosa", "hatchingPotionCottonCandyBlue": "Ljusblå", "hatchingPotionGolden": "Guld", - "hatchingPotionSpooky": "Spooky", + "hatchingPotionSpooky": "läskig", "hatchingPotionNotes": "Häll den här på ett ägg, så kläcks det som ett <%= potText(locale) %> husdjur.", - "premiumPotionAddlNotes": "Not usable on quest pet eggs.", + "premiumPotionAddlNotes": "Kan ej användas på ägg till uppdragshusdjur", "foodMeat": "Kött", "foodMilk": "Mjölk", "foodPotatoe": "Potatis", diff --git a/common/locales/sv/death.json b/common/locales/sv/death.json index 0918bd24fa..935da8131e 100644 --- a/common/locales/sv/death.json +++ b/common/locales/sv/death.json @@ -1,7 +1,16 @@ { "lostAllHealth": "Din Hälsa tog slut!", - "dontDespair": "Oroa dig inte!", - "deathPenaltyDetails": "Du förlorade en Nivå, ditt Guld, och en Utrustningsdel, men med hårt jobb kan du få tillbaka allt! Lycka till -- du fixar det.", - "refillHealthTryAgain": "Refill Health & Try Again", - "dyingOftenTips": "Is this happening often? Here are some tips!" + "dontDespair": "Misströsta inte!", + "deathPenaltyDetails": "Du förlorade en Nivå, ditt Guld, och en Utrustningsdel, men med hårt arbete kan du få tillbaka alltihop! Lycka till - du klarar det galant.", + "refillHealthTryAgain": "Fyll på Hälsa & Försök Igen", + "dyingOftenTips": "Händer detta ofta? Här är några tips!", + "losingHealthWarning": "Försiktigt - Du förlorar hälsan!", + "losingHealthWarning2": "Don't let your Health drop to zero! If you do, you'll lose a level, your Gold, and a piece of equipment.", + "toRegainHealth": "För att återfå hälsa:", + "lowHealthTips1": "Level up to fully heal!", + "lowHealthTips2": "Buy a Health Potion from the Rewards column to restore 15 Health Points.", + "losingHealthQuickly": "Losing Health quickly?", + "lowHealthTips3": "Incomplete Dailies hurt you overnight, so be careful not to add too many at first!", + "lowHealthTips4": "If a Daily isn't due on a certain day, you can disable it by clicking the pencil icon.", + "goodLuck": "Good luck!" } \ No newline at end of file diff --git a/common/locales/sv/faq.json b/common/locales/sv/faq.json index c2a7b7deaf..da4277f7f7 100644 --- a/common/locales/sv/faq.json +++ b/common/locales/sv/faq.json @@ -1,22 +1,22 @@ { - "frequentlyAskedQuestions": "Frequently Asked Questions", - "faqQuestion0": "I'm confused. Where do I get an overview?", + "frequentlyAskedQuestions": "Frekvent Ställda Frågor", + "faqQuestion0": "Jag är förvirrad. Var kan jag få en överblick?", "iosFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn experience and gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as Pets, Skills, and Quests! You can customize your character under Menu > Customize Avatar.\n\n Some basic ways to interact: click the (+) in the upper-right-hand corner to add a new task. Tap on an existing task to edit it, and swipe left on a task to delete it. You can sort tasks using Tags in the upper-left-hand corner, and expand and contract checklists by clicking on the checklist bubble.", - "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, the wiki has an excellent step-by-step overview of the game [right here](http://habitica.wikia.com/wiki/Habitica_Wiki).", - "faqQuestion1": "How do I set up my tasks?", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", + "faqQuestion1": "Hur ställer jag in mina uppgifter?", "iosFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.", "webFaqAnswer1": "Good Habits (the ones with a ) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a ) are tasks that you should avoid, like biting nails. Habits with a and a have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n

\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n

\n To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.", - "faqQuestion2": "What are some sample tasks?", + "faqQuestion2": "Finns det några enkla uppgifter?", "iosFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n

\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", "webFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", - "faqQuestion3": "Why do my tasks change color?", + "faqQuestion3": "Varför ändrar mina uppgifter färg?", "iosFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it's a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", "webFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it’s a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", - "faqQuestion4": "Why did my avatar lose health, and how do I regain it?", + "faqQuestion4": "Varför förlorade min avatar hälsan och hur får jag tillbaka den?", "iosFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you tap a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your Party and one of your Party mates did not complete all their Dailies, the Boss will attack you.\n\n The main way to heal is to gain a level, which restores all your health. You can also buy a Health Potion with gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a Party with a Healer, they can heal you as well.", "webFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you click a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your party and one of your party mates did not complete all their Dailies, the Boss will attack you.\n

\n The main way to heal is to gain a level, which restores all your Health. You can also buy a Health Potion with Gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a party (under Social > Party) with a Healer, they can heal you as well.", - "faqQuestion5": "How do I play Habitica with my friends?", - "iosFaqAnswer5": "The best way is to invite them to a Party with you, via the [website](https://habitica.com/#/options/groups/party)! We'll add the ability to create a Party from this app soon, but in the meantime you can use the [website](https://habitica.com/#/options/groups/party). Parties can go on quests, battle monsters, and cast skills to support each other. On the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", + "faqQuestion5": "Hur spelar jag Habitica med mina vänner?", + "iosFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on quests, battle monsters, and cast skills to support each other. Go to Menu > Party and click \"Create New Party\" if you don't already have a Party. Then tap on the Members list, and tap Invite in the upper right-hand corner to invite your friends by entering their User ID (a string of numbers and letters that they can find under Settings > Account Details on the app, and Settings > API on the website). On the website, you can also invite friends via email, which we will add to the app in a future update.\n\nOn the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", "webFaqAnswer5": "The best way is to invite them to a party with you, under Social > Party! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n

\n For more detailed info, check out the wiki pages on [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).", "faqQuestion6": "How do I get a Pet or Mount?", "iosFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch Egg.\" Then choose a hatching potion to determine its color! Go to Menu > Pets to equip your new Pet to your avatar by clicking on it. \n\n You can also grow your Pets into Mounts by feeding them under Menu > Pets. Tap on a Pet, and then select \"Feed Pet\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Menu > Mounts and tap on it to equip it to your avatar.\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", @@ -28,14 +28,17 @@ "iosFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Use Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in a special section in the Rewards Column. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You’ll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "faqQuestion9": "How do I fight monsters and go on Quests?", - "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party on the [website](https://habitica.com/#/options/groups/party), you'll be rewarded with the Basi-List Scroll! (We will add this feature to the app in a future update.)\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for gold and gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", + "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for Gold and Gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "webFaqAnswer9": "First, you need to join or start a party (under Social > Party). Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n

\n Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are three ways to get a scroll:\n

\n * When you invite people to your party, you’ll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Page (Inventory > Quests) for Gold and Gems.\n

\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your party at the same time that you damage the Boss.\n

\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "faqQuestion10": "What are gems, and how do I get them?", + "faqQuestion10": "What are Gems, and how do I get them?", "iosFaqAnswer10": "Gems are purchased with real money by tapping on the gem icon in the header. When people buy gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying gems directly, there are three other ways players can gain gems:\n\n * Win a Challenge on the [website](https://habitica.com) that has been set up by another player under Social > Challenges. (We will be adding Challenges to the app in a future update!)\n * Subscribe on the [website](https://habitica.com/#/options/settings/subscription) and unlock the ability to buy a certain number of gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with gems do not offer any statistical advantages, so players can still make use of the app without them!", "webFaqAnswer10": "Gems are [purchased with real money](https://habitica.com/#/options/settings/subscription), although [subscribers](https://habitica.com/#/options/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n

\n In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n

\n * Win a Challenge that has been set up by another player under Social > Challenges.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", - "faqQuestion11": "How do I report a bug or request a feature?", + "faqQuestion11": "Hur rapporterar jag en bugg eller begär en funktion?", "iosFaqAnswer11": "You can report a bug, request a feature, or send feedback under Menu > Report a Bug and Menu > Send Feedback! We'll do everything we can to assist you.", "webFaqAnswer11": "Bug reports are collected on GitHub. Go to [Help > Report a Bug](https://github.com/HabitRPG/habitrpg/issues/2760) and follow the instructions. Don't worry, we'll get you fixed up soon!\n

\n Feature requests are collected on Trello. Go to [Help > Request a Feature](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) and follow the instructions. Ta-da!", + "faqQuestion12": "How do I battle a World Boss?", + "iosFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", + "webFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n

\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n

\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n

\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", "iosFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the Tavern chat under Menu > Tavern! We're happy to help.", "webFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the [Newbies Guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help." } \ No newline at end of file diff --git a/common/locales/sv/front.json b/common/locales/sv/front.json index 1a4b0f12fb..505722ab23 100644 --- a/common/locales/sv/front.json +++ b/common/locales/sv/front.json @@ -74,7 +74,7 @@ "infhQuote": "[Habitica] has really helped me impart structure to my life in graduate school.", "invalidEmail": "En giltig e-postadress krävs för att kunna utföra en lösenordsåterställning.", "irishfeet123Quote": "I've had horrible habits with clearing my place completely after meals and leaving cups all over the place. [Habitica] has cured that!", - "joinOthers": "Join 250,000 people making it fun to achieve goals!", + "joinOthers": "Join <%= userCount %> people making it fun to achieve goals!", "kazuiQuote": "Before [Habitica], I was stuck with my thesis, as well as dissatisfied with my personal discipline regarding housework and things like learning vocabulary and studying Go theory. It turns out breaking down these tasks into smaller manageable checklists is quite the thing to keep me motivated and constantly working.", "landingadminlink": "adminpaket", "landingend": "Inte övertalad än?", @@ -179,5 +179,14 @@ "businessInquiries": "Företagsfrågor", "merchandiseInquiries": "Varufrågor", "marketingInquiries": "Reklam/Sociala media-frågor", - "tweet": "Tweet" + "tweet": "Tweet", + "apps": "Apps", + "notifyAndroidApp": "Want us to notify you when the Android app is ready? Sign up for this mailing list!", + "checkOutIOSApp": "Check out our new iOS App!", + "imagine1": "Imagine if improving your life were as fun as playing a game.", + "landingCopy1": "Advance in the game by completing your real-life tasks.", + "landingCopy2": "Battle monsters with friends to stay accountable to your goals.", + "landingCopy3": "Join over <%= userCount %> people having fun as they improve their lives.", + "alreadyHaveAccount": "I already have an account!", + "getStartedNow": "Get Started Now!" } \ No newline at end of file diff --git a/common/locales/sv/gear.json b/common/locales/sv/gear.json index e2a698cca5..737756c42f 100644 --- a/common/locales/sv/gear.json +++ b/common/locales/sv/gear.json @@ -149,13 +149,19 @@ "weaponArmoireRancherLassoText": "Rancher Lasso", "weaponArmoireRancherLassoNotes": "Lassos: the ideal tool for rounding up and wrangling. Increases Strength by <%= str %>, Perception by <%= per %>, and Intelligence by <%= int %>. Enchanted Armoire: Rancher Set (Item 3 of 3).", "weaponArmoireMythmakerSwordText": "Mythmaker Sword", - "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3)", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Iron Crook", - "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3)", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Gold Wing Staff", "weaponArmoireGoldWingStaffNotes": "The wings on this staff constantly flutter and twist. Increases all attributes by <%= attrs %> each. Enchanted Armoire: Independent Item.", "weaponArmoireBatWandText": "Bat Wand", "weaponArmoireBatWandNotes": "This wand can turn any task into a bat! Wave it about and watch them fly away. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireShepherdsCrookText": "Shepherd's Crook", + "weaponArmoireShepherdsCrookNotes": "Useful for herding gryphons. Increases Constitution by <%= con %>. Enchanted Armoire: Shepherd Set (Item 1 of 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "utrustning", "armorBase0Text": "Vanliga kläder", "armorBase0Notes": "Vanliga kläder. Har ingen effekt.", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "Löjliga partyrockar", "armorSpecialBirthday2015Notes": "Grattis på födelsedagen, Habitica! Bär dessa Fåniga Festdräkter för att fira denna underbara dag. Ger ingen fördel.", "armorSpecialGaymerxText": "Regnbågsfärgad krigarutrustning", - "armorSpecialGaymerxNotes": "In celebration of pride season and GaymerX, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGBTQ and gaming and is open to everyone. It takes place at the InterContinental in downtown San Francisco on July 11-13! Confers no benefit.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "Smidig kattdräkt", "armorSpecialSpringRogueNotes": "Impeccably groomed. Increases Perception by <%= per %>. Limited Edition 2014 Spring Gear.", "armorSpecialSpringWarriorText": "Klöver-stålrustning", @@ -307,6 +313,8 @@ "armorMystery201508Notes": "Run fast as a flash in the fluffy Cheetah Costume! Confers no benefit. August 2015 Subscriber Item.", "armorMystery201509Text": "Werewolf Costume", "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Steampunk-dräkt", "armorMystery301404Notes": "Dapper and dashing, wot! Confers no benefit. February 3015 Subscriber Item.", "armorArmoireLunarArmorText": "Soothing Lunar Armor", @@ -321,6 +329,12 @@ "armorArmoireHornedIronArmorNotes": "Fiercely hammered from iron, this horned armor is nearly impossible to break. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Horned Iron Set (Item 2 of 3).", "armorArmoirePlagueDoctorOvercoatText": "Plague Doctor Overcoat", "armorArmoirePlagueDoctorOvercoatNotes": "An authentic overcoat worn by the doctors who battle the Plague of Procrastination! Increases Intelligence by <%= int %>, Strength by <%= str %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 3 of 3).", + "armorArmoireShepherdRobesText": "Shepherd Robes", + "armorArmoireShepherdRobesNotes": "The fabric is cool and breathable, perfect for a hot day herding gryphons in the desert. Increases Strength and Perception by <%= attrs %> each. Enchanted Armoire: Shepherd Set (Item 2 of 3).", + "armorArmoireRoyalRobesText": "Royal Robes", + "armorArmoireRoyalRobesNotes": "Wonderful ruler, rule all day long! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 3 of 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "huvudbonader", "headBase0Text": "Ingen hjälm", "headBase0Notes": "Ingen huvudbonad.", @@ -441,7 +455,7 @@ "headSpecialFall2015HealerText": "Hat of Frog", "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", "headSpecialGaymerxText": "Regnbågsfärgad krigarhjälm", - "headSpecialGaymerxNotes": "In celebration of pride season and GaymerX, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGBTQ and gaming and is open to everyone. It takes place at the InterContinental in downtown San Francisco on July 11-13! Confers no benefit.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "Bevingad hjälm", "headMystery201402Notes": "This winged circlet imbues the wearer with the speed of the wind! Confers no benefit. February 2014 Subscriber Item.", "headMystery201405Text": "Flame of Mind", @@ -464,6 +478,8 @@ "headMystery201508Notes": "This cozy cheetah hat is very fuzzy! Confers no benefit. August 2015 Subscriber Item.", "headMystery201509Text": "Werewolf Mask", "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 Subscriber Item.", "headMystery301404Text": "Stilig cylinderhatt", "headMystery301404Notes": "A fancy top hat for the finest of gentlefolk! January 3015 Subscriber Item. Confers no benefit.", "headMystery301405Text": "Vanlig cylinderhatt", @@ -481,7 +497,7 @@ "headArmoireBlueHairbowText": "Blue Hairbow", "headArmoireBlueHairbowNotes": "Become perceptive, tough, and smart while wearing this beautiful Blue Hairbow! Increases Perception by <%= per %>, Constitution by <%= con %>, and Intelligence by <%= int %>. Enchanted Armoire: Independent Item.", "headArmoireRoyalCrownText": "Royal Crown", - "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Royal Set (Item 1 of 3).", "headArmoireGoldenLaurelsText": "Golden Laurels", "headArmoireGoldenLaurelsNotes": "These golden laurels reward those who have conquered bad habits. Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 2 of 3).", "headArmoireHornedIronHelmText": "Horned Iron Helm", @@ -496,6 +512,12 @@ "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", "headArmoireOrangeCatText": "Orange Cat Hat", "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireBlueFloppyHatText": "Blue Floppy Hat", + "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireShepherdHeaddressText": "Shepherd Headdress", + "headArmoireShepherdHeaddressNotes": "Sometimes the gryphons that you herd like to chew on this headdress, but it makes you seem more intelligent nonetheless. Increases Intelligence by <%= int %>. Enchanted Armoire: Shepherd Set (Item 3 of 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "shield-hand item", "shieldBase0Text": "No Shield-Hand Equipment", "shieldBase0Notes": "Ingen sköld eller sekundärt vapen.", @@ -579,6 +601,8 @@ "shieldArmoireGladiatorShieldNotes": "To be a gladiator you must.... eh, whatever, just bash them with your shield. Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Gladiator Set (Item 3 of 3).", "shieldArmoireMidnightShieldText": "Midnight Shield", "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "shieldArmoireRoyalCaneText": "Royal Cane", + "shieldArmoireRoyalCaneNotes": "Hooray for the ruler, worthy of song! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 2 of 3).", "back": "Back Accessory", "backBase0Text": "Inget ryggtillbehör", "backBase0Notes": "Inget ryggtillbehör.", @@ -592,6 +616,8 @@ "backMystery201504Notes": "Buzz buzz buzz! Flit from task to task. Confers no benefit. April 2015 Subscriber Item.", "backMystery201507Text": "Rad Surfboard", "backMystery201507Notes": "Surf off the Diligent Docks and ride the waves in Inkomplete Bay! Confers no benefit. July 2015 Subscriber Item.", + "backMystery201510Text": "Goblin Tail", + "backMystery201510Notes": "Prehensile and powerful! Confers no benefit. October 2015 Subscriber Item.", "backSpecialWonderconRedText": "Mäktig slängkappa", "backSpecialWonderconRedNotes": "Swishes with strength and beauty. Confers no benefit. Special Edition Convention Item.", "backSpecialWonderconBlackText": "Lömsk mantel", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "Dessa kraftfulla horn ändrar färg med löven. Ger ingen fördel. September 2014 Prenumerantobjekt.", "headAccessoryMystery201502Text": "Tankevingar", "headAccessoryMystery201502Notes": "Let your imagination take flight! Confers no benefit. February 2015 Subscriber Item.", + "headAccessoryMystery201510Text": "Goblin Horns", + "headAccessoryMystery201510Notes": "These fearsome horns are slightly slimy. Confers no benefit. October 2015 Subscriber Item.", "headAccessoryMystery301405Text": "Headwear Goggles", "headAccessoryMystery301405Notes": "\"Goggles are for your eyes,\" they said. \"Nobody wants goggles that you can only wear on your head,\" they said. Hah! You sure showed them! Confers no benefit. August 3015 Subscriber Item.", "eyewear": "Eyewear", diff --git a/common/locales/sv/generic.json b/common/locales/sv/generic.json index 4c70a6bef0..db05b7d7ef 100644 --- a/common/locales/sv/generic.json +++ b/common/locales/sv/generic.json @@ -6,7 +6,7 @@ "expandToolbar": "Expandera Verktygsfält", "collapseToolbar": "Fäll ihop Verktygsfält", "markdownBlurb": "Habitica uses markdown for message formatting. See the Markdown Cheat Sheet for more info.", - "showFormattingHelp": "Show formatting help", + "showFormattingHelp": "Visa formateringshjälp", "hideFormattingHelp": "Hide formatting help", "youType": "Du skriva:", "youSee": "Du ser:", @@ -28,7 +28,7 @@ "market": "Marknad", "subscriberItem": "Mystiskt Objekt", "newSubscriberItem": "Nytt mystiskt föremål", - "subscriberItemText": "Each month, subscribers will receive a mystery item. This is usually released about one week before the end of the month. See the wiki's 'Mystery Item' page for the exact date.", + "subscriberItemText": "Each month, subscribers will receive a mystery item. This is usually released about one week before the end of the month. See the wiki's 'Mystery Item' page for more information.", "all": "Alla", "none": "Ingen", "or": "Eller", @@ -69,8 +69,9 @@ "habiticaDayPluralText": "Celebrated <%= number %> Naming Days! Thanks for being a fantastic user.", "achievementDilatory": "Dilatorys Befriare", "achievementDilatoryText": "Helped defeat the Dread Drag'on of Dilatory during the 2014 Summer Splash Event!", - "costumeContest": "2014 Kostym Tävling", - "costumeContestText": "Participated in the 2014 Halloween Costume Contest. See some of the entries at blog.habitica.com/tagged/cosplay!", + "costumeContest": "Costume Contestant", + "costumeContestText": "Participated in the Habitoween Costume Contest. See some of the entries on the Habitica blog!", + "costumeContestTextPlural": "Participated in <%= number %> Habitoween Costume Contests. See some of the entries on the Habitica blog!", "memberSince": "- Medlem sedan", "lastLoggedIn": "- Senast inloggad", "notPorted": "Denna funktion är inte flyttad från orginalhemsidan ännu.", @@ -79,6 +80,7 @@ "errorUpCase": "FEL:", "newPassSent": "Nytt lösenord skickat.", "serverUnreach": "Servern är otillgänglig för tillfället.", + "requestError": "Yikes, an error occurred! Please reload the page, your last action may not have been saved correctly.", "seeConsole": "If the error persists, please report it at Help > Report a Bug. If you're familiar with your browser's console, please include any error messages.", "error": "Fel", "menu": "Meny", @@ -133,5 +135,17 @@ "thankyou2": "Sending you a thousand thanks.", "thankyou3": "I'm very grateful - thank you!", "thankyouCardAchievementTitle": "Greatly Grateful", - "thankyouCardAchievementText": "Thanks for being thankful! Sent or received <%= cards %> Thank-You cards." + "thankyouCardAchievementText": "Thanks for being thankful! Sent or received <%= cards %> Thank-You cards.", + "streakAchievement": "You earned a streak achievement!", + "firstStreakAchievement": "21-Day Streak", + "streakAchievementCount": "<%= streaks %> 21-Day Streaks", + "twentyOneDays": "You've completed your Daily for 21 days in a row!", + "dontBreakStreak": "Amazing job. Don't break the streak!", + "dontStop": "Don't Stop Now!", + "levelUpShare": "I leveled up in Habitica by improving my real-life habits!", + "questUnlockShare": "I unlocked a new quest in Habitica!", + "hatchPetShare": "I hatched a new pet by completing my real-life tasks!", + "raisePetShare": "I raised a pet into a mount by completing my real-life tasks!", + "wonChallengeShare": "I won a challenge in Habitica!", + "achievementShare": "I earned a new achievement in Habitica!" } \ No newline at end of file diff --git a/common/locales/sv/groups.json b/common/locales/sv/groups.json index bd818ff187..d4bc25881e 100644 --- a/common/locales/sv/groups.json +++ b/common/locales/sv/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "Checka ur Värdshuset", "innCheckIn": "Vila på Värdshuset", "innText": "You're resting in the Inn! While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day. Be warned: If you are participating in a Boss Quest, the Boss will still damage you for your party mates' missed Dailies unless they are also in the Inn! Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn.", + "innTextBroken": "You're resting in the Inn, I guess... While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day... If you are participating in a Boss Quest, the Boss will still damage you for your party mates' missed Dailies... unless they are also in the Inn... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn... so tired...", "lfgPosts": "Sällskap Sökes-inlägg", "tutorial": "Handledning", "glossary": "Ordlista", @@ -145,5 +146,6 @@ "partyEmpty": "You're the only one in your party. Invite your friends!", "partyChatEmpty": "Your party chat is empty! Type a message in the box above to start chatting.", "guildChatEmpty": "This guild's chat is empty! Type a message in the box above to start chatting.", - "possessiveParty": "<%= name %>'s Party" + "possessiveParty": "<%= name %>'s Party", + "requestAcceptGuidelines": "If you would like to post messages in the Tavern or any party or guild chat, please first read our <%= linkStart %>Community Guidelines<%= linkEnd %> and then click the button below to indicate that you accept them." } \ No newline at end of file diff --git a/common/locales/sv/limited.json b/common/locales/sv/limited.json index 5c0d62e28d..d62ee1f5ae 100644 --- a/common/locales/sv/limited.json +++ b/common/locales/sv/limited.json @@ -21,6 +21,7 @@ "valentineCardAchievementText": "Aww, you and your friend must really care about each other! Sent or received <%= cards %> Valentine's Day cards.", "polarBear": "Isbjörn", "turkey": "Kalkon", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "Isbjörnsunge", "jackolantern": "Lyktgubbe", "seasonalShop": "Säsongsbutik", @@ -30,6 +31,7 @@ "seasonalShopText": "Welcome to the Seasonal Shop!! We're stocking springtime Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Spring Fling event each year, but we're only open until April 30th, so be sure to stock up now, or you'll have to wait a year to buy these items again!", "seasonalShopSummerText": "Welcome to the Seasonal Shop!! We're stocking summertime Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Summer Splash event each year, but we're only open until July 31st, so be sure to stock up now, or you'll have to wait a year to buy these items again!", "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31, so be sure to stock up now, or you'll have to wait a year to buy these items again!", + "seasonalShopFallTextBroken": "Oh.... Welcome to the Seasonal Shop... We're stocking autumn Seasonal Edition goodies, or something... Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31... I guess you should to stock up now, or you'll have to wait... and wait... and wait... *sigh*", "seasonalShopRebirth": "If you've used the Orb of Rebirth, you can repurchase this equipment in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.", "candycaneSet": "Polkagris (Magiker)", "skiSet": "Ski-sassin (Rogue)", diff --git a/common/locales/sv/messages.json b/common/locales/sv/messages.json index b4077a6d75..c2f5494793 100644 --- a/common/locales/sv/messages.json +++ b/common/locales/sv/messages.json @@ -30,5 +30,26 @@ "messageAlreadyOwnGear": "You already own this item. Equip it by going to the equipment page.", "armoireEquipment": "<%= image %> You found a piece of rare Equipment in the Armoire: <%= dropText %>! Awesome!", "armoireFood": "<%= image %> You rummage in the Armoire and find <%= dropArticle %><%= dropText %>. What's that doing in here?", - "armoireExp": "You wrestle with the Armoire and gain Experience. Take that!" + "armoireExp": "You wrestle with the Armoire and gain Experience. Take that!", + "messageInsufficientGems": "Not enough gems!", + "messageAuthPasswordMustMatch": ":password and :confirmPassword don't match", + "messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword required", + "messageAuthUsernameTaken": "Username already taken", + "messageAuthEmailTaken": "Email already taken", + "messageAuthNoUserFound": "No user found.", + "messageAuthMustBeLoggedIn": "You must be logged in.", + "messageAuthMustIncludeTokens": "You must include a token and uid (user id) in your request", + "messageGroupNotFound": "Group not found or you don't have access.", + "messageGroupAlreadyInParty": "Already in a party, try refreshing.", + "messageGroupOnlyLeaderCanUpdate": "Only the group leader can update the group!", + "messageGroupRequiresInvite": "Can't join a group you're not invited to.", + "messageGroupCannotRemoveSelf": "You cannot remove yourself!", + "messageGroupChatBlankMessage": "You cannot send a blank message", + "messageGroupChatLikeOwnMessage": "Can't like your own message. Don't be that person.", + "messageGroupChatFlagOwnMessage": "Can't report your own message.", + "messageGroupChatFlagAlreadyReported": "You have already reported this message", + "messageGroupChatNotFound": "Message not found!", + "messageGroupChatAdminClearFlagCount": "Only an admin can clear the flag count!", + "messageUserOperationProtected": "path `<%= operation %>` was not saved, as it's a protected path.", + "messageUserOperationNotFound": "<%= operation %> operation not found" } \ No newline at end of file diff --git a/common/locales/sv/noscript.json b/common/locales/sv/noscript.json new file mode 100644 index 0000000000..6057268ef2 --- /dev/null +++ b/common/locales/sv/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Alas! Your browser doesn't have JavaScript enabled", + "jsDisabledHeadingFull": "Alas! Your browser doesn't have JavaScript enabled and without it, Habitica can't work properly", + "jsDisabledText": "Habitica can't properly display the site without it!", + "jsDisabledLink": "Please enable JavaScript to continue!" +} \ No newline at end of file diff --git a/common/locales/sv/npc.json b/common/locales/sv/npc.json index 59f7a45b37..0dfe47ac64 100644 --- a/common/locales/sv/npc.json +++ b/common/locales/sv/npc.json @@ -7,15 +7,19 @@ "daniel": "Daniel", "danielText": "Welcome to the Tavern! Stay a while and meet the locals. If you need to rest (vacation? illness?), I'll set you up at the Inn. While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off.", "danielText2": "Be warned: 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.", + "danielTextBroken": "Welcome to the Tavern... I guess... If you need to rest, I'll set you up at the Inn... While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off... if you have the energy...", + "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": "Köpmannen Alexander", "welcomeMarket": "Välkommen till Marknaden! Köp svårfunna ägg och drycker! Sälj de du inte behöver! Beställ praktiska tjänster! Kom och se vad vi har att erbjuda.", - "sellForGold": "Sälj <%= item %> för <%= gold %> Guld", - "sellEggForGold": "Sell <%= itemType %> Egg for <%= gold %> Gold", - "sellPotionForGold": "Sell <%= itemType %> Potion for <%= gold %> Gold", + "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?", + "sellForGold": "Sell it for <%= gold %> Gold", "buyGems": "Köp Juveler", "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!", + "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...", "USD": "USD", "newStuff": "Nya Prylar", "cool": "Påminn Mig Senare", diff --git a/common/locales/sv/pets.json b/common/locales/sv/pets.json index 3588343330..3f1603f17a 100644 --- a/common/locales/sv/pets.json +++ b/common/locales/sv/pets.json @@ -58,8 +58,16 @@ "firstDrop": "You've unlocked the Drop System! Now when you complete tasks, you have a small chance of finding an item, including eggs, potions, and food! You just found a <%= eggText %> Egg! <%= eggNotes %>", "useGems": "If you've got your eye on a pet, but can't wait any longer for it to drop, use Gems in Inventory > Market to buy one!", "hatchAPot": "Kläck ett <%= potion %> <%= egg %>?", + "hatchedPet": "You hatched a <%= potion %> <%= egg %>!", + "displayNow": "Display Now", + "displayLater": "Display Later", + "earnedCompanion": "With all your productivity, you've earned a new companion. Feed it to make it grow!", "feedPet": "Mata <%= article %><%= text %> till din <%= name %>?", "useSaddle": "Sadla <%= pet %>?", + "raisedPet": "You grew a <%= pet %>!", + "earnedSteed": "By completing your tasks, you've earned a faithful steed!", + "rideNow": "Ride Now", + "rideLater": "Ride Later", "petName": "Kläck ett <%= potion %> <%= egg %>?", "mountName": "<%= potion %> <%= mount %>", "petKeyName": "Key to the Kennels", diff --git a/common/locales/sv/quests.json b/common/locales/sv/quests.json index b9ba3b6686..fe42e4f1fe 100644 --- a/common/locales/sv/quests.json +++ b/common/locales/sv/quests.json @@ -13,6 +13,7 @@ "youReceived": "Du har erhållit", "dropQuestCongrats": "Congratulations on earning this quest scroll! You can invite your party to begin the quest now, or come back to it any time in your Inventory > Quests.", "questSend": "Clicking \"Invite\" will send an invitation to your party members. When all members have accepted or denied, the quest begins. See status under Social > Party.", + "questSendBroken": "Clicking \"Invite\" will send an invitation to your party members... When all members have accepted or denied, the quest begins... See status under Social > Party...", "inviteParty": "Invite Party to Quest", "questInvitation": "Uppdragsinbjudan:", "questInvitationTitle": "Uppdragsinbjudnader", @@ -24,6 +25,7 @@ "rejected": "Avslog", "pending": "Inte svarat än", "questStart": "Once all members have either accepted or rejected, the quest begins. Only those that clicked \"accept\" will be able to participate in the quest and receive the drops. If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\". The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\".", + "questStartBroken": "Once all members have either accepted or rejected, the quest begins... Only those that clicked \"accept\" will be able to participate in the quest and receive the drops... If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\"... The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\"...", "begin": "Starta", "bossHP": "Bossens Hälsa", "bossStrength": "Bossstyrka", @@ -34,9 +36,14 @@ "itemsToCollect": "Items to Collect", "bossDmg1": "Each completed Daily and To-Do and each positive Habit hurts the boss. Hurt it more with redder tasks or Brutal Smash and Burst of Flames. The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies! All damage to and from a boss is tallied on cron (your day roll-over).", "bossDmg2": "Bara deltagare kommer strida mot bossen och dela på uppdragsbytet.", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "Each completed Daily and To-Do and each positive Habit hurts the boss... Hurt it more with redder tasks or Brutal Smash and Burst of Flames... The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies... All damage to and from a boss is tallied on cron (your day roll-over)...", + "bossDmg2Broken": "Only participants will fight the boss and share in the quest loot...", + "tavernBossInfo": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "tavernBossInfoBroken": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss... Incomplete Dailies fill the Exhaust Strike Bar... When the Exhaust Strike bar is full, the World Boss will attack an NPC... A World Boss will never damage individual players or accounts in any way... Only active accounts not resting in the Inn will have their tasks tallied...", "bossColl1": "För att samla föremål, fullborda dina positiva uppgifter. Uppdragsföremål droppar precis som vanliga föremål, men du kommer inte se dem innan nästa dag. Då kommer allt du hittat att räknas ihop och läggas på högen.", "bossColl2": "Endast deltagare kan samla föremål och dela uppdragets byte.", + "bossColl1Broken": "To collect items, do your positive tasks... Quest items drop just like normal items; however, you won't see the drops until the next day, then everything you've found will be tallied up and contributed to the pile...", + "bossColl2Broken": "Only participants can collect items and share in the quest loot...", "abort": "Avbryt", "leaveQuest": "Leave Quest", "sureLeave": "Are you sure you want to leave the active quest? All your quest progress will be lost.", @@ -63,10 +70,13 @@ "sureAbort": "Är du säker att du vill avbryta detta uppdrag? Det kommer att avbrytas för alla i ditt sällskap och alla framsteg kommer att förloras. Uppdragsrullen kommer att återvända till uppdragsägaren.", "doubleSureAbort": "Är du helt säker? Se till att de inte kommer hata dig för alltid!", "questWarning": "Nya spelare som går med i sällskapet innan uppdraget påbörjas får också en inbjudan. Däremot kan inga nya sällskapsmedlemmar ansluta sig till uppdraget när det väl har påbörjats.", + "questWarningBroken": "If new players join the party before the quest starts, they will also receive an invitation... However once the quest has started, no new party members can join the quest...", "bossRageTitle": "Vrede", "bossRageDescription": "När denna mätare fylls kommer bossen släppa lös en specialattack.", "startAQuest": "START A QUEST", "startQuest": "Start Quest", "whichQuestStart": "Which quest do you want to start?", - "getMoreQuests": "Get more quests" + "getMoreQuests": "Get more quests", + "unlockedAQuest": "You unlocked a quest!", + "leveledUpReceivedQuest": "You leveled up to Level <%= level %> and received a quest scroll!" } \ No newline at end of file diff --git a/common/locales/sv/questscontent.json b/common/locales/sv/questscontent.json index c504067c08..1a68c43748 100644 --- a/common/locales/sv/questscontent.json +++ b/common/locales/sv/questscontent.json @@ -241,7 +241,7 @@ "questCheetahText": "Such a Cheetah", "questCheetahNotes": "As you hike across the Sloensteadi Savannah with your friends @PainterProphet, @tivaquinn, @Unruly Hyena, and @Crawford, you're startled to see a Cheetah screeching past with a new Habitican clamped in its jaws. Under the Cheetah's scorching paws, tasks burn away as though complete -- before anyone has the chance to actually finish them! The Habitican sees you and yells, \"Please help me! This Cheetah is making me level too quickly, but I'm not getting anything done. I want to slow down and enjoy the game. Make it stop!\" You fondly remember your own fledgling days, and know that you have to help the newbie by stopping the Cheetah!", "questCheetahCompletion": "The new Habitican is breathing heavily after the wild ride, but thanks you and your friends for your help. \"I'm glad that Cheetah won't be able to grab anyone else. It did leave some Cheetah eggs for us, so maybe we can raise them into more trustworthy pets!\"", - "questCheetahBoss": "Cheetah", + "questCheetahBoss": "Gepard", "questCheetahDropCheetahEgg": "Cheetah (Egg)", "questCheetahUnlockText": "Unlocks purchasable Cheetah eggs in the Market", "questHorseText": "Ride the Night-Mare", @@ -261,5 +261,17 @@ "questBurnoutDropPhoenixMount": "Phoenix (Mount)", "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!", + "questFrogText": "Swamp of the Clutter Frog", + "questFrogNotes": "As you and your friends are slogging through the Swamps of Stagnation, @starsystemic points at a large sign. \"Stay on the path -- if you can.\"

\"Surely that isn't hard!\" @RosemonkeyCT says. \"It's broad and clear.\"

But as you continue, you notice that path is gradually overtaken by the muck of the swamp, laced with bits of strange blue debris and clutter, until it's impossible to proceed.

As you look around, wondering how it got this messy, @Jon Arjinborn shouts, \"Look out!\" An angry frog leaps from the sludge, clad in dirty laundry and lit by blue fire. You will have to overcome this poisonous Clutter Frog to progress!", + "questFrogCompletion": "The frog cowers back into the muck, defeated. As it slinks away, the blue slime fades, leaving the way ahead clear.

Sitting in the middle of the path are three pristine eggs. \"You can even see the tiny tadpoles and through the clear casing!\" @Breadstrings says. \"Here, you should take them.\"", + "questFrogBoss": "Clutter Frog", + "questFrogDropFrogEgg": "Frog (Egg)", + "questFrogUnlockText": "Unlocks purchasable Frog eggs in the Market", + "questSnakeText": "The Serpent of Distraction", + "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveler astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", + "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", + "questSnakeBoss": "Serpent of Distraction", + "questSnakeDropSnakeEgg": "Snake (Egg)", + "questSnakeUnlockText": "Unlocks purchasable Snake eggs in the Market" } \ No newline at end of file diff --git a/common/locales/sv/rebirth.json b/common/locales/sv/rebirth.json index 2746091d89..6f3f2d4db7 100644 --- a/common/locales/sv/rebirth.json +++ b/common/locales/sv/rebirth.json @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "Du får även en Bedrift för att du börjar på ett nytt äventyr!", "beReborn": "Bli pånyttfödd", "rebirthAchievement": "Du har börjat på ett nytt äventyr! Det här är Pånyttfödelse nummer <%= number %> för dig, och den högsta Leveln du har nått är <%= level %>. För att stapla denna Bedrift, börja ditt nästa nya äventyr när du har nått en ännu högre Level!", + "rebirthAchievement100": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is 100 or higher. To stack this Achievement, begin your next new adventure when you've reached at least 100!", "rebirthBegan": "Började på ett Nytt Äventyr", "rebirthText": "Började <%= rebirths %> Nytt/Nya Äventyr", "rebirthOrb": "Använde en Pånyttfödelsesfär för att börja om efter att ha nått Level", + "rebirthOrb100": "Used an Orb of Rebirth to start over after attaining Level 100 or higher", "rebirthPop": "Starta en ny karaktär från Level 1 medan du behåller bedrifter, samlarobjekt och uppgifter med dess historik.", "rebirthName": "Pånyttfödelsesfär", "reborn": "Pånyttfödd, max level <%= reLevel %>" diff --git a/common/locales/sv/settings.json b/common/locales/sv/settings.json index e423bb83c3..b7228b34fc 100644 --- a/common/locales/sv/settings.json +++ b/common/locales/sv/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "Med den här inställningen är tagg-listan dold när du öppnar en uppgift för redigering.", "startAdvCollapsed": "Avancerade Inställningar i uppgifter startar som minimerade.", "startAdvCollapsedPop": "Med den här inställningen är Avancerade Inställningar dolda när du öppnar en uppgift för redigering.", + "dontShowAgain": "Don't show this again", + "suppressLevelUpModal": "Don't show popup when gaining a level", + "suppressHatchPetModal": "Don't show popup when hatching a pet", + "suppressRaisePetModal": "Don't show popup when raising a pet into a mount", + "suppressStreakModal": "Don't show popup when attaining a Streak achievement", "showTour": "Visa Rundtur", "restartTour": "Starta om den introducerande rundturen från när du började med Habitica.", "showBailey": "Visa Bailey", @@ -81,7 +86,6 @@ "emailChange1": "För att ändra din e-postadress, skicka ett e-postmeddelande till", "emailChange2": "admin@habitica.com", "emailChange3": "inklusive både din gamla och din nya e-postadress, samt ditt User ID.", - "username": "Inloggningsnamn", "usernameOrEmail": "Login Name or Email", "email": "E-postadress", "registeredWithFb": "Registrerad via Facebook", @@ -89,7 +93,7 @@ "loginNameDescription2": "Användare->Profil", "loginNameDescription3": "för att byta namnet som visas tillsammans med din avatar och i chat-meddelanden.", "emailNotifications": "E-postnotiser", - "wonChallenge": "Du vann en utmaning", + "wonChallenge": "You won a Challenge!", "newPM": "Mottagit privatmeddelande", "giftedGems": "Skänkta juveler", "giftedGemsInfo": "<%= amount %> Gems - by <%= name %>", @@ -118,5 +122,29 @@ "promoCode": "Promo Code", "promoCodeApplied": "Promo Code Applied! Check your inventory", "promoPlaceholder": "Enter Promotion Code", - "displayInviteToPartyWhenPartyIs1": "Display Invite To Party button when party has 1 member." + "displayInviteToPartyWhenPartyIs1": "Display Invite To Party button when party has 1 member.", + "saveCustomDayStart": "Save Custom Day Start", + "registration": "Registration", + "addLocalAuth": "Add local authentication:", + "generateCodes": "Generate Codes", + "generate": "Generate", + "getCodes": "Get Codes", + "webhooks": "Webhooks", + "enabled": "Enabled", + "webhookURL": "Webhook URL", + "add": "Add", + "buyGemsGoldCap": "Cap raised to <%= amount %>", + "mysticHourglass": "<%= amount %> Mystic Hourglass", + "mysticHourglassText": "Mystic Hourglasses allow purchasing a previous month's Mystery Item set.", + "purchasedPlanId": "Recurring $<%= price %> each <%= months %> Month(s) (<%= plan %>)", + "purchasedPlanExtraMonths": "You have <%= months %> months of subscription credit.", + "consecutiveSubscription": "Consecutive Subscription", + "consecutiveMonths": "Consecutive Months:", + "gemCapExtra": "Gem Cap Extra:", + "mysticHourglasses": "Mystic Hourglasses:", + "paypal": "PayPal", + "amazonPayments": "Amazon Payments", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/sv/subscriber.json b/common/locales/sv/subscriber.json index 6e6327a2b2..6eaed52ecd 100644 --- a/common/locales/sv/subscriber.json +++ b/common/locales/sv/subscriber.json @@ -60,7 +60,7 @@ "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> and <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitle": "Mystiska Tidsresenärer", "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.", - "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 <%= linkStart %>here<%= linkEnd %>! If those don't satisfy you, perhaps you'd be interested in one of our fashionably futuristic Steampunk Item Sets?", + "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!", "subUpdateCard": "Uppdatera Kort", diff --git a/common/locales/sv/tasks.json b/common/locales/sv/tasks.json index 2fd639b275..0cfa24e08a 100644 --- a/common/locales/sv/tasks.json +++ b/common/locales/sv/tasks.json @@ -88,8 +88,7 @@ "fortifyText": "Fortify will return all your tasks to a neutral (yellow) state, as if you'd just added them, and top your Health off to full. This is great if all your red tasks are making the game too hard, or all your blue tasks are making the game too easy. If starting fresh sounds much more motivating, spend the Gems and catch a reprieve!", "sureDelete": "Är du säker att du vill ta bort denna uppgift?", "streakCoins": "Följdbonus!", - "pushTaskToTop": "Förflytta uppgift till toppen", - "pushTaskToBottom": "Förflytta uppgift till botten", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "Skriv in uppgiftens titel först.", "dailiesRestingInInn": "You're Resting in the Inn! Your Dailies will NOT hurt you tonight, but they WILL still refresh every day. If you're in a quest, you won't deal damage/collect items until you check out of the Inn, but you can still be injured by a Boss if your Party mates skip their own Dailies.", "habitHelp1": "Good Habits are things that you do often. They award Gold and Experience every time you click the <%= plusIcon %>.", diff --git a/common/locales/uk/backgrounds.json b/common/locales/uk/backgrounds.json index 8e9809cb91..1854182aad 100644 --- a/common/locales/uk/backgrounds.json +++ b/common/locales/uk/backgrounds.json @@ -112,11 +112,25 @@ "backgroundStableNotes": "Турбуйтся про скакунів у Стайні Habitica", "backgroundTavernText": "Таверна Habitica", "backgroundTavernNotes": "Відвідайте Таверну Habitica", - "backgrounds102015": "SET 17: Released October 2015", - "backgroundHarvestMoonText": "Harvest Moon", - "backgroundHarvestMoonNotes": "Cackle under the Harvest Moon.", - "backgroundSlimySwampText": "Slimy Swamp", - "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", - "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgrounds102015": "Набір 17: випущеній у жовтні 2015", + "backgroundHarvestMoonText": "Повний Місяць перед осіннім рівноденням", + "backgroundHarvestMoonNotes": "Посмійтесь під повнім Місяцем.", + "backgroundSlimySwampText": "Склизьке Болото", + "backgroundSlimySwampNotes": "Плентайтеся крізь Склизьке Болото", + "backgroundSwarmingDarknessText": "Суцільна Темрява", + "backgroundSwarmingDarknessNotes": "Тремтіть від жаху у Суцільній Темряві.", + "backgrounds112015": "SET 18: Released November 2015", + "backgroundFloatingIslandsText": "Floating Islands", + "backgroundFloatingIslandsNotes": "Hop across the Floating Islands.", + "backgroundNightDunesText": "Night Dunes", + "backgroundNightDunesNotes": "Walk peacefully through the Night Dunes.", + "backgroundSunsetOasisText": "Sunset Oasis", + "backgroundSunsetOasisNotes": "Bask in the Sunset Oasis.", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/uk/challenge.json b/common/locales/uk/challenge.json index 46a3153708..5de527e5c3 100644 --- a/common/locales/uk/challenge.json +++ b/common/locales/uk/challenge.json @@ -59,5 +59,9 @@ "challengeNotEnoughGems": "У вас немає достатньої кількості самоцвітів, щоб розмістити це випробування", "noPermissionEditChallenge": "У вас немає дозволу редагувати це випробування", "noPermissionDeleteChallenge": "У вас немає дозволу видаляти це випробування", - "noPermissionCloseChallenge": "У вас немає дозволу закривати це випробування" + "noPermissionCloseChallenge": "У вас немає дозволу закривати це випробування", + "congratulations": "Congratulations!", + "hurray": "Hurray!", + "noChallengeOwner": "немає власника", + "noChallengeOwnerPopover": "У цього випробування немає власника, тому що людина, що створила його, вилучила свій акаунт." } \ No newline at end of file diff --git a/common/locales/uk/character.json b/common/locales/uk/character.json index 1ca8456302..b7ee3f6cf6 100644 --- a/common/locales/uk/character.json +++ b/common/locales/uk/character.json @@ -52,18 +52,23 @@ "classEquipBonus": "Класовий бонус", "battleGear": "Бойове спорядження", "battleGearText": "Це спорядження ви носите в бій; це впливає на число при взаємодії з вашими завданнями.", + "autoEquipBattleGear": "Автоматично одягати нове спорядження", "costume": "Костюм", "costumeText": "Якщо зовнішній вигляд іншого спорядженням Вам подобається більше, оберіть „Надягти костюм“, аби зовні постати у костюмі, допоки бойове спорядження вдягнене під низ.", "useCostume": "Надягти костюм", - "useCostumeInfo1": "Click \"Use Costume\" to equip items to your avatar without affecting the stats from your Battle Gear! This means that you can equip for the best stats on the left, and dress up your avatar with your equipment on the right.", - "useCostumeInfo2": "Once you click \"Use Costume\" your avatar will look pretty basic... but don't worry! If you look on the left, you'll see that your Battle Gear is still equipped. Next, you can make things fancy! Anything you equip on the right won't affect your stats, but can make you look super awesome. Try out different combos, mixing sets, and coordinating your Costume with your pets, mounts, and backgrounds.

Got more questions? Check out the Costume page on the wiki. Find the perfect ensemble? Show it off in the Costume Carnival guild or brag in the Tavern!", - "gearAchievement": "You have earned the \"Ultimate Gear\" Achievement for upgrading to the maximum gear set for a class! You have attained the following complete sets:", - "moreGearAchievements": "To attain more Ultimate Gear badges, change classes on your stats page and buy up your new class's gear!", - "armoireUnlocked": "You've also unlocked the Enchanted Armoire! Click on the Enchanted Armoire Reward for a random chance at special Equipment! It may also give you random XP or food items.", + "useCostumeInfo1": "Натисніть \"Використати Костюм\", щоб одягнути на персонажа одяг, що не вплине на характеристики, які надає ваше Бойове Спорядження! Це означає, що ви можете вибрати найбільш ефективне спорядження ліворуч, а також окремо налаштувати зовнішній вигляд персонажа праворуч.", + "useCostumeInfo2": "Коли ви натисните \"Використати Костюм\" за вашого персонажу зникне весь одяг. Але не лякайтесь! Ліворуч ви побачите, что все Бойове Спорядження продовжує впливати на ваші характеристики. Все, що ви одягнете на персонажа праворуч не вплине на ваші характеристики, але дозволить персонажу добре виглядати. Ви можете одягати елементи різних наборів спорядження, а також обрати улюбленця, скакуна та фон.

Є питання? Перевірте Сторінку Костюмів на вікі. Знайшли чудову комбінацію? Продемонструйте її в Ґільдії Карнавалу Костюмів або похизуйтесь нею у Таверні.", + "gearAchievement": "Ви заробили досягнення \"Найкраще спорядження\" за повне вдосконалення набору спорядження для вашого класу! Ви зІбрали повні набори для наступних класів:", + "moreGearAchievements": "Щоб заробити більше досягнень \"Найкраще споряждення\", змінюйте класи на сторінці характеристик та купуйте споряждення для нових класів!", + "armoireUnlocked": "Ви також відкрили Чарівну Скриню! Клацніть на Чаріну Скриню, щоб отримати випадковий предмет. Це може бути їжа, ОД або навить спеціальне Спорядження!", "ultimGearName": "Найкраще спорядження", - "ultimGearText": "Has upgraded to the maximum weapon and armor set for the following classes:", + "ultimGearText": "Повністю вдосконалено зброю та набір броні для наступних класів:", "level": "Рівень", "levelUp": "Новий рівень!", + "gainedLevel": "You gained a level!", + "leveledUp": "By accomplishing your real-life goals, you've grown to Level <%= level %>!", + "fullyHealed": "You have been fully healed!", + "huzzah": "Huzzah!", "mana": "Мана", "hp": "ОЗ", "mp": "ОМ", @@ -77,7 +82,7 @@ "allocatePerPop": "Додати очко сприйняття", "allocateInt": "Призначено очок інтелекту:", "allocateIntPop": "Додати очко інтелекту", - "noMoreAllocate": "Now that you've hit level 100, you won't gain any more Attribute Points. You can continue leveling up, or start a new adventure at level 1 by using the Orb of Rebirth, now available for free in the Market.", + "noMoreAllocate": "Ви досягли 100-го рівня, тому ви більше не будете отримувати Очки Характеристик. Ви можете продовжувати підвищувати свій рівень або почати ваші пригоди з першого рівня, скористувавшись Кулею Переродження, яку можно бескоштовно отримати на Ринку.", "stats": "Характеристики", "strength": "Сила", "strengthText": "Сила зменшує ступінь небезпеки завдань (почервоніння), збільшує приріст від випадкових \"критичних ударів\" та допомагає завдавати ушкодження монстрам-босам.", @@ -121,7 +126,7 @@ "rogueText": "Шибайголови обожнюють збагачуватися, отримуючи більше Золота, ніж інші класи. Також вони експерти зі знайдення випадкових предметів. Їхня неперевершена потайливість дозволяє їм ухилитися від наслідків невиконаних щоденних завдань. Грайте Шибайголовою, якщо Вас мотивують нагороди, досягнення та жага до награбованого та значків!", "healerText": "Цілителі невразливі до ушкоджень та поширюють захист на інших. Невиконані щоденні завдання та шкідливі звички ледь турбують їх, у них є шляхи підняти своє Здоров'я після поразки. Грайте цілителем, якщо Вам подобається допомагати іншим членам гурту, або Вас надихає ідея через старанну працю обманути Смерть!", "optOut": "Не обрано", - "optOutText": "Can't be bothered with classes? Want to choose later? Opt out - you'll be a warrior with no special abilities. You can read about the class system later on the wiki and enable classes at any time under User -> Stats.", + "optOutText": "Не хочете розбиратися з класами? Хочете вибрати клас пізніше? Відмовтеся — ви залишитесь воїном без класових здібностей. Ви завжди можете увімкнути класи у меню Користувач -> Характеристики. Наша вікі має додакову інформацію щодо класів.", "select": "Обрати", "stealth": "Потайливість", "stealthNewDay": "Коли почнеться новий день, ви ухилитеся від ушкоджень за невиконані щоденні завдання у такому числі.", @@ -145,14 +150,14 @@ "unequipCostume": "Зняти костюм", "unequipPetMountBackground": "Заховати олюбленця, скакуна, фон", "animalSkins": "Шкіра тварин", - "chooseClassHeading": "Choose your Class! Or opt out to choose later.", + "chooseClassHeading": "Виберіть Клас! Ви можете відмовитися та вибрати його пізніше.", "warriorWiki": "Воїн", "mageWiki": "Чародій", "rogueWiki": "Харциз", "healerWiki": "Цілитель", - "chooseClassLearn": "Learn more about classes", - "str": "STR", - "con": "CON", - "per": "PER", - "int": "INT" + "chooseClassLearn": "Дізнайтесь більше про класи", + "str": "СИЛ", + "con": "КОМ", + "per": "СПР", + "int": "ІНТ" } \ No newline at end of file diff --git a/common/locales/uk/content.json b/common/locales/uk/content.json index 2bc77fbc45..067fb1de1a 100644 --- a/common/locales/uk/content.json +++ b/common/locales/uk/content.json @@ -95,6 +95,12 @@ "questEggHorseText": "Horse", "questEggHorseMountText": "Horse", "questEggHorseAdjective": "a galloping", + "questEggFrogText": "Frog", + "questEggFrogMountText": "Frog", + "questEggFrogAdjective": "a princely", + "questEggSnakeText": "Snake", + "questEggSnakeMountText": "Snake", + "questEggSnakeAdjective": "a slithering", "eggNotes": "Find a hatching potion to pour on this egg, and it will hatch into <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "Простий", "hatchingPotionWhite": "Білий", diff --git a/common/locales/uk/faq.json b/common/locales/uk/faq.json index c2a7b7deaf..587ba838c6 100644 --- a/common/locales/uk/faq.json +++ b/common/locales/uk/faq.json @@ -2,7 +2,7 @@ "frequentlyAskedQuestions": "Frequently Asked Questions", "faqQuestion0": "I'm confused. Where do I get an overview?", "iosFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn experience and gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as Pets, Skills, and Quests! You can customize your character under Menu > Customize Avatar.\n\n Some basic ways to interact: click the (+) in the upper-right-hand corner to add a new task. Tap on an existing task to edit it, and swipe left on a task to delete it. You can sort tasks using Tags in the upper-left-hand corner, and expand and contract checklists by clicking on the checklist bubble.", - "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, the wiki has an excellent step-by-step overview of the game [right here](http://habitica.wikia.com/wiki/Habitica_Wiki).", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", "faqQuestion1": "How do I set up my tasks?", "iosFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.", "webFaqAnswer1": "Good Habits (the ones with a ) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a ) are tasks that you should avoid, like biting nails. Habits with a and a have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n

\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n

\n To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.", @@ -16,7 +16,7 @@ "iosFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you tap a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your Party and one of your Party mates did not complete all their Dailies, the Boss will attack you.\n\n The main way to heal is to gain a level, which restores all your health. You can also buy a Health Potion with gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a Party with a Healer, they can heal you as well.", "webFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you click a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your party and one of your party mates did not complete all their Dailies, the Boss will attack you.\n

\n The main way to heal is to gain a level, which restores all your Health. You can also buy a Health Potion with Gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a party (under Social > Party) with a Healer, they can heal you as well.", "faqQuestion5": "How do I play Habitica with my friends?", - "iosFaqAnswer5": "The best way is to invite them to a Party with you, via the [website](https://habitica.com/#/options/groups/party)! We'll add the ability to create a Party from this app soon, but in the meantime you can use the [website](https://habitica.com/#/options/groups/party). Parties can go on quests, battle monsters, and cast skills to support each other. On the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", + "iosFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on quests, battle monsters, and cast skills to support each other. Go to Menu > Party and click \"Create New Party\" if you don't already have a Party. Then tap on the Members list, and tap Invite in the upper right-hand corner to invite your friends by entering their User ID (a string of numbers and letters that they can find under Settings > Account Details on the app, and Settings > API on the website). On the website, you can also invite friends via email, which we will add to the app in a future update.\n\nOn the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", "webFaqAnswer5": "The best way is to invite them to a party with you, under Social > Party! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n

\n For more detailed info, check out the wiki pages on [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).", "faqQuestion6": "How do I get a Pet or Mount?", "iosFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch Egg.\" Then choose a hatching potion to determine its color! Go to Menu > Pets to equip your new Pet to your avatar by clicking on it. \n\n You can also grow your Pets into Mounts by feeding them under Menu > Pets. Tap on a Pet, and then select \"Feed Pet\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Menu > Mounts and tap on it to equip it to your avatar.\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", @@ -28,14 +28,17 @@ "iosFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Use Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in a special section in the Rewards Column. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You’ll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "faqQuestion9": "How do I fight monsters and go on Quests?", - "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party on the [website](https://habitica.com/#/options/groups/party), you'll be rewarded with the Basi-List Scroll! (We will add this feature to the app in a future update.)\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for gold and gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", + "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for Gold and Gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "webFaqAnswer9": "First, you need to join or start a party (under Social > Party). Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n

\n Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are three ways to get a scroll:\n

\n * When you invite people to your party, you’ll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Page (Inventory > Quests) for Gold and Gems.\n

\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your party at the same time that you damage the Boss.\n

\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "faqQuestion10": "What are gems, and how do I get them?", + "faqQuestion10": "What are Gems, and how do I get them?", "iosFaqAnswer10": "Gems are purchased with real money by tapping on the gem icon in the header. When people buy gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying gems directly, there are three other ways players can gain gems:\n\n * Win a Challenge on the [website](https://habitica.com) that has been set up by another player under Social > Challenges. (We will be adding Challenges to the app in a future update!)\n * Subscribe on the [website](https://habitica.com/#/options/settings/subscription) and unlock the ability to buy a certain number of gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with gems do not offer any statistical advantages, so players can still make use of the app without them!", "webFaqAnswer10": "Gems are [purchased with real money](https://habitica.com/#/options/settings/subscription), although [subscribers](https://habitica.com/#/options/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n

\n In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n

\n * Win a Challenge that has been set up by another player under Social > Challenges.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", "faqQuestion11": "How do I report a bug or request a feature?", "iosFaqAnswer11": "You can report a bug, request a feature, or send feedback under Menu > Report a Bug and Menu > Send Feedback! We'll do everything we can to assist you.", "webFaqAnswer11": "Bug reports are collected on GitHub. Go to [Help > Report a Bug](https://github.com/HabitRPG/habitrpg/issues/2760) and follow the instructions. Don't worry, we'll get you fixed up soon!\n

\n Feature requests are collected on Trello. Go to [Help > Request a Feature](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) and follow the instructions. Ta-da!", + "faqQuestion12": "How do I battle a World Boss?", + "iosFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", + "webFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and skills will damage the Boss as usual.\n

\n You can also be in a normal Quest at the same time. Your tasks and skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n

\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n

\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", "iosFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the Tavern chat under Menu > Tavern! We're happy to help.", "webFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the [Newbies Guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help." } \ No newline at end of file diff --git a/common/locales/uk/front.json b/common/locales/uk/front.json index 002003d67f..83f0c07918 100644 --- a/common/locales/uk/front.json +++ b/common/locales/uk/front.json @@ -74,7 +74,7 @@ "infhQuote": "[Habitica] has really helped me impart structure to my life in graduate school.", "invalidEmail": "A valid email address is required in order to perform a password reset.", "irishfeet123Quote": "I've had horrible habits with clearing my place completely after meals and leaving cups all over the place. [Habitica] has cured that!", - "joinOthers": "Join 250,000 people making it fun to achieve goals!", + "joinOthers": "Join <%= userCount %> people making it fun to achieve goals!", "kazuiQuote": "Before [Habitica], I was stuck with my thesis, as well as dissatisfied with my personal discipline regarding housework and things like learning vocabulary and studying Go theory. It turns out breaking down these tasks into smaller manageable checklists is quite the thing to keep me motivated and constantly working.", "landingadminlink": "адміністраційні набори,", "landingend": "Вам і цього замало?", @@ -179,5 +179,14 @@ "businessInquiries": "Business Inquiries", "merchandiseInquiries": "Merchandise Inquiries", "marketingInquiries": "Marketing/Social Media Inquiries", - "tweet": "Tweet" + "tweet": "Tweet", + "apps": "Apps", + "notifyAndroidApp": "Want us to notify you when the Android app is ready? Sign up for this mailing list!", + "checkOutIOSApp": "Check out our new iOS App!", + "imagine1": "Imagine if improving your life were as fun as playing a game.", + "landingCopy1": "Advance in the game by completing your real-life tasks.", + "landingCopy2": "Battle monsters with friends to stay accountable to your goals.", + "landingCopy3": "Join over <%= userCount %> people having fun as they improve their lives.", + "alreadyHaveAccount": "I already have an account!", + "getStartedNow": "Get Started Now!" } \ No newline at end of file diff --git a/common/locales/uk/gear.json b/common/locales/uk/gear.json index 5084ebbd50..eed6de566c 100644 --- a/common/locales/uk/gear.json +++ b/common/locales/uk/gear.json @@ -149,13 +149,19 @@ "weaponArmoireRancherLassoText": "Rancher Lasso", "weaponArmoireRancherLassoNotes": "Lassos: the ideal tool for rounding up and wrangling. Increases Strength by <%= str %>, Perception by <%= per %>, and Intelligence by <%= int %>. Enchanted Armoire: Rancher Set (Item 3 of 3).", "weaponArmoireMythmakerSwordText": "Mythmaker Sword", - "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3)", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "Iron Crook", - "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3)", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "Gold Wing Staff", "weaponArmoireGoldWingStaffNotes": "The wings on this staff constantly flutter and twist. Increases all attributes by <%= attrs %> each. Enchanted Armoire: Independent Item.", "weaponArmoireBatWandText": "Bat Wand", "weaponArmoireBatWandNotes": "This wand can turn any task into a bat! Wave it about and watch them fly away. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireShepherdsCrookText": "Shepherd's Crook", + "weaponArmoireShepherdsCrookNotes": "Useful for herding gryphons. Increases Constitution by <%= con %>. Enchanted Armoire: Shepherd Set (Item 1 of 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "броня", "armorBase0Text": "Звичайний одяг", "armorBase0Notes": "Звичайнісінький одяг. Так собі.", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "Silly Party Robes", "armorSpecialBirthday2015Notes": "Happy Birthday, Habitica! Wear these Silly Party Robes to celebrate this wonderful day. Confers no benefit.", "armorSpecialGaymerxText": "Rainbow Warrior Armor", - "armorSpecialGaymerxNotes": "In celebration of pride season and GaymerX, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGBTQ and gaming and is open to everyone. It takes place at the InterContinental in downtown San Francisco on July 11-13! Confers no benefit.", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "Гладенький котячий костюм", "armorSpecialSpringRogueNotes": "Impeccably groomed. Increases Perception by <%= per %>. Limited Edition 2014 Spring Gear.", "armorSpecialSpringWarriorText": "Броня сталевої конюшини", @@ -307,6 +313,8 @@ "armorMystery201508Notes": "Run fast as a flash in the fluffy Cheetah Costume! Confers no benefit. August 2015 Subscriber Item.", "armorMystery201509Text": "Werewolf Costume", "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "Steampunk Suit", "armorMystery301404Notes": "Dapper and dashing, wot! Confers no benefit. February 3015 Subscriber Item.", "armorArmoireLunarArmorText": "Soothing Lunar Armor", @@ -321,6 +329,12 @@ "armorArmoireHornedIronArmorNotes": "Fiercely hammered from iron, this horned armor is nearly impossible to break. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Horned Iron Set (Item 2 of 3).", "armorArmoirePlagueDoctorOvercoatText": "Plague Doctor Overcoat", "armorArmoirePlagueDoctorOvercoatNotes": "An authentic overcoat worn by the doctors who battle the Plague of Procrastination! Increases Intelligence by <%= int %>, Strength by <%= str %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 3 of 3).", + "armorArmoireShepherdRobesText": "Shepherd Robes", + "armorArmoireShepherdRobesNotes": "The fabric is cool and breathable, perfect for a hot day herding gryphons in the desert. Increases Strength and Perception by <%= attrs %> each. Enchanted Armoire: Shepherd Set (Item 2 of 3).", + "armorArmoireRoyalRobesText": "Royal Robes", + "armorArmoireRoyalRobesNotes": "Wonderful ruler, rule all day long! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 3 of 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "headgear", "headBase0Text": "Без шолома", "headBase0Notes": "Без головного убору", @@ -441,7 +455,7 @@ "headSpecialFall2015HealerText": "Hat of Frog", "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", "headSpecialGaymerxText": "Rainbow Warrior Helm", - "headSpecialGaymerxNotes": "In celebration of pride season and GaymerX, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGBTQ and gaming and is open to everyone. It takes place at the InterContinental in downtown San Francisco on July 11-13! Confers no benefit.", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "Крилатий шолом", "headMystery201402Notes": "This winged circlet imbues the wearer with the speed of the wind! Confers no benefit. February 2014 Subscriber Item.", "headMystery201405Text": "Flame of Mind", @@ -464,6 +478,8 @@ "headMystery201508Notes": "This cozy cheetah hat is very fuzzy! Confers no benefit. August 2015 Subscriber Item.", "headMystery201509Text": "Werewolf Mask", "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 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", @@ -481,7 +497,7 @@ "headArmoireBlueHairbowText": "Blue Hairbow", "headArmoireBlueHairbowNotes": "Become perceptive, tough, and smart while wearing this beautiful Blue Hairbow! Increases Perception by <%= per %>, Constitution by <%= con %>, and Intelligence by <%= int %>. Enchanted Armoire: Independent Item.", "headArmoireRoyalCrownText": "Royal Crown", - "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Royal Set (Item 1 of 3).", "headArmoireGoldenLaurelsText": "Golden Laurels", "headArmoireGoldenLaurelsNotes": "These golden laurels reward those who have conquered bad habits. Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 2 of 3).", "headArmoireHornedIronHelmText": "Horned Iron Helm", @@ -496,6 +512,12 @@ "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", "headArmoireOrangeCatText": "Orange Cat Hat", "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireBlueFloppyHatText": "Blue Floppy Hat", + "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireShepherdHeaddressText": "Shepherd Headdress", + "headArmoireShepherdHeaddressNotes": "Sometimes the gryphons that you herd like to chew on this headdress, but it makes you seem more intelligent nonetheless. Increases Intelligence by <%= int %>. Enchanted Armoire: Shepherd Set (Item 3 of 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "shield-hand item", "shieldBase0Text": "No Shield-Hand Equipment", "shieldBase0Notes": "Без щита чи другої зброї", @@ -579,6 +601,8 @@ "shieldArmoireGladiatorShieldNotes": "To be a gladiator you must.... eh, whatever, just bash them with your shield. Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Gladiator Set (Item 3 of 3).", "shieldArmoireMidnightShieldText": "Midnight Shield", "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "shieldArmoireRoyalCaneText": "Royal Cane", + "shieldArmoireRoyalCaneNotes": "Hooray for the ruler, worthy of song! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 2 of 3).", "back": "Back Accessory", "backBase0Text": "No Back Accessory", "backBase0Notes": "No Back Accessory.", @@ -592,6 +616,8 @@ "backMystery201504Notes": "Buzz buzz buzz! Flit from task to task. Confers no benefit. April 2015 Subscriber Item.", "backMystery201507Text": "Rad Surfboard", "backMystery201507Notes": "Surf off the Diligent Docks and ride the waves in Inkomplete Bay! Confers no benefit. July 2015 Subscriber Item.", + "backMystery201510Text": "Goblin Tail", + "backMystery201510Notes": "Prehensile and powerful! Confers no benefit. October 2015 Subscriber Item.", "backSpecialWonderconRedText": "Mighty Cape", "backSpecialWonderconRedNotes": "Swishes with strength and beauty. Confers no benefit. Special Edition Convention Item.", "backSpecialWonderconBlackText": "Sneaky Cape", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "These powerful antlers change colors with the leaves. Confers no benefit. September 2014 Subscriber Item.", "headAccessoryMystery201502Text": "Wings of Thought", "headAccessoryMystery201502Notes": "Let your imagination take flight! Confers no benefit. February 2015 Subscriber Item.", + "headAccessoryMystery201510Text": "Goblin Horns", + "headAccessoryMystery201510Notes": "These fearsome horns are slightly slimy. Confers no benefit. October 2015 Subscriber Item.", "headAccessoryMystery301405Text": "Headwear Goggles", "headAccessoryMystery301405Notes": "\"Goggles are for your eyes,\" they said. \"Nobody wants goggles that you can only wear on your head,\" they said. Hah! You sure showed them! Confers no benefit. August 3015 Subscriber Item.", "eyewear": "Eyewear", diff --git a/common/locales/uk/generic.json b/common/locales/uk/generic.json index 9f7eeb83b4..35d634ef7a 100644 --- a/common/locales/uk/generic.json +++ b/common/locales/uk/generic.json @@ -28,7 +28,7 @@ "market": "Ринок", "subscriberItem": "Таємничий предмет", "newSubscriberItem": "Новий таємничий предмет", - "subscriberItemText": "Кожен місяць передплатники отримутивамуть таємничий предмет. Це, як правило, стається десь за тиждень до кінця місяця. Відвідайте \"Таємничий предмет\" в Вікі, щоб уточнити дату.", + "subscriberItemText": "Each month, subscribers will receive a mystery item. This is usually released about one week before the end of the month. See the wiki's 'Mystery Item' page for more information.", "all": "Усі", "none": "Жодного", "or": "Чи", @@ -69,8 +69,9 @@ "habiticaDayPluralText": "Celebrated <%= number %> Naming Days! Thanks for being a fantastic user.", "achievementDilatory": "Рятівник Неквапливості", "achievementDilatoryText": "Допомогав перемогти Жахливого Драк'она Неквапливості напротязі Літнього Сплеску Подій 2014!", - "costumeContest": "Костюмоване змагання 2014", - "costumeContestText": "Брав участь у Хеллоуінському костюмованому змаганні 2014. Переглянути деякі роботи blog.habitica.com/tagged/cosplay!", + "costumeContest": "Costume Contestant", + "costumeContestText": "Participated in the Habitoween Costume Contest. See some of the entries on the Habitica blog!", + "costumeContestTextPlural": "Participated in <%= number %> Habitoween Costume Contests. See some of the entries on the Habitica blog!", "memberSince": "- Грає з:", "lastLoggedIn": "- Востаннє заходив:", "notPorted": "Ми ще не перенесли цю особливість з оригінального сайту.", @@ -79,6 +80,7 @@ "errorUpCase": "ПОМИЛКА:", "newPassSent": "Новий пароль надіслано.", "serverUnreach": "Наразі сервер недоступний.", + "requestError": "Yikes, an error occurred! Please reload the page, your last action may not have been saved correctly.", "seeConsole": "If the error persists, please report it at Help > Report a Bug. If you're familiar with your browser's console, please include any error messages.", "error": "Помилка", "menu": "Меню", @@ -133,5 +135,17 @@ "thankyou2": "Посилаю тобі тисячі подяк", "thankyou3": "Я вдячний(а) - спасибі тобі!", "thankyouCardAchievementTitle": "Дуже вдячний(а)", - "thankyouCardAchievementText": "Дякую за вдячність! Надіслав(ла) чи отримав(ла) <%= cards %> листівок-подяк" + "thankyouCardAchievementText": "Дякую за вдячність! Надіслав(ла) чи отримав(ла) <%= cards %> листівок-подяк", + "streakAchievement": "You earned a streak achievement!", + "firstStreakAchievement": "21-Day Streak", + "streakAchievementCount": "<%= streaks %> 21-Day Streaks", + "twentyOneDays": "You've completed your Daily for 21 days in a row!", + "dontBreakStreak": "Amazing job. Don't break the streak!", + "dontStop": "Don't Stop Now!", + "levelUpShare": "I leveled up in Habitica by improving my real-life habits!", + "questUnlockShare": "I unlocked a new quest in Habitica!", + "hatchPetShare": "I hatched a new pet by completing my real-life tasks!", + "raisePetShare": "I raised a pet into a mount by completing my real-life tasks!", + "wonChallengeShare": "I won a challenge in Habitica!", + "achievementShare": "I earned a new achievement in Habitica!" } \ No newline at end of file diff --git a/common/locales/uk/groups.json b/common/locales/uk/groups.json index e7179092f1..9fff0d255e 100644 --- a/common/locales/uk/groups.json +++ b/common/locales/uk/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "Зайти до господи", "innCheckIn": "Відпочити у господі", "innText": "Ви відпочиваєтє в господі! Доки ви залишаєтеь тут, ваші Щоденні задання не будуть наносити ушкоджень в кінці дня, але вони все одно будуть щоденно оновлюватись. Будьте уважні: якщо ви приймаєте участь у Квесті на Боса, Бос буде наносити вам ушкодження за пропущені Щоденні завдання ваших товаришів по групі, якщо вони також не відпочиватимуть в господі! До того ж ви не будете наносити ушкоджень Босу (та отримувати речі) до виходу з господи.", + "innTextBroken": "You're resting in the Inn, I guess... While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day... If you are participating in a Boss Quest, the Boss will still damage you for your party mates' missed Dailies... unless they are also in the Inn... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn... so tired...", "lfgPosts": "Повідомлення про пошук групи (гурту)", "tutorial": "Навчання", "glossary": "Ґлосарій", @@ -145,5 +146,6 @@ "partyEmpty": "You're the only one in your party. Invite your friends!", "partyChatEmpty": "Your party chat is empty! Type a message in the box above to start chatting.", "guildChatEmpty": "This guild's chat is empty! Type a message in the box above to start chatting.", - "possessiveParty": "<%= name %>'s Party" + "possessiveParty": "<%= name %>'s Party", + "requestAcceptGuidelines": "If you would like to post messages in the Tavern or any party or guild chat, please first read our <%= linkStart %>Community Guidelines<%= linkEnd %> and then click the button below to indicate that you accept them." } \ No newline at end of file diff --git a/common/locales/uk/limited.json b/common/locales/uk/limited.json index c0f93e666a..95d20d4481 100644 --- a/common/locales/uk/limited.json +++ b/common/locales/uk/limited.json @@ -21,6 +21,7 @@ "valentineCardAchievementText": "Aww, you and your friend must really care about each other! Sent or received <%= cards %> Valentine's Day cards.", "polarBear": "Білий ведмідь", "turkey": "Індичка", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "Біле ведмежа", "jackolantern": "Світильник Джека", "seasonalShop": "Сезонна крамниця", @@ -30,6 +31,7 @@ "seasonalShopText": "Welcome to the Seasonal Shop!! We're stocking springtime Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Spring Fling event each year, but we're only open until April 30th, so be sure to stock up now, or you'll have to wait a year to buy these items again!", "seasonalShopSummerText": "Welcome to the Seasonal Shop!! We're stocking summertime Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Summer Splash event each year, but we're only open until July 31st, so be sure to stock up now, or you'll have to wait a year to buy these items again!", "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31, so be sure to stock up now, or you'll have to wait a year to buy these items again!", + "seasonalShopFallTextBroken": "Oh.... Welcome to the Seasonal Shop... We're stocking autumn Seasonal Edition goodies, or something... Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31... I guess you should to stock up now, or you'll have to wait... and wait... and wait... *sigh*", "seasonalShopRebirth": "If you've used the Orb of Rebirth, you can repurchase this equipment in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.", "candycaneSet": "Candy Cane (Mage)", "skiSet": "Ski-sassin (Rogue)", diff --git a/common/locales/uk/messages.json b/common/locales/uk/messages.json index 090c2d7f9c..63c9a93ad8 100644 --- a/common/locales/uk/messages.json +++ b/common/locales/uk/messages.json @@ -30,5 +30,26 @@ "messageAlreadyOwnGear": "You already own this item. Equip it by going to the equipment page.", "armoireEquipment": "<%= image %> You found a piece of rare Equipment in the Armoire: <%= dropText %>! Awesome!", "armoireFood": "<%= image %> You rummage in the Armoire and find <%= dropArticle %><%= dropText %>. What's that doing in here?", - "armoireExp": "You wrestle with the Armoire and gain Experience. Take that!" + "armoireExp": "You wrestle with the Armoire and gain Experience. Take that!", + "messageInsufficientGems": "Not enough gems!", + "messageAuthPasswordMustMatch": ":password and :confirmPassword don't match", + "messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword required", + "messageAuthUsernameTaken": "Username already taken", + "messageAuthEmailTaken": "Email already taken", + "messageAuthNoUserFound": "No user found.", + "messageAuthMustBeLoggedIn": "You must be logged in.", + "messageAuthMustIncludeTokens": "You must include a token and uid (user id) in your request", + "messageGroupNotFound": "Group not found or you don't have access.", + "messageGroupAlreadyInParty": "Already in a party, try refreshing.", + "messageGroupOnlyLeaderCanUpdate": "Only the group leader can update the group!", + "messageGroupRequiresInvite": "Can't join a group you're not invited to.", + "messageGroupCannotRemoveSelf": "You cannot remove yourself!", + "messageGroupChatBlankMessage": "You cannot send a blank message", + "messageGroupChatLikeOwnMessage": "Can't like your own message. Don't be that person.", + "messageGroupChatFlagOwnMessage": "Can't report your own message.", + "messageGroupChatFlagAlreadyReported": "You have already reported this message", + "messageGroupChatNotFound": "Message not found!", + "messageGroupChatAdminClearFlagCount": "Only an admin can clear the flag count!", + "messageUserOperationProtected": "path `<%= operation %>` was not saved, as it's a protected path.", + "messageUserOperationNotFound": "<%= operation %> operation not found" } \ No newline at end of file diff --git a/common/locales/uk/noscript.json b/common/locales/uk/noscript.json new file mode 100644 index 0000000000..6057268ef2 --- /dev/null +++ b/common/locales/uk/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "Alas! Your browser doesn't have JavaScript enabled", + "jsDisabledHeadingFull": "Alas! Your browser doesn't have JavaScript enabled and without it, Habitica can't work properly", + "jsDisabledText": "Habitica can't properly display the site without it!", + "jsDisabledLink": "Please enable JavaScript to continue!" +} \ No newline at end of file diff --git a/common/locales/uk/npc.json b/common/locales/uk/npc.json index fba6d7e014..f2f08345aa 100644 --- a/common/locales/uk/npc.json +++ b/common/locales/uk/npc.json @@ -7,15 +7,19 @@ "daniel": "Данило", "danielText": "Ласкаво просимо до Таверни! Залиштеся трохи та познайомтеся з тутешніми. Якщо вам потрібно відпочити (відпустка? хвороба?), я облаштую вас у господі. Доки ви перебуватимете в господі, ваші Щоденні завдання не наноситимуть ушкоджень в кінці дня, але ви все одно можете їх виконувати.", "danielText2": "Будьте уважні: якщо ви приймаєте участь у Квесті на Боса, Бос буде наносити вам ушкодження за пропущені Щоденні завдання вашими товаришами по групі! До того ж ви не будете наносити ушкоджень Босу (та отримувати речі) до виходу з господи.", + "danielTextBroken": "Welcome to the Tavern... I guess... If you need to rest, I'll set you up at the Inn... While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off... if you have the energy...", + "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": "Купець Олександр", "welcomeMarket": "Вітаю на ринку! Купуйте тут рідкісні яйця та зілля! Продавайте непотріб! Оплачуйте корисні послуги! Погляньте, що тут є в продажу.", - "sellForGold": "Продати <%= item %> за <%= gold %> золота", - "sellEggForGold": "Sell <%= itemType %> Egg for <%= gold %> Gold", - "sellPotionForGold": "Sell <%= itemType %> Potion for <%= gold %> Gold", + "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?", + "sellForGold": "Sell it for <%= gold %> Gold", "buyGems": "Придбати cамоцвіти", "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!", + "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...", "USD": "офіри", "newStuff": "Щось новеньке", "cool": "Розкажіть потім", diff --git a/common/locales/uk/pets.json b/common/locales/uk/pets.json index f5fcf222d9..1d75ed46b5 100644 --- a/common/locales/uk/pets.json +++ b/common/locales/uk/pets.json @@ -58,8 +58,16 @@ "firstDrop": "You've unlocked the Drop System! Now when you complete tasks, you have a small chance of finding an item, including eggs, potions, and food! You just found a <%= eggText %> Egg! <%= eggNotes %>", "useGems": "If you've got your eye on a pet, but can't wait any longer for it to drop, use Gems in Inventory > Market to buy one!", "hatchAPot": "Пролупити <%= egg %>, використавши <%= potion %>?", + "hatchedPet": "You hatched a <%= potion %> <%= egg %>!", + "displayNow": "Display Now", + "displayLater": "Display Later", + "earnedCompanion": "With all your productivity, you've earned a new companion. Feed it to make it grow!", "feedPet": "Згодувати <%= article %><%= text %> Вашому <%= name %>?", "useSaddle": "Осідлати <%= pet %>?", + "raisedPet": "You grew a <%= pet %>!", + "earnedSteed": "By completing your tasks, you've earned a faithful steed!", + "rideNow": "Ride Now", + "rideLater": "Ride Later", "petName": "<%= potion %> <%= egg %>", "mountName": "<%= potion %> <%= mount %>", "petKeyName": "Ключ до розсадників", diff --git a/common/locales/uk/quests.json b/common/locales/uk/quests.json index 2b30550c83..2188053f60 100644 --- a/common/locales/uk/quests.json +++ b/common/locales/uk/quests.json @@ -13,6 +13,7 @@ "youReceived": "Ви отримали", "dropQuestCongrats": "Congratulations on earning this quest scroll! You can invite your party to begin the quest now, or come back to it any time in your Inventory > Quests.", "questSend": "Clicking \"Invite\" will send an invitation to your party members. When all members have accepted or denied, the quest begins. See status under Social > Party.", + "questSendBroken": "Clicking \"Invite\" will send an invitation to your party members... When all members have accepted or denied, the quest begins... See status under Social > Party...", "inviteParty": "Invite Party to Quest", "questInvitation": "Запрошення до квесту:", "questInvitationTitle": "Запрошення до квесту", @@ -24,6 +25,7 @@ "rejected": "Відхилено", "pending": "Не розглянуто", "questStart": "Як тільки всі учасники погодяться або відмовляться, квест починається. Тільки ті, хто натиснув „прийняти“ зможуть взяти участь у квесті і отримати винагороду. Якщо участники очікують надто довго (неактивні?), власник квесту може почати його без них, натиснувши „Почати“. Власник квесту, також може скасувати його і отримати квестовий сувій, натиснувши „Скасувати“.", + "questStartBroken": "Once all members have either accepted or rejected, the quest begins... Only those that clicked \"accept\" will be able to participate in the quest and receive the drops... If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\"... The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\"...", "begin": "Почати", "bossHP": "Здоров'я боса", "bossStrength": "Сила Боса", @@ -34,9 +36,14 @@ "itemsToCollect": "Items to Collect", "bossDmg1": "Each completed Daily and To-Do and each positive Habit hurts the boss. Hurt it more with redder tasks or Brutal Smash and Burst of Flames. The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies! All damage to and from a boss is tallied on cron (your day roll-over).", "bossDmg2": "Тільки учасники битимуться з босом та розділять квестові трофеї.", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "Each completed Daily and To-Do and each positive Habit hurts the boss... Hurt it more with redder tasks or Brutal Smash and Burst of Flames... The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies... All damage to and from a boss is tallied on cron (your day roll-over)...", + "bossDmg2Broken": "Only participants will fight the boss and share in the quest loot...", + "tavernBossInfo": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "tavernBossInfoBroken": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss... Incomplete Dailies fill the Exhaust Strike Bar... When the Exhaust Strike bar is full, the World Boss will attack an NPC... A World Boss will never damage individual players or accounts in any way... Only active accounts not resting in the Inn will have their tasks tallied...", "bossColl1": "Аби зібрати всі предмети, виконуйте позитивні завдання. Квестові предмети випадають так само часто, як і звичайні, але Ви не побачите, що випало, до початку наступного дня, лише після цього все, що було знайдено, буде підраховано та складено до загальної купи.", "bossColl2": "Лише учасники можуть збирати предмети та розподіляти квестові трофеї.", + "bossColl1Broken": "To collect items, do your positive tasks... Quest items drop just like normal items; however, you won't see the drops until the next day, then everything you've found will be tallied up and contributed to the pile...", + "bossColl2Broken": "Only participants can collect items and share in the quest loot...", "abort": "Перервати", "leaveQuest": "Leave Quest", "sureLeave": "Are you sure you want to leave the active quest? All your quest progress will be lost.", @@ -63,10 +70,13 @@ "sureAbort": "Ви впевнені, що хочете скасувати виконання місії? Це скасує її для кожного члена вашого гурту, увесь прогрес буде втрачено. Квестовий сувій повернеться до власника квесту.", "doubleSureAbort": "Ви точно-точно впевнені? Подумайте, чи не зненавидять вони Вас назавжди!", "questWarning": "Якщо нові учасники вступають до гурту до початку квесту, вони також отримують запрошення. Коли квест розпочався, нові учасники не можуть приєднатися до нього.", + "questWarningBroken": "If new players join the party before the quest starts, they will also receive an invitation... However once the quest has started, no new party members can join the quest...", "bossRageTitle": "Лють", "bossRageDescription": "When this bar fills, the boss will unleash a special attack!", "startAQuest": "START A QUEST", "startQuest": "Start Quest", "whichQuestStart": "Which quest do you want to start?", - "getMoreQuests": "Get more quests" + "getMoreQuests": "Get more quests", + "unlockedAQuest": "You unlocked a quest!", + "leveledUpReceivedQuest": "You leveled up to Level <%= level %> and received a quest scroll!" } \ No newline at end of file diff --git a/common/locales/uk/questscontent.json b/common/locales/uk/questscontent.json index eaedbb0aea..cb9309c268 100644 --- a/common/locales/uk/questscontent.json +++ b/common/locales/uk/questscontent.json @@ -261,5 +261,17 @@ "questBurnoutDropPhoenixMount": "Phoenix (Mount)", "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!", + "questFrogText": "Swamp of the Clutter Frog", + "questFrogNotes": "As you and your friends are slogging through the Swamps of Stagnation, @starsystemic points at a large sign. \"Stay on the path -- if you can.\"

\"Surely that isn't hard!\" @RosemonkeyCT says. \"It's broad and clear.\"

But as you continue, you notice that path is gradually overtaken by the muck of the swamp, laced with bits of strange blue debris and clutter, until it's impossible to proceed.

As you look around, wondering how it got this messy, @Jon Arjinborn shouts, \"Look out!\" An angry frog leaps from the sludge, clad in dirty laundry and lit by blue fire. You will have to overcome this poisonous Clutter Frog to progress!", + "questFrogCompletion": "The frog cowers back into the muck, defeated. As it slinks away, the blue slime fades, leaving the way ahead clear.

Sitting in the middle of the path are three pristine eggs. \"You can even see the tiny tadpoles and through the clear casing!\" @Breadstrings says. \"Here, you should take them.\"", + "questFrogBoss": "Clutter Frog", + "questFrogDropFrogEgg": "Frog (Egg)", + "questFrogUnlockText": "Unlocks purchasable Frog eggs in the Market", + "questSnakeText": "The Serpent of Distraction", + "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveler astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", + "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", + "questSnakeBoss": "Serpent of Distraction", + "questSnakeDropSnakeEgg": "Snake (Egg)", + "questSnakeUnlockText": "Unlocks purchasable Snake eggs in the Market" } \ No newline at end of file diff --git a/common/locales/uk/rebirth.json b/common/locales/uk/rebirth.json index 0a763a23cc..71f3ba9dec 100644 --- a/common/locales/uk/rebirth.json +++ b/common/locales/uk/rebirth.json @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "Ви отримали досягнення за початок нової пригоди!", "beReborn": "Переродись-но!", "rebirthAchievement": "Ви почали нову пригоду! Це Ваше <%= number %> переродження, Ви досягали найбільше <%= level %> рівня. Аби збільшити це досягнення, почніть свою нову пригоду після того, як досягнете вищого рівня!", + "rebirthAchievement100": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is 100 or higher. To stack this Achievement, begin your next new adventure when you've reached at least 100!", "rebirthBegan": "Нова пригода починається", "rebirthText": "Нова пригода <%= rebirths %> починається", "rebirthOrb": "Куля переродження була використана, аби почати заново після досягнення рівня", + "rebirthOrb100": "Used an Orb of Rebirth to start over after attaining Level 100 or higher", "rebirthPop": "Розпочніть заново з персонажем 1 рівня, зберігши досягнення, колекційні предмети та завдання з історією.", "rebirthName": "Куля переродження", "reborn": "Переродження, максимальний рівень <%= reLevel %>" diff --git a/common/locales/uk/settings.json b/common/locales/uk/settings.json index b8e19657a0..452e75911b 100644 --- a/common/locales/uk/settings.json +++ b/common/locales/uk/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "Якщо ввімкнено, перелік міток завдання буде приховано, коли Ви вперше відкриваєте завдання.", "startAdvCollapsed": "Додаткове показувати згорнутим", "startAdvCollapsedPop": "Якщо ввімкнено, секція Додаткове буде прихована, коли Ви вперше відкриваєте завдання.", + "dontShowAgain": "Don't show this again", + "suppressLevelUpModal": "Don't show popup when gaining a level", + "suppressHatchPetModal": "Don't show popup when hatching a pet", + "suppressRaisePetModal": "Don't show popup when raising a pet into a mount", + "suppressStreakModal": "Don't show popup when attaining a Streak achievement", "showTour": "Показати тур", "restartTour": "Показати тур для ознайомлення, який Ви бачили, коли приєдналися до Habitica.", "showBailey": "Показати Бейлі", @@ -81,7 +86,6 @@ "emailChange1": "To change your email address, please send an email to", "emailChange2": "admin@habitica.com", "emailChange3": "including both your old and new email address as well as your User ID.", - "username": "Login Name", "usernameOrEmail": "Login Name or Email", "email": "Email", "registeredWithFb": "Зареєструватися через Facebook", @@ -89,7 +93,7 @@ "loginNameDescription2": "User->Profile", "loginNameDescription3": "to change the name that appears in your avatar and chat messages.", "emailNotifications": "Email Notifications", - "wonChallenge": "You Won a Challenge", + "wonChallenge": "You won a Challenge!", "newPM": "Received Private Message", "giftedGems": "Gifted Gems", "giftedGemsInfo": "<%= amount %> Gems - by <%= name %>", @@ -118,5 +122,29 @@ "promoCode": "Promo Code", "promoCodeApplied": "Promo Code Applied! Check your inventory", "promoPlaceholder": "Enter Promotion Code", - "displayInviteToPartyWhenPartyIs1": "Display Invite To Party button when party has 1 member." + "displayInviteToPartyWhenPartyIs1": "Display Invite To Party button when party has 1 member.", + "saveCustomDayStart": "Save Custom Day Start", + "registration": "Registration", + "addLocalAuth": "Add local authentication:", + "generateCodes": "Generate Codes", + "generate": "Generate", + "getCodes": "Get Codes", + "webhooks": "Webhooks", + "enabled": "Enabled", + "webhookURL": "Webhook URL", + "add": "Add", + "buyGemsGoldCap": "Cap raised to <%= amount %>", + "mysticHourglass": "<%= amount %> Mystic Hourglass", + "mysticHourglassText": "Mystic Hourglasses allow purchasing a previous month's Mystery Item set.", + "purchasedPlanId": "Recurring $<%= price %> each <%= months %> Month(s) (<%= plan %>)", + "purchasedPlanExtraMonths": "You have <%= months %> months of subscription credit.", + "consecutiveSubscription": "Consecutive Subscription", + "consecutiveMonths": "Consecutive Months:", + "gemCapExtra": "Gem Cap Extra:", + "mysticHourglasses": "Mystic Hourglasses:", + "paypal": "PayPal", + "amazonPayments": "Amazon Payments", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/uk/subscriber.json b/common/locales/uk/subscriber.json index 6b779aabb4..ab20919f17 100644 --- a/common/locales/uk/subscriber.json +++ b/common/locales/uk/subscriber.json @@ -60,7 +60,7 @@ "timeTravelersTitleNoSub": "<%= linkStartTyler %>Тайлер<%= linkEnd %> та <%= linkStartVicky %>Вікі<%= linkEnd %>", "timeTravelersTitle": "Таємничі Мандрівники у Часі", "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.", - "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 <%= linkStart %>here<%= linkEnd %>! If those don't satisfy you, perhaps you'd be interested in one of our fashionably futuristic Steampunk Item Sets?", + "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!", "subUpdateCard": "Оновити картку", diff --git a/common/locales/uk/tasks.json b/common/locales/uk/tasks.json index 8aad8577d5..aaa3adcdde 100644 --- a/common/locales/uk/tasks.json +++ b/common/locales/uk/tasks.json @@ -14,7 +14,7 @@ "save": "Зберегти", "addChecklist": "Додати перелік", "checklist": "Перелік", - "checklistText": "Break a task into smaller pieces! Checklists increase the Experience and Gold gained from a To-Do, and reduce the damage caused by a Daily.", + "checklistText": "Розбийте задачі на меньші шматки! Переліки збільшують кількість досвіду та золота, які ви отримаєте за виконання задачі, та зменьшують ушкодження від щоденніх задач.", "expandCollapse": "Показати/Приховати", "text": "Назва", "extraNotes": "Додаткові примітки", @@ -39,8 +39,8 @@ "repeat": "Повторювати", "repeatEvery": "Повторювати кожні", "repeatHelpTitle": "Як часто треба повторювати це завдання?", - "dailyRepeatHelpContent": "This task will be due every X days. You can set that value below.", - "weeklyRepeatHelpContent": "This task will be due on the highlighted days below. Click on a day to activate/deactivate it.", + "dailyRepeatHelpContent": "Це завдання треба виконувати кожні Х днів. Значення Х можно задати нижче.", + "weeklyRepeatHelpContent": "Це завдання треба виконувати в обрані нижче дні. Клацніть на день, щоб додати чи виключити його.", "repeatDays": "Кожні X днів", "repeatWeek": "У певні дні тижня", "day": "День", @@ -52,9 +52,9 @@ "dueDate": "Виконати до", "remaining": "Активні", "complete": "Виконано", - "dated": "Dated", + "dated": "З датою", "due": "Повинен зробити", - "notDue": "Not Due", + "notDue": "Не обов'язково", "grey": "Сірі", "score": "Рахунок", "rewards": "Нагороди", @@ -72,26 +72,25 @@ "showTags": "Показати", "startDate": "Дата початку", "startDateHelpTitle": "Коли має починатися це завдання?", - "startDateHelp": "Set the date for which this task takes effect. Will not be due on earlier days.", + "startDateHelp": "Вкажіть дату, коли це завдання набуде чинності. До цієї дати воно буде не обов'язковим.", "streakName": "Показати досягнення", "streakText": "Удалося <%= streaks %> рази зробити 21-денні серії щоденних завдань", "streakSingular": "Серійник", "streakSingularText": "Виконав 21-денну серію щоденних завдань", "perfectName": "Ідеальні дні", - "perfectText": "Completed all active Dailies on <%= perfects %> days. With this achievement you get a +level/2 buff to all attributes for the next day. Levels greater than 100 don't have any additional effects on buffs.", + "perfectText": "Кількість днів, коли було завершено всі активні щоденні задачі: <%= perfects %>. З цим досягненням ви отримуєте підсилювач +рівень/2 для всіх характеристик наступного дня. Рівні вище 100-го не отримують жодних додатокових бонусів до підсилювачів.", "perfectSingular": "Ідеальний день", - "perfectSingularText": "Completed all active Dailies in one day. With this achievement you get a +level/2 buff to all attributes for the next day. Levels greater than 100 don't have any additional effects on buffs.", + "perfectSingularText": "Усі активні щоденні задачі виконано. З цим досягненнім ви отримаєте підсилювач +рівень/2 для всіх характеристик наступного дня. Рівні вище 100-го не отримують жодних додатокових бонусів до підсилювачів.", "streakerAchievement": "Ви відкрили досягнення \"Серійник\" ! 21-денна позначка — це наріжний камінь для формування звички. Ви можете продовжувати отримувати це досягнення наступні 21 дні в цьому або іншому Щоденному завданні!", "fortifyName": "Зілля підсилення", "fortifyPop": "Повернути завдання до нейтрального стану (жовтого кольору) та відновити все здоров'я.", "fortify": "Підсилитися", - "fortifyText": "Fortify will return all your tasks to a neutral (yellow) state, as if you'd just added them, and top your Health off to full. This is great if all your red tasks are making the game too hard, or all your blue tasks are making the game too easy. If starting fresh sounds much more motivating, spend the Gems and catch a reprieve!", + "fortifyText": "Підсилення поверне всі ваші завдання у нейтральний (жовтий) колір, немов ви щойно їх додали, та відновить все ваше здоров’я. Це дуже корисно, якщо ваші червоні задачі роблять гру занадто складною, а сині — занадто простою. Якщо новий початок з чистої сторінки вас мотивує, не шкодуйте самоцвіти та отримайте тимчасове полегшення!", "sureDelete": "Ви справді бажаєте вилучити це завдання?", "streakCoins": "Бонус за серію!", - "pushTaskToTop": "Перемістити завдання вгору", - "pushTaskToBottom": "Перемістити завдання вниз", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "Спочатку введіть назву завдання", - "dailiesRestingInInn": "You're Resting in the Inn! Your Dailies will NOT hurt you tonight, but they WILL still refresh every day. If you're in a quest, you won't deal damage/collect items until you check out of the Inn, but you can still be injured by a Boss if your Party mates skip their own Dailies.", + "dailiesRestingInInn": "Ви відпочиваєте у Господі! Ващі щоденні задачі НЕ пошкодять вас сьогодні, але вони БУДУТЬ оновлюватися кожної доби. Якщо ви у квесті, ви не будете наносити пошкоджень чи отримувати предмети, поки не залишите Господу, але ви все одно можете бути пошкоджени Босом, якщо хтось з вашого Гурту не виконає щоденні задачі.", "habitHelp1": "Корисні звички - це те, що ви часто робите. Вони приносять Золото та Досвід щоразу, як ви клацаєте <%= plusIcon %>.", "habitHelp2": "Шкідливі звички - це те, чого ви не хотіли б робити. Вони забирають Здоров'я щоразу, як ви клацаєте <%= minusIcon %>.", "habitHelp3": "Для натхнення огляньте ці приклади Звичок!", @@ -99,7 +98,7 @@ "dailyHelp1": "Щоденна задача повторюється <%= emphasisStart %>кожного дня<%= emphasisEnd %>, коли вона активна. Клацніть <%= pencilIcon %>, щоб змінити дні, коли щоденне завдання активне.", "dailyHelp2": "Якщо ви не виконуєте активне Щоденне завдання, ви втрачаєте Здоров'я, коли день закінчується.", "dailyHelp3": "Щоденне завдання стає <%= emphasisStart %>червонішим<%= emphasisEnd %>, коли ви його пропускаєте, і <%= emphasisStart %>синішим<%= emphasisEnd %>, коли ви його виконуєте. Чим червонішим є Щоденне завдання, тим більше за нього ви отримаєте винагороди... або ушкоджень.", - "dailyHelp4": "To change when your day rolls over, go to <%= linkStart %> Settings > Site<%= linkEnd %> > Custom Day Start.", + "dailyHelp4": "Щоб змінити час, коли починається нова доба, зайдіть у <%= linkStart %> Налаштування > Сайт<%= linkEnd %> > Обрати початок доби.", "dailyHelp5": "Для натхнення, огляньте ці приклади Щоденних завдань!", "toDoHelp1": "Задачі з'являються жовтими, і червоніють (стають більш цінними) відповідно до того, скільки часу йде на їх виконання.", "toDoHelp2": "Задачі ніколи вам не шкодять! Вони тільки приносять Золото та Досвід.", diff --git a/common/locales/zh/backgrounds.json b/common/locales/zh/backgrounds.json index eae7adfd23..c21ae8d4e9 100644 --- a/common/locales/zh/backgrounds.json +++ b/common/locales/zh/backgrounds.json @@ -112,11 +112,25 @@ "backgroundStableNotes": "照顾在Habitica马厩里的坐骑", "backgroundTavernText": "Habitica酒馆", "backgroundTavernNotes": "前往Habitica酒馆", - "backgrounds102015": "SET 17: Released October 2015", - "backgroundHarvestMoonText": "Harvest Moon", - "backgroundHarvestMoonNotes": "Cackle under the Harvest Moon.", - "backgroundSlimySwampText": "Slimy Swamp", - "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", - "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgrounds102015": "第17组:2015年10月推出", + "backgroundHarvestMoonText": "丰收之月", + "backgroundHarvestMoonNotes": "在丰收之月下面哈哈笑", + "backgroundSlimySwampText": "黏糊糊的沼泽", + "backgroundSlimySwampNotes": "在黏糊糊的沼泽中奋勇前进", + "backgroundSwarmingDarknessText": "遮天蔽日的黑暗", + "backgroundSwarmingDarknessNotes": "在遮天蔽日的黑暗中颤抖", + "backgrounds112015": "第18组:2015年11月推出", + "backgroundFloatingIslandsText": "浮游岛", + "backgroundFloatingIslandsNotes": "在浮游岛上跳跃", + "backgroundNightDunesText": "夜幕沙丘", + "backgroundNightDunesNotes": "在夜幕沙丘中静静穿行", + "backgroundSunsetOasisText": "日落绿洲", + "backgroundSunsetOasisNotes": "沐浴在日落绿洲", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/zh/challenge.json b/common/locales/zh/challenge.json index 02c99df764..7d3f390d47 100644 --- a/common/locales/zh/challenge.json +++ b/common/locales/zh/challenge.json @@ -59,5 +59,9 @@ "challengeNotEnoughGems": "你没有足够的宝石来发布这一挑战。", "noPermissionEditChallenge": "你没有权限修改这个挑战。", "noPermissionDeleteChallenge": "你没有权限删除这个挑战。", - "noPermissionCloseChallenge": "你没有权限关闭这个挑战。" + "noPermissionCloseChallenge": "你没有权限关闭这个挑战。", + "congratulations": "恭喜!", + "hurray": "好哇!", + "noChallengeOwner": "没有主持人", + "noChallengeOwnerPopover": "这项挑战没有主持人,因为创建了这个挑战项目的用户删除了他们的帐号" } \ No newline at end of file diff --git a/common/locales/zh/character.json b/common/locales/zh/character.json index 054987e4b5..93e0f678b0 100644 --- a/common/locales/zh/character.json +++ b/common/locales/zh/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "职业奖励", "battleGear": "战斗装备", "battleGearText": "这是你在战斗中的装备;这会影响您在任务重的各项数值", + "autoEquipBattleGear": "自动换新装备", "costume": "服装", "costumeText": "如果你更喜欢其它装备的样子,勾选\"显示服装\"的按钮,在装备战斗装备的情况下换一个造型。", "useCostume": "显示服装", @@ -64,6 +65,10 @@ "ultimGearText": "已经将以下职业的武器和装备升级到满级:", "level": "级", "levelUp": "升级了!", + "gainedLevel": "你升了一级!", + "leveledUp": "通过完成你现实生活中的目标,你已经达到了第l <%= level %>级!", + "fullyHealed": "你的生命值已经完全恢复了!", + "huzzah": "啊打~!", "mana": "魔法值", "hp": "生命值", "mp": "MP", diff --git a/common/locales/zh/content.json b/common/locales/zh/content.json index 27e470d848..489d8f36db 100644 --- a/common/locales/zh/content.json +++ b/common/locales/zh/content.json @@ -6,96 +6,102 @@ "armoireLastItem": "您在 魔法衣橱 里找到了最后一件 稀有装备。", "armoireNotesEmpty": "每个月的第一个星期这里都会有新的装备,到时记得常点进来获得经验和食物", "dropEggWolfText": "狼", - "dropEggWolfMountText": "Wolf", - "dropEggWolfAdjective": "a loyal", + "dropEggWolfMountText": "狼", + "dropEggWolfAdjective": "一只忠诚的", "dropEggTigerCubText": "老虎幼崽", "dropEggTigerCubMountText": "老虎", - "dropEggTigerCubAdjective": "a fierce", + "dropEggTigerCubAdjective": "一只凶猛的", "dropEggPandaCubText": "熊猫幼崽", "dropEggPandaCubMountText": "熊猫", - "dropEggPandaCubAdjective": "a gentle", + "dropEggPandaCubAdjective": "一只温顺的", "dropEggLionCubText": "小狮子", "dropEggLionCubMountText": "狮子", - "dropEggLionCubAdjective": "a regal", + "dropEggLionCubAdjective": "一只威严的", "dropEggFoxText": "狐狸", - "dropEggFoxMountText": "Fox", - "dropEggFoxAdjective": "a wily", + "dropEggFoxMountText": "狐狸", + "dropEggFoxAdjective": "一只狡猾的", "dropEggFlyingPigText": "飞猪", - "dropEggFlyingPigMountText": "Flying Pig", - "dropEggFlyingPigAdjective": "a whimsical", + "dropEggFlyingPigMountText": "飞猪", + "dropEggFlyingPigAdjective": "一只幽默有趣的", "dropEggDragonText": "龙", - "dropEggDragonMountText": "Dragon", - "dropEggDragonAdjective": "a mighty", + "dropEggDragonMountText": "龙", + "dropEggDragonAdjective": "一只威猛的", "dropEggCactusText": "仙人掌", - "dropEggCactusMountText": "Cactus", - "dropEggCactusAdjective": "a prickly", + "dropEggCactusMountText": "仙人掌", + "dropEggCactusAdjective": "一只多刺的", "dropEggBearCubText": "幼熊", "dropEggBearCubMountText": "熊", - "dropEggBearCubAdjective": "a cuddly", + "dropEggBearCubAdjective": "一只要抱抱的", "questEggGryphonText": "狮鹫", - "questEggGryphonMountText": "Gryphon", - "questEggGryphonAdjective": "a proud", + "questEggGryphonMountText": "狮鹫", + "questEggGryphonAdjective": "一只骄傲的", "questEggHedgehogText": "刺猬", - "questEggHedgehogMountText": "Hedgehog", - "questEggHedgehogAdjective": "a spiky", + "questEggHedgehogMountText": "刺猬", + "questEggHedgehogAdjective": "一只刺刺的", "questEggDeerText": "鹿", - "questEggDeerMountText": "Deer", - "questEggDeerAdjective": "an elegant", + "questEggDeerMountText": "鹿", + "questEggDeerAdjective": "一只优雅的", "questEggEggText": "蛋", "questEggEggMountText": "装了鸡蛋的篮子", - "questEggEggAdjective": "a colorful", + "questEggEggAdjective": "一只彩色的", "questEggRatText": "老鼠", - "questEggRatMountText": "Rat", - "questEggRatAdjective": "a dirty", + "questEggRatMountText": "老鼠", + "questEggRatAdjective": "一只脏脏的", "questEggOctopusText": "章鱼", - "questEggOctopusMountText": "Octopus", - "questEggOctopusAdjective": "a slippery", + "questEggOctopusMountText": "章鱼", + "questEggOctopusAdjective": "一只滑溜溜的", "questEggSeahorseText": "海马", - "questEggSeahorseMountText": "Seahorse", - "questEggSeahorseAdjective": "a prize", + "questEggSeahorseMountText": "海马", + "questEggSeahorseAdjective": "一只珍赏的", "questEggParrotText": "鹦鹉", - "questEggParrotMountText": "Parrot", - "questEggParrotAdjective": "a vibrant", + "questEggParrotMountText": "鹦鹉", + "questEggParrotAdjective": "一只充满活力的", "questEggRoosterText": "公雞", - "questEggRoosterMountText": "Rooster", - "questEggRoosterAdjective": "a strutting", + "questEggRoosterMountText": "公雞", + "questEggRoosterAdjective": "一只大摇大摆的", "questEggSpiderText": "蜘蛛", - "questEggSpiderMountText": "Spider", - "questEggSpiderAdjective": "a creepy", + "questEggSpiderMountText": "蜘蛛", + "questEggSpiderAdjective": "一只惊悚的", "questEggOwlText": "猫头鹰", - "questEggOwlMountText": "Owl", - "questEggOwlAdjective": "a wise", + "questEggOwlMountText": "猫头鹰", + "questEggOwlAdjective": "一只充满智慧的", "questEggPenguinText": "企鹅", - "questEggPenguinMountText": "Penguin", - "questEggPenguinAdjective": "a perspicacious", + "questEggPenguinMountText": "企鹅", + "questEggPenguinAdjective": "一只聪颖的", "questEggTRexText": "霸王龙", - "questEggTRexMountText": "Tyrannosaur", - "questEggTRexAdjective": "a tiny-armed", + "questEggTRexMountText": "霸王龙", + "questEggTRexAdjective": "一只手臂短短的", "questEggRockText": "石头", - "questEggRockMountText": "Rock", - "questEggRockAdjective": "a lively", + "questEggRockMountText": "石头", + "questEggRockAdjective": "一只活泼的", "questEggBunnyText": "兔子", - "questEggBunnyMountText": "Bunny", - "questEggBunnyAdjective": "a snuggly", + "questEggBunnyMountText": "兔子", + "questEggBunnyAdjective": "一只暖洋洋的", "questEggSlimeText": "棉花糖烂泥", - "questEggSlimeMountText": "Marshmallow Slime", - "questEggSlimeAdjective": "a sweet", + "questEggSlimeMountText": "棉花糖烂泥", + "questEggSlimeAdjective": "一只甜蜜的", "questEggSheepText": "羊", - "questEggSheepMountText": "Sheep", - "questEggSheepAdjective": "a woolly", + "questEggSheepMountText": "羊", + "questEggSheepAdjective": "一只软绵绵的", "questEggCuttlefishText": "墨鱼", - "questEggCuttlefishMountText": "Cuttlefish", - "questEggCuttlefishAdjective": "a cuddly", + "questEggCuttlefishMountText": "墨鱼", + "questEggCuttlefishAdjective": "一只要抱抱的", "questEggWhaleText": "鲸", - "questEggWhaleMountText": "Whale", - "questEggWhaleAdjective": "a splashy", + "questEggWhaleMountText": "鲸", + "questEggWhaleAdjective": "一只招摇高调的", "questEggCheetahText": "猎豹", - "questEggCheetahMountText": "Cheetah", - "questEggCheetahAdjective": "an honest", - "questEggHorseText": "Horse", - "questEggHorseMountText": "Horse", - "questEggHorseAdjective": "a galloping", - "eggNotes": "Find a hatching potion to pour on this egg, and it will hatch into <%= eggAdjective(locale) %> <%= eggText(locale) %>.", + "questEggCheetahMountText": "猎豹", + "questEggCheetahAdjective": "一只诚实的", + "questEggHorseText": "马", + "questEggHorseMountText": "马", + "questEggHorseAdjective": "一只奔腾驰骋的", + "questEggFrogText": "青蛙", + "questEggFrogMountText": "青蛙", + "questEggFrogAdjective": "一只王子一般的", + "questEggSnakeText": "蛇", + "questEggSnakeMountText": "蛇", + "questEggSnakeAdjective": "一条嘶嘶的", + "eggNotes": "将一瓶孵化药水倒在这个宠物蛋上,你就能孵化出一只<%= eggAdjective(locale) %><%= eggText(locale) %>。", "hatchingPotionBase": "普通", "hatchingPotionWhite": "白色", "hatchingPotionDesert": "沙漠", @@ -106,9 +112,9 @@ "hatchingPotionCottonCandyPink": "粉色棉花糖", "hatchingPotionCottonCandyBlue": "蓝色棉花糖", "hatchingPotionGolden": "金色", - "hatchingPotionSpooky": "Spooky", + "hatchingPotionSpooky": "阴森森的", "hatchingPotionNotes": "把它倒在宠物蛋上可以孵化出一只<%= potText(locale) %>宠物。", - "premiumPotionAddlNotes": "Not usable on quest pet eggs.", + "premiumPotionAddlNotes": "无法在任务奖励宠物蛋上使用", "foodMeat": "肉", "foodMilk": "牛奶", "foodPotatoe": "土豆", diff --git a/common/locales/zh/faq.json b/common/locales/zh/faq.json index 4e92abc129..7f3c1af2d7 100644 --- a/common/locales/zh/faq.json +++ b/common/locales/zh/faq.json @@ -1,41 +1,44 @@ { "frequentlyAskedQuestions": "经常被问到的问题", "faqQuestion0": "我很迷惑。我在哪里能得到简介 ?", - "iosFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn experience and gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as Pets, Skills, and Quests! You can customize your character under Menu > Customize Avatar.\n\n Some basic ways to interact: click the (+) in the upper-right-hand corner to add a new task. Tap on an existing task to edit it, and swipe left on a task to delete it. You can sort tasks using Tags in the upper-left-hand corner, and expand and contract checklists by clicking on the checklist bubble.", - "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, the wiki has an excellent step-by-step overview of the game [right here](http://habitica.wikia.com/wiki/Habitica_Wiki).", - "faqQuestion1": "How do I set up my tasks?", - "iosFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.", - "webFaqAnswer1": "Good Habits (the ones with a ) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a ) are tasks that you should avoid, like biting nails. Habits with a and a have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n

\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n

\n To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.", - "faqQuestion2": "What are some sample tasks?", - "iosFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n

\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", - "webFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", - "faqQuestion3": "Why do my tasks change color?", - "iosFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it's a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", - "webFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it’s a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.", - "faqQuestion4": "Why did my avatar lose health, and how do I regain it?", - "iosFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you tap a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your Party and one of your Party mates did not complete all their Dailies, the Boss will attack you.\n\n The main way to heal is to gain a level, which restores all your health. You can also buy a Health Potion with gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a Party with a Healer, they can heal you as well.", - "webFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight, they will damage you. Second, if you click a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your party and one of your party mates did not complete all their Dailies, the Boss will attack you.\n

\n The main way to heal is to gain a level, which restores all your Health. You can also buy a Health Potion with Gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a party (under Social > Party) with a Healer, they can heal you as well.", - "faqQuestion5": "How do I play Habitica with my friends?", - "iosFaqAnswer5": "The best way is to invite them to a Party with you, via the [website](https://habitica.com/#/options/groups/party)! We'll add the ability to create a Party from this app soon, but in the meantime you can use the [website](https://habitica.com/#/options/groups/party). Parties can go on quests, battle monsters, and cast skills to support each other. On the website, you and your friends can also join Guilds, which are public chat rooms. Guilds will be added to the app in a future update!", - "webFaqAnswer5": "The best way is to invite them to a party with you, under Social > Party! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n

\n For more detailed info, check out the wiki pages on [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).", - "faqQuestion6": "How do I get a Pet or Mount?", - "iosFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch Egg.\" Then choose a hatching potion to determine its color! Go to Menu > Pets to equip your new Pet to your avatar by clicking on it. \n\n You can also grow your Pets into Mounts by feeding them under Menu > Pets. Tap on a Pet, and then select \"Feed Pet\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Menu > Mounts and tap on it to equip it to your avatar.\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", - "webFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Inventory > Market.\n

\n To hatch a Pet, you'll need an egg and a hatching potion. Click on the egg to determine the species you want to hatch, and then click on the hatching potion to determine its color! Go to Inventory > Pets to equip it to your avatar by clicking on it.\n

\n You can also grow your Pets into Mounts by feeding them under Inventory > Pets. Click on a Pet, and then click on a piece of food from the right-hand menu to feed it! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). Once you have a Mount, go to Inventory > Mounts and click on it to equip it to your avatar.\n

\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)", - "faqQuestion7": "How do I become a Warrior, Mage, Rogue, or Healer?", - "iosFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their Party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most gold and find the most item drops, and they can help their Party do the same. Finally, Healers can heal themselves and their Party members.\n\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click “Decide Later” and choose later under Menu > Choose Class.", - "webFaqAnswer7": "At level 10, you can choose to become a Warrior, Mage, Rogue, or Healer. (All players start as Warriors by default.) Each Class has different equipment options, different Skills that they can cast after level 11, and different advantages. Warriors can easily damage Bosses, withstand more damage from their tasks, and help make their party tougher. Mages can also easily damage Bosses, as well as level up quickly and restore Mana for their party. Rogues earn the most Gold and find the most item drops, and they can help their party do the same. Finally, Healers can heal themselves and their party members.\n

\n If you don't want to choose a Class immediately -- for example, if you are still working to buy all the gear of your current class -- you can click \"Opt Out\" and re-enable it later under User > Stats.", - "faqQuestion8": "What is the blue stat bar that appears in the Header after level 10?", - "iosFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 under Menu > Use Skills. Unlike your health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", - "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in a special section in the Rewards Column. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete Good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You’ll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", - "faqQuestion9": "How do I fight monsters and go on Quests?", - "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party on the [website](https://habitica.com/#/options/groups/party), you'll be rewarded with the Basi-List Scroll! (We will add this feature to the app in a future update.)\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for gold and gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "webFaqAnswer9": "First, you need to join or start a party (under Social > Party). Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n

\n Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are three ways to get a scroll:\n

\n * When you invite people to your party, you’ll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Page (Inventory > Quests) for Gold and Gems.\n

\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your party at the same time that you damage the Boss.\n

\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", - "faqQuestion10": "What are gems, and how do I get them?", - "iosFaqAnswer10": "Gems are purchased with real money by tapping on the gem icon in the header. When people buy gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying gems directly, there are three other ways players can gain gems:\n\n * Win a Challenge on the [website](https://habitica.com) that has been set up by another player under Social > Challenges. (We will be adding Challenges to the app in a future update!)\n * Subscribe on the [website](https://habitica.com/#/options/settings/subscription) and unlock the ability to buy a certain number of gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with gems do not offer any statistical advantages, so players can still make use of the app without them!", - "webFaqAnswer10": "Gems are [purchased with real money](https://habitica.com/#/options/settings/subscription), although [subscribers](https://habitica.com/#/options/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n

\n In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n

\n * Win a Challenge that has been set up by another player under Social > Challenges.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", - "faqQuestion11": "How do I report a bug or request a feature?", - "iosFaqAnswer11": "You can report a bug, request a feature, or send feedback under Menu > Report a Bug and Menu > Send Feedback! We'll do everything we can to assist you.", - "webFaqAnswer11": "Bug reports are collected on GitHub. Go to [Help > Report a Bug](https://github.com/HabitRPG/habitrpg/issues/2760) and follow the instructions. Don't worry, we'll get you fixed up soon!\n

\n Feature requests are collected on Trello. Go to [Help > Request a Feature](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) and follow the instructions. Ta-da!", - "iosFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the Tavern chat under Menu > Tavern! We're happy to help.", - "webFaqStillNeedHelp": "If you have a question that isn't on this list, come ask in the [Newbies Guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help." + "iosFaqAnswer0": "首先,你要建立起你每天要完成的任务。然后,当你在现实生活中完成这些任务时,在应用中清点它们,你就会得到经验值和金钱。金钱可以用来买装备和一些物品,也可以用来买奖励。经验可以使你的人物升级,并解锁宠物、技能、任务等内容。你可以在菜单>装扮角色中装扮你的角色。\n\n一些基本的交互方法:点击右上角的(+)添加任务。点击一个已经存在的任务去编辑它,左滑来删除它。你可以用左上角标签给任务排序,并通过点击清单气泡来增大和缩小任务清单。", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", + "faqQuestion1": "怎样来建立一个任务?", + "iosFaqAnswer1": "好习惯(有+号的那些)养成任务你能够在一天之内完成很多次,比如多吃蔬菜。坏习惯(带有-号的)则是你需要避免去做的,比如啃指甲。同时带有+和-号的任务表示某件事可以有好坏两个选择,比如走楼梯上楼,还有乘坐电梯。养成好习惯能奖励你经验值和金币,坏习惯则会损害生命值。\n\n每日任务是你每天都必须完成的事项,比如刷牙,或者检查你的邮件。可以通过点击每日任务编辑任务完成期限,如果在一个任务到期前你没能完成它,你的健康值将降低,小心,不要一次性加太多每日任务!\n\n待办任务就是你的待办项列表,完成一个待办任务可以获得金币和经验值,你不会因为待办任务损失生命值,可以点击编辑一个待办任务来为它添加完成期限。", + "webFaqAnswer1": "好习惯(有的那些)养成任务你能够在一天之内完成很多次,比如多吃蔬菜。坏习惯(带有的)则是你需要避免去做的,比如啃指甲。同时带有 的任务表示某件事可以有好坏两个选择,比如走楼梯上楼,还有乘坐电梯。养成好习惯能奖励你经验值和金币,坏习惯则会损害生命值。\n

\n每日任务是你每天都必须完成的事项,比如刷牙,或者检查你的邮件。可以通过点击每日任务编辑任务完成期限,如果在一个任务到期前你没能完成它,你的健康值将降低,小心,不要一次性加太多每日任务!\n

\n待办任务就是你的待办项列表,完成一个待办任务可以获得金币和经验值,你不会因为待办任务损失生命值,可以点击编辑一个待办任务来为它添加完成期限。", + "faqQuestion2": "有没有可供参考的任务范例?", + "iosFaqAnswer2": "wiki有四个范例:\n

\n* [习惯](http://habitica.wikia.com/wiki/Sample_Habits)\n* [每日任务](http://habitica.wikia.com/wiki/Sample_Dailies)\n* [待办事项](http://habitica.wikia.com/wiki/Sample_To-Dos)\n* [自订奖励](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", + "webFaqAnswer2": "wiki有四个范例:\n* [习惯](http://habitica.wikia.com/wiki/Sample_Habits)\n* [每日任务](http://habitica.wikia.com/wiki/Sample_Dailies)\n* [待办事项](http://habitica.wikia.com/wiki/Sample_To-Dos)\n* [自订奖励](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)", + "faqQuestion3": "为什么我的待办任务会变颜色?", + "iosFaqAnswer3": "你的任务会根据你完成的情况改变颜色!每一个新任务都用黄色表示,越经常地完成每日任务或好习惯养成,这些任务项就变得越蓝。错过一个每日任务,或是做了一个坏习惯,这些任务就向红色变化,一个任务项的颜色越红,完成它就能给你越多的奖励,但如果那是一个每日任务,或是一个坏习惯,那它就会扣除越多的生命值!这样就能激励你去完成那些特别有困难去完成的任务。", + "webFaqAnswer3": "你的任务会根据你完成的情况改变颜色!每一个新任务都用黄色表示,越经常地完成每日任务或好习惯养成,这些任务项就变得越蓝。错过一个每日任务,或是做了一个坏习惯,这些任务就向红色变化,一个任务项的颜色越红,完成它就能给你越多的奖励,但如果那是一个每日任务,或是一个坏习惯,那它就会扣除越多的生命值!这样就能激励你去完成那些特别有困难去完成的任务。", + "faqQuestion4": "为什么我的头像显示生命值降低了,怎样才能重新获得生命值?", + "iosFaqAnswer4": "有这样一些东西会减少你的生命值,第一,如果你有每日任务没完成,它会克扣你的生命值,第二,如果你“点击”了一个坏习惯,它也会伤害你的生命值,最后,如果你在和你的队员一起进行BOSS战时,一旦队伍中有一个成员没能完成每日任务,BOSS就会攻击你。\n\n回复生命值最主要的办法是升级,每一次升级时,所有的生命值都会回复。你也用金币从奖励栏里可以购买生命药剂。另外,在达到10级以上的级数时,你可以选择成为一个医师,然后学习治疗技能。如果你的队伍里有一个医师,他也能治疗你。", + "webFaqAnswer4": "有这样一些东西会减少你的生命值,第一,如果你有每日任务没完成,它会克扣你的生命值,第二,如果你“点击”了一个坏习惯,它也会伤害你的生命值,最后,如果你在和你的队员一起进行BOSS战时,一旦队伍中有一个成员没能完成每日任务,BOSS就会攻击你。\n

\n回复生命值最主要的办法是升级,每一次升级时,所有的生命值都会回复。你也用金币从奖励栏里可以购买生命药剂。另外,在达到10级以上的级数时,你可以选择成为一个医师,然后学习治疗技能。如果你的队伍(可在社交>队伍里查看)里有一个医师,他也能治疗你。", + "faqQuestion5": "我怎么和朋友们一起玩Habitica?", + "iosFaqAnswer5": "最好的办法是邀请他们加入你的战队!战队可以接受任务,和怪物作战,使用技能互相支持。 如果你还没有自己的队伍,进入目录 > 队伍点击“建立新的队伍”。 然后点击成员列表,在右上角选择邀请,输入朋友们的用户ID (一串由数字和字母组成的列表,可以在手机APP的设置 > 账户明细或者网页版的设置 > API下查看)。在网站上,你还可以使用email地址邀请朋友,在手机APP会在未来增加这个功能。\n\n在网页版上你和朋友们还能加入公会,即公共聊天室,APP也会跟进公会功能!", + "webFaqAnswer5": "最好的方法就是邀请他们跟你一起加入队伍,选择「社交」>「队伍」。队伍可以参加任务卷轴、和魔王对抗、使用技能来支援彼此。你也可以加入公会(「社交」>「公会」),公会里面有聊天室,你可以在上面分享些新鲜事或者说说你想要达成的好习惯目标,你可以自由的选择要公开聊天或者私下。公会可以重复加入数个,但是队伍一次只能加入一组喔!\n

\n想要知道更多资讯,请点选我们的wiki页面\n[队伍](http://habitrpg.wikia.com/wiki/Party) \n[公会](http://habitrpg.wikia.com/wiki/Guilds)", + "faqQuestion6": "我要怎样才能得到宠物或是坐骑呢?", + "iosFaqAnswer6": "当你等级升到3的时候,就会解锁掉落系统。每当你完成任务时,你就会有一定的机率收到宠物蛋、孵化药水,或是喂养宠物的食物。当你收到时系统就会自动存入「选单」>「物品」。\n\n想要孵化宠物,你需要同时拥有宠物蛋和孵化药水各一。点选宠物蛋确认你要孵化的种类,接着点击「孵化」,然后选择孵化药水就能够确认宠物的颜色啰!孵化完成后你可以到「选单」>「宠物」将你的宠物装备到角色上。\n\n你也可以用喂食的方式让宠物进化成坐骑。点选宠物选择「喂食」,你会看到一条绿色的状态列随着你喂食次数而增长,当状态列额满后就会进化成坐骑。这需要花点时间,不过如果你能找到宠物最喜欢的食物,就可以加速宠物进化的速度啰!请多多尝试食物种类或者看这个[剧透]。 (http://habitica.wikia.com/wiki/Food#Food_Preferences)\n当你拥有了一只座骑,你可以到「选单」>「坐骑」将它装备到角色上。\n\n当你完成某些任务卷轴时,你也可能收到任务宠物蛋。 (你可以看看下面有一些关于任务卷轴的介绍)。", + "webFaqAnswer6": "当你等级升到3的时候,就会解锁掉落系统。每当你完成任务时,你就会有一定的机率收到宠物蛋、孵化药水,或是喂养宠物的食物。当你收到时系统就会自动存入「背包」>「市场」。\n

\n想要孵化宠物,你需要同时拥有宠物蛋和孵化药水各一。点选宠物蛋确认你要孵化的种类,然后选择孵化药水就能够确认宠物的颜色啰!孵化完成后你可以到「背包」>「宠物」将你的宠物装备到角色上。\n

\n你也可以用喂食的方式让宠物进化成坐骑。点选「背包」>「宠物」后选择宠物,这时画面右方会出现选单,点选食物然后「喂食」就可以了!你会看到一条绿色的状态列随着你喂食次数而增长,当状态列额满后就会进化成坐骑。这需要花点时间,不过如果你能找到宠物最喜欢的食物,就可以加速宠物进化的速度啰!请多多尝试食物种类或者看这个[see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences)。\n当你拥有了一只座骑,你可以到「背包」>「坐骑」将它装备到角色上。\n

\n当你完成某些任务卷轴时,你也可能收到任务宠物蛋。 (你可以看看下面有一些关于任务卷轴的介绍)。", + "faqQuestion7": "我怎样才能够成为战士、法师、盗贼或是医师?", + "iosFaqAnswer7": "在等级10的时候,你可以选择成为战士、法师、盗贼或是医者。 (所有玩家在一开始都会被系统默认为是战士直到你升等为10。) 每种职业都有各自的优点以及不同的装备选择,当你等级11时还能够施放职业技能。战士可以很轻松地击退魔王,还能够抵挡来自任务的伤害,同时也是队伍攻击主力。法师也能够给予魔王有效的攻击,等级提升快速且能够帮助队伍的成员补充魔力。盗贼能获得最多金币,也是能捡到最多掉落物品的职业,而这些优点也能回馈给队伍。最后是医师,医师拥有特殊技能可以治愈他们自身以及队伍成员的生命值。\n\n如果你还没能够决定该选择哪种作为职业的话--举例,如果你觉得与​​其马上选择职业,不如先补足目前所需的装备的话--你可以点选「之后再决定」,等你觉得时机到了就可以到「选单」>「选择职业」。", + "webFaqAnswer7": "在达到第 10级时,你可以在战士,法师,盗贼和医师当中选择自己的职业(所有玩家的初始职业都是战士)。每个职业有不同的装备选择和在11级时可以使用的技能,以及不同的优点。战士可以很轻松地击退BOSS们,还能够抵挡来自任务的伤害,同时也是队伍的凝聚力。法师也能够给予魔王有效的攻击,等级提升快速且能够帮助队伍的成员补充魔力。盗贼能赚取最多的金币,也是能捡到最多掉落物品的职业,而这些优点也能回馈给队伍。最后,医师拥有特殊技能可以治愈他们自身以及队伍成员的生命值。\n

\n如果你还不想立刻选择职业的话--比如,如果你觉得与​​其马上选择职业,不如先补足目前所需的装备的--你可以点选「之后再决定」,等你觉得时机到了就可以到「选单」>「选择职业」。", + "faqQuestion8": "在达到第10级成为医师以后,头像里出现的蓝条是什么?", + "iosFaqAnswer8": "在你达到第10级,选择一个职业之后出现在头像里的蓝条是你的法力条。在你接下来不断升级的过程中,你会解锁各种特殊技能,它们需要耗费魔法才能使用。每个职业都有不同技能,在到达11级以后会在 目录 > 使用技能 下面出现。和你的健康值不同,你的法力条在你升级时不会回复,只有在培养了好的习惯,完成了每日任务和待办事项时才会获取法力。每过一夜你也会回复小部分的法力——完成的日常任务越多,回复的法力也越多。", + "webFaqAnswer8": "在你达到第10级,选择一个职业之后出现在头像里的蓝条是你的法力条。在你接下来不断升级的过程中,你会解锁各种特殊技能,它们需要耗费魔法才能使用。每个职业都有不同技能,在到达11级以后会在奖励栏的的一块专门区域出现。和你的健康值不同,你的法力条在你升级时不会回复,只有在培养了好的习惯,完成了每日任务和待办事项时才会获取法力。每过一夜你也会回复小部分的法力——完成的日常任务越多,回复的法力也越多。", + "faqQuestion9": "我怎么和怪兽战斗,继续任务?", + "iosFaqAnswer9": "首先,你需要加入或者成立一个战队 (见上面内容),虽然你可以一个人对抗怪物们,我们还是建议组队作战,因为这样可以让任务变得简单很多。另外,在完成任务时有一个可以鼓励你的朋友也是非常有动力的!\n\n然后,你需要一个任务卷轴,在目录 > 道具 下面可以找到,得到一个任务卷轴有三个办法:\n\n- 在15级的时候,你会得到一条任务线,有三个互相联系的任务,在30,40和60级还会解锁更多任务线\n- 当你邀请朋友加入你的战队,你会被奖励基础卷轴!\n- 在网页版你可以在[这里] (https://habitica.com/#/options/inventory/quests) 用金币和宝石购买任务。(我们会在未来把这项功能加到手机APP上)\n\n要在一项收集任务中击败BOSS收集道具,只需要照常完成你的日常任务,每过一夜,它们会被追踪到对BOSS的伤害值上 (下拉页面刷新就能看见BOSS的生命值在降低)。如果在和BOSS对战时错过了某些日常任务,BOSS会在你和你的队友对BOSS造成伤害的同时反伤你们。\n\n在11级时法师和战士可以学习到能造成更多伤害的技能,所以在第10级选择职业时,如果你想做一个高输出角色,这两个职业是极佳的选择。", + "webFaqAnswer9": "首先,你需要加入或者成立一个战队 (见 社交 > 队伍),虽然你可以一个人对抗怪物们,我们还是建议组队作战,因为这样可以让任务变得简单很多。另外,在完成任务时有一个可以鼓励你的朋友也是非常有动力的! \n

\n然后,你需要一个任务卷轴,在目录 > 道具 下面可以找到,得到一个任务卷轴有三个办法: \n

\n* 在15级的时候,你会得到一条任务线,有三个互相联系的任务,在30,40和60级还会解锁更多任务线 - 当你邀请朋友加入你的战队,你会被奖励基础卷轴! \n* 在网页版你可以在任务页面 (见 物品栏 > 任务) 用金币和宝石购买任务。\n

\n要在一项收集任务中击败BOSS收集道具,只需要照常完成你的日常任务,每过一夜,它们会被追踪到对BOSS的伤害值上 (下拉页面刷新就能看见BOSS的生命值在降低)。如果在和BOSS对战时错过了某些日常任务,BOSS会在你和你的队友对BOSS造成伤害的同时反伤你们。 \n

\n在11级时法师和战士可以学习到能造成更多伤害的技能,所以在第10级选择职业时,如果你想做一个高输出角色,这两个职业是极佳的选择。", + "faqQuestion10": "什么是宝石?我如何获得宝石?", + "iosFaqAnswer10": "宝石需要通过点击标题栏上的宝石图标,用真实的金钱购买。购买宝石可以帮助我们维护网站的运营,我们对这些支持表示衷心感谢!\n\n除了直接购买宝石以外,还有另外三个办法可以得到宝石:\n\n* 在 [网页版](https://habitica.com) 进入 社交 > 挑战 赢得另一个玩家设立的挑战项目。(我们会将挑战项目在未来加入手机APP)\n\n* 在 [网页版](https://habitica.com/#/options/settings/subscription) 进行订阅,可以解锁每月用金币购买一定数量宝石的权限\n\n* 为Habitica项目做出贡献。在这个维基页面查看更多细节: [为Habitica做贡献](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n请记住,使用宝石购买的道具并不具有额外的优势,所以玩家们完全可以不使用宝石继续使用本程序!", + "webFaqAnswer10": "宝石需要通过点击标题栏上的宝石图标,用[真实的金钱]购买 (https://habitica.com/#/options/settings/subscription),网站的[订阅者] (https://habitica.com/#/options/settings/subscription) 可以用金币购买宝石。无论何种方式获得宝石,都可以帮助我们维护网站的运营,我们对这些支持表示衷心感谢!\n

\n除了直接购买宝石和成为订阅者以外,还有另外两个办法可以得到宝石:\n

\n* 进入 社交 > 挑战 赢得另一个玩家设立的挑战项目\n* 为Habitica项目做出贡献。在这个维基页面查看更多细节: [为Habitica做贡献](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n

\n请记住,使用宝石购买的道具并不具有额外的优势,所以玩家们完全可以不使用宝石继续使用本程序!", + "faqQuestion11": "我怎么才能报告一个bug,或者请求增加功能?", + "iosFaqAnswer11": "你可以在菜单>报告bug以及菜单>提供反馈下面报告bug,请求增加功能,或者提供你的反馈。我们会尽力协助你。", + "webFaqAnswer11": "错误报告都在GitHub里留有记录,进入[帮助 > 报告一个错误] (https://github.com/HabitRPG/habitrpg/issues/2760) 并按照说明提交问题。不用担心,我们会马上解决的!\n

\n新功能增添请求都被收集在Trello,进入[帮助 > 请求一个新功能] (https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) ,然后按照说明提交请求,见证奇迹的时刻到了!", + "faqQuestion12": "如何参与世界级的首领战?", + "iosFaqAnswer12": "世界级首领是出现在酒馆的特殊怪物。所有活跃的玩家都会自动参与首领战,玩家们的完成的任务和技能都会对首领造成伤害。\n\n你可以像平时那样完成探索任务。你完成的任务和技能会被算入世界级首领以及你队伍首领的进度当中。\n\n世界级首领并不会伤害你以及你的账户。它会有一个愤怒值,取决于用户跳过的每日任务。如果愤怒值满了,它会攻击一个NPC并使这个NPC的形象产生永久性改变。\n\n你可以获知更多关于过去的[世界级首领的信息]。\n请参阅(http://habitica.wikia.com/wiki/World_Bosses) ", + "webFaqAnswer12": "世界级首领是出现在酒馆的特殊怪物。所有活跃的玩家都会自动参与首领战,玩家们的完成的任务和技能都会对首领造成伤害。\n

\n你可以像平时那样完成探索任务。你完成的任务和技能会被算入世界级首领以及你队伍首领的进度当中。\n

\n世界级首领并不会伤害你以及你的账户。它会有一个愤怒值,取决于用户跳过的每日任务。如果愤怒值满了,它会攻击一个NPC并使这个NPC的形象产生永久性改变。\n

\n你可以获知更多关于过去的[世界级首领的信息]。\n请参阅(http://habitica.wikia.com/wiki/World_Bosses) ", + "iosFaqStillNeedHelp": "如果你的问题没有在这里被列出来,可以到 目录 > 酒馆下的酒馆聊天来询问!我们很乐意帮忙。", + "webFaqStillNeedHelp": "如果你的问题没有在这里被列出来,可以到 [新手工会] (https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a) 来咨询!我们很乐意帮忙。" } \ No newline at end of file diff --git a/common/locales/zh/front.json b/common/locales/zh/front.json index 5fa654db02..bdc2a3ce0c 100644 --- a/common/locales/zh/front.json +++ b/common/locales/zh/front.json @@ -2,17 +2,17 @@ "FAQ": "常问问题", "accept1Terms": "我同意接受", "accept2Terms": "和", - "alexandraQuote": "Couldn't NOT talk about [Habitica] during my speech in Madrid. Must-have tool for freelancers who still need a boss.", - "althaireQuote": "Having a quest constantly on really motivates me to do all my dailies and do all my to-dos. My biggest motivation is not letting my party down.", - "andeeliaoQuote": "Awesome product, just started a few days ago and already more conscious and productive with my time!", - "autumnesquirrelQuote": "I'm procrastinating less on work and housework and pay bills on time.", - "businessSample1": "Confirm 1 page of Inventory", + "alexandraQuote": "忍不住在马德里做演讲时提到了[Habitica],对依然需要一个老板管着的自由职业者来说,这个你必须拥有。", + "althaireQuote": "持续地去完成任务真的能鼓励我去完成我每天要做的事和其他所有待办事项,激励我最多的是我不能辜负我的战友。", + "andeeliaoQuote": "超赞的东西,前几天刚开始尝试,现在已经让我的生活变得更加充实丰富!", + "autumnesquirrelQuote": "我在工作,做家务,付账单的时候已经不那么拖延症了。", + "businessSample1": "确认1页库存清单", "businessSample2": "20分钟的文档整理", "businessSample3": "整理收件箱", - "businessSample4": "Prepare 1 Document for Client", - "businessSample5": "Call Clients/Put Off Phone Calls", - "businessText": "Use Habitica at your business", - "choreSample1": "Put Dirty Clothes in Hamper", + "businessSample4": "替委托人准备1页文件", + "businessSample5": "给客户打电话/推迟电话", + "businessText": "在工作中利用Habitica", + "choreSample1": "把脏衣服丢进洗衣篮里去", "choreSample2": "20分钟的家务", "choreSample3": "洗了大量的餐具", "choreSample4": "整理房间", @@ -32,69 +32,69 @@ "companyPrivacy": "隐私", "companyTerms": "条款", "companyVideos": "视频", - "contribUse": "Habitica contributors use", - "dragonsilverQuote": "I can't tell you how many time and task tracking systems I've tried over the decades... [Habitica] is the only thing I've used that actually helps me get things done rather than just list them.", - "dreimQuote": "When I discovered [Habitica] last summer, I had just failed about half of my exams. Thanks to the Dailies... I was able to organize and discipline myself, and I actually passed all my exams with really good grades a month ago.", - "elmiQuote": "Every morning I'm looking forward to getting up so I can earn some gold!", + "contribUse": "Habitica贡献者们使用", + "dragonsilverQuote": "我简直数不清这几十年来我试过多少任务追踪系统,[Habitica]是唯一一个帮助我真正做好事情,而不仅仅是把他们列个单子的。", + "dreimQuote": "当我去年夏天发现[Habitica]的时候,我刚挂掉了我一半的课程。感谢日常任务……我能够管住我自己了,还顺利在上个月高分通过了我所有的考试。", + "elmiQuote": "每个早上我都盼着醒过来,这样我就能赚到更多金币!", "email": "邮箱", "emailNewPass": "把新密码发到我的邮箱", - "evagantzQuote": "My very first dentist appointment where the hygienist was actually excited about my flossing habits. Thanks [Habitica]!", - "examplesHeading": "Players use Habitica to manage...", + "evagantzQuote": "在我和牙医第一次见面时,他对我用牙线洁牙的习惯高兴极了,谢谢了[Habitica]!", + "examplesHeading": "玩家们用Habitica来管理……", "featureAchievementByline": "想做一件非常棒的事情吗?炫耀一下得到的徽章吧!", "featureAchievementHeading": "成就徽章", "featureEquipByline": "在商店用你的任务奖励去购买限量的装备,药水和其他的虚拟物品吧!", "featureEquipHeading": "装备和其他", - "featurePetByline": "Eggs and items drop when you complete your tasks. Be as productive as possible to collect pets and mounts!", + "featurePetByline": "完成你的任务时就可以收到掉落的宠物蛋或道具,尽可能勤快地完成任务,去收集宠物和坐骑!", "featurePetHeading": "宠物和坐骑", - "featureSocialByline": "Join common-interest groups with like-minded people. Create Challenges to compete against other users.", - "featureSocialHeading": "Social play", - "featuredIn": "Featured in", - "featuresHeading": "We also feature...", + "featureSocialByline": "加入志同道合的伙伴们,设立挑战来互相竞赛。", + "featureSocialHeading": "多人游戏", + "featuredIn": "特别提供", + "featuresHeading": "我们还有这些特别的……", "footerCommunity": "社区", "footerCompany": "公司", "footerMobile": "手机版", "footerSocial": "社交", "forgotPass": "找回密码", - "frabjabulousQuote": "[Habitica] is the reason I got a killer, high-paying job... and even more miraculous, I'm now a daily flosser!", + "frabjabulousQuote": "[Habitica]是我能够找到一个强大的高收入工作的原因……更神奇的是,我现在还每天洁牙!", "free": "免费加入", - "gamifyButton": "Gamify your life today!", + "gamifyButton": "生活即游戏!", "goalSample1": "练习钢琴1小时", - "goalSample2": "Work on article for publication", - "goalSample3": "Work on blog post", - "goalSample4": "Japanese lesson on Duolingo", + "goalSample2": "写要发表的文章", + "goalSample3": "创作博客文章", + "goalSample4": "Duolingo上的日语课程", "goalSample5": "阅读一篇论文", "goals": "目标", - "health": "生命值", + "health": "健康", "healthSample1": "喝矿泉水/汽水", - "healthSample2": "口香糖/香烟", - "healthSample3": "Take Stairs/Elevator", + "healthSample2": "嚼口香糖/抽烟", + "healthSample3": "走楼梯/乘电梯", "healthSample4": "吃健康食品/吃垃圾食品", "healthSample5": "锻炼到出汗1小时", "history": "历史", - "infhQuote": "[Habitica] has really helped me impart structure to my life in graduate school.", + "infhQuote": "[Habitica]真的帮了我,让我把研究生生活整理得井井有条。", "invalidEmail": "执行密码重置需要一个有效的电子邮件地址。", - "irishfeet123Quote": "I've had horrible habits with clearing my place completely after meals and leaving cups all over the place. [Habitica] has cured that!", - "joinOthers": "Join 250,000 people making it fun to achieve goals!", - "kazuiQuote": "Before [Habitica], I was stuck with my thesis, as well as dissatisfied with my personal discipline regarding housework and things like learning vocabulary and studying Go theory. It turns out breaking down these tasks into smaller manageable checklists is quite the thing to keep me motivated and constantly working.", + "irishfeet123Quote": "我曾经习惯很烂,在吃饭之后不好好收拾,茶杯放得到处都是, [Habitica]解决了这个问题!", + "joinOthers": "加入 <%= userCount %> 个玩家的队伍,让完成任务变得有趣!", + "kazuiQuote": "加入[Habitica]之前,我的毕业论文卡住了,对我自己做家务,背单词和学习下棋的态度也很不满意。最后我发现,把这些任务拆分成可以管理的小待办事项是能让我保持动力和持续学习的最好办法。", "landingadminlink": "管理包", "landingend": "还没被说服?", "landingend2": "来看一些详细的", "landingend3": "希望找一个更私密的方式?看一下我们的", "landingend4": "它更适合家庭,老师,团体和商业活动。", "landingfeatureslink": "功能", - "landingp1": "The problem with most productivity apps on the market is that they provide no incentive to continue using them. Habitica fixes this by making habit building fun! By rewarding you for your successes and penalizing you for slip-ups, Habitica provides external motivation for completing your day-to-day activities.", + "landingp1": "市场上大多数生产力管理的应用最大的问题在于,它们缺乏让人们保持使用的动力。Habitica克服了这点,把好习惯塑造变成了一件非常有趣的事情!为自己的成功奖励自己,为自己的懒惰惩罚自己,Habitica为完成你的每日任务带来了超多动力。", "landingp2": "当你坚持一个好习惯,完成一个日常任务,或清除一个旧的待办事项,Habitica马上用经验和金币奖励你。你获得经验后会升级,增加属性并解锁更多功能,例如职业和宠物。金币可以用来购买提升经验的物品,或你创建的个人奖励。即便是最小的成功也会立刻给你奖励,使你变得不那么拖延。", - "landingp2header": "激励", - "landingp3": "Whenever you indulge in a bad habit or fail to complete one of your daily tasks, you lose health. If your health drops too low, you lose some of the progress you've made. By providing immediate consequences, Habitica can help break bad habits and procrastination cycles before they cause real-world problems.", + "landingp2header": "即时激励", + "landingp3": "一旦你沉溺于坏习惯,或者忘记完成你的某个每日任务,你就会掉血。如果你的健康值太低,你就会丢失一些你之前完成的进度。通过提供即时奖励,Habitica能够在你的坏习惯和拖延症伤害到你之前,帮你克服它们。", "landingp3header": "后果", - "landingp4": "With an active community, Habitica provides the accountability you need to stay on task. With the party system, you can bring in a group of your closest friends to cheer you on. The guild system allows you to find people with similar interests or obstacles, so you can share your goals and swap tips on how to tackle your problems. In Habitica, the community means that you have both the support and the accountability you need to succeed.", + "landingp4": "Habitica的活跃在线社区是你保持任务进展的可靠保证。通过战队系统,你可以邀请一群你最好的朋友来为你加油。公会系统则能帮你找到与你志同道合的战友,让你们分享经验,共享成果。在Habitica,在线社区同时提供你所需要的支持,和你走向成功所需要的坚强后盾。", "landingp4header": "责任感", - "leadText": "Habitica is a free habit building and productivity app that treats your real life like a game. With in-game rewards and punishments to motivate you and a strong social network to inspire you, Habitica can help you achieve your goals to become healthy, hard-working, and happy.", + "leadText": "Habitica是一个免费的习惯养成及生产力应用,让你“游戏人生”。游戏里的奖惩措施能激励你完成任务,还有一个强大的互动社区给你完成任务的好建议。Habitica能够帮助你达成目标,变得健康,勤奋,快乐。", "login": "登录", "loginAndReg": "登录/登记", "loginFacebookAlt": "用FB登录/登记", "logout": "登出", - "marketing1Header": "通过玩游戏改善你的生活", + "marketing1Header": "玩好游戏,过好生活", "marketing1Lead1": "Habitica是一个帮助你改变生活习惯的游戏。他通过把你的所有任务(习惯,日常任务和待办事项) 转变成你需要打败的敌人来“游戏化”你的生活。你做的越好,你在游戏进展得越顺利。如果你生活中除了差错,你的角色在游戏中也会退步。", "marketing1Lead2": "获取装备。改善你的习惯来武装你的角色。拿你的装备向朋友们炫耀吧", "marketing1Lead2Title": "获取装备", @@ -107,9 +107,9 @@ "marketing2Lead3": "挑战 让你同你的朋友或其他人竞争。挑战的获胜者会赢得特殊的奖励。", "marketing3Header": "应用程式", "marketing3Lead1": "iPhone 和 安卓 应用程式可以让你外出时也能处理你的习惯。我们明白有时要登录网站点点按钮可能会成为一个负担。", - "marketing3Lead2": "Other 3rd Party Tools tie Habitica into various aspects of your life. Our API provides easy integration for things like the Chrome Extension, for which you lose points when browsing unproductive websites, and gain points when on productive ones. See more here", + "marketing3Lead2": "其他第3方工具能够把Habitica和你生活中的不同方面联系起来。我们的API提供各种便捷的结合通道比如Chrome扩展,当你浏览浪费时间的网站时会克扣点数,反之则增加经验。点击这里查看更多", "marketing4Header": "组织使用", - "marketing4Lead1": "Education is one of the best sectors for gamification. We all know how glued to phones and games students are these days; harness that power! Pit your students against eachother in friendly competition. Reward good behavior with rare prizes. Watch their grades and behavior soar.", + "marketing4Lead1": "教育是游戏化最适合的领域。我们都知道最近学生们多么热衷于手机和游戏,利用这种力量!给你的学生引入良性竞争。用稀有奖励奖赏那些好的行为。等着看他们的成绩和表现腾飞吧。", "marketing4Lead1Title": "教育游戏化", "marketing4Lead2": "医疗保健的花销越来越高,是时候做出一些改变了。虽然有数以百计的用来改善健康的程序,我们相信Habitica可以从本质上帮助你走向更健康的生活方式。", "marketing4Lead2Title": "健康游戏化", @@ -118,10 +118,10 @@ "marketing4Lead3-3": "希望学到更多?", "marketing4Lead3Title": "游戏化任何事情", "mobileAndroid": "安卓", - "mobileIOS": "iOS", - "motivate": "Motivate yourself and your team!", - "motivate1": "Motivate yourself to do anything.", - "motivate2": "Get Organized. Get Motivated. Get Gold.", + "mobileIOS": "IOS", + "motivate": "鼓励自己,鼓励战友!", + "motivate1": "鼓励自己去做任何事情。", + "motivate2": "培养条理,收获动力,赢取金币!", "passConfirm": "确认密码", "passMan": "如果你用密码管理工具 (如 1Password) 登录出现问题,尝试手动用用户名密码登录。", "password": "密码", @@ -129,55 +129,64 @@ "playButtonFull": "玩Habitica游戏", "presskit": "资料包", "presskitDownload": "下载图片", - "presskitText": "Thanks for your interest in Habitica! The following images can be used for articles or videos about Habitica. For more information, please contact Siena Leslie at leslie@habitica.com.", + "presskitText": "感谢您对Habitica的大力支持!下面的图片可以用来制作有关Habitica的文章或视频,详情请联系Siena Leslie:leslie@habitica.com。", "privacy": "隐私政策", "psst": "嘘!", - "punishByline": "Break bad habits and procrastination cycles with immediate consequences.", + "punishByline": "用即时奖励打败坏习惯和强迫症。", "punishHeading1": "错过了日常任务?", "punishHeading2": "失去生命值", - "questByline1": "Playing with your friends keeps you accountable for your tasks.", - "questByline2": "Issue each other Challenges to complete a goal together!", - "questHeading1": "Battle monsters with your friends!", - "questHeading2": "If you slack off, they all get hurt!", + "questByline1": "和朋友一起玩,督促自己完成任务。", + "questByline2": "各自接受挑战,一起达成目标!", + "questHeading1": "与朋友一起大战怪兽!", + "questHeading2": "你的懒惰会伤及伙伴!", "register": "注册", - "rewardByline1": "Spend gold on virtual and real-life rewards.", - "rewardByline2": "Instant rewards keep you motivated!", - "rewardHeading": "Complete a task to earn gold!", - "sampleDailies": "Sample Dailies", - "sampleHabits": "Sample Habits", + "rewardByline1": "为虚拟和真实的奖励花点金币。", + "rewardByline2": "即时奖励,给你持续动力!", + "rewardHeading": "达成目标,就能赚取金币!", + "sampleDailies": "每日任务示例", + "sampleHabits": "习惯培养示例", "sampleToDo": "待办的例子", "school": "学校", "schoolSample1": "完成1项作业", "schoolSample2": "学习1小时", - "schoolSample3": "Meet with Study Group", - "schoolSample4": "Notes for 1 Chapter", + "schoolSample3": "和学习小组碰头", + "schoolSample4": "第1章的注释", "schoolSample5": "读1个章节", - "sixteenBitFilQuote": "I'm getting my jobs and tasks done in record time thanks to [Habitica]. I'm just always so eager to reach my next level-up!", - "skysailorQuote": "My party and our quests keep me engaged in the game, which keeps me motivated to get things done and change my life in positive ways", + "sixteenBitFilQuote": "多亏 [Habitica],现在我的工作和任务都能及时完成了。我太盼望升到下一级了!", + "skysailorQuote": "我的队伍和我们的任务让我沉浸在这个游戏里,时刻激励我去做完自己的事情,改善自己的生活", "socialTitle": "Habitica - 游戏化你的生活", - "supermouse35Quote": "I'm exercising more and I haven't forgotten to take my meds for months! Thanks, Habit. :D", + "supermouse35Quote": "我锻炼的更多了,而且已经连续几个月没有忘记体检了!谢了,Habit:D", "sync": "同步", "tasks": "任务", - "teamSample1": "Outline Meeting Itinerary for Tuesday", - "teamSample2": "Brainstorm Growth Hacking", - "teamSample3": "Discuss this week's KPIs", + "teamSample1": "计划星期二的会议日程", + "teamSample2": "Growth Hacking头脑风暴", + "teamSample3": "讨论本周的KPI", "teams": "团队", "terms": "使用条款", - "testimonialHeading": "What people say...", + "testimonialHeading": "看看大家怎么说……", "tutorials": "教程", - "unlockByline1": "Achieve your goals and level up.", - "unlockByline2": "Unlock new motivational tools, such as pet collecting, random rewards, spell-casting, and more!", + "unlockByline1": "完成目标,提升等级。", + "unlockByline2": "解锁新的激励机制,比如收集宠物,随机奖励,施放魔法,还有更多!", "unlockHeadline": "当你保持生产,你会解锁新内容哦!", "useUUID": "用户ID / API令牌 (面向 Facebook 用户)", "username": "用户名", "watchVideos": "观看视频", "work": "工作", - "zelahQuote": "With [Habitica], I can be persuaded to go to bed on time by the thought of gaining points for an early night or losing health for a late one!", - "reportAccountProblems": "Report Account Problems", - "reportCommunityIssues": "Report Community Issues", - "generalQuestionsSite": "General Questions about the Site", - "businessInquiries": "Business Inquiries", - "merchandiseInquiries": "Merchandise Inquiries", - "marketingInquiries": "Marketing/Social Media Inquiries", - "tweet": "Tweet" + "zelahQuote": "因为 [Habitica] 的帮助,我能够准时上床休息了,因为我老想着早睡能挣经验,晚睡会掉血!", + "reportAccountProblems": "报告账户问题", + "reportCommunityIssues": "报告社区问题", + "generalQuestionsSite": "关于本站的常见问题", + "businessInquiries": "业务咨询", + "merchandiseInquiries": "商业咨询", + "marketingInquiries": "市场营销/媒体咨询", + "tweet": "发布推特", + "apps": "手机应用", + "notifyAndroidApp": "希望我们在安卓应用发布时通知你吗?注册这个邮件通知!", + "checkOutIOSApp": "看看我们的新IOS应用!", + "imagine1": "想想,像玩游戏一样改善你的生活", + "landingCopy1": "通过在现实生活中完达成目标在游戏中升级。", + "landingCopy2": "和朋友一起和怪兽战斗,督促自己完成任务。", + "landingCopy3": "加入超过 <%= userCount %> 名玩家的队伍,用力玩用力生活。", + "alreadyHaveAccount": "我有一个账号了!", + "getStartedNow": "现在就开始!" } \ No newline at end of file diff --git a/common/locales/zh/gear.json b/common/locales/zh/gear.json index be9e5686e2..c7459b1f95 100644 --- a/common/locales/zh/gear.json +++ b/common/locales/zh/gear.json @@ -68,8 +68,8 @@ "weaponSpecial3Notes": "怪物统统捣烂!增加力量,智力,体质各<%= attrs %>点。", "weaponSpecialCriticalText": "碾碎臭虫的批判战锤", "weaponSpecialCriticalNotes": "这位勇士杀死了一个使无数战士陨落的吹毛求疵的 Github 敌人。这把战锤由臭虫的骨头打造,能造成强大的致命一击。增加力量和感知各<%= attrs %>点。", - "weaponSpecialTridentOfCrashingTidesText": "Trident of Crashing Tides", - "weaponSpecialTridentOfCrashingTidesNotes": "Gives you the ability to command fish, and also deliver some mighty stabs to your tasks. Increases Intelligence by <%= int %>.", + "weaponSpecialTridentOfCrashingTidesText": "怒潮三叉戟", + "weaponSpecialTridentOfCrashingTidesNotes": "赐予你给鱼下命令的本领, 还能有力刺激你完成任务。.增加 <%= int %> 点智力。", "weaponSpecialYetiText": "雪人驯化矛", "weaponSpecialYetiNotes": "雪人驯化矛允许它的玩家指挥任何雪人。增加<%= str %>力量。2013-2014冬季装备限量版。", "weaponSpecialSkiText": "滑雪刺客杖", @@ -87,7 +87,7 @@ "weaponSpecialSpringHealerText": "可爱的骨头", "weaponSpecialSpringHealerNotes": "拿来!增加<%= int %>点智力。2014年春季限量版装备。", "weaponSpecialSummerRogueText": "海盗弯刀", - "weaponSpecialSummerRogueNotes": "Avast! You'll make those Dailies walk the plank! Increases Strength by <%= str %>. Limited Edition 2014 Summer Gear.", + "weaponSpecialSummerRogueNotes": "停止吧!你会让那些日常任务自取灭亡!增强力量 <%= str %> 点。限量版2014夏季装备。", "weaponSpecialSummerWarriorText": "航海片刀", "weaponSpecialSummerWarriorNotes": "沒有任何待办事项中的任务愿意与这把粗糙的刀纠缠!增加<%= str %>点力量。限量版2014夏季装备。", "weaponSpecialSummerMageText": "海带捕捉器", @@ -115,47 +115,53 @@ "weaponSpecialSpring2015WarriorText": "骨棒", "weaponSpecialSpring2015WarriorNotes": "这是为真正凶猛的狗狗们准备的真正的骨棒,绝对不是那种季节魔女给你的咀嚼玩具!乖狗狗是谁?谁~~~是乖狗狗呀??就是你呀!!你是只乖狗狗哦!!!提高 <%= str %>点力量。2015春季限定版装备。", "weaponSpecialSpring2015MageText": "魔法师魔杖", - "weaponSpecialSpring2015MageNotes": "Conjure up a carrot for yourself with this fancy wand. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2015 Spring Gear.", + "weaponSpecialSpring2015MageNotes": "可以用这支魔杖召唤一个属于你自己的迷人胡萝卜。提高 <%= int %> 点智力和 <%= per %> 点感知。2015春季限定版装备。", "weaponSpecialSpring2015HealerText": "猫咪拨浪鼓", "weaponSpecialSpring2015HealerNotes": "当你摇动这只拨浪鼓,它会发出叮当声,让所有人保持愉悦好几小时。提高<%= int %>点智力。2015春季限定版装备。", "weaponSpecialSummer2015RogueText": "炽烈珊瑚", "weaponSpecialSummer2015RogueNotes": "这个是烈焰珊瑚的分支装备,它拥有在水中散播毒液的能力。提高<%= str %>点力量。2015年夏季限量装备", - "weaponSpecialSummer2015WarriorText": "Sun Swordfish", - "weaponSpecialSummer2015WarriorNotes": "The Sun Swordfish is a fearsome weapon, provided that it can be induced to stop wriggling. Increases Strength by <%= str %>. Limited Edition 2015 Summer Gear.", - "weaponSpecialSummer2015MageText": "Soothsayer Staff", - "weaponSpecialSummer2015MageNotes": "Hidden power glimmers in the jewels of this staff. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2015 Summer Gear.", - "weaponSpecialSummer2015HealerText": "Wand of the Waves", - "weaponSpecialSummer2015HealerNotes": "Cures seasickness and sea sickness! Increases Intelligence by <%= int %>. Limited Edition 2015 Summer Gear.", - "weaponSpecialFall2015RogueText": "Bat-tle Ax", - "weaponSpecialFall2015RogueNotes": "Fearsome To-Dos cower before the flapping of this ax. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "weaponSpecialFall2015WarriorText": "Wooden Plank", - "weaponSpecialFall2015WarriorNotes": "Great for elevating things in cornfields and/or smacking tasks. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "weaponSpecialFall2015MageText": "Enchanted Thread", - "weaponSpecialFall2015MageNotes": "A powerful Stitch Witch can control this enchanted thread without even touching it! Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "weaponSpecialFall2015HealerText": "Swamp-Slime Potion", - "weaponSpecialFall2015HealerNotes": "Brewed to perfection! Now you just have to convince yourself to drink it. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", + "weaponSpecialSummer2015WarriorText": "日剑鱼", + "weaponSpecialSummer2015WarriorNotes": "日光剑鱼是一个可怕的武器,如果能让它不要再扭来扭去的话。增加 <%= str %>点力量。2015年秋季限量版装备。", + "weaponSpecialSummer2015MageText": "轻语者之杖", + "weaponSpecialSummer2015MageNotes": "在这柄法杖上的宝石里隐隐可见隐藏着的力量在闪耀。增加<%= int %>点智力和 <%= per %>点感知。限量版2015年夏季装备。", + "weaponSpecialSummer2015HealerText": "涛之魔杖", + "weaponSpecialSummer2015HealerNotes": "治疗晕船,和船晕!增加 <%= int %> 点智力。2015年夏天限量版装备。", + "weaponSpecialFall2015RogueText": "战蝠", + "weaponSpecialFall2015RogueNotes": "那些令人生畏的待办事项都在这把神斧的挥砍之下瑟瑟发抖。增加<%= str %>点力量。2015年秋季限量版装备。", + "weaponSpecialFall2015WarriorText": "木板", + "weaponSpecialFall2015WarriorNotes": "用来在玉米地里架起东西以及干掉任务的话会很趁手。增加<%= str %>点力量。2015年秋季限量版装备。", + "weaponSpecialFall2015MageText": "魔法缝纫针", + "weaponSpecialFall2015MageNotes": "一位强大的缝纫女巫不用碰这根魔法阵就能控制它!增加<%= int %>点智力和<%= per %>点感知。2015年秋季限量版装备。", + "weaponSpecialFall2015HealerText": "沼泽史莱姆药剂", + "weaponSpecialFall2015HealerNotes": "完美调配!只要说服自己喝下去就行了。增加<%= int %>点智力。2015年秋季限量版装备。", "weaponMystery201411Text": "盛宴之叉", "weaponMystery201411Notes": "刺伤你的仇敌或是插进你最爱的食物——这把多才多艺的叉子可是无所不能!没有属性加成。2014年11月捐助者物品。", "weaponMystery201502Text": "爱与真理之微光翅膀法杖", "weaponMystery201502Notes": "为了翅膀!为了爱!也为了真理!没有属性加成。2015年2月捐赠者物品。", - "weaponMystery201505Text": "Green Knight Lance", - "weaponMystery201505Notes": "This green and silver lance has unseated many opponents from their mounts. Confers no benefit. May 2015 Subscriber Item.", + "weaponMystery201505Text": "绿色骑士长矛", + "weaponMystery201505Notes": "这柄银绿相间的长枪已经将许多强敌打落马下。无属性加成。2015年5月网站订阅者物品。", "weaponMystery301404Text": "蒸汽朋克手杖", "weaponMystery301404Notes": "特别适合在城里散步。3015年3月订阅者物品。没有属性加成。", - "weaponArmoireBasicCrossbowText": "Basic Crossbow", - "weaponArmoireBasicCrossbowNotes": "This crossbow can pierce a task's armor from very far away! Increases Strength by <%= str %>, Perception by <%= per %>, and Constitution by <%= con %>. Enchanted Armoire: Independent Item.", - "weaponArmoireLunarSceptreText": "Soothing Lunar Sceptre", - "weaponArmoireLunarSceptreNotes": "The healing power of this wand waxes and wanes. Increases Constitution by <%= con %> and Intelligence by <%= int %>. Enchanted Armoire: Soothing Lunar Set (Item 3 of 3).", - "weaponArmoireRancherLassoText": "Rancher Lasso", + "weaponArmoireBasicCrossbowText": "基本款弩", + "weaponArmoireBasicCrossbowNotes": "这副十字弓可以在很远的距离刺穿一个任务的盔甲!增加<%= str %>点力量,<%= per %>点感知和<%= con %>点体质。", + "weaponArmoireLunarSceptreText": "圆月弯镰", + "weaponArmoireLunarSceptreNotes": "这把魔杖的治愈之力时隐时现。增加<%= con %>点体质和<%= int %>点智力。魔法衣橱:治愈之月套装(第3件物品)。", + "weaponArmoireRancherLassoText": "牧场用套索", "weaponArmoireRancherLassoNotes": "Lassos: the ideal tool for rounding up and wrangling. Increases Strength by <%= str %>, Perception by <%= per %>, and Intelligence by <%= int %>. Enchanted Armoire: Rancher Set (Item 3 of 3).", - "weaponArmoireMythmakerSwordText": "Mythmaker Sword", - "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3)", - "weaponArmoireIronCrookText": "Iron Crook", - "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3)", - "weaponArmoireGoldWingStaffText": "Gold Wing Staff", + "weaponArmoireMythmakerSwordText": "创神者之剑", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", + "weaponArmoireIronCrookText": "钢铁手杖", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", + "weaponArmoireGoldWingStaffText": "金翅法仗", "weaponArmoireGoldWingStaffNotes": "The wings on this staff constantly flutter and twist. Increases all attributes by <%= attrs %> each. Enchanted Armoire: Independent Item.", - "weaponArmoireBatWandText": "Bat Wand", + "weaponArmoireBatWandText": "蝙蝠法仗", "weaponArmoireBatWandNotes": "This wand can turn any task into a bat! Wave it about and watch them fly away. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireShepherdsCrookText": "Shepherd's Crook", + "weaponArmoireShepherdsCrookNotes": "Useful for herding gryphons. Increases Constitution by <%= con %>. Enchanted Armoire: Shepherd Set (Item 1 of 3).", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "护甲", "armorBase0Text": "普通服装", "armorBase0Notes": "普通的衣服。 没有属性加成。", @@ -205,8 +211,8 @@ "armorSpecial1Notes": "它不竭的力量能使佩戴者适应一般的不适。全部属性增加<%= attrs %>点。", "armorSpecial2Text": "珍·沙拉德的贵族束腰外衣", "armorSpecial2Notes": "让你更加毛茸茸!体质与智力各加<%= attrs %>。", - "armorSpecialFinnedOceanicArmorText": "Finned Oceanic Armor", - "armorSpecialFinnedOceanicArmorNotes": "Although delicate, this armor makes your skin as harmful to the touch as a fire coral. Increases Strength by <%= str %>.", + "armorSpecialFinnedOceanicArmorText": "海鳞衣", + "armorSpecialFinnedOceanicArmorNotes": "尽管看上去精致漂亮,这件护甲让你变得像火焰珊瑚一样碰不得。增加<%= str %>点力量。", "armorSpecialYetiText": "野人驯化长袍", "armorSpecialYetiNotes": "模糊和激烈。增加<%= con %>点体质。2013-2014冬季限量版装备。", "armorSpecialSkiText": "雪橇刺客大衣", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "愚蠢的派对长袍", "armorSpecialBirthday2015Notes": "生日快乐,Habitica!穿上这些愚蠢的派对长袍去庆祝美妙的一天,没有属性加成。", "armorSpecialGaymerxText": "彩虹战士护甲", - "armorSpecialGaymerxNotes": "这件特殊的护甲装饰着五彩斑斓的彩虹图案,是为纪念自豪季和GaymerX而生!GaymerX是一个游戏大会庆祝LGBTQ和游戏并对每个人开放。它举办于旧金山中心的洲际酒店,时间是7月11-13日!没有属性加成。", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "圆滑猫套装", "armorSpecialSpringRogueNotes": "无可挑剔的整洁。增加<%= per %>点感知。限量版2014年春季装备。", "armorSpecialSpringWarriorText": "四叶草钢护甲", @@ -261,18 +267,18 @@ "armorSpecialSpring2015MageNotes": "你的燕尾服尾巴很配你的棉尾巴哦!提高<%= int %>点智力。2015春季限定版装备。", "armorSpecialSpring2015HealerText": "抚慰连衣裤", "armorSpecialSpring2015HealerNotes": "这条柔软的连衣裤非常舒适,就像薄荷茶一样抚慰人心。提高<%= con %>点体质。2015春季限定版装备。", - "armorSpecialSummer2015RogueText": "Ruby Tail", + "armorSpecialSummer2015RogueText": "红宝石尾", "armorSpecialSummer2015RogueNotes": "This garment of shimmering scales transforms its wearer into a real Reef Renegade! Increases Perception by <%= per %>. Limited Edition 2015 Summer Gear.", - "armorSpecialSummer2015WarriorText": "Golden Tail", + "armorSpecialSummer2015WarriorText": "黄金尾巴", "armorSpecialSummer2015WarriorNotes": "This garment of shimmering scales transforms its wearer into a real Sunfish Warrior! Increases Constitution by <%= con %>. Limited Edition 2015 Summer Gear.", "armorSpecialSummer2015MageText": "Soothsayer Robes", "armorSpecialSummer2015MageNotes": "Hidden power resides in the puffs of these sleeves. Increases Intelligence by <%= int %>. Limited Edition 2015 Summer Gear.", - "armorSpecialSummer2015HealerText": "Sailor's Armor", - "armorSpecialSummer2015HealerNotes": "This armor lets everyone know that you are an honest merchant sailor who would never dream of behaving like a scalawag. Increases Constitution by <%= con %>. Limited Edition 2015 Summer Gear.", - "armorSpecialFall2015RogueText": "Bat-tle Armor", - "armorSpecialFall2015RogueNotes": "Fly into bat-tle! Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "armorSpecialFall2015WarriorText": "Scarecrow Armor", - "armorSpecialFall2015WarriorNotes": "Despite being stuffed with straw, this armor is extremely hefty! Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", + "armorSpecialSummer2015HealerText": "水手的护甲", + "armorSpecialSummer2015HealerNotes": "穿上这件护甲,大家都会知道你是一位城市的航海家,绝对不会跟流氓一样。增加<%= con %>点体质。2015年夏季限量版装备。", + "armorSpecialFall2015RogueText": "战蝠护甲", + "armorSpecialFall2015RogueNotes": "飞起来,变成蝙蝠!增加<%= per %>点感知。2015年秋季限量版装备。", + "armorSpecialFall2015WarriorText": "稻草人的外装", + "armorSpecialFall2015WarriorNotes": "除了塞满了稻草之外,这件护甲还特别沉重!增加<%= con %>点体质。2015年秋季限量版装备。", "armorSpecialFall2015MageText": "Stitched Robes", "armorSpecialFall2015MageNotes": "Every stitch in this armor shimmers with enchantment. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", "armorSpecialFall2015HealerText": "Potioner Robes", @@ -307,6 +313,8 @@ "armorMystery201508Notes": "Run fast as a flash in the fluffy Cheetah Costume! Confers no benefit. August 2015 Subscriber Item.", "armorMystery201509Text": "Werewolf Costume", "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "蒸汽朋克套装", "armorMystery301404Notes": "整洁又精神,真聪明!没有属性加成。2015年1月订阅者物品", "armorArmoireLunarArmorText": "Soothing Lunar Armor", @@ -321,6 +329,12 @@ "armorArmoireHornedIronArmorNotes": "Fiercely hammered from iron, this horned armor is nearly impossible to break. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Horned Iron Set (Item 2 of 3).", "armorArmoirePlagueDoctorOvercoatText": "Plague Doctor Overcoat", "armorArmoirePlagueDoctorOvercoatNotes": "An authentic overcoat worn by the doctors who battle the Plague of Procrastination! Increases Intelligence by <%= int %>, Strength by <%= str %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 3 of 3).", + "armorArmoireShepherdRobesText": "Shepherd Robes", + "armorArmoireShepherdRobesNotes": "The fabric is cool and breathable, perfect for a hot day herding gryphons in the desert. Increases Strength and Perception by <%= attrs %> each. Enchanted Armoire: Shepherd Set (Item 2 of 3).", + "armorArmoireRoyalRobesText": "Royal Robes", + "armorArmoireRoyalRobesNotes": "Wonderful ruler, rule all day long! Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Royal Set (Item 3 of 3).", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "头饰", "headBase0Text": "没有头盔", "headBase0Notes": "没有头饰", @@ -441,7 +455,7 @@ "headSpecialFall2015HealerText": "Hat of Frog", "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", "headSpecialGaymerxText": "彩虹战士头盔", - "headSpecialGaymerxNotes": "这顶由五光十色的镭射彩虹图案装饰的帽子是为了庆祝骄傲时节和GaymerX!GaymerX是一个向所有人开放的庆祝LGBTQ并尽情玩乐的游戏大会。7月11-13日在旧金山市中心洲际饭店举行!没有属性加成。", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "翼盔", "headMystery201402Notes": "这顶带翅膀的饰环使佩戴者风驰电掣!没有属性加成。2014年2月捐赠者物品。", "headMystery201405Text": "精神之焰", @@ -464,6 +478,8 @@ "headMystery201508Notes": "This cozy cheetah hat is very fuzzy! Confers no benefit. August 2015 Subscriber Item.", "headMystery201509Text": "Werewolf Mask", "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 Subscriber Item.", "headMystery301404Text": "华丽礼帽", "headMystery301404Notes": "上流社会佼佼者的华丽礼帽!3015年1月捐赠者物品。没有属性加成。", "headMystery301405Text": "基础礼帽", @@ -481,7 +497,7 @@ "headArmoireBlueHairbowText": "Blue Hairbow", "headArmoireBlueHairbowNotes": "Become perceptive, tough, and smart while wearing this beautiful Blue Hairbow! Increases Perception by <%= per %>, Constitution by <%= con %>, and Intelligence by <%= int %>. Enchanted Armoire: Independent Item.", "headArmoireRoyalCrownText": "Royal Crown", - "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Royal Set (Item 1 of 3).", "headArmoireGoldenLaurelsText": "Golden Laurels", "headArmoireGoldenLaurelsNotes": "These golden laurels reward those who have conquered bad habits. Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 2 of 3).", "headArmoireHornedIronHelmText": "Horned Iron Helm", @@ -496,6 +512,12 @@ "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", "headArmoireOrangeCatText": "Orange Cat Hat", "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireBlueFloppyHatText": "Blue Floppy Hat", + "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireShepherdHeaddressText": "Shepherd Headdress", + "headArmoireShepherdHeaddressNotes": "Sometimes the gryphons that you herd like to chew on this headdress, but it makes you seem more intelligent nonetheless. Increases Intelligence by <%= int %>. Enchanted Armoire: Shepherd Set (Item 3 of 3).", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "副手物品", "shieldBase0Text": "没有副手装备", "shieldBase0Notes": "没有盾牌或副手武器。", @@ -563,23 +585,25 @@ "shieldSpecialSpring2015HealerNotes": "你可以把头靠在这个软软的枕头上,也可以用你可怕的爪子和它玩摔跤。嗷呜!提高<%= con %>点体质。2015春季限定版装备。", "shieldSpecialSummer2015RogueText": "Firing Coral", "shieldSpecialSummer2015RogueNotes": "This relative of fire coral has the ability to propel its venom through the water. Increases Strength by <%= str %>. Limited Edition 2015 Summer Gear.", - "shieldSpecialSummer2015WarriorText": "Sunfish Shield", - "shieldSpecialSummer2015WarriorNotes": "Crafted of deep-ocean metal by the artisans of Dilatory, this shield shines like the sand and the sea. Increases Constitution by <%= con %>. Limited Edition 2015 Summer Gear.", - "shieldSpecialSummer2015HealerText": "Strapping Shield", - "shieldSpecialSummer2015HealerNotes": "Use this shield to bash away bilge rats. Increases Constitution by <%= con %>. Limited Edition 2015 Summer Gear.", - "shieldSpecialFall2015RogueText": "Bat-tle Ax", - "shieldSpecialFall2015RogueNotes": "Fearsome To-Dos cower before the flapping of this ax. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "shieldSpecialFall2015WarriorText": "Birdseed Bag", - "shieldSpecialFall2015WarriorNotes": "It's true that you're supposed to be SCARING the crows, but there's nothing wrong with making friends! Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", - "shieldSpecialFall2015HealerText": "Stirring Stick", - "shieldSpecialFall2015HealerNotes": "This stick can stir anything without melting, dissolving, or bursting into flame! It can also be used to fiercely poke enemy tasks. Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", + "shieldSpecialSummer2015WarriorText": "太阳鱼盾", + "shieldSpecialSummer2015WarriorNotes": "拖延之国的工匠们使用深海金属雕琢而成,这面盾牌看上去像沙滩和大海一样闪光。增加<%= con %>点体质。2015年夏季限量版装备。", + "shieldSpecialSummer2015HealerText": "胶面盾", + "shieldSpecialSummer2015HealerNotes": "用这面盾牌猛砸舱底老鼠。增加<%= con %>点体质。2015年夏季限量版装备。", + "shieldSpecialFall2015RogueText": "战蝠", + "shieldSpecialFall2015RogueNotes": "那些令人生畏的待办事项都在这把神斧的挥砍之下瑟瑟发抖。增加<%= str %>点力量。2015年秋季限量版装备。", + "shieldSpecialFall2015WarriorText": "鸟食小袋", + "shieldSpecialFall2015WarriorNotes": "说好的是来吓唬这些乌鸦的呢,但是交交朋友也没错啊!增加<%= con %>点体质。2015年秋季限量版装备。", + "shieldSpecialFall2015HealerText": "鞭策之杖", + "shieldSpecialFall2015HealerNotes": "用这只手掌能鞭策任何事情,而且不会引起融化,溶解或者点着火之类的事情!还能用来狠狠地戳向你敌人一样的待办任务。增加<%= con %>点体质。2015年秋季限量版装备。", "shieldMystery301405Text": "时钟之盾", "shieldMystery301405Notes": "拥有这块高耸的时钟之盾,时间与你同在!没有属性加成。3015年6月捐赠者物品。", - "shieldArmoireGladiatorShieldText": "Gladiator Shield", - "shieldArmoireGladiatorShieldNotes": "To be a gladiator you must.... eh, whatever, just bash them with your shield. Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Gladiator Set (Item 3 of 3).", - "shieldArmoireMidnightShieldText": "Midnight Shield", - "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", - "back": "Back Accessory", + "shieldArmoireGladiatorShieldText": "角斗士之盾", + "shieldArmoireGladiatorShieldNotes": "作为一名角斗士,你必须……呃,管他了,就用你的盾砸他们就好了。增加<%= con %> 点体质和 <%= str %>点力量。魔法衣橱:角斗士套装(第3件物品)。", + "shieldArmoireMidnightShieldText": "午夜之盾", + "shieldArmoireMidnightShieldNotes": "在午夜到来时,这块盾牌的威力就会达到极致!增加<%= con %>点体质和<%= str %>点力量。魔法衣橱:独立装备。", + "shieldArmoireRoyalCaneText": "皇家手杖", + "shieldArmoireRoyalCaneNotes": "赞歌颂唱,山呼吾王!增加体质,智力和感知各<%= attrs %>点。魔法衣橱:皇家套装(3件中的第2件)", + "back": "背部挂件", "backBase0Text": "没有背部挂件", "backBase0Notes": "没有背部挂件。", "backMystery201402Text": "黄金之翼", @@ -590,13 +614,15 @@ "backMystery201410Notes": "夜晚,以这双强壮的翅膀俯冲。没有属性加成。2014年10月捐赠者物品。", "backMystery201504Text": "忙碌的蜜蜂翅膀", "backMystery201504Notes": "嗡嗡嗡嗡嗡嗡声!从掠过任务任务。不授予任何好处。 2015年4月认购项目。", - "backMystery201507Text": "Rad Surfboard", - "backMystery201507Notes": "Surf off the Diligent Docks and ride the waves in Inkomplete Bay! Confers no benefit. July 2015 Subscriber Item.", + "backMystery201507Text": "超爽冲浪板", + "backMystery201507Notes": "在未完成之湾优雅穿行于雅致的岩石,踏浪飞驰!无增益效果。2015年7月捐赠者物品。", + "backMystery201510Text": "地精尾巴", + "backMystery201510Notes": "绕来抓去,强而有力!无增益效果。2015年10月订阅者物品。", "backSpecialWonderconRedText": "威武斗篷", "backSpecialWonderconRedNotes": "力量与美貌在刷刷作响。没有属性加成。特别版参与者物品。", "backSpecialWonderconBlackText": "潜行斗篷", "backSpecialWonderconBlackNotes": "由暗影与低语织就。没有属性加成。特别版参与者物品。", - "body": "Body Accessory", + "body": "身体配件", "bodyBase0Text": "没有身体配件", "bodyBase0Notes": "没有身体配件。", "bodySpecialWonderconRedText": "红宝石领子", @@ -609,16 +635,16 @@ "bodySpecialSummerMageNotes": "无论咸水、淡水,都无法使这件含金属纤维的披肩黯然失色。没有增益效果。2014夏季限定版装备。", "bodySpecialSummerHealerText": "珊瑚领子", "bodySpecialSummerHealerNotes": "以活珊瑚制成的拉风领子!没有增益效果。2014夏季限定版装备。", - "bodySpecialSummer2015RogueText": "Renegade Sash", - "bodySpecialSummer2015RogueNotes": "You can't be a true Renegade without panache... and a sash. Confers no benefit. Limited Edition 2015 Summer Gear.", - "bodySpecialSummer2015WarriorText": "Oceanic Spikes", - "bodySpecialSummer2015WarriorNotes": "Each spike drips jellyfish venom, defending the wearer. Confers no benefit. Limited Edition 2015 Summer Gear.", - "bodySpecialSummer2015MageText": "Golden Buckle", - "bodySpecialSummer2015MageNotes": "This buckle adds no power at all, but it's shiny. Confers no benefit. Limited Edition 2015 Summer Gear.", - "bodySpecialSummer2015HealerText": "Sailor's Neckerchief", - "bodySpecialSummer2015HealerNotes": "Yo ho ho? No, no, no! Confers no benefit. Limited Edition 2015 Summer Gear.", + "bodySpecialSummer2015RogueText": "叛徒的饰带", + "bodySpecialSummer2015RogueNotes": "你不带上一根羽饰就不像个真正的叛徒……饰带也是一样。无增益效果。2015年夏季限量版装备。", + "bodySpecialSummer2015WarriorText": "海洋之刺", + "bodySpecialSummer2015WarriorNotes": "每一根尖刺顶上都有水木毒液在滴下,保护穿这件护甲的人。无增益效果。2015年夏季限定版装备。", + "bodySpecialSummer2015MageText": "金色搭扣", + "bodySpecialSummer2015MageNotes": "这个搭扣并不能让你变强,但它很闪。无增益效果。2015年夏季限定版装备。", + "bodySpecialSummer2015HealerText": "航海家的领巾", + "bodySpecialSummer2015HealerNotes": "哟,嚯,嚯? 不, 不, 不! 没有增益效果。2015年夏季限定版装备。", "headAccessory": "头部配件", - "accessories": "Accessories", + "accessories": "附属道具", "animalEars": "动物耳朵", "headAccessoryBase0Text": "没有头部配件", "headAccessoryBase0Notes": "没有头部配件。", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "这对强大的鹿角会随着树叶一起改变颜色。没有增益效果。2014年9月捐赠者物品。", "headAccessoryMystery201502Text": "思绪之翼", "headAccessoryMystery201502Notes": "放飞你的想象力!没有属性加成。2015年2月捐赠者物品。", + "headAccessoryMystery201510Text": "地精角", + "headAccessoryMystery201510Notes": "这些吓人的角滑溜溜的。没有属性加成。2015年10月捐赠者物品。", "headAccessoryMystery301405Text": "头戴护目镜", "headAccessoryMystery301405Notes": "“护目镜是戴在眼睛上的,”人们说。“没有人会想要一副只能戴在头上的护目镜。”人们说。哈!你果然让他们长见识了!没有增益效果。3015年8月捐赠者物品。", "eyewear": "眼镜", @@ -677,14 +705,14 @@ "eyewearSpecialWonderconBlackNotes": "你的动机绝对合法。没有增益效果。特别版参与者物品。", "eyewearMystery201503Text": "海蓝护目镜", "eyewearMystery201503Notes": "别被这些璀璨的宝石闪瞎了!无属性加成。2015年三月捐赠者物品。", - "eyewearMystery201506Text": "Neon Snorkel", - "eyewearMystery201506Notes": "This neon snorkel lets its wearer see underwater. Confers no benefit. June 2015 Subscriber Item.", - "eyewearMystery201507Text": "Rad Sunglasses", - "eyewearMystery201507Notes": "These sunglasses let you stay cool even when the weather is hot. Confers no benefit. July 2015 Subscriber Item.", + "eyewearMystery201506Text": "霓虹潜水镜", + "eyewearMystery201506Notes": "这件霓虹的潜水镜能让佩戴者看清楚水下的状况,没有属性加成。2015年6越捐赠者物品。", + "eyewearMystery201507Text": "酷的太阳镜", + "eyewearMystery201507Notes": "天气热的时候,这副太阳镜能帮你保持冷静。 没有属性加成。2015年7月捐赠者物品。", "eyewearMystery301404Text": "眼戴护目镜", "eyewearMystery301404Notes": "没有什么小饰品能比一副护目镜更炫了——可能,除了单片眼镜。3015年3月捐赠者物品。", "eyewearMystery301405Text": "单片眼镜", "eyewearMystery301405Notes": "没有什么饰品能比单片眼镜更炫——可能,除了护目镜。没有属性加成。3015年7月订阅者物品", - "eyewearArmoirePlagueDoctorMaskText": "Plague Doctor Mask", - "eyewearArmoirePlagueDoctorMaskNotes": "An authentic mask worn by the doctors who battle the Plague of Procrastination. Confers no benefit. Enchanted Armoire: Plague Doctor Set (Item 2 of 3)." + "eyewearArmoirePlagueDoctorMaskText": "瘟疫医生面具", + "eyewearArmoirePlagueDoctorMaskNotes": "防治延迟瘟疫的医生袋的地道面具。没有属性加成。魔法衣橱: 瘟疫医生系列 (3件的第2件)。" } \ No newline at end of file diff --git a/common/locales/zh/generic.json b/common/locales/zh/generic.json index 0d0fbff6c0..e5a43cbf80 100644 --- a/common/locales/zh/generic.json +++ b/common/locales/zh/generic.json @@ -5,20 +5,20 @@ "habitica": "Habitica", "expandToolbar": "展开列表", "collapseToolbar": "隐藏列表", - "markdownBlurb": "Habitica uses markdown for message formatting. See the Markdown Cheat Sheet for more info.", + "markdownBlurb": "Habitica使用markdown标记语言作为信息传递格式。点击 Markdown Cheat Sheet 查看更多信息。", "showFormattingHelp": "查看格式相关帮助", - "hideFormattingHelp": "Hide formatting help", + "hideFormattingHelp": "缩小格式相关帮助", "youType": "你输入了:", "youSee": "你会看到:", - "italics": "*Italics*", - "bold": "**Bold**", - "strikethrough": "~~Strikethrough~~", + "italics": "斜体", + "bold": "粗体", + "strikethrough": "~~继续前进~~", "emojiExample": ":笑:", - "markdownLinkEx": "[Habitica is great!](https://habitica.com)", + "markdownLinkEx": "[Habitica 真好!](https://habitica.com)", "markdownImageEx": "![mandatory alt text](https://habitica.com/cake.png \"optional mouseover title\")", - "unorderedListHTML": "+ First item
+ Second item
+ Third item", - "unorderedListMarkdown": "+ First item\n+ Second item\n+ Third item", - "code": "`code`", + "unorderedListHTML": "+ 第一个道具
+ 第二个道具
+ 第三个道具", + "unorderedListMarkdown": "+ 第一个道具\n+ 第二个道具\n+ 第三个道具", + "code": "代码", "achievements": "成就", "modalAchievement": "获得成就!", "special": "特殊", @@ -28,7 +28,7 @@ "market": "市场", "subscriberItem": "神秘物品", "newSubscriberItem": "新的神秘物品", - "subscriberItemText": "每个月,订阅者会收到一个神秘物品。这通常会在月底前一个星期发布。你可以在维基的“神秘物品”页面查到确切的日期。", + "subscriberItemText": "每月,定期捐款者会收到一个神秘物品。这物品一般是在月底前一个月推出。Wiki里的‘神秘物品’网址将有更多信息。", "all": "全部", "none": "无", "or": "或", @@ -56,7 +56,7 @@ "moreInfo": "更多信息", "showMoreMore": "(显示更多)", "showMoreLess": "(显示更少)", - "gemsWhatFor": "Click to buy Gems! Gems let you purchase special items like Quests, avatar customizations, and seasonal equipment.", + "gemsWhatFor": "单击购买宝石!宝石能让你购置特殊道具如任务,自定义头像,和应季装备。", "veteran": "老兵", "veteranText": "经历过 Habit The Grey (原来的网站) ,身上带着多处其bug带来的伤疤。", "originalUser": "原始用户!", @@ -65,12 +65,13 @@ "habitBirthdayText": "欢庆Habitica的生日派对", "habitBirthdayPluralText": "欢庆第<%= number %>个 Habitica生日派对", "habiticaDay": "Habitica命名日", - "habiticaDaySingularText": "Celebrated Habitica's Naming Day! Thanks for being a fantastic user.", - "habiticaDayPluralText": "Celebrated <%= number %> Naming Days! Thanks for being a fantastic user.", + "habiticaDaySingularText": "庆祝了Habitica的命名日!谢谢您陪伴我们,客户朋友!", + "habiticaDayPluralText": "庆祝 <%= number %> 次命名日! 谢谢您陪伴我们,客户朋友!", "achievementDilatory": "拖延的救世者", "achievementDilatoryText": "2014年夏季世界事件中协助打败了恐怖的拖延巨龙!", - "costumeContest": "2014服装大赛", - "costumeContestText": "参加2014年万圣节服装大赛!详情请见blog.habitica.com/tagged/cosplay", + "costumeContest": "妆扮比赛", + "costumeContestText": "参加了万圣节服装大赛。在Habitica blog查看更多参赛作品!", + "costumeContestTextPlural": "共参加<%= number %>场万圣节服装大赛。在Habitica blog查看更多参赛作品!", "memberSince": "- 加入于", "lastLoggedIn": "- 最后上线于", "notPorted": "这个功能未从原版网站中导出。", @@ -79,6 +80,7 @@ "errorUpCase": "错误:", "newPassSent": "已传送新密码。", "serverUnreach": "暂时连不上服务器。", + "requestError": "噫,出了一个错误!请刷新页面,你的上一个操作也许没能成功生效。", "seeConsole": "如果错误持续存在,请在帮助>报告Bug。如果你对你的浏览器的控制台熟悉的话,请加入所有的错误信息。", "error": "错误", "menu": "菜单", @@ -90,8 +92,8 @@ "audioTheme_off": "关", "audioTheme_danielTheBard": "诗人丹尼尔", "audioTheme_wattsTheme": "瓦特的主题", - "audioTheme_gokulTheme": "Gokul Theme", - "audioTheme_luneFoxTheme": "LuneFox's Theme", + "audioTheme_gokulTheme": "郭克的主题", + "audioTheme_luneFoxTheme": "鲁聂狐狸的主题", "askQuestion": "问个问题", "reportBug": "报告一个问题", "contributeToHRPG": "为Habitica作出贡献", @@ -110,28 +112,40 @@ "December": "十二月", "dateFormat": "日期格式", "achievementStressbeast": "Stoïkalm的救星", - "achievementStressbeastText": "Helped defeat the Abominable Stressbeast during the 2014 Winter Wonderland Event!", - "achievementBurnout": "Savior of the Flourishing Fields", - "achievementBurnoutText": "Helped defeat Burnout and restore the Exhaust Spirits during the 2015 Fall Festival Event!", - "checkOutProgress": "Check out my progress in Habitica!", - "cardReceived": "Received a card!", - "cardReceivedFrom": "<%= cardType %> from <%= userName %>", - "greetingCard": "Greeting Card", - "greetingCardExplanation": "You both receive the Cheery Chum achievement!", - "greetingCardNotes": "Send a greeting card to a party member.", - "greeting0": "Hi there!", - "greeting1": "Just saying hello :)", - "greeting2": "`waves frantically`", - "greeting3": "Hey you!", - "greetingCardAchievementTitle": "Cheery Chum", - "greetingCardAchievementText": "Hey! Hi! Hello! Sent or received <%= cards %> greeting cards.", - "thankyouCard": "Thank-You Card", - "thankyouCardExplanation": "You both receive the Greatly Grateful achievement!", - "thankyouCardNotes": "Send a Thank-You card to a party member.", - "thankyou0": "Thank you very much!", - "thankyou1": "Thank you, thank you, thank you!", - "thankyou2": "Sending you a thousand thanks.", - "thankyou3": "I'm very grateful - thank you!", - "thankyouCardAchievementTitle": "Greatly Grateful", - "thankyouCardAchievementText": "Thanks for being thankful! Sent or received <%= cards %> Thank-You cards." + "achievementStressbeastText": "在2014冬季仙境事件中协助战胜可恶的压力野兽!", + "achievementBurnout": "全盛田野的救护者", + "achievementBurnoutText": "在2015秋季节事件中打败了疲惫魔,复原了锻炼精魂!", + "checkOutProgress": "看一下我在Habitica的进步!", + "cardReceived": "收到一个卡片!", + "cardReceivedFrom": "来自 <%= userName %> 的 <%= cardType %> ", + "greetingCard": "祝贺卡", + "greetingCardExplanation": "你俩都获得“欢乐伙伴”的成就!", + "greetingCardNotes": "给一个队伍者个祝贺卡。", + "greeting0": "嗨!你好!", + "greeting1": "就说声你好 :)", + "greeting2": "`疯狂的招手`", + "greeting3": "嗨!喊你呐!", + "greetingCardAchievementTitle": "快乐伙伴", + "greetingCardAchievementText": "你好!你好!你好!共寄出或收到了 <%= cards %> 份问候卡。", + "thankyouCard": "感谢卡", + "thankyouCardExplanation": "你俩都获得“衷心感谢”的成就!", + "thankyouCardNotes": "给一个队友发一张感谢卡。", + "thankyou0": "非常感谢!", + "thankyou1": "多谢,多谢,多谢!", + "thankyou2": "万谢,万谢!", + "thankyou3": "我很感激——谢谢你!", + "thankyouCardAchievementTitle": "衷心感激", + "thankyouCardAchievementText": "谢谢你的感恩!已寄出和收到<%= cards %>张感谢卡。", + "streakAchievement": "你得到一个连击成就!", + "firstStreakAchievement": "21天连击", + "streakAchievementCount": "<%= streaks %> 21天连击", + "twentyOneDays": "你连21天完成了你的日常任务!", + "dontBreakStreak": "太厉害了,不要停!", + "dontStop": "加油!别停!", + "levelUpShare": "通过养成好习惯,我在Habitica升级了!", + "questUnlockShare": "我在Habitica解锁了一个新任务!", + "hatchPetShare": "我完成了我的任务,孵出了一个新宠物!", + "raisePetShare": "我完成了我的任务,培养了一匹新坐骑!", + "wonChallengeShare": "我在Habitica赢了一个挑战!", + "achievementShare": "我在Habitica得到了一个新成就!" } \ No newline at end of file diff --git a/common/locales/zh/groups.json b/common/locales/zh/groups.json index 37e15e3cb2..94016e3bae 100644 --- a/common/locales/zh/groups.json +++ b/common/locales/zh/groups.json @@ -2,7 +2,8 @@ "tavern": "酒馆", "innCheckOut": "离开客栈", "innCheckIn": "在客栈休息", - "innText": "你正在客栈中休息!当你在客栈中是,你的日常任务不会在一天结束时伤害你,但是它们任然会每天刷新。警告:如果你正在参与一个Boss战任务,你仍然会因为队友未完成的每日任务受到boss的伤害!同样,你对Boss的伤害(或者道具的收集)在你离开客栈之前不会结算。", + "innText": "你正在客栈中休息!当你在客栈中时,你没完成的日常任务不会在一天结束时伤害你,但是它们仍然会每天刷新。注意:如果你正在参与一个Boss战任务,你仍然会因为队友未完成的每日任务受到boss的伤害!同样,你对Boss的伤害(或者收集的道具道具)在你离开客栈之前不会结算。", + "innTextBroken": "你正在客栈中休息,我想是的……入住客栈以后,你的每日任务不会在每天结束时因为没完成而减少你的生命值,但它们仍然会每天刷新……如果你正在一场BOSS战中,BOSS仍然会因为你所在队伍中的队友没完成每日任务而伤害到你……除非你的队友也在客栈中休息。同样,你对BOSS的伤害(或是收集的道具)在从客栈离开前页不会起效……唉好累啊……", "lfgPosts": "寻找小组 (队伍招募) 帖", "tutorial": "教学", "glossary": "词汇表", @@ -12,7 +13,7 @@ "community": "社区论坛", "dataTool": "数据展示工具", "resources": "资源", - "askQuestionNewbiesGuild": "Ask a Question (Newbies Guild)", + "askQuestionNewbiesGuild": "请教一个问题 (新人公会)", "tavernTalk": "酒馆聊天", "tavernAlert1": "注意:开发者不会来这里阅读反馈。如果你想报告bug,请", "tavernAlert2": "使用GitHub ", @@ -23,9 +24,9 @@ "party": "队伍", "createAParty": "创建一个队伍", "updatedParty": "队伍设置已更新。", - "noPartyText": "要么你不在一个队伍中,要么你的队伍需要一段时间来加载。你可以创建一个队伍并邀请朋友。或者,如果你想加入一个队伍,你可以把下方的你的唯一用户 ID 给他们,然后来这里查看邀请信息。", - "LFG": "宣传你的队伍或招募队友,请到<%= linkStart %>集结队伍(寻找小组)<%= linkEnd %> 公会。", - "wantExistingParty": "Want to join an existing party? Go to the <%= linkStart %>Party Wanted Guild<%= linkEnd %> and post this User ID:", + "noPartyText": "你也许不在一个队伍中,或者你的队伍还需要一段时间来加载。你也可以创建一个新队伍来邀请朋友。或者如果你想加入一个队伍,你可以把下方你的用户 ID 给他们,然后返回这里查看邀请信息。", + "LFG": "招募队友,宣传你的队伍,或加入一个已有队伍,请到<%= linkStart %>集结队伍 (寻找小组) <%= linkEnd %> 公会。", + "wantExistingParty": "想加入一个队伍吗? 点击 <%= linkStart %>Party Wanted Guild<%= linkEnd %> 把这个 用户ID填上", "joinExistingParty": "加入别人的队伍", "create": "建立", "userId": "用户ID", @@ -36,12 +37,12 @@ "joinNewParty": "加入新队伍", "declineInvitation": "拒绝邀请", "loadingNewParty": "你的新队伍正在载入,请稍候……", - "newMsg": "新消息在 “<%= name %>”", + "newMsg": "有新消息 “<%= name %>”", "chat": "聊天", "sendChat": "发送", "toolTipMsg": "查看最近的消息", "guildBankPop1": "公会银行", - "guildBankPop2": "公会会长可以用于挑战的宝石。", + "guildBankPop2": "公会会长可用的挑战完成奖励宝石", "guildGems": "公会宝石", "editGroup": "编辑团队", "newGroupName": "<%= groupType %> 名称", @@ -52,14 +53,14 @@ "logoUrl": "图标链接", "assignLeader": "任命队长", "members": "成员", - "partyList": "Order for party members in header", + "partyList": "给队伍成员的置顶讯息", "banTip": "引导成员", "moreMembers": "更多成员", "invited": "已邀请", "leaderMsg": "公会会长的消息 (支持标记语言)", "name": "名字", "description": "描述", - "public": "公共", + "public": "公开", "inviteOnly": "只能邀请进入", "gemCost": "花费宝石可以保证公会质量。这些宝石会被送入公会银行,可以作为公会挑战的奖励!", "search": "搜索", @@ -131,7 +132,7 @@ "sendGiftPurchase": "支付", "sendGiftMessagePlaceholder": "私信(可选)", "sendGiftSubscription": "<%= months %>月(或多个月): $<%= price %>", - "battleWithFriends": "与朋友一起同怪兽战斗", + "battleWithFriends": "与朋友一起大战怪兽", "startPartyWithFriends": "和你的朋友们组建新队伍", "startAParty": "创建一个队伍", "addToParty": "加入队伍成员", @@ -145,5 +146,6 @@ "partyEmpty": "你孤身一人,快邀请你的朋友们!", "partyChatEmpty": "队伍聊天框里空空如也!在上面的聊天框打字来开始聊天。", "guildChatEmpty": "公会聊天框里空空如也!在上面的聊天框打字来开始聊天。", - "possessiveParty": "<%= name %>的队伍" + "possessiveParty": "<%= name %>的队伍", + "requestAcceptGuidelines": "如果你想在酒馆里,或是队伍和公会里张贴信息,请先阅读<%= linkStart %>交流须知<%= linkEnd %>并点击按钮,表示接受其中的条款。 " } \ No newline at end of file diff --git a/common/locales/zh/limited.json b/common/locales/zh/limited.json index 1c4af6041d..64697bac91 100644 --- a/common/locales/zh/limited.json +++ b/common/locales/zh/limited.json @@ -8,57 +8,59 @@ "alarmingFriendsText": "被队友吓到了 <%= spookDust %> 次", "agriculturalFriends": "农民同志", "agriculturalFriendsText": "被队友变成花朵<%= seeds %>次。", - "aquaticFriends": "Aquatic Friends", - "aquaticFriendsText": "Got splashed <%= seafoam %> times by party members.", + "aquaticFriends": "水族朋友", + "aquaticFriendsText": "被队伍成员泼水 <%= seafoam %>次", "valentineCard": "情人节卡片", - "valentineCardExplanation": "For enduring such a saccharine poem, you both receive the \"Adoring Friends\" badge!", + "valentineCardExplanation": "为了表彰你们忍受如此腻人诗歌的壮举,你们两个都收到了\"可爱的朋友们\"的奖章", "valentineCardNotes": "赠送情人节卡片给你的一个队伍成员。", - "valentine0": "\"Roses are red\n\nMy Dailies are blue\n\nI'm happy that I'm\n\nIn a Party with you!\"", - "valentine1": "\"Roses are red\n\nViolets are nice\n\nLet's get together\n\nAnd fight against Vice!\"", - "valentine2": "\"Roses are red\n\nThis poem style is old\n\nI hope that you like this\n\n'Cause it cost ten Gold.\"", - "valentine3": "\"Roses are red\n\nIce Drakes are blue\n\nNo treasure is better\n\nThan time spent with you!\"", - "valentineCardAchievementTitle": "Adoring Friends", - "valentineCardAchievementText": "Aww, you and your friend must really care about each other! Sent or received <%= cards %> Valentine's Day cards.", + "valentine0": "\"玫瑰是红色的\n我的日常生活是忧郁的\n我欢呼雀跃,因为\n我与你一同派对!\"", + "valentine1": "\"玫瑰是红色的\n紫罗兰开得绚烂\n让我们一起\n与邪恶抗争!\"", + "valentine2": "\"玫瑰是红色的\n这首诗已经流传很久\n我希望你能喜欢\n因为它价值十枚金币.\"", + "valentine3": "\"玫瑰是红色的\n冰蜉蝣是蓝色的\n没有任何宝藏比得上\n与你共处的时光!\"", + "valentineCardAchievementTitle": "崇拜的朋友", + "valentineCardAchievementText": "啊,你和你的朋友一定很关心对方!你们之间已经发送或接受了<%= cards %>张情人节卡片。", "polarBear": "北极熊", "turkey": "火鸡", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "北极熊崽", "jackolantern": "杰克南瓜灯", "seasonalShop": "季度商店", - "seasonalShopClosedTitle": "<%= linkStart %>Siena Leslie<%= linkEnd %>", + "seasonalShopClosedTitle": "<%= linkStart %>锡耶纳 莱斯利<%= linkEnd %>", "seasonalShopTitle": "<%= linkStart %>季节魔女<%= linkEnd %>", - "seasonalShopClosedText": "The Seasonal Shop is currently closed!! I don't know where the Seasonal Sorceress is now, but I bet she'll be back during the next Grand Gala!", + "seasonalShopClosedText": "季度商店暂时停业!! 我不知道季节女巫现在在哪里,但是我敢打赌她会在下一个 盛大庆典的时候回来!", "seasonalShopText": "欢迎来到季度商店!!我们现在囤积了各色春日 季度版 商品。每年的春日嘉年华期间,这里的一切都能买到——直到4月30号。所以赶快来扫货吧,否则你要足足再等一年才能买到!", - "seasonalShopSummerText": "Welcome to the Seasonal Shop!! We're stocking summertime Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Summer Splash event each year, but we're only open until July 31st, so be sure to stock up now, or you'll have to wait a year to buy these items again!", - "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31, so be sure to stock up now, or you'll have to wait a year to buy these items again!", - "seasonalShopRebirth": "If you've used the Orb of Rebirth, you can repurchase this equipment in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.", + "seasonalShopSummerText": "欢迎来到季度商店!! 我们现在推挤了不少夏日时光 季度版商品。在这里的所有东西在夏日水花活动期间你都可以购买,但是我们只开放到六月31日,所以赶快来购买吧,不然你要等一整年才可以再次买到!", + "seasonalShopFallText": "欢迎来到季度商店!! 我们现在推挤了不少秋日时光 季度版商品。在这里的所有东西在金秋佳节活动期间你都可以购买,但是我们只开放到十月月31日,所以赶快来购买吧,不然你要等一整年才可以再次买到!", + "seasonalShopFallTextBroken": "啊……欢迎来到季节商店……我们正在准备秋季特供产品,还有其他一些什么的…… 这里所有的东西都会在每年秋季节庆期间开放购买,但我们只开门到10月31日……你可能现在可以开始囤货了,或者只能继续等,等,等…… *叹气*", + "seasonalShopRebirth": "如果你曾经使用过重生之球,你可以在奖励栏重新购买此项物品。最开始,你只能购买与你的职业对应的物品(默认为战士),但是不要害怕,当你转职之后,你也可以购买其他职业特有的物品。", "candycaneSet": "拐杖糖 (法师)", "skiSet": "雪橇刺客 (盗贼)", "snowflakeSet": "雪片 (医师)", "yetiSet": "野人驯化 (战士)", - "toAndFromCard": "To: <%= toName %>, From: <%= fromName %>", + "toAndFromCard": "发给: <%= toName %>, 来自: <%= fromName %>", "nyeCard": "新年贺卡", - "nyeCardExplanation": "For celebrating the new year together, you both receive the \"Auld Acquaintance\" badge!", + "nyeCardExplanation": "你们一起庆祝了新年的到来,为此你们收到了\"老朋友\"的奖章!", "nyeCardNotes": "送一张新年贺卡给你的一个队伍成员", "seasonalItems": "季节性商品", - "nyeCardAchievementTitle": "Auld Acquaintance", - "nyeCardAchievementText": "Happy New Year! Sent or received <%= cards %> New Year's cards.", - "nye0": "Happy New Year! May you slay many a bad Habit.", - "nye1": "Happy New Year! May you reap many Rewards.", - "nye2": "Happy New Year! May you earn many a Perfect Day.", - "nye3": "Happy New Year! May your To-Do list stay short and sweet.", - "nye4": "Happy New Year! May you not get attacked by a raging Hippogriff.", + "nyeCardAchievementTitle": "老朋友", + "nyeCardAchievementText": "系新年快乐! 寄出或收到了<%= cards %>新年贺卡", + "nye0": "新年快乐! 愿你消灭掉很多的坏习惯。", + "nye1": "新年快乐! 愿你收货很多的奖励。", + "nye2": "新年快乐! 愿你拥有很多完美日。", + "nye3": "新年快乐! 愿你的待办列表永远简短而甜蜜。", + "nye4": "新年快乐! 但愿你别被暴怒的河马狮鹫攻击。", "holidayCard": "收到一封节日贺卡!", "mightyBunnySet": "强力兔(战士)", "magicMouseSet": "魔力鼠(法师)", "lovingPupSet": "可爱犬(医师)", "stealthyKittySet": "偷盗猫(盗贼)", - "daringSwashbucklerSet": "Daring Swashbuckler (Warrior)", - "emeraldMermageSet": "Emerald Mermage (Mage)", - "reefSeahealerSet": "Reef Seahealer (Healer)", - "roguishPirateSet": "Roguish Pirate (Rogue)", - "monsterOfScienceSet": "Monster of Science (Warrior)", - "witchyWizardSet": "Witchy Wizard (Mage)", - "mummyMedicSet": "Mummy Medic (Healer)", - "vampireSmiterSet": "Vampire Smiter (Rogue)", - "fallEventAvailability": "Available until October 31" + "daringSwashbucklerSet": "无畏侠盗(战士)", + "emeraldMermageSet": "绿宝石人鱼法师(法师)", + "reefSeahealerSet": "暗礁海洋医师(医师)", + "roguishPirateSet": "流浪海盗(盗贼)", + "monsterOfScienceSet": "科学怪人(战士)", + "witchyWizardSet": "怪异巫师(法师)", + "mummyMedicSet": "木乃伊医师(医师)", + "vampireSmiterSet": "吸血重击者(盗贼)", + "fallEventAvailability": "有效期至十月31日" } \ No newline at end of file diff --git a/common/locales/zh/messages.json b/common/locales/zh/messages.json index 93644cb7fd..4cbabff3f1 100644 --- a/common/locales/zh/messages.json +++ b/common/locales/zh/messages.json @@ -5,7 +5,7 @@ "messageTagNotFound": "找不到标签。", "messagePetNotFound": "找不到该宠物。", "messageFoodNotFound": "找不到该食物。", - "messageNotAvailable": "This item is not currently available for purchase.", + "messageNotAvailable": "这样东西目前不能被购买.", "messageCannotFeedPet": "不能喂这只宠物。", "messageAlreadyMount": "你已经有这个坐骑了。请喂另一只宠物。", "messageEvolve": "你驯养了<%= egg %>,去骑几圈吧!", @@ -15,7 +15,7 @@ "messageEquipped": "装备了<%= itemText %>", "messageUnEquipped": "卸下了 <%= itemText %>", "messageMissingEggPotion": "你没选择药水或者宠物蛋", - "messageInvalidEggPotionCombo": "You can't hatch Quest Pet Eggs with Magic Hatching Potions! Try a different egg.", + "messageInvalidEggPotionCombo": "你不能用孵化药水孵化这个宠物蛋,试试其他的蛋.", "messageAlreadyPet": "你已经拥有这只宠物了,试着用另一种方案孵化吧。", "messageHatched": "你的蛋孵化了,造访你的马厩来配备你的宠物吧。", "messageNotEnoughGold": "金币不够", @@ -26,9 +26,30 @@ "messageDropQuest": "你找到一个任务!", "messageDropMysteryItem": "你打开一个盒子找到<%= dropText %>!", "messageFoundQuest": "你有个新剧情任务\"<%= questText %>\"!", - "messageAlreadyPurchasedGear": "You purchased this gear in the past, but do not currently own it. You can buy it again in the rewards column on the tasks page.", - "messageAlreadyOwnGear": "You already own this item. Equip it by going to the equipment page.", - "armoireEquipment": "<%= image %> You found a piece of rare Equipment in the Armoire: <%= dropText %>! Awesome!", - "armoireFood": "<%= image %> You rummage in the Armoire and find <%= dropArticle %><%= dropText %>. What's that doing in here?", - "armoireExp": "You wrestle with the Armoire and gain Experience. Take that!" + "messageAlreadyPurchasedGear": "你之前已经购买了这件装备,但现在它已经不属于你了。你可以重新在任务页面的奖励栏里购买它。", + "messageAlreadyOwnGear": "你已经拥有了这个道具,可以在装备页面上装配它。", + "armoireEquipment": "<%= image %> 你发现了一件稀有装备!恭喜你 <%= dropText %>! ", + "armoireFood": "<%= image %> 你找到了 <%= dropArticle %><%= dropText %>. 它是用来做什么的?", + "armoireExp": "你和大衣柜展开了殊死搏斗,并赢得了经验,尝尝这个吧!", + "messageInsufficientGems": "宝石不够了!", + "messageAuthPasswordMustMatch": "密码不匹配", + "messageAuthCredentialsRequired": "需要输入用户名,邮箱,密码和确认密码", + "messageAuthUsernameTaken": "用户名已被使用", + "messageAuthEmailTaken": "邮箱已被使用", + "messageAuthNoUserFound": "没有找到这个用户", + "messageAuthMustBeLoggedIn": "你必须登入", + "messageAuthMustIncludeTokens": "你的请求内容里必须包括uid(user id)和勋章", + "messageGroupNotFound": "没有找到这个小组,或者你没有权限", + "messageGroupAlreadyInParty": "你已加入这个队伍,请刷新页面", + "messageGroupOnlyLeaderCanUpdate": "只有小组官员才可以更新小组信息", + "messageGroupRequiresInvite": "无法加入没有邀请你的小组", + "messageGroupCannotRemoveSelf": "你不能将自己移除", + "messageGroupChatBlankMessage": "你不能发送空白消息", + "messageGroupChatLikeOwnMessage": "不能赞自己的消息,不要做这种人。", + "messageGroupChatFlagOwnMessage": "无法上报你自己的信息。", + "messageGroupChatFlagAlreadyReported": "你已经举报过此信息。", + "messageGroupChatNotFound": "找不到消息。", + "messageGroupChatAdminClearFlagCount": "只有管理员可以去除计数!", + "messageUserOperationProtected": "路径 `<%= operation %>`因受到保护未保存。", + "messageUserOperationNotFound": "<%= operation %> 无法找到此操作。" } \ No newline at end of file diff --git a/common/locales/zh/noscript.json b/common/locales/zh/noscript.json new file mode 100644 index 0000000000..776c5210f2 --- /dev/null +++ b/common/locales/zh/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "呜呼!你的浏览器不允许JavaScript", + "jsDisabledHeadingFull": "呜呼!你的浏览器不允许JavaScript,没有它,Habitica无法正常工作", + "jsDisabledText": "没有它Habitica无法正常显示!", + "jsDisabledLink": "请启用JavaScript以继续" +} \ No newline at end of file diff --git a/common/locales/zh/npc.json b/common/locales/zh/npc.json index 783ef2f3dc..d23659587a 100644 --- a/common/locales/zh/npc.json +++ b/common/locales/zh/npc.json @@ -3,19 +3,23 @@ "npcText": "用尽全力支持了我们的Kickstarter项目!", "mattBoch": "马特·博赫", "mattShall": "<%= name %>,需要我带你去见坐骑吗?一旦你喂养一只宠物足够的食物来将它转为坐骑后,它会出现在这里。点击一只坐骑进行乘骑。", - "mattBochText1": "Welcome to the Stable! I'm Matt, the beast master. After level 4, you can hatch pets using eggs and potions. When you hatch a pet in the Market, it will appear here! Click a pet's image to add it to your avatar. Feed them with the food you find after level 4, and they'll grow into powerful mounts.", + "mattBochText1": "欢迎来到马厩!我是马特,训兽大师。当你3级时,您可以孵化宠物和使用药水。你在市场上购买的宠物蛋,会出现在这里!点击宠物将它添加到你的头像。你3级后,找食物喂它们,它们将会成长为强壮的坐骑。", "daniel": "Daniel", "danielText": "欢迎来到酒馆!来这坐下见见当地人吧。如果你需要休息 (度假还是生病?),我可以把你安置在客栈里。你登记了之后,你的每日任务会被冻结在原状态直到你离开客栈。在冻结状态下,你不会因为未完成的每日任务而受到伤害。", "danielText2": "警告:如果你正在参与一个Boss战任务,你仍然会因为队友未完成的每日任务受到boss的伤害!同样,你对Boss的伤害(或者道具的收集)在你离开客栈之前不会结算。", + "danielTextBroken": "欢迎来到酒馆……我想……如果你需要休息,我会把你安置在客栈里……入住之后,你的每日任务就不会在一天结束时给你造成伤害,不过你仍然可以签到……只要你还有精力就行……", + "danielText2Broken": "哦……如果你正在一场BOSS战当中,你仍然会因为队友未完成的每日任务受到BOSS的伤害……同样,你对Boss的伤害(或者道具的收集)在你离开客栈之前不会结算……", "alexander": "商人Alexander", "welcomeMarket": "欢迎来到市场!在这里购买稀有的蛋和药水!卖掉你多余的物品!委托服务!来瞧瞧我们能为你提供什么。", - "sellForGold": "以<%= gold %>金币售出<%= item %>", - "sellEggForGold": "以<%= gold %> 金币卖出<%= itemType %> 蛋", - "sellPotionForGold": "以 <%= gold %>金币出售<%= itemType %>药水", + "displayItemForGold": "你希望出售一个<%= itemType %>吗?", + "displayEggForGold": "你希望出售一个<%= itemType %> 蛋吗?", + "displayPotionForGold": "你希望出售一个<%= itemType %> 药剂吗?", + "sellForGold": "售出,获得 <%= gold %> 金币", "buyGems": "购买宝石", "justin": "Justin", "ian": "岚", "ianText": "欢迎来到任务商店!这里你可以使用任务卷轴来同你的朋友一起与怪物战斗。不要选购一个在右边为您精心排列的任务卷轴吗?", + "ianBrokenText": "欢迎来到任务商店……这里你可以使用任务卷轴来同你的朋友一起与怪物战斗……请一定要到右边栏来看看我们为您精心准备的任务卷轴……", "USD": "美金", "newStuff": "新品", "cool": "稍后再跟我说", @@ -23,7 +27,7 @@ "donateText1": "在你的账号里增加20个宝石。宝石可以用来购买特殊的虚拟物品,例如衣服和发型。", "donateText2": "帮助与支持Habitica", "donateText3": "Habitica是一个基于用户支持的开源项目。你使用在宝石上的金钱帮助我们维持服务、雇佣员工、开发新功能,以及奖励我们的志愿程序员。感谢您的慷慨!", - "donationDesc": "20宝石,捐献给Habitica", + "donationDesc": "给Habitica捐献", "payWithCard": "用信用卡付款", "payNote": "注意:PayPal有时会需要很长的时间。我们推荐用信用卡。", "card": "信用卡", @@ -31,7 +35,7 @@ "paymentMethods": "付款流程:", "classGear": "职业装备", "classGearText": "首先:别惊慌!你的旧装备放在你的物品栏,你现在穿着你的新手<%= klass %>装备。穿你的职业装备为你提供50%额外属性奖励。但是,你仍然可以切换回原来的装备。", - "classStats": "These are your class's stats; they affect the game-play. Each time you level up, you get one point to allocate to a particular stat. Hover over each stat for more information.", + "classStats": "这是你职业的属性点:它们会影响游戏的操作和过程。每次升级时,你将获得一点自由分配点,用来给某一特定属性加成。将鼠标悬停在每个属性上来查看更多信息。", "autoAllocate": "自动分配", "autoAllocateText": "如果选了“自动分配”,你的角色会自动地根据你的任务属性,你可以在任务 > 编辑 > 高级 > 属性中看到他们。例如,如果你经常点‘健身房’任务,而健身房日常属性被设置为'物理',那你会自动获得力量点。", "spells": "法术", @@ -71,14 +75,14 @@ "tourHabitsProceed": "有道理!", "tourRewardsBrief": "奖励单
  • 你可以在这里消费你的黄金!
  • 给你的角色购买装备,或者组合个人奖励.
", "tourRewardsProceed": "就是这些了!", - "welcomeToHabit": "Welcome to Habitica!", - "welcome1": "Create a basic avatar.", - "welcome1notes": "This avatar will represent you as you progress.", - "welcome2": "Set up your tasks.", - "welcome2notes": "How well you do on your real-life tasks will control how well you do in the game!", - "welcome3": "Progress in life and the game!", - "welcome3notes": "As you improve your life, your avatar will level up and unlock pets, quests, equipment, and more!", + "welcomeToHabit": "欢迎来到Habitica!", + "welcome1": "创建一个角色", + "welcome1notes": "这个角色将代表你", + "welcome2": "创建你的任务", + "welcome2notes": "你在现实中做的怎么样将影响你在游戏中的成绩", + "welcome3": "在游戏和生活中进步!", + "welcome3notes": "随着你在生活中的进步,你的角色会升级,获得宠物,装备,任务等等", "welcome4": "避免坏习惯扣除你的生命值(HP),否则你的角色会死亡!", "welcome5": "现在你要设置你的角色形象和建立你的任务……", - "imReady": "Enter Habitica" + "imReady": "进入Habitica" } \ No newline at end of file diff --git a/common/locales/zh/pets.json b/common/locales/zh/pets.json index e22d62a282..30eadad52d 100644 --- a/common/locales/zh/pets.json +++ b/common/locales/zh/pets.json @@ -1,13 +1,13 @@ { "pets": "宠物", "petsFound": "拥有的宠物", - "magicPets": "Magic Potion Pets", + "magicPets": "神奇药水宠物", "rarePets": "稀有宠物", "questPets": "剧情任务宠物", "mounts": "坐骑", "mountsTamed": "已驯服的坐骑", "questMounts": "任务坐骑", - "magicMounts": "Magic Potion Mounts", + "magicMounts": "神奇药水坐骑", "rareMounts": "稀有坐骑", "etherealLion": "灵狮", "veteranWolf": "退伍军狼", @@ -18,7 +18,7 @@ "mammoth": "猛犸象", "orca": "兽人", "royalPurpleGryphon": "紫御狮鹫", - "phoenix": "Phoenix", + "phoenix": "凤凰", "rarePetPop1": "按按金色的爪印查看怎么通过为Habitica贡献来获得这只稀有宠物!", "rarePetPop2": "得到这个宠物的方法!", "potion": "<%= potionType %> 药水", @@ -27,15 +27,15 @@ "eggSingular": "蛋", "noEggs": "你没有任何宠物蛋。", "hatchingPotions": "孵化药水", - "magicHatchingPotions": "Magic Hatching Potions", + "magicHatchingPotions": "魔法孵化药水", "hatchingPotion": "孵化药水", "noHatchingPotions": "你没有任何孵化药水。", "inventoryText": "点选一颗蛋后,可使用的药水会亮起绿色的背景,然后点击药水来孵化出宠物。如果没有药水亮起绿色背景,再点击一次蛋来取消点选它,然后先点击药水看看可使用的宠物蛋,它们同样会亮起绿色背景。你也可以在商人Alexander那里卖掉不想要的物品。", "foodText": "食物", "food": "食物和鞍", "noFood": "你没有任何食物或鞍。", - "dropsExplanation": "Get these items faster with Gems if you don't want to wait for them to drop when completing a task. Learn more about the drop system.", - "premiumPotionNoDropExplanation": "Magic Hatching Potions cannot be used on eggs received from Quests. The only way to get Magic Hatching Potions is by buying them below, not from random drops.", + "dropsExplanation": "如果你不想等每次完成任务才掉落这些物品,你可以用宝石来加速获取。 你可以在这了解更多关于掉落系统的信息。", + "premiumPotionNoDropExplanation": "魔法孵化药水不能用来孵化从完成任务获得的蛋,也不会随机掉落,获取魔法孵化药水只有一个办法:在下面链接购买。", "beastMasterProgress": "驯兽师进度", "stableBeastMasterProgress": "驯兽师进度:<%= number %>宠物已获得", "beastAchievement": "你集齐了所有宠物,获得了”驯兽师“的成就!", @@ -58,8 +58,16 @@ "firstDrop": "你解锁了物品掉落功能!从今以后,只要你完成每个任务都会有一定的几率能找到一件物品,包括蛋,药水和食物。刚刚你找到了一颗<%= eggText %>蛋!<%= eggNotes %>", "useGems": "如果你很想拥有某只宠物,但又不想慢慢等蛋掉落的话,你可以在 物品柜>市场用宝石购买!", "hatchAPot": "孵化一隻<%= potion %><%= egg %>?", + "hatchedPet": "你孵化了 <%= potion %> <%= egg %>!", + "displayNow": "现在显示", + "displayLater": "稍后显示", + "earnedCompanion": "因为你的不懈努力,你又获得了一个新的伙伴,好好喂养它,让它成长!", "feedPet": "喂你的<%= name %>一个<%= article %><%= text %>?", "useSaddle": "把鞍用在<%= pet %>上?", + "raisedPet": "你让 <%= pet %> 长大了!", + "earnedSteed": "通过完成你的任务,你获得了一匹忠诚的坐骑!", + "rideNow": "现在骑上", + "rideLater": "稍后骑上", "petName": "<%= potion %> <%= egg %>", "mountName": "<%= potion %> <%= mount %>", "petKeyName": "狗舍的钥匙", diff --git a/common/locales/zh/quests.json b/common/locales/zh/quests.json index 3c13e8529b..e7d468272d 100644 --- a/common/locales/zh/quests.json +++ b/common/locales/zh/quests.json @@ -1,45 +1,52 @@ { "quests": "任务", "quest": "任务", - "whereAreMyQuests": "在各自的页面上任务现在已经生效了!点击物品栏->任务找到。", + "whereAreMyQuests": "现在你已经能在专门的页面上查看任务了!点击物品栏->任务找到。", "yourQuests": "你的任务", "questsForSale": "任务出售", "petQuests": "宠物和坐骑任务", - "unlockableQuests": "未解锁任务", + "unlockableQuests": "未解锁的任务", "goldQuests": "可用金币购买的任务", "questDetails": "任务详情", "invitations": "邀请", "completed": "完成了!", "youReceived": "你收到了", "dropQuestCongrats": "恭喜得到探索任务卷轴!你可以现在立即邀请队伍并开始任务,或以后再从你的物品栏>任务里开始该任务。", - "questSend": "点击\"邀请\" 向队友发送一封邀请函。当所有队友接受或拒绝,任务开始。在社交>队伍查看详细。", + "questSend": "点击\"邀请\" 向队友发送一封邀请函。当所有队友都回应接受或拒绝,任务就会开始。在社交>队伍查看详细。", + "questSendBroken": "点击\"邀请\" 向队友发送一封邀请函。当所有队友都回应接受或拒绝,任务就会开始。在社交>队伍查看详细。", "inviteParty": "邀请队伍参加探索任务", "questInvitation": "任务邀请:", "questInvitationTitle": "任务邀请", "questInvitationInfo": "探索任务邀请<%= quest %>", "askLater": "稍后再问", - "questLater": "Quest Later", + "questLater": "后续任务", "buyQuest": "购买任务", "accepted": "接受了", "rejected": "拒绝的", "pending": "等待中", "questStart": "一旦所有成员都接受或拒绝,任务就开始了。只有那些点击“接受”者可以参加任务并取得掉落物。如果成员回应时间太长(无活动?),任务拥有者可以透过点击“开始”,略过他们启动任务。任务拥有者还可以透过点击“取消”取消任务,并恢复任务卷轴。", + "questStartBroken": "一旦所有成员都接受或拒绝,任务就开始了。只有那些点击“接受”者可以参加任务并取得掉落物。如果成员回应时间太长(无活动?),任务拥有者可以透过点击“开始”,略过他们启动任务。任务拥有者还可以透过点击“取消”取消任务,并恢复任务卷轴。", "begin": "开始", "bossHP": "Boss的生命值", "bossStrength": "Boss的力量", - "rage": "Rage", + "rage": "愤怒值", "collect": "收集", "collected": "已收集", "collectionItems": "<%= number %> <%= items %>", - "itemsToCollect": "Items to Collect", - "bossDmg1": "Each completed Daily and To-Do and each positive Habit hurts the boss. Hurt it more with redder tasks or Brutal Smash and Burst of Flames. The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies! All damage to and from a boss is tallied on cron (your day roll-over).", - "bossDmg2": "只有参与者会跟boss战斗并共享任务掉落。", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "itemsToCollect": "需要收集的道具", + "bossDmg1": "每一个完成的每日任务和待办事项,或是每培养一次好习惯都能攻击到BOSS。完成更加红色的任务或使用碎裂一击及火球术能给BOSS造成更多伤害。除了你自己的日常任务外,一旦队伍中的任何一人错过了自己的每日任务,你都会从BOSS那里受到额外的伤害值 (按BOSS的力量值成倍增加)! 所有对BOSS和来自BOSS的伤害会在重置时间进行结算 (你的日常重置时间)", + "bossDmg2": "只有参与者才能与boss战斗并共享任务掉落。", + "bossDmg1Broken": "每一个完成的每日任务和待办事项,或是每培养一次好习惯都能攻击到BOSS。完成深红色的任务或使用碎裂一击及火球术能给BOSS造成更多伤害。除了你自己的日常任务外,一旦队伍中的任何一人未完成自己的每日任务,你都会从BOSS那里受到额外的伤害值 (按BOSS的力量值成倍增加)! 所有对BOSS和来自BOSS的伤害会在重置时间进行结算 (你的日常重置时间)", + "bossDmg2Broken": "只有参与者才能跟boss战斗并共享任务掉落。", + "tavernBossInfo": "通过完成每日任务、待办事项或记录好习惯来打败世界Boss!未完成的每日任务会填充颓废打击进度条,当颓废打击进度条满的时候,世界Boss会攻击1个NPC。世界Boss不会攻击个人或账户。没有在客栈的玩家才能执行该任务。", + "tavernBossInfoBroken": "通过完成每日任务、待办事项或记录好习惯来打败世界Boss!未完成的每日任务会填充BOSS的颓废值,当它颓废值满的时候会攻击1个NPC。世界Boss不会攻击个人或账户。另外,只有不在客栈的玩家才能做这个任务。", "bossColl1": "为了收集物品,做那些正的任务。任务物品会像正常物品一样掉落;但是你直到第二天才能看得见这些掉落,然后找到的所有物品会被结算然后堆叠到一起。", "bossColl2": "只有参与者才能收集物品并共享任务掉落。", + "bossColl1Broken": "做一些任务和好习惯来收集任务物品…任务物品会像其它正常的物品一样掉落;但是你在第二天才能看到这些任务物品的掉落,之后所有的任务物品将堆叠在一起统一结算。", + "bossColl2Broken": "只有参与者才能收集物品并共享任务掉落。", "abort": "舍弃", - "leaveQuest": "Leave Quest", - "sureLeave": "Are you sure you want to leave the active quest? All your quest progress will be lost.", + "leaveQuest": "放弃任务", + "sureLeave": "你确定你要舍弃这个任务吗?这样做会消除所有进度。", "questOwner": "任务业主", "questOwnerNotInPendingQuest": "任务拥有者已经离开这个队伍,无法再启动这个任务。我们建议您现在取消它。任务拥有者将保留持有的任务卷轴。", "questOwnerNotInRunningQuest": "任务拥有者已经离开这个任务。如果你必须退出,你可以退出这个任务。你也可以繼續執行這個任务,其余所有参与者将会在完成任务时获得任务奖励。", @@ -51,22 +58,25 @@ "scrollsText1": "任务需要团队去完成。如果你想单独做任务,", "scrollsText2": "你可以建立一个空团队。", "scrollsPre": "你还没有解锁这项任务!", - "alreadyEarnedQuestLevel": "You already earned this quest by attaining Level <%= level %>.", - "alreadyEarnedQuestReward": "You already earned this quest by completing <%= priorQuest %>.", + "alreadyEarnedQuestLevel": "你已经达到了等级<%= level %>并完成了这个任务。", + "alreadyEarnedQuestReward": "你已经通过完成<%= priorQuest %>完成了这个任务。", "completedQuests": "已完成任务", "mustComplete": "你要先完成<%= quest %>。", - "mustLevel": "You must be level <%= level %> to begin this quest.", + "mustLevel": "要开始这个任务,你需要达到等级<%= level %> 。", "mustLvlQuest": "你需要达到第<%= level %>级才能买这个任务!", - "mustInviteFriend": "To earn this quest, invite a friend to your Party. Invite someone now?", - "unlockByQuesting": "To earn this quest, complete <%= title %>.", + "mustInviteFriend": "要完成这个任务,你需要邀请一个朋友加入你的队伍。现在就发出邀请吗?", + "unlockByQuesting": "要完成这个任务,需要完成<%= title %> 。", "sureCancel": "你是否确定要放弃这个任务?将会失去所有接受的邀请。任务拥有者将保留持有的任务卷轴。", "sureAbort": "你是否确定要放弃这个任务?这样做会让你的所有队员都退出这个任务,并且消除所有进度。任务卷轴将会回到任务拥有者手上。", "doubleSureAbort": "你真的真的要这样做吗?要确保他们不会讨厌你一辈子哟!", "questWarning": "如果一个新的小队成员在任务开始前加入,他们会收到一个邀请。但是一旦任务开始了,新成员就无法再加入这个任务了。", - "bossRageTitle": "愤怒值", + "questWarningBroken": "如果一个新的小队成员在任务开始前加入,他们会收到一个邀请。但是一旦任务开始了,新成员就无法再加入这个任务了……", + "bossRageTitle": "怒气值", "bossRageDescription": "当这个条满的时候,boss会释放一个特殊攻击!", "startAQuest": "开始一个探索任务", "startQuest": "开始探索任务", "whichQuestStart": "你想要开始哪个探索任务?", - "getMoreQuests": "获取更多探索任务" + "getMoreQuests": "获取更多探索任务", + "unlockedAQuest": "你解锁了一个任务!", + "leveledUpReceivedQuest": "你达到了 第 <%= level %> 级 ,并且收到了一个任务卷轴!" } \ No newline at end of file diff --git a/common/locales/zh/questscontent.json b/common/locales/zh/questscontent.json index 9e506e63f3..6a310b609f 100644 --- a/common/locales/zh/questscontent.json +++ b/common/locales/zh/questscontent.json @@ -58,45 +58,45 @@ "questSpiderBoss": "蜘蛛", "questSpiderDropSpiderEgg": "蜘蛛 (蛋)", "questSpiderUnlockText": "解锁蜘蛛蛋购买功能", - "questVice1Text": "Vice, Part 1: Free Yourself of the Dragon's Influence", + "questVice1Text": "维斯,第1部分:逃出恶习之龙的控制", "questVice1Notes": "

传言说,有一个可怕的恶魔藏身于Habitica山的洞穴中。他可以击溃所有人的意志,让所有接近这片土地的勇者们染上恶习并变得懒惰!这个野兽由巨大的力量和阴影组成,并化身为一条奸诈的阴影巨龙——恶习之龙。勇敢的Habiteers,一起站出来,击败这个邪恶的怪物。但是,你一定要相信自己能抵抗他巨大的邪恶之力。

恶习第1部:

小心不要让他控制你的意志,不然你怎么和他战斗?不要成为懒惰和恶习的牺牲品!努力与巨龙的力量对抗吧,逃出他邪恶之力的影响!

", "questVice1Boss": "恶习之龙的阴影", "questVice1DropVice2Quest": "恶习之龙第2部 (卷轴)", - "questVice2Text": "Vice, Part 2: Find the Lair of the Wyrm", + "questVice2Text": "维斯,第2部分:寻找巨龙的巢穴", "questVice2Notes": "当你挣脱了恶习的控制,你感觉到一股你已然忘却的力量涌回了你的体内。带着必胜的信念,你的队伍又一次充满自信的踏上了前往Habitica山的路。你们在山洞的入口停了下来。从洞里不断涌出漆黑的暗影,像雾一样笼罩着洞口。洞里漆黑一片,伸手不见五指。从灯笼里发出的光根本无法触及暗影笼罩的区域。据说只有用魔力点亮的光可以渗入巨龙的阴霾中。如果能找到足够多的神光水晶,你就可以找到去巨龙那里的路了。", "questVice2CollectLightCrystal": "神光水晶", "questVice2DropVice3Quest": "恶习之龙第3部 (卷轴)", - "questVice3Text": "Vice, Part 3: Vice Awakens", + "questVice3Text": "恶习之龙,第3部:恶习缓醒", "questVice3Notes": "在不断的努力之下,你的队伍终于发现了恶习之龙的巢穴.这个庞大的怪物用厌恶的眼神盯着你的队伍.黑暗的漩涡围绕着你们,一个声音在你们的脑海中耳语.“又有更多愚蠢的Habitica居民来阻止我了吗?有意思.你们会后悔来到这里的.”这只长满鳞片的巨物抬起了头,回过身来准备攻击.你们的机会来了!尽你们所能,最后一次击败恶习吧!", "questVice3Completion": "阴影从洞穴中消散,一切归于沉寂。你们做到了!你们打败了恶习!你和你的队伍终于可以松一口气了。勇敢的Habiteers,尽情享受胜利的喜悦吧,但是请铭记你在打败恶习的过程中学到的一切,继续向前迈进吧。还有更多的习惯等着你,还有更凶猛的恶魔需要征服!", "questVice3Boss": "阴影恶习之龙", "questVice3DropWeaponSpecial2": "Stephen Weber的龙矛", "questVice3DropDragonEgg": "龙 (宠物蛋)", "questVice3DropShadeHatchingPotion": "深色孵化药水", - "questMoonstone1Text": "The Moonstone Chain, Part 1: The Moonstone Chain", + "questMoonstone1Text": "月长石顶链第1部:月长石顶链", "questMoonstone1Notes": "

一个可怕的麻烦困扰着Habiticans.已经消失很久的坏习惯回来复仇了.盘子没有清洗,课本很长时间没有看,拖延症开始猖獗!


你跟踪着你自己的一些归来的坏习惯,来到了淤塞之沼,并发现了这一切的元凶:可怕的死灵巫师,雷茜德维特.你冲了进去,挥舞着你的武器,但是它们都穿过了她幽灵一般的身体,没有造成任何伤害.


\"别费劲儿了,\"她用粗糙刺耳的声音嘶嘶得说.\"没有月长石项链的话,没有什么可以伤害我--而且宝石大师@aurakami很久以前就将月长石分散到了Habitica的各处!\"虽然你气喘吁吁的撤退了...但是你知道你需要做什么.

", "questMoonstone1CollectMoonstone": "月长石", "questMoonstone1DropMoonstone2Quest": "月长石项链第2部:再犯巫师 (卷轴)", - "questMoonstone2Text": "The Moonstone Chain, Part 2: Recidivate The Necromancer", + "questMoonstone2Text": "月亮石之链,第2部分:再犯亡灵法师", "questMoonstone2Notes": "

勇敢的武器铸造师@Inventrix帮你将附魔的月长石铸造成了一条项链.你现在已经准备好面对雷茜德维特了,但是当你进入淤塞之沼的时候,感觉寒气逼人.


腐朽的气息在你的耳边低语.\"又回来了?真令人高兴啊...\"你冲向前去,猛地刺出,在月长石项链的光芒下,你的武器击中了她的肉体.\"你再次将我与这个世界束缚在了一起,\"雷茜德维特咆哮着,\"而且这次该是你离开这个世界了!\"

", "questMoonstone2Boss": "死灵法师", "questMoonstone2DropMoonstone3Quest": "月长石项链第3部:再犯改造 (卷轴)", - "questMoonstone3Text": "The Moonstone Chain, Part 3: Recidivate Transformed", + "questMoonstone3Text": "月长石顶链,第3部:再犯改造", "questMoonstone3Notes": "

再犯蜷缩在地上,你用月长石项链给她致命一击.可怕的事情发生了,她抓住了宝石,眼中闪耀着胜利的火焰.


\"愚蠢的生物!”她喊道.\"这些月长石的确能够让我回复成物质形态,但是并不像你想象的那样.当满月在黑暗中变圆的时候,我的力量也会变得强大,我从阴影之中召唤了你们最为恐惧的家伙!\"


一股浓烈的雾从沼泽中升起,雷茜德维特的身体扭曲变形成了让人恐惧的形状--恶习的不死之身,恐惧的再生了.

", "questMoonstone3Completion": "

当不死巨龙倒下时,你的呼吸变得困难,汗水刺激着你的眼睛。 再犯的遗体风化成薄薄的灰雾, 当清风吹拂时飘散了。你听到Habitican们一劳永逸地打败他们的坏习惯时发出的一阵遥远悠长的呼喊。这时,驯兽师


@Baconsaur 骑着狮鹫从天空中俯冲下来,“我在天空中看到了你战斗的尾声,我被深深感动了。请拿上这件附魔了的长袍——你的勇敢诉说着你高尚的心灵,我相信这是理所应当拥有的。”

", "questMoonstone3Boss": "死者-恶习", "questMoonstone3DropRottenMeat": "腐肉 (食物)", "questMoonstone3DropZombiePotion": "僵尸孵化药水", - "questGoldenknight1Text": "The Golden Knight, Part 1: A Stern Talking-To", + "questGoldenknight1Text": "黄金骑士,第1部分:一场严肃的谈话", "questGoldenknight1Notes": "

黄金骑士得知了可怜的Habitican们的情况。没有将你们的每日任务全部完成?记录下一个不好的习惯?她会以此为理由来不断的骚扰你,教你怎样像她一样。她是完美的Habitican的经典范例,而你只不过是一个失败者。但是,虽然这的确有点儿不光彩!但是所有人都会犯错。那些犯了错的人也不应因此就受到这样消极的待遇。也许现在对你来说正是时候,从受到伤害的Habitican们那里收集一些证据,然后和黄金骑士来一场严肃的谈话

", "questGoldenknight1CollectTestimony": "证据", "questGoldenknight1DropGoldenknight2Quest": "黄金骑士项链第2部:暗淡的黄金 (卷轴)", - "questGoldenknight2Text": "The Golden Knight, Part 2: Gold Knight", + "questGoldenknight2Text": "黄金骑士,第2部:黄金骑士", "questGoldenknight2Notes": "

身上带着上百个Habitican们的证据,你最终面对着黄金骑士,开始一个接着一个地对她陈述Habitican们对她的不满,“还有@Pfeffernusse说你总是不停的讨价还价-”黄金骑士举起了她的手打断了你,嘲弄道,“拜托,这些人只不过是嫉妒我的成功。比起抱怨,他们更应该像我一样努力的工作!也许我应该向你展示一下,就像我一样,勤奋所能给予你的力量!”说着她举起狼牙棒,准备攻击你!

", "questGoldenknight2Boss": "黄金骑士", "questGoldenknight2DropGoldenknight3Quest": "黄金骑士项链第3部:钢铁骑士 (卷轴)", - "questGoldenknight3Text": "The Golden Knight, Part 3: The Iron Knight", - "questGoldenknight3Notes": "

@Jon Arinbjorn cries out to you to get your attention. In the aftermath of your battle, a new figure has appeared. A knight coated in stained-black iron slowly approaches you with sword in hand. The Golden Knight shouts to the figure, \"Father, no!\" but the knight shows no signs of stopping. She turns to you and says, \"I am sorry. I have been a fool, with a head too big to see how cruel I have been. But my father is crueler than I could ever be. If he isn't stopped he'll destroy us all. Here, use my morningstar and halt the Iron Knight!\"

", + "questGoldenknight3Text": "黄金骑士第3部:钢铁骑士", + "questGoldenknight3Notes": "

@Jon Arinbjorn的向你大喊试图引起你的注意。战斗之余,一个新的人物出现了。一个手中握着剑的骑士慢慢地走近了你——他身上穿着染上黑色血污的铁铠。黄金骑士对这个人大喊道:“爸爸,不!”但是骑士丝毫没有停止的迹象。她转身对你说:“我很抱歉。我一直是个大傻瓜,我太傲慢了,都不到自己曾有多残忍。但我父亲比过去的我还要残忍得多。如果他不停下来,他就会毁了我们所有人。来吧,拿着我的流星锤去阻止钢铁骑士吧!”

", "questGoldenknight3Completion": "

铿锵一声,钢铁骑士双膝跪地倒下了。“你太强了,” 他喘着粗气说, “今天,我被轻而易举地打败了。”黄金骑士向你走来,说道:“ 谢谢你。我相信我们都从与你的相遇中学会了谦逊。我会和我的父亲好好谈谈,并解释那些针对我们的怨言。也许是时候向其他Habitican道歉了。” 她考虑了一会儿,又向你转过身来,“拿上它吧,作为我们给你的礼物,我希望你能带上我的流星锤。它现在是你的了。”

", "questGoldenknight3Boss": "钢铁骑士", "questGoldenknight3DropHoney": "蜂蜜 (食物)", @@ -128,15 +128,15 @@ "questSeahorseBoss": "海种马", "questSeahorseDropSeahorseEgg": "海马 (宠物蛋)", "questSeahorseUnlockText": "解锁海马蛋购买功能。", - "questAtom1Text": "Attack of the Mundane, Part 1: Dish Disaster!", + "questAtom1Text": "平凡世界的攻势,卷1:碗碟的灾难", "questAtom1Notes": "你到了一个洗手池旁好好休息一下……但是洗手池被一堆没洗的盘子污染了!这怎么可以?你当然不能允许它在这种状态。你唯一能做的事情就是:洗掉这些盘子,拯救你的休息区!最好找些肥皂来清洗这团糟。要好多肥皂……", - "questAtom1CollectSoapBars": "块肥皂", - "questAtom1Drop": "The SnackLess Monster (Quest Scroll)", - "questAtom2Text": "Attack of the Mundane, Part 2: The SnackLess Monster", + "questAtom1CollectSoapBars": "几块肥皂", + "questAtom1Drop": "不吃零食的怪兽(任务卷轴)", + "questAtom2Text": "平凡世界的攻势:卷2:不吃零食的怪兽", "questAtom2Notes": "呼呼,盘子洗掉之后这个地方看起来舒服多了。也许,你终于可以找点乐子休息一下了。喔——那看起来有个披萨饼盒子浮在池子里。好吧,下一个清理一个是什么东西?哎呀,不是一个披萨盒那么简单!那个盒子突然从水里升高,原来是一个怪物的脑袋。不会吧!传说中的好吃懒做怪?据说它自从史前就一直隐藏在池子里:一个从废弃食品和垃圾中召唤出的古老Habit生物。呕!", "questAtom2Boss": "好吃懒做怪", - "questAtom2Drop": "The Laundromancer (Quest Scroll)", - "questAtom3Text": "Attack of the Mundane, Part 3: The Laundromancer", + "questAtom2Drop": "洗衣终结者(任务卷轴)", + "questAtom3Text": "平凡世界的攻势:,卷3:洗衣终结者", "questAtom3Notes": "好吃懒做怪发出震耳欲聋的哭声,五种甜美的奶酪从它的嘴里涌出。好吃懒做怪裂成了碎片。“是谁这么大的胆子!”从水面下传起一个声音。一个身穿长袍的蓝色身影从水中显现出来,头上还戴着一个马桶刷。他愤怒地宣告:“我乃洗衣终结者!你们真有胆子——洗了我可爱的脏盘子,摧毁了我的宠物,还穿着这么干净的衣服进入我的地盘。看我反洗衣魔法的威力,感受一下我的愤怒吧!\"", "questAtom3Completion": "邪恶的洗衣终结者被打败了!干净的衣服从空中飘下,堆在了你们身边。这一切看起来好极了。当你准备穿过这些新熨好的衣服时,一道金属的闪光吸引了你的注意——一个闪闪发光的头盔。已经无法知道这个闪亮的物品的原主人是谁了,但是当你把它带上时,你感觉到他的慷慨带给你的温暖。真可惜,他们忘了把自己的名字缝在边上。", "questAtom3Boss": "洗衣终结者", @@ -154,112 +154,124 @@ "questPenguinDropPenguinEgg": "企鹅 (宠物蛋)", "questPenguinUnlockText": "解锁企鹅蛋购买功能。", "questStressbeastText": "Stoïkalm草原的可恶压力兽", - "questStressbeastNotes": "完成每日任务和待办事项来攻击世界怪兽!未完成的每日任务会填充压力打击条。当压力打击条被填满,这个世界怪兽会攻击一个NPC。世界怪物不会攻击单一玩家或账户。只有没在酒馆休息的活跃账户才会被他们的未完成任务拖累.

~*~

我们首先听到的是脚步声,缓慢,却势如千军。玩家们一个一个走出门外去看,吓得连话都说不出来。

我们以前都见过压力兽,当然是那种在困难时刻才出现的恶毒的小东西。但这一个?这一个比大楼还高,一爪子能轻易撕碎巨龙。冰霜从它恶臭的皮毛上落下,而它嘶吼,冰爆把我们的屋顶都掀翻了。除了在古老的传说里,我们从没听说过这样可怕的怪物。

“注意了,玩家们!”SabreCat大喊,“注意在屋内隐蔽!这是可恶压力兽!”

“这肯定是几百年累积的压力形成的怪物!”Kiwibot说,紧闭酒馆的门窗。\"

“Stoïkalm Steppes,”Lemoness面色严峻,“那时我们觉得他们温和无害,但这些家伙肯定偷偷把他们的压力藏在什么地方了。一代一代演化成这个怪物。现在这个怪物重获自由,去袭击他们……还有我们!”

只有一个办法能赶跑一个压力兽,无论是可恶压力兽还是其他,那就是完成每日任务和待办事项去攻击它!让我们团聚在一起达到这个可怕的敌人——不过千万不要懈怠,否则未完成的每日任务可能会激怒它,而它会……", + "questStressbeastNotes": "完成每日任务和待办事项来攻击世界怪兽!未完成的每日任务会填充压力打击条。当压力打击条被填满,这个世界怪兽会攻击一个NPC。世界怪物不会攻击单一玩家或账户。只有没在酒馆休息的活跃账户才会被他们的未完成任务拖累.

~*~

我们首先听到的是脚步声,缓慢,却势如千军。玩家们一个一个走出门外去看,吓得连话都说不出来。

我们以前都见过压力兽,当然是那种在困难时刻才出现的恶毒的小东西。但这一个?这一个比大楼还高,一爪子能轻易撕碎巨龙。冰霜从它恶臭的皮毛上落下,而它嘶吼,冰爆把我们的屋顶都掀翻了。除了在古老的传说里,我们从没听说过这样可怕的怪物。

“注意了,玩家们!”剑齿虎大喊,“注意在屋内隐蔽!这是可恶压力兽!”

“这肯定是几百年累积的压力形成的怪物!”Kiwibot说,紧闭酒馆的门窗。\"

“是冷静平原,”Lemoness面色严峻,“那时我们觉得他们温和无害,但这些家伙肯定偷偷把他们的压力藏在什么地方了。一代一代演化成这个怪物。现在这个怪物重获自由,去袭击他们……还有我们!”

只有一个办法能赶跑一个压力兽,无论是可恶压力兽还是其他,那就是完成每日任务和待办事项去攻击它!让我们团聚在一起达到这个可怕的敌人——不过千万不要懈怠,否则未完成的每日任务可能会激怒它,而它会……", "questStressbeastBoss": "可恶压力兽", "questStressbeastBossRageTitle": "压力打击", "questStressbeastBossRageDescription": "当容量满了,可恶压力兽会对玩家进行压力打击!", "questStressbeastDropMammothPet": "长毛象 (宠物)", "questStressbeastDropMammothMount": "长毛象 (坐骑)", - "questStressbeastBossRageStables": "`Abominable Stressbeast uses STRESS STRIKE!`\n\nThe surge of stress heals Abominable Stressbeast!\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and their dark-red color has infuriated the Abominable Stressbeast and caused it to regain some of its health! The horrible creature lunges for the Stables, but Matt the Beast Master heroically leaps into the fray to protect the pets and mounts. The Stressbeast has seized Matt in its vicious grip, but at least it's distracted for the moment. Hurry! Let's keep our Dailies in check and defeat this monster before it attacks again!", - "questStressbeastBossRageBailey": "`Abominable Stressbeast uses STRESS STRIKE!`\n\nThe surge of stress heals Abominable Stressbeast!\n\nAhh!!! Our incomplete Dailies caused the Abominable Stressbeast to become madder than ever and regain some of its health! Bailey the Town Crier was shouting for citizens to get to safety, and now it has seized her in its other hand! Look at her, valiantly reporting on the news as the Stressbeast swings her around viciously... Let's be worthy of her bravery by being as productive as we can to save our NPCs!", - "questStressbeastBossRageGuide": "`Abominable Stressbeast uses STRESS STRIKE!`\n\nThe surge of stress heals Abominable Stressbeast!\n\nLook out! Justin the Guide is trying to distract the Stressbeast by running around its ankles, yelling productivity tips! The Abominable Stressbeast is stomping madly, but it seems like we're really wearing this beast down. I doubt it has enough energy for another strike. Don't give up... we're so close to finishing it off!", - "questStressbeastDesperation": "`Abominable Stressbeast reaches 500K health! Abominable Stressbeast uses Desperate Defense!`\n\nWe're almost there, Habiticans! With diligence and Dailies, we've whittled the Stressbeast's health down to only 500K! The creature roars and flails in desperation, rage building faster than ever. Bailey and Matt yell in terror as it begins to swing them around at a terrifying pace, raising a blinding snowstorm that makes it harder to hit.\n\nWe'll have to redouble our efforts, but take heart - this is a sign that the Stressbeast knows it is about to be defeated. Don't give up now!", - "questStressbeastCompletion": "The Abominable Stressbeast is DEFEATED!

We've done it! With a final bellow, the Abominable Stressbeast dissipates into a cloud of snow. The flakes twinkle down through the air as cheering Habiticans embrace their pets and mounts. Our animals and our NPCs are safe once more!

Stoïkalm is Saved!

SabreCat speaks gently to a small sabertooth. \"Please find the citizens of the Stoïkalm Steppes and bring them to us,\" he says. Several hours later, the sabertooth returns, with a herd of mammoth riders following slowly behind. You recognize the head rider as Lady Glaciate, the leader of Stoïkalm.

\"Mighty Habiticans,\" she says, \"My citizens and I owe you the deepest thanks, and the deepest apologies. In an effort to protect our Steppes from turmoil, we began to secretly banish all of our stress into the icy mountains. We had no idea that it would build up over generations into the Stressbeast that you saw! When it broke loose, it trapped all of us in the mountains in its stead and went on a rampage against our beloved animals.\" Her sad gaze follows the falling snow. \"We put everyone at risk with our foolishness. Rest assured that in the future, we will come to you with our problems before our problems come to you.\"

She turns to where @Baconsaur is snuggling with some of the baby mammoths. \"We have brought your animals an offering of food to apologize for frightening them, and as a symbol of trust, we will leave some of our pets and mounts with you. We know that you will all take care good care of them.\"", - "questStressbeastCompletionChat": "`The Abominable Stressbeast is DEFEATED!`\n\nWe've done it! With a final bellow, the Abominable Stressbeast dissipates into a cloud of snow. The flakes twinkle down through the air as cheering Habiticans embrace their pets and mounts. Our animals and our NPCs are safe once more!\n\n`Stoïkalm is Saved!`\n\nSabreCat speaks gently to a small sabertooth. \"Please find the citizens of the Stoïkalm Steppes and bring them to us,\" he says. Several hours later, the sabertooth returns, with a herd of mammoth riders following slowly behind. You recognize the head rider as Lady Glaciate, the leader of Stoïkalm.\n\n\"Mighty Habiticans,\" she says, \"My citizens and I owe you the deepest thanks, and the deepest apologies. In an effort to protect our Steppes from turmoil, we began to secretly banish all of our stress into the icy mountains. We had no idea that it would build up over generations into the Stressbeast that you saw! When it broke loose, it trapped all of us in the mountains in its stead and went on a rampage against our beloved animals.\" Her sad gaze follows the falling snow. \"We put everyone at risk with our foolishness. Rest assured that in the future, we will come to you with our problems before our problems come to you.\"\n\nShe turns to where @Baconsaur is snuggling with some of the baby mammoths. \"We have brought your animals an offering of food to apologize for frightening them, and as a symbol of trust, we will leave some of our pets and mounts with you. We know that you will all take care good care of them.\"", + "questStressbeastBossRageStables": "可恶压力兽使用了压力攻击!\n\n源源不断的压力治愈了可恶压力兽!\n\n噢,不!尽管我们竭尽所能,让一部分的日常远离了我们,但它们暗红色的体表激怒了可恶压力兽并恢复了它的一些生命!这个可怕的生物在马厩里横行肆虐,但驯兽师马特为了保护宠物与坐骑英勇地扑进了战斗中。压力兽用邪恶之握抓住了马特,但此刻正是他分心的时候,赶快啊!让我们在压力兽的下一次攻击到来之前控制好我们的日常!", + "questStressbeastBossRageBailey": "可恶压力兽使用了压力攻击!\n\n源源不断的压力治愈了可恶压力兽!\n\n噢,不!我们未能完成的日常任务让可恶压力兽变得前所未有的疯狂,并恢复了它的一些生命!街头公告员贝雷正在呼叫市民们钱去避难,然而这个怪物却抓住了她!看看她吧,一边承受着压力兽疯狂的甩晃一边勇敢地继续呼喊……让我们对得起她的勇敢,提高我们的效率,拯救我们的NPC!", + "questStressbeastBossRageGuide": "可恶压力兽使用了压力攻击!\n\n源源不断的压力治愈了可恶压力兽!\n\n 当心!向导贾斯汀正在试图绕着压力兽的脚来回跑,好吸引它的注意力,高喊着一些提高工作效率的点子!可恶压力兽疯狂地跺脚,但似乎我们真的已经开始让它精疲力竭了。我怀疑它还有没有力气进行下一次的攻击。不要放弃……我们就快要干掉它了!", + "questStressbeastDesperation": "可恶压力兽达到了500K的血量!可恶压力兽使用了绝望防御!\n\n我们就快做到了!通过勤勉地完成我们的日常,我们已经让压力兽的血量下降到了500K!这头畜生在绝望中吼叫挣扎,愤怒积累得越来越快。贝蕾和马特吓得大叫起来,怪物开始以吓人的速度摇晃他们,并激起一阵雪暴,遮住人们的视线,让人们难以攻击。\n\n我们必须加倍努力,并保持信心 -压力兽也知道自己快完蛋了。不要放弃!", + "questStressbeastCompletion": "可恶压力兽被打-败-了!

我们成功了!随着最后一波攻击,可恶压力兽化作了一团雪云,雪花纷纷飘落,就好像在向着拥抱着宠物和坐骑的Habitica人道喜。我们的动物和NPC们再一次安全了!

冷静镇得救了!

剑齿虎温柔地对一颗小剑齿说。“请找到冷静平原的居民们,把他们带回来。”几个小时以后,小剑齿回来了,后面跟着一群猛犸象骑士。你认出了领头的就是冰霜女士,冷静镇的领袖。

“强大的Habitica人,”她说,“我的人民和我向你们致以最深切的感谢,以及最沉重的道歉。为了保护我们的平原不受焦虑影响,我们悄悄地将我们的压力放逐到冰山之中,我们不知道几个世纪之后它们会变成这样的压力兽。它获得自由时,把我们都困在山里,攻击我们亲爱的动物们。“她忧伤地看着飘落的雪花,”我们的愚蠢将所有人置于危险之中。休息能够确保在问题找上门来之前,我们能和你一起解决它们。“

她转向一边,@Baconsaur 正在和一群猛犸宝宝嬉戏。“我们给你的动物们带来了食物,对惊吓了他们表示抱歉,另外,作为信任的象征,我们会留给你一些我们的宠物和坐骑。我们知道你一定能好好照顾它们。”", + "questStressbeastCompletionChat": "可恶压力兽被打-败-了!\n\n我们成功了!随着最后一波攻击,可恶压力兽化作了一团雪云,雪花纷纷飘落,就好像在向着拥抱着宠物和坐骑的Habitica人道喜。我们的动物和NPC们再一次安全了!\n\n冷静镇得救了!\n\n剑齿虎温柔地对一颗小剑齿说。“请找到冷静平原的居民们,把他们带回来。”几个小时以后,小剑齿回来了,后面跟着一群猛犸象骑士。你认出了领头的就是冰霜女士,冷静镇的领袖。\n\n“强大的Habitica人,”她说,“我的人民和我向你们致以最深切的感谢,以及最沉重的道歉。为了保护我们的平原不受焦虑影响,我们悄悄地将我们的压力放逐到冰山之中,我们不知道几个世纪之后它们会变成这样的压力兽。它获得自由时,把我们都困在山里,攻击我们亲爱的动物们。“她忧伤地看着飘落的雪花,”我们的愚蠢将所有人置于危险之中。休息能够确保在问题找上门来之前,我们能和你一起解决它们。“\n\n她转向一边,@Baconsaur 正在和一群猛犸宝宝嬉戏。“我们给你的动物们带来了食物,对惊吓了他们表示抱歉,另外,作为信任的象征,我们会留给你一些我们的宠物和坐骑。我们知道你一定能好好照顾它们。”", "questTRexText": "恐龙王", - "questTRexNotes": "Now that ancient creatures from the Stoïkalm Steppes are roaming throughout all of Habitica, @Urse has decided to adopt a full-grown Tyrannosaur. What could go wrong?

Everything.", - "questTRexCompletion": "The wild dinosaur finally stops its rampage and settles down to make friends with the giant roosters. @Urse beams down at it. \"They're not such terrible pets, after all! They just need a little discipline. Here, take some Tyrannosaur eggs for yourself.\"", - "questTRexBoss": "Flesh Tyrannosaur", - "questTRexUndeadText": "The Dinosaur Unearthed", - "questTRexUndeadNotes": "As the ancient dinosaurs from the Stoïkalm Steppes roam through Habit City, a cry of terror emanates from the Grand Museum. @Baconsaur shouts, \"The Tyrannosaur skeleton in the museum is stirring! It must have sensed its kin!\" The bony beast bares its teeth and clatters towards you. How can you defeat a creature that is already dead? You'll have to strike fast before it heals itself!", - "questTRexUndeadCompletion": "The Tyrannosaur's glowing eyes grow dark, and it settles back onto its familiar pedestal. Everyone sighs with relief. \"Look!\" @Baconsaur says. \"Some of the fossilized eggs are shiny and new! Maybe they'll hatch for you.\"", - "questTRexUndeadBoss": "Skeletal Tyrannosaur", - "questTRexUndeadRageTitle": "Skeleton Healing", - "questTRexUndeadRageDescription": "This bar fills when you don't complete your Dailies. When it is full, the Skeletal Tyrannosaur will heal 30% of its remaining health!", - "questTRexUndeadRageEffect": "`Skeletal Tyrannosaur uses SKELETON HEALING!`\n\nThe monster lets forth an unearthly roar, and some of its damaged bones knit back together!", + "questTRexNotes": "现在来自冷静平原的远古生物们发出的吼声已经响彻Habitica。@Urse 决定收养一只成熟的霸王龙。有什么不对吗?

什么都不对。", + "questTRexCompletion": "这只野生恐龙终于停止愤怒,坐下来和巨鸡友好相处了。@Urse 给了它一个笑容。“归根结底,它们不是那么可怕的宠物!他们只需要一点纪律管教。喏,自己拿一些霸王龙蛋吧。”", + "questTRexBoss": "血肉霸王龙", + "questTRexUndeadText": "恐龙大发现", + "questTRexUndeadNotes": "来自冷静平原的远古生物们发出的吼声在Habit市回想,大博物馆中发出了一声恐惧的哀嚎。@Baconsaur 喊道:“博物馆里的霸王龙骨架在动!它一定感觉到了自己的同类!”全身白骨的怪物量除了牙齿,嚓嚓地走向了你。你如何打败一只已经死了的生物?必须在它治疗自己之前快速攻击!", + "questTRexUndeadCompletion": "霸王龙闪亮的瞳中的光熄灭了,然后坐回到了它熟悉的台子上。每个人都如释重负地叹了口气。\"看!\"@灯塔龙说。\"你的化石蛋里面有几个闪亮而崭新的!也许它们能为你孵出什么。\"", + "questTRexUndeadBoss": "骷髅霸王龙", + "questTRexUndeadRageTitle": "骷髅治疗", + "questTRexUndeadRageDescription": "在你未完成每日任务的时候这个进度条的进度会前进。当他填满的时候骷髅霸王龙会回复30% of 它剩余生命值。", + "questTRexUndeadRageEffect": "骷髅霸王龙使用了骷髅治疗!\n那个怪兽发出了一声怪异的咆哮,然后它破损的骨架修复了一部分!", "questTRexDropTRexEgg": "霸王龙 (宠物蛋)", "questTRexUnlockText": "解锁霸王龙蛋购买功能。", - "questRockText": "Escape the Cave Creature", - "questRockNotes": "Crossing Habitica's Meandering Mountains with some friends, you make camp one night in a beautiful cave laced with shining minerals. But when you wake up the next morning, the entrance has disappeared, and the floor of the cave is shifting underneath you.

\"The mountain's alive!\" shouts your companion @pfeffernusse. \"These aren't crystals - these are teeth!\"

@Painter de Cluster grabs your hand. \"We'll have to find another way out - stay with me and don't get distracted, or we could be trapped in here forever!\"", - "questRockBoss": "Crystal Colossus", - "questRockCompletion": "Your diligence has allowed you to find a safe path through the living mountain. Standing in the sunshine, your friend @intune notices something glinting on the ground by the cave's exit. You stoop to pick it up, and see that it's a small rock with a vein of gold running through it. Beside it are a number of other rocks with rather peculiar shapes. They almost look like... eggs?", - "questRockDropRockEgg": "Rock (Egg)", - "questRockUnlockText": "Unlocks purchasable rock eggs in the Market", + "questRockText": "逃离山洞生物", + "questRockNotes": "你正在和朋友们一起穿越Habitica绵延山。一天晚上,你在一个闪烁着矿石光辉的岩洞里扎了营,但第二天早上醒来时,入口已经不见了,而脚下的地面正在提升。

“大山活了!”你的同伴@pfeffernusse 喊道,“这不是晶石,这是牙齿!”

@Painter de Cluster 抓住了你的手:“我们得另找一条路出去——跟着我不要跑开,不然我们会永远被困在这里!\"", + "questRockBoss": "水晶巨像", + "questRockCompletion": "你的勤勉让你在这座活山里找到了一条安全的通路。站在阳光之下,你的朋友@intune 注意到有东西正在山洞出口附近的地上滚动。你走了过去并捡起了一个,发现那是一块透着一点金色矿脉的小石头,旁边还有许多带着特定斑点的石头。它们看上去很像……蛋?", + "questRockDropRockEgg": "岩石(蛋)", + "questRockUnlockText": "在市场里解锁岩石蛋的购买功能", "questBunnyText": "杀人兔", "questBunnyNotes": "历经艰辛,你终于到达了拖延山顶峰,站在疏忽堡垒那壮观的大门之前。你读了石上铭文。“里面居住的生物是你恐惧的化身,是你无所作为的根源。敲开门,直面你心底的恶魔!”你浑身战栗,想象里面会是多么可怕。逃跑的冲动在你耳边轻语,反正之前你也退缩过多次。@Draayder 把你拉了回来。“冷静点,我的朋友!这个时机终于到来!你必须得上!”

你敲了敲门,门就向内打开。昏暗之中,你听到整耳欲聋的吼叫,你拿起了武器。", "questBunnyBoss": "杀人兔", "questBunnyCompletion": "随着你的最后一击,杀人兔缓缓沉入地面。一阵闪闪发光的迷雾从她身上升起,她变回了一只小兔子……而非你之前看到那残暴的野兽。她的小鼻子可爱地动了动,随后就跳走了,留下了几个蛋。@Gully 大笑道:“拖延山就是会让小小的挑战都看上去高不可攀。让我们拿上这些蛋回家吧。”", "questBunnyDropBunnyEgg": "兔(宠物蛋)", "questBunnyUnlockText": "解锁兔子蛋购买功能", - "questSlimeText": "The Jelly Regent", - "questSlimeNotes": "As you work on your tasks, you notice you are moving slower and slower. \"It's like walking through molasses,\" @Leephon grumbles. \"No, like walking through jelly!\" @starsystemic says. \"That slimy Jelly Regent has slathered his stuff all over Habitica. It's gumming up the works. Everybody is slowing down.\" You look around. The streets are slowly filling with clear, colorful ooze, and Habiticans are struggling to get anything done. As others flee the area, you grab a mop and prepare for battle!", - "questSlimeBoss": "Jelly Regent", - "questSlimeCompletion": "With a final jab, you trap the Jelly Regent in an over-sized donut, rushed in by @Overomega, @LordDarkly, and @Shaner, the quick-thinking leaders of the pastry club. As everyone is patting you on the back, you feel someone slip something into your pocket. It’s the reward for your sweet success: three Marshmallow Slime eggs.", + "questSlimeText": "果冻摄政王", + "questSlimeNotes": "正当你在努力完成你的任务时,你注意到你移动得越来越慢了。”就像是走在糖浆里一样,“@Leephon抱怨道。”不,像是在果冻里穿行!”@starsystemic说:”那黏糊糊的果冻摄政王已经彻底到达Habitica了。它扰乱了我们的工作,每个人都在越来越慢。“你环顾四周。街道正慢慢地被五颜六色、炫彩夺目的淤泥填充着,Habiticans做任何事情都变得艰难起来。当其他人逃离该地区的时候,你抓起了一个拖把,准备战斗!", + "questSlimeBoss": "果冻摄政王", + "questSlimeCompletion": "伴随着最后一个猛刺,你将果冻摄政王引进了你的超大甜甜圈陷阱里,糕点俱乐部的三个思维敏捷的领导者@overomega,@LordDarkly,和@Shaner冲了进来。每个人都拍着你的背,你觉得有人将什么东西滑进了你的口袋里。这是对你这次甜蜜胜利的奖励:三个棉花糖泥蛋。", "questSlimeDropSlimeEgg": "棉花糖烂泥(蛋)", - "questSlimeUnlockText": "Unlocks purchasable slime eggs in the Market", - "questSheepText": "The Thunder Ram", - "questSheepNotes": "As you wander the rural Taskan countryside with friends, taking a \"quick break\" from your obligations, you find a cozy yarn shop. You are so absorbed in your procrastination that you hardly notice the ominous clouds creep over the horizon. \"I've got a ba-a-a-ad feeling about this weather,\" mutters @Misceo, and you look up. The stormy clouds are swirling together, and they look a lot like a... \"We don't have time for cloud-gazing!\" @starsystemic shouts. \"It's attacking!\" The Thunder Ram hurtles forward, slinging bolts of lightning right at you!", - "questSheepBoss": "Thunder Ram", - "questSheepCompletion": "Impressed by your diligence, the Thunder Ram is drained of its fury. It launches three huge hailstones in your direction, and then fades away with a low rumble. Upon closer inspection, you discover that the hailstones are actually three fluffy eggs. You gather them up, and then stroll home under a blue sky.", + "questSlimeUnlockText": "解锁粘液蛋购买功能", + "questSheepText": "雷霆公羊", + "questSheepNotes": "在你和朋友一起到任务汗国的乡村郊外散步时,你打算花很短的时间开个小差,于是发现了一间毛纺店,于是你陷入了拖延症不可自拔,都没有发现天际出现了不祥的乌云。“我有个天气要不……不……不好的感觉。” @Misceo 喃喃的说,你抬起了头,雷雨云正聚在一起翻滚,而且看起来很像一群……“我们没空看云瞎想了!” @starsystemic 喊道,“它要打过来了!”雷霆公羊向前撞去,向你甩去一道一道的闪电!", + "questSheepBoss": "雷霆公羊", + "questSheepCompletion": "雷霆公羊被你的用功震撼了,它的愤怒已经耗尽,最终它向你甩来三个巨大的冰雹,然后随着低沉的轰隆声逐渐消失。仔细观察以后你发现这些冰雹其实是三个毛茸茸的蛋。你把他们收了起来,在碧蓝的天空下向家走去。", "questSheepDropSheepEgg": "羊(蛋)", - "questSheepUnlockText": "Unlocks purchasable sheep eggs in the Market", - "questKrakenText": "The Kraken of Inkomplete", - "questKrakenNotes": "It's a warm, sunny day as you sail across the Inkomplete Bay, but your thoughts are clouded with worries about everything that you still need to do. It seems that as soon as you finish one task, another crops up, and then another...

Suddenly, the boat gives a horrible jolt, and slimy tentacles burst out of the water on all sides! \"We're being attacked by the Kraken of Inkomplete!\" Wolvenhalo cries.

\"Quickly!\" Lemoness calls to you. \"Strike down as many tentacles and tasks as you can, before new ones can rise up to take their place!\"", - "questKrakenBoss": "The Kraken of Inkomplete", - "questKrakenCompletion": "As the Kraken flees, several eggs float to the surface of the water. Lemoness examines them, and her suspicion turns to delight. \"Cuttlefish eggs!\" she says. \"Here, take them as a reward for everything you've completed.\"", - "questKrakenDropCuttlefishEgg": "Cuttlefish (Egg)", - "questKrakenUnlockText": "Unlocks purchasable cuttlefish eggs in the Market", - "questWhaleText": "Wail of the Whale", + "questSheepUnlockText": "解锁绵羊蛋购买功能", + "questKrakenText": "未完成海妖", + "questKrakenNotes": "这是一个温暖充满阳光的日子,你正在未完成海湾驾船穿行,脑子里充满了对那些你还没能去做完的事情的忧虑,好像你做完一个,就会出现另外一个……,

突然间,船底一阵猛震,湿滑的触手迫害而出,从船两边爬了上来!“我们被攻击了!是未完成海妖!“Wolvenhalo喊道。

”快!“柠檬小姐对你喊道,”尽量多打退一些触手,还有你的任务,不然新的就会再升上来填补它们的空缺!“", + "questKrakenBoss": "象征着未完成的北海巨妖", + "questKrakenCompletion": "海怪逃之夭夭了,留下几枚蛋在海面上漂浮着。柠檬小姐检查了一下,她的疑问转为欣喜:“是墨鱼蛋!”她说,“这儿,拿几个作为你完成的任务的奖励吧。”", + "questKrakenDropCuttlefishEgg": "墨鱼(蛋)", + "questKrakenUnlockText": "解锁墨鱼蛋购买功能", + "questWhaleText": "鲸之哀嚎", "questWhaleNotes": "You arrive at the Diligent Docks, hoping to take a submarine to watch the Dilatory Derby. Suddenly, a deafening bellow forces you to stop and cover your ears. \"Thar she blows!\" cries Captain @krazjega, pointing to a huge, wailing whale. \"It's not safe to send out the submarines while she's thrashing around!\"

\"Quick,\" calls @UncommonCriminal. \"Help me calm the poor creature so we can figure out why she's making all this noise!\"", - "questWhaleBoss": "Wailing Whale", + "questWhaleBoss": "哀嚎的鲸鱼", "questWhaleCompletion": "After much hard work, the whale finally ceases her thunderous cry. \"Looks like she was drowning in waves of negative habits,\" @zoebeagle explains. \"Thanks to your consistent effort, we were able to turn the tides!\" As you step into the submarine, several whale eggs bob towards you, and you scoop them up.", - "questWhaleDropWhaleEgg": "Whale (Egg)", - "questWhaleUnlockText": "Unlocks purchasable whale eggs in the Market", - "questDilatoryDistress1Text": "Dilatory Distress, Part 1: Message in a Bottle", + "questWhaleDropWhaleEgg": "鲸鱼(蛋)", + "questWhaleUnlockText": "解锁鲸鱼蛋购买功能", + "questDilatoryDistress1Text": "每日挑战,卷1:漂流瓶中的信", "questDilatoryDistress1Notes": "A message in a bottle arrived from the newly rebuilt city of Dilatory! It reads: \"Dear Habiticans, we need your help once again. Our princess has disappeared and the city is under siege by some unknown watery demons! The mantis shrimps are holding the attackers at bay. Please aid us!\" To make the long journey to the sunken city, one must be able to breathe water. Fortunately, the alchemists @Benga and @hazel can make it all possible! You only have to find the proper ingredients.", "questDilatoryDistress1Completion": "You don the the finned armor and swim to Dilatory as quickly as you can. The merfolk and their mantis shrimp allies have managed to keep the monsters outside the city for the moment, but they are losing. No sooner are you within the castle walls than the horrifying siege descends!", - "questDilatoryDistress1CollectFireCoral": "Fire Coral", - "questDilatoryDistress1CollectBlueFins": "Blue Fins", + "questDilatoryDistress1CollectFireCoral": "烈焰珊瑚", + "questDilatoryDistress1CollectBlueFins": "湛蓝之鳍", "questDilatoryDistress1DropArmor": "Finned Oceanic Armor (Armor)", - "questDilatoryDistress2Text": "Dilatory Distress, Part 2: Creatures of the Crevasse", + "questDilatoryDistress2Text": "每日挑战,卷2:裂缝中的生物", "questDilatoryDistress2Notes": "The siege can be seen from miles away: thousands of disembodied skulls rushing through a portal in the crevasse walls and making their way towards Dilatory.

When you meet King Manta in his war room, his eyes seem sunken, and his face is worried. \"My daughter Adva disappeared into the Dark Crevasse just before this siege began. Please find her and bring her back home safely! I will lend you my Fire Coral Circlet to aid you. If you succeed, it is yours.\"", "questDilatoryDistress2Completion": "You vanquish the nightmarish horde of skulls, but you feel no closer to finding Adva. You speak to @Kiwibot, the royal tracker, to see if she has any ideas. \"The mantis shrimps that defend the city must have seen Adva escape,\" @Kiwibot says. \"Try following them into the Dark Crevasse.\"", - "questDilatoryDistress2Boss": "Water Skull Swarm", - "questDilatoryDistress2RageTitle": "Swarm Respawn", - "questDilatoryDistress2RageDescription": "Swarm Respawn: This bar fills when you don't complete your Dailies. When it is full, the Water Skull Swarm will heal 30% of its remaining health!", + "questDilatoryDistress2Boss": "水中的头骨群", + "questDilatoryDistress2RageTitle": "蜂群的重生", + "questDilatoryDistress2RageDescription": "头骨群的重生:在你未完成每日任务的时候这个进度条的进度会前进。当他填满的时候水中的头骨群会回复30% of 它剩余生命值。", "questDilatoryDistress2RageEffect": "`Water Skull Swarm uses SWARM RESPAWN!`\n\nEmboldened by their victories, more skulls pour forth from the crevasse, bolstering the swarm!", - "questDilatoryDistress2DropSkeletonPotion": "Skeleton Hatching Potion", - "questDilatoryDistress2DropCottonCandyBluePotion": "Cotton Candy Blue Hatching Potion", - "questDilatoryDistress2DropHeadgear": "Fire Coral Circlet (Headgear)", + "questDilatoryDistress2DropSkeletonPotion": "骷髅孵化药水", + "questDilatoryDistress2DropCottonCandyBluePotion": "蓝色棉花糖孵化药水", + "questDilatoryDistress2DropHeadgear": "烈焰珊瑚头环(头饰)", "questDilatoryDistress3Text": "Dilatory Distress, Part 3: Not a Mere Maid", "questDilatoryDistress3Notes": "You follow the mantis shrimps deep into the Crevasse, and discover an underwater fortress. Princess Adva, escorted by more watery skulls, awaits you inside the main hall. \"My father has sent you, has he not? Tell him I refuse to return. I am content to stay here and practice my sorcery. Leave now, or you shall feel the wrath of the ocean's new queen!\" Adva seems very adamant, but as she speaks you notice a strange, ruby pendant on her neck glowing ominously... Perhaps her delusions would cease should you break it?", "questDilatoryDistress3Completion": "Finally, you manage to pull the bewitched pendant from Adva's neck and throw it away. Adva clutches her head. \"Where am I? What happened here?\" After hearing your story, she frowns. \"This necklace was given to me by a strange ambassador - a lady called 'Tzina'. I don't remember anything after that!\"

Back at Dilatory, Manta is overjoyed by your success. \"Allow me to reward you with this trident and shield! I ordered them from @aiseant and @starsystemic as a gift for Adva, but... I'd rather not put weapons in her hands any time soon.\"", "questDilatoryDistress3Boss": "Adva, the Usurping Mermaid", - "questDilatoryDistress3DropFish": "Fish (Food)", - "questDilatoryDistress3DropWeapon": "Trident of Crashing Tides (Weapon)", - "questDilatoryDistress3DropShield": "Moonpearl Shield (Shield-Hand Item)", - "questCheetahText": "Such a Cheetah", + "questDilatoryDistress3DropFish": "鱼(食物)", + "questDilatoryDistress3DropWeapon": "咆哮海浪的三叉戟(武器)", + "questDilatoryDistress3DropShield": "玉轮明珠盾(手持防御物品)", + "questCheetahText": "真是一个猎豹", "questCheetahNotes": "As you hike across the Sloensteadi Savannah with your friends @PainterProphet, @tivaquinn, @Unruly Hyena, and @Crawford, you're startled to see a Cheetah screeching past with a new Habitican clamped in its jaws. Under the Cheetah's scorching paws, tasks burn away as though complete -- before anyone has the chance to actually finish them! The Habitican sees you and yells, \"Please help me! This Cheetah is making me level too quickly, but I'm not getting anything done. I want to slow down and enjoy the game. Make it stop!\" You fondly remember your own fledgling days, and know that you have to help the newbie by stopping the Cheetah!", "questCheetahCompletion": "The new Habitican is breathing heavily after the wild ride, but thanks you and your friends for your help. \"I'm glad that Cheetah won't be able to grab anyone else. It did leave some Cheetah eggs for us, so maybe we can raise them into more trustworthy pets!\"", - "questCheetahBoss": "Cheetah", - "questCheetahDropCheetahEgg": "Cheetah (Egg)", - "questCheetahUnlockText": "Unlocks purchasable Cheetah eggs in the Market", + "questCheetahBoss": "猎豹", + "questCheetahDropCheetahEgg": "猎豹(蛋)", + "questCheetahUnlockText": "解锁猎豹蛋购买功能", "questHorseText": "Ride the Night-Mare", "questHorseNotes": "While relaxing in the Tavern with @beffymaroo and @JessicaChase, the talk turns to good-natured boasting about your adventuring accomplishments. Proud of your deeds, and perhaps getting a bit carried away, you brag that you can tame any task around. A nearby stranger turns toward you and smiles. One eye twinkles as he invites you to prove your claim by riding his horse.\nAs you all head for the stables, @UncommonCriminal whispers, \"You may have bitten off more than you can chew. That's no horse - that's a Night-Mare!\" Looking at its stamping hooves, you begin to regret your words...", "questHorseCompletion": "It takes all your skill, but finally the horse stamps a couple of hooves and nuzzles you in the shoulder before allowing you to mount. You ride briefly but proudly around the Tavern grounds while your friends cheer. The stranger breaks into a broad grin.\n\"I can see that was no idle boast! Your determination is truly impressive. Take these eggs to raise horses of your own, and perhaps we'll meet again one day.\" You take the eggs, the stranger tips his hat... and vanishes.", - "questHorseBoss": "Night-Mare", - "questHorseDropHorseEgg": "Horse (Egg)", - "questHorseUnlockText": "Unlocks purchasable Horse eggs in the Market", - "questBurnoutText": "Burnout and the Exhaust Spirits", + "questHorseBoss": "夜魇", + "questHorseDropHorseEgg": "马(蛋)", + "questHorseUnlockText": "解锁购买马蛋功能", + "questBurnoutText": "湮灭怪和被耗尽的灵魂", "questBurnoutNotes": "It is well past midnight, still and stiflingly hot, when Redphoenix and scout captain Kiwibot abruptly burst through the city gates. \"We need to evacuate all the wooden buildings!\" Redphoenix shouts. \"Hurry!\"

Kiwibot grips the wall as she catches her breath. \"It's draining people and turning them into Exhaust Spirits! That's why everything was delayed. That's where the missing people have gone. It's been stealing their energy!\"

\"'It'?'\" asks Lemoness.

And then the heat takes form.

It rises from the earth in a billowing, twisting mass, and the air chokes with the scent of smoke and sulphur. Flames lick across the molten ground and contort into limbs, writhing to horrific heights. Smoldering eyes snap open, and the creature lets out a deep and crackling cackle.

Kiwibot whispers a single word.

\"Burnout.\"", - "questBurnoutCompletion": "Burnout is DEFEATED!

With a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.

Ian, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!

\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!

One of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"

Her tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"

She claps her hands. \"Now - let's celebrate!\"", - "questBurnoutCompletionChat": "`Burnout is DEFEATED!`\n\nWith a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.\n\nIan, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!\n\n\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!\n\nOne of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"\n\nHer tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"\n\nShe claps her hands. \"Now - let's celebrate!\"\n\nAll Habiticans receive:\n\nPhoenix Pet\nPhoenix Mount\nAchievement: Savior of the Flourishing Fields\nBasic Candy\nVanilla Candy\nSand Candy\nCinnamon Candy\nChocolate Candy\nRotten Candy\nSour Pink Candy\nSour Blue Candy\nHoney Candy", - "questBurnoutBoss": "Burnout", - "questBurnoutBossRageTitle": "Exhaust Strike", - "questBurnoutBossRageDescription": "When this gauge fills, Burnout will unleash its Exhaust Strike on Habitica!", - "questBurnoutDropPhoenixPet": "Phoenix (Pet)", - "questBurnoutDropPhoenixMount": "Phoenix (Mount)", + "questBurnoutCompletion": "湮灭怪被击败了!

伴随着一个美妙的、柔软的叹息,湮灭怪慢慢地释放了曾被它用来助长了火灾的热情能量。当怪兽静静地蜷缩最终化为灰烬时,其偷来的能量在空中闪闪发光,使被耗尽的精力们恢复了活力,回到了他们真实的模样。

岚,丹尼尔,和季节女巫与冲过去迎接他们的Habiticans一起欢庆着,所有全盛田野失踪的百姓都回来了,他们拥抱着自己的朋友和家人。最后耗尽的灵魂变为了“快乐收割者”!

“瞧!”@Baconsaur低语,灰烬开始闪烁,慢慢地,他们分解成数百闪闪发光的凤凰!

一只发光的小鸟栖落在了快乐收割者纤细的手臂上,她露出了洁白的牙齿笑道:“距离上一次我有幸在全盛田野看见凤凰已经有很长世间了,”她说:“但是最近发生的这些事,我必须说,这正是恰如其分再好不过!”

她的语调平静,虽然(自然而然)她的笑容依旧:”我们在这片土地上因为辛勤劳作而享有盛名,但是我们也曾因节日和庆祝活动而为世人所知。当我们努力去计划一个盛大的宴会时,我想,这太讽刺了。曾经我们拒绝让自己有任何玩乐的时间。现在,我们当然不会再一次犯同样的错误!”

她拍着她的双手:“现在——让我们来庆祝吧!”", + "questBurnoutCompletionChat": "湮灭怪被击败了!\n\n随着一个美妙的、柔软的叹息,湮灭怪慢慢地释放了曾被它用来助长了火灾的热情能量。当怪兽静静地蜷缩最终化为灰烬时,其偷来的能量在空中闪闪发光,使被耗尽的精力们恢复了活力,回到了他们真实的模样。\n\n岚,丹尼尔,和季节女巫与冲过去迎接他们的Habiticans一起欢庆着,所有全盛田野失踪的百姓都回来了,他们拥抱着自己的朋友和家人。最后耗尽的灵魂变为了“快乐收割者”!\n\n“瞧!”@Baconsaur低语,灰烬开始闪烁,慢慢地,他们分解成数百闪闪发光的凤凰!\n\n一只发光的小鸟栖落在了快乐收割者纤细的手臂上,她露出了洁白的牙齿笑道:“距离上一次我有幸在全盛田野看见凤凰已经有很长世间了,”她说:“但是最近发生的这些事,我必须说,这正是恰如其分再好不过!”\n\n她的语调平静,虽然(自然而然)她的笑容依旧:”我们在这片土地上因为辛勤劳作而享有盛名,但是我们也曾因节日和庆祝活动而为世人所知。当我们努力去计划一个盛大的宴会时,我想,这太讽刺了。曾经我们拒绝让自己有任何玩乐的时间。现在,我们当然不会再一次犯同样的错误!”\n\n她拍着她的双手:“现在——让我们来庆祝吧!”\n\n所有的Habiticans获得:\n\n凤凰宠物\n凤凰坐骑\n成就:全盛田野的守护者\n普通糖果\n香草糖果\n砂糖果\n肉桂糖果\n巧克力糖果\n腐烂糖果\n粉色酸味糖果\n蓝色酸味糖果\n蜂蜜糖果", + "questBurnoutBoss": "湮灭怪", + "questBurnoutBossRageTitle": "湮灭攻击", + "questBurnoutBossRageDescription": "当这个量槽被填满,湮灭怪就会在Habitica释放他的湮灭攻击!", + "questBurnoutDropPhoenixPet": "凤凰(宠物)", + "questBurnoutDropPhoenixMount": "凤凰(坐骑)", "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!", + "questFrogText": "蛙泽", + "questFrogNotes": "As you and your friends are slogging through the Swamps of Stagnation, @starsystemic points at a large sign. \"Stay on the path -- if you can.\"

\"Surely that isn't hard!\" @RosemonkeyCT says. \"It's broad and clear.\"

But as you continue, you notice that path is gradually overtaken by the muck of the swamp, laced with bits of strange blue debris and clutter, until it's impossible to proceed.

As you look around, wondering how it got this messy, @Jon Arjinborn shouts, \"Look out!\" An angry frog leaps from the sludge, clad in dirty laundry and lit by blue fire. You will have to overcome this poisonous Clutter Frog to progress!", + "questFrogCompletion": "The frog cowers back into the muck, defeated. As it slinks away, the blue slime fades, leaving the way ahead clear.

Sitting in the middle of the path are three pristine eggs. \"You can even see the tiny tadpoles and through the clear casing!\" @Breadstrings says. \"Here, you should take them.\"", + "questFrogBoss": "一群青蛙", + "questFrogDropFrogEgg": "青蛙 (宠物蛋)", + "questFrogUnlockText": "解锁购买青蛙蛋功能", + "questSnakeText": "分心蛇", + "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveler astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", + "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", + "questSnakeBoss": "分心蛇", + "questSnakeDropSnakeEgg": "蛇(宠物蛋)", + "questSnakeUnlockText": "解锁蛇蛋购买功能" } \ No newline at end of file diff --git a/common/locales/zh/rebirth.json b/common/locales/zh/rebirth.json index f520784a48..0e5605d115 100644 --- a/common/locales/zh/rebirth.json +++ b/common/locales/zh/rebirth.json @@ -16,9 +16,11 @@ "rebirthEarnAchievement": "你会因为开始一段新冒险而获得一个成就!", "beReborn": "重生", "rebirthAchievement": "你开始了一段新冒险!这是你的第<%= number %>次冒险,你曾经获得的最高级别是<%= level %>级。有这个成就加持,当你开始下一次新冒险会达到更高的水平!", + "rebirthAchievement100": "你开始了一段新冒险!这是你的第<%= number %>次冒险,你曾经获得的最高级别是100或更高的等级。有这个成就加持,当你达到至少100级时,开始下一次新的冒险!", "rebirthBegan": "开始新的冒险", "rebirthText": "开始了<%= rebirths %> 个新的冒险", "rebirthOrb": "使用重生球来重新开始获得级别", + "rebirthOrb100": "在达到100级或更高等级的情况下,使用重生之球重新开始", "rebirthPop": "开始一个1级的新角色并保留成就,物品和任务历史。", "rebirthName": "重生球", "reborn": "重生, 最高级别 <%= reLevel %>" diff --git a/common/locales/zh/settings.json b/common/locales/zh/settings.json index e65ba1a7e8..bbd9d8bb43 100644 --- a/common/locales/zh/settings.json +++ b/common/locales/zh/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "选择这个选项后,展开编辑新任务的时候标签列表是隐藏的。", "startAdvCollapsed": "默认隐藏高级选项", "startAdvCollapsedPop": "选择这个选项后,展开编辑新任务的时候高级选项是隐藏的。", + "dontShowAgain": "不再出现本条内容", + "suppressLevelUpModal": "在升级时不再出现弹出窗口", + "suppressHatchPetModal": "在孵化宠物时不再出现弹出窗口", + "suppressRaisePetModal": "在坐骑成熟时不再出现弹出窗口", + "suppressStreakModal": "在连击时不再出现弹出窗口", "showTour": "显示教程", "restartTour": "重新开始刚加入Habitica时显示的教程", "showBailey": "显示Bailey", @@ -32,11 +37,11 @@ "saveData": "你可以用几种方法导出你的习惯数据。", "habitHistory": "习惯历史", "exportHistory": "导出历史:", - "csv": "(CSV)", + "csv": "(CSV/逗号分隔值)", "userData": "玩家数据", "exportUserData": "导出玩家数据:", "export": "导出", - "xml": "(XML)", + "xml": "(XML/可扩展标记语言)", "json": "(JSON)", "customDayStart": "自定义起始日期", "changeCustomDayStart": "变更自定义起始日期?", @@ -57,7 +62,7 @@ "resetText1": "警告!这会重置你角色的许多数值。强烈不建议你这样做。不过,在短暂的试玩一段时间后,进行重置或许会有所帮助。", "resetText2": "你会失去你所有的等级,金币和经验。你所有的任务会被永久删除,你会失去你所有的任务历史数据。你会失去所有的装备,但是你能够把他们买回来。包括你曾经拥有过的所有限量版装备和订阅者的神秘物品(你需要编程合适的职业才能重新购买职业限定的装备)。你会保留你的当前职业和你的宠物与坐骑。相比之下,用道具重生球会更安全,你的任务会被保留下来。", "deleteText": "你确定吗?这会永久地删除你的帐号,并且永远也无法恢复!如果希望再次使用Habitica需要注册一个新的帐号。已有的金钱和花掉的宝石无法被退费。如果你非常确定,在下面的文本框中输入<%= deleteWord %>。", - "API": "API", + "API": "API / 应用程序接口", "APIText": "这个是用来复制到第三方应用的。但是,你的API令牌相当于密码,不要公开它。有时候别人会问你要用户ID,但是永远不要把你的API令牌分享给其他人,包括Github。", "APIToken": "API 令牌 (这相当于密码——看上面的警告!)", "resetDo": "去吧,重置我的账号吧!", @@ -75,13 +80,12 @@ "emailSuccess": "邮箱修改成功", "detachFacebook": "注销Facebook的链接", "detachedFacebook": "Facebook和你的账号取消关联成功", - "addedLocalAuth": "Successfully added local authentication", + "addedLocalAuth": "成功加入本地端认证", "data": "数据", "exportData": "导出数据", "emailChange1": "要改变你的邮箱地址,请发送邮件到", "emailChange2": "admin@habitica.com", "emailChange3": "包括你的新旧邮箱地址以及你的用户ID。", - "username": "登陆名", "usernameOrEmail": "登录用户名或者邮箱", "email": "邮箱", "registeredWithFb": "通过 Facebook 注册", @@ -89,7 +93,7 @@ "loginNameDescription2": "用户 -> 档案", "loginNameDescription3": "来改变你显示在你的角色形象和聊天信息中的名字。", "emailNotifications": "电子邮件通知", - "wonChallenge": "你赢得了挑战", + "wonChallenge": "你赢得了一项挑战!", "newPM": "收到悄悄话", "giftedGems": "自然宝石", "giftedGemsInfo": "<%= amount %> 宝石 - 来自 <%= name %>", @@ -112,11 +116,35 @@ "benefits": "好处", "coupon": "优惠券", "couponPlaceholder": "输入优惠券代码", - "couponText": "We sometimes have events and give out coupon codes for special gear. (eg, those who stop by our Wondercon booth)", + "couponText": "我们有时会举办送优惠码或特别装备的活动(例如那些来我们的Wondercon摊位的朋友)", "apply": "申请", "resubscribe": "重新订阅", "promoCode": "优惠码", "promoCodeApplied": "优惠码已生效!请查看物品栏", "promoPlaceholder": "输入优惠码", - "displayInviteToPartyWhenPartyIs1": "当队伍有1名成员时显示“邀请至队伍”" + "displayInviteToPartyWhenPartyIs1": "当队伍有1名成员时显示“邀请至队伍”", + "saveCustomDayStart": "保存自定义起始日期设定", + "registration": "注册", + "addLocalAuth": "添加本地认证", + "generateCodes": "生成代码", + "generate": "生成", + "getCodes": "获取代码", + "webhooks": "Webhooks", + "enabled": "已启用", + "webhookURL": "Webhook链接", + "add": "添加", + "buyGemsGoldCap": "上限提升至 <%= amount %>", + "mysticHourglass": "<%= amount %> 个神秘沙漏", + "mysticHourglassText": "神秘沙漏能让你购买几个月之前的神秘道具套装。", + "purchasedPlanId": "每 <%= months %> (月)充值 $<%= price %> (<%= plan %>)", + "purchasedPlanExtraMonths": "你的剩余捐助时长为: <%= months %> 个月", + "consecutiveSubscription": "连续捐助", + "consecutiveMonths": "持续的月份:", + "gemCapExtra": "宝石额外上限:", + "mysticHourglasses": "神秘沙漏:", + "paypal": "PayPal", + "amazonPayments": "亚马逊支付", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/zh/spells.json b/common/locales/zh/spells.json index 28dfe16ea6..e9cd79fc86 100644 --- a/common/locales/zh/spells.json +++ b/common/locales/zh/spells.json @@ -26,7 +26,7 @@ "spellHealerHealText": "圣光术", "spellHealerHealNotes": "圣光笼罩着你,治愈了你的伤口。你获得了生命值!(法术强度与体质值以及智力值有关)", "spellHealerBrightnessText": "灼热光矢", - "spellHealerBrightnessNotes": "你爆发出一道光闪瞎了你的任务。你的任务的蓝色值增加、红色值降低了。(法术强度与力量值有关)", + "spellHealerBrightnessNotes": "你爆发出一道光闪瞎了你的任务。你的任务的蓝色值增加、红色值降低了。(法术强度与智力值有关)", "spellHealerProtectAuraText": "守护光环", "spellHealerProtectAuraNotes": "你保护你的队伍免受伤害。你的整个队伍获得体质上的增益!(法术强度与未增益的体质值有关)", "spellHealerHealAllText": "祝福", diff --git a/common/locales/zh/subscriber.json b/common/locales/zh/subscriber.json index bffe4e0e27..2f8a2e0760 100644 --- a/common/locales/zh/subscriber.json +++ b/common/locales/zh/subscriber.json @@ -1,9 +1,9 @@ { "subscription": "捐助", "subscriptions": "捐助", - "subDescription": "Buy gems with gold, get monthly mystery items, retain progress history, double daily drop-caps, support the devs. Click for more info.", + "subDescription": "使用金币购买宝石,获得每月神秘道具,保存历史进度,双倍的日常掉率上限,支持开发者,点击获取更多信息。", "buyGemsGold": "用金币购买宝石", - "buyGemsGoldText": "Alexander the Merchant will sell you gems at a cost of <%= gemCost %> gold per gem. His monthly shipments are initially capped at <%= gemLimit %> gems per month, but this cap increases by 5 gems for every three months of consecutive subscription, up to a maximum of 50 gems per month!", + "buyGemsGoldText": "商人亚历山大可以按 <%= gemCost %>金币一个宝石的价格向你出售宝石,他每个月的初始进货量是 <%= gemLimit %> 个宝石,如果可以在接下来的时间里坚持捐助,每三个月宝石上限就会增加5,直到最大值——1个月50颗宝石!", "retainHistory": "保留完整的历史记录", "retainHistoryText": "使你的所有历史数据可以用图表展示或者导出。非定期捐助者的历史数据会因为数据库优化而合并。", "doubleDrops": "日常掉率上限翻倍", @@ -59,21 +59,21 @@ "timeTravelers": "时间旅行者", "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> 和 <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitle": "神秘的时间旅行者", - "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.", - "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 <%= linkStart %>here<%= linkEnd %>! 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!", + "timeTravelersPopoverNoSub": "你需要一个神秘沙漏召唤神秘的时光穿梭者!<%= linkStart %>网站定期捐助者<%= linkEnd %>;每连续捐助三个月就可以获得一个神秘沙漏。使用神秘沙漏,时间旅行者就会从过去——甚至有可能从未来——为你带回一个稀有宠物,坐骑或是捐助者套装。", + "timeTravelersPopover": "我们看到你有1个神秘的沙漏,所以我们愉快地决定穿梭回来找你!请选择你喜欢的宠物,坐骑或是神秘物品。你还可以看到一系列已不再开放的物品列表在 这里!如果这些都不能满足你,也许你会对我们富有时尚未来感的蒸汽朋克物品套装感兴趣?", + "timeTravelersAlreadyOwned": "恭喜!你已经拥有了时光穿梭者目前能够提供的所有道具,感谢支持本站!", + "mysticHourglassPopover": "神秘沙漏可以让你购买一些特别的限定道具,比如每月神秘道具组合,世界BOSS甚至过去已经发布完的奖励!", "subUpdateCard": "更新卡", "subUpdateTitle": "更新", "subUpdateDescription": "更新收费卡。", - "notEnoughHourglasses": "You don't have enough Mystic Hourglasses.", - "hourglassBuyEquipSetConfirm": "Buy this full set of items for 1 Mystic Hourglass?", - "hourglassBuyItemConfirm": "Buy this item for 1 Mystic Hourglass?", - "petsAlreadyOwned": "Pet already owned.", - "mountsAlreadyOwned": "Mount already owned.", - "typeNotAllowedHourglass": "Item type not supported for purchase with Mystic Hourglass. Allowed types:", - "petsNotAllowedHourglass": "Pet not available for purchase with Mystic Hourglass.", - "mountsNotAllowedHourglass": "Mount not available for purchase with Mystic Hourglass.", - "hourglassPurchase": "Purchased an item using a Mystic Hourglass!", - "hourglassPurchaseSet": "Purchased an item set using a Mystic Hourglass!" + "notEnoughHourglasses": "你没有足够的神秘沙漏", + "hourglassBuyEquipSetConfirm": "花费1个神秘沙漏购买完整这一系列道具?", + "hourglassBuyItemConfirm": "花费1个神秘沙漏购买这个道具?", + "petsAlreadyOwned": "你已经拥有这只宠物", + "mountsAlreadyOwned": "你已经拥有这只坐骑", + "typeNotAllowedHourglass": "本道具无法使用神秘沙漏购买,可购买种类有:", + "petsNotAllowedHourglass": "本宠物无法使用神秘沙漏购买,可购买种类有:", + "mountsNotAllowedHourglass": "本坐骑无法使用神秘沙漏购买,可购买种类有:", + "hourglassPurchase": "你使用了一个神秘沙漏购买了一件道具!", + "hourglassPurchaseSet": "你使用了一个神秘沙漏购买了一套道具组合!" } \ No newline at end of file diff --git a/common/locales/zh/tasks.json b/common/locales/zh/tasks.json index fadb4d51d2..e07d95e71b 100644 --- a/common/locales/zh/tasks.json +++ b/common/locales/zh/tasks.json @@ -8,13 +8,13 @@ "habits": "习惯", "newHabit": "新习惯", "newHabitBulk": "新习惯(每个一行)", - "yellowred": "偶尔", + "yellowred": "虚弱", "greenblue": "经常", "edit": "修改", "save": "保存", "addChecklist": "新增清单", "checklist": "清单", - "checklistText": "把大任务打散!清单能增加单条待办事项的经验和金币收入,还能减少日常任务失败的伤害。", + "checklistText": "把大任务分割开!清单能增加单条待办事项的经验和金币收入,还能减少日常任务失败的伤害。", "expandCollapse": "展开 / 折叠", "text": "标题", "extraNotes": "额外注解", @@ -78,36 +78,35 @@ "streakSingular": "连击者", "streakSingularText": "在每日任务里完成过一个21天连击", "perfectName": "完美日", - "perfectText": "Completed all active Dailies on <%= perfects %> days. With this achievement you get a +level/2 buff to all attributes for the next day. Levels greater than 100 don't have any additional effects on buffs.", + "perfectText": "在 <%= perfects %> 天内完成所有每日任务,可以在下一天获得一个 +等级/2 全属性的增益魔法。等级在100级以上时不会获得增益效果。", "perfectSingular": "完美日", - "perfectSingularText": "Completed all active Dailies in one day. With this achievement you get a +level/2 buff to all attributes for the next day. Levels greater than 100 don't have any additional effects on buffs.", + "perfectSingularText": "完成一天的所有日常任务。达成这一点会在下一天获得一个 +等级/2 全属性的增益魔法。等级在100级以上时不会获得增益效果。", "streakerAchievement": "你已经获得“连击”成就!21天是养成习惯的一个里程碑。你在这个任务或其他任务每完成额外的21天会继续堆叠这个成就。", "fortifyName": "稳固药剂", "fortifyPop": "将所有任务恢复至中性状态(黄色),并补充所有损失的生命值。", "fortify": "稳固", - "fortifyText": "Fortify will return all your tasks to a neutral (yellow) state, as if you'd just added them, and top your Health off to full. This is great if all your red tasks are making the game too hard, or all your blue tasks are making the game too easy. If starting fresh sounds much more motivating, spend the Gems and catch a reprieve!", + "fortifyText": "稳固作用会将所有的任务重置到初始(黄色)状态,就像刚刚添加时一样,还会回满你的生命值。如果你变红的任务太多,让你感到游戏太难进行,而蓝色的任务又太容易,这会非常有帮助。如果觉得重获新生非常激励人,那就花几块宝石来给自己缓解一下吧!", "sureDelete": "你确定要删除这个任务吗?", "streakCoins": "连击奖励!", - "pushTaskToTop": "将任务置于顶部", - "pushTaskToBottom": "将任务置于底部", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "请先输入任务标题", "dailiesRestingInInn": "你在客栈休息了!你的每日任务不会伤害你但是依然会每天更新。如果你在执行剧情任务,直到你离开客栈,你都不会受到伤害/收集物品,但是如果你的队伍成员没有完成自己的每日任务,你依然会收到来自 王 的伤害", "habitHelp1": "好习惯是你要坚持的。每次你按 <%= plusIcon %>他们都会给你黄金和经验奖励", "habitHelp2": "坏习惯是你要避免的。每次你按<%= minusIcon %>他们会扣除你的生命值。", "habitHelp3": "如果不知道怎么写的话,来看看这些别人的习惯例子!", "newbieGuild": "还有更多的问题?在 <%= linkStart %>新手公会<%= linkEnd %>问吧!", - "dailyHelp1": "Dailies repeat <%= emphasisStart %>every day<%= emphasisEnd %> that they are active. Click the <%= pencilIcon %> to change the days a Daily is active.", + "dailyHelp1": "每日任务会 <%= emphasisStart %>每天<%= emphasisEnd %> 重新激活刷新。点击<%= pencilIcon %>改变每日任务的刷新周期。", "dailyHelp2": "如果你未完成每日任务,那么当天过后你会失去生命值。", - "dailyHelp3": "Dailies turn <%= emphasisStart %>redder<%= emphasisEnd %> when you miss them, and <%= emphasisStart %>bluer<%= emphasisEnd %> when you complete them. The redder the Daily, the more it will reward you... or hurt you.", - "dailyHelp4": "To change when your day rolls over, go to <%= linkStart %> Settings > Site<%= linkEnd %> > Custom Day Start.", - "dailyHelp5": "For inspiration, check out these sample Dailies!", + "dailyHelp3": "一旦错过一个每日任务,它就会变<%= emphasisStart %>红<%= emphasisEnd %> , 而完成它们时则变得更 <%= emphasisStart %>蓝r<%= emphasisEnd %> 。越是红色的每日任务,越能给你带来丰厚的奖赏……或者伤害。 ", + "dailyHelp4": "需要设置每一天从何时开始计算,进入 <%= linkStart %> 设置 > 站点 <%= linkEnd %> > 自定义每日计时点。", + "dailyHelp5": "想要来点灵感提示吗?点击这里看看一些每日任务示例!", "toDoHelp1": "待办事项开始时是黄色,你完成它们耗时越久它们就越红(越有价值)。", "toDoHelp2": "待办事项不会伤害你!它们只会提供金币和经验的报酬。", - "toDoHelp3": "Breaking a To-Do down into a checklist of smaller items will make it less scary, and will increase your points!", - "toDoHelp4": "For inspiration, check out these sample To-Dos!", - "rewardHelp1": "The Equipment you buy for your avatar is stored in <%= linkStart %>Inventory > Equipment<%= linkEnd %>.", - "rewardHelp2": "Equipment affects your stats (<%= linkStart %>Avatar > Stats<%= linkEnd %>).", + "toDoHelp3": "将一个待办任务分割成一系列小目标可以让它看上去不那么紧张,而且能为你挣来更多点数!", + "toDoHelp4": "想要来点灵感提示吗?点击这里看看一些待办任务示例!", + "rewardHelp1": "你所购买的装备都储存在<%= linkStart %>物品栏 > 装备<%= linkEnd %>。", + "rewardHelp2": "装备能够影响你的属性点数 (<%= linkStart %>头像 > 属性点<%= linkEnd %>)。", "rewardHelp3": "特殊装备会在世界性事件中出现。", - "rewardHelp4": "Don't be afraid to set custom Rewards! Check out some samples here.", + "rewardHelp4": "别害怕,大胆地为自己设置自定义奖励!来这里看看 一些简单例子。", "clickForHelp": "点击获取帮助" } \ No newline at end of file diff --git a/common/locales/zh_TW/backgrounds.json b/common/locales/zh_TW/backgrounds.json index 2ecb0670a6..f580e72b6a 100644 --- a/common/locales/zh_TW/backgrounds.json +++ b/common/locales/zh_TW/backgrounds.json @@ -9,7 +9,7 @@ "backgroundForestNotes": "在夏天的森林裡漫步。", "backgrounds072014": "第 2 組:2014 年 7 月推出", "backgroundCoralReefText": "珊瑚礁", - "backgroundCoralReefNotes": "在珊瑚礁之間遨遊。", + "backgroundCoralReefNotes": "在珊瑚礁之間游泳。", "backgroundOpenWatersText": "海洋", "backgroundOpenWatersNotes": "享受茫茫大海。", "backgroundSeafarerShipText": "航行中的船", @@ -18,14 +18,14 @@ "backgroundCloudsText": "雲朵", "backgroundCloudsNotes": "在雲端漫步。", "backgroundDustyCanyonsText": "塵封的峽谷", - "backgroundDustyCanyonsNotes": "漫步在塵封的峽谷。", + "backgroundDustyCanyonsNotes": "在塵封的峽谷漫步。", "backgroundVolcanoText": "火山", "backgroundVolcanoNotes": "身處於炙熱火山中。", "backgrounds092014": "第 4 組:2014 年 9 月推出", "backgroundThunderstormText": "雷雨", "backgroundThunderstormNotes": "雷雨中的閃電。", "backgroundAutumnForestText": "秋季森林", - "backgroundAutumnForestNotes": "遊盪在秋天的森林中。", + "backgroundAutumnForestNotes": "在秋天的森林中遊盪。", "backgroundHarvestFieldsText": "肥沃農田", "backgroundHarvestFieldsNotes": "在肥沃的農田中耕種。", "backgrounds102014": "第 5 組:2014 年 10 月推出", @@ -46,7 +46,7 @@ "backgroundIcebergText": "冰山", "backgroundIcebergNotes": "在一座冰山上漂流。", "backgroundTwinklyLightsText": "冬季的閃耀之光", - "backgroundTwinklyLightsNotes": "漫步在鑲著聖誕燈飾的樹林間。", + "backgroundTwinklyLightsNotes": "在鑲著聖誕燈飾的樹林間漫步。", "backgroundSouthPoleText": "南極", "backgroundSouthPoleNotes": "探訪冰天雪地的南極。", "backgrounds012015": "第 8 組:2015 年 1 月推出", @@ -55,9 +55,9 @@ "backgroundFrigidPeakText": "寒冷的山峰", "backgroundFrigidPeakNotes": "攻上一座寒冷的山頂。", "backgroundSnowyPinesText": "白雪皚皚的松樹", - "backgroundSnowyPinesNotes": "避難所中雪白的松樹。", + "backgroundSnowyPinesNotes": "在雪白的松樹庇護。", "backgrounds022015": "第 9 組: 2015 年 2 月推出", - "backgroundBlacksmithyText": "黑色的鐵匠鋪", + "backgroundBlacksmithyText": "鐵匠鋪", "backgroundBlacksmithyNotes": "在黑鐵匠鋪中勞動。", "backgroundCrystalCaveText": "水晶洞穴", "backgroundCrystalCaveNotes": "探索水晶洞穴。", @@ -69,7 +69,7 @@ "backgroundStainedGlassText": "彩繪玻璃", "backgroundStainedGlassNotes": "欣賞彩繪玻璃。", "backgroundRollingHillsText": "連綿起伏的山丘", - "backgroundRollingHillsNotes": "嬉鬧在連綿起伏的山丘中。", + "backgroundRollingHillsNotes": "在連綿起伏的山丘中嬉鬧。", "backgrounds042015": "第 11 組:2015 年 4 月推出", "backgroundCherryTreesText": "櫻花樹", "backgroundCherryTreesNotes": "欣賞綻放的櫻花樹。", @@ -79,44 +79,58 @@ "backgroundGumdropLandNotes": "品嘗糖果世界的景色。", "backgrounds052015": "第 12 組:2015 年五月推出", "backgroundMarbleTempleText": "大理石神廟", - "backgroundMarbleTempleNotes": "展現在大理石神廟之前", + "backgroundMarbleTempleNotes": "在大理石神廟之前展現。", "backgroundMountainLakeText": "山脈之湖", - "backgroundMountainLakeNotes": "把你的腳指浸在山脈之湖裡面", + "backgroundMountainLakeNotes": "把你的腳指浸在山脈之湖裡面。", "backgroundPagodasText": "佛塔", - "backgroundPagodasNotes": "爬到佛塔的頂端", + "backgroundPagodasNotes": "爬到佛塔的頂端。", "backgrounds062015": "第 13 組:2015 年 6 月推出", "backgroundDriftingRaftText": "漂流筏", "backgroundDriftingRaftNotes": "泛舟漂流筏。", - "backgroundShimmeryBubblesText": "金蔥泡沫", - "backgroundShimmeryBubblesNotes": "通過浮著泡沫金蔥的海洋。", + "backgroundShimmeryBubblesText": "閃亮泡沫", + "backgroundShimmeryBubblesNotes": "浮過泡沫金蔥的海洋。", "backgroundIslandWaterfallsText": "島上的瀑布", "backgroundIslandWaterfallsNotes": "在島上的瀑布野餐", "backgrounds072015": "第 14 組:2015 年 7 月推出", - "backgroundDilatoryRuinsText": "拖拉遺址", - "backgroundDilatoryRuinsNotes": "潛入拖拉遺址。", + "backgroundDilatoryRuinsText": "緩慢遺址", + "backgroundDilatoryRuinsNotes": "潛入緩慢遺址。", "backgroundGiantWaveText": "巨潮", "backgroundGiantWaveNotes": "在巨潮中衝浪。", - "backgroundSunkenShipText": "沈船", - "backgroundSunkenShipNotes": "探索沈船", + "backgroundSunkenShipText": "沉船", + "backgroundSunkenShipNotes": "探索沉船", "backgrounds082015": "第 15 組:2015 年 8 月推出", "backgroundPyramidsText": "金字塔", "backgroundPyramidsNotes": "欣賞金字塔。", - "backgroundSunsetSavannahText": "薩凡納日落", + "backgroundSunsetSavannahText": "草原的日落", "backgroundSunsetSavannahNotes": "慢慢走進薩凡納日落。", "backgroundTwinklyPartyLightsText": "閃爍的晚會燈光", - "backgroundTwinklyPartyLightsNotes": "在閃爍的晚會燈光下跳舞!", + "backgroundTwinklyPartyLightsNotes": "在閃爍的晚會燈光下跳舞 !", "backgrounds092015": "第 16 組:2015 年 9 月推出", "backgroundMarketText": "Habitica市集", - "backgroundMarketNotes": "在Habitica市集的店舖", - "backgroundStableText": "Habitica馬廄", - "backgroundStableNotes": "Tend mounts in the Habitica Stable.", - "backgroundTavernText": "Habitica酒館", - "backgroundTavernNotes": "拜訪Habitica酒館", - "backgrounds102015": "SET 17: Released October 2015", - "backgroundHarvestMoonText": "Harvest Moon", - "backgroundHarvestMoonNotes": "Cackle under the Harvest Moon.", - "backgroundSlimySwampText": "Slimy Swamp", - "backgroundSlimySwampNotes": "Slog through a Slimy Swamp.", - "backgroundSwarmingDarknessText": "Swarming Darkness", - "backgroundSwarmingDarknessNotes": "Shiver in the Swarming Darkness." + "backgroundMarketNotes": "在 Habitica 市集的店舖購物。", + "backgroundStableText": "Habitica 的馬房", + "backgroundStableNotes": "在 Habitica 的馬房照料座騎。", + "backgroundTavernText": "Habitica 的酒館", + "backgroundTavernNotes": "拜訪 Habitica 的酒館。", + "backgrounds102015": "第 17 組:2015 年 10 月推出", + "backgroundHarvestMoonText": "滿月", + "backgroundHarvestMoonNotes": "在滿月下咯咯笑。", + "backgroundSlimySwampText": "黏糊糊的沼澤", + "backgroundSlimySwampNotes": "跋涉過黏糊糊的沼澤", + "backgroundSwarmingDarknessText": "蜂擁黑暗", + "backgroundSwarmingDarknessNotes": "在蜂擁的黑暗中瑟瑟發抖。", + "backgrounds112015": "第 18 組:2015 年 11 月推出", + "backgroundFloatingIslandsText": "漂浮島", + "backgroundFloatingIslandsNotes": "跳躍過漂浮島。", + "backgroundNightDunesText": "夜之砂丘", + "backgroundNightDunesNotes": "悠哉地散步過夜之砂丘。", + "backgroundSunsetOasisText": "日落綠洲", + "backgroundSunsetOasisNotes": "在日落綠洲裡面曬曬夕陽。", + "backgrounds122015": "SET 19: Released December 2015", + "backgroundAlpineSlopesText": "Alpine Slopes", + "backgroundAlpineSlopesNotes": "Ski on the Alpine Slopes.", + "backgroundSnowySunriseText": "Snowy Sunrise", + "backgroundSnowySunriseNotes": "Gaze at the Snowy Sunrise.", + "backgroundWinterTownText": "Winter Town", + "backgroundWinterTownNotes": "Bustle through a Winter Town." } \ No newline at end of file diff --git a/common/locales/zh_TW/challenge.json b/common/locales/zh_TW/challenge.json index be2979b49b..c463153958 100644 --- a/common/locales/zh_TW/challenge.json +++ b/common/locales/zh_TW/challenge.json @@ -1,7 +1,7 @@ { "challenge": "挑戰", "brokenChaLink": "無效的挑戰連結", - "brokenTask": "無效的挑戰連結:這項任務本來是一個挑戰的一部分,但是此任務已從該挑戰中移除了。你想怎麼處置這項任務?", + "brokenTask": "無效的挑戰連結:這項任務本來是一個挑戰的一部份,但是此任務已從該挑戰中移除了。你想怎樣做?", "keepIt": "保留", "removeIt": "刪除", "brokenChallenge": "無效的挑戰連結:這項任務本來是一個挑戰的一部分,但是該挑戰 (或隊伍) 已經被刪除了。你想怎麼處置這項任務?", @@ -11,14 +11,14 @@ "unsubChallenge": "無效的挑戰連結:這項任務本來是一個挑戰的一部分,可是你已經取消訂閱該挑戰了。你想怎麼處置這項任務?", "challengeWinner": "贏得了以下挑戰", "challenges": "挑戰", - "noChallenges": "還沒有挑戰,在", - "toCreate": "這裡建立一個。", + "noChallenges": "還沒有挑戰,探訪", + "toCreate": "去建立一個。", "selectWinner": "選一位贏家然後結束挑戰:", "deleteOrSelect": "刪除或選擇贏家", "endChallenge": "結束挑戰", "challengeDiscription": "這些是該挑戰的任務。玩家參與挑戰後,它們會改變顏色並通過圖表來顯示該挑戰參加者的整體進度。", - "hows": "看看其他人的進度如何?", - "filter": "篩選條件", + "hows": "其他人的進度如何呢?", + "filter": "篩選", "groups": "群組", "all": "全選", "noNone": "全不選", @@ -30,34 +30,38 @@ "discard": "取消", "challengeTitle": "挑戰名", "challengeTag": "標籤名", - "challengeTagPop": "挑戰名會顯示在在標籤列表和任務的工具提示中。所以挑戰名要盡量短。例如用「-10 磅」代替「在 3 個月內減掉 10 磅」 (點選查看詳細資訊)。", - "challengeDescr": "詳細說明", + "challengeTagPop": "挑戰會顯示在在標籤列表和任務的工具提示中。所以挑戰名要盡量短。例如用「-10 磅」代替「在 3 個月內減掉 10 磅」 (點選查看詳細資訊)。", + "challengeDescr": "說明", "prize": "戰利品", - "prizePop": "如果有人「贏得」了你的挑戰,你可以獎勵贏家一些寶石。最大值 = 你擁有的寶石數(+ 公會寶石數,如果你建立了是這個公會的挑戰)。注意:獎勵設定好之後就不能修改。", + "prizePop": "如果有人「贏得」了你的挑戰,你可以獎勵贏家一些寶石。最大值 = 你擁有的寶石數(如果你建立了這個挑戰的公會+ 公會寶石數)。注意:獎勵設定好之後就不能修改。", "prizePopTavern": "如果有人「贏得」了你的挑戰,你可以獎勵贏家一些寶石。最大值 = 你擁有的寶石數。注意:獎勵設定好之後就不能修改,如果取消挑戰寶石也不能退回。", "publicChallenges": "公開挑戰 最少需要 1 個寶石作為獎勵 (為了防止有人拿來打廣告。)", "officialChallenge": "Habitica 官方挑戰", - "by": "發起人", + "by": "發起人 :", "participants": "<%= membercount %>個參與者", "join": "加入", - "exportChallengeCSV": "匯出為 CSV", + "exportChallengeCSV": "匯出至CSV", "selectGroup": "請選擇群組", "challengeCreated": "挑戰已建立", - "sureDelCha": "Are you sure you want to delete this challenge?", - "sureDelChaTavern": "Are you sure you want to delete this challenge? Your gems will not be refunded.", + "sureDelCha": "你確定要收回挑戰嗎?", + "sureDelChaTavern": "你確定要收回挑戰嗎?你付出的寶石不會退還喔 !", "removeTasks": "移除任務", "keepTasks": "保留任務", - "closeCha": "關閉挑戰並且……", - "leaveCha": "離開挑戰並且……", + "closeCha": "關閉挑戰並……", + "leaveCha": "離開挑戰並……", "challengedOwnedFilterHeader": "擁有者", "challengedOwnedFilter": "已擁有", "challengedNotOwnedFilter": "尚未擁有", - "challengedEitherOwnedFilter": "兩者皆不", - "backToChallenges": "回到挑戰", - "prizeValue": "<%= gemcount %> <%= gemicon %> 禮物", + "challengedEitherOwnedFilter": "都顯示", + "backToChallenges": "回到所有挑戰", + "prizeValue": "<%= gemcount %> <%= gemicon %> 禮物", "clone": "複製", - "challengeNotEnoughGems": "沒有足夠的寶石來產生這個挑戰。", - "noPermissionEditChallenge": "You don't have permissions to edit this challenge", - "noPermissionDeleteChallenge": "You don't have permissions to delete this challenge", - "noPermissionCloseChallenge": "You don't have permissions to close this challenge" + "challengeNotEnoughGems": "你沒有足夠的寶石來產生這個挑戰。", + "noPermissionEditChallenge": "你沒有權限更動這個挑戰的內容。", + "noPermissionDeleteChallenge": "你沒有權限撤回這個挑戰。", + "noPermissionCloseChallenge": "你沒有權限關閉這個挑戰。", + "congratulations": "恭喜!", + "hurray": "太好了!", + "noChallengeOwner": "無人擁有", + "noChallengeOwnerPopover": "由於開創這個挑戰的人已經刪除他們的帳號,所以這個挑戰無人擁有。" } \ No newline at end of file diff --git a/common/locales/zh_TW/character.json b/common/locales/zh_TW/character.json index aee2d6fb4a..a59901bd39 100644 --- a/common/locales/zh_TW/character.json +++ b/common/locales/zh_TW/character.json @@ -4,7 +4,7 @@ "avatar": "角色", "other": "其他", "fullName": "全名", - "displayName": "暱稱", + "displayName": "顯示名稱", "displayPhoto": "照片", "displayBlurb": "自我介紹", "displayBlurbPlaceholder": "請介紹你自己", @@ -33,13 +33,13 @@ "bodyFacialHair": "鬍鬚", "beard": "落腮鬍", "mustache": "八字鬍", - "flower": "花", + "flower": "花朵", "basicSkins": "基本膚色", "rainbowSkins": "彩色膚色", "pastelSkins": "柔和膚色", "spookySkins": "萬聖節膚色", "supernaturalSkins": "超自然膚色", - "splashySkins": "吸引人的外觀", + "splashySkins": "吸引膚色", "rainbowColors": "彩色髮色", "shimmerColors": "柔光髮色", "hauntedColors": "幽靈髮色", @@ -51,19 +51,24 @@ "classBonusText": "你的職業 (如果你還沒解鎖或選擇其他職業,你是個戰士) 使用同職業的裝備時,比起其他職業的裝備會更有效。穿上你目前職業的裝備可以讓屬性加成上升 50%。", "classEquipBonus": "職業加成", "battleGear": "戰鬥裝備", - "battleGearText": "這是你帶上戰場的裝備,在你做任務時會影響一些數值。", + "battleGearText": "這是你穿上戰場的裝備,在你做任務時會影響一些數值。", + "autoEquipBattleGear": "自動穿上新裝備", "costume": "服裝", - "costumeText": "如果你喜歡其他裝備的外觀更勝於你現在的裝備,勾選\"使用服裝\"框穿上想被看到的服裝,而你的戰鬥裝備會穿在裡面。", + "costumeText": "如果你覺得其他裝備的外觀更勝於你現在的裝備,勾選「使用服裝」框穿上想被看到的服裝,而你不會看到戰鬥裝備。", "useCostume": "使用服裝", - "useCostumeInfo1": "點選\"使用服裝\"可以讓你的角色圖像裝備而不改變實際在戰鬥裡的數值(只改變外觀),也就是說妳可以隨意裝扮你的角色圖像,雖然他們並不是最強的戰鬥配置。", - "useCostumeInfo2": "當你第一次按下\"使用服裝\"時,你的頭像看起來會很簡陋...不過沒關係,可以看到畫面左邊武器裝備的狀態還在,接下來可以在畫面右邊隨意穿上各種裝備,這雖不會影響到實際戰鬥數據,但是看起來十分帥氣!試著組合所有武器、防具、寵物、坐騎、還有背景

有問題嗎?在遊戲維基裡看一看 這個 on 找到你最佳的組合?到這裡或是酒館秀給大家看吧!", - "gearAchievement": "你已達成「終極裝備」成就:升級到最高裝備!你已完成以下組合:", - "moreGearAchievements": "欲取得終極裝備徽章,到這裡選擇職業並開始購買職業專屬物品!", - "armoireUnlocked": "你已解鎖 神秘寶箱! 點擊神秘寶箱可隨機獲得特殊裝備、食物、或是經驗值! ", + "useCostumeInfo1": "點選\"使用服裝\"可以讓你的角色裝備服裝而不改變實際在戰鬥裡的數值(只改變外觀),也就是說 你能在左邊選擇最強的戰鬥配置,並可以在右邊隨意裝扮你的角色。", + "useCostumeInfo2": "當你第一次按下「使用服裝」時,你的頭像看起來會很簡陋...不過沒關係!如果你看畫面左邊,你會看到武器裝備的狀態還在。接下來,你可以在畫面右邊隨意穿上各種裝備,這雖不會影響到實際戰鬥數據,但是看起來十分帥氣!試著組合所有武器、防具、寵物、坐騎、還有背景吧!

有問題嗎?在遊戲維基裡看一看 這個 on 找到你最佳的組合?到這裡或是酒館給大家看吧!", + "gearAchievement": "你已達成「終極裝備」成就:升級到職業的最高裝備!你已完成以下組合:", + "moreGearAchievements": "欲取得終極裝備徽章,到這裡選擇職業並購買職業專屬物品!", + "armoireUnlocked": "你解鎖了神秘寶箱! 點擊神秘寶箱可獲得隨機的特殊裝備、食物、或是經驗值! ", "ultimGearName": "終極裝備", "ultimGearText": "已升級到此種職業之最高武器和盔甲:", "level": "等級", "levelUp": "升級了!", + "gainedLevel": "你升級了!", + "leveledUp": "因為你在現實生活完成目標,你升級到 等級 <%= level %>!", + "fullyHealed": "你完全康復了!", + "huzzah": "太好了!", "mana": "魔力", "hp": "HP", "mp": "MP", @@ -77,7 +82,7 @@ "allocatePerPop": "增加一點感知", "allocateInt": "分配給智力的屬性點:", "allocateIntPop": "增加一點智力", - "noMoreAllocate": "恭喜您!您的角色已經達到了最高的等級 100,所以往後的等級提升您將不會再獲得屬性點。您可以使用這個角色續續升級,又或者透過巿集取得免費的重生之球,從等級 1 開始一場嶄新的冒險。", + "noMoreAllocate": "恭喜您!您的角色已經達到了等級 100,所以往後的等級您將不會再獲得屬性點。您可以使用這個角色續續升級,又或者透過巿集取得免費的重生之球,從等級 1 開始一場嶄新的冒險。", "stats": "屬性", "strength": "力量", "strengthText": "力量會增加「會心一擊」的機率,而會心一擊時會提升金幣、經驗和物品掉落的機率。力量還能幫助你傷害 BOSS。", @@ -121,7 +126,7 @@ "rogueText": "盜賊熱衷於積累財富,比其他人獲得更多的金幣,還擅長尋找隨機物品。他們特有的匿蹤技能使得他們能夠躲避未完成的每日任務帶來的傷害。如果你希望獲得更多的獎勵、成就並渴求戰利品及徽章,來玩盜賊吧!", "healerText": "醫者頑強地對抗突如其來的傷害,並且保護其他的人。錯過的日常任務和一些壞習慣不太能影響他們,他們總是想方設法幫你治療。如果你熱衷於輔助其他的隊友或者是享受那種從死神手裡奪回生命的快感,那就成為一名醫者吧!", "optOut": "暫時不選擇", - "optOutText": "不想要玩職業系統,或是想稍候再做選擇?暫時不選擇 - 你將會是一位戰士,沒有任何特別的屬性。你可以從遊戲維基取得各種職業的資訊,並且稍候在設定裏啟用職業系統。", + "optOutText": "不想要選擇職業,或是想稍候再做選擇?如果暫時不選擇,你將會是一位戰士,並沒有任何特別的屬性。你可以從遊戲維基取得各種職業的資訊,並且稍候在設定裏選擇職業。", "select": "選擇", "stealth": "匿蹤", "stealthNewDay": "新的一天開始時,錯過了的每日任務不會傷害到你。", @@ -145,12 +150,12 @@ "unequipCostume": "卸下服裝", "unequipPetMountBackground": "卸下寵物、座騎、背景", "animalSkins": "動物膚色", - "chooseClassHeading": "選擇你的職業!或是等會再選。", + "chooseClassHeading": "選擇你的職業!或是等會再選。", "warriorWiki": "戰士_", - "mageWiki": "魔法師", + "mageWiki": "法師", "rogueWiki": "盜賊", "healerWiki": "醫者", - "chooseClassLearn": "了解更多職業資訊", + "chooseClassLearn": "了解職業", "str": "力量", "con": "體質", "per": "感知", diff --git a/common/locales/zh_TW/communityguidelines.json b/common/locales/zh_TW/communityguidelines.json index 1e02923ee3..f12222a128 100644 --- a/common/locales/zh_TW/communityguidelines.json +++ b/common/locales/zh_TW/communityguidelines.json @@ -7,8 +7,8 @@ "commGuidePara003": "這些規則適用在屬於我們的所有社群空間(但也不只限於此),包括 Trello, Github, Transifex 以及 Wikia (也就是我們的維基百科)。\n有時候會出現一些前所未見的新狀況,像是新的衝突事端或是邪惡的亡靈法師,當這些情況發生,管理員們可能會修改這些指導原則以確保整個社群不受威脅、平安。別擔心,假如指導原則有所更動,Bailey 會發布公告來通知你。", "commGuidePara004": "拿起你的羽毛筆跟羊皮卷軸,準備開始做筆記吧!", "commGuideHeadingBeing": "成為一個Habit公民", - "commGuidePara005": "Habitica 是最早、最一流的自我提升網站,這讓我們幸運地在網路上凝聚了最溫暖、大方、謙遜,也最相挺的社群。一個 Habitican 有許多特徵,其中最常見也最顯眼的是:", - "commGuideList01A": " 樂於助人的心。許多人費時費力幫助社群新人、給予指導。例如,新手公會,就是一種專門回答人們各式疑惑的協會,如果你覺得你能幫上忙,無須害羞!", + "commGuidePara005": "Habitica 是一個提升自我改善的網站,這讓我們幸運地在網絡上凝聚了最溫暖、大方、謙遜,也最相挺的社群。一個 Habitican 有許多特徵,其中最常見也最顯眼的是:", + "commGuideList01A": " 樂於助人的心。許多人抽出時間幫助社群新人、給予指導。例如,新手公會就是一種專門回答人們各式疑惑的協會。如果你覺得你能幫上忙,無須害羞!", "commGuideList01B": " 勤勉的態度。Habitican 在努力改善自己的生活同時,也是在不斷地為這個網站添磚加瓦。這是一個開源項目,我們每個人都持續地在讓這個地方變得好上加好。", "commGuideList01C": "積極的援助。Habitican 們為他人的成功喝采,在逆境中撫慰彼此。在隊伍中使用技能、在聊天室中說友善的鼓勵話語,彼此支援、彼此依賴、彼此學習。", "commGuideList01D": "相敬的禮儀。我們有不同的出身、不同的技能以及不同的想法,這是如此我們的社群才如此美妙!Habitican們尊重、擁抱彼此的差異,記住這點,很快地你將會用有來自生活中各方各面的朋友。", @@ -21,7 +21,7 @@ "commGuidePara009b": "在 Github 上", "commGuidePara010": "有些管理員會來協助職員。他們都經過精挑細選,所以請不吝給予尊重並聆聽他們的建議。", "commGuidePara011": "現在的職員成員是(從左到右):", - "commGuidePara011a": "酒館裡的對話", + "commGuidePara011a": "在酒館對話", "commGuidePara011b": "在 GitHub/Wikia 上", "commGuidePara011c": "在 Wikia 上", "commGuidePara011d": "在 GitHub 上", @@ -44,7 +44,7 @@ "commGuidePara019": "在個人空間中, 玩家能更自由的討論任何喜歡的話題,但是,他們仍不能違反條款與要求,包括發布任何歧視性的、暴力的、恐嚇性的內容。", "commGuidePara020": "私人信息(私信)有一些附加要求。如果某人將你加入黑名單,請不要在任何別的地方聯繫對方要求解除。並且你不應該用私信來尋求幫助(對幫助問題的公開回答會幫助整個社區)。最後,不要給任何人發私信要求寶石或訂閱來作為禮物,因為這樣的行為會被認為是在發送垃圾信息。", "commGuidePara021": "此外,Habit大陸中的一些公共區域還有另外的準則.", - "commGuideHeadingTavern": "旅店", + "commGuideHeadingTavern": "酒館", "commGuidePara022": "酒館是Habiticans交流的地方。酒館主人Daniel將店裡打理得一塵不染,Lemoness樂意在你坐下來聊天時,變出一杯檸檬水。只是要記住……", "commGuidePara023": "話題往往圍繞閒聊和提高生產力或改善生活的技巧。", "commGuidePara024": "因為酒館只能保留200條信息,所以它不是個適合延長話題的地方,尤其是敏感話題 (例如政治、宗教、抑鬱等,即使是獵殺哥布林的話題也應被禁止)。這些討論必需符合相關準則或是the Back Corner(詳情參見下方信息)。", @@ -134,11 +134,11 @@ "commGuideList11C": "申請", "commGuideList11D": "刪除(管理員/員工可能會刪除有問題的內容)", "commGuideList11E": "編輯(管理員/員工可能會刪除有問題的內容)", - "commGuideHeadingRestoration": "恢復", + "commGuideHeadingRestoration": "歸還", "commGuidePara061": "Habit大陸是一塊致力於自我完善的地方,我們相信又第二次機會。如果你違了規且接受後果,將其視為一個評估你行為的機會,並努力成為一名更好的社區成員。", "commGuidePara062": "你收到的說明你行為後果的電子郵件(或者,輕度違規的情況,管理員/工作人員通告)是個很好的信息來源。配合實施的限制,並努力符合撤銷處罰的要求。", "commGuidePara063": "如果你不明白你的後果,或者你違規的性質,請詢問工作人員/版主來幫助你以避免以後犯同樣的錯誤。", - "commGuideHeadingContributing": "為Habitica作出貢獻", + "commGuideHeadingContributing": "為 Habitica 作出貢獻", "commGuidePara064": "Habitica 是一個開源項目,這意味著我們歡迎任何Habit公民的加入!每一位加入的玩家都會按照以下貢獻等級獲得獎勵:", "commGuideList12A": "Habitica貢獻者勳章,和3顆寶石", "commGuideList12B": "貢獻者盔甲,增加 3 寶石", @@ -158,21 +158,21 @@ "commGuidePara068": "現在向前進發吧,勇敢的冒險家,完成你的每日任務吧!", "commGuideHeadingLinks": "有用的連結", "commGuidePara069": "這些插圖由以下富有天賦的藝術家貢獻:", - "commGuideLink01": "新手協會", + "commGuideLink01": "新手公會", "commGuideLink01description": "一個專門為新用戶回答問題的公會!", "commGuideLink02": "後角公會", "commGuideLink02description": "一個討論複雜或敏感話題的公會。", "commGuideLink03": "維基", "commGuideLink03description": "收集最多的關於Habitica的消息。", "commGuideLink04": "GitHub", - "commGuideLink04description": "上報漏洞或者幫助開發程式!", - "commGuideLink05": "Main Trello", + "commGuideLink04description": "用於上報漏洞或者幫助開發程式!", + "commGuideLink05": "主要 Trello", "commGuideLink05description": "用於申請網站功能。", - "commGuideLink06": "Mobile Trello", + "commGuideLink06": "移動Trello", "commGuideLink06description": "用於申請移動端功能。", - "commGuideLink07": "Art Trello", + "commGuideLink07": "藝術Trello", "commGuideLink07description": "用於提交像素畫。", - "commGuideLink08": "Quest Trello", - "commGuideLink08description": "提交任務作品。", + "commGuideLink08": "Trello 的任務", + "commGuideLink08description": "對於提交任務的寫作。", "lastUpdated": "最後更新" } \ No newline at end of file diff --git a/common/locales/zh_TW/content.json b/common/locales/zh_TW/content.json index 633d706cdb..0d942c7bd6 100644 --- a/common/locales/zh_TW/content.json +++ b/common/locales/zh_TW/content.json @@ -1,100 +1,106 @@ { "potionText": "治療藥水", - "potionNotes": "回復15點生命值(立即使用)", + "potionNotes": "回復 15 點生命值 (立即使用 )", "armoireText": "神秘寶箱", - "armoireNotesFull": "打開神祕寶箱隨機獲得特殊裝備,經驗,或食物!裝備碎片還有:", + "armoireNotesFull": "打開神祕寶箱而隨機獲得特殊裝備,經驗,或食物!裝備還有:", "armoireLastItem": "你找到了神祕寶箱裡最後一件稀有裝備碎片。", - "armoireNotesEmpty": "每個月的第一個禮拜,神祕寶箱都會推出新的裝備。在那之前,請繼續點擊神祕寶箱以獲得經驗和食物吧!", + "armoireNotesEmpty": "每個月的第一個禮拜,神祕寶箱都會推出新的裝備。在那之前,請繼續點擊神祕寶箱以獲得經驗和食物!", "dropEggWolfText": "狼", "dropEggWolfMountText": "狼", - "dropEggWolfAdjective": "一隻憨厚老實的", + "dropEggWolfAdjective": "一隻忠誠的", "dropEggTigerCubText": "小老虎", "dropEggTigerCubMountText": "老虎", - "dropEggTigerCubAdjective": "一隻適合演壞人的", + "dropEggTigerCubAdjective": "一隻兇猛的", "dropEggPandaCubText": "小熊貓", "dropEggPandaCubMountText": "熊貓", - "dropEggPandaCubAdjective": "一隻看似善良但一點也不的", + "dropEggPandaCubAdjective": "一隻溫馴的", "dropEggLionCubText": "小獅子", "dropEggLionCubMountText": "獅子", - "dropEggLionCubAdjective": "一隻像是土豪的", + "dropEggLionCubAdjective": "一隻豪氣的", "dropEggFoxText": "狐狸", "dropEggFoxMountText": "狐狸", - "dropEggFoxAdjective": "一隻古靈精怪的", + "dropEggFoxAdjective": "一隻狡詐的", "dropEggFlyingPigText": "飛豬", "dropEggFlyingPigMountText": "飛豬", - "dropEggFlyingPigAdjective": "一隻幽默有趣的", + "dropEggFlyingPigAdjective": "一隻怪誕的", "dropEggDragonText": "龍", "dropEggDragonMountText": "龍", - "dropEggDragonAdjective": "一隻騰雲駕霧的", + "dropEggDragonAdjective": "一隻強壯偉大的", "dropEggCactusText": "仙人掌", "dropEggCactusMountText": "仙人掌", - "dropEggCactusAdjective": "一隻會刺到你的", + "dropEggCactusAdjective": "一隻刺手的", "dropEggBearCubText": "小熊", "dropEggBearCubMountText": "熊", - "dropEggBearCubAdjective": "一隻可愛到爆炸的", + "dropEggBearCubAdjective": "一隻愛擁抱的", "questEggGryphonText": "獅鷲獸", "questEggGryphonMountText": "獅鷲獸", - "questEggGryphonAdjective": "一隻驕傲無可救藥的", + "questEggGryphonAdjective": "一隻驕傲的", "questEggHedgehogText": "刺猬", "questEggHedgehogMountText": "刺猬", - "questEggHedgehogAdjective": "一隻美麗帶刺的", + "questEggHedgehogAdjective": "一隻尖銳的", "questEggDeerText": "鹿", "questEggDeerMountText": "鹿", - "questEggDeerAdjective": "一隻恍若仙女的", + "questEggDeerAdjective": "一隻優雅的", "questEggEggText": "蛋", "questEggEggMountText": "蛋籃子", "questEggEggAdjective": "一顆色彩繽紛的", "questEggRatText": "老鼠", "questEggRatMountText": "老鼠", - "questEggRatAdjective": "一隻灰撲撲的", + "questEggRatAdjective": "一隻骯髒的", "questEggOctopusText": "章魚", "questEggOctopusMountText": "章魚", - "questEggOctopusAdjective": "一隻滑頭滑腦的", + "questEggOctopusAdjective": "一隻滑溜的", "questEggSeahorseText": "海馬", "questEggSeahorseMountText": "海馬", - "questEggSeahorseAdjective": "一隻珍奇難尋的", + "questEggSeahorseAdjective": "一隻珍奇的", "questEggParrotText": "鸚鵡", "questEggParrotMountText": "鸚鵡", - "questEggParrotAdjective": "一隻活力充沛的", + "questEggParrotAdjective": "一隻朝氣的", "questEggRoosterText": "公雞", "questEggRoosterMountText": "公雞", - "questEggRoosterAdjective": "一隻傲視群雄的", + "questEggRoosterAdjective": "一隻傲氣的", "questEggSpiderText": "蜘蛛", "questEggSpiderMountText": "蜘蛛", - "questEggSpiderAdjective": "一隻毛骨悚然的", + "questEggSpiderAdjective": "一隻恐怖的", "questEggOwlText": "貓頭鷹", "questEggOwlMountText": "貓頭鷹", - "questEggOwlAdjective": "一隻富含智慧的", + "questEggOwlAdjective": "一隻有智慧的", "questEggPenguinText": "企鵝", "questEggPenguinMountText": "企鵝", - "questEggPenguinAdjective": "一隻敏捷迅速的", + "questEggPenguinAdjective": "一隻精明的", "questEggTRexText": "暴龍", "questEggTRexMountText": "暴龍", "questEggTRexAdjective": "一隻雙手短短的", "questEggRockText": "巨石", - "questEggRockMountText": "巨石", - "questEggRockAdjective": "一顆活躍的", + "questEggRockMountText": "石頭", + "questEggRockAdjective": "一顆活潑的", "questEggBunnyText": "兔子", "questEggBunnyMountText": "兔子", - "questEggBunnyAdjective": "一隻軟綿綿的", + "questEggBunnyAdjective": "一隻柔軟的", "questEggSlimeText": "棉花糖史萊姆", "questEggSlimeMountText": "棉花糖史萊姆", "questEggSlimeAdjective": "一坨甜滋滋的", "questEggSheepText": "羊", "questEggSheepMountText": "羊", - "questEggSheepAdjective": "一隻毛蓬蓬的", + "questEggSheepAdjective": "一隻蓬蓬的", "questEggCuttlefishText": "烏賊", "questEggCuttlefishMountText": "烏賊", - "questEggCuttlefishAdjective": "一隻可愛到爆炸的", + "questEggCuttlefishAdjective": "一隻萌萌的", "questEggWhaleText": "鯨魚", "questEggWhaleMountText": "鯨魚", - "questEggWhaleAdjective": "一隻像巨人的", + "questEggWhaleAdjective": "一隻巨大的", "questEggCheetahText": "獵豹", "questEggCheetahMountText": "獵豹", - "questEggCheetahAdjective": "一隻為人實在的", + "questEggCheetahAdjective": "一隻誠實的", "questEggHorseText": "馬", "questEggHorseMountText": "馬", - "questEggHorseAdjective": "一隻隨風奔馳的", + "questEggHorseAdjective": "一隻奔馳的", + "questEggFrogText": "青蛙", + "questEggFrogMountText": "青蛙", + "questEggFrogAdjective": "一隻王子般的", + "questEggSnakeText": "蛇", + "questEggSnakeMountText": "蛇", + "questEggSnakeAdjective": "一個滑行", "eggNotes": "找瓶孵化藥水倒在這顆蛋上,接著等蛋孵化出<%= eggAdjective(locale) %> <%= eggText(locale) %>。", "hatchingPotionBase": "普通", "hatchingPotionWhite": "白色", diff --git a/common/locales/zh_TW/death.json b/common/locales/zh_TW/death.json index fcd41aa03a..81991cdfb4 100644 --- a/common/locales/zh_TW/death.json +++ b/common/locales/zh_TW/death.json @@ -1,11 +1,11 @@ { - "lostAllHealth": "沒有HP了!", + "lostAllHealth": "沒有 HP了!", "dontDespair": "不要絕望!", - "deathPenaltyDetails": "你失去了一些等級、黃金、裝備,但是只要努力就可以把它們拿回來!", + "deathPenaltyDetails": "你失去了一個等級、所有黃金和一件裝備,但是只要努力就可以把它們拿回來!", "refillHealthTryAgain": "回復 HP,然後再試一次", - "dyingOftenTips": "這很常發生嗎? 這裡有 些密技!", + "dyingOftenTips": "這常常發生嗎? 這裡有些密技!", "losingHealthWarning": "小心!你的生命值正在減少!", - "losingHealthWarning2": "別讓你的生命值降為0!你會因此損失一個等級、金幣,和噴掉某件裝備。", + "losingHealthWarning2": "別讓你的生命值降為零!你會因此損失一個等級、所有金幣和一件裝備。", "toRegainHealth": "若要回復生命值:", "lowHealthTips1": "等級提升而補足生命值!", "lowHealthTips2": "從獎勵欄內購買治療藥水可以回復15點生命值。", diff --git a/common/locales/zh_TW/faq.json b/common/locales/zh_TW/faq.json index a01c6c88fb..ed164d2b8e 100644 --- a/common/locales/zh_TW/faq.json +++ b/common/locales/zh_TW/faq.json @@ -2,7 +2,7 @@ "frequentlyAskedQuestions": "常見問題", "faqQuestion0": "我不知道怎麼玩,有遊戲介紹嗎?", "iosFaqAnswer0": "首先,你要設定好你的每日任務。接著,當你在現實生活中完成時,再把每日任務打勾,你會因此得到經驗值和金幣。金幣可以購買裝備和物品,而經驗值能使你的角色升級並且隨著等級提升還能解鎖其他功能,像是:寵物、技能,以及關卡任務!你可以調整你自己的角色在選單「玩家」>「角色」裡面。\n\n另外,有些基本的功能作用需要注意:點選手機螢幕介面右上角的(+)可以增加新任務。新增任務後,可以輕按現有任務便可再度編輯。按住不放將任務往左邊滑過便可刪除。在畫面左上角有一個標籤可幫助你分類,你可以點選任務來增加或減少清單。", - "webFaqAnswer0": "首先,你要設定好你的每日任務。接著,當你在現實生活中完成時,再把每日任務打勾,你會因此得到經驗值和金幣。金幣可以購買裝備和物品,而經驗值能使你的角色升級並且隨著等級提升還能解鎖其他功能,像是:寵物、技能,以及關卡任務!\n\n想要更多資訊,可以在wiki裡面找到詳細的介紹,讓你一步一步熟悉遊戲! [wiki](http://habitica.wikia.com/wiki/Habitica_Wiki)", + "webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).", "faqQuestion1": "我要如何設定每日任務?", "iosFaqAnswer1": "好習慣(+符號)就是你每天可以做很多次的那種正面任務,像是多吃菜。壞習慣(-符號)則是你應該要避免的負面任務,像是咬指甲。有些習慣同時擁有+和-,代表它可以同時兼具好的一面和壞的一面,像是走樓梯vs搭電梯。達成好習慣會獎勵你金幣和經驗。壞習慣則會減損生命值。\n\n每日任務是你每天都會做到的事情,像是刷牙或檢查電子信箱。你可以透過點擊來指定每日任務的天數。如果你沒有在每日任務指定的日子完成它的話,你的角色會在隔天減少生命值。所以小心不要一口氣增加太多每日任務!\n\n待辦事項是你的待辦清單,完成待辦事項也能夠得到金幣和經驗值。你不會因為待辦事項完成與否而受到攻擊。對著待辦事項點選也可以編輯指定日期。", "webFaqAnswer1": "好習慣( )就是你每天可以做很多次的那種正面任務,像是多吃菜。壞習慣()則是你應該要避免的負面任務,像是咬指甲。有些習慣同時擁有 ,代表它可以同時兼具好的一面和壞的一面,像是走樓梯vs搭電梯。達成好習慣會獎勵你金幣和經驗。壞習慣則會減損生命值。\n

\n每日任務是你每天都會做到的事情,像是刷牙或檢查電子信箱。你可以透過點擊來指定每日任務的天數。如果你沒有在每日任務指定的日子完成它的話,你的角色會在隔天減少生命值。所以小心不要一口氣增加太多每日任務!\n

\n待辦事項是你的待辦清單,完成待辦事項也能夠得到金幣和經驗值。你不會因為待辦事項完成與否而受到攻擊。對著待辦事項點選鉛筆按鈕也可以編輯指定日期。", @@ -16,7 +16,7 @@ "iosFaqAnswer4": "有很多方式都會減少角色的生命值。第一,如果你沒有如期完成每日任務的話,角色會在隔天受到傷害。第二,如果你做了壞習慣,它也會使生命值受損。最後,若你正在隊伍裡並且處於活動任務捲軸狀態的話,如果隊友沒有乖乖完成他自己的每日任務,那麼任務魔王也會攻擊你喔。\n\n主要回復生命值的方法就是提升等級,當你升等就會自動補足生命值。你也可以用金幣購買獎勵框框裡的治療藥水。另外,當你等級大於或等於10時,你可以選擇成為醫者,這樣一來你就能夠學習治癒術。或者你的隊伍中「社交」>「隊伍」,有人是醫者的話,可以請他們治療你喔。", "webFaqAnswer4": "有很多方式都會減少角色的生命值。第一,如果你沒有如期完成每日任務的話,角色會在隔天受到傷害。第二,如果你做了壞習慣,它也會使生命值受損。最後,若你正在隊伍裡並且處於活動任務捲軸狀態的話,如果隊友沒有乖乖完成他自己的每日任務,那麼任務魔王也會攻擊你喔。

\n主要回復生命值的方法就是提升等級,當你升等就會自動補足生命值。你也可以用金幣購買獎勵框框裡的治療藥水。另外,當你等級大於或等於10時,你可以選擇成為醫者,這樣一來你就能夠學習治癒術。或者你的隊伍中 (「社交」> 「隊伍」),有人是醫者的話,可以請他們治療你喔。", "faqQuestion5": "要怎麼做才能夠跟朋友一起玩Habitica?", - "iosFaqAnswer5": "最好的方法就是邀請他們跟你一起加入隊伍,參考 [website](https://habitica.com/#/options/groups/party)!我們在不久的將來會增加功能讓app可以新增隊伍,但現在你可以先用這個 [website](https://habitica.com/#/options/groups/party)。隊伍可以參加任務捲軸、跟魔王對抗、使用技能來支援彼此。在網站裡你可以和朋友加入公會,裡面有一個公共的聊天室。公會也會增加到之後的app更新中。", + "iosFaqAnswer5": "最好的方法就是邀請他們加入你的隊伍!隊伍可以參加活動任務、跟魔王對抗、施放技能來支援彼此。如果你並沒有加入任一隊伍的話,可前往選單>隊伍,接著點選\"建立新隊伍\"。然後點選成員名單,就可以在右上角看到邀請朋友選項,輸入他們的使用者ID (UUID:一串由數字和英文字母組成的字串,每個人都可以在手機app中的設定 >帳號 ,或是網站裡的設定 >API 裡面找到自己的UUID。)在網站上,你還可以用電子郵件邀請朋友,而這項功能也會增加到之後的app更新中。\n\n在網站裡你可以和朋友加入公會,裡面有一個公共的聊天室。公會也會增加到之後的app更新中。", "webFaqAnswer5": "最好的方法就是邀請他們跟你一起加入隊伍,選擇「社交」>「隊伍」。隊伍可以參加任務捲軸、和魔王對抗、使用技能來支援彼此。你也可以加入公會 (「社交」>「公會」),公會裡面有聊天室,你可以在上面分享些新鮮事或者說說你想要達成的好習慣目標,你可以自由的選擇要公開聊天或者私下。公會可以重複加入數個,但是隊伍一次只能加入一組喔!\n

\n想要知道更多資訊,請點選我們的wiki頁面 [隊伍](http://habitrpg.wikia.com/wiki/Party) and [公會](http://habitrpg.wikia.com/wiki/Guilds)", "faqQuestion6": "我要怎麼做才能得到寵物或是坐騎呢?", "iosFaqAnswer6": "當你等級升到3的時候,就會解鎖掉落系統。每當你完成任務時,你就會有一定的機率收到寵物蛋、孵化藥水,或是餵養寵物的食物。當你收到時系統就會自動存入「選單」>「物品」。\n\n想要孵化寵物,你需要同時擁有寵物蛋和孵化藥水各一。點選寵物蛋確認你要孵化的種類,接著點擊「孵化」,然後選擇孵化藥水就能夠確認寵物的顏色囉!孵化完成後你可以到「選單」>「寵物」將你的寵物裝備到角色上。\n\n你也可以用餵食的方式讓寵物進化成坐騎。點選寵物選擇「餵食」,你會看到一條綠色的狀態列隨著你餵食次數而增長,當狀態列額滿後就會進化成坐騎。這需要花點時間,不過如果你能找到寵物最喜歡的食物,就可以加速寵物進化的速度囉!請多多嘗試食物種類或者看這個[see the spoilers here]。(http://habitica.wikia.com/wiki/Food#Food_Preferences)\n當你擁有了一隻座騎,你可以到「選單」>「坐騎」將它裝備到角色上。\n\n當你完成某些任務捲軸時,你也可能收到任務寵物蛋。(你可以看看下面有一些關於任務捲軸的介紹)。", @@ -28,14 +28,17 @@ "iosFaqAnswer8": "當你等級10的時候,除了能夠選擇職業外,還會出現一條藍色的狀態列,它是你的魔力值。當你繼續升等後,你還會陸續解鎖一些特殊的職業技能,使用技能會使你的魔力減少。每種職業都有各自獨特的技能,當等級11時你會在「選單」>「使用技能」內找到它們。魔力值不像生命值一樣會隨著你等級提升而補滿,它會因為你完成好習慣、每日任務和待辦事項而增加,也會因為你做了壞習慣而減少。順帶一提,每隔一天魔力值也會悄悄回復一點,當你完成越多每日任務,隔天也能補充越多魔力值喔。", "webFaqAnswer8": "當你等級10的時候,除了能夠選擇職業外,還會出現一條藍色的狀態列,它是你的魔力值。當你繼續升等後,你還會陸續解鎖一些特殊的職業技能,使用技能會使你的魔力減少。每種職業都有各自獨特的技能,當等級11時你會在主畫面右方的「獎勵」內找到它們。魔力值不像生命值一樣會隨著你等級提升而補滿,它會因為你完成好習慣、每日任務和待辦事項而增加,也會因為你做了壞習慣而減少。順帶一提,每隔一天魔力值也會悄悄回復一點,當你完成越多每日任務,隔天也能補充越多魔力值喔。", "faqQuestion9": "我要怎麼做才能夠攻擊魔王而且參與任務卷軸呢?", - "iosFaqAnswer9": "首先,你要先加入或者建立一個隊伍(往上滑有相關說明),當然你也可以獨自一人解任務,但我們還是推薦加入隊伍啦,因為多點人會比較輕鬆,而且跟朋友一起行動也比較能激勵你!\n\n接著,你要有一個任務捲軸,它會被存在「選單」>「物品」裡面。你有三種方式可以獲得捲軸:\n\n-當你等級15時,你會得到一個任務線,它是由三個任務組合而成的。而每當你等級達30級、40級、60級的時候,系統也會自動開啟各自的任務線。\n\n-當你使用電腦在網站邀請別人進入你的隊伍[網站](https://habitica.com/#/options/groups/party),系統也會自動發送一個任務卷軸給你。(我們往後也會新增這項功能在手機版上。)\n\n-你也可以使用電腦在網站上用金幣或是寶石購買任務捲軸。[網站](https://habitica.com/#/options/inventory/quests) (我們往後也會新增這項功能在手機版上。)\n\n通常情況下,任務捲軸的任務會是和魔王決鬥或是收集特定物品,當你完成後它會在隔天顯示目前收集狀態或是魔王的生命值還剩多少。(你只需要按住螢幕往下拉就可以看到。)如果你在解任務途中錯過任何每日任務沒有完成的話,在你攻擊魔王的同時魔王也會攻擊你的隊員哦!\n\n在11級過後,戰士和法師會有職業技能能夠對魔王造成額外傷害,所以如果你現在已經等級10了,想成為一個優秀的前鋒就對著這兩個職業點下去吧!", + "iosFaqAnswer9": "首先,你要先加入或者建立一個隊伍(往上滑有相關說明),當然你也可以獨自一人解任務,但我們還是推薦加入隊伍啦,因為多點人會比較輕鬆,而且跟朋友一起行動也比較能激勵你!\n\n接著,你要有一個任務捲軸,它會被存在「選單」>「物品」裡面。你有三種方式可以獲得捲軸:\n\n -當你等級15時,你會得到一個任務線,它是由三個任務組合而成的。而每當你等級達30級、40級、60級的時候,系統也會自動開啟各自的任務線。\n -當你邀請別人進入你的隊伍,你會得到一個基本任務卷軸做為獎勵。\n -你也可以在網站上的任務頁面裡,用金幣或寶石購買任務捲軸。[網站](https://habitica.com/#/options/inventory/quests) (我們往後也會新增這項功能在手機版上。) \n\n通常情況下,任務捲軸的任務會是和魔王決鬥或是收集特定物品,當你完成後它會在隔天顯示目前收集狀態或是魔王的生命值還剩多少。(你只需要按住螢幕往下拉就可以看到。)如果你在解任務途中錯過任何每日任務沒有完成的話,在你攻擊魔王的同時魔王也會攻擊你的隊員哦!\n\n在11 級過後,戰士和法師會有職業技能可以對魔王造成額外傷害,所以如果你現在已經等級10了,想成為一個優秀的前鋒就對著這兩個職業點下去吧!", "webFaqAnswer9": "首先,你要先加入或者創建一個隊伍(在「社交」>「隊伍」中),當然你也可以獨自一人解任務,但我們還是推薦你加入隊伍啦,因為多點人會比較輕鬆打卷軸,而且跟朋友一起行動也比較能激勵你!\n

\n接著,你要有一個任務卷軸,它會被存在「背包」>「任務」裡面。你有三種方式可以獲得卷軸:\n

\n*當你等級15時,你會得到一個任務線,它是由三個任務組合而成的。而每當你等級達30級、40級、60級的時候,系統也會自動開啟各自的任務線。\n\n*當你邀請別人進入你的隊伍,系統也會自動發送一個任務卷軸給你哦!\n\n*你也可以用金幣或是寶石購買任務捲軸。(在「背包」>「任務」中)\n

\n通常情況下,任務卷軸的任務會是和魔王決鬥或是收集特定物品,當你完成後它會在隔天顯示目前收集狀態或是魔王的生命值還剩多少。(你只需要重新整理網頁就可以看到。)如果你在解任務途中錯過任何每日任務沒有完成的話,在你攻擊魔王的同時魔王也會攻擊你的隊員哦!\n

\n在11級過後,戰士和法師會有職業技能能夠對魔王造成額外傷害,所以如果你現在已經等級10了,想成為一個優秀的前鋒就對著這兩個職業點下去吧!", - "faqQuestion10": "寶石是什麼東西?我要怎麼得到呢?", + "faqQuestion10": "寶石是什麼?我要怎麼得到呢?", "iosFaqAnswer10": "如果要購買寶石,你必須要點擊上方寶石圖示後使用你錢包裡真真實實的錢來購買。當你購買寶石的同時,也代表你幫助我們把網站建立的更加完善。我們超感謝你的支持!\n\n除了用現金購買才能得到寶石之外,還有三種方法可以獲得:\n\n*使用電腦版在網站贏得挑戰。 [網站](https://habitica.com)你可以在「社交」>「挑戰」裡找到許多由他人設定好的挑戰可以選擇。(我們日後也會增加此功能在手機版上!)\n*使用電腦版在網站上訂閱我們,[網站](https://habitica.com/#/options/settings/subscription)就能夠使用金幣在每個月購買特定數量的寶石哦! \n*為Habitica作出貢獻,看看wiki頁面就能得到更多資訊:[幫助Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n小提醒!不論你有沒有購買寶石,它們不會使你變得比別人更有優勢,所以就算你沒有寶石你還是能夠開開心心順利玩Habitica哦!", - "webFaqAnswer10": "如果要購買寶石,你必須要點擊寶石圖示後使用你錢包裡真真實實的錢來購買, [新台幣/美金]。(https://habitica.com/#/options/settings/subscription),或者成為訂閱用戶也能夠使用遊戲裡的金幣購買一定數量的寶石, [訂閱用戶]。(https://habitica.com/#/options/settings/subscription)當你成為訂閱用戶或者購買寶石的同時,也代表你幫助我們把網站建立的更加完善。我們超感謝你的支持!\n

\n除了用現金購買或者成為訂閱用戶才能得到寶石之外,還有兩種方法可以獲得:\n

\n*贏得挑戰。你可以在「社交」>「挑戰」裡找到許多由他人設定好的挑戰可以選擇。\n\n*為Habitica作出貢獻,看看wiki頁面就能得到更多資訊:[幫助Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n

\n小提醒!不論你有沒有購買寶石,它們不會使你變得比別人更有優勢,所以就算你沒有寶石你還是能夠開開心心順利玩Habitica哦!", + "webFaqAnswer10": "如果要購買寶石,你必須要點擊寶石圖示後使用你錢包裡真真實實的錢來購買 [新台幣/美金](https://habitica.com/#/options/settings/subscription)\n或者成為訂閱用戶也能夠使用遊戲裡的金幣購買一定數量的寶石, [訂閱用戶](https://habitica.com/#/options/settings/subscription)\n當你成為訂閱用戶或者購買寶石的同時,也代表你幫助我們把網站建立的更加完善。我們超感謝你的支持!\n

\n除了用現金購買或者成為訂閱用戶才能得到寶石之外,還有兩種方法可以獲得:\n

\n*贏得挑戰。你可以在「社交」>「挑戰」裡找到許多由他人設定好的挑戰可以選擇。\n\n*為Habitica作出貢獻,看看wiki頁面就能得到更多資訊:[幫助Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n

\n小提醒!不論你有沒有購買寶石,它們不會使你變得比別人更有優勢,所以就算你沒有寶石你還是能夠開開心心順利玩Habitica哦!", "faqQuestion11": "我要怎麼做才能回報問題或者請求新功能呢?", "iosFaqAnswer11": "在「選單」>「回饋意見」裡,你可以回報錯誤、請求新功能或者只是給個意見,我們會盡其所能的協助你!", - "webFaqAnswer11": "回報錯誤的話要到[幫助 > 回報問題](https://github.com/HabitRPG/habitrpg/issues/2760),跟著步驟填寫資訊即可,我們一定會使命必達的,別怕!\n

\n建議我們增加新功能的話,則是要到[幫助 > 請求新功能](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) ,然後跟著音浪一起流動就沒錯啦!", + "webFaqAnswer11": "回報錯誤的話要到[幫助 > 回報問題](https://github.com/HabitRPG/habitrpg/issues/2760),跟著步驟填寫資訊即可,我們一定會使命必達的,別怕!\n

\n建議我們增加新功能的話,則是要到[幫助 > 請求新功能](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) ,然後跟著指示做就沒錯啦!", + "faqQuestion12": "我要如何才能夠挑戰世界老闆?", + "iosFaqAnswer12": "世界BOSS是出現在酒館的特別怪獸。所有使用者都會自動跟Boss作戰,完成日常任務和使用技能都會自動對Boss造成傷害。\n\n你也可以同時解任務,當你完成每日任務和使用技能都會同時對隊伍正在解的活動任務的Boss和世界Boss造成傷害。\n\n世界Boss無法傷害你或者你的帳號。取而代之,它有一個憤怒值,當使用者沒有完成日常任務時就會增加。當憤怒值滿了,它就會攻擊網站裡其中一位非玩家角色,而且改變他們的圖像。\n\n你可以從wiki中獲得更多關於以往世界BOSS的歷史。 [以往 World Bosses](http://habitica.wikia.com/wiki/World_Bosses) ", + "webFaqAnswer12": "世界BOSS是出現在酒館的特別怪獸。所有使用者都會自動跟Boss作戰,完成日常任務和使用技能都會自動對Boss造成傷害。

\n\n你也可以同時解任務,當你完成每日任務和使用技能都會同時對隊伍正在解的活動任務的Boss和世界Boss造成傷害。\n

\n世界Boss無法傷害你或者你的帳號。取而代之,它有一個憤怒值,當使用者沒有完成日常任務時就會增加。當憤怒值滿了,它就會攻擊網站裡其中一位非玩家角色,而且改變他們的圖像。\n

\n你可以從wiki中獲得更多關於以往世界BOSS的歷史。 [以往 World Bosses](http://habitica.wikia.com/wiki/World_Bosses) ", "iosFaqStillNeedHelp": "如果你有疑問,可是沒在這裡看到解答的話,來「選單」>「酒館」的聊天室問問,我們很高興為你服務!", "webFaqStillNeedHelp": "如果你有疑問,可是沒在這裡看到解答的話,來這裏問問 [新手公會](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a),我們很高興為你服務!" } \ No newline at end of file diff --git a/common/locales/zh_TW/front.json b/common/locales/zh_TW/front.json index 4d8ce4282e..118e3cc7e3 100644 --- a/common/locales/zh_TW/front.json +++ b/common/locales/zh_TW/front.json @@ -74,7 +74,7 @@ "infhQuote": "在我讀研究所的時候,[Habitica]幫我重建了生活重心!", "invalidEmail": "需要有效的電子郵件地址,以便進行密碼重置。", "irishfeet123Quote": "我曾經有個很糟的習慣,就是吃完飯後不去整理,而把杯子放得到處都是不放回原位。[Habitica] 救了我!", - "joinOthers": "和 25 萬人一起讓達成目標變得有趣!", + "joinOthers": "Join <%= userCount %> people making it fun to achieve goals!", "kazuiQuote": "還沒有遇到[Habitica]之前,我被論文給卡住了,而且我要求自己要做到的事也都進度緩慢,像是做家事、背單字,學圍棋等。至從遇到它之後我才發現,原來我把事情分散開來會更好管理,現在做這些每日任務成了我的動力來源!", "landingadminlink": "管理方案", "landingend": "還沒被說服嗎?", @@ -179,5 +179,14 @@ "businessInquiries": "商業調查", "merchandiseInquiries": "商品調查", "marketingInquiries": "市場/大眾媒體調查", - "tweet": "推特" + "tweet": "推特", + "apps": "Apps", + "notifyAndroidApp": "Want us to notify you when the Android app is ready? Sign up for this mailing list!", + "checkOutIOSApp": "Check out our new iOS App!", + "imagine1": "Imagine if improving your life were as fun as playing a game.", + "landingCopy1": "Advance in the game by completing your real-life tasks.", + "landingCopy2": "Battle monsters with friends to stay accountable to your goals.", + "landingCopy3": "Join over <%= userCount %> people having fun as they improve their lives.", + "alreadyHaveAccount": "I already have an account!", + "getStartedNow": "Get Started Now!" } \ No newline at end of file diff --git a/common/locales/zh_TW/gear.json b/common/locales/zh_TW/gear.json index 94ed056351..8274c341fb 100644 --- a/common/locales/zh_TW/gear.json +++ b/common/locales/zh_TW/gear.json @@ -87,7 +87,7 @@ "weaponSpecialSpringHealerText": "美麗骨頭", "weaponSpecialSpringHealerNotes": "拿來!增加<%= int %>點智力。2014年春季限量版裝備。", "weaponSpecialSummerRogueText": "海盜彎刀", - "weaponSpecialSummerRogueNotes": "Avast! You'll make those Dailies walk the plank! Increases Strength by <%= str %>. Limited Edition 2014 Summer Gear.", + "weaponSpecialSummerRogueNotes": "退散吧!你讓那些每日任務走上跳板一去不復返!增強<%= str %>;點力量。2014限量版夏季裝備。", "weaponSpecialSummerWarriorText": "航海切片刀", "weaponSpecialSummerWarriorNotes": "沒有任何待辦事項中的任務願意與這把粗糙的刀糾纏!增加<%= str %>點力量。2014年限量版夏季裝備。", "weaponSpecialSummerMageText": "海帶捕捉器", @@ -143,19 +143,25 @@ "weaponMystery301404Text": "蒸氣龐克風拐杖", "weaponMystery301404Notes": "特別適合在城裡散步。3015年3月訂閱者物品。沒有屬性加成。", "weaponArmoireBasicCrossbowText": "基礎十字弓", - "weaponArmoireBasicCrossbowNotes": "不管從多遠,都能夠用這把十字弓刺破任務的鎧甲!增加<%= str %>點力量, <%= per %>點感知和<%= con %>點體質。神祕寶箱:獨立系列", + "weaponArmoireBasicCrossbowNotes": "不管從多遠,都能夠用這把十字弓刺破任務的鎧甲!增加<%= str %>點力量, <%= per %>點感知和<%= con %>點體質。神祕寶箱:獨立物品。", "weaponArmoireLunarSceptreText": "潤月權杖", - "weaponArmoireLunarSceptreNotes": "從這把魔杖所帶來的治癒能量,會隨著月亮盈缺而增減。提高<%= con %>點體質和<%= int %>點智力。神祕寶箱:潤月系列 (3/3)。", - "weaponArmoireRancherLassoText": "牧人套索", - "weaponArmoireRancherLassoNotes": "套索:為圍捕和扯皮的理想工具。增加<%= str %>點力量, <%= per %>點感知和<%= int %>點智力。神祕寶箱:牧人系列(3/3)。", + "weaponArmoireLunarSceptreNotes": "從這把魔杖所帶來的治癒能量,會隨著月亮盈缺而增減。提高<%= con %>點體質和<%= int %>點智力。神祕寶箱:潤月系列(3/3)。", + "weaponArmoireRancherLassoText": "牛仔套索", + "weaponArmoireRancherLassoNotes": "套索:為圍補和牽繩的理想工具。增加<%= str %>點力量, <%= per %>點感知和<%= int %>點智力。神祕寶箱:牛仔系列(3/3)。", "weaponArmoireMythmakerSwordText": "神話英雄之劍", - "weaponArmoireMythmakerSwordNotes": "雖然這把劍看起來有點破舊,但它可是見證了無數個神話英雄的誕生。增加感知和力量各<%= attrs %>點。神祕寶箱:黃金袍系列(3/3)。", + "weaponArmoireMythmakerSwordNotes": "Though it may seem humble, this sword has made many mythic heroes. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 3 of 3).", "weaponArmoireIronCrookText": "鐵彎杖", - "weaponArmoireIronCrookNotes": "激烈地敲擊鐵塊所製成的,但這把鐵彎杖很擅長牧羊哦。提高感知和力量各<%= attrs %>點。神祕寶箱:鐵角系列 (3/3)", + "weaponArmoireIronCrookNotes": "Fiercely hammered from iron, this iron crook is good at herding sheep. Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Horned Iron Set (Item 3 of 3).", "weaponArmoireGoldWingStaffText": "金翼魔杖", - "weaponArmoireGoldWingStaffNotes": "The wings on this staff constantly flutter and twist. Increases all attributes by <%= attrs %> each. Enchanted Armoire: Independent Item.", - "weaponArmoireBatWandText": "Bat Wand", - "weaponArmoireBatWandNotes": "This wand can turn any task into a bat! Wave it about and watch them fly away. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Independent Item.", + "weaponArmoireGoldWingStaffNotes": "法杖上的風不斷地旋轉扭動,增加所有屬性各<%= attrs %>點。神祕寶箱:獨立物品。", + "weaponArmoireBatWandText": "蝙蝠魔杖", + "weaponArmoireBatWandNotes": "這個魔杖可以把任何任務轉變成一隻蝙蝠!只要揮動它然後等著看蝙蝠飛走吧。增加<%= int %> 點智力,和<%= per %>點感知。神祕寶箱:獨立物品。", + "weaponArmoireShepherdsCrookText": "牧羊杖", + "weaponArmoireShepherdsCrookNotes": "想要放牧獅鷲獸的話,選這把牧羊杖就對了。增加<%= con %>感知。神秘寶箱:牧羊人系列(1/3)", + "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", + "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", + "weaponArmoireBlueLongbowText": "Blue Longbow", + "weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by 9, Constitution by 8, and Strength by 7. Enchanted Armoire: Independent Item.", "armor": "盔甲", "armorBase0Text": "正常服裝", "armorBase0Notes": "普通的衣服。 沒有屬性加成。", @@ -206,7 +212,7 @@ "armorSpecial2Text": "Jean Chalard 的貴族外套", "armorSpecial2Notes": "讓你更加地蓬鬆!體質與智力各加<%= attrs %>。", "armorSpecialFinnedOceanicArmorText": "魚鰭海洋護甲", - "armorSpecialFinnedOceanicArmorNotes": "Although delicate, this armor makes your skin as harmful to the touch as a fire coral. Increases Strength by <%= str %>.", + "armorSpecialFinnedOceanicArmorNotes": "雖然看起來很精緻,但這件盔甲會讓你的皮膚摸起來像是有害的紅珊瑚哦。增加<%= str %>點力量。", "armorSpecialYetiText": "雪怪馴化長袍", "armorSpecialYetiNotes": "模糊和激烈。增加<%= con %>點體質。2013-2014冬季限量版裝備。", "armorSpecialSkiText": "雪橇刺客大衣", @@ -220,7 +226,7 @@ "armorSpecialBirthday2015Text": "愚蠢的隊伍長袍", "armorSpecialBirthday2015Notes": "生日快樂,Habitica!穿上這些愚蠢的派對長袍去慶祝美妙的一天,沒有屬性加成。", "armorSpecialGaymerxText": "彩虹戰士護甲", - "armorSpecialGaymerxNotes": "這件特殊的護甲裝飾著五彩斑斕的彩虹圖案,是為紀念自豪季和GaymerX而生!GaymerX是一個遊戲大會,慶祝LGBTQ和遊戲並對每個人開放。它舉辦於舊金山中心的洲際酒店,時間是7月11-13日!沒有屬性加成。", + "armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "armorSpecialSpringRogueText": "圓滑貓套裝", "armorSpecialSpringRogueNotes": "無可挑剔的整潔。增加<%= per %>點感知。限量版2014年春季裝備。", "armorSpecialSpringWarriorText": "四葉草鋼護甲", @@ -261,22 +267,22 @@ "armorSpecialSpring2015MageNotes": "你的燕尾服尾巴很配你的棉尾巴哦!提高<%= int %>點智力。2015春季限定版裝備。", "armorSpecialSpring2015HealerText": "撫慰連衣褲", "armorSpecialSpring2015HealerNotes": "這條柔軟的連衣褲非常舒適,就像薄荷茶一樣撫慰人心。提高<%= con %>點體質。2015春季限定版裝備。", - "armorSpecialSummer2015RogueText": "Ruby Tail", - "armorSpecialSummer2015RogueNotes": "This garment of shimmering scales transforms its wearer into a real Reef Renegade! Increases Perception by <%= per %>. Limited Edition 2015 Summer Gear.", - "armorSpecialSummer2015WarriorText": "Golden Tail", - "armorSpecialSummer2015WarriorNotes": "This garment of shimmering scales transforms its wearer into a real Sunfish Warrior! Increases Constitution by <%= con %>. Limited Edition 2015 Summer Gear.", + "armorSpecialSummer2015RogueText": "紅寶石尾", + "armorSpecialSummer2015RogueNotes": "這件衣服上那閃閃發光的鱗片會使穿上的人變成一個真真正正的珊瑚礁逆賊!增加<%= per %>點感知。2015年夏季限量版裝備。", + "armorSpecialSummer2015WarriorText": "黃金尾", + "armorSpecialSummer2015WarriorNotes": "這件衣服上那閃閃發光的鱗片會使穿上的人變成一個真真正正的太陽魚戰士!增加<%= con %>點體質。2015年夏季限量版裝備。", "armorSpecialSummer2015MageText": "預言者袍", - "armorSpecialSummer2015MageNotes": "Hidden power resides in the puffs of these sleeves. Increases Intelligence by <%= int %>. Limited Edition 2015 Summer Gear.", + "armorSpecialSummer2015MageNotes": "隱藏的力量存在於袖子裡的煙霧中。增加<%= int %>.點智力。2015年夏季限量版裝備。", "armorSpecialSummer2015HealerText": "水手護甲", - "armorSpecialSummer2015HealerNotes": "This armor lets everyone know that you are an honest merchant sailor who would never dream of behaving like a scalawag. Increases Constitution by <%= con %>. Limited Edition 2015 Summer Gear.", - "armorSpecialFall2015RogueText": "Bat-tle Armor", - "armorSpecialFall2015RogueNotes": "Fly into bat-tle! Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "armorSpecialFall2015WarriorText": "Scarecrow Armor", - "armorSpecialFall2015WarriorNotes": "Despite being stuffed with straw, this armor is extremely hefty! Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", - "armorSpecialFall2015MageText": "Stitched Robes", - "armorSpecialFall2015MageNotes": "Every stitch in this armor shimmers with enchantment. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", - "armorSpecialFall2015HealerText": "Potioner Robes", - "armorSpecialFall2015HealerNotes": "What? Of course that was a potion of constitution. No, you are definitely not turning into a frog! Don't be ribbiticulous. Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", + "armorSpecialSummer2015HealerNotes": "這種裝甲讓每個人都以為你是個誠實的商人水手,誰會想要看起來像個騙子呢?增加<%= con %>點體質。2015年夏季限量版裝備。", + "armorSpecialFall2015RogueText": "蝙蝠癲癇盔甲", + "armorSpecialFall2015RogueNotes": "像隻癲險的蝙蝠飛起來吧!增加 <%= per %>點感知。2015年秋季限量版裝備。", + "armorSpecialFall2015WarriorText": "稻草人盔甲", + "armorSpecialFall2015WarriorNotes": "儘管被塞滿了稻草,這件鎧甲是非常沉重的!增加<%= con %>點體質。2015年秋季限量版裝備。", + "armorSpecialFall2015MageText": "縫合長袍", + "armorSpecialFall2015MageNotes": "在這件鎧甲上的每針每線都散發著閃閃動人的魔力。增加<%= int %>點智力。2015年秋季限量版裝備。", + "armorSpecialFall2015HealerText": "藥師長袍", + "armorSpecialFall2015HealerNotes": "什麼?這當然是體質的藥水啊。不會啦,你絕不會變成一隻青蛙!別傻啦。增加<%= con %>點體質。2015年秋季限量版裝備。", "armorMystery201402Text": "使者長袍", "armorMystery201402Notes": "閃閃發光又強大,這些衣服有很多攜帶信件的口袋。沒有屬性加成。 2014年2月訂閱者物品。", "armorMystery201403Text": "森林行者護甲", @@ -305,22 +311,30 @@ "armorMystery201506Notes": "穿上這件色澤鮮豔的泳裝在珊瑚礁潛水吧!沒有屬性加成。 2015年6月訂閱者物品。", "armorMystery201508Text": "獵豹套裝", "armorMystery201508Notes": "穿上毛茸茸的獵豹服裝讓你跑得跟閃光一樣快!沒有屬性加成。 2015年8月訂閱者物品。", - "armorMystery201509Text": "Werewolf Costume", - "armorMystery201509Notes": "This IS a costume, right? Confers no benefit. September 2015 Subscriber Item.", + "armorMystery201509Text": "狼人服裝", + "armorMystery201509Notes": "這真的是扮裝,對吧?沒有屬性加成。2015年9月訂閱者物品。", + "armorMystery201511Text": "Wooden Armor", + "armorMystery201511Notes": "Considering this armor was carved directly from a magical log, it's surprisingly comfortable. Confers no benefit. November 2015 Subscriber Item.", "armorMystery301404Text": "蒸汽龐克套裝", "armorMystery301404Notes": "精巧又瀟灑,哇嗚!沒有屬性加成。3015年1月訂閱者物品。", "armorArmoireLunarArmorText": "潤月護甲", - "armorArmoireLunarArmorNotes": "月光會使你堅強和機警。提高 <%= str %> 點力量和 <%= int %>點智力。神祕寶箱:潤月系列(2/3)。", + "armorArmoireLunarArmorNotes": "月光會使你堅強和機警。提高 <%= str %> 點力量和 <%= int %>點智力。神祕寶箱:潤月系列(2/3)。", "armorArmoireGladiatorArmorText": "角鬥士鎧甲", - "armorArmoireGladiatorArmorNotes": "想成為一名夠格的角鬥士,你不僅要夠狡猾⋯⋯還要強到破表。增加感知<%= per %>點和力量<%= str %>。神祕寶箱:角鬥士系列(2/3)。", - "armorArmoireRancherRobesText": "牧人袍", - "armorArmoireRancherRobesNotes": "穿著這身神奇的牧人袍,帶上你的坐騎和寵物們吧!增加<%= str %>點力量, <%= per %>點感知和<%= int %>點智力。神祕寶箱:牧人系列(2/3)", + "armorArmoireGladiatorArmorNotes": "想成為一名夠格的角鬥士,你不僅要夠狡猾⋯⋯還要強到破表。增加感知<%= per %>點和力量<%= str %>。神祕寶箱:角鬥士系列(2/3)。", + "armorArmoireRancherRobesText": "牛仔裝", + "armorArmoireRancherRobesNotes": "穿著這身神奇的牧人袍,帶上你的坐騎和寵物們吧!增加<%= str %>點力量, <%= per %>點感知和<%= int %>點智力。神祕寶箱:牛仔系列(2/3)。", "armorArmoireGoldenTogaText": "黃金長袍", - "armorArmoireGoldenTogaNotes": "This glimmering toga is only worn by true heroes. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 1 of 3).", + "armorArmoireGoldenTogaNotes": "這件閃閃發光的長袍只有真英雄才夠格穿戴。增加力量和體質各<%= attrs %>點。神祕寶箱:黃金袍系列(1/3)。", "armorArmoireHornedIronArmorText": "鐵角鎧甲", - "armorArmoireHornedIronArmorNotes": "Fiercely hammered from iron, this horned armor is nearly impossible to break. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Horned Iron Set (Item 2 of 3).", + "armorArmoireHornedIronArmorNotes": "用鐵鍛造而成,這件角盔甲無懈可擊!增加<%= con %>點體質和<%= per %>點感知。神祕寶箱:鐵角系列 (2/3)。", "armorArmoirePlagueDoctorOvercoatText": "瘟疫醫袍", - "armorArmoirePlagueDoctorOvercoatNotes": "An authentic overcoat worn by the doctors who battle the Plague of Procrastination! Increases Intelligence by <%= int %>, Strength by <%= str %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 3 of 3).", + "armorArmoirePlagueDoctorOvercoatNotes": "和拖拉瘟疫戰鬥的醫生,值得一件真真正正的大衣!增加<%= int %>點智力,<%= str %>點力量和<%= con %>點體質。神祕寶箱:瘟疫醫師系列(3/3)。", + "armorArmoireShepherdRobesText": "牧羊人長袍", + "armorArmoireShepherdRobesNotes": "布料材質涼爽,透氣,非常適合在沙漠中的大熱天放牧獅鷲。增加力量和感知各<%= attrs %>點。神秘寶箱:牧羊人系列(2/3)", + "armorArmoireRoyalRobesText": "皇家長袍", + "armorArmoireRoyalRobesNotes": "精彩的統治者,整天都在統治來統治去!增加體質、智力和感知各<%= attrs %>點。神秘寶箱:皇家系列(3/3)", + "armorArmoireCrystalCrescentRobesText": "Crystal Crescent Robes", + "armorArmoireCrystalCrescentRobesNotes": "These magical robes are luminescent at night. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 2 of 3).", "headgear": "頭飾", "headBase0Text": "沒有頭盔", "headBase0Notes": "沒有頭飾", @@ -371,7 +385,7 @@ "headSpecial2Text": "無名頭盔", "headSpecial2Notes": "不求回報之人對自己許下的聖約。提高智力和力量各<%= attrs %>點。", "headSpecialFireCoralCircletText": "火珊瑚頭飾", - "headSpecialFireCoralCircletNotes": "This circlet, designed by Habitica's greatest alchemists, allows you to breathe water and dive for treasure! Increases Perception by <%= per %>.", + "headSpecialFireCoralCircletNotes": "這個裝備,由Habitica最偉大的煉金師設計,讓你可以在水中呼吸和潛水尋寶!", "headSpecialNyeText": "可笑的派對帽子", "headSpecialNyeNotes": "你收到了一頂可笑的派對帽子!當新年鐘聲響起時,自豪地戴上這頂帽子吧!沒有屬性加成。", "headSpecialYetiText": "雪怪馴化頭盔", @@ -425,23 +439,23 @@ "headSpecialSpring2015HealerText": "撫慰王冠", "headSpecialSpring2015HealerNotes": "王冠中央的珍珠能鎮定並安撫其周圍的人。提高<%= int %>點智力。2015春季限定版裝備。", "headSpecialSummer2015RogueText": "叛徒之帽", - "headSpecialSummer2015RogueNotes": "This pirate hat fell overboard and has been decorated with scraps of fire coral. Increases Perception by <%= per %>. Limited Edition 2015 Summer Gear.", + "headSpecialSummer2015RogueNotes": "這個海盜帽掉下了甲板,帽上裝飾著火珊瑚碎片。增加<%= per %>點感知。2015年夏季限量版裝備。", "headSpecialSummer2015WarriorText": "寶石海洋頭盔", - "headSpecialSummer2015WarriorNotes": "Crafted of deep-ocean metal by the artisans of Dilatory, this helm is strong and handsome. Increases Strength by <%= str %>. Limited Edition 2015 Summer Gear.", + "headSpecialSummer2015WarriorNotes": "由辦事拖拉的工匠從深海金屬提煉製作而成。是頂堅固而美觀的頭盔。增加<%= str %>點力量。2015夏季限量版裝備。", "headSpecialSummer2015MageText": "預言者圍巾", - "headSpecialSummer2015MageNotes": "Hidden power shines in the threads of this scarf. Increases Perception by <%= per %>. Limited Edition 2015 Summer Gear.", + "headSpecialSummer2015MageNotes": "隱藏的力量閃耀在這條圍巾的絲線中。增加<%= per %>點感知。2015年限量版夏季裝備。", "headSpecialSummer2015HealerText": "水手帽", - "headSpecialSummer2015HealerNotes": "With your sailor's cap set firmly on your head, you can navigate even the stormiest seas! Increases Intelligence by <%= int %>. Limited Edition 2015 Summer Gear.", - "headSpecialFall2015RogueText": "Bat-tle Wings", - "headSpecialFall2015RogueNotes": "Echolocate your enemies with this powerful helm! Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "headSpecialFall2015WarriorText": "Scarecrow Hat", - "headSpecialFall2015WarriorNotes": "Everyone would want this hat--if they only had a brain. Increases Strength by <%= str %>. Limited Edition 2015 Autumn Gear.", - "headSpecialFall2015MageText": "Stitched Hat", - "headSpecialFall2015MageNotes": "Every stitch in this hat augments its power. Increases Perception by <%= per %>. Limited Edition 2015 Autumn Gear.", - "headSpecialFall2015HealerText": "Hat of Frog", - "headSpecialFall2015HealerNotes": "This is an extremely serious hat that is worthy of only the most advanced potioners. Increases Intelligence by <%= int %>. Limited Edition 2015 Autumn Gear.", + "headSpecialSummer2015HealerNotes": "把你的水手帽穩穩地戴在頭上,你甚至可以暢行暴風雨的海洋!增加<%= int %>點智力。2015年夏季限量版裝備。", + "headSpecialFall2015RogueText": "蝙蝠癲癇翅膀", + "headSpecialFall2015RogueNotes": "用這頂強大的頭盔去擊敗敵人吧!增加<%= per %>點感知。2015年秋季限量版裝備。", + "headSpecialFall2015WarriorText": "稻草人帽", + "headSpecialFall2015WarriorNotes": "每一個人都搶著要這頂帽子——如果他們有腦袋的話。增加<%= str %>點力量。2015年秋季限量版裝備。", + "headSpecialFall2015MageText": "縫合帽", + "headSpecialFall2015MageNotes": "在這頂帽子上的一針一線都增強了它的力量。增加<%= per %>點感知。2015年秋季限量版裝備。", + "headSpecialFall2015HealerText": "青蛙帽", + "headSpecialFall2015HealerNotes": "這是一頂極其嚴肅的帽子,只有最優秀的藥師可以配戴它。增加<%= int %>點智力。 2015年秋季限量版裝備。", "headSpecialGaymerxText": "彩虹戰士頭盔", - "headSpecialGaymerxNotes": "這頂由五光十色的鐳射彩虹圖案裝飾的帽子是為了慶祝驕傲時節和GaymerX!GaymerX是一個向所有人開放的慶祝LGBTQ並儘情玩樂的遊戲大會。7月11-13日在舊金山市中心洲際飯店舉行!沒有屬性加成。", + "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", "headMystery201402Text": "翼盔", "headMystery201402Notes": "這頂帶翅膀的飾環使佩戴者風馳電掣!沒有屬性加成。2014年2月捐贈者物品。", "headMystery201405Text": "精神的火焰", @@ -459,43 +473,51 @@ "headMystery201501Text": "繁星頭盔", "headMystery201501Notes": "頭盔上閃爍搖曳的星座指引著佩戴者的思緒向目標前進。沒有屬性加成。2015年1月訂閱者物品。", "headMystery201505Text": "綠騎士頭盔", - "headMystery201505Notes": "頭盔上的綠色長羽正驕傲的舞動著。沒有屬性加成。2015年訂閱者物品。", + "headMystery201505Notes": "頭盔上的綠色長羽正驕傲的舞動著。沒有屬性加成。2015年5月訂閱者物品。", "headMystery201508Text": "獵豹帽", - "headMystery201508Notes": "這個柔順的獵豹帽可真是毛茸茸啊!沒有屬性加成。2015年訂閱者物品。", - "headMystery201509Text": "Werewolf Mask", - "headMystery201509Notes": "This IS a mask, right? Confers no benefit. September 2015 Subscriber Item.", + "headMystery201508Notes": "這個柔順的獵豹帽可真是毛茸茸啊!沒有屬性加成。2015年8月訂閱者物品。", + "headMystery201509Text": "狼人面具", + "headMystery201509Notes": "這個真的是面具,對吧?沒有屬性加成。2015年9月訂閱者物品。", + "headMystery201511Text": "Log Crown", + "headMystery201511Notes": "Count the number of rings to learn how old this crown is. Confers no benefit. November 2015 Subscriber Item.", "headMystery301404Text": "華麗禮帽", "headMystery301404Notes": "上流社會佼佼者的華麗禮帽!3015年1月訂閱者物品。沒有屬性加成。", "headMystery301405Text": "基礎禮帽", "headMystery301405Notes": "一頂基礎禮帽,渴望能與華麗的頭飾搭配。沒有屬性加成。3015年5月訂閱者物品。", "headArmoireLunarCrownText": "潤月王冠", - "headArmoireLunarCrownNotes": "This crown strengthens health and sharpens senses, especially when the moon is full. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Soothing Lunar Set (Item 1 of 3).", + "headArmoireLunarCrownNotes": "這頂王冠能增強生命值並磨練感知,特別是在月圓的時候。增加<%= con %>點體質和 <%= per %>點感知。神祕寶箱:潤月系列(1/3)。", "headArmoireRedHairbowText": "紅蝴蝶結頭飾", - "headArmoireRedHairbowNotes": "Become strong, tough, and smart while wearing this beautiful Red Hairbow! Increases Strength by <%= str %>, Constitution by <%= con %>, and Intelligence by <%= int %>. Enchanted Armoire: Independent Item.", + "headArmoireRedHairbowNotes": "當你戴上紅蝴蝶結頭飾,你就能變得更強壯、堅毅而且更聰明!增加<%= str %>點力量,<%= con %>點體質和<%= int %>點智力。神祕寶箱:獨立物品。", "headArmoireVioletFloppyHatText": "紫色軟帽", - "headArmoireVioletFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a pleasing purple color. Increases Perception by <%= per %>, Intelligence by <%= int %>, and Constitution by <%= con %>. Enchanted Armoire: Independent Item.", + "headArmoireVioletFloppyHatNotes": "許多咒術被縫進這頂帽子裡,最後再給它一抹惹人喜愛的紫色。增加<%= per %>點感知,<%= int %>點智力和<%= con %>點體質。神祕寶箱:獨立物品。", "headArmoireGladiatorHelmText": "角鬥士頭盔", - "headArmoireGladiatorHelmNotes": "To be a gladiator you must be not only strong.... but cunning. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Gladiator Set (Item 1 of 3).", - "headArmoireRancherHatText": "牧人帽", - "headArmoireRancherHatNotes": "Round up your pets and wrangle your mounts while wearing this magical Rancher Hat! Increases Strength by <%= str %>, Perception by <%= per %>, and Intelligence by <%= int %>. Enchanted Armoire: Rancher Set (Item 1 of 3).", + "headArmoireGladiatorHelmNotes": "要成為一名鬥士,你必須要不僅是強壯⋯⋯還要狡猾。增加智力<%= int %>點和<%= per %>點感知。神祕寶箱:角鬥士系列(1/3)。", + "headArmoireRancherHatText": "牛仔帽", + "headArmoireRancherHatNotes": "戴著這頂神奇的牧人帽,帶上你的坐騎和寵物們吧!增加<%= str %>點力量,<%= per %>點感知和<%= int %>點智力。神祕寶箱:牛仔系列(1/3)。", "headArmoireBlueHairbowText": "藍蝴蝶結頭飾", - "headArmoireBlueHairbowNotes": "Become perceptive, tough, and smart while wearing this beautiful Blue Hairbow! Increases Perception by <%= per %>, Constitution by <%= con %>, and Intelligence by <%= int %>. Enchanted Armoire: Independent Item.", + "headArmoireBlueHairbowNotes": "當你戴上藍蝴蝶結頭飾,你就能變得更敏銳、堅毅而且更聰明!增加<%= per %>點感知,<%= con %>點體質和<%= int %>點智力。神祕寶箱:獨立物品。", "headArmoireRoyalCrownText": "王者之冠", - "headArmoireRoyalCrownNotes": "Hooray for the ruler, mighty and strong! Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "headArmoireRoyalCrownNotes": "吾王萬歲萬萬歲,年年有今日歲歲有今朝!增加 <%= str %>點力量。神秘寶箱:皇家系列(1/3)", "headArmoireGoldenLaurelsText": "黃金桂冠", - "headArmoireGoldenLaurelsNotes": "These golden laurels reward those who have conquered bad habits. Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Golden Toga Set (Item 2 of 3).", + "headArmoireGoldenLaurelsNotes": "這頂金色桂冠用來獎勵那些克服壞習慣的人們。增加感知和體質各<%= attrs %>點。神祕寶箱:黃金袍系列(2/3)。", "headArmoireHornedIronHelmText": "鐵角頭盔", - "headArmoireHornedIronHelmNotes": "Fiercely hammered from iron, this horned helmet is nearly impossible to break. Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Horned Iron Set (Item 1 of 3).", + "headArmoireHornedIronHelmNotes": "用鐵激烈地鍛造而成,這件角頭盔無懈可擊!增加<%= con %>點體質和<%= str %>點力量。神祕寶箱:鐵角系列 (1/3)。", "headArmoireYellowHairbowText": "黃蝴蝶結頭飾", - "headArmoireYellowHairbowNotes": "Become perceptive, strong, and smart while wearing this beautiful Yellow Hairbow! Increases Perception, Strength, and Intelligence by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireYellowHairbowNotes": "當你戴上黃蝴蝶結頭飾,你就能變得更敏銳、堅毅而且更聰明!增加感知、體質和智力各<%= attrs %>點。神祕寶箱:獨立物品。", "headArmoireRedFloppyHatText": "紅色軟帽", - "headArmoireRedFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a radiant red color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoireRedFloppyHatNotes": "許多咒術被縫進這頂帽子裡,最後再給它一抹光芒四射的紅色。增加感知、智力和體質各<%= attrs %>點。神祕寶箱:獨立物品。", "headArmoirePlagueDoctorHatText": "瘟疫醫帽", - "headArmoirePlagueDoctorHatNotes": "An authentic hat worn by the doctors who battle the Plague of Procrastination! Increases Strength by <%= str %>, Intelligence by <%= int %>, and Constitution by <%= con %>. Enchanted Armoire: Plague Doctor Set (Item 1 of 3).", - "headArmoireBlackCatText": "Black Cat Hat", - "headArmoireBlackCatNotes": "This black hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", - "headArmoireOrangeCatText": "Orange Cat Hat", - "headArmoireOrangeCatNotes": "This orange hat is... purring. And twitching its tail. And breathing? Yeah, you just have a sleeping cat on your head. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Independent Item.", + "headArmoirePlagueDoctorHatNotes": "和拖拉瘟疫戰鬥的醫生,值得一件真真正正的帽子!增加<%= int %>點智力,<%= str %>點力量和<%= con %>點體質。神祕寶箱:瘟疫醫師系列(1/3)。", + "headArmoireBlackCatText": "黑貓帽", + "headArmoireBlackCatNotes": "這頂黑帽在⋯⋯打呼嚕,甩動著尾巴,而且還在呼吸?沒錯,在你頭上的是一隻正在睡覺的貓。增加智力和感知各<%= attrs %>點。神祕寶箱:獨立物品。", + "headArmoireOrangeCatText": "橘貓帽", + "headArmoireOrangeCatNotes": "這頂橘帽在⋯⋯打呼嚕,甩動著尾巴,而且還在呼吸?沒錯,在你頭上的是一隻正在睡覺的貓。增加力量和體質各<%= attrs %>點。神祕寶箱:獨立物品。", + "headArmoireBlueFloppyHatText": "藍色軟帽", + "headArmoireBlueFloppyHatNotes": "許多咒術被縫進這頂帽子裡,最後再給它一抹燦爛的藍色。增加感知、智力和體質各<%= attrs %>點。神祕寶箱:獨立物品。", + "headArmoireShepherdHeaddressText": "牧羊人頭飾", + "headArmoireShepherdHeaddressNotes": "你戴上這頂頭飾顯得智力非凡,不過有時候,你放養的獅鷲們喜歡咀嚼它。增加<%= int %>點智力。神秘寶箱:牧羊人系列(3/3)", + "headArmoireCrystalCrescentHatText": "Crystal Crescent Hat", + "headArmoireCrystalCrescentHatNotes": "The design on this hat waxes and wanes with the phases of the moon. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 1 of 3).", "offhand": "副手物品", "shieldBase0Text": "沒有副手裝備", "shieldBase0Notes": "沒有盾牌或副武器。", @@ -524,7 +546,7 @@ "shieldSpecial1Text": "水晶盾", "shieldSpecial1Notes": "既能粉碎利箭,也能打破反對者的說詞。所有屬性提高<%= attrs %>。", "shieldSpecialMoonpearlShieldText": "月亮珍珠盾", - "shieldSpecialMoonpearlShieldNotes": "Designed for fast swimming, and also some defense. Increases Constitution by <%= con %>.", + "shieldSpecialMoonpearlShieldNotes": "被設計用來幫助快速游泳,還能夠形成一點防禦。增加<%= con %>點體質。", "shieldSpecialGoldenknightText": "Mustaine的碎石流星錘", "shieldSpecialGoldenknightNotes": "怪物統統搗碎!增加力量、智力、體質各<%= attrs %>點。", "shieldSpecialYetiText": "雪怪馴化盾", @@ -564,21 +586,23 @@ "shieldSpecialSummer2015RogueText": "火焰珊瑚", "shieldSpecialSummer2015RogueNotes": "這種火珊瑚具有一種能力,可以在水裡散播毒液。提高<%= str %>點力量。2014夏季限量版裝備。", "shieldSpecialSummer2015WarriorText": "太陽魚盾", - "shieldSpecialSummer2015WarriorNotes": "Crafted of deep-ocean metal by the artisans of Dilatory, this shield shines like the sand and the sea. Increases Constitution by <%= con %>. Limited Edition 2015 Summer Gear.", + "shieldSpecialSummer2015WarriorNotes": "由辦事拖拉的工匠從深海金屬提煉製作而成。是一面閃耀著細沙和海浪的盾牌。增加 <%= con %>點體質。2015夏季限量版裝備。", "shieldSpecialSummer2015HealerText": "綑綁之盾", - "shieldSpecialSummer2015HealerNotes": "Use this shield to bash away bilge rats. Increases Constitution by <%= con %>. Limited Edition 2015 Summer Gear.", + "shieldSpecialSummer2015HealerNotes": "用這面盾牌擊退船艙裡的老鼠吧。增加<%= con %>點體質。2015年夏季限量版裝備。", "shieldSpecialFall2015RogueText": "蝙蝠癲險斧", "shieldSpecialFall2015RogueNotes": "令人恐懼的待辦事項看到這把斧頭在晃動時,也給嚇的縮起來。2015秋季限量版裝備。", - "shieldSpecialFall2015WarriorText": "Birdseed Bag", - "shieldSpecialFall2015WarriorNotes": "It's true that you're supposed to be SCARING the crows, but there's nothing wrong with making friends! Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", - "shieldSpecialFall2015HealerText": "Stirring Stick", - "shieldSpecialFall2015HealerNotes": "This stick can stir anything without melting, dissolving, or bursting into flame! It can also be used to fiercely poke enemy tasks. Increases Constitution by <%= con %>. Limited Edition 2015 Autumn Gear.", + "shieldSpecialFall2015WarriorText": "鳥飼料袋", + "shieldSpecialFall2015WarriorNotes": "沒錯你是該嚇唬走烏鴉,但是交些朋友也不是什麼壞事!增加 <%= con %>點體質。2015年秋季限量版裝備。", + "shieldSpecialFall2015HealerText": "攪拌棒", + "shieldSpecialFall2015HealerNotes": "這根棒子無論攪拌任何東西都不會融化、溶解、更不會起火燃燒!你可以用它戳爆敵方任務。增加<%= con %>點體質。2015年秋季限量版裝備。", "shieldMystery301405Text": "時鐘之盾", "shieldMystery301405Notes": "擁有這塊高聳的時鐘之盾,時間與你同在!沒有屬性加成。3015年6月訂閱者物品。", "shieldArmoireGladiatorShieldText": "角鬥士盾", - "shieldArmoireGladiatorShieldNotes": "To be a gladiator you must.... eh, whatever, just bash them with your shield. Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Gladiator Set (Item 3 of 3).", - "shieldArmoireMidnightShieldText": "Midnight Shield", - "shieldArmoireMidnightShieldNotes": "This shield is most powerful at the stroke of midnight! Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Independent Item.", + "shieldArmoireGladiatorShieldNotes": "想成為一名夠格的角鬥士,你不僅要⋯⋯算了隨便啦,用盾牌打爆他們就對了。增加體質 <%= con %> 點和力量<%= str %>。神祕寶箱:角鬥士系列(1/3)。", + "shieldArmoireMidnightShieldText": "午夜之盾", + "shieldArmoireMidnightShieldNotes": "在午夜鐘聲響起時,這面盾牌將會展現它最大的力量!增加<%= con %> 點體質和<%= str %>點力量。神祕寶箱:獨立物品。", + "shieldArmoireRoyalCaneText": "皇家手杖", + "shieldArmoireRoyalCaneNotes": "皇上吉祥!為此高唱!增加體質、智力和感知各<%= attrs %>點。神秘寶箱:皇家系列(2/3)", "back": "後背附件", "backBase0Text": "沒有後背附件", "backBase0Notes": "沒有後背附件。", @@ -591,7 +615,9 @@ "backMystery201504Text": "匆忙蜜蜂翅膀", "backMystery201504Notes": "嗡嗡嗡!掠過一樣又一項的任務。沒有屬性加成。2015年5月訂閱者品。", "backMystery201507Text": "抗輻射衝浪板", - "backMystery201507Notes": "Surf off the Diligent Docks and ride the waves in Inkomplete Bay! Confers no benefit. July 2015 Subscriber Item.", + "backMystery201507Notes": "Surf off the Diligent Docks and ride the waves in Inkomplete Bay!沒有屬性加成。2015年7月訂閱者物品。", + "backMystery201510Text": "哥布林尾巴", + "backMystery201510Notes": "很好抓握而且力量強大!2015年10月訂閱者物品。", "backSpecialWonderconRedText": "威武斗篷", "backSpecialWonderconRedNotes": "力量與美貌在刷刷作響。沒有屬性加成。特別版參與者物品。", "backSpecialWonderconBlackText": "潛行斗篷", @@ -662,6 +688,8 @@ "headAccessoryMystery201409Notes": "這對強大的鹿角會隨著樹葉一起改變顏色。沒有屬性加成。2014年9月訂閱者物品。", "headAccessoryMystery201502Text": "思緒之翼", "headAccessoryMystery201502Notes": "讓想像力翱翔吧!沒有屬性加成。2015年2月訂閱者物品。", + "headAccessoryMystery201510Text": "哥布林角", + "headAccessoryMystery201510Notes": "這些嚇人的角有一點黏糊糊的。沒有屬性加成。2015年10月訂閱者物品。", "headAccessoryMystery301405Text": "頭戴護目鏡", "headAccessoryMystery301405Notes": "人們說,\"護目鏡是戴在眼睛上的\"。人們說,\"沒有人會想要一個只能戴在頭上的護目鏡\"。哈!你的確是讓他們長見識了!沒有屬性加成。3015年8月訂閱者物品。", "eyewear": "眼部配件", @@ -686,5 +714,5 @@ "eyewearMystery301405Text": "單片眼鏡", "eyewearMystery301405Notes": "沒有什麼飾品能比單片眼鏡更炫—可能吧,除了護目鏡。沒有屬性加成。3015年7月訂閱者物品", "eyewearArmoirePlagueDoctorMaskText": "瘟疫醫師面罩", - "eyewearArmoirePlagueDoctorMaskNotes": "讓醫生戴上這個面罩去抵抗蔓延的瘟疫吧!沒有屬性加成。神祕寶箱:瘟疫醫師系列(2/3)。" + "eyewearArmoirePlagueDoctorMaskNotes": "讓醫生戴上這個面罩去抵抗拖拉瘟疫吧!沒有屬性加成。神祕寶箱:瘟疫醫師系列(2/3)。" } \ No newline at end of file diff --git a/common/locales/zh_TW/generic.json b/common/locales/zh_TW/generic.json index 4eb2dc0b02..1857a05d80 100644 --- a/common/locales/zh_TW/generic.json +++ b/common/locales/zh_TW/generic.json @@ -1,24 +1,24 @@ { "languageName": "中文(正體)", "stringNotFound": "找不到文字“<%= string %>”。", - "titleIndex": "Habitica | 你的生活遊戲", + "titleIndex": "Habitica | 你的生活角色扮演遊戲", "habitica": "Habitica", "expandToolbar": "展開列表", "collapseToolbar": "隱藏列表", - "markdownBlurb": "Habitica 使用 markdown 語法來邊訊息格式,詳見Markdown 速查。", + "markdownBlurb": "Habitica 使用 markdown 管理訊息格式,詳見Markdown 速查。", "showFormattingHelp": "開啟格式使用提示", "hideFormattingHelp": "關閉格式使用提示", - "youType": "輸入:", - "youSee": "結果:", + "youType": "輸入 :", + "youSee": "結果 :", "italics": "*斜體*", "bold": "**粗體**", "strikethrough": "~~刪除線~~", - "emojiExample": ":笑臉:", + "emojiExample": ":smile:", "markdownLinkEx": "[有趣的 Habitica](https://habitica.com)", "markdownImageEx": "![替代文字](https://habitica.com/cake.png \"連結文字\")", "unorderedListHTML": "+ 第一個項目
+ 第二個項目
+ 第三個項目", "unorderedListMarkdown": "+ 第一個項目\n+ 第二個項目\n+ 第三個項目", - "code": "'程式碼'", + "code": "`程式碼`", "achievements": "成就", "modalAchievement": "獲得成就!", "special": "特殊", @@ -28,7 +28,7 @@ "market": "市場", "subscriberItem": "神秘物品", "newSubscriberItem": "新的神秘物品", - "subscriberItemText": "每個月,訂閱者會收到一個神秘物品。一般會在月底前一個星期公佈。詳情請看維基「神秘物品」(Mystery Item)頁面的確切日期。", + "subscriberItemText": "每個月,訂閱者會收到一個神秘物品。一般會在月底前一個星期公佈。詳情請看 Habitica 維基「神秘物品」頁面 。", "all": "全部", "none": "無", "or": "或", @@ -65,12 +65,13 @@ "habitBirthdayText": "慶祝Habitica生日派對!", "habitBirthdayPluralText": "慶祝第<%= number %>次的Habitica生日派對", "habiticaDay": "Habitica 命名日", - "habiticaDaySingularText": "慶祝 Habitica 命名日! 感謝成為超棒的玩家。", + "habiticaDaySingularText": "慶祝了 Habitica 命名日! 感謝這位超棒的玩家。", "habiticaDayPluralText": "慶祝 <%= number %> 命名日! 感謝成為超棒的玩家。", "achievementDilatory": "拖延的救世者", "achievementDilatoryText": "2014年夏季世界事件中協助打敗了恐怖的拖延巨龍!", - "costumeContest": "2014 服裝大賽", - "costumeContestText": "參加2014萬聖節變裝大賽。看看有誰已經在部落格上登記了: habitica .com/tagged/cosplay!", + "costumeContest": "Costume Contestant", + "costumeContestText": "Participated in the Habitoween Costume Contest. See some of the entries on the Habitica blog!", + "costumeContestTextPlural": "Participated in <%= number %> Habitoween Costume Contests. See some of the entries on the Habitica blog!", "memberSince": "- 加入於", "lastLoggedIn": "- 最後上線於", "notPorted": "這個功能未從原版網站中導出。", @@ -79,6 +80,7 @@ "errorUpCase": "錯誤:", "newPassSent": "已傳送新密碼。", "serverUnreach": "暫時連不上伺服器。", + "requestError": "出錯了! 請重新加載頁面, 你的最後行動可能沒有被儲存。", "seeConsole": "如果錯誤仍然存在,請在 幫助>回報問題 告訴我們。如果你熟悉瀏覽器的控制介面,請連同任何錯誤訊息一起回報給我們。", "error": "錯誤", "menu": "選單", @@ -91,7 +93,7 @@ "audioTheme_danielTheBard": "吟遊詩人Daniel", "audioTheme_wattsTheme": "Watts的旋律", "audioTheme_gokulTheme": "戈庫爾主題", - "audioTheme_luneFoxTheme": "LuneFox's Theme", + "audioTheme_luneFoxTheme": "LuneFox 的聲音主題", "askQuestion": "問問題", "reportBug": "回報問題", "contributeToHRPG": "為Habitica作出貢獻", @@ -119,10 +121,10 @@ "greetingCard": "賀卡", "greetingCardExplanation": "你收到愉快的密友成就!", "greetingCardNotes": "送張賀卡給隊伍成員。", - "greeting0": "嗨!", + "greeting0": "您好!", "greeting1": "只是想說聲哈囉:)", "greeting2": "`瘋狂的招手`", - "greeting3": "嘿你!", + "greeting3": "嘿你!", "greetingCardAchievementTitle": "愉快的密友", "greetingCardAchievementText": "哈囉!你收到或寄出 <%= cards %> 張賀卡。", "thankyouCard": "感謝卡", @@ -133,5 +135,17 @@ "thankyou2": "無限的感謝。", "thankyou3": "我非常感謝你!", "thankyouCardAchievementTitle": "大大感恩", - "thankyouCardAchievementText": "感謝你如此感恩! 你收到或送出 <%= cards %> 張感謝卡。" + "thankyouCardAchievementText": "感謝你如此感恩! 你收到或送出 <%= cards %> 張感謝卡。", + "streakAchievement": "你已得到了一個連擊成就!", + "firstStreakAchievement": "21 天連擊。", + "streakAchievementCount": "<%= streaks %> 21 天連擊", + "twentyOneDays": "You've completed your Daily for 21 days in a row!", + "dontBreakStreak": "太棒了! 別斷了這個連擊!", + "dontStop": "不要現在停止!", + "levelUpShare": "I leveled up in Habitica by improving my real-life habits!", + "questUnlockShare": "I unlocked a new quest in Habitica!", + "hatchPetShare": "I hatched a new pet by completing my real-life tasks!", + "raisePetShare": "I raised a pet into a mount by completing my real-life tasks!", + "wonChallengeShare": "我在Habitica贏得了挑戰!", + "achievementShare": "I earned a new achievement in Habitica!" } \ No newline at end of file diff --git a/common/locales/zh_TW/groups.json b/common/locales/zh_TW/groups.json index ff4f64cdfb..8d52cc5561 100644 --- a/common/locales/zh_TW/groups.json +++ b/common/locales/zh_TW/groups.json @@ -3,6 +3,7 @@ "innCheckOut": "離開旅館", "innCheckIn": "在旅館休息", "innText": "你正在旅館內休息! 當你進住,你的每日任務將凍結,但是每天仍會刷新,而且如果你有參加打怪任務,怪物仍可以傷害你跟你一樣在旅館裡的,打怪時產生的傷害(與掉落下來的東西)要等離開旅館才能被收集。", + "innTextBroken": "我想你現在在旅館內休息了...在休息期間,你的每日任務在每天結算時不會對你造成傷害,但還是會每天刷新...如果你正在一場 Boss 戰中,Boss 還是會依隊友未完成的每日任務對你造成傷害...除非他們也都在旅館休息...另外,你無法對 Boss 造成傷害 ( 或獲得物品 ),直到你離開旅館為止...好累啊...", "lfgPosts": "尋找隊伍( 隊伍徵人 ) 貼文", "tutorial": "教學", "glossary": "常用詞彙", @@ -12,20 +13,20 @@ "community": "社區論壇", "dataTool": "數據顯示工具", "resources": "資源", - "askQuestionNewbiesGuild": "Ask a Question (Newbies Guild)", + "askQuestionNewbiesGuild": "提問 ( 新手公會 )", "tavernTalk": "酒館聊天", "tavernAlert1": "注意:如果您想回報一個bug,開發者在這裡不會看到。請", - "tavernAlert2": "use GitHub instead", + "tavernAlert2": "到 GitHub 回報", "moderatorIntro1": "酒館和公會的版主是:", "communityGuidelines": "社群規範", - "communityGuidelinesRead1": "請讀我", + "communityGuidelinesRead1": "請閲讀我們的", "communityGuidelinesRead2": "在聊天之前", "party": "隊伍", "createAParty": "建立一個隊伍", "updatedParty": "隊與設置更新。", "noPartyText": "你不在一個個隊伍中,或是你的隊伍需要一點時間來載入。你可以建立一個隊伍並邀請朋友,或是加入一個既存的隊伍中,讓他們輸入你的UUID,再回來看邀請訊息:", "LFG": "為了宣傳新的隊伍並找到一個人加入,請到<%= linkStart %>Party Wanted(尋找隊伍)<%= linkEnd %>公會。", - "wantExistingParty": "Want to join an existing party? Go to the <%= linkStart %>Party Wanted Guild<%= linkEnd %> and post this User ID:", + "wantExistingParty": "想加入已存在的隊伍嗎?前往<%= linkStart %>隊伍招募公會<%= linkEnd %>並貼出這個 User ID:", "joinExistingParty": "加入他人的隊伍", "create": "建立", "userId": "UUID", @@ -120,7 +121,7 @@ "inviteAlertInfo": "If you have friends already using Habitica, invite them by User ID here.", "inviteExistUser": "Invite Existing Users", "byColon": "作者:", - "inviteNewUsers": "Invite New Users", + "inviteNewUsers": "邀請新玩家", "sendInvitations": "發送邀請", "invitationsSent": "邀請已發送", "inviteAlertInfo2": "或者分享這個連接(複製/粘貼):", @@ -138,12 +139,13 @@ "likePost": "如果喜歡這個貼文請按+1!", "partyExplanation1": "Play Habitica with friends to stay accountable!", "partyExplanation2": "與怪獸對戰並且新增挑戰!", - "partyExplanation3": "Invite friends now to earn a Quest Scroll!", + "partyExplanation3": "現在邀請朋友來賺取一個任務卷軸!", "wantToStartParty": "你想要建立一個隊伍嗎?", "exclusiveQuestScroll": "Inviting a friend to your party will grant you an exclusive Quest Scroll to battle the Basi-List together!", "nameYourParty": "幫你的新隊伍命名吧!", "partyEmpty": "你現在孤零零的在隊伍裡,趕快邀請朋友加入吧!", "partyChatEmpty": "你的隊伍聊天室太安靜了!趕快發送訊息打破沉默吧。", "guildChatEmpty": "This guild's chat is empty! Type a message in the box above to start chatting.", - "possessiveParty": "<%= name %>的隊伍" + "possessiveParty": "<%= name %>的隊伍", + "requestAcceptGuidelines": "If you would like to post messages in the Tavern or any party or guild chat, please first read our <%= linkStart %>Community Guidelines<%= linkEnd %> and then click the button below to indicate that you accept them." } \ No newline at end of file diff --git a/common/locales/zh_TW/limited.json b/common/locales/zh_TW/limited.json index 538d52e7cd..873d39305e 100644 --- a/common/locales/zh_TW/limited.json +++ b/common/locales/zh_TW/limited.json @@ -21,6 +21,7 @@ "valentineCardAchievementText": "哇喔喔,你跟你的朋友真的很互相照顧耶!你收到或寄出 <%= cards %> 張情人節卡片。", "polarBear": "北極熊", "turkey": "火雞", + "gildedTurkey": "Gilded Turkey", "polarBearPup": "小北極熊", "jackolantern": "南瓜燈", "seasonalShop": "季節限定商店", @@ -29,8 +30,9 @@ "seasonalShopClosedText": "季節限定商店目前沒有營業!我不知道店主人在哪,不過我想下個盛大宴會他會回來的。", "seasonalShopText": "歡迎來到季節限定商店!!我們正要把春天 季節限定版 的商品上架呢。這裡的每樣物品都會在每年歡慶春日的時節開放購買,但只到四月30日為止,所以趕快趁現在採購,不然你可得等到明年才能再買囉。", "seasonalShopSummerText": "歡迎來到季節商店!! 我們在夏令有季節性版本 商品。 每年的夏季特賣我們都會提供相關商品販售,只賣到7/31而已喔,所以請趕快購買,錯過要等明年了!", - "seasonalShopFallText": "Welcome to the Seasonal Shop!! We're stocking autumn Seasonal Edition goodies at the moment. Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31, so be sure to stock up now, or you'll have to wait a year to buy these items again!", - "seasonalShopRebirth": "If you've used the Orb of Rebirth, you can repurchase this equipment in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.", + "seasonalShopFallText": "歡迎來到季節商店!! 我們上架了秋季季節限定商品。這裡的所有東西會在每年的秋季節慶活動中開放購買,但只開放到 10 月 31 日為止,所以請務必在此時購入,否則就要再等一年才能買到囉!", + "seasonalShopFallTextBroken": "哦....歡迎來到季節商店...我們目前有秋季季節限定的商品,之類的...這裡的所有東西會在每年的秋季節慶活動中開放購買,但我們只開放到 10 月 31 日...我想你現在就該買起來,不然你就要一直等...一直等...一直等...*嘆氣*", + "seasonalShopRebirth": "如果你曾使用過重生球,你可以在獎勵欄中再購買這個道具。一開始你只能購買目前職業 ( 預設是戰士 ) 的道具,但不要怕,其他職業限定的道具會在你轉換到該職業後開放。", "candycaneSet": "拐杖糖 ( 法師 )", "skiSet": "滑雪杖 ( 盜賊 )", "snowflakeSet": "雪花 ( 醫者 )", @@ -59,6 +61,6 @@ "monsterOfScienceSet": "Monster of Science (Warrior)", "witchyWizardSet": "Witchy Wizard (Mage)", "mummyMedicSet": "Mummy Medic (Healer)", - "vampireSmiterSet": "Vampire Smiter (Rogue)", - "fallEventAvailability": "Available until October 31" + "vampireSmiterSet": "吸血鬼打擊者(盜賊)", + "fallEventAvailability": "即日起至10月31日" } \ No newline at end of file diff --git a/common/locales/zh_TW/messages.json b/common/locales/zh_TW/messages.json index cadab228e9..c4f1165111 100644 --- a/common/locales/zh_TW/messages.json +++ b/common/locales/zh_TW/messages.json @@ -2,11 +2,11 @@ "messageLostItem": "你的 <%= itemText %> 壞掉了。", "messageTaskNotFound": "找不到任務。", "messageDuplicateTaskID": "這個任務的 ID 已存在。", - "messageTagNotFound": "找不到標籤", + "messageTagNotFound": "找不到標籤。", "messagePetNotFound": "找不到寵物", "messageFoodNotFound": "找不到食物", - "messageNotAvailable": "這個物品目前無法購得。", - "messageCannotFeedPet": "無法餵食這隻寵物", + "messageNotAvailable": "這個物品目前無法購買。", + "messageCannotFeedPet": "無法餵食這隻寵物。", "messageAlreadyMount": "你已經擁有這個坐騎了,試著給其他的寵物。", "messageEvolve": "你已經馴服 <%= egg %>,出去兜兜風吧!", "messageLikesFood": "<%= egg %> 真的很喜歡 <%= foodText %>!", @@ -14,21 +14,42 @@ "messageBought": "購買了 <%= itemText %>", "messageEquipped": "裝備了 <%= itemText %>。", "messageUnEquipped": "取下 <%= itemText %> 了。", - "messageMissingEggPotion": "缺少蛋或是藥劑", - "messageInvalidEggPotionCombo": "你不能使用魔法孵化藥水在任務寵物蛋上,請試試別種蛋吧。", + "messageMissingEggPotion": "缺少了蛋或是藥水。", + "messageInvalidEggPotionCombo": "你不能在任務寵物蛋上使用魔法孵化藥水,請試試別種蛋吧。", "messageAlreadyPet": "你已經有這隻寵物了,請試試別的組合!", - "messageHatched": "你的蛋孵化了!去馬廄裝備你的寵物", + "messageHatched": "你的蛋孵化了!去馬房裝備你的寵物吧。", "messageNotEnoughGold": "金幣不足", "messageTwoHandled": "<%= gearText %> 是雙手武器", "messageDropFood": "你找到了 <%= dropArticle %><%= dropText %>! <%= dropNotes %>", "messageDropEgg": "你找到一個 <%= dropText %> 蛋! <%= dropNotes %>", "messageDropPotion": "你找到了 <%= dropText %> 的孵化藥劑! <%= dropNotes %>", - "messageDropQuest": "發現一個任務!", - "messageDropMysteryItem": "你打開一個箱子,發現到 <%= dropText %>!", - "messageFoundQuest": "你找到了新任務\"<%= questText %>\"!", - "messageAlreadyPurchasedGear": " 你曾經買過某個裝備,但是現在沒有了,你可在工作頁裡重買一次。", - "messageAlreadyOwnGear": "你已經有這個東西了。到裝備頁裡裝備它吧。", - "armoireEquipment": "<%= image %> 你在神祕寶箱裡找到稀有的裝備 <%= dropText %>! 好棒!", - "armoireFood": "<%= image %> 你在神祕寶箱裡找到 <%= dropArticle %><%= dropText %>. 這是什麼東東啊?", - "armoireExp": "你打開神祕寶箱⋯⋯只得到經驗值。" + "messageDropQuest": "發現一個任務 !", + "messageDropMysteryItem": "你打開箱子,發現到 <%= dropText %>!", + "messageFoundQuest": "你找到了新任務《<%= questText %>》!", + "messageAlreadyPurchasedGear": " 你曾經買過這個裝備,但是現在沒有了。你可在獎勵欄裡重買一次。", + "messageAlreadyOwnGear": "你已經有這個了物品。到裝備頁裡裝備它吧。", + "armoireEquipment": "<%= image %> 你在神祕寶箱裡找到稀有的裝備 <%= dropText %>!好棒!", + "armoireFood": "<%= image %> 你在神祕寶箱裡找到 <%= dropArticle %><%= dropText %>. 這是什麼東西啊?", + "armoireExp": "你打開神祕寶箱⋯⋯只得到經驗值。", + "messageInsufficientGems": "寶石不足 !", + "messageAuthPasswordMustMatch": ":password 和 :confirm密碼不配合。", + "messageAuthCredentialsRequired": ":username, :email, :password, :confirm需要密碼", + "messageAuthUsernameTaken": "使用者名稱已被使用。", + "messageAuthEmailTaken": "電子郵件已被使用。", + "messageAuthNoUserFound": "找不到戶口。", + "messageAuthMustBeLoggedIn": "你需要登入。", + "messageAuthMustIncludeTokens": "您必須在您的請求裏包括令牌和 UID(用戶ID )", + "messageGroupNotFound": "找不到群組或你沒有使用權。", + "messageGroupAlreadyInParty": "已在一個隊伍,請嘗試刷新畫面。", + "messageGroupOnlyLeaderCanUpdate": "只有群組領袖可以更新組別!", + "messageGroupRequiresInvite": "不能加入一個你沒有被邀請參加的群組。", + "messageGroupCannotRemoveSelf": "您不能刪除自己!", + "messageGroupChatBlankMessage": "不能傳送空白的留言。", + "messageGroupChatLikeOwnMessage": "不能讚自己的留言。不要這樣做吧!", + "messageGroupChatFlagOwnMessage": "不能舉報自己的留言。", + "messageGroupChatFlagAlreadyReported": "你已經舉報了這個留言。", + "messageGroupChatNotFound": "找不到留言 !", + "messageGroupChatAdminClearFlagCount": "只有管理員才可以把標記計數清除!", + "messageUserOperationProtected": "path `<%= operation %>` was not saved, as it's a protected path.", + "messageUserOperationNotFound": "<%= operation %> 找不到行動" } \ No newline at end of file diff --git a/common/locales/zh_TW/noscript.json b/common/locales/zh_TW/noscript.json new file mode 100644 index 0000000000..6da2e48056 --- /dev/null +++ b/common/locales/zh_TW/noscript.json @@ -0,0 +1,6 @@ +{ + "jsDisabledHeading": "唉呀!你的瀏覽器沒有啟用 JavaScript", + "jsDisabledHeadingFull": "唉呀!你的瀏覽器未啟用 JavaScript,沒有它 Habitica 就無法正常運行", + "jsDisabledText": "Habitica 沒有它就無法正確顯示網站!", + "jsDisabledLink": "請啟用 JavaScript 來繼續!" +} \ No newline at end of file diff --git a/common/locales/zh_TW/npc.json b/common/locales/zh_TW/npc.json index 46b8b21f8f..42a2d9ce5a 100644 --- a/common/locales/zh_TW/npc.json +++ b/common/locales/zh_TW/npc.json @@ -2,27 +2,31 @@ "npc": "NPC", "npcText": "全力支持了我們的Kickstarter項目!", "mattBoch": "Matt Boch", - "mattShall": "<%= name %>;,需要我把你的坐騎帶出來嗎?當寵物餵滿食物時就會變成坐騎顯示在這邊。點擊一隻坐騎來騎上牠。", - "mattBochText1": "Welcome to the Stable! I'm Matt, the beast master. After level 4, you can hatch pets using eggs and potions. When you hatch a pet in the Market, it will appear here! Click a pet's image to add it to your avatar. Feed them with the food you find after level 4, and they'll grow into powerful mounts.", + "mattShall": "需要我把你的坐騎<%= name %>帶出來嗎?當寵物吃飽時就會變成坐騎顯示在這邊。點擊一隻坐騎來騎上牠吧 !", + "mattBochText1": "歡迎來到馬廄!我是野獸大師Matt。從3等級開始,你就夠使用藥水和寵物蛋來孵化寵物!當你在市場孵化了寵物,牠就會顯示在這裡。點選一隻寵物的圖片把牠加入你的角色。 用你在升上4等級後所尋獲的食物餵食牠們,牠們將會成長為力量充沛的坐騎! ", "daniel": "Daniel", - "danielText": "歡迎來到酒館!稍微坐一下且認識其他人。如果你需要休息(休假?生病?),我會讓你入住旅館。一旦入住,你的每日任務會原地凍結,直到退房的隔天。你將不用為錯過每日任務受傷,但是你仍然能點選完成那些任務。", - "danielText2": "警告:如果你正在參與一個boss戰任務,你仍然會因為隊友未完成的每日任務,受到boss的傷害。而且你讓boss得到傷害(或是收到東西)將會在妳離開旅館時才生效。", + "danielText": "歡迎來到酒館!在這裡坐一下來認識其他人吧。如果你需要休息(休假?生病?),我會讓你入住旅館。一旦入住,你的每日任務會原地凍結,直到退房的隔天。你將不用為錯過每日任務受傷,但是你仍然能點選完成那些任務。", + "danielText2": "警告:如果你正在參與一個boss戰任務,你仍然會因為隊友未完成的每日任務,受到boss的傷害。而且你給boss的傷害(或是收到東西)將會在妳離開旅館時才生效。", + "danielTextBroken": "歡迎來到酒館...痾應該是吧...如果你想休息,我會幫你安排到旅館...在旅館裡休息的期間,你的每日任務在每天結算時不會對你造成傷害,但你還是可以完成他們...如果你有體力的話...", + "danielText2Broken": "哦...如果你正參與一場 boss 任務,boss 還是會因為隊友未完成的每日任務而傷害你...另外,你無法對 Boss 造成傷害 ( 或獲得物品 ),直到你離開旅館為止...", "alexander": "商人Alexander", "welcomeMarket": "歡迎來到市場!在這裡買少見的蛋和藥水!賣掉你多餘的物品!委託服務!來瞧瞧我們能為你提供什麼。", - "sellForGold": "以 <%= gold %> 金幣把 <%= item %> 賣掉", - "sellEggForGold": "賣 <%= itemType %> 蛋得到 <%= gold %> 黃金", - "sellPotionForGold": "賣 <%= itemType %> 藥水得到 <%= gold %> 黃金", + "displayItemForGold": "你要販售一個<%= itemType %>嗎?", + "displayEggForGold": "你要販售一個<%= itemType %>蛋嗎?", + "displayPotionForGold": "你要販售一個<%= itemType %>藥水嗎?", + "sellForGold": "以 <%= gold %> 金幣販售", "buyGems": "購買寶石", "justin": "Justin", "ian": "Ian", "ianText": "歡迎來到任務商店! 這裡可以買任務卷軸,與朋友一起打怪。記得常來看看有什麼可以買!", + "ianBrokenText": "歡迎來到任務商店...你可以跟你朋友們在這裡使用任務卷軸打怪...一定要來看看我們右邊販售的精美任務卷軸哦...", "USD": "美金", "newStuff": "新品", "cool": "稍候再跟我說", "dismissAlert": "不再顯示", "donateText1": "在你的帳號裡增加20個寶石。寶石可以用來購買特殊的虛擬物品,例如衣服和髮型。", "donateText2": "請幫助Habitica", - "donateText3": "這是一個開放原始碼的專案,因此它需要所有得到的帮助。遊戲運行的伺服器費用、維護功能與創造新功能都來自於買寶石的錢,感謝你的大力幫忙!", + "donateText3": "Habitica是一個開源的專案,因此需要我們使用者的贊助。當你購買寶石的同時,也幫助了我們維護遊戲運行的伺服器費用、付小員工薪水、創造新功能還有提供獎勵機制給為網站貢獻的人,感謝你的大力幫忙!", "donationDesc": "捐贈給Habitica 20 顆寶石", "payWithCard": "用信用卡購買", "payNote": "請注意: PayPal 有時候付款會蠻花時間的,我們建議你用信用卡購買。", @@ -56,8 +60,8 @@ "tourChallengesPage": "一些夥伴會創造挑戰,參與挑戰會加入一些工作到你的工作中,贏得挑戰會得到成就甚至是寶石!", "tourMarketPage": "從4級開始,當你完成任務時,蛋和孵化藥水會隨機掉落。他們會出現在這裡—使用它們來孵化寵物!你也可以從集市購買物品。", "tourHallPage": "這裡是英雄館。那些對開源有貢獻的玩家,包含在程式、美術、音樂、著作,或是到處幫忙的人們列於其中。他們已經獲得 寶石、特殊裝備、與偉大的名聲。你也可以為 Habitica 做出貢獻!", - "tourPetsPage": "This is the Stable! After level 4, you can hatch pets using eggs and potions. When you hatch a pet in the Market, it will appear here! Click a pet's image to add it to your avatar. Feed them with the food you find after level 4, and they'll grow into powerful mounts.", - "tourMountsPage": "Once you've fed a pet enough food to turn it into a mount, it will appear here. (Pets, mounts, and food are available after level 4.) Click a mount to saddle up!", + "tourPetsPage": "這裡是馬廄!在你滿3等級時,你可以用寵物蛋和藥水來孵化寵物。當你在市集孵化出寵物時,牠會自動出現在這裡!點選寵物的圖像來加入到你的角色中。你4等級時會找到食物,用食物餵飽寵物的話,牠們就會成長為精力充沛的坐騎哦。", + "tourMountsPage": "一旦你餵飽了一隻寵物,牠就會進化成坐騎。坐騎會出現在這裡(當你等級3的時候,就會開放寵物、坐騎和食物。)點選一隻坐騎裝備上鞍吧! ", "tourEquipmentPage": "這裡是放置裝備的地方! 你的戰鬥裝備影響你的數值。如果你想要讓你的角色大頭貼有不一樣的感覺,請點選 \"使用服裝\"。", "tourOkay": "好!", "tourAwesome": "太棒了!", @@ -71,14 +75,14 @@ "tourHabitsProceed": "有意義!", "tourRewardsBrief": "獎勵列表
  • 把你辛苦賺到的錢花在這吧
  • 為角色購買裝備或設定自訂獎勵。
", "tourRewardsProceed": "就這樣!", - "welcomeToHabit": "Welcome to Habitica!", - "welcome1": "Create a basic avatar.", - "welcome1notes": "This avatar will represent you as you progress.", - "welcome2": "Set up your tasks.", - "welcome2notes": "How well you do on your real-life tasks will control how well you do in the game!", - "welcome3": "Progress in life and the game!", - "welcome3notes": "As you improve your life, your avatar will level up and unlock pets, quests, equipment, and more!", + "welcomeToHabit": "歡迎來到 Habitica !", + "welcome1": "創造一個角色圖像。", + "welcome1notes": "這個角色將伴隨你一起進步!", + "welcome2": "設定你的任務。", + "welcome2notes": "你在現實裡做得多好,將影響你在遊戲中能玩得多棒 !", + "welcome3": "在現實與遊戲中同時進步提升吧!", + "welcome3notes": "當你的生活進步,你的角色也會隨著升級並解鎖寵物,任務,裝備和更多功能!", "welcome4": "避免壞習慣的發生,因為它會奪走你的生命 (HP),你的角色將會因此死亡!", "welcome5": "現在你可以裝扮你的角色與設定你的任務...", - "imReady": "Enter Habitica" + "imReady": "進入 Habitica的世界" } \ No newline at end of file diff --git a/common/locales/zh_TW/pets.json b/common/locales/zh_TW/pets.json index b0c946d267..71a1217222 100644 --- a/common/locales/zh_TW/pets.json +++ b/common/locales/zh_TW/pets.json @@ -3,7 +3,7 @@ "petsFound": "擁有的寵物", "magicPets": "魔法藥水寵物", "rarePets": "稀有寵物", - "questPets": "劇情任務寵物", + "questPets": "任務寵物", "mounts": "坐騎", "mountsTamed": "已馴服的坐騎", "questMounts": "劇情任務坐騎", @@ -11,15 +11,15 @@ "rareMounts": "稀有坐騎", "etherealLion": "靈獅", "veteranWolf": "退伍軍狼", - "veteranTiger": "退伍軍虎", + "veteranTiger": "資深的老虎", "cerberusPup": "三頭地獄幼犬", "hydra": "三頭蛇", "mantisShrimp": "瀨尿蝦", "mammoth": "蓬蓬長毛象", "orca": "逆戟鯨", "royalPurpleGryphon": "紫禦獅鷲", - "phoenix": "Phoenix", - "rarePetPop1": "按按金色的爪印,看看怎麼為Habitica貢獻,以獲得這隻稀有寵物!", + "phoenix": "鳳凰", + "rarePetPop1": "按按金色的爪印,看看怎麼為Habitica貢獻而獲得這隻稀有寵物!", "rarePetPop2": "得到這個寵物的方法!", "potion": "<%= potionType %> 藥水", "egg": "<%= eggType %> 蛋", @@ -55,18 +55,26 @@ "triadBingoAchievement": "因為找到了全部90種寵物和總共90種座騎,然後「再一次」找齊所有90種寵物,你獲得了\"大三元\"的成就。", "dropsEnabled": "啟用了物品掉落功能!", "itemDrop": "你獲得一件物品!", - "firstDrop": "你解鎖了掉落物系統!你現在每完成一項任務,你將有一定機率找到物品,包括蛋、孵化藥水、和食物!你剛剛發現了<%= eggText %>蛋! <%= eggNotes %>", - "useGems": "如果你很中意某之寵物,但又不想慢慢等蛋掉落的話,可以在背包>市集使用寶石買下它!", + "firstDrop": "你解鎖了掉落物系統!你現在每完成一項任務,就有機會找到物品,包括蛋、孵化藥水、或是食物!你剛剛發現了<%= eggText %>蛋! <%= eggNotes %>", + "useGems": "如果你很想要某之寵物,但又不想慢慢等蛋掉落的話,可以在背包 >市集使用寶石買下它!", "hatchAPot": "孵化一隻<%= potion %><%= egg %>?", - "feedPet": "餵你的<%= name %>一個<%= article %><%= text %>?", + "hatchedPet": "您孵出了一個 <%= potion %> <%= egg %>!", + "displayNow": "現在顯示", + "displayLater": "稍後顯示", + "earnedCompanion": "因為你的效率,你已經獲得了一個新的同伴。餵養它,使其茁壯成長!", + "feedPet": "餵一個<%= article %><%= text %> 給 <%= name %>?", "useSaddle": "把鞍用在<%= pet %>上?", + "raisedPet": "一隻 <%= pet %> 成長了!", + "earnedSteed": "通過完成你的任務,你贏得一個忠心的坐騎!", + "rideNow": "現在騎", + "rideLater": "稍後騎", "petName": "<%= potion %> <%= egg %>", "mountName": "<%= potion %> <%= mount %>", "petKeyName": "寵物之家的鑰匙", - "petKeyPop": "讓你的寵物盡情嘶吼,放手讓他們展開自己的旅程,然後點燃自己再次成為\"寵物大師\"熱情吧!", + "petKeyPop": "讓你的寵物盡情嘶吼,展開自己的旅程,然後再次成為寵物大師吧!", "petKeyBegin": "寵物之家的鑰匙:再次體驗 <%= title %>吧!", - "petKeyInfo": "失去了蒐集寵物的熱情嗎?你可以放生你的寵物,讓蒐集掉落的物品再度充滿意義。", - "petKeyInfo2": "使用\"寵物之家的鑰匙\"將你所有非任務的寵物 和/或 座騎歸零。 (因任務獲得的寵物和稀有寵物不受影響)", + "petKeyInfo": "失去了蒐集寵物的樂趣嗎?你可以放生你的寵物,讓蒐集掉落物再度有意義。", + "petKeyInfo2": "使用寵物之家的鑰匙,將你所有非任務的寵物 和/或 座騎歸零。 ( 任務寵物和稀有寵物不受影響 )", "petKeyInfo3": "一共有三把\"寵物之家的鑰匙\":單單放生你的寵物( 4 顆寶石);或者單單放生你的座騎( 4 顆寶石),抑或是把寵物與座騎一同放生( 6 顆寶石)。 透過鑰匙你將獲得\"寵物大師\"或\"座騎大師\"的成就。 而\"大三元\"的成就,只有在你使用\"同時放生寵物與座騎\"的鑰匙後,然後「再一次」找齊所有90種寵物才能獲得。讓全世界看看你是多麼厲害的收集大師!但是請小心抉擇,因為一旦你使用了鑰匙打開籠舍或馬廄的大門,你只能透過重新收集才能把他們找回來...", "petKeyInfo4": "一共有三把\"寵物之家的鑰匙\":單單放生你的寵物( 4 顆寶石);或者單單放生你的座騎( 4 顆寶石),抑或是把寵物與座騎一同放生。 透過鑰匙你將獲得\"寵物大師\"或\"座騎大師\"的成就。 而\"大三元\"的成就,只有在你使用\"同時放生寵物與座騎\"的鑰匙後,然後「再一次」找齊所有90種寵物才能獲得。讓全世界看看你是多麼厲害的收集大師!但是請小心抉擇,因為一旦你使用了鑰匙打開籠舍或馬廄的大門,你只能透過重新收集才能把他們找回來...", "petKeyPets": "釋放所有寵物", diff --git a/common/locales/zh_TW/quests.json b/common/locales/zh_TW/quests.json index 36e1284594..0d60974878 100644 --- a/common/locales/zh_TW/quests.json +++ b/common/locales/zh_TW/quests.json @@ -11,8 +11,9 @@ "invitations": "邀請", "completed": "完成了!", "youReceived": "你收到了", - "dropQuestCongrats": "恭喜妳拿到任務卷軸! 你可以邀請你的隊伍開始任務,或隨時透過 背包->任務 回來查看。", + "dropQuestCongrats": "恭喜你拿到任務卷軸 ! 你可以邀請你的隊伍開始任務,或隨時透過 背包>任務 回來查看。", "questSend": "點擊「邀請」會向你的隊友發送邀請。當所有成員接受或拒絕後任務開始。在選項> 社交> 組隊裡查看任務狀態。", + "questSendBroken": "按下「邀請」後會向隊伍成員們送出邀請...在所有隊員選擇接受或拒絕後,任務就會開始...在社交 > 隊伍頁面可以看到資訊...", "inviteParty": "邀請隊伍參予任務", "questInvitation": "任務邀請:", "questInvitationTitle": "任務邀請", @@ -24,19 +25,25 @@ "rejected": "拒絕", "pending": "等待中", "questStart": "一旦所有成員都接受或拒絕,任務就開始了。只有那些點擊接受者,可以參加任務並取得掉落物品。如果成員回應時間太長(無動作?),任務擁有者可以略過他們直接按「開始」來啟動任務。任務擁有者還可以透過點擊「取消」取消任務,並恢復任務捲軸。", + "questStartBroken": "一旦所有成員都接受或拒絕,任務就開始了。只有接了接受的玩家,才可以參加任務並取得掉落物。如果成員太久沒有回應,任務擁有者可以略過他們直接按「開始」來啟動任務。任務擁有者還可以透過點擊「取消」取消任務,並恢復任務捲軸。", "begin": "開始", "bossHP": "Boss的生命值", "bossStrength": "Boss的力量", - "rage": "Rage", + "rage": "憤怒值", "collect": "收集", "collected": "已收集", "collectionItems": "<%= number %>個<%= items %>", "itemsToCollect": "需收集的物品", - "bossDmg1": "想要攻擊魔王,你必須完成你的每日任務和待辦事項。任務傷害越高,你對魔王的傷害也越大,達成紅色事項、法師的法術、戰士的攻擊等等。如果你未能完成每日任務,除了本來就會遭受的傷害,魔王會針對你遺漏的事項(乘上魔王的力量)額外再傷害你和你的隊友。所以想要保持隊伍健康,就去完成你的每日任務! 所有從魔王和你攻擊的傷害將在跨日(一天結束)時結算。 ", + "bossDmg1": "想要攻擊魔王,你必須完成你的每日任務和待辦事項。任務傷害越高,你對魔王的傷害也越大,達成紅色事項、法師的法術、戰士的攻擊等等。如果你未能完成每日任務,除了本來就會遭受的傷害,魔王會針對你遺漏的事項(乘上魔王的力量)額外再傷害你和你的隊友。所以想要使隊員的生命值不受損,就去完成你的每日任務! 所有從魔王和你攻擊的傷害將在跨日(一天結束)時結算。 ", "bossDmg2": "只有參與者會跟魔王戰鬥,並共享任務獎勵。", - "tavernBossInfo": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Exhaust Strike Bar. When the Exhaust Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.", + "bossDmg1Broken": "想要攻擊魔王,你必須完成你的每日任務和待辦事項。任務傷害越高,你對魔王的傷害也越大...達成紅色事項、法師的法術、戰士的攻擊等等...如果你未能完成每日任務,除了本來就會遭受的傷害,魔王會針對你遺漏的事項(乘上魔王的力量)額外再傷害你和你的隊友。所以想要使隊員的生命值不受損,就去完成你的每日任務... 所有從魔王和你攻擊的傷害將在跨日(一天結束)時結算... ", + "bossDmg2Broken": "只有參與者會跟魔王戰鬥,並共享任務獎勵。", + "tavernBossInfo": "想要攻擊世界Boss,你必須完成每日任務、待辦事項和正面的習慣!未完成的任務將增加廢氣攻擊值。當廢氣攻擊值被填滿,世界Boss就會對 NPC發動攻擊。世界Boss永遠不會對玩家或是玩家帳號造成傷害。不過若是在旅館休息的帳號就會被排除在世界Boss任務之外囉。", + "tavernBossInfoBroken": "想要攻擊世界Boss,你必須完成每日任務、待辦事項和正面的習慣...未完成的任務將增加廢氣攻擊值...當廢氣攻擊值被填滿,世界Boss就會對 NPC發動攻擊...世界Boss永遠不會對玩家或是玩家帳號造成傷害...不過若是在旅館休息的帳號就會被排除在世界Boss任務之外囉...", "bossColl1": "要撿到物品,你必須完成你的「正向」任務。任務獎勵品會像普通物品一樣掉落;但要在隔天才看到。你撿到的物品會被計算並累積到戰利品堆當中。", "bossColl2": "只有參與者會跟魔王戰鬥,並共享任務獎勵。", + "bossColl1Broken": "要撿到物品,你必須完成你的「正向」任務...任務獎勵品會像普通物品一樣掉落;但要在隔天你才能看到,你撿到的物品會被計算並累積到戰利品堆當中。", + "bossColl2Broken": "只有參與者會跟魔王戰鬥,並共享任務獎勵...", "abort": "放棄", "leaveQuest": "退出任務", "sureLeave": "你確定要退出執行中的任務嗎?所有執行任務的成果將會遺失。", @@ -63,10 +70,13 @@ "sureAbort": "你是否確定要放棄這個任務?這樣做會讓你的所有隊員都退出這個任務,並且消除所有進度。任務捲軸將會回到任務擁有者手上。", "doubleSureAbort": "你真的真的要這樣做嗎?要確保他們不會一輩子討厭你喲!", "questWarning": "如果新的隊友在開始前加入了隊伍,他們也會收到邀請。但是一旦任務已經開始,新的隊友就無法再加入這個任務了。", + "questWarningBroken": "如果新的隊友在開始前加入了隊伍,他們也會收到邀請...但是一旦任務已經開始,新的隊友就無法再加入這個任務了...", "bossRageTitle": "憤怒值", "bossRageDescription": "當此欄全滿時,Boss就會發動特殊攻擊!", "startAQuest": "開始一個任務", "startQuest": "任務開始", "whichQuestStart": "你要開始哪個任務?", - "getMoreQuests": "取得更多任務" + "getMoreQuests": "取得更多任務", + "unlockedAQuest": "你解鎖了一個任務!", + "leveledUpReceivedQuest": "您升級為等級 <%= 級別 %> 並獲得一個任務捲軸!" } \ No newline at end of file diff --git a/common/locales/zh_TW/questscontent.json b/common/locales/zh_TW/questscontent.json index 84dbd638c4..a64b6297dc 100644 --- a/common/locales/zh_TW/questscontent.json +++ b/common/locales/zh_TW/questscontent.json @@ -1,15 +1,15 @@ { "questEvilSantaText": "聖誕盜獵者", - "questEvilSantaNotes": "你聽到哀淒的咆哮聲從冰原深處傳來。你循著咆哮和嘶吼 ─不時夾雜著尖笑聲─ 來到了林子中的一塊空地,看到一隻成年的北極熊。她被拷著,關在籠子裡,吼叫著想要逃出。一個心懷不軌的小惡魔,穿著被遺棄的聖誕戲裝,在籠子上跳著舞呢。擊敗聖誕盜獵者,救出那隻母熊!", - "questEvilSantaCompletion": "聖誕盜獵者憤怒地嚎叫,縱身躍入夜幕之中。母熊充滿感激的咆哮嘶吼,似乎想對你說些什麼。你把她帶回馬厩,輕語者Matt Boch畏懼地屏息傾聽她講述的故事。原來她有個小熊寶寶!然而小熊卻在母熊落入陷阱時逃入了冰原中。 幫母熊找到她的寶寶!", + "questEvilSantaNotes": "你聽到從冰原深處傳來的哀淒的咆哮聲。你循著咆哮,嘶吼和尖笑聲來到了森林中的一塊空地,看到一隻成年的北極熊。她被拷著,關在籠子裡,吼叫著想要逃出。一個心懷不軌的小惡魔,穿著被遺棄的聖誕戲裝,在籠子上跳著舞。擊敗聖誕盜獵者,救出那隻母熊!", + "questEvilSantaCompletion": "聖誕盜獵者憤怒地嚎叫,縱身躍入黑夜之中。母熊充滿感激的咆哮嘶吼,似乎想對你說些什麼。你把她帶回馬房,輕語者Matt Boch畏懼地屏息傾聽她講述的故事。原來她有個小熊寶寶!然而小熊卻在母熊落入陷阱時逃入了冰原中。 幫助母熊找到她的寶寶吧!", "questEvilSantaBoss": "聖誕盜獵者", - "questEvilSantaDropBearCubPolarMount": "北極熊 ( 坐騎 )", + "questEvilSantaDropBearCubPolarMount": "北極熊 (坐騎)", "questEvilSanta2Text": "找小熊", - "questEvilSanta2Notes": "母熊的寶寶在母熊被抓住的時候跑進了冰原。她在樹林邊際嗅著空氣尋索蹤跡。你聽到樹枝咔嚓作響,雪地嘎吱嘎吱的聲音迴盪在整個樹林。是爪印!你們開始追尋雪地上的踪跡。集齊所有的爪印和破損的樹枝來找回她的寶寶!", - "questEvilSanta2Completion": "你找到了小熊!母熊和她的寶寶對你感激不盡。作為回報,他們決定與你結伴同行直到永遠。", + "questEvilSanta2Notes": "寶寶在母熊被抓住的時候跑進了冰原。母熊在樹林邊際嗅著空氣尋索蹤跡。你聽到樹枝咔嚓作響,雪地嘎吱嘎吱的聲音迴盪在整個樹林。是爪印!你們開始追尋雪地上的踪跡。集齊所有的爪印和破損的樹枝來找回她的寶寶!", + "questEvilSanta2Completion": "你找到了小熊!母熊和她的寶寶對你感激不盡。作為回報,他們決定永遠與你結伴同行。", "questEvilSanta2CollectTracks": "足跡", "questEvilSanta2CollectBranches": "折斷的樹枝", - "questEvilSanta2DropBearCubPolarPet": "北極熊(寵物)", + "questEvilSanta2DropBearCubPolarPet": "北極熊 (寵物)", "questGryphonText": "烈燄獅鷲", "questGryphonNotes": "偉大的馴獸師,baconsaur,來到你的隊伍尋求幫助:「冒險者,求你們幫幫我!我珍貴的獅鷲跑掉了,威脅著Habit城的安全!如果你能阻止她,我可以把她的幾個蛋給你! 」", "questGryphonCompletion": "這隻強大的野獸遭擊敗後,羞愧地逃回他原來的主人那兒。「說真的,你做的太棒了,冒險者!」baconsaur 高聲說:「請拿走一些獅鷲的蛋吧,我相信你會好好養育這些幼鳥的。」", @@ -25,9 +25,9 @@ "questGhostStagText": "春之幽靈", "questGhostStagNotes": "\"啊,春天!一年當中色彩重回大地的時光。凜冽的雪丘消融,朝氣蓬勃的植物取代了寒冷的冰霜。青翠的綠葉覆滿枝頭,草地也恢復了往昔鮮明的色彩。一道花朵搭成的彩虹沿著平原上升,而神秘的白霧覆蓋著大地!…等等。神秘的白霧?「糟了,」 Inventrix 憂慮地說:「看來某種精靈是這場大霧的原因。噢,它現在往你那邊衝過去了。」", "questGhostStagCompletion": "精靈似乎毫髮無傷,將它的鼻子靠近地面。一股平靜的聲音包圍著你的隊伍。「我為我的所作所為感到抱歉。我剛從睡眠中甦醒,神智似乎未清。請把這些當做我道歉的象徵。」一窩蛋忽然出現在精靈前的草地上。精靈片語未留,奔跑進森林之中,只留下花朵兀自在他的身後飄落。", - "questGhostStagBoss": "雄鹿精靈", - "questGhostStagDropDeerEgg": "鹿 (蛋)", - "questGhostStagUnlockText": "解鎖-可在市集中購買鹿蛋", + "questGhostStagBoss": "精靈雄鹿", + "questGhostStagDropDeerEgg": "鹿 (蛋)", + "questGhostStagUnlockText": "解鎖- 可在市集中購買鹿蛋", "questRatText": "鼠王", "questRatNotes": "到處都是垃圾!整個 Habitica 充斥著未完成的日常任務造成的垃圾。問題已然相當嚴重,成群的老鼠現在隨處可見。你注意到 @Pandah 愛憐地拍著一隻老鼠。她解釋說其實老鼠相當溫馴,牠們以未完成的日常任務為食。問題的根源在於日常任務落入了下水道內,使下水道成為亟需清理的危險場所。你走入下水道內,一隻巨鼠睜著血紅雙眼、咧出一口黃板牙來攻擊你,試圖保護自己的巢穴。究竟你會落荒而逃,還是勇敢面對傳說中的鼠王呢?", "questRatCompletion": "你的最後一擊粉碎了巨鼠的力量,牠的眼睛逐漸黯淡發灰。這隻巨獸化為許多小老鼠,驚慌地四處亂竄。你發現@Pandah站在你身後,凝望著那一度強大的生物。她說道Habitica的公民因為受到你勇氣的鼓舞,很快地就把他們未完成的每日任務解決了。她警告說我們仍須警醒,一旦我們放鬆警戒,鼠王還會回來的。@Pandah也給了你幾個老鼠蛋作為酬勞,看到你表露不安,她微笑著說:「牠們是很棒的寵物。」", @@ -95,7 +95,7 @@ "questGoldenknight2Notes": "

帶著上百個Habit公民提供的證據,你面對著黃金騎士,開始一個接著一個地對她陳述Habit公民們對她的不滿,\"還有@Pfeffernusse說你總是不停的討價還價-\"黃金騎士舉起了她的手打斷了你,嘲弄道,\"拜託,這些人只不過是嫉妒我的成功。比起抱怨,他們更應該像我一樣努力的工作!也許我應該向你展示一下,就像我一樣,勤奮所能給予你的力量!\"說著她舉起狼牙棒,準備攻擊你!

", "questGoldenknight2Boss": "黃金騎士", "questGoldenknight2DropGoldenknight3Quest": "黃金騎士的項鍊-第3部:鐵騎士(卷軸)", - "questGoldenknight3Text": "The Golden Knight, Part 3: The Iron Knight", + "questGoldenknight3Text": "黃金騎士,第 3 部:鋼鐵騎士", "questGoldenknight3Notes": "

@Jon Arinbjorn 大聲嘶叫期望得到你的注意。在戰鬥過後,有個神秘身影現身。一位全身被染黑的鐵騎士拿著利劍悄悄地靠近你。黃金騎士對著他喊著,「不要啊,父親!」但黑騎士並沒有因此停下來。她看向你,接著說,「我真的很抱歉,我一直都眼高於頂,無法看清自己曾經做過的事有多麼殘忍,但我的父親比起我過之而無不及。如果他再不停手,連我們都會被他給毀了!你拿去吧,用我的morningstar制止鐵騎士吧!」

", "questGoldenknight3Completion": "

鏗鏘一聲,鋼鐵騎士雙膝跪地倒下了。\"你太強了,\"他氣喘吁吁說, \"今天,我被輕而易舉地打敗了。\"黃金騎士向你走來,說道:\"謝謝你。我相信我們都從與你的相遇中學會了謙遜。我會和我的父親好好談談,並解釋那些針對我們的怨言。也許是時候向其他Habit公民道歉了。\"她 ​​考慮了一會兒,又向你轉過身來,\"拿上它吧,作為我們給你的禮物,我希望你能帶上我的流星錘。它現在是你的了。\"

", "questGoldenknight3Boss": "鐵騎士", @@ -180,11 +180,11 @@ "questTRexDropTRexEgg": "暴龍 ( 蛋 )", "questTRexUnlockText": "解鎖-可在市集中購買暴龍蛋", "questRockText": "逃離洞穴生物", - "questRockNotes": "Crossing Habitica's Meandering Mountains with some friends, you make camp one night in a beautiful cave laced with shining minerals. But when you wake up the next morning, the entrance has disappeared, and the floor of the cave is shifting underneath you.

\"The mountain's alive!\" shouts your companion @pfeffernusse. \"These aren't crystals - these are teeth!\"

@Painter de Cluster grabs your hand. \"We'll have to find another way out - stay with me and don't get distracted, or we could be trapped in here forever!\"", + "questRockNotes": "你與朋友們正穿越 Habitica 的蜿蜒山脈,某天晚上紮營在一個有著閃亮礦石的美麗洞穴。但第二天早上醒來時,入口消失了,而身下的洞穴地面正在變化。

「這座山是活的!」你的同伴@pfeffernusse大叫著,「這些不是水晶──是牙齒!」

@Painter de Cluster抓住你的手。「我們得另外想辦法逃出去──跟緊我,別恍神了,否則我們永遠都會被困在這裡!」", "questRockBoss": "水晶競技場", - "questRockCompletion": "Your diligence has allowed you to find a safe path through the living mountain. Standing in the sunshine, your friend @intune notices something glinting on the ground by the cave's exit. You stoop to pick it up, and see that it's a small rock with a vein of gold running through it. Beside it are a number of other rocks with rather peculiar shapes. They almost look like... eggs?", - "questRockDropRockEgg": "岩石(蛋)", - "questRockUnlockText": "解鎖-可在市集中購買岩石蛋", + "questRockCompletion": "你拚命找到了一條安全的道路通過了這座有生命的山。站在陽光下,你的朋友@intune注意到洞穴出口處的地面上有東西在發光。你彎腰撿起來,它看起來是帶著一條黃金礦脈的小石塊。在它旁邊還有許多形狀奇特的岩石。它們看起來幾乎就像是...蛋?", + "questRockDropRockEgg": "岩石 (蛋)", + "questRockUnlockText": "解鎖 - 可在市集中購買岩石蛋", "questBunnyText": "殺手兔", "questBunnyNotes": "歷經艱辛,你終於到達了拖延山頂峰,站在疏忽堡壘那壯觀的大門之前。你讀了石上銘文。\"裡面居住的生物是你恐懼的化身,是你無所作為的根源。敲門並面對你心底的惡魔!\"你渾身戰栗,想像裡面會是多麼可怕。逃跑的想法在你耳邊輕語,反正之前你也退縮過多次。@Draayder把你拉了回來。\"冷靜點,我的朋友!這個時機終於到來!你必須得上!\"

你敲了敲門,門自動的向內打開。昏暗之中,你聽到整耳欲聾的吼叫聲,你拿起了武器。", "questBunnyBoss": "殺手兔", @@ -198,68 +198,80 @@ "questSlimeDropSlimeEgg": "棉花糖史萊姆(蛋)", "questSlimeUnlockText": "解鎖-可在市集中購買史萊姆蛋", "questSheepText": "雷霆羊", - "questSheepNotes": "As you wander the rural Taskan countryside with friends, taking a \"quick break\" from your obligations, you find a cozy yarn shop. You are so absorbed in your procrastination that you hardly notice the ominous clouds creep over the horizon. \"I've got a ba-a-a-ad feeling about this weather,\" mutters @Misceo, and you look up. The stormy clouds are swirling together, and they look a lot like a... \"We don't have time for cloud-gazing!\" @starsystemic shouts. \"It's attacking!\" The Thunder Ram hurtles forward, slinging bolts of lightning right at you!", + "questSheepNotes": "你與朋友們漫步在 Taskan 鄉間,暫時拋開責任「稍作休息」時,發現了一家愜意的毛線店。你沉溺在怠惰中而幾乎沒察覺到不祥的密雲正在天邊悄悄聚集。「這天氣感覺很~不妙啊。」@Misceo喃喃的說,你抬頭向上望。陰沉的密雲正漫湧聚集而來,看起來就像一隻...「我們沒時間觀雲了!」@starsystemic大叫,「這可是攻擊啊!」雷霆羊呼嘯而來,朝你擲出了閃電箭!", "questSheepBoss": "雷霆羊", - "questSheepCompletion": "Impressed by your diligence, the Thunder Ram is drained of its fury. It launches three huge hailstones in your direction, and then fades away with a low rumble. Upon closer inspection, you discover that the hailstones are actually three fluffy eggs. You gather them up, and then stroll home under a blue sky.", + "questSheepCompletion": "雷霆羊被你的勤奮所打動,怒氣消退。牠朝你的方向擲出三個巨大的冰雹之後便伴隨著低沉的轟隆聲消隱而去。仔細檢查後,發現這些冰雹其實是三個毛茸茸的蛋。你把它們收起來,在蔚藍的天空下漫步回家。", "questSheepDropSheepEgg": "羊 (蛋)", "questSheepUnlockText": "解鎖-可在市集中購買羊蛋", - "questKrakenText": "The Kraken of Inkomplete", - "questKrakenNotes": "It's a warm, sunny day as you sail across the Inkomplete Bay, but your thoughts are clouded with worries about everything that you still need to do. It seems that as soon as you finish one task, another crops up, and then another...

Suddenly, the boat gives a horrible jolt, and slimy tentacles burst out of the water on all sides! \"We're being attacked by the Kraken of Inkomplete!\" Wolvenhalo cries.

\"Quickly!\" Lemoness calls to you. \"Strike down as many tentacles and tasks as you can, before new ones can rise up to take their place!\"", - "questKrakenBoss": "The Kraken of Inkomplete", - "questKrakenCompletion": "As the Kraken flees, several eggs float to the surface of the water. Lemoness examines them, and her suspicion turns to delight. \"Cuttlefish eggs!\" she says. \"Here, take them as a reward for everything you've completed.\"", - "questKrakenDropCuttlefishEgg": "烏賊(蛋)", + "questKrakenText": "未盡灣的海怪", + "questKrakenNotes": "這是溫暖而晴朗的一天,你航行經過未盡灣,但你的思緒卻被該做的事給佔據了。感覺你剛完成一項任務就立刻冒出下一項,接踵而至...

突然間船身一陣可怕的震盪,許多黏滑的觸手從四面八方的水面竄出!「我們被未盡灣的海怪攻擊了!」Wolvenhalo 大喊。

「快!」Lemoness 朝你呼喊,「盡你所能的擊倒觸手和任務,在新的又冒出來之前!」", + "questKrakenBoss": "未盡灣的海怪", + "questKrakenCompletion": "當海怪逃離時,許多蛋浮在水面上。Lemoness 對它們仔細檢查,接著疑心轉為喜悅。「是烏賊蛋!」她說,「來,把它們當作你完成這一切的獎勵吧。」", + "questKrakenDropCuttlefishEgg": "烏賊 (蛋)", "questKrakenUnlockText": "解鎖-可在市集中購買烏賊蛋", "questWhaleText": "鯨魚的哀號聲", - "questWhaleNotes": "你到達勤勉碼頭,希望能搭潛水艇前往觀看Dilatory Derby。突然,一聲震耳欲聾的咆嘯直竄耳膜並逼迫你停了下來。\"Thar 她噴水了!\" 船長 @krazjega 尖叫,並指向一隻哀號中的巨大的鯨魚。\"我們不能在她失去控制亂撞時發送潛水艇,這樣太危險了!\"

\"快點\"@UncommonCriminal 大喊。\"先幫我鎮定那隻可憐的動物,我們才能了解為什麼她一直嚎叫!\"", + "questWhaleNotes": "你到達勤勉碼頭,希望能搭潛水艇前往觀看 Dilatory Derby。突然,一聲震耳欲聾的咆嘯直竄耳膜並逼迫你停了下來。\"Thar 她噴水了!\" 船長 @krazjega 尖叫,並指向一隻哀號中的巨大的鯨魚。\"我們不能在她失去控制亂撞時發送潛水艇,這樣太危險了!\"

\"快點\"@UncommonCriminal 大喊。\"先幫我鎮定那隻可憐的動物,我們才能了解為什麼她一直嚎叫!\"", "questWhaleBoss": "哀嚎鯨魚", - "questWhaleCompletion": "After much hard work, the whale finally ceases her thunderous cry. \"Looks like she was drowning in waves of negative habits,\" @zoebeagle explains. \"Thanks to your consistent effort, we were able to turn the tides!\" As you step into the submarine, several whale eggs bob towards you, and you scoop them up.", + "questWhaleCompletion": "努力一段時間後,這隻鯨魚終於停下她雷鳴般的哭號。「看來她淹沒在壞習慣的浪潮之中了。」@zoebeagle 解釋著,「謝謝你持續的努力,我們可以扭轉局面了!」當你踏入潛水艇時,許多鯨魚蛋彈跳著向你而來,你把它們收集了起來。", "questWhaleDropWhaleEgg": "鯨魚 (蛋)", "questWhaleUnlockText": "解鎖-可在市集中購買鯨魚蛋", - "questDilatoryDistress1Text": "Dilatory Distress, Part 1: Message in a Bottle", - "questDilatoryDistress1Notes": "A message in a bottle arrived from the newly rebuilt city of Dilatory! It reads: \"Dear Habiticans, we need your help once again. Our princess has disappeared and the city is under siege by some unknown watery demons! The mantis shrimps are holding the attackers at bay. Please aid us!\" To make the long journey to the sunken city, one must be able to breathe water. Fortunately, the alchemists @Benga and @hazel can make it all possible! You only have to find the proper ingredients.", - "questDilatoryDistress1Completion": "You don the the finned armor and swim to Dilatory as quickly as you can. The merfolk and their mantis shrimp allies have managed to keep the monsters outside the city for the moment, but they are losing. No sooner are you within the castle walls than the horrifying siege descends!", + "questDilatoryDistress1Text": "Dilatory 危機,第 1 章:瓶中信", + "questDilatoryDistress1Notes": "一封來自 Dilatory 重建城市的瓶中信!上面寫著:「親愛的 Habit 公民,我們再次需要你的幫助。我們的公主失蹤了,而且城市正被不明的水生怪物給包圍著!目前瀨尿蝦們正在海灣邊抵禦著襲擊者。請幫幫我們!」這趟前往水中城市的漫長旅途,必須擁有在水中呼吸的能力。幸運的是煉金術士 @Benga 和 @hazel 能夠使其成真!你只要找到適當的材料就行了。", + "questDilatoryDistress1Completion": "你穿上鰭狀盔甲並盡快地游到 Dilatory 。魚人族和他們的瀨尿蝦盟友雖然將怪物抵擋在城外,但正在節節敗退。你剛進到城牆內,恐怖的圍攻就開始了!", "questDilatoryDistress1CollectFireCoral": "火焰珊瑚", "questDilatoryDistress1CollectBlueFins": "藍鰭", - "questDilatoryDistress1DropArmor": "魚鰭海洋盔甲(盔甲)", - "questDilatoryDistress2Text": "Dilatory Distress, Part 2: Creatures of the Crevasse", - "questDilatoryDistress2Notes": "The siege can be seen from miles away: thousands of disembodied skulls rushing through a portal in the crevasse walls and making their way towards Dilatory.

When you meet King Manta in his war room, his eyes seem sunken, and his face is worried. \"My daughter Adva disappeared into the Dark Crevasse just before this siege began. Please find her and bring her back home safely! I will lend you my Fire Coral Circlet to aid you. If you succeed, it is yours.\"", - "questDilatoryDistress2Completion": "你擊敗了這群夢魘般的骷髏,但是你感覺距離找到Adva仍然遙遙無期。於是你向皇家追蹤者@Kiwibot詢問是否有任何頭緒。\"守護城市的蝦蛄們一定有看到Adva逃跑,\"試著跟著牠們去 Dark Crevasse吧。\"@Kiwibot說。", - "questDilatoryDistress2Boss": "Water Skull Swarm", - "questDilatoryDistress2RageTitle": "Swarm Respawn", - "questDilatoryDistress2RageDescription": "Swarm Respawn: This bar fills when you don't complete your Dailies. When it is full, the Water Skull Swarm will heal 30% of its remaining health!", - "questDilatoryDistress2RageEffect": "`Water Skull Swarm uses SWARM RESPAWN!`\n\nEmboldened by their victories, more skulls pour forth from the crevasse, bolstering the swarm!", + "questDilatoryDistress1DropArmor": "魚鰭海洋盔甲 (盔甲)", + "questDilatoryDistress2Text": "Dilatory 危機,第 2 章:海溝裡的怪物", + "questDilatoryDistress2Notes": "圍城的攻勢從幾里外就看得到:遊魂般的骷髏們通過海溝壁上的傳送門向 Dilatory 襲來。

你在作戰室見到 Manta 國王,他的雙眼凹陷,神情憂慮。「就在這次的大軍進攻前,我的女兒 Adva 在黑暗海溝失蹤了。請找到她,並把她平安帶回來!我會借你我的火焰珊瑚環來協助你。如果你成功,它就是你的了。」", + "questDilatoryDistress2Completion": "你擊敗了夢魘般的骷髏大軍,但是你感覺距離找到 Adva 仍然遙遙無期。於是你向皇家追蹤者 @Kiwibot 詢問是否有任何頭緒。「守衛城市的瀨尿蝦們一定有看到 Adva 逃跑。」@Kiwibot 說,「跟著牠們進入黑暗海溝看看吧。」", + "questDilatoryDistress2Boss": "水骷髏群", + "questDilatoryDistress2RageTitle": "怪物群重生", + "questDilatoryDistress2RageDescription": "怪物群重生:當你未完成你的每日任務時,這條狀態列就會增加。如果狀態列滿了,水骷髏群就會回復它現有生命值的 30%!", + "questDilatoryDistress2RageEffect": "『水骷髏群使用了怪物群重生!』\n\n被勝利所鼓舞,更多的骷髏從海溝湧出支援!", "questDilatoryDistress2DropSkeletonPotion": "骨骸孵化藥水", "questDilatoryDistress2DropCottonCandyBluePotion": "棉花糖藍色孵化藥水", - "questDilatoryDistress2DropHeadgear": "火焰珊瑚鐲(頭飾)", - "questDilatoryDistress3Text": "Dilatory Distress, Part 3: Not a Mere Maid", - "questDilatoryDistress3Notes": "You follow the mantis shrimps deep into the Crevasse, and discover an underwater fortress. Princess Adva, escorted by more watery skulls, awaits you inside the main hall. \"My father has sent you, has he not? Tell him I refuse to return. I am content to stay here and practice my sorcery. Leave now, or you shall feel the wrath of the ocean's new queen!\" Adva seems very adamant, but as she speaks you notice a strange, ruby pendant on her neck glowing ominously... Perhaps her delusions would cease should you break it?", - "questDilatoryDistress3Completion": "Finally, you manage to pull the bewitched pendant from Adva's neck and throw it away. Adva clutches her head. \"Where am I? What happened here?\" After hearing your story, she frowns. \"This necklace was given to me by a strange ambassador - a lady called 'Tzina'. I don't remember anything after that!\"

Back at Dilatory, Manta is overjoyed by your success. \"Allow me to reward you with this trident and shield! I ordered them from @aiseant and @starsystemic as a gift for Adva, but... I'd rather not put weapons in her hands any time soon.\"", - "questDilatoryDistress3Boss": "Adva, the Usurping Mermaid", - "questDilatoryDistress3DropFish": "Fish (Food)", - "questDilatoryDistress3DropWeapon": "Trident of Crashing Tides (Weapon)", - "questDilatoryDistress3DropShield": "Moonpearl Shield (Shield-Hand Item)", - "questCheetahText": "Such a Cheetah", - "questCheetahNotes": "As you hike across the Sloensteadi Savannah with your friends @PainterProphet, @tivaquinn, @Unruly Hyena, and @Crawford, you're startled to see a Cheetah screeching past with a new Habitican clamped in its jaws. Under the Cheetah's scorching paws, tasks burn away as though complete -- before anyone has the chance to actually finish them! The Habitican sees you and yells, \"Please help me! This Cheetah is making me level too quickly, but I'm not getting anything done. I want to slow down and enjoy the game. Make it stop!\" You fondly remember your own fledgling days, and know that you have to help the newbie by stopping the Cheetah!", - "questCheetahCompletion": "The new Habitican is breathing heavily after the wild ride, but thanks you and your friends for your help. \"I'm glad that Cheetah won't be able to grab anyone else. It did leave some Cheetah eggs for us, so maybe we can raise them into more trustworthy pets!\"", + "questDilatoryDistress2DropHeadgear": "火焰珊瑚環 (頭飾)", + "questDilatoryDistress3Text": "Dilatory 危機,第 3 章:不單純是個少女", + "questDilatoryDistress3Notes": "你跟隨著瀨尿蝦們深入大海溝,並發現了一座海底堡壘。Adva 公主由更多的水骷髏護衛著,在正殿中等著你。「我父親派你來的,對吧?告訴他我不回去。我想待在這裡,並練習我的法術。現在離開吧,否則你將體會到海洋新女王的憤怒!」Adva 看起來十分強硬,但在她說話時你注意到有個奇怪的紅寶石墜飾在她頸上發著不祥的光...也許當你破壞它就能解除公主的蠱惑狀態?", + "questDilatoryDistress3Completion": "終於你設法從 Adva 的頸間扯下那蠱惑人心的墜飾並扔到一旁。Adva 緊抱著頭。「我在哪裡?! 發生了什麼事?」聽完你的話後她皺起了眉頭。「這條項鍊是一個奇怪的使者給我的──一個叫 Tzina 的女人。之後的事我什麼都想不起來了!」

回到 Dilatory,Manta 為你達成任務欣喜若狂。「請收下這三叉戟和盾作為報答!這本來是從 @aiseant 和 @starsystemic 那兒訂來送給 Adva 的禮物,但...短期內我還是不要給她任何武器好了。」", + "questDilatoryDistress3Boss": "Adva,篡位的人魚", + "questDilatoryDistress3DropFish": "魚 (食物)", + "questDilatoryDistress3DropWeapon": "擊潰浪潮的三叉戟 (武器)", + "questDilatoryDistress3DropShield": "月亮珍珠盾 (副手物品)", + "questCheetahText": "就像獵豹一樣", + "questCheetahNotes": "當你和友人們 @PainterProphet, @tivaquinn, @Unruly Hyena, 和 @Crawford, 在 Sloensteadi Savannah遠足時,你驚訝地發現有位新加入的Habiti公民被壓在獵豹的腳下,在獵豹炙熱的爪子下,在新Habit公民有機會真的完成自己的任務前-把任務燒毀就像被完成過似地消失殆盡!Habiti公民看到你們便求救 \"拜託幫幫我! 這隻獵豹讓我的等級急速飆升, 但我什麼都沒有做。我想要慢慢享受這個遊戲。拜託讓牠停下來!\"你想起自己當初羽翼未豐的日子,你認為你必須要停止獵豹的舉動來幫助這位新人!", + "questCheetahCompletion": "新人Habit公民大力地喘氣,但依舊感謝你和你的朋友的幫助。 “我很高興,獵豹再也無法抓住任何人。它還留下了一些獵豹蛋給我們,所以也許我們可以培養這些小獵豹成為更值得信賴的寵物!”", "questCheetahBoss": "獵豹", - "questCheetahDropCheetahEgg": "Cheetah (Egg)", - "questCheetahUnlockText": "Unlocks purchasable Cheetah eggs in the Market", - "questHorseText": "Ride the Night-Mare", - "questHorseNotes": "While relaxing in the Tavern with @beffymaroo and @JessicaChase, the talk turns to good-natured boasting about your adventuring accomplishments. Proud of your deeds, and perhaps getting a bit carried away, you brag that you can tame any task around. A nearby stranger turns toward you and smiles. One eye twinkles as he invites you to prove your claim by riding his horse.\nAs you all head for the stables, @UncommonCriminal whispers, \"You may have bitten off more than you can chew. That's no horse - that's a Night-Mare!\" Looking at its stamping hooves, you begin to regret your words...", - "questHorseCompletion": "It takes all your skill, but finally the horse stamps a couple of hooves and nuzzles you in the shoulder before allowing you to mount. You ride briefly but proudly around the Tavern grounds while your friends cheer. The stranger breaks into a broad grin.\n\"I can see that was no idle boast! Your determination is truly impressive. Take these eggs to raise horses of your own, and perhaps we'll meet again one day.\" You take the eggs, the stranger tips his hat... and vanishes.", - "questHorseBoss": "Night-Mare", - "questHorseDropHorseEgg": "Horse (Egg)", - "questHorseUnlockText": "Unlocks purchasable Horse eggs in the Market", - "questBurnoutText": "Burnout and the Exhaust Spirits", + "questCheetahDropCheetahEgg": "獵豹(蛋)", + "questCheetahUnlockText": "解鎖-可在市集中購買獵豹蛋", + "questHorseText": "騎乘夢饜", + "questHorseNotes": "跟@beffymaroo 和 @JessicaChase在酒館休息時,談話漸漸轉變成善意的謊言來吹噓你的冒險。為自己的成就感到驕傲的同時,也許變得有些得意忘形,你開始吹噓自己可以馴服任何周遭的任務。身旁一位陌生人笑笑地轉向你。眼神閃爍地邀請你試乘他的坐騎來證明你自己。\n當大家都走到馬廄時, @UncommonCriminal悄悄地說 \"你這次真的砸了自己屁股,他的坐騎根本就不是馬-是一隻夢饜!\"看著夢饜跺著自己的蹄子,你開始後悔自己的嘴巴...", + "questHorseCompletion": "你吃盡了苦頭使出全力,最終夢饜在跺幾次步之後用鼻子磨襯了你的肩膀,願意讓你在牠背上鞍上馬鞍。你驕傲地在酒館四周短暫地騎乘,而你的朋友們在旁助威。陌生人打斷了你們的笑聲。\n“我現在知道你並沒有吹噓自己!你的決心令人印象深刻。這些蛋送你,請扶養牠們長大成為坐騎,也許我們會有再見面的一天。”你收下了蛋,陌生人點了點他的帽子......就消失了。", + "questHorseBoss": "夢饜", + "questHorseDropHorseEgg": "馬(蛋)", + "questHorseUnlockText": "解鎖-可在市集中購買馬蛋", + "questBurnoutText": "倦怠和廢氣精神", "questBurnoutNotes": "It is well past midnight, still and stiflingly hot, when Redphoenix and scout captain Kiwibot abruptly burst through the city gates. \"We need to evacuate all the wooden buildings!\" Redphoenix shouts. \"Hurry!\"

Kiwibot grips the wall as she catches her breath. \"It's draining people and turning them into Exhaust Spirits! That's why everything was delayed. That's where the missing people have gone. It's been stealing their energy!\"

\"'It'?'\" asks Lemoness.

And then the heat takes form.

It rises from the earth in a billowing, twisting mass, and the air chokes with the scent of smoke and sulphur. Flames lick across the molten ground and contort into limbs, writhing to horrific heights. Smoldering eyes snap open, and the creature lets out a deep and crackling cackle.

Kiwibot whispers a single word.

\"Burnout.\"", "questBurnoutCompletion": "Burnout is DEFEATED!

With a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.

Ian, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!

\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!

One of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"

Her tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"

She claps her hands. \"Now - let's celebrate!\"", "questBurnoutCompletionChat": "`Burnout is DEFEATED!`\n\nWith a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms.\n\nIan, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself!\n\n\"Look!\" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes!\n\nOne of the glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. \"It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields,\" she says. \"Although given recent occurrences, I must say, this is highly thematically appropriate!\"\n\nHer tone sobers, although (naturally) her grin remains. \"We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!\"\n\nShe claps her hands. \"Now - let's celebrate!\"\n\nAll Habiticans receive:\n\nPhoenix Pet\nPhoenix Mount\nAchievement: Savior of the Flourishing Fields\nBasic Candy\nVanilla Candy\nSand Candy\nCinnamon Candy\nChocolate Candy\nRotten Candy\nSour Pink Candy\nSour Blue Candy\nHoney Candy", "questBurnoutBoss": "Burnout", - "questBurnoutBossRageTitle": "Exhaust Strike", + "questBurnoutBossRageTitle": "排氣打擊 ", "questBurnoutBossRageDescription": "When this gauge fills, Burnout will unleash its Exhaust Strike on Habitica!", - "questBurnoutDropPhoenixPet": "Phoenix (Pet)", + "questBurnoutDropPhoenixPet": "鳳凰(寵物)", "questBurnoutDropPhoenixMount": "Phoenix (Mount)", "questBurnoutBossRageQuests": "`Burnout uses EXHAUST STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!\n\nOnly defeating Burnout can break the spell and restore our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!", "questBurnoutBossRageSeasonalShop": "`Burnout uses EXHAUST STRIKE!`\n\nAhh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a drooping Exhaust Spirit.\n\nWe have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!", - "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!" + "questBurnoutBossRageTavern": "`Burnout uses EXHAUST STRIKE!`\n\nMany Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!\n\nThis hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!", + "questFrogText": "Swamp of the Clutter Frog", + "questFrogNotes": "As you and your friends are slogging through the Swamps of Stagnation, @starsystemic points at a large sign. \"Stay on the path -- if you can.\"

\"Surely that isn't hard!\" @RosemonkeyCT says. \"It's broad and clear.\"

But as you continue, you notice that path is gradually overtaken by the muck of the swamp, laced with bits of strange blue debris and clutter, until it's impossible to proceed.

As you look around, wondering how it got this messy, @Jon Arjinborn shouts, \"Look out!\" An angry frog leaps from the sludge, clad in dirty laundry and lit by blue fire. You will have to overcome this poisonous Clutter Frog to progress!", + "questFrogCompletion": "The frog cowers back into the muck, defeated. As it slinks away, the blue slime fades, leaving the way ahead clear.

Sitting in the middle of the path are three pristine eggs. \"You can even see the tiny tadpoles and through the clear casing!\" @Breadstrings says. \"Here, you should take them.\"", + "questFrogBoss": "Clutter Frog", + "questFrogDropFrogEgg": "Frog (Egg)", + "questFrogUnlockText": "Unlocks purchasable Frog eggs in the Market", + "questSnakeText": "The Serpent of Distraction", + "questSnakeNotes": "It takes a hardy soul to live in the Sand Dunes of Distraction. The arid desert is hardly a productive place, and the shimmering dunes have led many a traveler astray. However, something has even the locals spooked. The sands have been shifting and upturning entire villages. Residents claim a monster with an enormous serpentine body lies in wait under the sands, and they have all pooled together a reward for whomever will help them find and stop it. The much-lauded snake charmers @EmeraldOx and @PainterProphet have agreed to help you summon the beast. Can you stop the Serpent of Distraction?", + "questSnakeCompletion": "With assistance from the charmers, you banish the Serpent of Distraction. Though you were happy to help the inhabitants of the Dunes, you can't help but feel a little sad for your fallen foe. While you contemplate the sights, @LordDarkly approaches you. \"Thank you! It's not much, but I hope this can express our gratitude properly.\" He hands you some Gold and... some Snake eggs! You will see that majestic animal again after all.", + "questSnakeBoss": "Serpent of Distraction", + "questSnakeDropSnakeEgg": "蛇(蛋)", + "questSnakeUnlockText": "Unlocks purchasable Snake eggs in the Market" } \ No newline at end of file diff --git a/common/locales/zh_TW/rebirth.json b/common/locales/zh_TW/rebirth.json index e9b0e3597a..500fa9790d 100644 --- a/common/locales/zh_TW/rebirth.json +++ b/common/locales/zh_TW/rebirth.json @@ -1,10 +1,10 @@ { "rebirthNew": "重生:開始新的冒險!", - "rebirthUnlock": "你開啟了「重生」!這個特殊的物品,會讓你從 1 級重新開始遊戲,不過你的任務、成就、寵物等會被保留下來。如果你覺得已經達成了所有目標,用它來開啟全新的視角,體驗新的人生!", + "rebirthUnlock": "你解鎖了「重生」!這個特殊的商品讓你可以回到 1 級重新開始遊戲,並保留你的任務、成就、寵物等紀錄。如果你覺得已經達成了所有目標,就用它來開啟全新的視角,體驗新的人生吧!", "rebirthBegin": "重生:開始新的冒險", - "rebirthStartOver": "Rebirth starts your character over from Level 1.", + "rebirthStartOver": "「重生」讓你的角色重返等級 1 !", "rebirthAdvList1": "生命值完全復原", - "rebirthAdvList2": "You have no Experience, Gold, or Equipment (with the exception of free items like Mystery items).", + "rebirthAdvList2": "你沒有任何經驗值,黃金,或裝備。(除了一些免費的物品例如「神秘物品」)", "rebirthAdvList3": "你的習慣、日常任務、待辦事項會被重置為黃色,連擊數也會被重置。", "rebirthAdvList4": "你會從戰士職業開始,直到你解鎖了新的職業。", "rebirthInherit": "你的新角色繼承了一些前輩的東西:", @@ -16,10 +16,12 @@ "rebirthEarnAchievement": "你會因為開始一段新冒險,而獲得一個成就!", "beReborn": "重生", "rebirthAchievement": "你開始了一段新冒險!這是你的第<%= number %>次冒險,你曾經獲得的最高級別是<%= level %>級。要累積這個成就,你要在獲得更高等級之後,再開始下一次冒險!", + "rebirthAchievement100": "開始了一趟新的冒險旅程!這是你第 <%= number %> 次重生,而你的最高等級達到了 100 以上。要完成這個成就,在你等級至少 100 後開啟新的一趟旅程吧!", "rebirthBegan": "開始新的冒險", "rebirthText": "開始<%= rebirths %> 次新的冒險", - "rebirthOrb": "使用重生球來重新開始,曾經到達級別", + "rebirthOrb": "使用重生之球來歸零曾經到達的級別,重新開始遊戲", + "rebirthOrb100": "到達級別 100 後,使用重生之球來重生遊戲。", "rebirthPop": "開始一個等級 1 的新角色,並保留成就、物品和任務歷史。", - "rebirthName": "重生球", + "rebirthName": "重生之球", "reborn": "重生,最高級別 <%= reLevel %>" } \ No newline at end of file diff --git a/common/locales/zh_TW/settings.json b/common/locales/zh_TW/settings.json index bece9700ea..d5c8f135c8 100644 --- a/common/locales/zh_TW/settings.json +++ b/common/locales/zh_TW/settings.json @@ -14,6 +14,11 @@ "startCollapsedPop": "選擇這個選項後,展開編輯新任務時,標籤列表是隱藏的。", "startAdvCollapsed": "預設隱藏進階選項", "startAdvCollapsedPop": "選擇這個選項後,展開編輯新任務時,進階選項是隱藏的。", + "dontShowAgain": "不要再顯示", + "suppressLevelUpModal": "升級時不要跳出提醒畫面", + "suppressHatchPetModal": "孵化寵物時不要跳出提醒畫面", + "suppressRaisePetModal": "當寵物成長為座騎時不要跳出提醒畫面", + "suppressStreakModal": "當達成連擊成就時不要跳出提醒畫面", "showTour": "顯示教學", "restartTour": "重新開始剛加入 Habitica 時,所顯示的教學", "showBailey": "顯示 Bailey", @@ -81,7 +86,6 @@ "emailChange1": "如果想修改 email 地址,請寄信到", "emailChange2": "admin@habitica.com", "emailChange3": "包括你新的和舊的 eamil 地址,和你的UUID。", - "username": "帳號", "usernameOrEmail": "登入名稱或電子郵件", "email": "Email", "registeredWithFb": "Facebook 已註冊", @@ -89,7 +93,7 @@ "loginNameDescription2": "玩家→基本資料", "loginNameDescription3": "來修改你的你的角色和在聊天室的名字。", "emailNotifications": "電子郵件通知", - "wonChallenge": "你贏得挑戰", + "wonChallenge": "You won a Challenge!", "newPM": "收到的私密訊息", "giftedGems": "禮物用寶石", "giftedGemsInfo": "<%= name %> 的 <%= amount %> 個寶石", @@ -118,5 +122,29 @@ "promoCode": "優惠代碼", "promoCodeApplied": "優惠代碼已使用! 請檢查你的背包", "promoPlaceholder": "輸入優惠代碼", - "displayInviteToPartyWhenPartyIs1": "當隊伍有1個夥伴時,會顯示邀請入隊的按鈕。" + "displayInviteToPartyWhenPartyIs1": "當隊伍有1個夥伴時,會顯示邀請入隊的按鈕。", + "saveCustomDayStart": "儲存開始日期", + "registration": "登錄", + "addLocalAuth": "新增本地認證", + "generateCodes": "產生驗證碼", + "generate": "產生", + "getCodes": "得到驗證碼", + "webhooks": "Webhooks", + "enabled": "啟用", + "webhookURL": "Webhook URL", + "add": "增加", + "buyGemsGoldCap": "上限提高到<%= amount %>", + "mysticHourglass": "<%= amount %>神秘沙漏", + "mysticHourglassText": "神秘沙漏允許您購買以前每月神祕的物品。", + "purchasedPlanId": "定期$<%= price %>每 <%= months %>月(s) (<%= plan %>)", + "purchasedPlanExtraMonths": "You have <%= months %> months of subscription credit.", + "consecutiveSubscription": "連續訂閱", + "consecutiveMonths": "Consecutive Months:", + "gemCapExtra": "Gem Cap Extra:", + "mysticHourglasses": "Mystic Hourglasses:", + "paypal": "PayPal", + "amazonPayments": "Amazon Payments", + "timezone": "Time Zone", + "timezoneUTC": "Habitica uses the time zone set on your PC, which is: <%= utc %>", + "timezoneInfo": "If that time zone is wrong, first reload this page using your browser's reload or refresh button to ensure that Habitica has the most recent information. If it is still wrong, adjust the time zone on your PC and then reload this page again.

If you use Habitica on other PCs or mobile devices, the time zone must be the same on them all. If your Dailies have been reseting at the wrong time, repeat this check on all other PCs and on a browser on your mobile devices." } \ No newline at end of file diff --git a/common/locales/zh_TW/subscriber.json b/common/locales/zh_TW/subscriber.json index 640ef26e98..7e268d9293 100644 --- a/common/locales/zh_TW/subscriber.json +++ b/common/locales/zh_TW/subscriber.json @@ -59,21 +59,21 @@ "timeTravelers": "時光旅行者", "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> 和 <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitle": "神秘的時光旅行者", - "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.", - "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 <%= linkStart %>here<%= linkEnd %>! 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!", - "subUpdateCard": "更新信用卡", + "timeTravelersPopoverNoSub": "你需要神秘沙漏來召喚神秘的時光旅行者!<%= linkStart %>訂閱用戶<%= linkEnd %>每連續訂閱三個月就可以獲得一個神祕沙漏。請在擁有神秘沙漏時回來,時光旅行者將從過去為你取得稀有寵物、座騎或訂閱者物品組...甚至可能取得未來的物品。", + "timeTravelersPopover": "我們發現你擁有神秘沙漏,很高興能為你穿越時空!請選擇你想要的寵物、座騎或神秘物品。你可以在這裡觀看看到往昔物品的清單 !如果這些無法滿足你,也許你會對我們時髦的未來風蒸氣龐克物品有興趣?", + "timeTravelersAlreadyOwned": "恭喜!你已擁有時光旅行者目前所供應的所有物品。感謝你對這個網站的支持!", + "mysticHourglassPopover": "神秘沙漏能讓你購買特定的限期物品,像是每個月的神祕物品和世界 Boss 的獎品,取得過去的東西!", + "subUpdateCard": "更新信用卡資訊", "subUpdateTitle": "更新", "subUpdateDescription": "更新信用卡以便我們扣款", - "notEnoughHourglasses": "You don't have enough Mystic Hourglasses.", - "hourglassBuyEquipSetConfirm": "Buy this full set of items for 1 Mystic Hourglass?", - "hourglassBuyItemConfirm": "Buy this item for 1 Mystic Hourglass?", - "petsAlreadyOwned": "Pet already owned.", - "mountsAlreadyOwned": "Mount already owned.", - "typeNotAllowedHourglass": "Item type not supported for purchase with Mystic Hourglass. Allowed types:", - "petsNotAllowedHourglass": "Pet not available for purchase with Mystic Hourglass.", - "mountsNotAllowedHourglass": "Mount not available for purchase with Mystic Hourglass.", - "hourglassPurchase": "Purchased an item using a Mystic Hourglass!", - "hourglassPurchaseSet": "Purchased an item set using a Mystic Hourglass!" + "notEnoughHourglasses": "你的神祕沙漏不足。", + "hourglassBuyEquipSetConfirm": "使用 1 個神祕沙漏購買這組物品嗎?", + "hourglassBuyItemConfirm": "使用 1 個神祕沙漏購買這個物品嗎?", + "petsAlreadyOwned": "已擁有此寵物。", + "mountsAlreadyOwned": "已擁有此座騎。", + "typeNotAllowedHourglass": "此物品類型無法用神秘沙漏購買。適用類型:", + "petsNotAllowedHourglass": "此寵物無法使用神秘沙漏購買。", + "mountsNotAllowedHourglass": "此座騎無法使用神秘沙漏購買。", + "hourglassPurchase": "使用神秘沙漏購買了一項物品!", + "hourglassPurchaseSet": "使用神秘沙漏購買了一組物品!" } \ No newline at end of file diff --git a/common/locales/zh_TW/tasks.json b/common/locales/zh_TW/tasks.json index 3d9cf6fc36..9a208abbe9 100644 --- a/common/locales/zh_TW/tasks.json +++ b/common/locales/zh_TW/tasks.json @@ -88,8 +88,7 @@ "fortifyText": "鞏固會將你的任務回復到中性狀態 ( 黃色 ,如同剛新增時),並把你的生命值補滿。把它當成無計可施時的最後王牌!紅色會為進步提供良好的動力,但如果滿目紅色讓你難過,且每天開始時都對你致命,那麼花費寶石來喘口氣吧!", "sureDelete": "你確定要刪除這個任務嗎?", "streakCoins": "連擊獎勵", - "pushTaskToTop": "置頂", - "pushTaskToBottom": "置底", + "pushTaskToTop": "Push task to top. Hold ctrl or cmd to push to bottom.", "emptyTask": "請先輸入任務的標題", "dailiesRestingInInn": "你正在酒館休息中!你今天不會因為未完成每日任務而受到傷害,但是任務還是會每天刷新哦。如果你正在隊伍中解任務的話,在你離開酒館前,你將不會受到傷害也無法獲得獎勵,可是若你的隊伍沒有乖乖完成他們自己的每日任務的話,你的生命值仍然會受損哦。", "habitHelp1": "「好習慣」就是你每天都可以完成好幾次的正面事情。當你每次點擊 <%= plusIcon %>的時候,它會為你帶來金幣和經驗值哦。", diff --git a/common/script/content/constants.js b/common/script/content/constants.js new file mode 100644 index 0000000000..0c0ee334e0 --- /dev/null +++ b/common/script/content/constants.js @@ -0,0 +1,58 @@ +/* eslint-disable key-spacing */ + +export const CLASSES = [ + 'warrior', + 'rogue', + 'healer', + 'wizard', +]; + +// IMPORTANT: The end date should be one to two days AFTER the actual end of +// the event, to allow people in different timezones to still buy the +// event gear up until at least the actual end of the event. + +export const EVENTS = { + winter: { start: '2013-12-31', end: '2014-02-01' }, + birthday: { start: '2013-01-30', end: '2014-02-01' }, + spring: { start: '2014-03-21', end: '2014-05-01' }, + summer: { start: '2014-06-20', end: '2014-08-01' }, + fall: { start: '2014-09-21', end: '2014-11-01' }, + winter2015: { start: '2014-12-21', end: '2015-02-02' }, + spring2015: { start: '2015-03-20', end: '2015-05-02' }, + summer2015: { start: '2015-06-20', end: '2015-08-02' }, + fall2015: { start: '2015-09-21', end: '2015-11-01' }, + gaymerx: { start: '2015-12-01', end: '2015-12-14' }, +}; + +export const GEAR_TYPES = [ + 'weapon', + 'armor', + 'head', + 'shield', + 'body', + 'back', + 'headAccessory', + 'eyewear', +]; + +export const ITEM_LIST = { + weapon: { localeKey: 'weapon', isEquipment: true }, + armor: { localeKey: 'armor', isEquipment: true }, + head: { localeKey: 'headgear', isEquipment: true }, + shield: { localeKey: 'offhand', isEquipment: true }, + back: { localeKey: 'back', isEquipment: true }, + body: { localeKey: 'body', isEquipment: true }, + headAccessory: { localeKey: 'headAccessory', isEquipment: true }, + eyewear: { localeKey: 'eyewear', isEquipment: true }, + hatchingPotions: { localeKey: 'hatchingPotion', isEquipment: false }, + eggs: { localeKey: 'eggSingular', isEquipment: false }, + quests: { localeKey: 'quest', isEquipment: false }, + food: { localeKey: 'foodText', isEquipment: false }, + Saddle: { localeKey: 'foodSaddleText', isEquipment: false }, +}; + +export const USER_CAN_OWN_QUEST_CATEGORIES = [ + 'unlockable', + 'gold', + 'pet', +]; diff --git a/common/script/content/faq.js b/common/script/content/faq.js index 7d8468ee3e..d55f461b89 100644 --- a/common/script/content/faq.js +++ b/common/script/content/faq.js @@ -1,19 +1,16 @@ -'use strict'; +let t = require('./translation.js'); -require('coffee-script'); -var t = require('./translation.js'); +let NUMBER_OF_QUESTIONS = 12; -var NUMBER_OF_QUESTIONS = 12; - -var faq = {}; +let faq = {}; faq.questions = []; -for (var i = 0; i <= NUMBER_OF_QUESTIONS; i++) { - var question = { - question: t('faqQuestion' + i), - ios: t('iosFaqAnswer' + i), - web: t('webFaqAnswer' + i) +for (let i = 0; i <= NUMBER_OF_QUESTIONS; i++) { + let question = { + question: t(`faqQuestion${i}`), + ios: t(`iosFaqAnswer${i}`), + web: t(`webFaqAnswer${i}`), }; faq.questions.push(question); @@ -21,7 +18,7 @@ for (var i = 0; i <= NUMBER_OF_QUESTIONS; i++) { faq.stillNeedHelp = { ios: t('iosFaqStillNeedHelp'), - web: t('webFaqStillNeedHelp') + web: t('webFaqStillNeedHelp'), }; module.exports = faq; diff --git a/common/script/src/content/gear/armor.js b/common/script/content/gear/armor.js similarity index 100% rename from common/script/src/content/gear/armor.js rename to common/script/content/gear/armor.js diff --git a/common/script/src/content/gear/back.js b/common/script/content/gear/back.js similarity index 100% rename from common/script/src/content/gear/back.js rename to common/script/content/gear/back.js diff --git a/common/script/src/content/gear/body.js b/common/script/content/gear/body.js similarity index 100% rename from common/script/src/content/gear/body.js rename to common/script/content/gear/body.js diff --git a/common/script/src/content/gear/eyewear.js b/common/script/content/gear/eyewear.js similarity index 100% rename from common/script/src/content/gear/eyewear.js rename to common/script/content/gear/eyewear.js diff --git a/common/script/content/gear/gear-helper.js b/common/script/content/gear/gear-helper.js new file mode 100644 index 0000000000..094ec6548b --- /dev/null +++ b/common/script/content/gear/gear-helper.js @@ -0,0 +1,7 @@ +import { isBoolean } from 'lodash'; + +export function ownsItem (item) { + return (user) => { + return item && isBoolean(user.items.gear.owned[item]); + }; +} diff --git a/common/script/src/content/gear/head-accessory.js b/common/script/content/gear/head-accessory.js similarity index 100% rename from common/script/src/content/gear/head-accessory.js rename to common/script/content/gear/head-accessory.js diff --git a/common/script/src/content/gear/head.js b/common/script/content/gear/head.js similarity index 100% rename from common/script/src/content/gear/head.js rename to common/script/content/gear/head.js diff --git a/common/script/content/gear/index.js b/common/script/content/gear/index.js new file mode 100644 index 0000000000..a9fe254e7b --- /dev/null +++ b/common/script/content/gear/index.js @@ -0,0 +1,84 @@ +import {each, defaults} from 'lodash'; +import moment from 'moment'; + +import { + CLASSES, + GEAR_TYPES, +} from '../constants'; +import { ownsItem } from './gear-helper'; + +import weapon from './weapon'; +import armor from './armor'; +import head from './head'; +import shield from './shield'; +import back from './back'; +import body from './body'; +import headAccessory from './head-accessory'; +import eyewear from './eyewear'; + +let gear = { + weapon, + armor, + head, + shield, + back, + body, + headAccessory, + eyewear, +}; + +/* + The gear is exported as a tree (defined above), and a flat list (eg, {weapon_healer_1: .., shield_special_0: ...}) since + they are needed in different forms at different points in the app + */ +let flat = {}; + +each(GEAR_TYPES, (type) => { + let allGearTypes = CLASSES.concat(['base', 'special', 'mystery', 'armoire']); + + each(allGearTypes, (klass) => { + each(gear[type][klass], (item, index) => { + let key = `${type}_${klass}_${index}`; + + defaults(item, { + type, + key, + klass, + index, + str: 0, + int: 0, + per: 0, + con: 0, + canBuy: () => { + return false; + }, + }); + + if (item.event) { + let canOwnFuncTrue = () => { + return true; + }; + let _canOwn = item.canOwn || canOwnFuncTrue; + + item.canOwn = (user) => { + let userHasOwnedItem = ownsItem(key)(user); + let eventIsCurrent = moment().isAfter(item.event.start) && moment().isBefore(item.event.end); + let compatibleWithUserClass = item.specialClass ? user.stats.class === item.specialClass : true; + + return _canOwn(user) && (userHasOwnedItem || eventIsCurrent) && compatibleWithUserClass; + }; + } + + if (item.mystery) { + item.canOwn = ownsItem(key); + } + + flat[key] = item; + }); + }); +}); + +export default { + tree: gear, + flat, +}; diff --git a/common/script/content/gear/sets/armoire.js b/common/script/content/gear/sets/armoire.js new file mode 100644 index 0000000000..16f8655be2 --- /dev/null +++ b/common/script/content/gear/sets/armoire.js @@ -0,0 +1,388 @@ +import { ownsItem } from '../gear-helper'; +import t from '../../translation'; + +let armor = { + lunarArmor: { + text: t('armorArmoireLunarArmorText'), + notes: t('armorArmoireLunarArmorNotes', { str: 7, int: 7 }), + value: 100, + str: 7, + int: 7, + set: 'soothing', + canOwn: ownsItem('armor_armoire_lunarArmor'), + }, + gladiatorArmor: { + text: t('armorArmoireGladiatorArmorText'), + notes: t('armorArmoireGladiatorArmorNotes', { str: 7, per: 7 }), + value: 100, + str: 7, + per: 7, + set: 'gladiator', + canOwn: ownsItem('armor_armoire_gladiatorArmor'), + }, + rancherRobes: { + text: t('armorArmoireRancherRobesText'), + notes: t('armorArmoireRancherRobesNotes', { str: 5, per: 5, int: 5 }), + value: 100, + str: 5, + per: 5, + int: 5, + set: 'rancher', + canOwn: ownsItem('armor_armoire_rancherRobes'), + }, + goldenToga: { + text: t('armorArmoireGoldenTogaText'), + notes: t('armorArmoireGoldenTogaNotes', { attrs: 8 }), + value: 100, + str: 8, + con: 8, + set: 'goldenToga', + canOwn: ownsItem('armor_armoire_goldenToga'), + }, + hornedIronArmor: { + text: t('armorArmoireHornedIronArmorText'), + notes: t('armorArmoireHornedIronArmorNotes', { con: 9, per: 7 }), + value: 100, + con: 9, + per: 7, + set: 'hornedIron', + canOwn: ownsItem('armor_armoire_hornedIronArmor'), + }, + plagueDoctorOvercoat: { + text: t('armorArmoirePlagueDoctorOvercoatText'), + notes: t('armorArmoirePlagueDoctorOvercoatNotes', { int: 6, str: 5, con: 6 }), + value: 100, + int: 6, + str: 5, + con: 6, + set: 'plagueDoctor', + canOwn: ownsItem('armor_armoire_plagueDoctorOvercoat'), + }, + shepherdRobes: { + text: t('armorArmoireShepherdRobesText'), + notes: t('armorArmoireShepherdRobesNotes', { attrs: 9 }), + value: 100, + str: 9, + per: 9, + set: 'shepherd', + canOwn: ownsItem('armor_armoire_shepherdRobes'), + }, + royalRobes: { + text: t('armorArmoireRoyalRobesText'), + notes: t('armorArmoireRoyalRobesNotes', { attrs: 5 }), + value: 100, + con: 5, + per: 5, + int: 5, + set: 'royal', + canOwn: ownsItem('armor_armoire_royalRobes'), + }, + crystalCrescentRobes: { + text: t('armorArmoireCrystalCrescentRobesText'), + notes: t('armorArmoireCrystalCrescentRobesNotes', { attrs: 7 }), + value: 100, + per: 7, + con: 7, + set: 'crystalCrescent', + canOwn: ownsItem('armor_armoire_crystalCrescentRobes'), + }, +}; + +let eyewear = { + plagueDoctorMask: { + text: t('eyewearArmoirePlagueDoctorMaskText'), + notes: t('eyewearArmoirePlagueDoctorMaskNotes'), + value: 100, + set: 'plagueDoctor', + canOwn: ownsItem('eyewear_armoire_plagueDoctorMask'), + }, +}; + +let head = { + lunarCrown: { + text: t('headArmoireLunarCrownText'), + notes: t('headArmoireLunarCrownNotes', { con: 7, per: 7 }), + value: 100, + con: 7, + per: 7, + set: 'soothing', + canOwn: ownsItem('head_armoire_lunarCrown'), + }, + redHairbow: { + text: t('headArmoireRedHairbowText'), + notes: t('headArmoireRedHairbowNotes', { str: 5, int: 5, con: 5 }), + value: 100, + str: 5, + int: 5, + con: 5, + canOwn: ownsItem('head_armoire_redHairbow'), + }, + violetFloppyHat: { + text: t('headArmoireVioletFloppyHatText'), + notes: t('headArmoireVioletFloppyHatNotes', { per: 5, int: 5, con: 5 }), + value: 100, + per: 5, + int: 5, + con: 5, + canOwn: ownsItem('head_armoire_violetFloppyHat'), + }, + gladiatorHelm: { + text: t('headArmoireGladiatorHelmText'), + notes: t('headArmoireGladiatorHelmNotes', { per: 7, int: 7 }), + value: 100, + per: 7, + int: 7, + set: 'gladiator', + canOwn: ownsItem('head_armoire_gladiatorHelm'), + }, + rancherHat: { + text: t('headArmoireRancherHatText'), + notes: t('headArmoireRancherHatNotes', { str: 5, per: 5, int: 5 }), + value: 100, + str: 5, + per: 5, + int: 5, + set: 'rancher', + canOwn: ownsItem('head_armoire_rancherHat'), + }, + royalCrown: { + text: t('headArmoireRoyalCrownText'), + notes: t('headArmoireRoyalCrownNotes', { str: 10 }), + value: 100, + str: 10, + set: 'royal', + canOwn: ownsItem('head_armoire_royalCrown'), + }, + blueHairbow: { + text: t('headArmoireBlueHairbowText'), + notes: t('headArmoireBlueHairbowNotes', { per: 5, int: 5, con: 5 }), + value: 100, + per: 5, + int: 5, + con: 5, + canOwn: ownsItem('head_armoire_blueHairbow'), + }, + goldenLaurels: { + text: t('headArmoireGoldenLaurelsText'), + notes: t('headArmoireGoldenLaurelsNotes', { attrs: 8 }), + value: 100, + per: 8, + con: 8, + set: 'goldenToga', + canOwn: ownsItem('head_armoire_goldenLaurels'), + }, + hornedIronHelm: { + text: t('headArmoireHornedIronHelmText'), + notes: t('headArmoireHornedIronHelmNotes', { con: 9, str: 7 }), + value: 100, + con: 9, + str: 7, + set: 'hornedIron', + canOwn: ownsItem('head_armoire_hornedIronHelm'), + }, + yellowHairbow: { + text: t('headArmoireYellowHairbowText'), + notes: t('headArmoireYellowHairbowNotes', { attrs: 5 }), + value: 100, + int: 5, + per: 5, + str: 5, + canOwn: ownsItem('head_armoire_yellowHairbow'), + }, + redFloppyHat: { + text: t('headArmoireRedFloppyHatText'), + notes: t('headArmoireRedFloppyHatNotes', { attrs: 6 }), + value: 100, + con: 6, + int: 6, + per: 6, + canOwn: ownsItem('head_armoire_redFloppyHat'), + }, + plagueDoctorHat: { + text: t('headArmoirePlagueDoctorHatText'), + notes: t('headArmoirePlagueDoctorHatNotes', { int: 5, str: 6, con: 5 }), + value: 100, + int: 5, + str: 6, + con: 5, + set: 'plagueDoctor', + canOwn: ownsItem('head_armoire_plagueDoctorHat'), + }, + blackCat: { + text: t('headArmoireBlackCatText'), + notes: t('headArmoireBlackCatNotes', { attrs: 9 }), + value: 100, + int: 9, + per: 9, + canOwn: ownsItem('head_armoire_blackCat'), + }, + orangeCat: { + text: t('headArmoireOrangeCatText'), + notes: t('headArmoireOrangeCatNotes', { attrs: 9 }), + value: 100, + con: 9, + str: 9, + canOwn: ownsItem('head_armoire_orangeCat'), + }, + blueFloppyHat: { + text: t('headArmoireBlueFloppyHatText'), + notes: t('headArmoireBlueFloppyHatNotes', { attrs: 7 }), + value: 100, + per: 7, + int: 7, + con: 7, + canOwn: ownsItem('head_armoire_blueFloppyHat'), + }, + shepherdHeaddress: { + text: t('headArmoireShepherdHeaddressText'), + notes: t('headArmoireShepherdHeaddressNotes', { int: 9 }), + value: 100, + int: 9, + set: 'shepherd', + canOwn: ownsItem('head_armoire_shepherdHeaddress'), + }, + crystalCrescentHat: { + text: t('headArmoireCrystalCrescentHatText'), + notes: t('headArmoireCrystalCrescentHatNotes', { attrs: 7 }), + value: 100, + int: 7, + per: 7, + set: 'crystalCrescent', + canOwn: ownsItem('head_armoire_crystalCrescentHat'), + }, +}; + +let shield = { + gladiatorShield: { + text: t('shieldArmoireGladiatorShieldText'), + notes: t('shieldArmoireGladiatorShieldNotes', { con: 5, str: 5 }), + value: 100, + con: 5, + str: 5, + set: 'gladiator', + canOwn: ownsItem('shield_armoire_gladiatorShield'), + }, + midnightShield: { + text: t('shieldArmoireMidnightShieldText'), + notes: t('shieldArmoireMidnightShieldNotes', { con: 10, str: 2 }), + value: 100, + con: 10, + str: 2, + canOwn: ownsItem('shield_armoire_midnightShield'), + }, + royalCane: { + text: t('shieldArmoireRoyalCaneText'), + notes: t('shieldArmoireRoyalCaneNotes', { attrs: 5 }), + value: 100, + con: 5, + int: 5, + per: 5, + set: 'royal', + canOwn: ownsItem('shield_armoire_royalCane'), + }, +}; + +let weapon = { + basicCrossbow: { + text: t('weaponArmoireBasicCrossbowText'), + notes: t('weaponArmoireBasicCrossbowNotes', { str: 5, per: 5, con: 5 }), + value: 100, + str: 5, + per: 5, + con: 5, + canOwn: ownsItem('weapon_armoire_basicCrossbow'), + }, + lunarSceptre: { + text: t('weaponArmoireLunarSceptreText'), + notes: t('weaponArmoireLunarSceptreNotes', { con: 7, int: 7 }), + value: 100, + con: 7, + int: 7, + set: 'soothing', + canOwn: ownsItem('weapon_armoire_lunarSceptre'), + }, + rancherLasso: { + twoHanded: true, + text: t('weaponArmoireRancherLassoText'), + notes: t('weaponArmoireRancherLassoNotes', { str: 5, per: 5, int: 5 }), + value: 100, + str: 5, + per: 5, + int: 5, + set: 'rancher', + canOwn: ownsItem('weapon_armoire_rancherLasso'), + }, + mythmakerSword: { + text: t('weaponArmoireMythmakerSwordText'), + notes: t('weaponArmoireMythmakerSwordNotes', { attrs: 6 }), + value: 100, + str: 6, + per: 6, + set: 'goldenToga', + canOwn: ownsItem('weapon_armoire_mythmakerSword'), + }, + ironCrook: { + text: t('weaponArmoireIronCrookText'), + notes: t('weaponArmoireIronCrookNotes', { attrs: 7 }), + value: 100, + str: 7, + per: 7, + set: 'hornedIron', + canOwn: ownsItem('weapon_armoire_ironCrook'), + }, + goldWingStaff: { + text: t('weaponArmoireGoldWingStaffText'), + notes: t('weaponArmoireGoldWingStaffNotes', { attrs: 4 }), + value: 100, + con: 4, + int: 4, + per: 4, + str: 4, + canOwn: ownsItem('weapon_armoire_goldWingStaff'), + }, + batWand: { + text: t('weaponArmoireBatWandText'), + notes: t('weaponArmoireBatWandNotes', { int: 10, per: 2 }), + value: 100, + int: 10, + per: 2, + canOwn: ownsItem('weapon_armoire_batWand'), + }, + shepherdsCrook: { + text: t('weaponArmoireShepherdsCrookText'), + notes: t('weaponArmoireShepherdsCrookNotes', { con: 9 }), + value: 100, + con: 9, + set: 'shepherd', + canOwn: ownsItem('weapon_armoire_shepherdsCrook'), + }, + crystalCrescentStaff: { + text: t('weaponArmoireCrystalCrescentStaffText'), + notes: t('weaponArmoireCrystalCrescentStaffNotes', { attrs: 7 }), + value: 100, + int: 7, + str: 7, + set: 'crystalCrescent', + canOwn: ownsItem('weapon_armoire_crystalCrescentStaff'), + }, + blueLongbow: { + text: t('weaponArmoireBlueLongbowText'), + notes: t('weaponArmoireBlueLongbowNotes', { per: 9, con: 8, str: 7 }), + value: 100, + per: 9, + con: 8, + str: 7, + twoHanded: true, + canOwn: ownsItem('weapon_armoire_blueLongbow'), + }, +}; + +let armoireSet = { + armor, + eyewear, + head, + shield, + weapon, +}; + +export default armoireSet; diff --git a/common/script/content/gear/sets/base.js b/common/script/content/gear/sets/base.js new file mode 100644 index 0000000000..4f0e84268a --- /dev/null +++ b/common/script/content/gear/sets/base.js @@ -0,0 +1,80 @@ +import t from '../../translation'; + +let armor = { + 0: { + text: t('armorBase0Text'), + notes: t('armorBase0Notes'), + value: 0, + }, +}; + +let back = { + 0: { + text: t('backBase0Text'), + notes: t('backBase0Notes'), + value: 0, + }, +}; + +let body = { + 0: { + text: t('bodyBase0Text'), + notes: t('bodyBase0Notes'), + value: 0, + }, +}; + +let eyewear = { + 0: { + text: t('eyewearBase0Text'), + notes: t('eyewearBase0Notes'), + value: 0, + last: true, + }, +}; + +let head = { + 0: { + text: t('headBase0Text'), + notes: t('headBase0Notes'), + value: 0, + }, +}; + +let headAccessory = { + 0: { + text: t('headAccessoryBase0Text'), + notes: t('headAccessoryBase0Notes'), + value: 0, + last: true, + }, +}; + +let shield = { + 0: { + text: t('shieldBase0Text'), + notes: t('shieldBase0Notes'), + value: 0, + }, +}; + +let weapon = { + 0: { + text: t('weaponBase0Text'), + notes: t('weaponBase0Notes'), + value: 0, + }, +}; + +let baseSet = { + armor, + back, + body, + eyewear, + head, + headAccessory, + shield, + weapon, +}; + +export default baseSet; diff --git a/common/script/content/gear/sets/healer.js b/common/script/content/gear/sets/healer.js new file mode 100644 index 0000000000..4fa5bc38dc --- /dev/null +++ b/common/script/content/gear/sets/healer.js @@ -0,0 +1,158 @@ +import t from '../../translation'; + +let armor = { + 1: { + text: t('armorHealer1Text'), + notes: t('armorHealer1Notes', { con: 6 }), + con: 6, + value: 30, + }, + 2: { + text: t('armorHealer2Text'), + notes: t('armorHealer2Notes', { con: 9 }), + con: 9, + value: 45, + }, + 3: { + text: t('armorHealer3Text'), + notes: t('armorHealer3Notes', { con: 12 }), + con: 12, + value: 65, + }, + 4: { + text: t('armorHealer4Text'), + notes: t('armorHealer4Notes', { con: 15 }), + con: 15, + value: 90, + }, + 5: { + text: t('armorHealer5Text'), + notes: t('armorHealer5Notes', { con: 18 }), + con: 18, + value: 120, + last: true, + }, +}; + +let head = { + 1: { + text: t('headHealer1Text'), + notes: t('headHealer1Notes', { int: 2 }), + int: 2, + value: 15, + }, + 2: { + text: t('headHealer2Text'), + notes: t('headHealer2Notes', { int: 3 }), + int: 3, + value: 25, + }, + 3: { + text: t('headHealer3Text'), + notes: t('headHealer3Notes', { int: 5 }), + int: 5, + value: 40, + }, + 4: { + text: t('headHealer4Text'), + notes: t('headHealer4Notes', { int: 7 }), + int: 7, + value: 60, + }, + 5: { + text: t('headHealer5Text'), + notes: t('headHealer5Notes', { int: 9 }), + int: 9, + value: 80, + last: true, + }, +}; + +let shield = { + 1: { + text: t('shieldHealer1Text'), + notes: t('shieldHealer1Notes', { con: 2 }), + con: 2, + value: 20, + }, + 2: { + text: t('shieldHealer2Text'), + notes: t('shieldHealer2Notes', { con: 4 }), + con: 4, + value: 35, + }, + 3: { + text: t('shieldHealer3Text'), + notes: t('shieldHealer3Notes', { con: 6 }), + con: 6, + value: 50, + }, + 4: { + text: t('shieldHealer4Text'), + notes: t('shieldHealer4Notes', { con: 9 }), + con: 9, + value: 70, + }, + 5: { + text: t('shieldHealer5Text'), + notes: t('shieldHealer5Notes', { con: 12 }), + con: 12, + value: 90, + last: true, + }, +}; + +let weapon = { + + 0: { + text: t('weaponHealer0Text'), + notes: t('weaponHealer0Notes'), + value: 0, + }, + 1: { + text: t('weaponHealer1Text'), + notes: t('weaponHealer1Notes', { int: 2 }), + int: 2, + value: 20, + }, + 2: { + text: t('weaponHealer2Text'), + notes: t('weaponHealer2Notes', { int: 3 }), + int: 3, + value: 30, + }, + 3: { + text: t('weaponHealer3Text'), + notes: t('weaponHealer3Notes', { int: 5 }), + int: 5, + value: 45, + }, + 4: { + text: t('weaponHealer4Text'), + notes: t('weaponHealer4Notes', { int: 7 }), + int: 7, + value: 65, + }, + 5: { + text: t('weaponHealer5Text'), + notes: t('weaponHealer5Notes', { int: 9 }), + int: 9, + value: 90, + }, + 6: { + text: t('weaponHealer6Text'), + notes: t('weaponHealer6Notes', { int: 11 }), + int: 11, + value: 120, + last: true, + }, +}; + +let healerSet = { + armor, + head, + shield, + weapon, +}; + +export default healerSet; diff --git a/common/script/content/gear/sets/mystery.js b/common/script/content/gear/sets/mystery.js new file mode 100644 index 0000000000..c42973995c --- /dev/null +++ b/common/script/content/gear/sets/mystery.js @@ -0,0 +1,352 @@ +import t from '../../translation'; + +let armor = { + 201402: { + text: t('armorMystery201402Text'), + notes: t('armorMystery201402Notes'), + mystery: '201402', + value: 0, + }, + 201403: { + text: t('armorMystery201403Text'), + notes: t('armorMystery201403Notes'), + mystery: '201403', + value: 0, + }, + 201405: { + text: t('armorMystery201405Text'), + notes: t('armorMystery201405Notes'), + mystery: '201405', + value: 0, + }, + 201406: { + text: t('armorMystery201406Text'), + notes: t('armorMystery201406Notes'), + mystery: '201406', + value: 0, + }, + 201407: { + text: t('armorMystery201407Text'), + notes: t('armorMystery201407Notes'), + mystery: '201407', + value: 0, + }, + 201408: { + text: t('armorMystery201408Text'), + notes: t('armorMystery201408Notes'), + mystery: '201408', + value: 0, + }, + 201409: { + text: t('armorMystery201409Text'), + notes: t('armorMystery201409Notes'), + mystery: '201409', + value: 0, + }, + 201410: { + text: t('armorMystery201410Text'), + notes: t('armorMystery201410Notes'), + mystery: '201410', + value: 0, + }, + 201412: { + text: t('armorMystery201412Text'), + notes: t('armorMystery201412Notes'), + mystery: '201412', + value: 0, + }, + 201501: { + text: t('armorMystery201501Text'), + notes: t('armorMystery201501Notes'), + mystery: '201501', + value: 0, + }, + 201503: { + text: t('armorMystery201503Text'), + notes: t('armorMystery201503Notes'), + mystery: '201503', + value: 0, + }, + 201504: { + text: t('armorMystery201504Text'), + notes: t('armorMystery201504Notes'), + mystery: '201504', + value: 0, + }, + 201506: { + text: t('armorMystery201506Text'), + notes: t('armorMystery201506Notes'), + mystery: '201506', + value: 0, + }, + 201508: { + text: t('armorMystery201508Text'), + notes: t('armorMystery201508Notes'), + mystery: '201508', + value: 0, + }, + 201509: { + text: t('armorMystery201509Text'), + notes: t('armorMystery201509Notes'), + mystery: '201509', + value: 0, + }, + 201511: { + text: t('armorMystery201511Text'), + notes: t('armorMystery201511Notes'), + mystery: '201511', + value: 0, + }, + 301404: { + text: t('armorMystery301404Text'), + notes: t('armorMystery301404Notes'), + mystery: '301404', + value: 0, + }, +}; + +let back = { + 201402: { + text: t('backMystery201402Text'), + notes: t('backMystery201402Notes'), + mystery: '201402', + value: 0, + }, + 201404: { + text: t('backMystery201404Text'), + notes: t('backMystery201404Notes'), + mystery: '201404', + value: 0, + }, + 201410: { + text: t('backMystery201410Text'), + notes: t('backMystery201410Notes'), + mystery: '201410', + value: 0, + }, + 201504: { + text: t('backMystery201504Text'), + notes: t('backMystery201504Notes'), + mystery: '201504', + value: 0, + }, + 201507: { + text: t('backMystery201507Text'), + notes: t('backMystery201507Notes'), + mystery: '201507', + value: 0, + }, + 201510: { + text: t('backMystery201510Text'), + notes: t('backMystery201510Notes'), + mystery: '201510', + value: 0, + }, +}; + +let eyewear = { + 201503: { + text: t('eyewearMystery201503Text'), + notes: t('eyewearMystery201503Notes'), + mystery: '201503', + value: 0, + }, + 201506: { + text: t('eyewearMystery201506Text'), + notes: t('eyewearMystery201506Notes'), + mystery: '201506', + value: 0, + }, + 201507: { + text: t('eyewearMystery201507Text'), + notes: t('eyewearMystery201507Notes'), + mystery: '201507', + value: 0, + }, + 301404: { + text: t('eyewearMystery301404Text'), + notes: t('eyewearMystery301404Notes'), + mystery: '301404', + value: 0, + }, + 301405: { + text: t('eyewearMystery301405Text'), + notes: t('eyewearMystery301405Notes'), + mystery: '301405', + value: 0, + }, +}; + +let head = { + 201402: { + text: t('headMystery201402Text'), + notes: t('headMystery201402Notes'), + mystery: '201402', + value: 0, + }, + 201405: { + text: t('headMystery201405Text'), + notes: t('headMystery201405Notes'), + mystery: '201405', + value: 0, + }, + 201406: { + text: t('headMystery201406Text'), + notes: t('headMystery201406Notes'), + mystery: '201406', + value: 0, + }, + 201407: { + text: t('headMystery201407Text'), + notes: t('headMystery201407Notes'), + mystery: '201407', + value: 0, + }, + 201408: { + text: t('headMystery201408Text'), + notes: t('headMystery201408Notes'), + mystery: '201408', + value: 0, + }, + 201411: { + text: t('headMystery201411Text'), + notes: t('headMystery201411Notes'), + mystery: '201411', + value: 0, + }, + 201412: { + text: t('headMystery201412Text'), + notes: t('headMystery201412Notes'), + mystery: '201412', + value: 0, + }, + 201501: { + text: t('headMystery201501Text'), + notes: t('headMystery201501Notes'), + mystery: '201501', + value: 0, + }, + 201505: { + text: t('headMystery201505Text'), + notes: t('headMystery201505Notes'), + mystery: '201505', + value: 0, + }, + 201508: { + text: t('headMystery201508Text'), + notes: t('headMystery201508Notes'), + mystery: '201508', + value: 0, + }, + 201509: { + text: t('headMystery201509Text'), + notes: t('headMystery201509Notes'), + mystery: '201509', + value: 0, + }, + 201511: { + text: t('headMystery201511Text'), + notes: t('headMystery201511Notes'), + mystery: '201511', + value: 0, + }, + 301404: { + text: t('headMystery301404Text'), + notes: t('headMystery301404Notes'), + mystery: '301404', + value: 0, + }, + 301405: { + text: t('headMystery301405Text'), + notes: t('headMystery301405Notes'), + mystery: '301405', + value: 0, + }, +}; + +let headAccessory = { + 201403: { + text: t('headAccessoryMystery201403Text'), + notes: t('headAccessoryMystery201403Notes'), + mystery: '201403', + value: 0, + }, + 201404: { + text: t('headAccessoryMystery201404Text'), + notes: t('headAccessoryMystery201404Notes'), + mystery: '201404', + value: 0, + }, + 201409: { + text: t('headAccessoryMystery201409Text'), + notes: t('headAccessoryMystery201409Notes'), + mystery: '201409', + value: 0, + }, + 201502: { + text: t('headAccessoryMystery201502Text'), + notes: t('headAccessoryMystery201502Notes'), + mystery: '201502', + value: 0, + }, + 201510: { + text: t('headAccessoryMystery201510Text'), + notes: t('headAccessoryMystery201510Notes'), + mystery: '201510', + value: 0, + }, + 301405: { + text: t('headAccessoryMystery301405Text'), + notes: t('headAccessoryMystery301405Notes'), + mystery: '301405', + value: 0, + }, +}; + +let shield = { + 301405: { + text: t('shieldMystery301405Text'), + notes: t('shieldMystery301405Notes'), + mystery: '301405', + value: 0, + }, +}; + +let weapon = { + 201411: { + text: t('weaponMystery201411Text'), + notes: t('weaponMystery201411Notes'), + mystery: '201411', + value: 0, + }, + 201502: { + text: t('weaponMystery201502Text'), + notes: t('weaponMystery201502Notes'), + mystery: '201502', + value: 0, + }, + 201505: { + text: t('weaponMystery201505Text'), + notes: t('weaponMystery201505Notes'), + mystery: '201505', + value: 0, + }, + 301404: { + text: t('weaponMystery301404Text'), + notes: t('weaponMystery301404Notes'), + mystery: '301404', + value: 0, + }, +}; + +let mysterySet = { + armor, + back, + eyewear, + head, + headAccessory, + shield, + weapon, +}; + +export default mysterySet; diff --git a/common/script/content/gear/sets/rogue.js b/common/script/content/gear/sets/rogue.js new file mode 100644 index 0000000000..43d6c7cdaa --- /dev/null +++ b/common/script/content/gear/sets/rogue.js @@ -0,0 +1,170 @@ +import t from '../../translation'; + +let armor = { + 1: { + text: t('armorRogue1Text'), + notes: t('armorRogue1Notes', { per: 6 }), + per: 6, + value: 30, + }, + 2: { + text: t('armorRogue2Text'), + notes: t('armorRogue2Notes', { per: 9 }), + per: 9, + value: 45, + }, + 3: { + text: t('armorRogue3Text'), + notes: t('armorRogue3Notes', { per: 12 }), + per: 12, + value: 65, + }, + 4: { + text: t('armorRogue4Text'), + notes: t('armorRogue4Notes', { per: 15 }), + per: 15, + value: 90, + }, + 5: { + text: t('armorRogue5Text'), + notes: t('armorRogue5Notes', { per: 18 }), + per: 18, + value: 120, + last: true, + }, +}; + +let head = { + 1: { + text: t('headRogue1Text'), + notes: t('headRogue1Notes', { per: 2 }), + per: 2, + value: 15, + }, + 2: { + text: t('headRogue2Text'), + notes: t('headRogue2Notes', { per: 4 }), + per: 4, + value: 25, + }, + 3: { + text: t('headRogue3Text'), + notes: t('headRogue3Notes', { per: 6 }), + per: 6, + value: 40, + }, + 4: { + text: t('headRogue4Text'), + notes: t('headRogue4Notes', { per: 9 }), + per: 9, + value: 60, + }, + 5: { + text: t('headRogue5Text'), + notes: t('headRogue5Notes', { per: 12 }), + per: 12, + value: 80, + last: true, + }, +}; + +let weapon = { + 0: { + text: t('weaponRogue0Text'), + notes: t('weaponRogue0Notes'), + str: 0, + value: 0, + }, + 1: { + text: t('weaponRogue1Text'), + notes: t('weaponRogue1Notes', { str: 2 }), + str: 2, + value: 20, + }, + 2: { + text: t('weaponRogue2Text'), + notes: t('weaponRogue2Notes', { str: 3 }), + str: 3, + value: 35, + }, + 3: { + text: t('weaponRogue3Text'), + notes: t('weaponRogue3Notes', { str: 4 }), + str: 4, + value: 50, + }, + 4: { + text: t('weaponRogue4Text'), + notes: t('weaponRogue4Notes', { str: 6 }), + str: 6, + value: 70, + }, + 5: { + text: t('weaponRogue5Text'), + notes: t('weaponRogue5Notes', { str: 8 }), + str: 8, + value: 90, + }, + 6: { + text: t('weaponRogue6Text'), + notes: t('weaponRogue6Notes', { str: 10 }), + str: 10, + value: 120, + last: true, + }, +}; + +let shield = { + 0: { + text: t('weaponRogue0Text'), + notes: t('weaponRogue0Notes'), + str: 0, + value: 0, + }, + 1: { + text: t('weaponRogue1Text'), + notes: t('weaponRogue1Notes', { str: 2 }), + str: 2, + value: 20, + }, + 2: { + text: t('weaponRogue2Text'), + notes: t('weaponRogue2Notes', { str: 3 }), + str: 3, + value: 35, + }, + 3: { + text: t('weaponRogue3Text'), + notes: t('weaponRogue3Notes', { str: 4 }), + str: 4, + value: 50, + }, + 4: { + text: t('weaponRogue4Text'), + notes: t('weaponRogue4Notes', { str: 6 }), + str: 6, + value: 70, + }, + 5: { + text: t('weaponRogue5Text'), + notes: t('weaponRogue5Notes', { str: 8 }), + str: 8, + value: 90, + }, + 6: { + text: t('weaponRogue6Text'), + notes: t('weaponRogue6Notes', { str: 10 }), + str: 10, + value: 120, + last: true, + }, +}; + +let rogueSet = { + armor, + head, + shield, + weapon, +}; + +export default rogueSet; diff --git a/common/script/content/gear/sets/special/index.js b/common/script/content/gear/sets/special/index.js new file mode 100644 index 0000000000..c87e4d435d --- /dev/null +++ b/common/script/content/gear/sets/special/index.js @@ -0,0 +1,1348 @@ +import { + EVENTS, +} from '../../../constants'; +import { ownsItem } from '../../gear-helper'; +import backerGear from './special-backer'; +import contributorGear from './special-contributor'; +import wonderconGear from './special-wondercon'; +import t from '../../../translation'; + +let armor = { + 0: backerGear.armorSpecial0, + 1: contributorGear.armorSpecial1, + 2: backerGear.armorSpecial2, + finnedOceanicArmor: { + text: t('armorSpecialFinnedOceanicArmorText'), + notes: t('armorSpecialFinnedOceanicArmorNotes', { str: 15 }), + str: 15, + value: 130, + canOwn: ownsItem('armor_special_finnedOceanicArmor'), + }, + yeti: { + event: EVENTS.winter, + specialClass: 'warrior', + text: t('armorSpecialYetiText'), + notes: t('armorSpecialYetiNotes', { con: 9 }), + con: 9, + value: 90, + }, + ski: { + event: EVENTS.winter, + specialClass: 'rogue', + text: t('armorSpecialSkiText'), + notes: t('armorSpecialSkiNotes', { per: 15 }), + per: 15, + value: 90, + }, + candycane: { + event: EVENTS.winter, + specialClass: 'wizard', + text: t('armorSpecialCandycaneText'), + notes: t('armorSpecialCandycaneNotes', { int: 9 }), + int: 9, + value: 90, + }, + snowflake: { + event: EVENTS.winter, + specialClass: 'healer', + text: t('armorSpecialSnowflakeText'), + notes: t('armorSpecialSnowflakeNotes', { con: 15 }), + con: 15, + value: 90, + }, + birthday: { + event: EVENTS.birthday, + text: t('armorSpecialBirthdayText'), + notes: t('armorSpecialBirthdayNotes'), value: 0 }, + springRogue: { + event: EVENTS.spring, + specialClass: 'rogue', + text: t('armorSpecialSpringRogueText'), + notes: t('armorSpecialSpringRogueNotes', { per: 15 }), + value: 90, + per: 15, + }, + springWarrior: { + event: EVENTS.spring, + specialClass: 'warrior', + text: t('armorSpecialSpringWarriorText'), + notes: t('armorSpecialSpringWarriorNotes', { con: 9 }), + value: 90, + con: 9, + }, + springMage: { + event: EVENTS.spring, + specialClass: 'wizard', + text: t('armorSpecialSpringMageText'), + notes: t('armorSpecialSpringMageNotes', { int: 9 }), + value: 90, + int: 9, + }, + springHealer: { + event: EVENTS.spring, + specialClass: 'healer', + text: t('armorSpecialSpringHealerText'), + notes: t('armorSpecialSpringHealerNotes', { con: 15 }), + value: 90, + con: 15, + }, + summerRogue: { + event: EVENTS.summer, + specialClass: 'rogue', + text: t('armorSpecialSummerRogueText'), + notes: t('armorSpecialSummerRogueNotes', { per: 15 }), + value: 90, + per: 15, + }, + summerWarrior: { + event: EVENTS.summer, + specialClass: 'warrior', + text: t('armorSpecialSummerWarriorText'), + notes: t('armorSpecialSummerWarriorNotes', { con: 9 }), + value: 90, + con: 9, + }, + summerMage: { + event: EVENTS.summer, + specialClass: 'wizard', + text: t('armorSpecialSummerMageText'), + notes: t('armorSpecialSummerMageNotes', { int: 9 }), + value: 90, + int: 9, + }, + summerHealer: { + event: EVENTS.summer, + specialClass: 'healer', + text: t('armorSpecialSummerHealerText'), + notes: t('armorSpecialSummerHealerNotes', { con: 15 }), + value: 90, + con: 15, + }, + fallRogue: { + event: EVENTS.fall, + specialClass: 'rogue', + text: t('armorSpecialFallRogueText'), + notes: t('armorSpecialFallRogueNotes', { per: 15 }), + value: 90, + per: 15, + canBuy: () => { + return true; + }, + }, + fallWarrior: { + event: EVENTS.fall, + specialClass: 'warrior', + text: t('armorSpecialFallWarriorText'), + notes: t('armorSpecialFallWarriorNotes', { con: 9 }), + value: 90, + con: 9, + canBuy: () => { + return true; + }, + }, + fallMage: { + event: EVENTS.fall, + specialClass: 'wizard', + text: t('armorSpecialFallMageText'), + notes: t('armorSpecialFallMageNotes', { int: 9 }), + value: 90, + int: 9, + canBuy: () => { + return true; + }, + }, + fallHealer: { + event: EVENTS.fall, + specialClass: 'healer', + text: t('armorSpecialFallHealerText'), + notes: t('armorSpecialFallHealerNotes', { con: 15 }), + value: 90, + con: 15, + canBuy: () => { + return true; + }, + }, + winter2015Rogue: { + event: EVENTS.winter2015, + specialClass: 'rogue', + text: t('armorSpecialWinter2015RogueText'), + notes: t('armorSpecialWinter2015RogueNotes', { per: 15 }), + value: 90, + per: 15, + }, + winter2015Warrior: { + event: EVENTS.winter2015, + specialClass: 'warrior', + text: t('armorSpecialWinter2015WarriorText'), + notes: t('armorSpecialWinter2015WarriorNotes', { con: 9 }), + value: 90, + con: 9, + }, + winter2015Mage: { + event: EVENTS.winter2015, + specialClass: 'wizard', + text: t('armorSpecialWinter2015MageText'), + notes: t('armorSpecialWinter2015MageNotes', { int: 9 }), + value: 90, + int: 9, + }, + winter2015Healer: { + event: EVENTS.winter2015, + specialClass: 'healer', + text: t('armorSpecialWinter2015HealerText'), + notes: t('armorSpecialWinter2015HealerNotes', { con: 15 }), + value: 90, + con: 15, + }, + birthday2015: { + text: t('armorSpecialBirthday2015Text'), + notes: t('armorSpecialBirthday2015Notes'), + value: 0, + canOwn: ownsItem('armor_special_birthday2015'), + }, + spring2015Rogue: { + event: EVENTS.spring2015, + specialClass: 'rogue', + text: t('armorSpecialSpring2015RogueText'), + notes: t('armorSpecialSpring2015RogueNotes', { per: 15 }), + value: 90, + per: 15, + }, + spring2015Warrior: { + event: EVENTS.spring2015, + specialClass: 'warrior', + text: t('armorSpecialSpring2015WarriorText'), + notes: t('armorSpecialSpring2015WarriorNotes', { con: 9 }), + value: 90, + con: 9, + }, + spring2015Mage: { + event: EVENTS.spring2015, + specialClass: 'wizard', + text: t('armorSpecialSpring2015MageText'), + notes: t('armorSpecialSpring2015MageNotes', { int: 9 }), + value: 90, + int: 9, + }, + spring2015Healer: { + event: EVENTS.spring2015, + specialClass: 'healer', + text: t('armorSpecialSpring2015HealerText'), + notes: t('armorSpecialSpring2015HealerNotes', { con: 15 }), + value: 90, + con: 15, + }, + summer2015Rogue: { + event: EVENTS.summer2015, + specialClass: 'rogue', + text: t('armorSpecialSummer2015RogueText'), + notes: t('armorSpecialSummer2015RogueNotes', { per: 15 }), + value: 90, + per: 15, + }, + summer2015Warrior: { + event: EVENTS.summer2015, + specialClass: 'warrior', + text: t('armorSpecialSummer2015WarriorText'), + notes: t('armorSpecialSummer2015WarriorNotes', { con: 9 }), + value: 90, + con: 9, + }, + summer2015Mage: { + event: EVENTS.summer2015, + specialClass: 'wizard', + text: t('armorSpecialSummer2015MageText'), + notes: t('armorSpecialSummer2015MageNotes', { int: 9 }), + value: 90, + int: 9, + }, + summer2015Healer: { + event: EVENTS.summer2015, + specialClass: 'healer', + text: t('armorSpecialSummer2015HealerText'), + notes: t('armorSpecialSummer2015HealerNotes', { con: 15 }), + value: 90, + con: 15, + }, + fall2015Rogue: { + event: EVENTS.fall2015, + specialClass: 'rogue', + text: t('armorSpecialFall2015RogueText'), + notes: t('armorSpecialFall2015RogueNotes', { per: 15 }), + value: 90, + per: 15, + }, + fall2015Warrior: { + event: EVENTS.fall2015, + specialClass: 'warrior', + text: t('armorSpecialFall2015WarriorText'), + notes: t('armorSpecialFall2015WarriorNotes', { con: 9 }), + value: 90, + con: 9, + }, + fall2015Mage: { + event: EVENTS.fall2015, + specialClass: 'wizard', + text: t('armorSpecialFall2015MageText'), + notes: t('armorSpecialFall2015MageNotes', { int: 9 }), + value: 90, + int: 9, + }, + fall2015Healer: { + event: EVENTS.fall2015, + specialClass: 'healer', + text: t('armorSpecialFall2015HealerText'), + notes: t('armorSpecialFall2015HealerNotes', { con: 15 }), + value: 90, + con: 15, + }, + gaymerx: { + event: EVENTS.gaymerx, + text: t('armorSpecialGaymerxText'), + notes: t('armorSpecialGaymerxNotes'), + value: 0, + }, +}; + +let back = { + wondercon_red: wonderconGear.backSpecialWonderconRed, // eslint-disable-line camelcase + wondercon_black: wonderconGear.backSpecialWonderconBlack, // eslint-disable-line camelcase +}; + +let body = { + wondercon_red: wonderconGear.bodySpecialWonderconRed, // eslint-disable-line camelcase + wondercon_gold: wonderconGear.bodySpecialWonderconGold, // eslint-disable-line camelcase + wondercon_black: wonderconGear.bodySpecialWonderconBlack, // eslint-disable-line camelcase + summerHealer: { + event: EVENTS.summer, + specialClass: 'healer', + text: t('bodySpecialSummerHealerText'), + notes: t('bodySpecialSummerHealerNotes'), + value: 20, + }, + summerMage: { + event: EVENTS.summer, + specialClass: 'wizard', + text: t('bodySpecialSummerMageText'), + notes: t('bodySpecialSummerMageNotes'), + value: 20, + }, + summer2015Healer: { + event: EVENTS.summer2015, + specialClass: 'healer', + text: t('bodySpecialSummer2015HealerText'), + notes: t('bodySpecialSummer2015HealerNotes'), + value: 20, + }, + summer2015Mage: { + event: EVENTS.summer2015, + specialClass: 'wizard', + text: t('bodySpecialSummer2015MageText'), + notes: t('bodySpecialSummer2015MageNotes'), + value: 20, + }, + summer2015Rogue: { + event: EVENTS.summer2015, + specialClass: 'rogue', + text: t('bodySpecialSummer2015RogueText'), + notes: t('bodySpecialSummer2015RogueNotes'), + value: 20, + }, + summer2015Warrior: { + event: EVENTS.summer2015, + specialClass: 'warrior', + text: t('bodySpecialSummer2015WarriorText'), + notes: t('bodySpecialSummer2015WarriorNotes'), + value: 20, + }, +}; + +let eyewear = { + wondercon_red: wonderconGear.eyewearSpecialWonderconRed, // eslint-disable-line camelcase + wondercon_black: wonderconGear.eyewearSpecialWonderconBlack, // eslint-disable-line camelcase + summerRogue: { + event: EVENTS.summer, + specialClass: 'rogue', + text: t('eyewearSpecialSummerRogueText'), + notes: t('eyewearSpecialSummerRogueNotes'), + value: 20, + }, + summerWarrior: { + event: EVENTS.summer, + specialClass: 'warrior', + text: t('eyewearSpecialSummerWarriorText'), + notes: t('eyewearSpecialSummerWarriorNotes'), + value: 20, + }, +}; + +let head = { + 0: backerGear.headSpecial0, + 1: contributorGear.headSpecial1, + 2: backerGear.headSpecial2, + fireCoralCirclet: { + text: t('headSpecialFireCoralCircletText'), + notes: t('headSpecialFireCoralCircletNotes', { per: 15 }), + per: 15, + value: 130, + canOwn: ownsItem('head_special_fireCoralCirclet'), + }, + nye: { + event: EVENTS.winter, + text: t('headSpecialNyeText'), + notes: t('headSpecialNyeNotes'), + value: 0, + }, + yeti: { + event: EVENTS.winter, + specialClass: 'warrior', + text: t('headSpecialYetiText'), + notes: t('headSpecialYetiNotes', { str: 9 }), + str: 9, + value: 60, + }, + ski: { + event: EVENTS.winter, + specialClass: 'rogue', + text: t('headSpecialSkiText'), + notes: t('headSpecialSkiNotes', { per: 9 }), + per: 9, + value: 60, + }, + candycane: { + event: EVENTS.winter, + specialClass: 'wizard', + text: t('headSpecialCandycaneText'), + notes: t('headSpecialCandycaneNotes', { per: 7 }), + per: 7, + value: 60, + }, + snowflake: { + event: EVENTS.winter, + specialClass: 'healer', + text: t('headSpecialSnowflakeText'), + notes: t('headSpecialSnowflakeNotes', { int: 7 }), + int: 7, + value: 60, + }, + springRogue: { + event: EVENTS.spring, + specialClass: 'rogue', + text: t('headSpecialSpringRogueText'), + notes: t('headSpecialSpringRogueNotes', { per: 9 }), + value: 60, + per: 9, + }, + springWarrior: { + event: EVENTS.spring, + specialClass: 'warrior', + text: t('headSpecialSpringWarriorText'), + notes: t('headSpecialSpringWarriorNotes', { str: 9 }), + value: 60, + str: 9, + }, + springMage: { + event: EVENTS.spring, + specialClass: 'wizard', + text: t('headSpecialSpringMageText'), + notes: t('headSpecialSpringMageNotes', { per: 7 }), + value: 60, + per: 7, + }, + springHealer: { + event: EVENTS.spring, + specialClass: 'healer', + text: t('headSpecialSpringHealerText'), + notes: t('headSpecialSpringHealerNotes', { int: 7 }), + value: 60, + int: 7, + }, + summerRogue: { + event: EVENTS.summer, + specialClass: 'rogue', + text: t('headSpecialSummerRogueText'), + notes: t('headSpecialSummerRogueNotes', { per: 9 }), + value: 60, + per: 9, + }, + summerWarrior: { + event: EVENTS.summer, + specialClass: 'warrior', + text: t('headSpecialSummerWarriorText'), + notes: t('headSpecialSummerWarriorNotes', { str: 9 }), + value: 60, + str: 9, + }, + summerMage: { + event: EVENTS.summer, + specialClass: 'wizard', + text: t('headSpecialSummerMageText'), + notes: t('headSpecialSummerMageNotes', { per: 7 }), + value: 60, + per: 7, + }, + summerHealer: { + event: EVENTS.summer, + specialClass: 'healer', + text: t('headSpecialSummerHealerText'), + notes: t('headSpecialSummerHealerNotes', { int: 7 }), + value: 60, + int: 7, + }, + fallRogue: { + event: EVENTS.fall, + specialClass: 'rogue', + text: t('headSpecialFallRogueText'), + notes: t('headSpecialFallRogueNotes', { per: 9 }), + value: 60, + per: 9, + canBuy: () => { + return true; + }, + }, + fallWarrior: { + event: EVENTS.fall, + specialClass: 'warrior', + text: t('headSpecialFallWarriorText'), + notes: t('headSpecialFallWarriorNotes', { str: 9 }), + value: 60, + str: 9, + canBuy: () => { + return true; + }, + }, + fallMage: { + event: EVENTS.fall, + specialClass: 'wizard', + text: t('headSpecialFallMageText'), + notes: t('headSpecialFallMageNotes', { per: 7 }), + value: 60, + per: 7, + canBuy: () => { + return true; + }, + }, + fallHealer: { + event: EVENTS.fall, + specialClass: 'healer', + text: t('headSpecialFallHealerText'), + notes: t('headSpecialFallHealerNotes', { int: 7 }), + value: 60, + int: 7, + canBuy: () => { + return true; + }, + }, + winter2015Rogue: { + event: EVENTS.winter2015, + specialClass: 'rogue', + text: t('headSpecialWinter2015RogueText'), + notes: t('headSpecialWinter2015RogueNotes', { per: 9 }), + value: 60, + per: 9, + }, + winter2015Warrior: { + event: EVENTS.winter2015, + specialClass: 'warrior', + text: t('headSpecialWinter2015WarriorText'), + notes: t('headSpecialWinter2015WarriorNotes', { str: 9 }), + value: 60, + str: 9, + }, + winter2015Mage: { + event: EVENTS.winter2015, + specialClass: 'wizard', + text: t('headSpecialWinter2015MageText'), + notes: t('headSpecialWinter2015MageNotes', { per: 7 }), + value: 60, + per: 7, + }, + winter2015Healer: { + event: EVENTS.winter2015, + specialClass: 'healer', + text: t('headSpecialWinter2015HealerText'), + notes: t('headSpecialWinter2015HealerNotes', { int: 7 }), + value: 60, + int: 7, + }, + nye2014: { + text: t('headSpecialNye2014Text'), + notes: t('headSpecialNye2014Notes'), + value: 0, + canOwn: ownsItem('head_special_nye2014'), + }, + spring2015Rogue: { + event: EVENTS.spring2015, + specialClass: 'rogue', + text: t('headSpecialSpring2015RogueText'), + notes: t('headSpecialSpring2015RogueNotes', { per: 9 }), + value: 60, + per: 9, + }, + spring2015Warrior: { + event: EVENTS.spring2015, + specialClass: 'warrior', + text: t('headSpecialSpring2015WarriorText'), + notes: t('headSpecialSpring2015WarriorNotes', { str: 9 }), + value: 60, + str: 9, + }, + spring2015Mage: { + event: EVENTS.spring2015, + specialClass: 'wizard', + text: t('headSpecialSpring2015MageText'), + notes: t('headSpecialSpring2015MageNotes', { per: 7 }), + value: 60, + per: 7, + }, + spring2015Healer: { + event: EVENTS.spring2015, + specialClass: 'healer', + text: t('headSpecialSpring2015HealerText'), + notes: t('headSpecialSpring2015HealerNotes', { int: 7 }), + value: 60, + int: 7, + }, + summer2015Rogue: { + event: EVENTS.summer2015, + specialClass: 'rogue', + text: t('headSpecialSummer2015RogueText'), + notes: t('headSpecialSummer2015RogueNotes', { per: 9 }), + value: 60, + per: 9, + }, + summer2015Warrior: { + event: EVENTS.summer2015, + specialClass: 'warrior', + text: t('headSpecialSummer2015WarriorText'), + notes: t('headSpecialSummer2015WarriorNotes', { str: 9 }), + value: 60, + str: 9, + }, + summer2015Mage: { + event: EVENTS.summer2015, + specialClass: 'wizard', + text: t('headSpecialSummer2015MageText'), + notes: t('headSpecialSummer2015MageNotes', { per: 7 }), + value: 60, + per: 7, + }, + summer2015Healer: { + event: EVENTS.summer2015, + specialClass: 'healer', + text: t('headSpecialSummer2015HealerText'), + notes: t('headSpecialSummer2015HealerNotes', { int: 7 }), + value: 60, + int: 7, + }, + fall2015Rogue: { + event: EVENTS.fall2015, + specialClass: 'rogue', + text: t('headSpecialFall2015RogueText'), + notes: t('headSpecialFall2015RogueNotes', { per: 9 }), + value: 60, + per: 9, + }, + fall2015Warrior: { + event: EVENTS.fall2015, + specialClass: 'warrior', + text: t('headSpecialFall2015WarriorText'), + notes: t('headSpecialFall2015WarriorNotes', { str: 9 }), + value: 60, + str: 9, + }, + fall2015Mage: { + event: EVENTS.fall2015, + specialClass: 'wizard', + text: t('headSpecialFall2015MageText'), + notes: t('headSpecialFall2015MageNotes', { per: 7 }), + value: 60, + per: 7, + }, + fall2015Healer: { + event: EVENTS.fall2015, + specialClass: 'healer', + text: t('headSpecialFall2015HealerText'), + notes: t('headSpecialFall2015HealerNotes', { int: 7 }), + value: 60, + int: 7, + }, + gaymerx: { + event: EVENTS.gaymerx, + text: t('headSpecialGaymerxText'), + notes: t('headSpecialGaymerxNotes'), + value: 0, + }, +}; + +let headAccessory = { + springRogue: { + event: EVENTS.spring, + specialClass: 'rogue', + text: t('headAccessorySpecialSpringRogueText'), + notes: t('headAccessorySpecialSpringRogueNotes'), + value: 20, + }, + springWarrior: { + event: EVENTS.spring, + specialClass: 'warrior', + text: t('headAccessorySpecialSpringWarriorText'), + notes: t('headAccessorySpecialSpringWarriorNotes'), + value: 20, + }, + springMage: { + event: EVENTS.spring, + specialClass: 'wizard', + text: t('headAccessorySpecialSpringMageText'), + notes: t('headAccessorySpecialSpringMageNotes'), + value: 20, + }, + springHealer: { + event: EVENTS.spring, + specialClass: 'healer', + text: t('headAccessorySpecialSpringHealerText'), + notes: t('headAccessorySpecialSpringHealerNotes'), + value: 20, + }, + spring2015Rogue: { + event: EVENTS.spring2015, + specialClass: 'rogue', + text: t('headAccessorySpecialSpring2015RogueText'), + notes: t('headAccessorySpecialSpring2015RogueNotes'), + value: 20, + }, + spring2015Warrior: { + event: EVENTS.spring2015, + specialClass: 'warrior', + text: t('headAccessorySpecialSpring2015WarriorText'), + notes: t('headAccessorySpecialSpring2015WarriorNotes'), + value: 20, + }, + spring2015Mage: { + event: EVENTS.spring2015, + specialClass: 'wizard', + text: t('headAccessorySpecialSpring2015MageText'), + notes: t('headAccessorySpecialSpring2015MageNotes'), + value: 20, + }, + spring2015Healer: { + event: EVENTS.spring2015, + specialClass: 'healer', + text: t('headAccessorySpecialSpring2015HealerText'), + notes: t('headAccessorySpecialSpring2015HealerNotes'), + value: 20, + }, + bearEars: { + gearSet: 'animal', + text: t('headAccessoryBearEarsText'), + notes: t('headAccessoryBearEarsNotes'), + value: 20, + canOwn: ownsItem('headAccessory_special_bearEars'), + canBuy: () => { + return true; + }, + }, + cactusEars: { + gearSet: 'animal', + text: t('headAccessoryCactusEarsText'), + notes: t('headAccessoryCactusEarsNotes'), + value: 20, + canOwn: ownsItem('headAccessory_special_cactusEars'), + canBuy: () => { + return true; + }, + }, + foxEars: { + gearSet: 'animal', + text: t('headAccessoryFoxEarsText'), + notes: t('headAccessoryFoxEarsNotes'), + value: 20, + canOwn: ownsItem('headAccessory_special_foxEars'), + canBuy: () => { + return true; + }, + }, + lionEars: { + gearSet: 'animal', + text: t('headAccessoryLionEarsText'), + notes: t('headAccessoryLionEarsNotes'), + value: 20, + canOwn: ownsItem('headAccessory_special_lionEars'), + canBuy: () => { + return true; + }, + }, + pandaEars: { + gearSet: 'animal', + text: t('headAccessoryPandaEarsText'), + notes: t('headAccessoryPandaEarsNotes'), + value: 20, + canOwn: ownsItem('headAccessory_special_pandaEars'), + canBuy: () => { + return true; + }, + }, + pigEars: { + gearSet: 'animal', + text: t('headAccessoryPigEarsText'), + notes: t('headAccessoryPigEarsNotes'), + value: 20, + canOwn: ownsItem('headAccessory_special_pigEars'), + canBuy: () => { + return true; + }, + }, + tigerEars: { + gearSet: 'animal', + text: t('headAccessoryTigerEarsText'), + notes: t('headAccessoryTigerEarsNotes'), + value: 20, + canOwn: ownsItem('headAccessory_special_tigerEars'), + canBuy: () => { + return true; + }, + }, + wolfEars: { + gearSet: 'animal', + text: t('headAccessoryWolfEarsText'), + notes: t('headAccessoryWolfEarsNotes'), + value: 20, + canOwn: ownsItem('headAccessory_special_wolfEars'), + canBuy: () => { + return true; + }, + }, +}; + +let shield = { + 0: backerGear.shieldSpecial0, + 1: contributorGear.shieldSpecial1, + goldenknight: { + text: t('shieldSpecialGoldenknightText'), + notes: t('shieldSpecialGoldenknightNotes', { attrs: 25 }), + con: 25, + per: 25, + value: 200, + canOwn: ownsItem('shield_special_goldenknight'), + }, + moonpearlShield: { + text: t('shieldSpecialMoonpearlShieldText'), + notes: t('shieldSpecialMoonpearlShieldNotes', { con: 15 }), + con: 15, + value: 130, + canOwn: ownsItem('shield_special_moonpearlShield'), + }, + yeti: { + event: EVENTS.winter, + specialClass: 'warrior', + text: t('shieldSpecialYetiText'), + notes: t('shieldSpecialYetiNotes', { con: 7 }), + con: 7, + value: 70, + }, + ski: { + event: EVENTS.winter, + specialClass: 'rogue', + text: t('weaponSpecialSkiText'), + notes: t('weaponSpecialSkiNotes', { str: 8 }), + str: 8, + value: 90, + }, + snowflake: { + event: EVENTS.winter, + specialClass: 'healer', + text: t('shieldSpecialSnowflakeText'), + notes: t('shieldSpecialSnowflakeNotes', { con: 9 }), + con: 9, + value: 70, + }, + springRogue: { + event: EVENTS.spring, + specialClass: 'rogue', + text: t('shieldSpecialSpringRogueText'), + notes: t('shieldSpecialSpringRogueNotes', { str: 8 }), + value: 80, + str: 8, + }, + springWarrior: { + event: EVENTS.spring, + specialClass: 'warrior', + text: t('shieldSpecialSpringWarriorText'), + notes: t('shieldSpecialSpringWarriorNotes', { con: 7 }), + value: 70, + con: 7, + }, + springHealer: { + event: EVENTS.spring, + specialClass: 'healer', + text: t('shieldSpecialSpringHealerText'), + notes: t('shieldSpecialSpringHealerNotes', { con: 9 }), + value: 70, + con: 9, + }, + summerRogue: { + event: EVENTS.summer, + specialClass: 'rogue', + text: t('shieldSpecialSummerRogueText'), + notes: t('shieldSpecialSummerRogueNotes', { str: 8 }), + value: 80, + str: 8, + }, + summerWarrior: { + event: EVENTS.summer, + specialClass: 'warrior', + text: t('shieldSpecialSummerWarriorText'), + notes: t('shieldSpecialSummerWarriorNotes', { con: 7 }), + value: 70, + con: 7, + }, + summerHealer: { + event: EVENTS.summer, + specialClass: 'healer', + text: t('shieldSpecialSummerHealerText'), + notes: t('shieldSpecialSummerHealerNotes', { con: 9 }), + value: 70, + con: 9, + }, + fallRogue: { + event: EVENTS.fall, + specialClass: 'rogue', + text: t('shieldSpecialFallRogueText'), + notes: t('shieldSpecialFallRogueNotes', { str: 8 }), + value: 80, + str: 8, + canBuy: () => { + return true; + }, + }, + fallWarrior: { + event: EVENTS.fall, + specialClass: 'warrior', + text: t('shieldSpecialFallWarriorText'), + notes: t('shieldSpecialFallWarriorNotes', { con: 7 }), + value: 70, + con: 7, + canBuy: () => { + return true; + }, + }, + fallHealer: { + event: EVENTS.fall, + specialClass: 'healer', + text: t('shieldSpecialFallHealerText'), + notes: t('shieldSpecialFallHealerNotes', { con: 9 }), + value: 70, + con: 9, + canBuy: () => { + return true; + }, + }, + winter2015Rogue: { + event: EVENTS.winter2015, + specialClass: 'rogue', + text: t('shieldSpecialWinter2015RogueText'), + notes: t('shieldSpecialWinter2015RogueNotes', { str: 8 }), + value: 80, + str: 8, + }, + winter2015Warrior: { + event: EVENTS.winter2015, + specialClass: 'warrior', + text: t('shieldSpecialWinter2015WarriorText'), + notes: t('shieldSpecialWinter2015WarriorNotes', { con: 7 }), + value: 70, + con: 7, + }, + winter2015Healer: { + event: EVENTS.winter2015, + specialClass: 'healer', + text: t('shieldSpecialWinter2015HealerText'), + notes: t('shieldSpecialWinter2015HealerNotes', { con: 9 }), + value: 70, + con: 9, + }, + spring2015Rogue: { + event: EVENTS.spring2015, + specialClass: 'rogue', + text: t('shieldSpecialSpring2015RogueText'), + notes: t('shieldSpecialSpring2015RogueNotes', { str: 8 }), + value: 80, + str: 8, + }, + spring2015Warrior: { + event: EVENTS.spring2015, + specialClass: 'warrior', + text: t('shieldSpecialSpring2015WarriorText'), + notes: t('shieldSpecialSpring2015WarriorNotes', { con: 7 }), + value: 70, + con: 7, + }, + spring2015Healer: { + event: EVENTS.spring2015, + specialClass: 'healer', + text: t('shieldSpecialSpring2015HealerText'), + notes: t('shieldSpecialSpring2015HealerNotes', { con: 9 }), + value: 70, + con: 9, + }, + summer2015Rogue: { + event: EVENTS.summer2015, + specialClass: 'rogue', + text: t('shieldSpecialSummer2015RogueText'), + notes: t('shieldSpecialSummer2015RogueNotes', { str: 8 }), + value: 80, + str: 8, + }, + summer2015Warrior: { + event: EVENTS.summer2015, + specialClass: 'warrior', + text: t('shieldSpecialSummer2015WarriorText'), + notes: t('shieldSpecialSummer2015WarriorNotes', { con: 7 }), + value: 70, + con: 7, + }, + summer2015Healer: { + event: EVENTS.summer2015, + specialClass: 'healer', + text: t('shieldSpecialSummer2015HealerText'), + notes: t('shieldSpecialSummer2015HealerNotes', { con: 9 }), + value: 70, + con: 9, + }, + fall2015Rogue: { + event: EVENTS.fall2015, + specialClass: 'rogue', + text: t('shieldSpecialFall2015RogueText'), + notes: t('shieldSpecialFall2015RogueNotes', { str: 8 }), + value: 80, + str: 8, + }, + fall2015Warrior: { + event: EVENTS.fall2015, + specialClass: 'warrior', + text: t('shieldSpecialFall2015WarriorText'), + notes: t('shieldSpecialFall2015WarriorNotes', { con: 7 }), + value: 70, + con: 7, + }, + fall2015Healer: { + event: EVENTS.fall2015, + specialClass: 'healer', + text: t('shieldSpecialFall2015HealerText'), + notes: t('shieldSpecialFall2015HealerNotes', { con: 9 }), + value: 70, + con: 9, + }, +}; + +let weapon = { + 0: backerGear.weaponSpecial0, + 1: contributorGear.weaponSpecial1, + 2: backerGear.weaponSpecial2, + 3: backerGear.weaponSpecial3, + critical: contributorGear.weaponSpecialCritical, + tridentOfCrashingTides: { + text: t('weaponSpecialTridentOfCrashingTidesText'), + notes: t('weaponSpecialTridentOfCrashingTidesNotes', { int: 15 }), + int: 15, + value: 130, + canOwn: ownsItem('weapon_special_tridentOfCrashingTides'), + }, + yeti: { + event: EVENTS.winter, + specialClass: 'warrior', + text: t('weaponSpecialYetiText'), + notes: t('weaponSpecialYetiNotes', { str: 15 }), + str: 15, + value: 90, + }, + ski: { + event: EVENTS.winter, + specialClass: 'rogue', + text: t('weaponSpecialSkiText'), + notes: t('weaponSpecialSkiNotes', { str: 8 }), + str: 8, + value: 90, + }, + candycane: { + event: EVENTS.winter, + specialClass: 'wizard', + twoHanded: true, + text: t('weaponSpecialCandycaneText'), + notes: t('weaponSpecialCandycaneNotes', { int: 15, per: 7 }), + int: 15, + per: 7, + value: 160, + }, + snowflake: { + event: EVENTS.winter, + specialClass: 'healer', + text: t('weaponSpecialSnowflakeText'), + notes: t('weaponSpecialSnowflakeNotes', { int: 9 }), + int: 9, + value: 90, + }, + springRogue: { + event: EVENTS.spring, + specialClass: 'rogue', + text: t('weaponSpecialSpringRogueText'), + notes: t('weaponSpecialSpringRogueNotes', { str: 8 }), + value: 80, + str: 8, + }, + springWarrior: { + event: EVENTS.spring, + specialClass: 'warrior', + text: t('weaponSpecialSpringWarriorText'), + notes: t('weaponSpecialSpringWarriorNotes', { str: 15 }), + value: 90, + str: 15, + }, + springMage: { + event: EVENTS.spring, + specialClass: 'wizard', + twoHanded: true, + text: t('weaponSpecialSpringMageText'), + notes: t('weaponSpecialSpringMageNotes', { int: 15, per: 7 }), + value: 160, + int: 15, + per: 7, + }, + springHealer: { + event: EVENTS.spring, + specialClass: 'healer', + text: t('weaponSpecialSpringHealerText'), + notes: t('weaponSpecialSpringHealerNotes', { int: 9 }), + value: 90, + int: 9, + }, + summerRogue: { + event: EVENTS.summer, + specialClass: 'rogue', + text: t('weaponSpecialSummerRogueText'), + notes: t('weaponSpecialSummerRogueNotes', { str: 8 }), + value: 80, + str: 8, + }, + summerWarrior: { + event: EVENTS.summer, + specialClass: 'warrior', + text: t('weaponSpecialSummerWarriorText'), + notes: t('weaponSpecialSummerWarriorNotes', { str: 15 }), + value: 90, + str: 15, + }, + summerMage: { + event: EVENTS.summer, + specialClass: 'wizard', + twoHanded: true, + text: t('weaponSpecialSummerMageText'), + notes: t('weaponSpecialSummerMageNotes', { int: 15, per: 7 }), + value: 160, + int: 15, + per: 7, + }, + summerHealer: { + event: EVENTS.summer, + specialClass: 'healer', + text: t('weaponSpecialSummerHealerText'), + notes: t('weaponSpecialSummerHealerNotes', { int: 9 }), + value: 90, + int: 9, + }, + fallRogue: { + event: EVENTS.fall, + specialClass: 'rogue', + text: t('weaponSpecialFallRogueText'), + notes: t('weaponSpecialFallRogueNotes', { str: 8 }), + value: 80, + str: 8, + canBuy: () => { + return true; + }, + }, + fallWarrior: { + event: EVENTS.fall, + specialClass: 'warrior', + text: t('weaponSpecialFallWarriorText'), + notes: t('weaponSpecialFallWarriorNotes', { str: 15 }), + value: 90, + str: 15, + canBuy: () => { + return true; + }, + }, + fallMage: { + event: EVENTS.fall, + specialClass: 'wizard', + twoHanded: true, + text: t('weaponSpecialFallMageText'), + notes: t('weaponSpecialFallMageNotes', { int: 15, per: 7 }), + value: 160, + int: 15, + per: 7, + canBuy: () => { + return true; + }, + }, + fallHealer: { + event: EVENTS.fall, + specialClass: 'healer', + text: t('weaponSpecialFallHealerText'), + notes: t('weaponSpecialFallHealerNotes', { int: 9 }), + value: 90, + int: 9, + canBuy: () => { + return true; + }, + }, + winter2015Rogue: { + event: EVENTS.winter2015, + specialClass: 'rogue', + text: t('weaponSpecialWinter2015RogueText'), + notes: t('weaponSpecialWinter2015RogueNotes', { str: 8 }), + value: 80, + str: 8, + }, + winter2015Warrior: { + event: EVENTS.winter2015, + specialClass: 'warrior', + text: t('weaponSpecialWinter2015WarriorText'), + notes: t('weaponSpecialWinter2015WarriorNotes', { str: 15 }), + value: 90, + str: 15, + }, + winter2015Mage: { + event: EVENTS.winter2015, + specialClass: 'wizard', + twoHanded: true, + text: t('weaponSpecialWinter2015MageText'), + notes: t('weaponSpecialWinter2015MageNotes', { int: 15, per: 7 }), + value: 160, + int: 15, + per: 7, + }, + winter2015Healer: { + event: EVENTS.winter2015, + specialClass: 'healer', + text: t('weaponSpecialWinter2015HealerText'), + notes: t('weaponSpecialWinter2015HealerNotes', { int: 9 }), + value: 90, + int: 9, + }, + spring2015Rogue: { + event: EVENTS.spring2015, + specialClass: 'rogue', + text: t('weaponSpecialSpring2015RogueText'), + notes: t('weaponSpecialSpring2015RogueNotes', { str: 8 }), + value: 80, + str: 8, + }, + spring2015Warrior: { + event: EVENTS.spring2015, + specialClass: 'warrior', + text: t('weaponSpecialSpring2015WarriorText'), + notes: t('weaponSpecialSpring2015WarriorNotes', { str: 15 }), + value: 90, + str: 15, + }, + spring2015Mage: { + event: EVENTS.spring2015, + specialClass: 'wizard', + twoHanded: true, + text: t('weaponSpecialSpring2015MageText'), + notes: t('weaponSpecialSpring2015MageNotes', { int: 15, per: 7 }), + value: 160, + int: 15, + per: 7, + }, + spring2015Healer: { + event: EVENTS.spring2015, + specialClass: 'healer', + text: t('weaponSpecialSpring2015HealerText'), + notes: t('weaponSpecialSpring2015HealerNotes', { int: 9 }), + value: 90, + int: 9, + }, + summer2015Rogue: { + event: EVENTS.summer2015, + specialClass: 'rogue', + text: t('weaponSpecialSummer2015RogueText'), + notes: t('weaponSpecialSummer2015RogueNotes', { str: 8 }), + value: 80, + str: 8, + }, + summer2015Warrior: { + event: EVENTS.summer2015, + specialClass: 'warrior', + text: t('weaponSpecialSummer2015WarriorText'), + notes: t('weaponSpecialSummer2015WarriorNotes', { str: 15 }), + value: 90, + str: 15, + }, + summer2015Mage: { + event: EVENTS.summer2015, + specialClass: 'wizard', + twoHanded: true, + text: t('weaponSpecialSummer2015MageText'), + notes: t('weaponSpecialSummer2015MageNotes', { int: 15, per: 7 }), + value: 160, + int: 15, + per: 7, + }, + summer2015Healer: { + event: EVENTS.summer2015, + specialClass: 'healer', + text: t('weaponSpecialSummer2015HealerText'), + notes: t('weaponSpecialSummer2015HealerNotes', { int: 9 }), + value: 90, + int: 9, + }, + fall2015Rogue: { + event: EVENTS.fall2015, + specialClass: 'rogue', + text: t('weaponSpecialFall2015RogueText'), + notes: t('weaponSpecialFall2015RogueNotes', { str: 8 }), + value: 80, + str: 8, + }, + fall2015Warrior: { + event: EVENTS.fall2015, + specialClass: 'warrior', + text: t('weaponSpecialFall2015WarriorText'), + notes: t('weaponSpecialFall2015WarriorNotes', { str: 15 }), + value: 90, + str: 15, + }, + fall2015Mage: { + event: EVENTS.fall2015, + specialClass: 'wizard', + twoHanded: true, + text: t('weaponSpecialFall2015MageText'), + notes: t('weaponSpecialFall2015MageNotes', { int: 15, per: 7 }), + value: 160, + int: 15, + per: 7, + }, + fall2015Healer: { + event: EVENTS.fall2015, + specialClass: 'healer', + text: t('weaponSpecialFall2015HealerText'), + notes: t('weaponSpecialFall2015HealerNotes', { int: 9 }), + value: 90, + int: 9, + }, +}; + +let specialSet = { + armor, + back, + body, + eyewear, + head, + headAccessory, + shield, + weapon, +}; + +export default specialSet; diff --git a/common/script/content/gear/sets/special/special-backer.js b/common/script/content/gear/sets/special/special-backer.js new file mode 100644 index 0000000000..3e59f4c035 --- /dev/null +++ b/common/script/content/gear/sets/special/special-backer.js @@ -0,0 +1,93 @@ +import { ownsItem } from '../../gear-helper'; +import t from '../../../translation'; + +let isBackerOfLevel = (tierRequirement, ownedItem) => { + return (user) => { + let backer = user.backer; + let tier = Number(backer && backer.tier); + + return tier >= tierRequirement || ownsItem(ownedItem)(user); + }; +}; + +let armorSpecial0 = { + text: t('armorSpecial0Text'), + notes: t('armorSpecial0Notes', { con: 20 }), + con: 20, + value: 150, + canOwn: isBackerOfLevel(45, 'armor_special_0'), +}; + +let armorSpecial2 = { + text: t('armorSpecial2Text'), + notes: t('armorSpecial2Notes', { attrs: 25 }), + int: 25, + con: 25, + value: 200, + canOwn: isBackerOfLevel(300, 'armor_special_2'), +}; + +let headSpecial0 = { + text: t('headSpecial0Text'), + notes: t('headSpecial0Notes', { int: 20 }), + int: 20, + value: 150, + canOwn: isBackerOfLevel(45, 'head_special_0'), +}; + +let headSpecial2 = { + text: t('headSpecial2Text'), + notes: t('headSpecial2Notes', { attrs: 25 }), + int: 25, + str: 25, + value: 200, + canOwn: isBackerOfLevel(300, 'head_special_2'), +}; + +let shieldSpecial0 = { + text: t('shieldSpecial0Text'), + notes: t('shieldSpecial0Notes', { per: 20 }), + per: 20, + value: 150, + canOwn: isBackerOfLevel(45, 'shield_special_0'), +}; + +let weaponSpecial0 = { + text: t('weaponSpecial0Text'), + notes: t('weaponSpecial0Notes', { str: 20 }), + str: 20, + value: 150, + canOwn: isBackerOfLevel(70, 'weapon_special_0'), +}; + +let weaponSpecial2 = { + text: t('weaponSpecial2Text'), + notes: t('weaponSpecial2Notes', { attrs: 25 }), + str: 25, + per: 25, + value: 200, + canOwn: isBackerOfLevel(300, 'weapon_special_2'), +}; + +let weaponSpecial3 = { + text: t('weaponSpecial3Text'), + notes: t('weaponSpecial3Notes', { attrs: 17 }), + str: 17, + int: 17, + con: 17, + value: 200, + canOwn: isBackerOfLevel(300, 'weapon_special_3'), +}; + +let backerSet = { + armorSpecial0, + armorSpecial2, + headSpecial0, + headSpecial2, + shieldSpecial0, + weaponSpecial0, + weaponSpecial2, + weaponSpecial3, +}; + +export default backerSet; diff --git a/common/script/content/gear/sets/special/special-contributor.js b/common/script/content/gear/sets/special/special-contributor.js new file mode 100644 index 0000000000..8ef95ec38e --- /dev/null +++ b/common/script/content/gear/sets/special/special-contributor.js @@ -0,0 +1,79 @@ +import { ownsItem } from '../../gear-helper'; +import t from '../../../translation'; + +let isContributorOfLevel = (tierRequirement, ownedItem) => { + return (user) => { + let contributor = user.contributor; + let tier = contributor && contributor.level; + + return Number(tier) >= tierRequirement || ownsItem(ownedItem)(user); + }; +}; + +let armorSpecial1 = { + text: t('armorSpecial1Text'), + notes: t('armorSpecial1Notes', { attrs: 6 }), + con: 6, + str: 6, + per: 6, + int: 6, + value: 170, + canOwn: isContributorOfLevel(2, 'armor_special_1'), +}; + +let headSpecial1 = { + text: t('headSpecial1Text'), + notes: t('headSpecial1Notes', { attrs: 6 }), + con: 6, + str: 6, + per: 6, + int: 6, + value: 170, + canOwn: isContributorOfLevel(3, 'head_special_1'), +}; + +let shieldSpecial1 = { + text: t('shieldSpecial1Text'), + notes: t('shieldSpecial1Notes', { attrs: 6 }), + con: 6, + str: 6, + per: 6, + int: 6, + value: 170, + canOwn: isContributorOfLevel(5, 'shield_special_1'), +}; + +let weaponSpecial1 = { + text: t('weaponSpecial1Text'), + notes: t('weaponSpecial1Notes', { attrs: 6 }), + str: 6, + per: 6, + con: 6, + int: 6, + value: 170, + canOwn: isContributorOfLevel(4, 'weapon_special_1'), +}; + +let weaponSpecialCritical = { + text: t('weaponSpecialCriticalText'), + notes: t('weaponSpecialCriticalNotes', { attrs: 40 }), + str: 40, + per: 40, + value: 200, + canOwn: (user) => { + let hasCriticalFlag = user.contributor && user.contributor.critical; + let alreadyHasItem = ownsItem('weapon_special_critical')(user); + + return hasCriticalFlag || alreadyHasItem; + }, +}; + +let contributorSet = { + armorSpecial1, + headSpecial1, + shieldSpecial1, + weaponSpecial1, + weaponSpecialCritical, +}; + +export default contributorSet; diff --git a/common/script/content/gear/sets/special/special-wondercon.js b/common/script/content/gear/sets/special/special-wondercon.js new file mode 100644 index 0000000000..b321251bf1 --- /dev/null +++ b/common/script/content/gear/sets/special/special-wondercon.js @@ -0,0 +1,62 @@ +import t from '../../../translation'; + +let backSpecialWonderconRed = { + text: t('backSpecialWonderconRedText'), + notes: t('backSpecialWonderconRedNotes'), + value: 0, + mystery: 'wondercon', +}; + +let backSpecialWonderconBlack = { + text: t('backSpecialWonderconBlackText'), + notes: t('backSpecialWonderconBlackNotes'), + value: 0, + mystery: 'wondercon', +}; + +let bodySpecialWonderconRed = { + text: t('bodySpecialWonderconRedText'), + notes: t('bodySpecialWonderconRedNotes'), + value: 0, + mystery: 'wondercon', +}; + +let bodySpecialWonderconGold = { + text: t('bodySpecialWonderconGoldText'), + notes: t('bodySpecialWonderconGoldNotes'), + value: 0, + mystery: 'wondercon', +}; + +let bodySpecialWonderconBlack = { + text: t('bodySpecialWonderconBlackText'), + notes: t('bodySpecialWonderconBlackNotes'), + value: 0, + mystery: 'wondercon', +}; + +let eyewearSpecialWonderconRed = { + text: t('eyewearSpecialWonderconRedText'), + notes: t('eyewearSpecialWonderconRedNotes'), + value: 0, + mystery: 'wondercon', +}; + +let eyewearSpecialWonderconBlack = { + text: t('eyewearSpecialWonderconBlackText'), + notes: t('eyewearSpecialWonderconBlackNotes'), + value: 0, + mystery: 'wondercon', +}; + +let wonderconSet = { + backSpecialWonderconRed, + backSpecialWonderconBlack, + bodySpecialWonderconRed, + bodySpecialWonderconGold, + bodySpecialWonderconBlack, + eyewearSpecialWonderconRed, + eyewearSpecialWonderconBlack, +}; + +export default wonderconSet; diff --git a/common/script/content/gear/sets/warrior.js b/common/script/content/gear/sets/warrior.js new file mode 100644 index 0000000000..4e4f3d2a8e --- /dev/null +++ b/common/script/content/gear/sets/warrior.js @@ -0,0 +1,155 @@ +import t from '../../translation'; + +let armor = { + 1: { + text: t('armorWarrior1Text'), + notes: t('armorWarrior1Notes', { con: 3 }), + con: 3, + value: 30, + }, + 2: { + text: t('armorWarrior2Text'), + notes: t('armorWarrior2Notes', { con: 5 }), + con: 5, + value: 45, + }, + 3: { + text: t('armorWarrior3Text'), + notes: t('armorWarrior3Notes', { con: 7 }), + con: 7, + value: 65, + }, + 4: { + text: t('armorWarrior4Text'), + notes: t('armorWarrior4Notes', { con: 9 }), + con: 9, + value: 90, + }, + 5: { + text: t('armorWarrior5Text'), + notes: t('armorWarrior5Notes', { con: 11 }), + con: 11, + value: 120, + last: true, + }, +}; + +let head = { + 1: { + text: t('headWarrior1Text'), + notes: t('headWarrior1Notes', { str: 2 }), + str: 2, + value: 15, + }, + 2: { + text: t('headWarrior2Text'), + notes: t('headWarrior2Notes', { str: 4 }), + str: 4, + value: 25, + }, + 3: { + text: t('headWarrior3Text'), + notes: t('headWarrior3Notes', { str: 6 }), + str: 6, + value: 40, + }, + 4: { + text: t('headWarrior4Text'), + notes: t('headWarrior4Notes', { str: 9 }), + str: 9, + value: 60, + }, + 5: { + text: t('headWarrior5Text'), + notes: t('headWarrior5Notes', { str: 12 }), + str: 12, + value: 80, + last: true, + }, +}; + +let shield = { + 1: { + text: t('shieldWarrior1Text'), + notes: t('shieldWarrior1Notes', { con: 2 }), + con: 2, + value: 20, + }, + 2: { + text: t('shieldWarrior2Text'), + notes: t('shieldWarrior2Notes', { con: 3 }), + con: 3, + value: 35, + }, + 3: { + text: t('shieldWarrior3Text'), + notes: t('shieldWarrior3Notes', { con: 5 }), + con: 5, + value: 50, + }, + 4: { + text: t('shieldWarrior4Text'), + notes: t('shieldWarrior4Notes', { con: 7 }), + con: 7, + value: 70, + }, + 5: { + text: t('shieldWarrior5Text'), + notes: t('shieldWarrior5Notes', { con: 9 }), + con: 9, + value: 90, + last: true, + }, +}; + +let weapon = { + 0: { + text: t('weaponWarrior0Text'), + notes: t('weaponWarrior0Notes'), value: 1 }, + 1: { + text: t('weaponWarrior1Text'), + notes: t('weaponWarrior1Notes', { str: 3 }), + str: 3, + value: 20, + }, + 2: { + text: t('weaponWarrior2Text'), + notes: t('weaponWarrior2Notes', { str: 6 }), + str: 6, + value: 30, + }, + 3: { + text: t('weaponWarrior3Text'), + notes: t('weaponWarrior3Notes', { str: 9 }), + str: 9, + value: 45, + }, + 4: { + text: t('weaponWarrior4Text'), + notes: t('weaponWarrior4Notes', { str: 12 }), + str: 12, + value: 65, + }, + 5: { + text: t('weaponWarrior5Text'), + notes: t('weaponWarrior5Notes', { str: 15 }), + str: 15, + value: 90, + }, + 6: { + text: t('weaponWarrior6Text'), + notes: t('weaponWarrior6Notes', { str: 18 }), + str: 18, + value: 120, + last: true, + }, +}; + +let warriorSet = { + armor, + head, + shield, + weapon, +}; + +export default warriorSet; diff --git a/common/script/content/gear/sets/wizard.js b/common/script/content/gear/sets/wizard.js new file mode 100644 index 0000000000..898e7cac3a --- /dev/null +++ b/common/script/content/gear/sets/wizard.js @@ -0,0 +1,141 @@ +import t from '../../translation'; + +let armor = { + 1: { + text: t('armorWizard1Text'), + notes: t('armorWizard1Notes', { int: 2 }), + int: 2, + value: 30, + }, + 2: { + text: t('armorWizard2Text'), + notes: t('armorWizard2Notes', { int: 4 }), + int: 4, + value: 45, + }, + 3: { + text: t('armorWizard3Text'), + notes: t('armorWizard3Notes', { int: 6 }), + int: 6, + value: 65, + }, + 4: { + text: t('armorWizard4Text'), + notes: t('armorWizard4Notes', { int: 9 }), + int: 9, + value: 90, + }, + 5: { + text: t('armorWizard5Text'), + notes: t('armorWizard5Notes', { int: 12 }), + int: 12, + value: 120, + last: true, + }, +}; + +let head = { + 1: { + text: t('headWizard1Text'), + notes: t('headWizard1Notes', { per: 2 }), + per: 2, + value: 15, + }, + 2: { + text: t('headWizard2Text'), + notes: t('headWizard2Notes', { per: 3 }), + per: 3, + value: 25, + }, + 3: { + text: t('headWizard3Text'), + notes: t('headWizard3Notes', { per: 5 }), + per: 5, + value: 40, + }, + 4: { + text: t('headWizard4Text'), + notes: t('headWizard4Notes', { per: 7 }), + per: 7, + value: 60, + }, + 5: { + text: t('headWizard5Text'), + notes: t('headWizard5Notes', { per: 10 }), + per: 10, + value: 80, + last: true, + }, +}; + +let shield = { + // Wizard's weapons are two handed + // And thus do not have shields + // But the content structure still expects an object +}; + +let weapon = { + + 0: { + twoHanded: true, + text: t('weaponWizard0Text'), + notes: t('weaponWizard0Notes'), value: 0 }, + 1: { + twoHanded: true, + text: t('weaponWizard1Text'), + notes: t('weaponWizard1Notes', { int: 3, per: 1 }), + int: 3, + per: 1, + value: 30, + }, + 2: { + twoHanded: true, + text: t('weaponWizard2Text'), + notes: t('weaponWizard2Notes', { int: 6, per: 2 }), + int: 6, + per: 2, + value: 50, + }, + 3: { + twoHanded: true, + text: t('weaponWizard3Text'), + notes: t('weaponWizard3Notes', { int: 9, per: 3 }), + int: 9, + per: 3, + value: 80, + }, + 4: { + twoHanded: true, + text: t('weaponWizard4Text'), + notes: t('weaponWizard4Notes', { int: 12, per: 5 }), + int: 12, + per: 5, + value: 120, + }, + 5: { + twoHanded: true, + text: t('weaponWizard5Text'), + notes: t('weaponWizard5Notes', { int: 15, per: 7 }), + int: 15, + per: 7, + value: 160, + }, + 6: { + twoHanded: true, + text: t('weaponWizard6Text'), + notes: t('weaponWizard6Notes', { int: 18, per: 10 }), + int: 18, + per: 10, + value: 200, + last: true, + }, +}; + +let wizardSet = { + armor, + head, + shield, + weapon, +}; + +export default wizardSet; diff --git a/common/script/src/content/gear/shield.js b/common/script/content/gear/shield.js similarity index 100% rename from common/script/src/content/gear/shield.js rename to common/script/content/gear/shield.js diff --git a/common/script/src/content/gear/weapon.js b/common/script/content/gear/weapon.js similarity index 100% rename from common/script/src/content/gear/weapon.js rename to common/script/content/gear/weapon.js diff --git a/common/script/content/index.coffee b/common/script/content/index.coffee deleted file mode 100644 index 948c2c7b59..0000000000 --- a/common/script/content/index.coffee +++ /dev/null @@ -1,2399 +0,0 @@ -api = module.exports - -_ = require 'lodash' -moment = require 'moment' -t = require './translation.js' - -### - --------------------------------------------------------------- - Gear (Weapons, Armor, Head, Shield) - Item definitions: {index, text, notes, value, str, def, int, per, classes, type} - --------------------------------------------------------------- -### - -classes = ['warrior', 'rogue', 'healer', 'wizard'] -gearTypes = [ 'weapon', 'armor', 'head', 'shield', 'body', 'back', 'headAccessory', 'eyewear'] - -events = -# IMPORTANT: The end date should be one to two days AFTER the actual end of -# the event, to allow people in different timezones to still buy the -# event gear up until at least the actual end of the event. - winter: {start:'2013-12-31',end:'2014-02-01'} - birthday: {start:'2013-01-30',end:'2014-02-01'} - spring: {start:'2014-03-21',end:'2014-05-01'} - summer: {start:'2014-06-20',end:'2014-08-01'} - gaymerx: {start:'2014-07-02',end:'2014-08-01'} - fall: {start:'2014-09-21',end:'2014-11-01'} - winter2015: {start:'2014-12-21',end:'2015-02-02'} - spring2015: {start:'2015-03-20',end:'2015-05-02'} - summer2015: {start:'2015-06-20',end:'2015-08-02'} - fall2015: {start:'2015-09-21',end:'2015-11-01'} - -api.mystery = - 201402: {start:'2014-02-22',end:'2014-02-28', text:'Winged Messenger Set'} - 201403: {start:'2014-03-24',end:'2014-04-02', text:'Forest Walker Set'} - 201404: {start:'2014-04-24',end:'2014-05-02', text:'Twilight Butterfly Set'} - 201405: {start:'2014-05-21',end:'2014-06-02', text:'Flame Wielder Set'} - 201406: {start:'2014-06-23',end:'2014-07-02', text:'Octomage Set'} - 201407: {start:'2014-07-23',end:'2014-08-02', text:'Undersea Explorer Set'} - 201408: {start:'2014-08-23',end:'2014-09-02', text:'Sun Sorcerer Set'} - 201409: {start:'2014-09-24',end:'2014-10-02', text:'Autumn Strider Set'} - 201410: {start:'2014-10-24',end:'2014-11-02', text:'Winged Goblin Set'} - 201411: {start:'2014-11-24',end:'2014-12-02', text:'Feast and Fun Set'} - 201412: {start:'2014-12-25',end:'2015-01-02', text:'Penguin Set'} - 201501: {start:'2015-01-26',end:'2015-02-02', text:'Starry Knight Set'} - 201502: {start:'2015-02-24',end:'2015-03-02', text:'Winged Enchanter Set'} - 201503: {start:'2015-03-25',end:'2015-04-02', text:'Aquamarine Set'} - 201504: {start:'2015-04-24',end:'2015-05-02', text:'Busy Bee Set'} - 201505: {start:'2015-05-25',end:'2015-06-02', text:'Green Knight Set'} - 201506: {start:'2015-06-25',end:'2015-07-02', text:'Neon Snorkeler Set'} - 201507: {start:'2015-07-24',end:'2015-08-02', text:'Rad Surfer Set'} - 201508: {start:'2015-08-23',end:'2015-09-02', text:'Cheetah Costume Set'} - 201509: {start:'2015-09-24',end:'2015-10-02', text:'Werewolf Set'} - 301404: {start:'3014-03-24',end:'3014-04-02', text:'Steampunk Standard Set'} - 301405: {start:'3014-04-24',end:'3014-05-02', text:'Steampunk Accessories Set'} - wondercon: {start:'2014-03-24',end:'2014-04-01'} # not really, but the mechanic works -_.each api.mystery, (v,k)->v.key = k - -api.itemList = - 'weapon': {localeKey: 'weapon', isEquipment: true} - 'armor' : {localeKey: 'armor', isEquipment: true} - 'head' : {localeKey: 'headgear', isEquipment: true} - 'shield' : {localeKey: 'offhand', isEquipment: true} - 'back' : {localeKey: 'back', isEquipment: true} - 'body' : {localeKey: 'body', isEquipment: true} - 'headAccessory' : {localeKey: 'headAccessory', isEquipment: true} - 'eyewear' : {localeKey: 'eyewear', isEquipment: true} - 'hatchingPotions' : {localeKey: 'hatchingPotion', isEquipment: false} - 'eggs' : {localeKey: 'eggSingular', isEquipment: false} - 'quests' : {localeKey: 'quest', isEquipment: false} - 'food' : {localeKey: 'foodText', isEquipment: false} - 'Saddle' : {localeKey: 'foodSaddleText', isEquipment: false} - -gear = - weapon: - base: - 0: - text: t('weaponBase0Text'), notes: t('weaponBase0Notes'), value:0 - warrior: - 0: text: t('weaponWarrior0Text'), notes: t('weaponWarrior0Notes'), value:1 - 1: text: t('weaponWarrior1Text'), notes: t('weaponWarrior1Notes', {str: 3}), str: 3, value:20 - 2: text: t('weaponWarrior2Text'), notes: t('weaponWarrior2Notes', {str: 6}), str: 6, value:30 - 3: text: t('weaponWarrior3Text'), notes: t('weaponWarrior3Notes', {str: 9}), str: 9, value:45 - 4: text: t('weaponWarrior4Text'), notes: t('weaponWarrior4Notes', {str: 12}), str: 12, value:65 - 5: text: t('weaponWarrior5Text'), notes: t('weaponWarrior5Notes', {str: 15}), str: 15, value:90 - 6: text: t('weaponWarrior6Text'), notes: t('weaponWarrior6Notes', {str: 18}), str: 18, value:120, last: true - rogue: - 0: text: t('weaponRogue0Text'), notes: t('weaponRogue0Notes'), str: 0, value: 0 - 1: text: t('weaponRogue1Text'), notes: t('weaponRogue1Notes', {str: 2}), str: 2, value: 20 - 2: text: t('weaponRogue2Text'), notes: t('weaponRogue2Notes', {str: 3}), str: 3, value: 35 - 3: text: t('weaponRogue3Text'), notes: t('weaponRogue3Notes', {str: 4}), str: 4, value: 50 - 4: text: t('weaponRogue4Text'), notes: t('weaponRogue4Notes', {str: 6}), str: 6, value: 70 - 5: text: t('weaponRogue5Text'), notes: t('weaponRogue5Notes', {str: 8}), str: 8, value: 90 - 6: text: t('weaponRogue6Text'), notes: t('weaponRogue6Notes', {str: 10}), str: 10, value: 120, last: true - wizard: - 0: twoHanded: true, text: t('weaponWizard0Text'), notes: t('weaponWizard0Notes'), value:0 - 1: twoHanded: true, text: t('weaponWizard1Text'), notes: t('weaponWizard1Notes', {int: 3, per: 1}), int: 3, per: 1, value:30 - 2: twoHanded: true, text: t('weaponWizard2Text'), notes: t('weaponWizard2Notes', {int: 6, per: 2}), int: 6, per: 2, value:50 - 3: twoHanded: true, text: t('weaponWizard3Text'), notes: t('weaponWizard3Notes', {int: 9, per: 3}), int: 9, per: 3, value:80 - 4: twoHanded: true, text: t('weaponWizard4Text'), notes: t('weaponWizard4Notes', {int: 12, per: 5}), int:12, per: 5, value:120 - 5: twoHanded: true, text: t('weaponWizard5Text'), notes: t('weaponWizard5Notes', {int: 15, per: 7}), int: 15, per: 7, value:160 - 6: twoHanded: true, text: t('weaponWizard6Text'), notes: t('weaponWizard6Notes', {int: 18, per: 10}), int: 18, per: 10, value:200, last: true - healer: - 0: text: t('weaponHealer0Text'), notes: t('weaponHealer0Notes'), value:0 - 1: text: t('weaponHealer1Text'), notes: t('weaponHealer1Notes', {int: 2}), int: 2, value:20 - 2: text: t('weaponHealer2Text'), notes: t('weaponHealer2Notes', {int: 3}), int: 3, value:30 - 3: text: t('weaponHealer3Text'), notes: t('weaponHealer3Notes', {int: 5}), int: 5, value:45 - 4: text: t('weaponHealer4Text'), notes: t('weaponHealer4Notes', {int: 7}), int:7, value:65 - 5: text: t('weaponHealer5Text'), notes: t('weaponHealer5Notes', {int: 9}), int: 9, value:90 - 6: text: t('weaponHealer6Text'), notes: t('weaponHealer6Notes', {int: 11}), int: 11, value:120, last: true - special: - # Backer, Contributor, and Quest Rewards - 0: text: t('weaponSpecial0Text'), notes: t('weaponSpecial0Notes', {str: 20}), str: 20, value:150, canOwn: ((u)-> +u.backer?.tier >= 70) - 1: text: t('weaponSpecial1Text'), notes: t('weaponSpecial1Notes', {attrs: 6}), str: 6, per: 6, con: 6, int: 6, value:170, canOwn: ((u)-> +u.contributor?.level >= 4) - 2: text: t('weaponSpecial2Text'), notes: t('weaponSpecial2Notes', {attrs: 25}), str: 25, per: 25, value:200, canOwn: ((u)-> (+u.backer?.tier >= 300) or u.items.gear.owned.weapon_special_2?) - 3: text: t('weaponSpecial3Text'), notes: t('weaponSpecial3Notes', {attrs: 17}), str: 17, int: 17, con: 17, value:200, canOwn: ((u)-> (+u.backer?.tier >= 300) or u.items.gear.owned.weapon_special_3?) - critical: text: t('weaponSpecialCriticalText'), notes: t('weaponSpecialCriticalNotes', {attrs: 40}), str: 40, per: 40, value:200, canOwn: ((u)-> !!u.contributor?.critical) - tridentOfCrashingTides: text: t('weaponSpecialTridentOfCrashingTidesText'), notes: t('weaponSpecialTridentOfCrashingTidesNotes', {int: 15}), int: 15, value: 130, canOwn: ((u)-> u.items.gear.owned.weapon_special_tridentOfCrashingTides?) - # Winter Wonderland - yeti: event: events.winter, specialClass: 'warrior', text: t('weaponSpecialYetiText'), notes: t('weaponSpecialYetiNotes', {str: 15}), str: 15, value:90 - ski: event: events.winter, specialClass: 'rogue', text: t('weaponSpecialSkiText'), notes: t('weaponSpecialSkiNotes', {str: 8}), str: 8, value: 90 - candycane: event: events.winter, specialClass: 'wizard', twoHanded: true, text: t('weaponSpecialCandycaneText'), notes: t('weaponSpecialCandycaneNotes', {int: 15, per: 7}), int: 15, per: 7, value:160 - snowflake: event: events.winter, specialClass: 'healer', text: t('weaponSpecialSnowflakeText'), notes: t('weaponSpecialSnowflakeNotes', {int: 9}), int: 9, value:90 - # Spring Fling - springRogue: event: events.spring, specialClass: 'rogue', text: t('weaponSpecialSpringRogueText'), notes: t('weaponSpecialSpringRogueNotes', {str: 8}), value: 80, str: 8 - springWarrior: event: events.spring, specialClass: 'warrior', text: t('weaponSpecialSpringWarriorText'), notes: t('weaponSpecialSpringWarriorNotes', {str: 15}), value: 90, str: 15 - springMage: event: events.spring, specialClass: 'wizard', twoHanded:true, text: t('weaponSpecialSpringMageText'), notes: t('weaponSpecialSpringMageNotes', {int: 15, per: 7}), value: 160, int:15, per:7 - springHealer: event: events.spring, specialClass: 'healer', text: t('weaponSpecialSpringHealerText'), notes: t('weaponSpecialSpringHealerNotes', {int: 9}), value: 90, int: 9 - # Summer Splash - summerRogue: event: events.summer, specialClass: 'rogue', text: t('weaponSpecialSummerRogueText'), notes: t('weaponSpecialSummerRogueNotes', {str: 8}), value: 80, str: 8 - summerWarrior: event: events.summer, specialClass: 'warrior', text: t('weaponSpecialSummerWarriorText'), notes: t('weaponSpecialSummerWarriorNotes', {str: 15}), value: 90, str: 15 - summerMage: event: events.summer, specialClass: 'wizard', twoHanded:true, text: t('weaponSpecialSummerMageText'), notes: t('weaponSpecialSummerMageNotes', {int: 15, per: 7}), value: 160, int:15, per:7 - summerHealer: event: events.summer, specialClass: 'healer', text: t('weaponSpecialSummerHealerText'), notes: t('weaponSpecialSummerHealerNotes', {int: 9}), value: 90, int: 9 - # Fall Festival - fallRogue: event: events.fall, specialClass: 'rogue', text: t('weaponSpecialFallRogueText'), notes: t('weaponSpecialFallRogueNotes', {str: 8}), value: 80, str: 8, canBuy: (()->true) - fallWarrior: event: events.fall, specialClass: 'warrior', text: t('weaponSpecialFallWarriorText'), notes: t('weaponSpecialFallWarriorNotes', {str: 15}), value: 90, str: 15, canBuy: (()->true) - fallMage: event: events.fall, specialClass: 'wizard', twoHanded:true, text: t('weaponSpecialFallMageText'), notes: t('weaponSpecialFallMageNotes', {int: 15, per: 7}), value: 160, int:15, per:7, canBuy: (()->true) - fallHealer: event: events.fall, specialClass: 'healer', text: t('weaponSpecialFallHealerText'), notes: t('weaponSpecialFallHealerNotes', {int: 9}), value: 90, int: 9, canBuy: (()->true) - # Winter 2015 - winter2015Rogue: event: events.winter2015, specialClass: 'rogue', text: t('weaponSpecialWinter2015RogueText'), notes: t('weaponSpecialWinter2015RogueNotes', {str: 8}), value: 80, str: 8 - winter2015Warrior: event: events.winter2015, specialClass: 'warrior', text: t('weaponSpecialWinter2015WarriorText'), notes: t('weaponSpecialWinter2015WarriorNotes', {str: 15}), value: 90, str: 15 - winter2015Mage: event: events.winter2015, specialClass: 'wizard', twoHanded:true, text: t('weaponSpecialWinter2015MageText'), notes: t('weaponSpecialWinter2015MageNotes', {int: 15, per: 7}), value: 160, int:15, per:7 - winter2015Healer: event: events.winter2015, specialClass: 'healer', text: t('weaponSpecialWinter2015HealerText'), notes: t('weaponSpecialWinter2015HealerNotes', {int: 9}), value: 90, int: 9 - # Spring 2015 - spring2015Rogue: event: events.spring2015, specialClass: 'rogue', text: t('weaponSpecialSpring2015RogueText'), notes: t('weaponSpecialSpring2015RogueNotes', {str: 8}), value: 80, str: 8 - spring2015Warrior: event: events.spring2015, specialClass: 'warrior', text: t('weaponSpecialSpring2015WarriorText'), notes: t('weaponSpecialSpring2015WarriorNotes', {str: 15}), value: 90, str: 15 - spring2015Mage: event: events.spring2015, specialClass: 'wizard', twoHanded:true, text: t('weaponSpecialSpring2015MageText'), notes: t('weaponSpecialSpring2015MageNotes', {int: 15, per: 7}), value: 160, int:15, per:7 - spring2015Healer: event: events.spring2015, specialClass: 'healer', text: t('weaponSpecialSpring2015HealerText'), notes: t('weaponSpecialSpring2015HealerNotes', {int: 9}), value: 90, int: 9 - # Summer 2015 - summer2015Rogue: event: events.summer2015, specialClass: 'rogue', text: t('weaponSpecialSummer2015RogueText'), notes: t('weaponSpecialSummer2015RogueNotes', {str: 8}), value: 80, str: 8 - summer2015Warrior: event: events.summer2015, specialClass: 'warrior', text: t('weaponSpecialSummer2015WarriorText'), notes: t('weaponSpecialSummer2015WarriorNotes', {str: 15}), value: 90, str: 15 - summer2015Mage: event: events.summer2015, specialClass: 'wizard', twoHanded:true, text: t('weaponSpecialSummer2015MageText'), notes: t('weaponSpecialSummer2015MageNotes', {int: 15, per: 7}), value: 160, int:15, per:7 - summer2015Healer: event: events.summer2015, specialClass: 'healer', text: t('weaponSpecialSummer2015HealerText'), notes: t('weaponSpecialSummer2015HealerNotes', {int: 9}), value: 90, int: 9 - # Fall 2015 - fall2015Rogue: event: events.fall2015, specialClass: 'rogue', text: t('weaponSpecialFall2015RogueText'), notes: t('weaponSpecialFall2015RogueNotes', {str: 8}), value: 80, str: 8 - fall2015Warrior: event: events.fall2015, specialClass: 'warrior', text: t('weaponSpecialFall2015WarriorText'), notes: t('weaponSpecialFall2015WarriorNotes', {str: 15}), value: 90, str: 15 - fall2015Mage: event: events.fall2015, specialClass: 'wizard', twoHanded:true, text: t('weaponSpecialFall2015MageText'), notes: t('weaponSpecialFall2015MageNotes', {int: 15, per: 7}), value: 160, int:15, per:7 - fall2015Healer: event: events.fall2015, specialClass: 'healer', text: t('weaponSpecialFall2015HealerText'), notes: t('weaponSpecialFall2015HealerNotes', {int: 9}), value: 90, int: 9 - mystery: - 201411: text: t('weaponMystery201411Text'), notes: t('weaponMystery201411Notes'), mystery:'201411', value: 0 - 201502: text: t('weaponMystery201502Text'), notes: t('weaponMystery201502Notes'), mystery:'201502', value: 0 - 201505: text: t('weaponMystery201505Text'), notes: t('weaponMystery201505Notes'), mystery:'201505', value: 0 - 301404: text: t('weaponMystery301404Text'), notes: t('weaponMystery301404Notes'), mystery:'301404', value: 0 - armoire: - basicCrossbow: text: t('weaponArmoireBasicCrossbowText'), notes: t('weaponArmoireBasicCrossbowNotes', {str: 5, per: 5, con: 5}), value: 100, str: 5, per: 5, con: 5, canOwn: ((u)-> u.items.gear.owned.weapon_armoire_basicCrossbow?) - lunarSceptre: text: t('weaponArmoireLunarSceptreText'), notes: t('weaponArmoireLunarSceptreNotes', {con: 7, int: 7}), value: 100, con: 7, int: 7, set: 'soothing', canOwn: ((u)-> u.items.gear.owned.weapon_armoire_lunarSceptre?) - rancherLasso: twoHanded:true, text: t('weaponArmoireRancherLassoText'), notes: t('weaponArmoireRancherLassoNotes', {str: 5, per: 5, int: 5}), value: 100, str: 5, per: 5, int: 5, set: 'rancher', canOwn: ((u)-> u.items.gear.owned.weapon_armoire_rancherLasso?) - mythmakerSword: text: t('weaponArmoireMythmakerSwordText'), notes: t('weaponArmoireMythmakerSwordNotes', {attrs: 6}), value: 100, str: 6, per: 6, set: 'goldenToga', canOwn: ((u)-> u.items.gear.owned.weapon_armoire_mythmakerSword?) - ironCrook: text: t('weaponArmoireIronCrookText'), notes: t('weaponArmoireIronCrookNotes', {attrs: 7}), value: 100, str: 7, per: 7, set: 'hornedIron', canOwn: ((u)-> u.items.gear.owned.weapon_armoire_ironCrook?) - goldWingStaff: text: t('weaponArmoireGoldWingStaffText'), notes: t('weaponArmoireGoldWingStaffNotes', {attrs:4}), value: 100, con: 4, int: 4, per: 4, str: 4, canOwn: ((u)-> u.items.gear.owned.weapon_armoire_goldWingStaff?) - batWand: text: t('weaponArmoireBatWandText'), notes: t('weaponArmoireBatWandNotes', {int: 10, per: 2}), value: 100, int: 10, per: 2, canOwn: ((u)-> u.items.gear.owned.weapon_armoire_batWand?) - - armor: - base: - 0: text: t('armorBase0Text'), notes: t('armorBase0Notes'), value:0 - warrior: - 1: text: t('armorWarrior1Text'), notes: t('armorWarrior1Notes', {con: 3}), con: 3, value:30 - 2: text: t('armorWarrior2Text'), notes: t('armorWarrior2Notes', {con: 5}), con: 5, value:45 - 3: text: t('armorWarrior3Text'), notes: t('armorWarrior3Notes', {con: 7}), con: 7, value:65 - 4: text: t('armorWarrior4Text'), notes: t('armorWarrior4Notes', {con: 9}), con: 9, value:90 - 5: text: t('armorWarrior5Text'), notes: t('armorWarrior5Notes', {con: 11}), con: 11, value:120, last: true - rogue: - 1: text: t('armorRogue1Text'), notes: t('armorRogue1Notes', {per: 6}), per: 6, value:30 - 2: text: t('armorRogue2Text'), notes: t('armorRogue2Notes', {per: 9}), per: 9, value:45 - 3: text: t('armorRogue3Text'), notes: t('armorRogue3Notes', {per: 12}), per: 12, value:65 - 4: text: t('armorRogue4Text'), notes: t('armorRogue4Notes', {per: 15}), per: 15, value:90 - 5: text: t('armorRogue5Text'), notes: t('armorRogue5Notes', {per: 18}), per: 18, value:120, last: true - wizard: - 1: text: t('armorWizard1Text'), notes: t('armorWizard1Notes', {int: 2}), int: 2, value:30 - 2: text: t('armorWizard2Text'), notes: t('armorWizard2Notes', {int: 4}), int: 4, value:45 - 3: text: t('armorWizard3Text'), notes: t('armorWizard3Notes', {int: 6}), int: 6, value:65 - 4: text: t('armorWizard4Text'), notes: t('armorWizard4Notes', {int: 9}), int: 9, value:90 - 5: text: t('armorWizard5Text'), notes: t('armorWizard5Notes', {int: 12}), int: 12, value:120, last: true - healer: - 1: text: t('armorHealer1Text'), notes: t('armorHealer1Notes', {con: 6}), con: 6, value:30 - 2: text: t('armorHealer2Text'), notes: t('armorHealer2Notes', {con: 9}), con: 9, value:45 - 3: text: t('armorHealer3Text'), notes: t('armorHealer3Notes', {con: 12}), con: 12, value:65 - 4: text: t('armorHealer4Text'), notes: t('armorHealer4Notes', {con: 15}), con: 15, value:90 - 5: text: t('armorHealer5Text'), notes: t('armorHealer5Notes', {con: 18}), con: 18, value:120, last: true - special: - # Backer, Contributor, and Quest Rewards - 0: text: t('armorSpecial0Text'), notes: t('armorSpecial0Notes', {con: 20}), con: 20, value:150, canOwn: ((u)-> +u.backer?.tier >= 45) - 1: text: t('armorSpecial1Text'), notes: t('armorSpecial1Notes', {attrs: 6}), con: 6, str: 6, per: 6, int: 6, value:170, canOwn: ((u)-> +u.contributor?.level >= 2) - 2: text: t('armorSpecial2Text'), notes: t('armorSpecial2Notes', {attrs: 25}), int: 25, con: 25, value:200, canOwn: ((u)-> +u.backer?.tier >= 300 or u.items.gear.owned.armor_special_2?) - finnedOceanicArmor: text: t('armorSpecialFinnedOceanicArmorText'), notes: t('armorSpecialFinnedOceanicArmorNotes', {str: 15}), str: 15, value: 130, canOwn: ((u)-> u.items.gear.owned.armor_special_finnedOceanicArmor?) - # Winter Wonderland - yeti: event: events.winter, specialClass: 'warrior', text: t('armorSpecialYetiText'), notes: t('armorSpecialYetiNotes', {con: 9}), con: 9, value:90 - ski: event: events.winter, specialClass: 'rogue', text: t('armorSpecialSkiText'), notes: t('armorSpecialSkiNotes', {per: 15}), per: 15, value:90 - candycane: event: events.winter, specialClass: 'wizard', text: t('armorSpecialCandycaneText'), notes: t('armorSpecialCandycaneNotes', {int: 9}), int: 9, value:90 - snowflake: event: events.winter, specialClass: 'healer', text: t('armorSpecialSnowflakeText'), notes: t('armorSpecialSnowflakeNotes', {con: 15}), con: 15, value:90 - birthday: event: events.birthday, text: t('armorSpecialBirthdayText'), notes: t('armorSpecialBirthdayNotes'), value: 0 - # Spring Fling - springRogue: event: events.spring, specialClass: 'rogue', text: t('armorSpecialSpringRogueText'), notes: t('armorSpecialSpringRogueNotes', {per: 15}), value: 90, per: 15 - springWarrior: event: events.spring, specialClass: 'warrior', text: t('armorSpecialSpringWarriorText'), notes: t('armorSpecialSpringWarriorNotes', {con: 9}), value: 90, con: 9 - springMage: event: events.spring, specialClass: 'wizard', text: t('armorSpecialSpringMageText'), notes: t('armorSpecialSpringMageNotes', {int: 9}), value: 90, int: 9 - springHealer: event: events.spring, specialClass: 'healer', text: t('armorSpecialSpringHealerText'), notes: t('armorSpecialSpringHealerNotes', {con: 15}), value: 90, con: 15 - # Summer Splash - summerRogue: event: events.summer, specialClass: 'rogue', text: t('armorSpecialSummerRogueText'), notes: t('armorSpecialSummerRogueNotes', {per: 15}), value: 90, per: 15 - summerWarrior: event: events.summer, specialClass: 'warrior', text: t('armorSpecialSummerWarriorText'), notes: t('armorSpecialSummerWarriorNotes', {con: 9}), value: 90, con: 9 - summerMage: event: events.summer, specialClass: 'wizard', text: t('armorSpecialSummerMageText'), notes: t('armorSpecialSummerMageNotes', {int: 9}), value: 90, int: 9 - summerHealer: event: events.summer, specialClass: 'healer', text: t('armorSpecialSummerHealerText'), notes: t('armorSpecialSummerHealerNotes', {con: 15}), value: 90, con: 15 - # Fall Festival - fallRogue: event: events.fall, specialClass: 'rogue', text: t('armorSpecialFallRogueText'), notes: t('armorSpecialFallRogueNotes', {per: 15}), value: 90, per: 15, canBuy: (()->true) - fallWarrior: event: events.fall, specialClass: 'warrior', text: t('armorSpecialFallWarriorText'), notes: t('armorSpecialFallWarriorNotes', {con: 9}), value: 90, con: 9, canBuy: (()->true) - fallMage: event: events.fall, specialClass: 'wizard', text: t('armorSpecialFallMageText'), notes: t('armorSpecialFallMageNotes', {int: 9}), value: 90, int: 9, canBuy: (()->true) - fallHealer: event: events.fall, specialClass: 'healer', text: t('armorSpecialFallHealerText'), notes: t('armorSpecialFallHealerNotes', {con: 15}), value: 90, con: 15, canBuy: (()->true) - # Winter 2015 - winter2015Rogue: event: events.winter2015, specialClass: 'rogue', text: t('armorSpecialWinter2015RogueText'), notes: t('armorSpecialWinter2015RogueNotes', {per: 15}), value: 90, per: 15 - winter2015Warrior: event: events.winter2015, specialClass: 'warrior', text: t('armorSpecialWinter2015WarriorText'), notes: t('armorSpecialWinter2015WarriorNotes', {con: 9}), value: 90, con: 9 - winter2015Mage: event: events.winter2015, specialClass: 'wizard', text: t('armorSpecialWinter2015MageText'), notes: t('armorSpecialWinter2015MageNotes', {int: 9}), value: 90, int: 9 - winter2015Healer: event: events.winter2015, specialClass: 'healer', text: t('armorSpecialWinter2015HealerText'), notes: t('armorSpecialWinter2015HealerNotes', {con: 15}), value: 90, con: 15 - birthday2015: text: t('armorSpecialBirthday2015Text'), notes: t('armorSpecialBirthday2015Notes'), value: 0, canOwn: ((u)-> u.items.gear.owned.armor_special_birthday2015?) - # Spring 2015 - spring2015Rogue: event: events.spring2015, specialClass: 'rogue', text: t('armorSpecialSpring2015RogueText'), notes: t('armorSpecialSpring2015RogueNotes', {per: 15}), value: 90, per: 15 - spring2015Warrior: event: events.spring2015, specialClass: 'warrior', text: t('armorSpecialSpring2015WarriorText'), notes: t('armorSpecialSpring2015WarriorNotes', {con: 9}), value: 90, con: 9 - spring2015Mage: event: events.spring2015, specialClass: 'wizard', text: t('armorSpecialSpring2015MageText'), notes: t('armorSpecialSpring2015MageNotes', {int: 9}), value: 90, int: 9 - spring2015Healer: event: events.spring2015, specialClass: 'healer', text: t('armorSpecialSpring2015HealerText'), notes: t('armorSpecialSpring2015HealerNotes', {con: 15}), value: 90, con: 15 - # Summer 2015 - summer2015Rogue: event: events.summer2015, specialClass: 'rogue', text: t('armorSpecialSummer2015RogueText'), notes: t('armorSpecialSummer2015RogueNotes', {per: 15}), value: 90, per: 15 - summer2015Warrior: event: events.summer2015, specialClass: 'warrior', text: t('armorSpecialSummer2015WarriorText'), notes: t('armorSpecialSummer2015WarriorNotes', {con: 9}), value: 90, con: 9 - summer2015Mage: event: events.summer2015, specialClass: 'wizard', text: t('armorSpecialSummer2015MageText'), notes: t('armorSpecialSummer2015MageNotes', {int: 9}), value: 90, int: 9 - summer2015Healer: event: events.summer2015, specialClass: 'healer', text: t('armorSpecialSummer2015HealerText'), notes: t('armorSpecialSummer2015HealerNotes', {con: 15}), value: 90, con: 15 - # Fall 2015 - fall2015Rogue: event: events.fall2015, specialClass: 'rogue', text: t('armorSpecialFall2015RogueText'), notes: t('armorSpecialFall2015RogueNotes', {per: 15}), value: 90, per: 15 - fall2015Warrior: event: events.fall2015, specialClass: 'warrior', text: t('armorSpecialFall2015WarriorText'), notes: t('armorSpecialFall2015WarriorNotes', {con: 9}), value: 90, con: 9 - fall2015Mage: event: events.fall2015, specialClass: 'wizard', text: t('armorSpecialFall2015MageText'), notes: t('armorSpecialFall2015MageNotes', {int: 9}), value: 90, int: 9 - fall2015Healer: event: events.fall2015, specialClass: 'healer', text: t('armorSpecialFall2015HealerText'), notes: t('armorSpecialFall2015HealerNotes', {con: 15}), value: 90, con: 15 - # Other - gaymerx: event: events.gaymerx, text: t('armorSpecialGaymerxText'), notes: t('armorSpecialGaymerxNotes'), value: 0 - mystery: - 201402: text: t('armorMystery201402Text'), notes: t('armorMystery201402Notes'), mystery:'201402', value: 0 - 201403: text: t('armorMystery201403Text'), notes: t('armorMystery201403Notes'), mystery:'201403', value: 0 - 201405: text: t('armorMystery201405Text'), notes: t('armorMystery201405Notes'), mystery:'201405', value: 0 - 201406: text: t('armorMystery201406Text'), notes: t('armorMystery201406Notes'), mystery:'201406', value: 0 - 201407: text: t('armorMystery201407Text'), notes: t('armorMystery201407Notes'), mystery:'201407', value: 0 - 201408: text: t('armorMystery201408Text'), notes: t('armorMystery201408Notes'), mystery:'201408', value: 0 - 201409: text: t('armorMystery201409Text'), notes: t('armorMystery201409Notes'), mystery:'201409', value: 0 - 201410: text: t('armorMystery201410Text'), notes: t('armorMystery201410Notes'), mystery:'201410', value: 0 - 201412: text: t('armorMystery201412Text'), notes: t('armorMystery201412Notes'), mystery:'201412', value: 0 - 201501: text: t('armorMystery201501Text'), notes: t('armorMystery201501Notes'), mystery:'201501', value: 0 - 201503: text: t('armorMystery201503Text'), notes: t('armorMystery201503Notes'), mystery:'201503', value: 0 - 201504: text: t('armorMystery201504Text'), notes: t('armorMystery201504Notes'), mystery:'201504', value: 0 - 201506: text: t('armorMystery201506Text'), notes: t('armorMystery201506Notes'), mystery:'201506', value: 0 - 201508: text: t('armorMystery201508Text'), notes: t('armorMystery201508Notes'), mystery:'201508', value: 0 - 201509: text: t('armorMystery201509Text'), notes: t('armorMystery201509Notes'), mystery:'201509', value: 0 - 301404: text: t('armorMystery301404Text'), notes: t('armorMystery301404Notes'), mystery:'301404', value: 0 - armoire: - lunarArmor: text: t('armorArmoireLunarArmorText'), notes: t('armorArmoireLunarArmorNotes', {str: 7, int: 7}), value: 100, str: 7, int: 7, set: 'soothing', canOwn: ((u)-> u.items.gear.owned.armor_armoire_lunarArmor?) - gladiatorArmor: text: t('armorArmoireGladiatorArmorText'), notes: t('armorArmoireGladiatorArmorNotes', {str: 7, per: 7}), value: 100, str: 7, per: 7, set: 'gladiator', canOwn: ((u)-> u.items.gear.owned.armor_armoire_gladiatorArmor?) - rancherRobes: text: t('armorArmoireRancherRobesText'), notes: t('armorArmoireRancherRobesNotes', {str: 5, per: 5, int: 5}), value: 100, str: 5, per: 5, int: 5, set: 'rancher', canOwn: ((u)-> u.items.gear.owned.armor_armoire_rancherRobes?) - goldenToga: text: t('armorArmoireGoldenTogaText'), notes: t('armorArmoireGoldenTogaNotes', {attrs: 8}), value: 100, str: 8, con: 8, set: 'goldenToga', canOwn: ((u)-> u.items.gear.owned.armor_armoire_goldenToga?) - hornedIronArmor: text: t('armorArmoireHornedIronArmorText'), notes: t('armorArmoireHornedIronArmorNotes', {con: 9, per: 7}), value: 100, con: 9, per: 7, set: 'hornedIron', canOwn: ((u)-> u.items.gear.owned.armor_armoire_hornedIronArmor?) - plagueDoctorOvercoat: text: t('armorArmoirePlagueDoctorOvercoatText'), notes: t('armorArmoirePlagueDoctorOvercoatNotes', {int: 6, str: 5, con: 6}), value: 100, int: 6, str: 5, con: 6, set: 'plagueDoctor', canOwn: ((u)-> u.items.gear.owned.armor_armoire_plagueDoctorOvercoat?) - - head: - base: - 0: text: t('headBase0Text'), notes: t('headBase0Notes'), value:0 - warrior: - 1: text: t('headWarrior1Text'), notes: t('headWarrior1Notes', {str: 2}), str: 2, value:15 - 2: text: t('headWarrior2Text'), notes: t('headWarrior2Notes', {str: 4}), str: 4, value:25 - 3: text: t('headWarrior3Text'), notes: t('headWarrior3Notes', {str: 6}), str: 6, value:40 - 4: text: t('headWarrior4Text'), notes: t('headWarrior4Notes', {str: 9}), str: 9, value:60 - 5: text: t('headWarrior5Text'), notes: t('headWarrior5Notes', {str: 12}), str: 12, value:80, last: true - rogue: - 1: text: t('headRogue1Text'), notes: t('headRogue1Notes', {per: 2}), per: 2, value:15 - 2: text: t('headRogue2Text'), notes: t('headRogue2Notes', {per: 4}), per: 4, value:25 - 3: text: t('headRogue3Text'), notes: t('headRogue3Notes', {per: 6}), per: 6, value:40 - 4: text: t('headRogue4Text'), notes: t('headRogue4Notes', {per: 9}), per: 9, value:60 - 5: text: t('headRogue5Text'), notes: t('headRogue5Notes', {per: 12}), per: 12, value:80, last: true - wizard: - 1: text: t('headWizard1Text'), notes: t('headWizard1Notes', {per: 2}), per: 2, value:15 - 2: text: t('headWizard2Text'), notes: t('headWizard2Notes', {per: 3}), per: 3, value:25 - 3: text: t('headWizard3Text'), notes: t('headWizard3Notes', {per: 5}), per: 5, value:40 - 4: text: t('headWizard4Text'), notes: t('headWizard4Notes', {per: 7}), per: 7, value:60 - 5: text: t('headWizard5Text'), notes: t('headWizard5Notes', {per: 10}), per: 10, value:80, last: true - healer: - 1: text: t('headHealer1Text'), notes: t('headHealer1Notes', {int: 2}), int: 2, value:15 - 2: text: t('headHealer2Text'), notes: t('headHealer2Notes', {int: 3}), int: 3, value:25 - 3: text: t('headHealer3Text'), notes: t('headHealer3Notes', {int: 5}), int: 5, value:40 - 4: text: t('headHealer4Text'), notes: t('headHealer4Notes', {int: 7}), int: 7, value:60 - 5: text: t('headHealer5Text'), notes: t('headHealer5Notes', {int: 9}), int: 9, value:80, last: true - special: - # Backer, Contributor, and Quest Rewards - 0: text: t('headSpecial0Text'), notes: t('headSpecial0Notes', {int: 20}), int: 20, value:150, canOwn: ((u)-> +u.backer?.tier >= 45) - 1: text: t('headSpecial1Text'), notes: t('headSpecial1Notes', {attrs: 6}), con: 6, str: 6, per: 6, int: 6, value:170, canOwn: ((u)-> +u.contributor?.level >= 3) - 2: text: t('headSpecial2Text'), notes: t('headSpecial2Notes', {attrs: 25}), int: 25, str: 25, value:200, canOwn: ((u)-> (+u.backer?.tier >= 300) or u.items.gear.owned.head_special_2?) - fireCoralCirclet: text: t('headSpecialFireCoralCircletText'), notes: t('headSpecialFireCoralCircletNotes', {per: 15}), per: 15, value: 130, canOwn: ((u)-> u.items.gear.owned.head_special_fireCoralCirclet?) - # Winter Wonderland - nye: event: events.winter, text: t('headSpecialNyeText'), notes: t('headSpecialNyeNotes'), value: 0 - yeti: event: events.winter, specialClass: 'warrior', text: t('headSpecialYetiText'), notes: t('headSpecialYetiNotes', {str: 9}), str: 9, value:60 - ski: event: events.winter, specialClass: 'rogue', text: t('headSpecialSkiText'), notes: t('headSpecialSkiNotes', {per: 9}), per: 9, value:60 - candycane: event: events.winter, specialClass: 'wizard', text: t('headSpecialCandycaneText'), notes: t('headSpecialCandycaneNotes', {per: 7}), per: 7, value:60 - snowflake: event: events.winter, specialClass: 'healer', text: t('headSpecialSnowflakeText'), notes: t('headSpecialSnowflakeNotes', {int: 7}), int: 7, value:60 - # Spring Fling - springRogue: event: events.spring, specialClass: 'rogue', text: t('headSpecialSpringRogueText'), notes: t('headSpecialSpringRogueNotes', {per: 9}),value: 60,per: 9 - springWarrior: event: events.spring, specialClass: 'warrior', text: t('headSpecialSpringWarriorText'), notes: t('headSpecialSpringWarriorNotes', {str: 9}),value: 60,str: 9 - springMage: event: events.spring, specialClass: 'wizard', text: t('headSpecialSpringMageText'), notes: t('headSpecialSpringMageNotes', {per: 7}),value: 60,per: 7 - springHealer: event: events.spring, specialClass: 'healer', text: t('headSpecialSpringHealerText'), notes: t('headSpecialSpringHealerNotes', {int: 7}), value: 60, int: 7 - # Summer Splash - summerRogue: event: events.summer, specialClass: 'rogue', text: t('headSpecialSummerRogueText'), notes: t('headSpecialSummerRogueNotes', {per: 9}),value: 60,per: 9 - summerWarrior: event: events.summer, specialClass: 'warrior', text: t('headSpecialSummerWarriorText'), notes: t('headSpecialSummerWarriorNotes', {str: 9}),value: 60,str: 9 - summerMage: event: events.summer, specialClass: 'wizard', text: t('headSpecialSummerMageText'), notes: t('headSpecialSummerMageNotes', {per: 7}),value: 60,per: 7 - summerHealer: event: events.summer, specialClass: 'healer', text: t('headSpecialSummerHealerText'), notes: t('headSpecialSummerHealerNotes', {int: 7}), value: 60, int: 7 - # Fall Festival - fallRogue: event: events.fall, specialClass: 'rogue', text: t('headSpecialFallRogueText'), notes: t('headSpecialFallRogueNotes', {per: 9}),value: 60,per: 9, canBuy: (()->true) - fallWarrior: event: events.fall, specialClass: 'warrior', text: t('headSpecialFallWarriorText'), notes: t('headSpecialFallWarriorNotes', {str: 9}),value: 60,str: 9, canBuy: (()->true) - fallMage: event: events.fall, specialClass: 'wizard', text: t('headSpecialFallMageText'), notes: t('headSpecialFallMageNotes', {per: 7}),value: 60,per: 7, canBuy: (()->true) - fallHealer: event: events.fall, specialClass: 'healer', text: t('headSpecialFallHealerText'), notes: t('headSpecialFallHealerNotes', {int: 7}), value: 60, int: 7, canBuy: (()->true) - # Winter 2015 - winter2015Rogue: event: events.winter2015, specialClass: 'rogue', text: t('headSpecialWinter2015RogueText'), notes: t('headSpecialWinter2015RogueNotes', {per: 9}),value: 60,per: 9 - winter2015Warrior: event: events.winter2015, specialClass: 'warrior', text: t('headSpecialWinter2015WarriorText'), notes: t('headSpecialWinter2015WarriorNotes', {str: 9}),value: 60,str: 9 - winter2015Mage: event: events.winter2015, specialClass: 'wizard', text: t('headSpecialWinter2015MageText'), notes: t('headSpecialWinter2015MageNotes', {per: 7}),value: 60,per: 7 - winter2015Healer: event: events.winter2015, specialClass: 'healer', text: t('headSpecialWinter2015HealerText'), notes: t('headSpecialWinter2015HealerNotes', {int: 7}), value: 60, int: 7 - nye2014: text: t('headSpecialNye2014Text'), notes: t('headSpecialNye2014Notes'), value: 0, canOwn: ((u)-> u.items.gear.owned.head_special_nye2014?) - # Spring 2015 - spring2015Rogue: event: events.spring2015, specialClass: 'rogue', text: t('headSpecialSpring2015RogueText'), notes: t('headSpecialSpring2015RogueNotes', {per: 9}),value: 60,per: 9 - spring2015Warrior: event: events.spring2015, specialClass: 'warrior', text: t('headSpecialSpring2015WarriorText'), notes: t('headSpecialSpring2015WarriorNotes', {str: 9}),value: 60,str: 9 - spring2015Mage: event: events.spring2015, specialClass: 'wizard', text: t('headSpecialSpring2015MageText'), notes: t('headSpecialSpring2015MageNotes', {per: 7}),value: 60,per: 7 - spring2015Healer: event: events.spring2015, specialClass: 'healer', text: t('headSpecialSpring2015HealerText'), notes: t('headSpecialSpring2015HealerNotes', {int: 7}), value: 60, int: 7 - # Summer 2015 - summer2015Rogue: event: events.summer2015, specialClass: 'rogue', text: t('headSpecialSummer2015RogueText'), notes: t('headSpecialSummer2015RogueNotes', {per: 9}),value: 60,per: 9 - summer2015Warrior: event: events.summer2015, specialClass: 'warrior', text: t('headSpecialSummer2015WarriorText'), notes: t('headSpecialSummer2015WarriorNotes', {str: 9}),value: 60,str: 9 - summer2015Mage: event: events.summer2015, specialClass: 'wizard', text: t('headSpecialSummer2015MageText'), notes: t('headSpecialSummer2015MageNotes', {per: 7}),value: 60,per: 7 - summer2015Healer: event: events.summer2015, specialClass: 'healer', text: t('headSpecialSummer2015HealerText'), notes: t('headSpecialSummer2015HealerNotes', {int: 7}), value: 60, int: 7 - # Fall 2015 - fall2015Rogue: event: events.fall2015, specialClass: 'rogue', text: t('headSpecialFall2015RogueText'), notes: t('headSpecialFall2015RogueNotes', {per: 9}),value: 60,per: 9 - fall2015Warrior: event: events.fall2015, specialClass: 'warrior', text: t('headSpecialFall2015WarriorText'), notes: t('headSpecialFall2015WarriorNotes', {str: 9}),value: 60,str: 9 - fall2015Mage: event: events.fall2015, specialClass: 'wizard', text: t('headSpecialFall2015MageText'), notes: t('headSpecialFall2015MageNotes', {per: 7}),value: 60,per: 7 - fall2015Healer: event: events.fall2015, specialClass: 'healer', text: t('headSpecialFall2015HealerText'), notes: t('headSpecialFall2015HealerNotes', {int: 7}), value: 60, int: 7 - # Other - gaymerx: event: events.gaymerx, text: t('headSpecialGaymerxText'), notes: t('headSpecialGaymerxNotes'), value: 0 - mystery: - 201402: text: t('headMystery201402Text'), notes: t('headMystery201402Notes'), mystery:'201402', value: 0 - 201405: text: t('headMystery201405Text'), notes: t('headMystery201405Notes'), mystery:'201405', value: 0 - 201406: text: t('headMystery201406Text'), notes: t('headMystery201406Notes'), mystery:'201406', value: 0 - 201407: text: t('headMystery201407Text'), notes: t('headMystery201407Notes'), mystery:'201407', value: 0 - 201408: text: t('headMystery201408Text'), notes: t('headMystery201408Notes'), mystery:'201408', value: 0 - 201411: text: t('headMystery201411Text'), notes: t('headMystery201411Notes'), mystery:'201411', value: 0 - 201412: text: t('headMystery201412Text'), notes: t('headMystery201412Notes'), mystery:'201412', value: 0 - 201501: text: t('headMystery201501Text'), notes: t('headMystery201501Notes'), mystery:'201501', value: 0 - 201505: text: t('headMystery201505Text'), notes: t('headMystery201505Notes'), mystery:'201505', value: 0 - 201508: text: t('headMystery201508Text'), notes: t('headMystery201508Notes'), mystery:'201508', value: 0 - 201509: text: t('headMystery201509Text'), notes: t('headMystery201509Notes'), mystery:'201509', value: 0 - 301404: text: t('headMystery301404Text'), notes: t('headMystery301404Notes'), mystery:'301404', value: 0 - 301405: text: t('headMystery301405Text'), notes: t('headMystery301405Notes'), mystery:'301405', value: 0 - armoire: - lunarCrown: text: t('headArmoireLunarCrownText'), notes: t('headArmoireLunarCrownNotes', {con: 7, per: 7}), value: 100, con: 7, per: 7, set: 'soothing', canOwn: ((u)-> u.items.gear.owned.head_armoire_lunarCrown?) - redHairbow: text: t('headArmoireRedHairbowText'), notes: t('headArmoireRedHairbowNotes', {str: 5, int: 5, con: 5}), value: 100, str: 5, int: 5, con: 5, canOwn: ((u)-> u.items.gear.owned.head_armoire_redHairbow?) - violetFloppyHat: text: t('headArmoireVioletFloppyHatText'), notes: t('headArmoireVioletFloppyHatNotes', {per: 5, int: 5, con: 5}), value: 100, per: 5, int: 5, con: 5, canOwn: ((u)-> u.items.gear.owned.head_armoire_violetFloppyHat?) - gladiatorHelm: text: t('headArmoireGladiatorHelmText'), notes: t('headArmoireGladiatorHelmNotes', {per: 7, int: 7}), value: 100, per: 7, int: 7, set: 'gladiator', canOwn: ((u)-> u.items.gear.owned.head_armoire_gladiatorHelm?) - rancherHat: text: t('headArmoireRancherHatText'), notes: t('headArmoireRancherHatNotes', {str: 5, per: 5, int: 5}), value: 100, str: 5, per: 5, int: 5, set: 'rancher', canOwn: ((u)-> u.items.gear.owned.head_armoire_rancherHat?) - royalCrown: text: t('headArmoireRoyalCrownText'), notes: t('headArmoireRoyalCrownNotes', {str: 10}), value: 100, str: 10, canOwn: ((u)-> u.items.gear.owned.head_armoire_royalCrown?) - blueHairbow: text: t('headArmoireBlueHairbowText'), notes: t('headArmoireBlueHairbowNotes', {per: 5, int: 5, con: 5}), value: 100, per: 5, int: 5, con: 5, canOwn: ((u)-> u.items.gear.owned.head_armoire_blueHairbow?) - goldenLaurels: text: t('headArmoireGoldenLaurelsText'), notes: t('headArmoireGoldenLaurelsNotes', {attrs: 8}), value: 100, per: 8, con: 8, set: 'goldenToga', canOwn: ((u)-> u.items.gear.owned.head_armoire_goldenLaurels?) - hornedIronHelm: text: t('headArmoireHornedIronHelmText'), notes: t('headArmoireHornedIronHelmNotes', {con: 9, str: 7}), value: 100, con: 9, str:7, set: 'hornedIron', canOwn: ((u)-> u.items.gear.owned.head_armoire_hornedIronHelm?) - yellowHairbow: text: t('headArmoireYellowHairbowText'), notes: t('headArmoireYellowHairbowNotes', {attrs: 5}), value: 100, int: 5, per: 5, str: 5, canOwn: ((u)-> u.items.gear.owned.head_armoire_yellowHairbow?) - redFloppyHat: text: t('headArmoireRedFloppyHatText'), notes: t('headArmoireRedFloppyHatNotes', {attrs: 6}), value: 100, con: 6, int: 6, per: 6, canOwn: ((u)-> u.items.gear.owned.head_armoire_redFloppyHat?) - plagueDoctorHat: text: t('headArmoirePlagueDoctorHatText'), notes: t('headArmoirePlagueDoctorHatNotes', {int: 5, str: 6, con: 5}), value: 100, int: 5, str: 6, con: 5, set: 'plagueDoctor', canOwn: ((u)-> u.items.gear.owned.head_armoire_plagueDoctorHat?) - blackCat: text: t('headArmoireBlackCatText'), notes: t('headArmoireBlackCatNotes', {attrs: 9}), value: 100, int: 9, per: 9, canOwn: ((u)-> u.items.gear.owned.head_armoire_blackCat?) - orangeCat: text: t('headArmoireOrangeCatText'), notes: t('headArmoireOrangeCatNotes', {attrs: 9}), value: 100, con: 9, str: 9, canOwn: ((u)-> u.items.gear.owned.head_armoire_orangeCat?) - - shield: - base: - 0: text: t('shieldBase0Text'), notes: t('shieldBase0Notes'), value:0 - #changed because this is what shows up for all classes, including those without shields - warrior: - #0: text: "No Shield", notes:'No shield.', value:0 - 1: text: t('shieldWarrior1Text'), notes: t('shieldWarrior1Notes', {con: 2}), con: 2, value:20 - 2: text: t('shieldWarrior2Text'), notes: t('shieldWarrior2Notes', {con: 3}), con: 3, value:35 - 3: text: t('shieldWarrior3Text'), notes: t('shieldWarrior3Notes', {con: 5}), con: 5, value:50 - 4: text: t('shieldWarrior4Text'), notes: t('shieldWarrior4Notes', {con: 7}), con: 7, value:70 - 5: text: t('shieldWarrior5Text'), notes: t('shieldWarrior5Notes', {con: 9}), con: 9, value:90, last: true - rogue: - 0: text: t('weaponRogue0Text'), notes: t('weaponRogue0Notes'), str: 0, value: 0 - 1: text: t('weaponRogue1Text'), notes: t('weaponRogue1Notes', {str: 2}), str: 2, value: 20 - 2: text: t('weaponRogue2Text'), notes: t('weaponRogue2Notes', {str: 3}), str: 3, value: 35 - 3: text: t('weaponRogue3Text'), notes: t('weaponRogue3Notes', {str: 4}), str: 4, value: 50 - 4: text: t('weaponRogue4Text'), notes: t('weaponRogue4Notes', {str: 6}), str: 6, value: 70 - 5: text: t('weaponRogue5Text'), notes: t('weaponRogue5Notes', {str: 8}), str: 8, value: 90 - 6: text: t('weaponRogue6Text'), notes: t('weaponRogue6Notes', {str: 10}), str: 10, value: 120, last: true - wizard: {} - #0: text: "No Shield", notes:'No shield.', def: 0, value:0, last: true - healer: - #0: text: "No Shield", notes:'No shield.', def: 0, value:0 - 1: text: t('shieldHealer1Text'), notes: t('shieldHealer1Notes', {con: 2}), con: 2, value:20 - 2: text: t('shieldHealer2Text'), notes: t('shieldHealer2Notes', {con: 4}), con: 4, value:35 - 3: text: t('shieldHealer3Text'), notes: t('shieldHealer3Notes', {con: 6}), con: 6, value:50 - 4: text: t('shieldHealer4Text'), notes: t('shieldHealer4Notes', {con: 9}), con: 9, value:70 - 5: text: t('shieldHealer5Text'), notes: t('shieldHealer5Notes', {con: 12}), con: 12, value:90, last: true - special: - # Backer, Contributor, and Quest Rewards - 0: text: t('shieldSpecial0Text'), notes: t('shieldSpecial0Notes', {per: 20}), per: 20, value:150, canOwn: ((u)-> +u.backer?.tier >= 45) - 1: text: t('shieldSpecial1Text'), notes: t('shieldSpecial1Notes', {attrs: 6}), con: 6, str: 6, per: 6, int:6, value:170, canOwn: ((u)-> +u.contributor?.level >= 5) - goldenknight: text: t('shieldSpecialGoldenknightText'), notes: t('shieldSpecialGoldenknightNotes', {attrs: 25}), con: 25, per: 25, value:200, canOwn: ((u)-> u.items.gear.owned.shield_special_goldenknight?) - moonpearlShield: text: t('shieldSpecialMoonpearlShieldText'), notes: t('shieldSpecialMoonpearlShieldNotes', {con: 15}), con: 15, value: 130, canOwn: ((u)-> u.items.gear.owned.shield_special_moonpearlShield?) - # Winter Wonderland - yeti: event: events.winter, specialClass: 'warrior', text: t('shieldSpecialYetiText'), notes: t('shieldSpecialYetiNotes', {con: 7}), con: 7, value: 70 - ski: event: events.winter, specialClass: 'rogue', text: t('weaponSpecialSkiText'), notes: t('weaponSpecialSkiNotes', {str: 8}), str: 8, value: 90 - snowflake: event: events.winter, specialClass: 'healer', text: t('shieldSpecialSnowflakeText'), notes: t('shieldSpecialSnowflakeNotes', {con: 9}), con: 9, value: 70 - # Spring Fling - springRogue: event: events.spring, specialClass: 'rogue', text: t('shieldSpecialSpringRogueText'), notes: t('shieldSpecialSpringRogueNotes', {str: 8}), value: 80, str: 8 - springWarrior: event: events.spring, specialClass: 'warrior', text: t('shieldSpecialSpringWarriorText'), notes: t('shieldSpecialSpringWarriorNotes', {con: 7}), value: 70, con: 7 - springHealer: event: events.spring, specialClass: 'healer', text: t('shieldSpecialSpringHealerText'), notes: t('shieldSpecialSpringHealerNotes', {con: 9}), value: 70, con: 9 - # Summer Splash - summerRogue: event: events.summer, specialClass: 'rogue', text: t('shieldSpecialSummerRogueText'), notes: t('shieldSpecialSummerRogueNotes', {str: 8}), value: 80, str: 8 - summerWarrior: event: events.summer, specialClass: 'warrior', text: t('shieldSpecialSummerWarriorText'), notes: t('shieldSpecialSummerWarriorNotes', {con: 7}), value: 70, con: 7 - summerHealer: event: events.summer, specialClass: 'healer', text: t('shieldSpecialSummerHealerText'), notes: t('shieldSpecialSummerHealerNotes', {con: 9}), value: 70, con: 9 - # Fall Festival - fallRogue: event: events.fall, specialClass: 'rogue', text: t('shieldSpecialFallRogueText'), notes: t('shieldSpecialFallRogueNotes', {str: 8}), value: 80, str: 8, canBuy: (()->true) - fallWarrior: event: events.fall, specialClass: 'warrior', text: t('shieldSpecialFallWarriorText'), notes: t('shieldSpecialFallWarriorNotes', {con: 7}), value: 70, con: 7, canBuy: (()->true) - fallHealer: event: events.fall, specialClass: 'healer', text: t('shieldSpecialFallHealerText'), notes: t('shieldSpecialFallHealerNotes', {con: 9}), value: 70, con: 9, canBuy: (()->true) - # Winter 2015 - winter2015Rogue: event: events.winter2015, specialClass: 'rogue', text: t('shieldSpecialWinter2015RogueText'), notes: t('shieldSpecialWinter2015RogueNotes', {str: 8}), value: 80, str: 8 - winter2015Warrior: event: events.winter2015, specialClass: 'warrior', text: t('shieldSpecialWinter2015WarriorText'), notes: t('shieldSpecialWinter2015WarriorNotes', {con: 7}), value: 70, con: 7 - winter2015Healer: event: events.winter2015, specialClass: 'healer', text: t('shieldSpecialWinter2015HealerText'), notes: t('shieldSpecialWinter2015HealerNotes', {con: 9}), value: 70, con: 9 - # Spring 2015 - spring2015Rogue: event: events.spring2015, specialClass: 'rogue', text: t('shieldSpecialSpring2015RogueText'), notes: t('shieldSpecialSpring2015RogueNotes', {str: 8}), value: 80, str: 8 - spring2015Warrior: event: events.spring2015, specialClass: 'warrior', text: t('shieldSpecialSpring2015WarriorText'), notes: t('shieldSpecialSpring2015WarriorNotes', {con: 7}), value: 70, con: 7 - spring2015Healer: event: events.spring2015, specialClass: 'healer', text: t('shieldSpecialSpring2015HealerText'), notes: t('shieldSpecialSpring2015HealerNotes', {con: 9}), value: 70, con: 9 - # Summer 2015 - summer2015Rogue: event: events.summer2015, specialClass: 'rogue', text: t('shieldSpecialSummer2015RogueText'), notes: t('shieldSpecialSummer2015RogueNotes', {str: 8}), value: 80, str: 8 - summer2015Warrior: event: events.summer2015, specialClass: 'warrior', text: t('shieldSpecialSummer2015WarriorText'), notes: t('shieldSpecialSummer2015WarriorNotes', {con: 7}), value: 70, con: 7 - summer2015Healer: event: events.summer2015, specialClass: 'healer', text: t('shieldSpecialSummer2015HealerText'), notes: t('shieldSpecialSummer2015HealerNotes', {con: 9}), value: 70, con: 9 - # Fall 2015 - fall2015Rogue: event: events.fall2015, specialClass: 'rogue', text: t('shieldSpecialFall2015RogueText'), notes: t('shieldSpecialFall2015RogueNotes', {str: 8}), value: 80, str: 8 - fall2015Warrior: event: events.fall2015, specialClass: 'warrior', text: t('shieldSpecialFall2015WarriorText'), notes: t('shieldSpecialFall2015WarriorNotes', {con: 7}), value: 70, con: 7 - fall2015Healer: event: events.fall2015, specialClass: 'healer', text: t('shieldSpecialFall2015HealerText'), notes: t('shieldSpecialFall2015HealerNotes', {con: 9}), value: 70, con: 9 - mystery: - 301405: text: t('shieldMystery301405Text'), notes: t('shieldMystery301405Notes'), mystery:'301405', value: 0 - armoire: - gladiatorShield: text: t('shieldArmoireGladiatorShieldText'), notes: t('shieldArmoireGladiatorShieldNotes', {con: 5, str: 5}), value: 100, con: 5, str: 5, set: 'gladiator', canOwn: ((u)-> u.items.gear.owned.shield_armoire_gladiatorShield?) - midnightShield: text: t('shieldArmoireMidnightShieldText'), notes: t('shieldArmoireMidnightShieldNotes', {con: 10, str: 2}), value: 100, con: 10, str: 2, canOwn: ((u)-> u.items.gear.owned.shield_armoire_midnightShield?) - - back: - base: - 0: text: t('backBase0Text'), notes: t('backBase0Notes'), value:0 - mystery: - 201402: text: t('backMystery201402Text'), notes: t('backMystery201402Notes'), mystery:'201402', value: 0 - 201404: text: t('backMystery201404Text'), notes: t('backMystery201404Notes'), mystery:'201404', value: 0 - 201410: text: t('backMystery201410Text'), notes: t('backMystery201410Notes'), mystery:'201410', value: 0 - 201504: text: t('backMystery201504Text'), notes: t('backMystery201504Notes'), mystery:'201504', value: 0 - 201507: text: t('backMystery201507Text'), notes: t('backMystery201507Notes'), mystery:'201507', value: 0 - special: - wondercon_red: text: t('backSpecialWonderconRedText'), notes: t('backSpecialWonderconRedNotes'), value: 0, mystery:'wondercon' - wondercon_black: text: t('backSpecialWonderconBlackText'), notes: t('backSpecialWonderconBlackNotes'), value: 0, mystery:'wondercon' - - body: - base: - 0: text: t('bodyBase0Text'), notes:t('bodyBase0Notes'), value:0 - special: - wondercon_red: text: t('bodySpecialWonderconRedText'), notes: t('bodySpecialWonderconRedNotes'), value: 0, mystery:'wondercon' - wondercon_gold: text: t('bodySpecialWonderconGoldText'), notes: t('bodySpecialWonderconGoldNotes'), value: 0, mystery:'wondercon' - wondercon_black: text: t('bodySpecialWonderconBlackText'), notes: t('bodySpecialWonderconBlackNotes'), value: 0, mystery:'wondercon' - # Summer - summerHealer: event: events.summer, specialClass: 'healer', text: t('bodySpecialSummerHealerText'), notes: t('bodySpecialSummerHealerNotes'), value: 20 - summerMage: event: events.summer, specialClass: 'wizard', text: t('bodySpecialSummerMageText'), notes: t('bodySpecialSummerMageNotes'), value: 20 - # Summer 2015 - summer2015Healer: event: events.summer2015, specialClass: 'healer', text: t('bodySpecialSummer2015HealerText'), notes: t('bodySpecialSummer2015HealerNotes'), value: 20 - summer2015Mage: event: events.summer2015, specialClass: 'wizard', text: t('bodySpecialSummer2015MageText'), notes: t('bodySpecialSummer2015MageNotes'), value: 20 - summer2015Rogue: event: events.summer2015, specialClass: 'rogue', text: t('bodySpecialSummer2015RogueText'), notes: t('bodySpecialSummer2015RogueNotes'), value: 20 - summer2015Warrior: event: events.summer2015, specialClass: 'warrior', text: t('bodySpecialSummer2015WarriorText'), notes: t('bodySpecialSummer2015WarriorNotes'), value: 20 - - headAccessory: - base: - 0: text: t('headAccessoryBase0Text'), notes: t('headAccessoryBase0Notes'), value: 0, last: true - special: - # Spring Event - springRogue: event: events.spring, specialClass: 'rogue', text: t('headAccessorySpecialSpringRogueText'), notes: t('headAccessorySpecialSpringRogueNotes'), value: 20 - springWarrior: event: events.spring, specialClass: 'warrior', text: t('headAccessorySpecialSpringWarriorText'), notes: t('headAccessorySpecialSpringWarriorNotes'), value: 20 - springMage: event: events.spring, specialClass: 'wizard', text: t('headAccessorySpecialSpringMageText'), notes: t('headAccessorySpecialSpringMageNotes'), value: 20 - springHealer: event: events.spring, specialClass: 'healer', text: t('headAccessorySpecialSpringHealerText'), notes: t('headAccessorySpecialSpringHealerNotes'), value: 20 - # Spring 2015 - spring2015Rogue: event: events.spring2015, specialClass: 'rogue', text: t('headAccessorySpecialSpring2015RogueText'), notes: t('headAccessorySpecialSpring2015RogueNotes'), value: 20 - spring2015Warrior: event: events.spring2015, specialClass: 'warrior', text: t('headAccessorySpecialSpring2015WarriorText'), notes: t('headAccessorySpecialSpring2015WarriorNotes'), value: 20 - spring2015Mage: event: events.spring2015, specialClass: 'wizard', text: t('headAccessorySpecialSpring2015MageText'), notes: t('headAccessorySpecialSpring2015MageNotes'), value: 20 - spring2015Healer: event: events.spring2015, specialClass: 'healer', text: t('headAccessorySpecialSpring2015HealerText'), notes: t('headAccessorySpecialSpring2015HealerNotes'), value: 20 - # Animal ears - bearEars: gearSet: 'animal', text: t('headAccessoryBearEarsText'), notes: t('headAccessoryBearEarsNotes'), value: 20, canOwn: ((u)-> u.items.gear.owned.headAccessory_special_bearEars?), canBuy: (()->true) - cactusEars: gearSet: 'animal', text: t('headAccessoryCactusEarsText'), notes: t('headAccessoryCactusEarsNotes'), value: 20, canOwn: ((u)-> u.items.gear.owned.headAccessory_special_cactusEars?), canBuy: (()->true) - foxEars: gearSet: 'animal', text: t('headAccessoryFoxEarsText'), notes: t('headAccessoryFoxEarsNotes'), value: 20, canOwn: ((u)-> u.items.gear.owned.headAccessory_special_foxEars?), canBuy: (()->true) - lionEars: gearSet: 'animal', text: t('headAccessoryLionEarsText'), notes: t('headAccessoryLionEarsNotes'), value: 20, canOwn: ((u)-> u.items.gear.owned.headAccessory_special_lionEars?), canBuy: (()->true) - pandaEars: gearSet: 'animal', text: t('headAccessoryPandaEarsText'), notes: t('headAccessoryPandaEarsNotes'), value: 20, canOwn: ((u)-> u.items.gear.owned.headAccessory_special_pandaEars?), canBuy: (()->true) - pigEars: gearSet: 'animal', text: t('headAccessoryPigEarsText'), notes: t('headAccessoryPigEarsNotes'), value: 20, canOwn: ((u)-> u.items.gear.owned.headAccessory_special_pigEars?), canBuy: (()->true) - tigerEars: gearSet: 'animal', text: t('headAccessoryTigerEarsText'), notes: t('headAccessoryTigerEarsNotes'), value: 20, canOwn: ((u)-> u.items.gear.owned.headAccessory_special_tigerEars?), canBuy: (()->true) - wolfEars: gearSet: 'animal', text: t('headAccessoryWolfEarsText'), notes: t('headAccessoryWolfEarsNotes'), value: 20, canOwn: ((u)-> u.items.gear.owned.headAccessory_special_wolfEars?), canBuy: (()->true) - mystery: - 201403: text: t('headAccessoryMystery201403Text'), notes: t('headAccessoryMystery201403Notes'), mystery:'201403', value: 0 - 201404: text: t('headAccessoryMystery201404Text'), notes: t('headAccessoryMystery201404Notes'), mystery:'201404', value: 0 - 201409: text: t('headAccessoryMystery201409Text'), notes: t('headAccessoryMystery201409Notes'), mystery:'201409', value: 0 - 201502: text: t('headAccessoryMystery201502Text'), notes: t('headAccessoryMystery201502Notes'), mystery:'201502', value: 0 - 301405: text: t('headAccessoryMystery301405Text'), notes: t('headAccessoryMystery301405Notes'), mystery:'301405', value: 0 - - eyewear: - base: - 0: text: t('eyewearBase0Text'), notes: t('eyewearBase0Notes'), value: 0, last: true - special: - wondercon_red: text: t('eyewearSpecialWonderconRedText'), notes: t('eyewearSpecialWonderconRedNotes'), value: 0, mystery:'wondercon' - wondercon_black: text: t('eyewearSpecialWonderconBlackText'), notes: t('eyewearSpecialWonderconBlackNotes'), value: 0, mystery:'wondercon' - #Summer - summerRogue: event: events.summer, specialClass: 'rogue', text: t('eyewearSpecialSummerRogueText'), notes: t('eyewearSpecialSummerRogueNotes'), value: 20 - summerWarrior: event: events.summer, specialClass: 'warrior', text: t('eyewearSpecialSummerWarriorText'), notes: t('eyewearSpecialSummerWarriorNotes'), value: 20 - mystery: - 201503: text: t('eyewearMystery201503Text'), notes: t('eyewearMystery201503Notes'), mystery:'201503', value: 0 - 201506: text: t('eyewearMystery201506Text'), notes: t('eyewearMystery201506Notes'), mystery:'201506', value: 0 - 201507: text: t('eyewearMystery201507Text'), notes: t('eyewearMystery201507Notes'), mystery:'201507', value: 0 - 301404: text: t('eyewearMystery301404Text'), notes: t('eyewearMystery301404Notes'), mystery:'301404', value: 0 - 301405: text: t('eyewearMystery301405Text'), notes: t('eyewearMystery301405Notes'), mystery:'301405', value: 0 - armoire: - plagueDoctorMask: text: t('eyewearArmoirePlagueDoctorMaskText'), notes: t('eyewearArmoirePlagueDoctorMaskNotes'), value: 100, set: 'plagueDoctor', canOwn: ((u)-> u.items.gear.owned.eyewear_armoire_plagueDoctorMask?) - -### - The gear is exported as a tree (defined above), and a flat list (eg, {weapon_healer_1: .., shield_special_0: ...}) since - they are needed in different forms at different points in the app -### -api.gear = - tree: gear - flat: {} - -_.each gearTypes, (type) -> - _.each classes.concat(['base', 'special', 'mystery', 'armoire']), (klass) -> - # add "type" to each item, so we can reference that as "weapon" or "armor" in the html - _.each gear[type][klass], (item, i) -> - key = "#{type}_#{klass}_#{i}" - _.defaults item, {type, key, klass, index: i, str:0, int:0, per:0, con:0, canBuy:(()->false)} - - if item.event - #? indicates null/undefined. true means they own currently, false means they once owned - and false is what we're - # after (they can buy back if they bought it during the event's timeframe) - _canOwn = item.canOwn or (->true) - item.canOwn = (u)-> - _canOwn(u) and - (u.items.gear.owned[key]? or (moment().isAfter(item.event.start) and moment().isBefore(item.event.end))) and - (if item.specialClass then (u.stats.class is item.specialClass) else true) - - if item.mystery - item.canOwn = (u)-> u.items.gear.owned[key]? - - api.gear.flat[key] = item - -### - Time Traveler Store, mystery sets need their items mapped in -### -_.each api.mystery, (v,k)-> v.items = _.where api.gear.flat, {mystery:k} -api.timeTravelerStore = (owned) -> - ownedKeys = _.keys owned.toObject?() or owned # mongoose workaround - _.reduce api.mystery, (m,v,k)-> - return m if k=='wondercon' or ~ownedKeys.indexOf(v.items[0].key) # skip wondercon and already-owned sets - m[k] = v;m - , {} - -### - --------------------------------------------------------------- - Unique Rewards: Potion and Armoire - --------------------------------------------------------------- -### - -api.potion = - type: 'potion', - text: t('potionText'), - notes: t('potionNotes'), - value: 25, - key: 'potion' - -api.armoire = - type: 'armoire', - text: t('armoireText'), - notes: ((user, count)-> - return t('armoireNotesEmpty')() if (user.flags.armoireEmpty) - return t('armoireNotesFull')() + count - ), - value: 100, - key: 'armoire', - canOwn: ((u)-> _.contains(u.achievements.ultimateGearSets, true)) - -### - --------------------------------------------------------------- - Classes - --------------------------------------------------------------- -### - -api.classes = classes - -### - --------------------------------------------------------------- - Gear Types - --------------------------------------------------------------- -### - -api.gearTypes = gearTypes - -### - --------------------------------------------------------------- - Spells - --------------------------------------------------------------- - Text, notes, and mana are obvious. The rest: - - * {target}: one of [task, self, party, user]. This is very important, because if the cast() function is expecting one - thing and receives another, it will cause errors. `self` is used for self buffs, multi-task debuffs, AOEs (eg, meteor-shower), - etc. Basically, use self for anything that's not [task, party, user] and is an instant-cast - - * {cast}: the function that's run to perform the ability's action. This is pretty slick - because this is exported to the - web, this function can be performed on the client and on the server. `user` param is self (needed for determining your - own stats for effectiveness of cast), and `target` param is one of [task, party, user]. In the case of `self` spells, - you act on `user` instead of `target`. You can trust these are the correct objects, as long as the `target` attr of the - spell is correct. Take a look at habitrpg/src/models/user.js and habitrpg/src/models/task.js for what attributes are - available on each model. Note `task.value` is its "redness". If party is passed in, it's an array of users, - so you'll want to iterate over them like: `_.each(target,function(member){...})` - - Note, user.stats.mp is docked after automatically (it's appended to functions automatically down below in an _.each) -### - -# -diminishingReturns = (bonus, max, halfway=max/2) -> max*(bonus/(bonus+halfway)) - -calculateBonus = (value, stat, crit=1, stat_scale=0.5) -> (if value < 0 then 1 else value+1) + (stat * stat_scale * crit) - -api.spells = - - wizard: - fireball: - # Burst of Flames - text: t('spellWizardFireballText') - mana: 10 - lvl: 11 - target: 'task' - notes: t('spellWizardFireballNotes') - cast: (user, target) -> - bonus = user._statsComputed.int * user.fns.crit('per') - bonus *= Math.ceil ((if target.value < 0 then 1 else target.value+1) *.075) - user.stats.exp += diminishingReturns(bonus,75) - user.party.quest.progress.up ?= 0 - user.party.quest.progress.up += Math.ceil(user._statsComputed.int * .1) - # Sync the user stats to see if we level the user - req = { language: user.preferences.language } - user.fns.updateStats( user.stats , req ) - - mpheal: - # Ethereal Surge - text: t('spellWizardMPHealText') - mana: 30 - lvl: 12 - target: 'party' - notes: t('spellWizardMPHealNotes'), - cast: (user, target)-> - _.each target, (member) -> - bonus = user._statsComputed.int - if user._id != member._id - member.stats.mp += Math.ceil(diminishingReturns(bonus, 25, 125)) # maxes out at 25 - - earth: - # Earthquake - text: t('spellWizardEarthText') - mana: 35 - lvl: 13 - target: 'party' - notes: t('spellWizardEarthNotes'), - cast: (user, target) -> - _.each target, (member) -> - bonus = user._statsComputed.int - user.stats.buffs.int - member.stats.buffs.int ?= 0 - member.stats.buffs.int += Math.ceil(diminishingReturns(bonus, 30,200)) - - frost: - # Chilling Frost - text: t('spellWizardFrostText'), - mana: 40 - lvl: 14 - target: 'self' - notes: t('spellWizardFrostNotes'), - cast: (user, target) -> - user.stats.buffs.streaks = true - - warrior: - smash: - # Brutal Smash - text: t('spellWarriorSmashText') - mana: 10 - lvl: 11 - target: 'task' - notes: t('spellWarriorSmashNotes') - cast: (user, target) -> - bonus = user._statsComputed.str * user.fns.crit('con') - target.value += diminishingReturns(bonus, 2.5, 35) - user.party.quest.progress.up ?= 0 - user.party.quest.progress.up += diminishingReturns(bonus, 55, 70) - - defensiveStance: - # Defensive Stance - text: t('spellWarriorDefensiveStanceText') - mana: 25 - lvl: 12 - target: 'self' - notes: t('spellWarriorDefensiveStanceNotes') - cast: (user, target) -> - bonus = user._statsComputed.con - user.stats.buffs.con - user.stats.buffs.con ?= 0 - user.stats.buffs.con += Math.ceil(diminishingReturns(bonus, 40, 200)) - - valorousPresence: - # Valorous Presence - text: t('spellWarriorValorousPresenceText') - mana: 20 - lvl: 13 - target: 'party' - notes: t('spellWarriorValorousPresenceNotes') - cast: (user, target) -> - _.each target, (member) -> - bonus = user._statsComputed.str - user.stats.buffs.str - member.stats.buffs.str ?= 0 - member.stats.buffs.str += Math.ceil(diminishingReturns(bonus, 20, 200)) - - intimidate: - # Intimidating Gaze - text: t('spellWarriorIntimidateText') - mana: 15 - lvl: 14 - target: 'party' - notes: t('spellWarriorIntimidateNotes') - cast: (user, target) -> - _.each target, (member) -> - bonus = user._statsComputed.con - user.stats.buffs.con - member.stats.buffs.con ?= 0 - member.stats.buffs.con += Math.ceil(diminishingReturns(bonus,24,200)) - - rogue: - pickPocket: - # Pickpocket - text: t('spellRoguePickPocketText') - mana: 10 - lvl: 11 - target: 'task' - notes: t('spellRoguePickPocketNotes') - cast: (user, target) -> - bonus = calculateBonus(target.value, user._statsComputed.per) - user.stats.gp += diminishingReturns(bonus, 25, 75) - - backStab: - # Backstab - text: t('spellRogueBackStabText') - mana: 15 - lvl: 12 - target: 'task' - notes: t('spellRogueBackStabNotes') - cast: (user, target) -> - _crit = user.fns.crit('str', .3) - bonus = calculateBonus(target.value, user._statsComputed.str, _crit) - user.stats.exp += diminishingReturns(bonus, 75, 50) - user.stats.gp += diminishingReturns(bonus, 18, 75) - # Sync the user stats to see if we level the user - req = { language: user.preferences.language } - user.fns.updateStats( user.stats , req ) - - toolsOfTrade: - # Tools of the Trade - text: t('spellRogueToolsOfTradeText') - mana: 25 - lvl: 13 - target: 'party' - notes: t('spellRogueToolsOfTradeNotes') - cast: (user, target) -> - _.each target, (member) -> - bonus = user._statsComputed.per - user.stats.buffs.per - member.stats.buffs.per ?= 0 - member.stats.buffs.per += Math.ceil(diminishingReturns(bonus, 100, 50)) - - stealth: - # Stealth - text: t('spellRogueStealthText') - mana: 45 - lvl: 14 - target: 'self' - notes: t('spellRogueStealthNotes') - cast: (user, target) -> - user.stats.buffs.stealth ?= 0 - ## scales to user's # of dailies; Diminishing Returns, maxes out at 64%, halfway point at 55 PER## - user.stats.buffs.stealth += Math.ceil( diminishingReturns(user._statsComputed.per, user.dailys.length*0.64,55)) - - healer: - heal: - # Healing Light - text: t('spellHealerHealText') - mana: 15 - lvl: 11 - target: 'self' - notes: t('spellHealerHealNotes') - cast: (user, target) -> - user.stats.hp += (user._statsComputed.con + user._statsComputed.int + 5) * .075 - user.stats.hp = 50 if user.stats.hp > 50 - - brightness: - # Searing Brightness - text: t('spellHealerBrightnessText') - mana: 15 - lvl: 12 - target: 'self' - notes: t('spellHealerBrightnessNotes') - cast: (user, target) -> - _.each user.tasks, (target) -> - return if target.type is 'reward' - target.value += 4 * (user._statsComputed.int / (user._statsComputed.int + 40)) - - protectAura: - # Protective Aura - text: t('spellHealerProtectAuraText') - mana: 30 - lvl: 13 - target: 'party' - notes: t('spellHealerProtectAuraNotes') - cast: (user, target) -> - _.each target, (member) -> - bonus = user._statsComputed.con - user.stats.buffs.con - member.stats.buffs.con ?= 0 - member.stats.buffs.con += Math.ceil(diminishingReturns(bonus, 200, 200)) - - heallAll: - # Blessing - text: t('spellHealerHealAllText') - mana: 25 - lvl: 14 - target: 'party' - notes: t('spellHealerHealAllNotes') - cast: (user, target) -> - _.each target, (member) -> - member.stats.hp += (user._statsComputed.con + user._statsComputed.int + 5) * .04 - member.stats.hp = 50 if member.stats.hp > 50 - - special: - snowball: - text: t('spellSpecialSnowballAuraText') - mana: 0 - value: 15 - target: 'user' - notes: t('spellSpecialSnowballAuraNotes') - cast: (user, target) -> - target.stats.buffs.snowball = true - target.stats.buffs.spookDust = false - target.stats.buffs.shinySeed = false - target.stats.buffs.seafoam = false - target.achievements.snowball ?= 0 - target.achievements.snowball++ - user.items.special.snowball-- - - salt: - text: t('spellSpecialSaltText') - mana: 0 - value: 5 - immediateUse: true - target: 'self' - notes: t('spellSpecialSaltNotes') - cast: (user, target) -> - user.stats.buffs.snowball = false - user.stats.gp -= 5 - - spookDust: - text: t('spellSpecialSpookDustText') - mana: 0 - value: 15 - target: 'user' - notes: t('spellSpecialSpookDustNotes') - cast: (user, target) -> - target.stats.buffs.snowball = false - target.stats.buffs.spookDust = true - target.stats.buffs.shinySeed = false - target.stats.buffs.seafoam = false - target.achievements.spookDust ?= 0 - target.achievements.spookDust++ - user.items.special.spookDust-- - - opaquePotion: - text: t('spellSpecialOpaquePotionText') - mana: 0 - value: 5 - immediateUse: true - target: 'self' - notes: t('spellSpecialOpaquePotionNotes') - cast: (user, target) -> - user.stats.buffs.spookDust = false - user.stats.gp -= 5 - - shinySeed: - text: t('spellSpecialShinySeedText') - mana: 0 - value: 15 - target: 'user' - notes: t('spellSpecialShinySeedNotes') - cast: (user, target) -> - target.stats.buffs.snowball = false - target.stats.buffs.spookDust = false - target.stats.buffs.shinySeed = true - target.stats.buffs.seafoam = false - target.achievements.shinySeed ?= 0 - target.achievements.shinySeed++ - user.items.special.shinySeed-- - - petalFreePotion: - text: t('spellSpecialPetalFreePotionText') - mana: 0 - value: 5 - immediateUse: true - target: 'self' - notes: t('spellSpecialPetalFreePotionNotes') - cast: (user, target) -> - user.stats.buffs.shinySeed = false - user.stats.gp -= 5 - - seafoam: - text: t('spellSpecialSeafoamText') - mana: 0 - value: 15 - target: 'user' - notes: t('spellSpecialSeafoamNotes') - cast: (user, target) -> - target.stats.buffs.snowball = false - target.stats.buffs.spookDust = false - target.stats.buffs.shinySeed = false - target.stats.buffs.seafoam = true - target.achievements.seafoam ?= 0 - target.achievements.seafoam++ - user.items.special.seafoam-- - - sand: - text: t('spellSpecialSandText') - mana: 0 - value: 5 - immediateUse: true - target: 'self' - notes: t('spellSpecialSandNotes') - cast: (user, target) -> - user.stats.buffs.seafoam = false - user.stats.gp -= 5 - - nye: - text: t('nyeCard') - mana: 0 - value: 10 - immediateUse: true - silent: true - target: 'user' - notes: t('nyeCardNotes') - cast: (user, target) -> - if user == target - user.achievements.nye ?= 0 - user.achievements.nye++ - else - _.each [user,target], (t)-> - t.achievements.nye ?= 0 - t.achievements.nye++ - if !target.items.special.nyeReceived - target.items.special.nyeReceived = [] - target.items.special.nyeReceived.push user.profile.name - target.flags.cardReceived = true - - target.markModified? 'items.special.nyeReceived' - user.stats.gp -= 10 - - valentine: - text: t('valentineCard') - mana: 0 - value: 10 - immediateUse: true - silent: true - target: 'user' - notes: t('valentineCardNotes') - cast: (user, target) -> - if user == target - user.achievements.valentine ?= 0 - user.achievements.valentine++ - else - _.each [user,target], (t)-> - t.achievements.valentine ?= 0 - t.achievements.valentine++ - if !target.items.special.valentineReceived - target.items.special.valentineReceived = [] - target.items.special.valentineReceived.push user.profile.name - target.flags.cardReceived = true - - target.markModified? 'items.special.valentineReceived' - user.stats.gp -= 10 - - greeting: - text: t('greetingCard') - mana: 0 - value: 10 - immediateUse: true - silent: true - target: 'user' - notes: t('greetingCardNotes') - cast: (user, target) -> - if user == target - user.achievements.greeting ?= 0 - user.achievements.greeting++ - else - _.each [user,target], (t)-> - t.achievements.greeting ?= 0 - t.achievements.greeting++ - if !target.items.special.greetingReceived - target.items.special.greetingReceived = [] - target.items.special.greetingReceived.push user.profile.name - target.flags.cardReceived = true - - target.markModified? 'items.special.greetingReceived' - user.stats.gp -= 10 - - thankyou: - text: t('thankyouCard') - mana: 0 - value: 10 - immediateUse: true - silent: true - target: 'user' - notes: t('thankyouCardNotes') - cast: (user, target) -> - if user == target - user.achievements.thankyou ?= 0 - user.achievements.thankyou++ - else - _.each [user,target], (t)-> - t.achievements.thankyou ?= 0 - t.achievements.thankyou++ - if !target.items.special.thankyouReceived - target.items.special.thankyouReceived = [] - target.items.special.thankyouReceived.push user.profile.name - target.flags.cardReceived = true - - target.markModified? 'items.special.thankyouReceived' - user.stats.gp -= 10 - -api.cardTypes = - greeting: - key: 'greeting' - messageOptions: 4 - yearRound: true - nye: - key: 'nye' - messageOptions: 5 - thankyou: - key: 'thankyou' - messageOptions: 4 - yearRound: true - valentine: - key: 'valentine' - messageOptions: 4 - -# Intercept all spells to reduce user.stats.mp after casting the spell -_.each api.spells, (spellClass) -> - _.each spellClass, (spell, key) -> - spell.key = key - _cast = spell.cast - spell.cast = (user, target) -> - #return if spell.target and spell.target != (if target.type then 'task' else 'user') - _cast(user,target) - user.stats.mp -= spell.mana - -api.special = api.spells.special - -### - --------------------------------------------------------------- - Drops - --------------------------------------------------------------- -### - -api.dropEggs = - # value & other defaults set below - Wolf: text: t('dropEggWolfText'), adjective: t('dropEggWolfAdjective') - TigerCub: text: t('dropEggTigerCubText'), mountText: t('dropEggTigerCubMountText'), adjective: t('dropEggTigerCubAdjective') - PandaCub: text: t('dropEggPandaCubText'), mountText: t('dropEggPandaCubMountText'), adjective: t('dropEggPandaCubAdjective') - LionCub: text: t('dropEggLionCubText'), mountText: t('dropEggLionCubMountText'), adjective: t('dropEggLionCubAdjective') - Fox: text: t('dropEggFoxText'), adjective: t('dropEggFoxAdjective') - FlyingPig: text: t('dropEggFlyingPigText'), adjective: t('dropEggFlyingPigAdjective') - Dragon: text: t('dropEggDragonText'), adjective: t('dropEggDragonAdjective') - Cactus: text: t('dropEggCactusText'), adjective: t('dropEggCactusAdjective') - BearCub: text: t('dropEggBearCubText'), mountText: t('dropEggBearCubMountText'), adjective: t('dropEggBearCubAdjective') - -_.each api.dropEggs, (egg,key) -> - _.defaults egg, - canBuy: (()->true) - value: 3 - key: key - notes: t('eggNotes', {eggText: egg.text, eggAdjective: egg.adjective}) - mountText: egg.text - -api.questEggs = - # value & other defaults set below - Gryphon: text: t('questEggGryphonText'), adjective: t('questEggGryphonAdjective'), canBuy: ((u)-> u.achievements.quests && u.achievements.quests.gryphon? > 0) - Hedgehog: text: t('questEggHedgehogText'), adjective: t('questEggHedgehogAdjective'), canBuy: ((u)-> u.achievements.quests && u.achievements.quests.hedgehog? > 0) - Deer: text: t('questEggDeerText'), adjective: t('questEggDeerAdjective'), canBuy: ((u)-> u.achievements.quests && u.achievements.quests.ghost_stag? > 0) - Egg: text: t('questEggEggText'), adjective: t('questEggEggAdjective'), mountText: t('questEggEggMountText') - Rat: text: t('questEggRatText'), adjective: t('questEggRatAdjective'), canBuy: ((u)-> u.achievements.quests && u.achievements.quests.rat? > 0) - Octopus: text: t('questEggOctopusText'), adjective: t('questEggOctopusAdjective'), canBuy: ((u)-> u.achievements.quests && u.achievements.quests.octopus? > 0) - Seahorse: text: t('questEggSeahorseText'), adjective: t('questEggSeahorseAdjective'), canBuy: ((u)-> u.achievements.quests && u.achievements.quests.dilatory_derby? > 0) - Parrot: text: t('questEggParrotText'), adjective: t('questEggParrotAdjective'), canBuy: ((u)-> u.achievements.quests && u.achievements.quests.harpy? > 0) - Rooster: text: t('questEggRoosterText'), adjective: t('questEggRoosterAdjective'), canBuy: ((u)-> u.achievements.quests && u.achievements.quests.rooster? > 0) - Spider: text: t('questEggSpiderText'), adjective: t('questEggSpiderAdjective'), canBuy: ((u)-> u.achievements.quests && u.achievements.quests.spider? > 0) - Owl: text: t('questEggOwlText'), adjective: t('questEggOwlAdjective'), canBuy: ((u)-> u.achievements.quests && u.achievements.quests.owl? > 0) - Penguin: text: t('questEggPenguinText'), adjective: t('questEggPenguinAdjective'), canBuy: ((u)-> u.achievements.quests && u.achievements.quests.penguin? > 0) - TRex: text: t('questEggTRexText'), adjective: t('questEggTRexAdjective'), canBuy: ((u)-> (u.achievements.quests && (u.achievements.quests.trex? > 0 or u.achievements.quests.trex_undead? > 0))) - Rock: text: t('questEggRockText'), adjective: t('questEggRockAdjective'), canBuy: ((u)-> u.achievements.quests && u.achievements.quests.rock? > 0) - Bunny: text: t('questEggBunnyText'), adjective: t('questEggBunnyAdjective'), canBuy: ((u)-> u.achievements.quests && u.achievements.quests.bunny? > 0) - Slime: text: t('questEggSlimeText'), adjective: t('questEggSlimeAdjective'), canBuy: ((u)-> u.achievements.quests && u.achievements.quests.slime? > 0) - Sheep: text: t('questEggSheepText'), adjective: t('questEggSheepAdjective'), canBuy: ((u)-> u.achievements.quests && u.achievements.quests.sheep? > 0) - Cuttlefish: text: t('questEggCuttlefishText'), adjective: t('questEggCuttlefishAdjective'), canBuy: ((u)-> u.achievements.quests && u.achievements.quests.kraken? > 0) - Whale: text: t('questEggWhaleText'), adjective: t('questEggWhaleAdjective'), canBuy: ((u)-> u.achievements.quests && u.achievements.quests.whale? > 0) - Cheetah: text: t('questEggCheetahText'), adjective: t('questEggCheetahAdjective'), canBuy: ((u)-> u.achievements.quests && u.achievements.quests.cheetah? > 0) - Horse: text: t('questEggHorseText'), adjective: t('questEggHorseAdjective'), canBuy: ((u)-> u.achievements.quests && u.achievements.quests.horse? > 0) - -_.each api.questEggs, (egg,key) -> - _.defaults egg, - canBuy: (()->false) - value: 3 - key: key - notes: t('eggNotes', {eggText: egg.text, eggAdjective: egg.adjective}) - mountText: egg.text - -api.eggs = _.assign(_.cloneDeep(api.dropEggs), api.questEggs) - -# special pets & mounts are {key:i18n} -api.specialPets = - 'Wolf-Veteran': 'veteranWolf' - 'Wolf-Cerberus': 'cerberusPup' - 'Dragon-Hydra': 'hydra' - 'Turkey-Base': 'turkey' - 'BearCub-Polar': 'polarBearPup' - 'MantisShrimp-Base': 'mantisShrimp' - 'JackOLantern-Base': 'jackolantern' - 'Mammoth-Base': 'mammoth' - 'Tiger-Veteran': 'veteranTiger' - 'Phoenix-Base': 'phoenix' - -api.specialMounts = - 'BearCub-Polar': 'polarBear' - 'LionCub-Ethereal': 'etherealLion' - 'MantisShrimp-Base': 'mantisShrimp' - 'Turkey-Base': 'turkey' - 'Mammoth-Base': 'mammoth' - 'Orca-Base': 'orca' - 'Gryphon-RoyalPurple': 'royalPurpleGryphon' - 'Phoenix-Base': 'phoenix' - 'JackOLantern-Base': 'jackolantern' - -api.timeTravelStable = - pets: - 'Mammoth-Base': t('mammoth') - 'MantisShrimp-Base': t('mantisShrimp') - mounts: - 'Mammoth-Base': t('mammoth') - 'MantisShrimp-Base': t('mantisShrimp') - -api.dropHatchingPotions = - Base: value: 2, text: t('hatchingPotionBase') - White: value: 2, text: t('hatchingPotionWhite') - Desert: value: 2, text: t('hatchingPotionDesert') - Red: value: 3, text: t('hatchingPotionRed') - Shade: value: 3, text: t('hatchingPotionShade') - Skeleton: value: 3, text: t('hatchingPotionSkeleton') - Zombie: value: 4, text: t('hatchingPotionZombie') - CottonCandyPink: value: 4, text: t('hatchingPotionCottonCandyPink') - CottonCandyBlue: value: 4, text: t('hatchingPotionCottonCandyBlue') - Golden: value: 5, text: t('hatchingPotionGolden') - -api.premiumHatchingPotions = - Spooky: value: 2, text: t('hatchingPotionSpooky'), addlNotes: t('premiumPotionAddlNotes'), premium: true, limited: true - -_.each api.dropHatchingPotions, (pot,key) -> - _.defaults pot, {key, value: 2, notes: t('hatchingPotionNotes', {potText: pot.text}), premium: false, limited: false, canBuy: (()->true)} - -_.each api.premiumHatchingPotions, (pot,key) -> - _.defaults pot, {key, value: 2, notes: t('hatchingPotionNotes', {potText: pot.text}), premium: true, limited: false, canBuy: (()->true)} - -api.hatchingPotions = {} -_.merge(api.hatchingPotions, api.dropHatchingPotions) -_.merge(api.hatchingPotions, api.premiumHatchingPotions) - -api.pets = _.transform api.dropEggs, (m, egg) -> - _.defaults m, _.transform api.hatchingPotions, (m2, pot) -> - if not pot.premium - m2[egg.key + "-" + pot.key] = true - -api.premiumPets = _.transform api.dropEggs, (m, egg) -> - _.defaults m, _.transform api.hatchingPotions, (m2, pot) -> - if pot.premium - m2[egg.key + "-" + pot.key] = true - -api.questPets = _.transform api.questEggs, (m, egg) -> - _.defaults m, _.transform api.hatchingPotions, (m2, pot) -> - if not pot.premium - m2[egg.key + "-" + pot.key] = true - -api.mounts = _.transform api.dropEggs, (m, egg) -> - _.defaults m, _.transform api.hatchingPotions, (m2, pot) -> - if not pot.premium - m2[egg.key + "-" + pot.key] = true - -api.questMounts = _.transform api.questEggs, (m, egg) -> - _.defaults m, _.transform api.hatchingPotions, (m2, pot) -> - if not pot.premium - m2[egg.key + "-" + pot.key] = true - -api.food = - # Base - Meat: text: t('foodMeat'), target: 'Base', article: '' - Milk: text: t('foodMilk'), target: 'White', article: '' - Potatoe: text: t('foodPotatoe'), target: 'Desert', article: 'a ' - Strawberry: text: t('foodStrawberry'), target: 'Red', article: 'a ' - Chocolate: text: t('foodChocolate'), target: 'Shade', article: '' - Fish: text: t('foodFish'), target: 'Skeleton', article: 'a ' - RottenMeat: text: t('foodRottenMeat'), target: 'Zombie', article: '' - CottonCandyPink: text: t('foodCottonCandyPink'), target: 'CottonCandyPink', article: '' - CottonCandyBlue: text: t('foodCottonCandyBlue'), target: 'CottonCandyBlue', article: '' - Honey: text: t('foodHoney'), target: 'Golden', article: '' - - Saddle: canBuy:(()->true), text: t('foodSaddleText'), value: 5, notes: t('foodSaddleNotes') - - # Cake - Cake_Skeleton: text: t('foodCakeSkeleton'), target: 'Skeleton', article: '' - Cake_Base: text: t('foodCakeBase'), target: 'Base', article: '' - Cake_CottonCandyBlue: text: t('foodCakeCottonCandyBlue'), target: 'CottonCandyBlue', article: '' - Cake_CottonCandyPink: text: t('foodCakeCottonCandyPink'), target: 'CottonCandyPink', article: '' - Cake_Shade: text: t('foodCakeShade'), target: 'Shade', article: '' - Cake_White: text: t('foodCakeWhite'), target: 'White', article: '' - Cake_Golden: text: t('foodCakeGolden'), target: 'Golden', article: '' - Cake_Zombie: text: t('foodCakeZombie'), target: 'Zombie', article: '' - Cake_Desert: text: t('foodCakeDesert'), target: 'Desert', article: '' - Cake_Red: text: t('foodCakeRed'), target: 'Red', article: '' - - # Fall - Candy_Skeleton: canBuy:(()->true), canDrop:true, text: t('foodCandySkeleton'), target: 'Skeleton', article: '' - Candy_Base: canBuy:(()->true), canDrop:true, text: t('foodCandyBase'), target: 'Base', article: '' - Candy_CottonCandyBlue: canBuy:(()->true), canDrop:true, text: t('foodCandyCottonCandyBlue'), target: 'CottonCandyBlue', article: '' - Candy_CottonCandyPink: canBuy:(()->true), canDrop:true, text: t('foodCandyCottonCandyPink'), target: 'CottonCandyPink', article: '' - Candy_Shade: canBuy:(()->true), canDrop:true, text: t('foodCandyShade'), target: 'Shade', article: '' - Candy_White: canBuy:(()->true), canDrop:true, text: t('foodCandyWhite'), target: 'White', article: '' - Candy_Golden: canBuy:(()->true), canDrop:true, text: t('foodCandyGolden'), target: 'Golden', article: '' - Candy_Zombie: canBuy:(()->true), canDrop:true, text: t('foodCandyZombie'), target: 'Zombie', article: '' - Candy_Desert: canBuy:(()->true), canDrop:true, text: t('foodCandyDesert'), target: 'Desert', article: '' - Candy_Red: canBuy:(()->true), canDrop:true, text: t('foodCandyRed'), target: 'Red', article: '' - -_.each api.food, (food,key) -> - _.defaults food, {value: 1, key, notes: t('foodNotes'), canBuy:(()->false), canDrop:false} - -api.userCanOwnQuestCategories = [ - 'unlockable' - 'gold' - 'pet' -] - -api.quests = - - dilatory: - text: t("questDilatoryText") - notes: t("questDilatoryNotes") - completion: t("questDilatoryCompletion") - value: 0 - canBuy: (()->false) - category: 'world' - boss: - name: t("questDilatoryBoss") - # We ran an average of progress{up,down} on users over 5 days: {up:805025,down:1324423}. /5*30 (we want the - # event to last 30 days) = {hp:5mil,8mil}. Because Dilatory should cast Rage 3x during that time, 8mil/3=2.6mil (round up to 4) - hp: 5000000 - str: 1 - def: 1 - rage: - title: t("questDilatoryBossRageTitle") - description: t("questDilatoryBossRageDescription") - value: 4000000 - - # special, they won't always look like this - tavern:t('questDilatoryBossRageTavern') - stables:t('questDilatoryBossRageStables') - market:t('questDilatoryBossRageMarket') - drop: - items: [ - {type: 'pets', key: 'MantisShrimp-Base', text: t('questDilatoryDropMantisShrimpPet')} - {type: 'mounts', key: 'MantisShrimp-Base', text: t('questDilatoryDropMantisShrimpMount')} - - {type: 'food', key: 'Meat', text: t('foodMeat')} - {type: 'food', key: 'Milk', text: t('foodMilk')} - {type: 'food', key: 'Potatoe', text: t('foodPotatoe')} - {type: 'food', key: 'Strawberry', text: t('foodStrawberry')} - {type: 'food', key: 'Chocolate', text: t('foodChocolate')} - {type: 'food', key: 'Fish', text: t('foodFish')} - {type: 'food', key: 'RottenMeat', text: t('foodRottenMeat')} - {type: 'food', key: 'CottonCandyPink', text: t('foodCottonCandyPink')} - {type: 'food', key: 'CottonCandyBlue', text: t('foodCottonCandyBlue')} - {type: 'food', key: 'Honey', text: t('foodHoney')} - ] - gp: 0 - exp: 0 - - stressbeast: - text: t("questStressbeastText") - notes: t("questStressbeastNotes") - completion: t("questStressbeastCompletion") - completionChat: t("questStressbeastCompletionChat") - value: 0 - canBuy: (()->false) - category: 'world' - boss: - name: t("questStressbeastBoss") - hp: 2750000 - str: 1 - def: 1 - rage: - title: t("questStressbeastBossRageTitle") - description: t("questStressbeastBossRageDescription") - value: 1450000 - healing: .3 - stables:t('questStressbeastBossRageStables') - bailey:t('questStressbeastBossRageBailey') - guide:t('questStressbeastBossRageGuide') - desperation: - threshold: 500000 - str: 3.5 - def: 2 - text:t('questStressbeastDesperation') - drop: - items: [ - {type: 'pets', key: 'Mammoth-Base', text: t('questStressbeastDropMammothPet')} - {type: 'mounts', key: 'Mammoth-Base', text: t('questStressbeastDropMammothMount')} - - {type: 'food', key: 'Meat', text: t('foodMeat')} - {type: 'food', key: 'Milk', text: t('foodMilk')} - {type: 'food', key: 'Potatoe', text: t('foodPotatoe')} - {type: 'food', key: 'Strawberry', text: t('foodStrawberry')} - {type: 'food', key: 'Chocolate', text: t('foodChocolate')} - {type: 'food', key: 'Fish', text: t('foodFish')} - {type: 'food', key: 'RottenMeat', text: t('foodRottenMeat')} - {type: 'food', key: 'CottonCandyPink', text: t('foodCottonCandyPink')} - {type: 'food', key: 'CottonCandyBlue', text: t('foodCottonCandyBlue')} - {type: 'food', key: 'Honey', text: t('foodHoney')} - ] - gp: 0 - exp: 0 - - burnout: - text: t('questBurnoutText') - notes: t('questBurnoutNotes') - completion: t('questBurnoutCompletion') - completionChat: t('questBurnoutCompletionChat') - value: 0 - canBuy: (()->false) - category: 'world' - boss: - name: t('questBurnoutBoss') - hp: 11000000 - str: 2.5 - def: 1 - rage: - title: t('questBurnoutBossRageTitle') - description: t('questBurnoutBossRageDescription') - value: 1000000 - quests: t('questBurnoutBossRageQuests') - seasonalShop: t('questBurnoutBossRageSeasonalShop') - tavern: t('questBurnoutBossRageTavern') - drop: - items: [ - {type: 'pets', key: 'Phoenix-Base', text: t('questBurnoutDropPhoenixPet')} - {type: 'mounts', key: 'Phoenix-Base', text: t('questBurnoutDropPhoenixMount')} - - {type: 'food', key: 'Candy_Base', text: t('foodCandyBase')} - {type: 'food', key: 'Candy_White', text: t('foodCandyWhite')} - {type: 'food', key: 'Candy_Desert', text: t('foodCandyDesert')} - {type: 'food', key: 'Candy_Red', text: t('foodCandyRed')} - {type: 'food', key: 'Candy_Shade', text: t('foodCandyShade')} - {type: 'food', key: 'Candy_Skeleton', text: t('foodCandySkeleton')} - {type: 'food', key: 'Candy_Zombie', text: t('foodCandyZombie')} - {type: 'food', key: 'Candy_CottonCandyPink', text: t('foodCandyCottonCandyPink')} - {type: 'food', key: 'Candy_CottonCandyBlue', text: t('foodCandyCottonCandyBlue')} - {type: 'food', key: 'Candy_Golden', text: t('foodCandyGolden')} - ] - gp: 0 - exp: 0 - - evilsanta: - canBuy: (()->false) - text: t('questEvilSantaText') # title of the quest (eg, Deep into Vice's Layer) - notes: t('questEvilSantaNotes') - completion: t('questEvilSantaCompletion') - value: 4 # Gem cost to buy, GP sell-back - category: 'pet' - boss: - name: t('questEvilSantaBoss') # name of the boss himself (eg, Vice) - hp: 300 - str: 1 # Multiplier of users' missed dailies - drop: - items: [ - {type: 'mounts', key: 'BearCub-Polar', text: t('questEvilSantaDropBearCubPolarMount')} - ] - gp: 20 - exp: 100 # Exp bonus from defeating the boss - - evilsanta2: - canBuy: (()->false) - text: t('questEvilSanta2Text') - notes: t('questEvilSanta2Notes') - completion: t('questEvilSanta2Completion') - value: 4 - previous: 'evilsanta' - category: 'pet' - collect: - tracks: text: t('questEvilSanta2CollectTracks'), count: 20 - branches: text: t('questEvilSanta2CollectBranches'), count: 10 - drop: - items: [ - {type: 'pets', key: 'BearCub-Polar', text: t('questEvilSanta2DropBearCubPolarPet')} - ] - gp: 20 - exp: 100 - - gryphon: - text: t('questGryphonText') - notes: t('questGryphonNotes') - completion: t('questGryphonCompletion') - value: 4 # Gem cost to buy, GP sell-back - category: 'pet' - boss: - name: t('questGryphonBoss') # name of the boss himself (eg, Vice) - hp: 300 - str: 1.5 # Multiplier of users' missed dailies - drop: - items: [ - {type: 'eggs', key: 'Gryphon', text: t('questGryphonDropGryphonEgg')} - {type: 'eggs', key: 'Gryphon', text: t('questGryphonDropGryphonEgg')} - {type: 'eggs', key: 'Gryphon', text: t('questGryphonDropGryphonEgg')} - ] - gp: 25 - exp: 125 - unlock: t('questGryphonUnlockText') - - hedgehog: - text: t('questHedgehogText') - notes: t('questHedgehogNotes') - completion: t('questHedgehogCompletion') - value: 4 # Gem cost to buy, GP sell-back - category: 'pet' - boss: - name: t('questHedgehogBoss') # name of the boss himself (eg, Vice) - hp: 400 - str: 1.25 # Multiplier of users' missed dailies - drop: - items: [ - {type: 'eggs', key: 'Hedgehog', text: t('questHedgehogDropHedgehogEgg')} - {type: 'eggs', key: 'Hedgehog', text: t('questHedgehogDropHedgehogEgg')} - {type: 'eggs', key: 'Hedgehog', text: t('questHedgehogDropHedgehogEgg')} - ] - gp: 30 - exp: 125 - unlock: t('questHedgehogUnlockText') - - ghost_stag: - text: t('questGhostStagText') - notes: t('questGhostStagNotes') - completion: t('questGhostStagCompletion') - value: 4 - category: 'pet' - boss: - name: t('questGhostStagBoss') - hp: 1200 - str: 2.5 - drop: - items: [ - {type: 'eggs', key: 'Deer', text: t('questGhostStagDropDeerEgg')} - {type: 'eggs', key: 'Deer', text: t('questGhostStagDropDeerEgg')} - {type: 'eggs', key: 'Deer', text: t('questGhostStagDropDeerEgg')} - ] - gp: 80 - exp: 800 - unlock: t('questGhostStagUnlockText') - - vice1: - text: t('questVice1Text') - notes: t('questVice1Notes') - value: 4 - lvl: 30 - category: 'unlockable' - boss: - name: t('questVice1Boss') - hp: 750 - str: 1.5 - drop: - items: [ - {type: 'quests', key: "vice2", text: t('questVice1DropVice2Quest')} - ] - gp: 20 - exp: 100 - - vice2: - text: t('questVice2Text') - notes: t('questVice2Notes') - value: 4 - lvl: 30 - category: 'unlockable' - previous: 'vice1' - collect: - lightCrystal: text: t('questVice2CollectLightCrystal'), count: 45 - drop: - items: [ - {type: 'quests', key: 'vice3', text: t('questVice2DropVice3Quest')} - ] - gp: 20 - exp: 75 - - vice3: - text: t('questVice3Text') - notes: t('questVice3Notes') - completion: t('questVice3Completion') - previous: 'vice2' - value: 4 - lvl: 30 - category: 'unlockable' - boss: - name: t('questVice3Boss') - hp: 1500 - str: 3 - drop: - items: [ - {type: 'gear', key: "weapon_special_2", text: t('questVice3DropWeaponSpecial2')} - {type: 'eggs', key: 'Dragon', text: t('questVice3DropDragonEgg')} - {type: 'eggs', key: 'Dragon', text: t('questVice3DropDragonEgg')} - {type: 'hatchingPotions', key: 'Shade', text: t('questVice3DropShadeHatchingPotion')} - {type: 'hatchingPotions', key: 'Shade', text: t('questVice3DropShadeHatchingPotion')} - ] - gp: 100 - exp: 1000 - - egg: - text: t('questEggHuntText') - notes: t('questEggHuntNotes') - completion: t('questEggHuntCompletion') - value: 1 - canBuy: (()->false) - category: 'pet' - collect: - plainEgg: text: t('questEggHuntCollectPlainEgg'), count: 100 - drop: - items: [ - {type: 'eggs', key: 'Egg', text: t('questEggHuntDropPlainEgg')} - {type: 'eggs', key: 'Egg', text: t('questEggHuntDropPlainEgg')} - {type: 'eggs', key: 'Egg', text: t('questEggHuntDropPlainEgg')} - {type: 'eggs', key: 'Egg', text: t('questEggHuntDropPlainEgg')} - {type: 'eggs', key: 'Egg', text: t('questEggHuntDropPlainEgg')} - {type: 'eggs', key: 'Egg', text: t('questEggHuntDropPlainEgg')} - {type: 'eggs', key: 'Egg', text: t('questEggHuntDropPlainEgg')} - {type: 'eggs', key: 'Egg', text: t('questEggHuntDropPlainEgg')} - {type: 'eggs', key: 'Egg', text: t('questEggHuntDropPlainEgg')} - {type: 'eggs', key: 'Egg', text: t('questEggHuntDropPlainEgg')} - ] - gp: 0 - exp: 0 - - rat: - text: t('questRatText') - notes: t('questRatNotes') - completion: t('questRatCompletion') - value: 4 - category: 'pet' - boss: - name: t('questRatBoss') - hp: 1200 - str: 2.5 - drop: - items: [ - {type: 'eggs', key: 'Rat', text: t('questRatDropRatEgg')} - {type: 'eggs', key: 'Rat', text: t('questRatDropRatEgg')} - {type: 'eggs', key: 'Rat', text: t('questRatDropRatEgg')} - ] - gp: 80 - exp: 800 - unlock: t('questRatUnlockText') - - octopus: - text: t('questOctopusText') - notes: t('questOctopusNotes') - completion: t('questOctopusCompletion') - value: 4 - category: 'pet' - boss: - name: t('questOctopusBoss') - hp: 1200 - str: 2.5 - drop: - items: [ - {type: 'eggs', key: 'Octopus', text: t('questOctopusDropOctopusEgg')} - {type: 'eggs', key: 'Octopus', text: t('questOctopusDropOctopusEgg')} - {type: 'eggs', key: 'Octopus', text: t('questOctopusDropOctopusEgg')} - ] - gp: 80 - exp: 800 - unlock: t('questOctopusUnlockText') - - dilatory_derby: - text: t('questSeahorseText') - notes: t('questSeahorseNotes') - completion: t('questSeahorseCompletion') - value: 4 - category: 'pet' - boss: - name: t('questSeahorseBoss') - hp: 300 - str: 1.5 - drop: - items: [ - {type: 'eggs', key: 'Seahorse', text: t('questSeahorseDropSeahorseEgg')} - {type: 'eggs', key: 'Seahorse', text: t('questSeahorseDropSeahorseEgg')} - {type: 'eggs', key: 'Seahorse', text: t('questSeahorseDropSeahorseEgg')} - ] - gp: 25 - exp: 125 - unlock: t('questSeahorseUnlockText') - - atom1: - text: t('questAtom1Text') - notes: t('questAtom1Notes') - value: 4 - lvl: 15 - category: 'unlockable' - collect: - soapBars: text: t('questAtom1CollectSoapBars'), count: 20 - drop: - items: [ - {type: 'quests', key: "atom2", text: t('questAtom1Drop')} - ] - gp: 7 - exp: 50 - atom2: - text: t('questAtom2Text') - notes: t('questAtom2Notes') - previous: 'atom1' - value: 4 - lvl: 15 - category: 'unlockable' - boss: - name: t('questAtom2Boss') - hp: 300 - str: 1 - drop: - items: [ - {type: 'quests', key: "atom3", text: t('questAtom2Drop')} - ] - gp: 20 - exp: 100 - atom3: - text: t('questAtom3Text') - notes: t('questAtom3Notes') - previous: 'atom2' - completion: t('questAtom3Completion') - value: 4 - lvl: 15 - category: 'unlockable' - boss: - name: t('questAtom3Boss') - hp: 800 - str: 1.5 - drop: - items: [ - {type: 'gear', key: "head_special_2", text: t('headSpecial2Text')} - {type: 'hatchingPotions', key: "Base", text: t('questAtom3DropPotion')} - {type: 'hatchingPotions', key: "Base", text: t('questAtom3DropPotion')} - ] - gp: 25 - exp: 125 - - harpy: - text: t('questHarpyText') - notes: t('questHarpyNotes') - completion: t('questHarpyCompletion') - value: 4 - category: 'pet' - boss: - name: t('questHarpyBoss') - hp: 600 - str: 1.5 - drop: - items: [ - {type: 'eggs', key: 'Parrot', text: t('questHarpyDropParrotEgg')} - {type: 'eggs', key: 'Parrot', text: t('questHarpyDropParrotEgg')} - {type: 'eggs', key: 'Parrot', text: t('questHarpyDropParrotEgg')} - ] - gp: 43 - exp: 350 - unlock: t('questHarpyUnlockText') - - rooster: - text: t('questRoosterText') - notes: t('questRoosterNotes') - completion: t('questRoosterCompletion') - value: 4 - category: 'pet' - boss: - name: t('questRoosterBoss') - hp: 300 - str: 1.5 - drop: - items: [ - {type: 'eggs', key: 'Rooster', text: t('questRoosterDropRoosterEgg')} - {type: 'eggs', key: 'Rooster', text: t('questRoosterDropRoosterEgg')} - {type: 'eggs', key: 'Rooster', text: t('questRoosterDropRoosterEgg')} - ] - gp: 25 - exp: 125 - unlock: t('questRoosterUnlockText') - - spider: - text: t('questSpiderText') - notes: t('questSpiderNotes') - completion: t('questSpiderCompletion') - value: 4 - category: 'pet' - boss: - name: t('questSpiderBoss') - hp: 400 - str: 1.5 - drop: - items: [ - {type: 'eggs', key: 'Spider', text: t('questSpiderDropSpiderEgg')} - {type: 'eggs', key: 'Spider', text: t('questSpiderDropSpiderEgg')} - {type: 'eggs', key: 'Spider', text: t('questSpiderDropSpiderEgg')} - ] - gp: 31 - exp: 200 - unlock: t('questSpiderUnlockText') - - moonstone1: - text: t('questMoonstone1Text') - notes: t('questMoonstone1Notes') - value: 4 - lvl: 60 - category: 'unlockable' - collect: - moonstone: text: t('questMoonstone1CollectMoonstone'), count: 500 - drop: - items: [ - {type: 'quests', key: "moonstone2", text: t('questMoonstone1DropMoonstone2Quest')} - ] - gp: 50 - exp: 100 - moonstone2: - text: t('questMoonstone2Text') - notes: t('questMoonstone2Notes') - value: 4 - lvl: 60 - previous: 'moonstone1' - category: 'unlockable' - boss: - name: t('questMoonstone2Boss') - hp: 1500 - str: 3 - drop: - items: [ - {type: 'quests', key: 'moonstone3', text: t('questMoonstone2DropMoonstone3Quest')} - ] - gp: 500 - exp: 1000 - moonstone3: - text: t('questMoonstone3Text') - notes: t('questMoonstone3Notes') - completion: t('questMoonstone3Completion') - previous: 'moonstone2' - value: 4 - lvl: 60 - category: 'unlockable' - boss: - name: t('questMoonstone3Boss') - hp: 2000 - str: 3.5 - drop: - items: [ - {type: 'gear', key: "armor_special_2", text: t('armorSpecial2Text')} - {type: 'food', key: 'RottenMeat', text: t('questMoonstone3DropRottenMeat')} - {type: 'food', key: 'RottenMeat', text: t('questMoonstone3DropRottenMeat')} - {type: 'food', key: 'RottenMeat', text: t('questMoonstone3DropRottenMeat')} - {type: 'food', key: 'RottenMeat', text: t('questMoonstone3DropRottenMeat')} - {type: 'food', key: 'RottenMeat', text: t('questMoonstone3DropRottenMeat')} - {type: 'hatchingPotions', key: 'Zombie', text: t('questMoonstone3DropZombiePotion')} - {type: 'hatchingPotions', key: 'Zombie', text: t('questMoonstone3DropZombiePotion')} - {type: 'hatchingPotions', key: 'Zombie', text: t('questMoonstone3DropZombiePotion')} - ] - gp: 900 - exp: 1500 - - goldenknight1: - text: t('questGoldenknight1Text') - notes: t('questGoldenknight1Notes') - value: 4 - lvl: 40 - category: 'unlockable' - collect: - testimony: text: t('questGoldenknight1CollectTestimony'), count: 300 - drop: - items: [ - {type: 'quests', key: "goldenknight2", text: t('questGoldenknight1DropGoldenknight2Quest')} - ] - gp: 15 - exp: 120 - goldenknight2: - text: t('questGoldenknight2Text') - notes: t('questGoldenknight2Notes') - value: 4 - previous: 'goldenknight1' - lvl: 40 - category: 'unlockable' - boss: - name: t('questGoldenknight2Boss') - hp: 1000 - str: 3 - drop: - items: [ - {type: 'quests', key: 'goldenknight3', text: t('questGoldenknight2DropGoldenknight3Quest')} - ] - gp: 75 - exp: 750 - goldenknight3: - text: t('questGoldenknight3Text') - notes: t('questGoldenknight3Notes') - completion: t('questGoldenknight3Completion') - previous: 'goldenknight2' - value: 4 - lvl: 40 - category: 'unlockable' - boss: - name: t('questGoldenknight3Boss') - hp: 1700 - str: 3.5 - drop: - items: [ - {type: 'food', key: 'Honey', text: t('questGoldenknight3DropHoney')} - {type: 'food', key: 'Honey', text: t('questGoldenknight3DropHoney')} - {type: 'food', key: 'Honey', text: t('questGoldenknight3DropHoney')} - {type: 'hatchingPotions', key: 'Golden', text: t('questGoldenknight3DropGoldenPotion')} - {type: 'hatchingPotions', key: 'Golden', text: t('questGoldenknight3DropGoldenPotion')} - {type: 'gear', key: 'shield_special_goldenknight', text: t('questGoldenknight3DropWeapon')} - ] - gp: 900 - exp: 1500 - - basilist: - text: t('questBasilistText') - notes: t('questBasilistNotes') - completion: t('questBasilistCompletion') - value: 4 - category: 'unlockable' - unlockCondition: - condition: 'party invite' - text: t('inviteFriends') - boss: - name: t('questBasilistBoss') - hp: 100 - str: 0.5 - drop: - gp: 8 - exp: 42 - - owl: - text: t('questOwlText') - notes: t('questOwlNotes') - completion: t('questOwlCompletion') - value: 4 - category: 'pet' - boss: - name: t('questOwlBoss') - hp: 500 - str: 1.5 - drop: - items: [ - {type: 'eggs', key: 'Owl', text: t('questOwlDropOwlEgg')} - {type: 'eggs', key: 'Owl', text: t('questOwlDropOwlEgg')} - {type: 'eggs', key: 'Owl', text: t('questOwlDropOwlEgg')} - ] - gp: 37 - exp: 275 - unlock: t('questOwlUnlockText') - - penguin: - text: t('questPenguinText') - notes: t('questPenguinNotes') - completion: t('questPenguinCompletion') - value: 4 - category: 'pet' - boss: - name: t('questPenguinBoss') - hp: 400 - str: 1.5 - drop: - items: [ - {type: 'eggs', key: 'Penguin', text: t('questPenguinDropPenguinEgg')} - {type: 'eggs', key: 'Penguin', text: t('questPenguinDropPenguinEgg')} - {type: 'eggs', key: 'Penguin', text: t('questPenguinDropPenguinEgg')} - ] - gp: 31 - exp: 200 - unlock: t('questPenguinUnlockText') - - trex: - text: t('questTRexText') - notes: t('questTRexNotes') - completion: t('questTRexCompletion') - value: 4 - category: 'pet' - boss: - name: t('questTRexBoss') - hp: 800 - str: 2 - drop: - items: [ - {type: 'eggs', key: 'TRex', text: t('questTRexDropTRexEgg')} - {type: 'eggs', key: 'TRex', text: t('questTRexDropTRexEgg')} - {type: 'eggs', key: 'TRex', text: t('questTRexDropTRexEgg')} - ] - gp: 55 - exp: 500 - unlock: t('questTRexUnlockText') - - trex_undead: - text: t('questTRexUndeadText') - notes: t('questTRexUndeadNotes') - completion: t('questTRexUndeadCompletion') - value: 4 - category: 'pet' - boss: - name: t('questTRexUndeadBoss') - hp: 500 - str: 2 - rage: - title: t("questTRexUndeadRageTitle") - description: t("questTRexUndeadRageDescription") - value: 50 - healing: .3 - effect:t('questTRexUndeadRageEffect') - drop: - items: [ - {type: 'eggs', key: 'TRex', text: t('questTRexDropTRexEgg')} - {type: 'eggs', key: 'TRex', text: t('questTRexDropTRexEgg')} - {type: 'eggs', key: 'TRex', text: t('questTRexDropTRexEgg')} - ] - gp: 55 - exp: 500 - unlock: t('questTRexUnlockText') - - rock: - text: t('questRockText') - notes: t('questRockNotes') - completion: t('questRockCompletion') - value: 4 - category: 'pet' - boss: - name: t('questRockBoss') - hp: 400 - str: 1.5 - drop: - items: [ - {type: 'eggs', key: 'Rock', text: t('questRockDropRockEgg')} - {type: 'eggs', key: 'Rock', text: t('questRockDropRockEgg')} - {type: 'eggs', key: 'Rock', text: t('questRockDropRockEgg')} - ] - gp: 31 - exp: 200 - unlock: t('questRockUnlockText') - - bunny: - text: t('questBunnyText') - notes: t('questBunnyNotes') - completion: t('questBunnyCompletion') - value: 4 - category: 'pet' - boss: - name: t('questBunnyBoss') - hp: 300 - str: 1.5 - drop: - items: [ - {type: 'eggs', key: 'Bunny', text: t('questBunnyDropBunnyEgg')} - {type: 'eggs', key: 'Bunny', text: t('questBunnyDropBunnyEgg')} - {type: 'eggs', key: 'Bunny', text: t('questBunnyDropBunnyEgg')} - ] - gp: 25 - exp: 125 - unlock: t('questBunnyUnlockText') - - slime: - text: t('questSlimeText') - notes: t('questSlimeNotes') - completion: t('questSlimeCompletion') - value: 4 - category: 'pet' - boss: - name: t('questSlimeBoss') - hp: 400 - str: 1.5 - drop: - items: [ - {type: 'eggs', key: 'Slime', text: t('questSlimeDropSlimeEgg')} - {type: 'eggs', key: 'Slime', text: t('questSlimeDropSlimeEgg')} - {type: 'eggs', key: 'Slime', text: t('questSlimeDropSlimeEgg')} - ] - gp: 31 - exp: 200 - unlock: t('questSlimeUnlockText') - - sheep: - text: t('questSheepText') - notes: t('questSheepNotes') - completion: t('questSheepCompletion') - value: 4 - category: 'pet' - boss: - name: t('questSheepBoss') - hp: 300 - str: 1.5 - drop: - items: [ - {type: 'eggs', key: 'Sheep', text: t('questSheepDropSheepEgg')} - {type: 'eggs', key: 'Sheep', text: t('questSheepDropSheepEgg')} - {type: 'eggs', key: 'Sheep', text: t('questSheepDropSheepEgg')} - ] - gp: 25 - exp: 125 - unlock: t('questSheepUnlockText') - - kraken: - text: t('questKrakenText') - notes: t('questKrakenNotes') - completion: t('questKrakenCompletion') - value: 4 - category: 'pet' - boss: - name: t('questKrakenBoss') - hp: 800 - str: 2 - drop: - items: [ - {type: 'eggs', key: 'Cuttlefish', text: t('questKrakenDropCuttlefishEgg')} - {type: 'eggs', key: 'Cuttlefish', text: t('questKrakenDropCuttlefishEgg')} - {type: 'eggs', key: 'Cuttlefish', text: t('questKrakenDropCuttlefishEgg')} - ] - gp: 55 - exp: 500 - unlock: t('questKrakenUnlockText') - - whale: - text: t('questWhaleText') - notes: t('questWhaleNotes') - completion: t('questWhaleCompletion') - value: 4 - category: 'pet' - boss: - name: t('questWhaleBoss') - hp: 500 - str: 1.5 - drop: - items: [ - {type: 'eggs', key: 'Whale', text: t('questWhaleDropWhaleEgg')} - {type: 'eggs', key: 'Whale', text: t('questWhaleDropWhaleEgg')} - {type: 'eggs', key: 'Whale', text: t('questWhaleDropWhaleEgg')} - ] - gp: 37 - exp: 275 - unlock: t('questWhaleUnlockText') - - dilatoryDistress1: - text: t('questDilatoryDistress1Text') - notes: t('questDilatoryDistress1Notes') - completion: t('questDilatoryDistress1Completion') - value: 4 - goldValue: 200 - category: 'gold' - collect: - fireCoral: text: t('questDilatoryDistress1CollectFireCoral'), count: 25 - blueFins: text: t('questDilatoryDistress1CollectBlueFins'), count: 25 - drop: - items: [ - {type: 'gear', key: "armor_special_finnedOceanicArmor", text: t('questDilatoryDistress1DropArmor')} - ] - gp: 0 - exp: 75 - dilatoryDistress2: - text: t('questDilatoryDistress2Text') - notes: t('questDilatoryDistress2Notes') - completion: t('questDilatoryDistress2Completion') - previous: 'dilatoryDistress1' - value: 4 - goldValue: 300 - category: 'gold' - boss: - name: t('questDilatoryDistress2Boss') - hp: 500 - rage: - title: t("questDilatoryDistress2RageTitle") - description: t("questDilatoryDistress2RageDescription") - value: 50 - healing: .3 - effect:t('questDilatoryDistress2RageEffect') - drop: - items: [ - {type: 'hatchingPotions', key: 'Skeleton', text: t('questDilatoryDistress2DropSkeletonPotion')} - {type: 'hatchingPotions', key: 'CottonCandyBlue', text: t('questDilatoryDistress2DropCottonCandyBluePotion')} - {type: 'gear', key: "head_special_fireCoralCirclet", text: t('questDilatoryDistress2DropHeadgear')} - ] - gp: 0 - exp: 500 - dilatoryDistress3: - text: t('questDilatoryDistress3Text') - notes: t('questDilatoryDistress3Notes') - completion: t('questDilatoryDistress3Completion') - previous: 'dilatoryDistress2' - value: 4 - goldValue: 400 - category: 'gold' - boss: - name: t('questDilatoryDistress3Boss') - hp: 1000 - str: 2 - drop: - items: [ - {type: 'food', key: 'Fish', text: t('questDilatoryDistress3DropFish')} - {type: 'food', key: 'Fish', text: t('questDilatoryDistress3DropFish')} - {type: 'food', key: 'Fish', text: t('questDilatoryDistress3DropFish')} - {type: 'gear', key: "weapon_special_tridentOfCrashingTides", text: t('questDilatoryDistress3DropWeapon')} - {type: 'gear', key: "shield_special_moonpearlShield", text: t('questDilatoryDistress3DropShield')} - ] - gp: 0 - exp: 650 - - cheetah: - text: t('questCheetahText') - notes: t('questCheetahNotes') - completion: t('questCheetahCompletion') - value: 4 - category: 'pet' - boss: - name: t('questCheetahBoss') - hp: 600 - str: 1.5 - drop: - items: [ - {type: 'eggs', key: 'Cheetah', text: t('questCheetahDropCheetahEgg')} - {type: 'eggs', key: 'Cheetah', text: t('questCheetahDropCheetahEgg')} - {type: 'eggs', key: 'Cheetah', text: t('questCheetahDropCheetahEgg')} - ] - gp: 43 - exp: 350 - unlock: t('questCheetahUnlockText') - - horse: - text: t('questHorseText') - notes: t('questHorseNotes') - completion: t('questHorseCompletion') - value: 4 - category: 'pet' - boss: - name: t('questHorseBoss') - hp: 500 - str: 1.5 - drop: - items: [ - {type: 'eggs', key: 'Horse', text: t('questHorseDropHorseEgg')} - {type: 'eggs', key: 'Horse', text: t('questHorseDropHorseEgg')} - {type: 'eggs', key: 'Horse', text: t('questHorseDropHorseEgg')} - ] - gp: 37 - exp: 275 - unlock: t('questHorseUnlockText') - -_.each api.quests, (v,key) -> - _.defaults v, {key,canBuy:(()->true)} - b = v.boss - if b - _.defaults b, {str:1,def:1} - if b.rage - _.defaults b.rage, {title:t('bossRageTitle'),description:t('bossRageDescription')} - -api.questsByLevel = - _.sortBy api.quests, (quest) -> - quest.lvl || 0 - -api.backgrounds = - backgrounds062014: - beach: - text: t('backgroundBeachText') - notes: t('backgroundBeachNotes') - fairy_ring: - text: t('backgroundFairyRingText') - notes: t('backgroundFairyRingNotes') - forest: - text: t('backgroundForestText') - notes: t('backgroundForestNotes') - backgrounds072014: - open_waters: - text: t('backgroundOpenWatersText') - notes: t('backgroundOpenWatersNotes') - coral_reef: - text: t('backgroundCoralReefText') - notes: t('backgroundCoralReefNotes') - seafarer_ship: - text: t('backgroundSeafarerShipText') - notes: t('backgroundSeafarerShipNotes') - backgrounds082014: - volcano: - text: t('backgroundVolcanoText') - notes: t('backgroundVolcanoNotes') - clouds: - text: t('backgroundCloudsText') - notes: t('backgroundCloudsNotes') - dusty_canyons: - text: t('backgroundDustyCanyonsText') - notes: t('backgroundDustyCanyonsNotes') - backgrounds092014: - thunderstorm: - text: t('backgroundThunderstormText') - notes: t('backgroundThunderstormNotes') - autumn_forest: - text: t('backgroundAutumnForestText') - notes: t('backgroundAutumnForestNotes') - harvest_fields: - text: t('backgroundHarvestFieldsText') - notes: t('backgroundHarvestFieldsNotes') - backgrounds102014: - graveyard: - text: t('backgroundGraveyardText') - notes: t('backgroundGraveyardNotes') - haunted_house: - text: t('backgroundHauntedHouseText') - notes: t('backgroundHauntedHouseNotes') - pumpkin_patch: - text: t('backgroundPumpkinPatchText') - notes: t('backgroundPumpkinPatchNotes') - backgrounds112014: - harvest_feast: - text: t('backgroundHarvestFeastText') - notes: t('backgroundHarvestFeastNotes') - sunset_meadow: - text: t('backgroundSunsetMeadowText') - notes: t('backgroundSunsetMeadowNotes') - starry_skies: - text: t('backgroundStarrySkiesText') - notes: t('backgroundStarrySkiesNotes') - backgrounds122014: - iceberg: - text: t('backgroundIcebergText') - notes: t('backgroundIcebergNotes') - twinkly_lights: - text: t('backgroundTwinklyLightsText') - notes: t('backgroundTwinklyLightsNotes') - south_pole: - text: t('backgroundSouthPoleText') - notes: t('backgroundSouthPoleNotes') - backgrounds012015: - ice_cave: - text: t('backgroundIceCaveText') - notes: t('backgroundIceCaveNotes') - frigid_peak: - text: t('backgroundFrigidPeakText') - notes: t('backgroundFrigidPeakNotes') - snowy_pines: - text: t('backgroundSnowyPinesText') - notes: t('backgroundSnowyPinesNotes') - backgrounds022015: - blacksmithy: - text: t('backgroundBlacksmithyText') - notes: t('backgroundBlacksmithyNotes') - crystal_cave: - text: t('backgroundCrystalCaveText') - notes: t('backgroundCrystalCaveNotes') - distant_castle: - text: t('backgroundDistantCastleText') - notes: t('backgroundDistantCastleNotes') - backgrounds032015: - spring_rain: - text: t('backgroundSpringRainText') - notes: t('backgroundSpringRainNotes') - stained_glass: - text: t('backgroundStainedGlassText') - notes: t('backgroundStainedGlassNotes') - rolling_hills: - text: t('backgroundRollingHillsText') - notes: t('backgroundRollingHillsNotes') - backgrounds042015: - cherry_trees: - text: t('backgroundCherryTreesText') - notes: t('backgroundCherryTreesNotes') - floral_meadow: - text: t('backgroundFloralMeadowText') - notes: t('backgroundFloralMeadowNotes') - gumdrop_land: - text: t('backgroundGumdropLandText') - notes: t('backgroundGumdropLandNotes') - backgrounds052015: - marble_temple: - text: t('backgroundMarbleTempleText') - notes: t('backgroundMarbleTempleNotes') - mountain_lake: - text: t('backgroundMountainLakeText') - notes: t('backgroundMountainLakeNotes') - pagodas: - text: t('backgroundPagodasText') - notes: t('backgroundPagodasNotes') - backgrounds062015: - drifting_raft: - text: t('backgroundDriftingRaftText') - notes: t('backgroundDriftingRaftNotes') - shimmery_bubbles: - text: t('backgroundShimmeryBubblesText') - notes: t('backgroundShimmeryBubblesNotes') - island_waterfalls: - text: t('backgroundIslandWaterfallsText') - notes: t('backgroundIslandWaterfallsNotes') - backgrounds072015: - dilatory_ruins: - text: t('backgroundDilatoryRuinsText') - notes: t('backgroundDilatoryRuinsNotes') - giant_wave: - text: t('backgroundGiantWaveText') - notes: t('backgroundGiantWaveNotes') - sunken_ship: - text: t('backgroundSunkenShipText') - notes: t('backgroundSunkenShipNotes') - backgrounds082015: - pyramids: - text: t('backgroundPyramidsText') - notes: t('backgroundPyramidsNotes') - sunset_savannah: - text: t('backgroundSunsetSavannahText') - notes: t('backgroundSunsetSavannahNotes') - twinkly_party_lights: - text: t('backgroundTwinklyPartyLightsText') - notes: t('backgroundTwinklyPartyLightsNotes') - backgrounds092015: - market: - text: t('backgroundMarketText') - notes: t('backgroundMarketNotes') - stable: - text: t('backgroundStableText') - notes: t('backgroundStableNotes') - tavern: - text: t('backgroundTavernText') - notes: t('backgroundTavernNotes') - backgrounds102015: - harvest_moon: - text: t('backgroundHarvestMoonText') - notes: t('backgroundHarvestMoonNotes') - slimy_swamp: - text: t('backgroundSlimySwampText') - notes: t('backgroundSlimySwampNotes') - swarming_darkness: - text: t('backgroundSwarmingDarknessText') - notes: t('backgroundSwarmingDarknessNotes') - -api.subscriptionBlocks = - basic_earned: months:1, price:5 - basic_3mo: months:3, price:15 - basic_6mo: months:6, price:30 - google_6mo: months:6, price:24, discount:true, original:30 - basic_12mo: months:12, price:48 -_.each api.subscriptionBlocks, (b,k)->b.key = k - -# repeat = {m:true,t:true,w:true,th:true,f:true,s:true,su:true} -api.userDefaults = - habits: [ - {type: 'habit', text: t('defaultHabit1Text'), value: 0, up: true, down: false, attribute: 'per' } - {type: 'habit', text: t('defaultHabit2Text'), value: 0, up: false, down: true, attribute: 'str'} - {type: 'habit', text: t('defaultHabit3Text'), value: 0, up: true, down: true, attribute: 'str'} - ] - - dailys: [ - ] - - todos: [ - {type: 'todo', text: t('defaultTodo1Text'), notes: t('defaultTodoNotes'), completed: false, attribute: 'int' } - ] - - rewards: [ - {type: 'reward', text: t('defaultReward1Text'), value: 10 } - ] - - tags: [ - {name: t('defaultTag1')} - {name: t('defaultTag2')} - {name: t('defaultTag3')} - ] - -api.faq = require './faq.js' diff --git a/common/script/content/index.js b/common/script/content/index.js new file mode 100644 index 0000000000..d14727016c --- /dev/null +++ b/common/script/content/index.js @@ -0,0 +1,3324 @@ +var _, api, calculateBonus, diminishingReturns, moment, t; + +api = module.exports; + +_ = require('lodash'); + +moment = require('moment'); + +t = require('./translation.js'); + +import { + CLASSES, + EVENTS, + GEAR_TYPES, + ITEM_LIST, + USER_CAN_OWN_QUEST_CATEGORIES, +} from './constants'; + +import mysterySets from './mystery-sets'; + +import gear from './gear'; + +api.mystery = mysterySets; + +api.itemList = ITEM_LIST; + +api.gear = gear; + +/* + Time Traveler Store, mystery sets need their items mapped in + */ + +_.each(api.mystery, function(v, k) { + return v.items = _.where(api.gear.flat, { + mystery: k + }); +}); + +api.timeTravelerStore = function(owned) { + var ownedKeys; + ownedKeys = _.keys((typeof owned.toObject === "function" ? owned.toObject() : void 0) || owned); + return _.reduce(api.mystery, function(m, v, k) { + if (k === 'wondercon' || ~ownedKeys.indexOf(v.items[0].key)) { + return m; + } + m[k] = v; + return m; + }, {}); +}; + + +/* + --------------------------------------------------------------- + Unique Rewards: Potion and Armoire + --------------------------------------------------------------- + */ + +api.potion = { + type: 'potion', + text: t('potionText'), + notes: t('potionNotes'), + value: 25, + key: 'potion' +}; + +api.armoire = { + type: 'armoire', + text: t('armoireText'), + notes: (function(user, count) { + if (user.flags.armoireEmpty) { + return t('armoireNotesEmpty')(); + } + return t('armoireNotesFull')() + count; + }), + value: 100, + key: 'armoire', + canOwn: (function(u) { + return _.contains(u.achievements.ultimateGearSets, true); + }) +}; + + +/* + --------------------------------------------------------------- + Classes + --------------------------------------------------------------- + */ + +api.classes = CLASSES; + + +/* + --------------------------------------------------------------- + Gear Types + --------------------------------------------------------------- + */ + +api.gearTypes = GEAR_TYPES; + + +/* + --------------------------------------------------------------- + Spells + --------------------------------------------------------------- + Text, notes, and mana are obvious. The rest: + + * {target}: one of [task, self, party, user]. This is very important, because if the cast() function is expecting one + thing and receives another, it will cause errors. `self` is used for self buffs, multi-task debuffs, AOEs (eg, meteor-shower), + etc. Basically, use self for anything that's not [task, party, user] and is an instant-cast + + * {cast}: the function that's run to perform the ability's action. This is pretty slick - because this is exported to the + web, this function can be performed on the client and on the server. `user` param is self (needed for determining your + own stats for effectiveness of cast), and `target` param is one of [task, party, user]. In the case of `self` spells, + you act on `user` instead of `target`. You can trust these are the correct objects, as long as the `target` attr of the + spell is correct. Take a look at habitrpg/src/models/user.js and habitrpg/src/models/task.js for what attributes are + available on each model. Note `task.value` is its "redness". If party is passed in, it's an array of users, + so you'll want to iterate over them like: `_.each(target,function(member){...})` + + Note, user.stats.mp is docked after automatically (it's appended to functions automatically down below in an _.each) + */ + +diminishingReturns = function(bonus, max, halfway) { + if (halfway == null) { + halfway = max / 2; + } + return max * (bonus / (bonus + halfway)); +}; + +calculateBonus = function(value, stat, crit, stat_scale) { + if (crit == null) { + crit = 1; + } + if (stat_scale == null) { + stat_scale = 0.5; + } + return (value < 0 ? 1 : value + 1) + (stat * stat_scale * crit); +}; + +api.spells = { + wizard: { + fireball: { + text: t('spellWizardFireballText'), + mana: 10, + lvl: 11, + target: 'task', + notes: t('spellWizardFireballNotes'), + cast: function(user, target) { + var base, bonus, req; + bonus = user._statsComputed.int * user.fns.crit('per'); + bonus *= Math.ceil((target.value < 0 ? 1 : target.value + 1) * .075); + user.stats.exp += diminishingReturns(bonus, 75); + if ((base = user.party.quest.progress).up == null) { + base.up = 0; + } + user.party.quest.progress.up += Math.ceil(user._statsComputed.int * .1); + req = { + language: user.preferences.language + }; + return user.fns.updateStats(user.stats, req); + } + }, + mpheal: { + text: t('spellWizardMPHealText'), + mana: 30, + lvl: 12, + target: 'party', + notes: t('spellWizardMPHealNotes'), + cast: function(user, target) { + return _.each(target, function(member) { + var bonus; + bonus = user._statsComputed.int; + if (user._id !== member._id) { + return member.stats.mp += Math.ceil(diminishingReturns(bonus, 25, 125)); + } + }); + } + }, + earth: { + text: t('spellWizardEarthText'), + mana: 35, + lvl: 13, + target: 'party', + notes: t('spellWizardEarthNotes'), + cast: function(user, target) { + return _.each(target, function(member) { + var base, bonus; + bonus = user._statsComputed.int - user.stats.buffs.int; + if ((base = member.stats.buffs).int == null) { + base.int = 0; + } + return member.stats.buffs.int += Math.ceil(diminishingReturns(bonus, 30, 200)); + }); + } + }, + frost: { + text: t('spellWizardFrostText'), + mana: 40, + lvl: 14, + target: 'self', + notes: t('spellWizardFrostNotes'), + cast: function(user, target) { + return user.stats.buffs.streaks = true; + } + } + }, + warrior: { + smash: { + text: t('spellWarriorSmashText'), + mana: 10, + lvl: 11, + target: 'task', + notes: t('spellWarriorSmashNotes'), + cast: function(user, target) { + var base, bonus; + bonus = user._statsComputed.str * user.fns.crit('con'); + target.value += diminishingReturns(bonus, 2.5, 35); + if ((base = user.party.quest.progress).up == null) { + base.up = 0; + } + return user.party.quest.progress.up += diminishingReturns(bonus, 55, 70); + } + }, + defensiveStance: { + text: t('spellWarriorDefensiveStanceText'), + mana: 25, + lvl: 12, + target: 'self', + notes: t('spellWarriorDefensiveStanceNotes'), + cast: function(user, target) { + var base, bonus; + bonus = user._statsComputed.con - user.stats.buffs.con; + if ((base = user.stats.buffs).con == null) { + base.con = 0; + } + return user.stats.buffs.con += Math.ceil(diminishingReturns(bonus, 40, 200)); + } + }, + valorousPresence: { + text: t('spellWarriorValorousPresenceText'), + mana: 20, + lvl: 13, + target: 'party', + notes: t('spellWarriorValorousPresenceNotes'), + cast: function(user, target) { + return _.each(target, function(member) { + var base, bonus; + bonus = user._statsComputed.str - user.stats.buffs.str; + if ((base = member.stats.buffs).str == null) { + base.str = 0; + } + return member.stats.buffs.str += Math.ceil(diminishingReturns(bonus, 20, 200)); + }); + } + }, + intimidate: { + text: t('spellWarriorIntimidateText'), + mana: 15, + lvl: 14, + target: 'party', + notes: t('spellWarriorIntimidateNotes'), + cast: function(user, target) { + return _.each(target, function(member) { + var base, bonus; + bonus = user._statsComputed.con - user.stats.buffs.con; + if ((base = member.stats.buffs).con == null) { + base.con = 0; + } + return member.stats.buffs.con += Math.ceil(diminishingReturns(bonus, 24, 200)); + }); + } + } + }, + rogue: { + pickPocket: { + text: t('spellRoguePickPocketText'), + mana: 10, + lvl: 11, + target: 'task', + notes: t('spellRoguePickPocketNotes'), + cast: function(user, target) { + var bonus; + bonus = calculateBonus(target.value, user._statsComputed.per); + return user.stats.gp += diminishingReturns(bonus, 25, 75); + } + }, + backStab: { + text: t('spellRogueBackStabText'), + mana: 15, + lvl: 12, + target: 'task', + notes: t('spellRogueBackStabNotes'), + cast: function(user, target) { + var _crit, bonus, req; + _crit = user.fns.crit('str', .3); + bonus = calculateBonus(target.value, user._statsComputed.str, _crit); + user.stats.exp += diminishingReturns(bonus, 75, 50); + user.stats.gp += diminishingReturns(bonus, 18, 75); + req = { + language: user.preferences.language + }; + return user.fns.updateStats(user.stats, req); + } + }, + toolsOfTrade: { + text: t('spellRogueToolsOfTradeText'), + mana: 25, + lvl: 13, + target: 'party', + notes: t('spellRogueToolsOfTradeNotes'), + cast: function(user, target) { + return _.each(target, function(member) { + var base, bonus; + bonus = user._statsComputed.per - user.stats.buffs.per; + if ((base = member.stats.buffs).per == null) { + base.per = 0; + } + return member.stats.buffs.per += Math.ceil(diminishingReturns(bonus, 100, 50)); + }); + } + }, + stealth: { + text: t('spellRogueStealthText'), + mana: 45, + lvl: 14, + target: 'self', + notes: t('spellRogueStealthNotes'), + cast: function(user, target) { + var base; + if ((base = user.stats.buffs).stealth == null) { + base.stealth = 0; + } + return user.stats.buffs.stealth += Math.ceil(diminishingReturns(user._statsComputed.per, user.dailys.length * 0.64, 55)); + } + } + }, + healer: { + heal: { + text: t('spellHealerHealText'), + mana: 15, + lvl: 11, + target: 'self', + notes: t('spellHealerHealNotes'), + cast: function(user, target) { + user.stats.hp += (user._statsComputed.con + user._statsComputed.int + 5) * .075; + if (user.stats.hp > 50) { + return user.stats.hp = 50; + } + } + }, + brightness: { + text: t('spellHealerBrightnessText'), + mana: 15, + lvl: 12, + target: 'self', + notes: t('spellHealerBrightnessNotes'), + cast: function(user, target) { + return _.each(user.tasks, function(target) { + if (target.type === 'reward') { + return; + } + return target.value += 4 * (user._statsComputed.int / (user._statsComputed.int + 40)); + }); + } + }, + protectAura: { + text: t('spellHealerProtectAuraText'), + mana: 30, + lvl: 13, + target: 'party', + notes: t('spellHealerProtectAuraNotes'), + cast: function(user, target) { + return _.each(target, function(member) { + var base, bonus; + bonus = user._statsComputed.con - user.stats.buffs.con; + if ((base = member.stats.buffs).con == null) { + base.con = 0; + } + return member.stats.buffs.con += Math.ceil(diminishingReturns(bonus, 200, 200)); + }); + } + }, + heallAll: { + text: t('spellHealerHealAllText'), + mana: 25, + lvl: 14, + target: 'party', + notes: t('spellHealerHealAllNotes'), + cast: function(user, target) { + return _.each(target, function(member) { + member.stats.hp += (user._statsComputed.con + user._statsComputed.int + 5) * .04; + if (member.stats.hp > 50) { + return member.stats.hp = 50; + } + }); + } + } + }, + special: { + snowball: { + text: t('spellSpecialSnowballAuraText'), + mana: 0, + value: 15, + target: 'user', + notes: t('spellSpecialSnowballAuraNotes'), + cast: function(user, target) { + var base; + target.stats.buffs.snowball = true; + target.stats.buffs.spookDust = false; + target.stats.buffs.shinySeed = false; + target.stats.buffs.seafoam = false; + if ((base = target.achievements).snowball == null) { + base.snowball = 0; + } + target.achievements.snowball++; + return user.items.special.snowball--; + } + }, + salt: { + text: t('spellSpecialSaltText'), + mana: 0, + value: 5, + immediateUse: true, + target: 'self', + notes: t('spellSpecialSaltNotes'), + cast: function(user, target) { + user.stats.buffs.snowball = false; + return user.stats.gp -= 5; + } + }, + spookDust: { + text: t('spellSpecialSpookDustText'), + mana: 0, + value: 15, + target: 'user', + notes: t('spellSpecialSpookDustNotes'), + cast: function(user, target) { + var base; + target.stats.buffs.snowball = false; + target.stats.buffs.spookDust = true; + target.stats.buffs.shinySeed = false; + target.stats.buffs.seafoam = false; + if ((base = target.achievements).spookDust == null) { + base.spookDust = 0; + } + target.achievements.spookDust++; + return user.items.special.spookDust--; + } + }, + opaquePotion: { + text: t('spellSpecialOpaquePotionText'), + mana: 0, + value: 5, + immediateUse: true, + target: 'self', + notes: t('spellSpecialOpaquePotionNotes'), + cast: function(user, target) { + user.stats.buffs.spookDust = false; + return user.stats.gp -= 5; + } + }, + shinySeed: { + text: t('spellSpecialShinySeedText'), + mana: 0, + value: 15, + target: 'user', + notes: t('spellSpecialShinySeedNotes'), + cast: function(user, target) { + var base; + target.stats.buffs.snowball = false; + target.stats.buffs.spookDust = false; + target.stats.buffs.shinySeed = true; + target.stats.buffs.seafoam = false; + if ((base = target.achievements).shinySeed == null) { + base.shinySeed = 0; + } + target.achievements.shinySeed++; + return user.items.special.shinySeed--; + } + }, + petalFreePotion: { + text: t('spellSpecialPetalFreePotionText'), + mana: 0, + value: 5, + immediateUse: true, + target: 'self', + notes: t('spellSpecialPetalFreePotionNotes'), + cast: function(user, target) { + user.stats.buffs.shinySeed = false; + return user.stats.gp -= 5; + } + }, + seafoam: { + text: t('spellSpecialSeafoamText'), + mana: 0, + value: 15, + target: 'user', + notes: t('spellSpecialSeafoamNotes'), + cast: function(user, target) { + var base; + target.stats.buffs.snowball = false; + target.stats.buffs.spookDust = false; + target.stats.buffs.shinySeed = false; + target.stats.buffs.seafoam = true; + if ((base = target.achievements).seafoam == null) { + base.seafoam = 0; + } + target.achievements.seafoam++; + return user.items.special.seafoam--; + } + }, + sand: { + text: t('spellSpecialSandText'), + mana: 0, + value: 5, + immediateUse: true, + target: 'self', + notes: t('spellSpecialSandNotes'), + cast: function(user, target) { + user.stats.buffs.seafoam = false; + return user.stats.gp -= 5; + } + }, + nye: { + text: t('nyeCard'), + mana: 0, + value: 10, + immediateUse: true, + silent: true, + target: 'user', + notes: t('nyeCardNotes'), + cast: function(user, target) { + var base; + if (user === target) { + if ((base = user.achievements).nye == null) { + base.nye = 0; + } + user.achievements.nye++; + } else { + _.each([user, target], function(t) { + var base1; + if ((base1 = t.achievements).nye == null) { + base1.nye = 0; + } + return t.achievements.nye++; + }); + } + if (!target.items.special.nyeReceived) { + target.items.special.nyeReceived = []; + } + target.items.special.nyeReceived.push(user.profile.name); + target.flags.cardReceived = true; + if (typeof target.markModified === "function") { + target.markModified('items.special.nyeReceived'); + } + return user.stats.gp -= 10; + } + }, + valentine: { + text: t('valentineCard'), + mana: 0, + value: 10, + immediateUse: true, + silent: true, + target: 'user', + notes: t('valentineCardNotes'), + cast: function(user, target) { + var base; + if (user === target) { + if ((base = user.achievements).valentine == null) { + base.valentine = 0; + } + user.achievements.valentine++; + } else { + _.each([user, target], function(t) { + var base1; + if ((base1 = t.achievements).valentine == null) { + base1.valentine = 0; + } + return t.achievements.valentine++; + }); + } + if (!target.items.special.valentineReceived) { + target.items.special.valentineReceived = []; + } + target.items.special.valentineReceived.push(user.profile.name); + target.flags.cardReceived = true; + if (typeof target.markModified === "function") { + target.markModified('items.special.valentineReceived'); + } + return user.stats.gp -= 10; + } + }, + greeting: { + text: t('greetingCard'), + mana: 0, + value: 10, + immediateUse: true, + silent: true, + target: 'user', + notes: t('greetingCardNotes'), + cast: function(user, target) { + var base; + if (user === target) { + if ((base = user.achievements).greeting == null) { + base.greeting = 0; + } + user.achievements.greeting++; + } else { + _.each([user, target], function(t) { + var base1; + if ((base1 = t.achievements).greeting == null) { + base1.greeting = 0; + } + return t.achievements.greeting++; + }); + } + if (!target.items.special.greetingReceived) { + target.items.special.greetingReceived = []; + } + target.items.special.greetingReceived.push(user.profile.name); + target.flags.cardReceived = true; + if (typeof target.markModified === "function") { + target.markModified('items.special.greetingReceived'); + } + return user.stats.gp -= 10; + } + }, + thankyou: { + text: t('thankyouCard'), + mana: 0, + value: 10, + immediateUse: true, + silent: true, + target: 'user', + notes: t('thankyouCardNotes'), + cast: function(user, target) { + var base; + if (user === target) { + if ((base = user.achievements).thankyou == null) { + base.thankyou = 0; + } + user.achievements.thankyou++; + } else { + _.each([user, target], function(t) { + var base1; + if ((base1 = t.achievements).thankyou == null) { + base1.thankyou = 0; + } + return t.achievements.thankyou++; + }); + } + if (!target.items.special.thankyouReceived) { + target.items.special.thankyouReceived = []; + } + target.items.special.thankyouReceived.push(user.profile.name); + target.flags.cardReceived = true; + if (typeof target.markModified === "function") { + target.markModified('items.special.thankyouReceived'); + } + return user.stats.gp -= 10; + } + } + } +}; + +api.cardTypes = { + greeting: { + key: 'greeting', + messageOptions: 4, + yearRound: true + }, + nye: { + key: 'nye', + messageOptions: 5 + }, + thankyou: { + key: 'thankyou', + messageOptions: 4, + yearRound: true + }, + valentine: { + key: 'valentine', + messageOptions: 4 + } +}; + +_.each(api.spells, function(spellClass) { + return _.each(spellClass, function(spell, key) { + var _cast; + spell.key = key; + _cast = spell.cast; + return spell.cast = function(user, target) { + _cast(user, target); + return user.stats.mp -= spell.mana; + }; + }); +}); + +api.special = api.spells.special; + + +/* + --------------------------------------------------------------- + Drops + --------------------------------------------------------------- + */ + +api.dropEggs = { + Wolf: { + text: t('dropEggWolfText'), + adjective: t('dropEggWolfAdjective') + }, + TigerCub: { + text: t('dropEggTigerCubText'), + mountText: t('dropEggTigerCubMountText'), + adjective: t('dropEggTigerCubAdjective') + }, + PandaCub: { + text: t('dropEggPandaCubText'), + mountText: t('dropEggPandaCubMountText'), + adjective: t('dropEggPandaCubAdjective') + }, + LionCub: { + text: t('dropEggLionCubText'), + mountText: t('dropEggLionCubMountText'), + adjective: t('dropEggLionCubAdjective') + }, + Fox: { + text: t('dropEggFoxText'), + adjective: t('dropEggFoxAdjective') + }, + FlyingPig: { + text: t('dropEggFlyingPigText'), + adjective: t('dropEggFlyingPigAdjective') + }, + Dragon: { + text: t('dropEggDragonText'), + adjective: t('dropEggDragonAdjective') + }, + Cactus: { + text: t('dropEggCactusText'), + adjective: t('dropEggCactusAdjective') + }, + BearCub: { + text: t('dropEggBearCubText'), + mountText: t('dropEggBearCubMountText'), + adjective: t('dropEggBearCubAdjective') + } +}; + +_.each(api.dropEggs, function(egg, key) { + return _.defaults(egg, { + canBuy: (function() { + return true; + }), + value: 3, + key: key, + notes: t('eggNotes', { + eggText: egg.text, + eggAdjective: egg.adjective + }), + mountText: egg.text + }); +}); + +api.questEggs = { + Gryphon: { + text: t('questEggGryphonText'), + adjective: t('questEggGryphonAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.gryphon != null) > 0; + }) + }, + Hedgehog: { + text: t('questEggHedgehogText'), + adjective: t('questEggHedgehogAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.hedgehog != null) > 0; + }) + }, + Deer: { + text: t('questEggDeerText'), + adjective: t('questEggDeerAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.ghost_stag != null) > 0; + }) + }, + Egg: { + text: t('questEggEggText'), + adjective: t('questEggEggAdjective'), + mountText: t('questEggEggMountText') + }, + Rat: { + text: t('questEggRatText'), + adjective: t('questEggRatAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.rat != null) > 0; + }) + }, + Octopus: { + text: t('questEggOctopusText'), + adjective: t('questEggOctopusAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.octopus != null) > 0; + }) + }, + Seahorse: { + text: t('questEggSeahorseText'), + adjective: t('questEggSeahorseAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.dilatory_derby != null) > 0; + }) + }, + Parrot: { + text: t('questEggParrotText'), + adjective: t('questEggParrotAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.harpy != null) > 0; + }) + }, + Rooster: { + text: t('questEggRoosterText'), + adjective: t('questEggRoosterAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.rooster != null) > 0; + }) + }, + Spider: { + text: t('questEggSpiderText'), + adjective: t('questEggSpiderAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.spider != null) > 0; + }) + }, + Owl: { + text: t('questEggOwlText'), + adjective: t('questEggOwlAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.owl != null) > 0; + }) + }, + Penguin: { + text: t('questEggPenguinText'), + adjective: t('questEggPenguinAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.penguin != null) > 0; + }) + }, + TRex: { + text: t('questEggTRexText'), + adjective: t('questEggTRexAdjective'), + canBuy: (function(u) { + return u.achievements.quests && ((u.achievements.quests.trex != null) > 0 || (u.achievements.quests.trex_undead != null) > 0); + }) + }, + Rock: { + text: t('questEggRockText'), + adjective: t('questEggRockAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.rock != null) > 0; + }) + }, + Bunny: { + text: t('questEggBunnyText'), + adjective: t('questEggBunnyAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.bunny != null) > 0; + }) + }, + Slime: { + text: t('questEggSlimeText'), + adjective: t('questEggSlimeAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.slime != null) > 0; + }) + }, + Sheep: { + text: t('questEggSheepText'), + adjective: t('questEggSheepAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.sheep != null) > 0; + }) + }, + Cuttlefish: { + text: t('questEggCuttlefishText'), + adjective: t('questEggCuttlefishAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.kraken != null) > 0; + }) + }, + Whale: { + text: t('questEggWhaleText'), + adjective: t('questEggWhaleAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.whale != null) > 0; + }) + }, + Cheetah: { + text: t('questEggCheetahText'), + adjective: t('questEggCheetahAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.cheetah != null) > 0; + }) + }, + Horse: { + text: t('questEggHorseText'), + adjective: t('questEggHorseAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.horse != null) > 0; + }) + }, + Frog: { + text: t('questEggFrogText'), + adjective: t('questEggFrogAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.frog != null) > 0; + }) + }, + Snake: { + text: t('questEggSnakeText'), + adjective: t('questEggSnakeAdjective'), + canBuy: (function(u) { + return u.achievements.quests && (u.achievements.quests.snake != null) > 0; + }) + } +}; + +_.each(api.questEggs, function(egg, key) { + return _.defaults(egg, { + canBuy: (function() { + return false; + }), + value: 3, + key: key, + notes: t('eggNotes', { + eggText: egg.text, + eggAdjective: egg.adjective + }), + mountText: egg.text + }); +}); + +api.eggs = _.assign(_.cloneDeep(api.dropEggs), api.questEggs); + +api.specialPets = { + 'Wolf-Veteran': 'veteranWolf', + 'Wolf-Cerberus': 'cerberusPup', + 'Dragon-Hydra': 'hydra', + 'Turkey-Base': 'turkey', + 'BearCub-Polar': 'polarBearPup', + 'MantisShrimp-Base': 'mantisShrimp', + 'JackOLantern-Base': 'jackolantern', + 'Mammoth-Base': 'mammoth', + 'Tiger-Veteran': 'veteranTiger', + 'Phoenix-Base': 'phoenix', + 'Turkey-Gilded': 'gildedTurkey', +}; + +api.specialMounts = { + 'BearCub-Polar': 'polarBear', + 'LionCub-Ethereal': 'etherealLion', + 'MantisShrimp-Base': 'mantisShrimp', + 'Turkey-Base': 'turkey', + 'Mammoth-Base': 'mammoth', + 'Orca-Base': 'orca', + 'Gryphon-RoyalPurple': 'royalPurpleGryphon', + 'Phoenix-Base': 'phoenix', + 'JackOLantern-Base': 'jackolantern' +}; + +api.timeTravelStable = { + pets: { + 'Mammoth-Base': t('mammoth'), + 'MantisShrimp-Base': t('mantisShrimp') + }, + mounts: { + 'Mammoth-Base': t('mammoth'), + 'MantisShrimp-Base': t('mantisShrimp') + } +}; + +api.dropHatchingPotions = { + Base: { + value: 2, + text: t('hatchingPotionBase') + }, + White: { + value: 2, + text: t('hatchingPotionWhite') + }, + Desert: { + value: 2, + text: t('hatchingPotionDesert') + }, + Red: { + value: 3, + text: t('hatchingPotionRed') + }, + Shade: { + value: 3, + text: t('hatchingPotionShade') + }, + Skeleton: { + value: 3, + text: t('hatchingPotionSkeleton') + }, + Zombie: { + value: 4, + text: t('hatchingPotionZombie') + }, + CottonCandyPink: { + value: 4, + text: t('hatchingPotionCottonCandyPink') + }, + CottonCandyBlue: { + value: 4, + text: t('hatchingPotionCottonCandyBlue') + }, + Golden: { + value: 5, + text: t('hatchingPotionGolden') + } +}; + +api.premiumHatchingPotions = { + Spooky: { + value: 2, + text: t('hatchingPotionSpooky'), + limited: true, + canBuy: (function() { + return false; + }) + }, + Peppermint: { + value: 2, + text: t('hatchingPotionPeppermint'), + limited: true, + canBuy: (function() { + return true; + }) + } +}; + +_.each(api.dropHatchingPotions, function(pot, key) { + return _.defaults(pot, { + key: key, + value: 2, + notes: t('hatchingPotionNotes', { + potText: pot.text + }), + premium: false, + limited: false, + canBuy: (function() { + return true; + }) + }); +}); + +_.each(api.premiumHatchingPotions, function(pot, key) { + return _.defaults(pot, { + key: key, + value: 2, + notes: t('hatchingPotionNotes', { + potText: pot.text + }), + addlNotes: t('premiumPotionAddlNotes'), + premium: true, + limited: false, + canBuy: (function() { + return true; + }) + }); +}); + +api.hatchingPotions = {}; + +_.merge(api.hatchingPotions, api.dropHatchingPotions); + +_.merge(api.hatchingPotions, api.premiumHatchingPotions); + +api.pets = _.transform(api.dropEggs, function(m, egg) { + return _.defaults(m, _.transform(api.hatchingPotions, function(m2, pot) { + if (!pot.premium) { + return m2[egg.key + "-" + pot.key] = true; + } + })); +}); + +api.premiumPets = _.transform(api.dropEggs, function(m, egg) { + return _.defaults(m, _.transform(api.hatchingPotions, function(m2, pot) { + if (pot.premium) { + return m2[egg.key + "-" + pot.key] = true; + } + })); +}); + +api.questPets = _.transform(api.questEggs, function(m, egg) { + return _.defaults(m, _.transform(api.hatchingPotions, function(m2, pot) { + if (!pot.premium) { + return m2[egg.key + "-" + pot.key] = true; + } + })); +}); + +api.mounts = _.transform(api.dropEggs, function(m, egg) { + return _.defaults(m, _.transform(api.hatchingPotions, function(m2, pot) { + if (!pot.premium) { + return m2[egg.key + "-" + pot.key] = true; + } + })); +}); + +api.questMounts = _.transform(api.questEggs, function(m, egg) { + return _.defaults(m, _.transform(api.hatchingPotions, function(m2, pot) { + if (!pot.premium) { + return m2[egg.key + "-" + pot.key] = true; + } + })); +}); + +api.food = { + Meat: { + text: t('foodMeat'), + canBuy: (function() { + return true; + }), + canDrop: true, + target: 'Base', + article: '' + }, + Milk: { + text: t('foodMilk'), + canBuy: (function() { + return true; + }), + canDrop: true, + target: 'White', + article: '' + }, + Potatoe: { + text: t('foodPotatoe'), + canBuy: (function() { + return true; + }), + canDrop: true, + target: 'Desert', + article: 'a ' + }, + Strawberry: { + text: t('foodStrawberry'), + canBuy: (function() { + return true; + }), + canDrop: true, + target: 'Red', + article: 'a ' + }, + Chocolate: { + text: t('foodChocolate'), + canBuy: (function() { + return true; + }), + canDrop: true, + target: 'Shade', + article: '' + }, + Fish: { + text: t('foodFish'), + canBuy: (function() { + return true; + }), + canDrop: true, + target: 'Skeleton', + article: 'a ' + }, + RottenMeat: { + text: t('foodRottenMeat'), + canBuy: (function() { + return true; + }), + canDrop: true, + target: 'Zombie', + article: '' + }, + CottonCandyPink: { + text: t('foodCottonCandyPink'), + canBuy: (function() { + return true; + }), + canDrop: true, + target: 'CottonCandyPink', + article: '' + }, + CottonCandyBlue: { + text: t('foodCottonCandyBlue'), + canBuy: (function() { + return true; + }), + canDrop: true, + target: 'CottonCandyBlue', + article: '' + }, + Honey: { + text: t('foodHoney'), + canBuy: (function() { + return true; + }), + canDrop: true, + target: 'Golden', + article: '' + }, + Saddle: { + canBuy: (function() { + return true; + }), + text: t('foodSaddleText'), + value: 5, + notes: t('foodSaddleNotes') + }, + Cake_Skeleton: { + text: t('foodCakeSkeleton'), + target: 'Skeleton', + article: '' + }, + Cake_Base: { + text: t('foodCakeBase'), + target: 'Base', + article: '' + }, + Cake_CottonCandyBlue: { + text: t('foodCakeCottonCandyBlue'), + target: 'CottonCandyBlue', + article: '' + }, + Cake_CottonCandyPink: { + text: t('foodCakeCottonCandyPink'), + target: 'CottonCandyPink', + article: '' + }, + Cake_Shade: { + text: t('foodCakeShade'), + target: 'Shade', + article: '' + }, + Cake_White: { + text: t('foodCakeWhite'), + target: 'White', + article: '' + }, + Cake_Golden: { + text: t('foodCakeGolden'), + target: 'Golden', + article: '' + }, + Cake_Zombie: { + text: t('foodCakeZombie'), + target: 'Zombie', + article: '' + }, + Cake_Desert: { + text: t('foodCakeDesert'), + target: 'Desert', + article: '' + }, + Cake_Red: { + text: t('foodCakeRed'), + target: 'Red', + article: '' + }, + Candy_Skeleton: { + text: t('foodCandySkeleton'), + target: 'Skeleton', + article: '' + }, + Candy_Base: { + text: t('foodCandyBase'), + target: 'Base', + article: '' + }, + Candy_CottonCandyBlue: { + text: t('foodCandyCottonCandyBlue'), + target: 'CottonCandyBlue', + article: '' + }, + Candy_CottonCandyPink: { + text: t('foodCandyCottonCandyPink'), + target: 'CottonCandyPink', + article: '' + }, + Candy_Shade: { + text: t('foodCandyShade'), + target: 'Shade', + article: '' + }, + Candy_White: { + text: t('foodCandyWhite'), + target: 'White', + article: '' + }, + Candy_Golden: { + text: t('foodCandyGolden'), + target: 'Golden', + article: '' + }, + Candy_Zombie: { + text: t('foodCandyZombie'), + target: 'Zombie', + article: '' + }, + Candy_Desert: { + text: t('foodCandyDesert'), + target: 'Desert', + article: '' + }, + Candy_Red: { + text: t('foodCandyRed'), + target: 'Red', + article: '' + } +}; + +_.each(api.food, function(food, key) { + return _.defaults(food, { + value: 1, + key: key, + notes: t('foodNotes'), + canBuy: (function() { + return false; + }), + canDrop: false + }); +}); + +api.userCanOwnQuestCategories = USER_CAN_OWN_QUEST_CATEGORIES; + +api.quests = { + dilatory: { + text: t("questDilatoryText"), + notes: t("questDilatoryNotes"), + completion: t("questDilatoryCompletion"), + value: 0, + canBuy: (function() { + return false; + }), + category: 'world', + boss: { + name: t("questDilatoryBoss"), + hp: 5000000, + str: 1, + def: 1, + rage: { + title: t("questDilatoryBossRageTitle"), + description: t("questDilatoryBossRageDescription"), + value: 4000000, + tavern: t('questDilatoryBossRageTavern'), + stables: t('questDilatoryBossRageStables'), + market: t('questDilatoryBossRageMarket') + } + }, + drop: { + items: [ + { + type: 'pets', + key: 'MantisShrimp-Base', + text: t('questDilatoryDropMantisShrimpPet') + }, { + type: 'mounts', + key: 'MantisShrimp-Base', + text: t('questDilatoryDropMantisShrimpMount') + }, { + type: 'food', + key: 'Meat', + text: t('foodMeat') + }, { + type: 'food', + key: 'Milk', + text: t('foodMilk') + }, { + type: 'food', + key: 'Potatoe', + text: t('foodPotatoe') + }, { + type: 'food', + key: 'Strawberry', + text: t('foodStrawberry') + }, { + type: 'food', + key: 'Chocolate', + text: t('foodChocolate') + }, { + type: 'food', + key: 'Fish', + text: t('foodFish') + }, { + type: 'food', + key: 'RottenMeat', + text: t('foodRottenMeat') + }, { + type: 'food', + key: 'CottonCandyPink', + text: t('foodCottonCandyPink') + }, { + type: 'food', + key: 'CottonCandyBlue', + text: t('foodCottonCandyBlue') + }, { + type: 'food', + key: 'Honey', + text: t('foodHoney') + } + ], + gp: 0, + exp: 0 + } + }, + stressbeast: { + text: t("questStressbeastText"), + notes: t("questStressbeastNotes"), + completion: t("questStressbeastCompletion"), + completionChat: t("questStressbeastCompletionChat"), + value: 0, + canBuy: (function() { + return false; + }), + category: 'world', + boss: { + name: t("questStressbeastBoss"), + hp: 2750000, + str: 1, + def: 1, + rage: { + title: t("questStressbeastBossRageTitle"), + description: t("questStressbeastBossRageDescription"), + value: 1450000, + healing: .3, + stables: t('questStressbeastBossRageStables'), + bailey: t('questStressbeastBossRageBailey'), + guide: t('questStressbeastBossRageGuide') + }, + desperation: { + threshold: 500000, + str: 3.5, + def: 2, + text: t('questStressbeastDesperation') + } + }, + drop: { + items: [ + { + type: 'pets', + key: 'Mammoth-Base', + text: t('questStressbeastDropMammothPet') + }, { + type: 'mounts', + key: 'Mammoth-Base', + text: t('questStressbeastDropMammothMount') + }, { + type: 'food', + key: 'Meat', + text: t('foodMeat') + }, { + type: 'food', + key: 'Milk', + text: t('foodMilk') + }, { + type: 'food', + key: 'Potatoe', + text: t('foodPotatoe') + }, { + type: 'food', + key: 'Strawberry', + text: t('foodStrawberry') + }, { + type: 'food', + key: 'Chocolate', + text: t('foodChocolate') + }, { + type: 'food', + key: 'Fish', + text: t('foodFish') + }, { + type: 'food', + key: 'RottenMeat', + text: t('foodRottenMeat') + }, { + type: 'food', + key: 'CottonCandyPink', + text: t('foodCottonCandyPink') + }, { + type: 'food', + key: 'CottonCandyBlue', + text: t('foodCottonCandyBlue') + }, { + type: 'food', + key: 'Honey', + text: t('foodHoney') + } + ], + gp: 0, + exp: 0 + } + }, + burnout: { + text: t('questBurnoutText'), + notes: t('questBurnoutNotes'), + completion: t('questBurnoutCompletion'), + completionChat: t('questBurnoutCompletionChat'), + value: 0, + canBuy: (function() { + return false; + }), + category: 'world', + boss: { + name: t('questBurnoutBoss'), + hp: 11000000, + str: 2.5, + def: 1, + rage: { + title: t('questBurnoutBossRageTitle'), + description: t('questBurnoutBossRageDescription'), + value: 1000000, + quests: t('questBurnoutBossRageQuests'), + seasonalShop: t('questBurnoutBossRageSeasonalShop'), + tavern: t('questBurnoutBossRageTavern') + } + }, + drop: { + items: [ + { + type: 'pets', + key: 'Phoenix-Base', + text: t('questBurnoutDropPhoenixPet') + }, { + type: 'mounts', + key: 'Phoenix-Base', + text: t('questBurnoutDropPhoenixMount') + }, { + type: 'food', + key: 'Candy_Base', + text: t('foodCandyBase') + }, { + type: 'food', + key: 'Candy_White', + text: t('foodCandyWhite') + }, { + type: 'food', + key: 'Candy_Desert', + text: t('foodCandyDesert') + }, { + type: 'food', + key: 'Candy_Red', + text: t('foodCandyRed') + }, { + type: 'food', + key: 'Candy_Shade', + text: t('foodCandyShade') + }, { + type: 'food', + key: 'Candy_Skeleton', + text: t('foodCandySkeleton') + }, { + type: 'food', + key: 'Candy_Zombie', + text: t('foodCandyZombie') + }, { + type: 'food', + key: 'Candy_CottonCandyPink', + text: t('foodCandyCottonCandyPink') + }, { + type: 'food', + key: 'Candy_CottonCandyBlue', + text: t('foodCandyCottonCandyBlue') + }, { + type: 'food', + key: 'Candy_Golden', + text: t('foodCandyGolden') + } + ], + gp: 0, + exp: 0 + } + }, + evilsanta: { + canBuy: (function() { + return false; + }), + text: t('questEvilSantaText'), + notes: t('questEvilSantaNotes'), + completion: t('questEvilSantaCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questEvilSantaBoss'), + hp: 300, + str: 1 + }, + drop: { + items: [ + { + type: 'mounts', + key: 'BearCub-Polar', + text: t('questEvilSantaDropBearCubPolarMount') + } + ], + gp: 20, + exp: 100 + } + }, + evilsanta2: { + canBuy: (function() { + return false; + }), + text: t('questEvilSanta2Text'), + notes: t('questEvilSanta2Notes'), + completion: t('questEvilSanta2Completion'), + value: 4, + previous: 'evilsanta', + category: 'pet', + collect: { + tracks: { + text: t('questEvilSanta2CollectTracks'), + count: 20 + }, + branches: { + text: t('questEvilSanta2CollectBranches'), + count: 10 + } + }, + drop: { + items: [ + { + type: 'pets', + key: 'BearCub-Polar', + text: t('questEvilSanta2DropBearCubPolarPet') + } + ], + gp: 20, + exp: 100 + } + }, + gryphon: { + text: t('questGryphonText'), + notes: t('questGryphonNotes'), + completion: t('questGryphonCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questGryphonBoss'), + hp: 300, + str: 1.5 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Gryphon', + text: t('questGryphonDropGryphonEgg') + }, { + type: 'eggs', + key: 'Gryphon', + text: t('questGryphonDropGryphonEgg') + }, { + type: 'eggs', + key: 'Gryphon', + text: t('questGryphonDropGryphonEgg') + } + ], + gp: 25, + exp: 125, + unlock: t('questGryphonUnlockText') + } + }, + hedgehog: { + text: t('questHedgehogText'), + notes: t('questHedgehogNotes'), + completion: t('questHedgehogCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questHedgehogBoss'), + hp: 400, + str: 1.25 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Hedgehog', + text: t('questHedgehogDropHedgehogEgg') + }, { + type: 'eggs', + key: 'Hedgehog', + text: t('questHedgehogDropHedgehogEgg') + }, { + type: 'eggs', + key: 'Hedgehog', + text: t('questHedgehogDropHedgehogEgg') + } + ], + gp: 30, + exp: 125, + unlock: t('questHedgehogUnlockText') + } + }, + ghost_stag: { + text: t('questGhostStagText'), + notes: t('questGhostStagNotes'), + completion: t('questGhostStagCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questGhostStagBoss'), + hp: 1200, + str: 2.5 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Deer', + text: t('questGhostStagDropDeerEgg') + }, { + type: 'eggs', + key: 'Deer', + text: t('questGhostStagDropDeerEgg') + }, { + type: 'eggs', + key: 'Deer', + text: t('questGhostStagDropDeerEgg') + } + ], + gp: 80, + exp: 800, + unlock: t('questGhostStagUnlockText') + } + }, + vice1: { + text: t('questVice1Text'), + notes: t('questVice1Notes'), + value: 4, + lvl: 30, + category: 'unlockable', + boss: { + name: t('questVice1Boss'), + hp: 750, + str: 1.5 + }, + drop: { + items: [ + { + type: 'quests', + key: "vice2", + text: t('questVice1DropVice2Quest') + } + ], + gp: 20, + exp: 100 + } + }, + vice2: { + text: t('questVice2Text'), + notes: t('questVice2Notes'), + value: 4, + lvl: 30, + category: 'unlockable', + previous: 'vice1', + collect: { + lightCrystal: { + text: t('questVice2CollectLightCrystal'), + count: 45 + } + }, + drop: { + items: [ + { + type: 'quests', + key: 'vice3', + text: t('questVice2DropVice3Quest') + } + ], + gp: 20, + exp: 75 + } + }, + vice3: { + text: t('questVice3Text'), + notes: t('questVice3Notes'), + completion: t('questVice3Completion'), + previous: 'vice2', + value: 4, + lvl: 30, + category: 'unlockable', + boss: { + name: t('questVice3Boss'), + hp: 1500, + str: 3 + }, + drop: { + items: [ + { + type: 'gear', + key: "weapon_special_2", + text: t('questVice3DropWeaponSpecial2') + }, { + type: 'eggs', + key: 'Dragon', + text: t('questVice3DropDragonEgg') + }, { + type: 'eggs', + key: 'Dragon', + text: t('questVice3DropDragonEgg') + }, { + type: 'hatchingPotions', + key: 'Shade', + text: t('questVice3DropShadeHatchingPotion') + }, { + type: 'hatchingPotions', + key: 'Shade', + text: t('questVice3DropShadeHatchingPotion') + } + ], + gp: 100, + exp: 1000 + } + }, + egg: { + text: t('questEggHuntText'), + notes: t('questEggHuntNotes'), + completion: t('questEggHuntCompletion'), + value: 1, + canBuy: (function() { + return false; + }), + category: 'pet', + collect: { + plainEgg: { + text: t('questEggHuntCollectPlainEgg'), + count: 100 + } + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Egg', + text: t('questEggHuntDropPlainEgg') + }, { + type: 'eggs', + key: 'Egg', + text: t('questEggHuntDropPlainEgg') + }, { + type: 'eggs', + key: 'Egg', + text: t('questEggHuntDropPlainEgg') + }, { + type: 'eggs', + key: 'Egg', + text: t('questEggHuntDropPlainEgg') + }, { + type: 'eggs', + key: 'Egg', + text: t('questEggHuntDropPlainEgg') + }, { + type: 'eggs', + key: 'Egg', + text: t('questEggHuntDropPlainEgg') + }, { + type: 'eggs', + key: 'Egg', + text: t('questEggHuntDropPlainEgg') + }, { + type: 'eggs', + key: 'Egg', + text: t('questEggHuntDropPlainEgg') + }, { + type: 'eggs', + key: 'Egg', + text: t('questEggHuntDropPlainEgg') + }, { + type: 'eggs', + key: 'Egg', + text: t('questEggHuntDropPlainEgg') + } + ], + gp: 0, + exp: 0 + } + }, + rat: { + text: t('questRatText'), + notes: t('questRatNotes'), + completion: t('questRatCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questRatBoss'), + hp: 1200, + str: 2.5 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Rat', + text: t('questRatDropRatEgg') + }, { + type: 'eggs', + key: 'Rat', + text: t('questRatDropRatEgg') + }, { + type: 'eggs', + key: 'Rat', + text: t('questRatDropRatEgg') + } + ], + gp: 80, + exp: 800, + unlock: t('questRatUnlockText') + } + }, + octopus: { + text: t('questOctopusText'), + notes: t('questOctopusNotes'), + completion: t('questOctopusCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questOctopusBoss'), + hp: 1200, + str: 2.5 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Octopus', + text: t('questOctopusDropOctopusEgg') + }, { + type: 'eggs', + key: 'Octopus', + text: t('questOctopusDropOctopusEgg') + }, { + type: 'eggs', + key: 'Octopus', + text: t('questOctopusDropOctopusEgg') + } + ], + gp: 80, + exp: 800, + unlock: t('questOctopusUnlockText') + } + }, + dilatory_derby: { + text: t('questSeahorseText'), + notes: t('questSeahorseNotes'), + completion: t('questSeahorseCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questSeahorseBoss'), + hp: 300, + str: 1.5 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Seahorse', + text: t('questSeahorseDropSeahorseEgg') + }, { + type: 'eggs', + key: 'Seahorse', + text: t('questSeahorseDropSeahorseEgg') + }, { + type: 'eggs', + key: 'Seahorse', + text: t('questSeahorseDropSeahorseEgg') + } + ], + gp: 25, + exp: 125, + unlock: t('questSeahorseUnlockText') + } + }, + atom1: { + text: t('questAtom1Text'), + notes: t('questAtom1Notes'), + value: 4, + lvl: 15, + category: 'unlockable', + collect: { + soapBars: { + text: t('questAtom1CollectSoapBars'), + count: 20 + } + }, + drop: { + items: [ + { + type: 'quests', + key: "atom2", + text: t('questAtom1Drop') + } + ], + gp: 7, + exp: 50 + } + }, + atom2: { + text: t('questAtom2Text'), + notes: t('questAtom2Notes'), + previous: 'atom1', + value: 4, + lvl: 15, + category: 'unlockable', + boss: { + name: t('questAtom2Boss'), + hp: 300, + str: 1 + }, + drop: { + items: [ + { + type: 'quests', + key: "atom3", + text: t('questAtom2Drop') + } + ], + gp: 20, + exp: 100 + } + }, + atom3: { + text: t('questAtom3Text'), + notes: t('questAtom3Notes'), + previous: 'atom2', + completion: t('questAtom3Completion'), + value: 4, + lvl: 15, + category: 'unlockable', + boss: { + name: t('questAtom3Boss'), + hp: 800, + str: 1.5 + }, + drop: { + items: [ + { + type: 'gear', + key: "head_special_2", + text: t('headSpecial2Text') + }, { + type: 'hatchingPotions', + key: "Base", + text: t('questAtom3DropPotion') + }, { + type: 'hatchingPotions', + key: "Base", + text: t('questAtom3DropPotion') + } + ], + gp: 25, + exp: 125 + } + }, + harpy: { + text: t('questHarpyText'), + notes: t('questHarpyNotes'), + completion: t('questHarpyCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questHarpyBoss'), + hp: 600, + str: 1.5 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Parrot', + text: t('questHarpyDropParrotEgg') + }, { + type: 'eggs', + key: 'Parrot', + text: t('questHarpyDropParrotEgg') + }, { + type: 'eggs', + key: 'Parrot', + text: t('questHarpyDropParrotEgg') + } + ], + gp: 43, + exp: 350, + unlock: t('questHarpyUnlockText') + } + }, + rooster: { + text: t('questRoosterText'), + notes: t('questRoosterNotes'), + completion: t('questRoosterCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questRoosterBoss'), + hp: 300, + str: 1.5 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Rooster', + text: t('questRoosterDropRoosterEgg') + }, { + type: 'eggs', + key: 'Rooster', + text: t('questRoosterDropRoosterEgg') + }, { + type: 'eggs', + key: 'Rooster', + text: t('questRoosterDropRoosterEgg') + } + ], + gp: 25, + exp: 125, + unlock: t('questRoosterUnlockText') + } + }, + spider: { + text: t('questSpiderText'), + notes: t('questSpiderNotes'), + completion: t('questSpiderCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questSpiderBoss'), + hp: 400, + str: 1.5 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Spider', + text: t('questSpiderDropSpiderEgg') + }, { + type: 'eggs', + key: 'Spider', + text: t('questSpiderDropSpiderEgg') + }, { + type: 'eggs', + key: 'Spider', + text: t('questSpiderDropSpiderEgg') + } + ], + gp: 31, + exp: 200, + unlock: t('questSpiderUnlockText') + } + }, + moonstone1: { + text: t('questMoonstone1Text'), + notes: t('questMoonstone1Notes'), + value: 4, + lvl: 60, + category: 'unlockable', + collect: { + moonstone: { + text: t('questMoonstone1CollectMoonstone'), + count: 500 + } + }, + drop: { + items: [ + { + type: 'quests', + key: "moonstone2", + text: t('questMoonstone1DropMoonstone2Quest') + } + ], + gp: 50, + exp: 100 + } + }, + moonstone2: { + text: t('questMoonstone2Text'), + notes: t('questMoonstone2Notes'), + value: 4, + lvl: 60, + previous: 'moonstone1', + category: 'unlockable', + boss: { + name: t('questMoonstone2Boss'), + hp: 1500, + str: 3 + }, + drop: { + items: [ + { + type: 'quests', + key: 'moonstone3', + text: t('questMoonstone2DropMoonstone3Quest') + } + ], + gp: 500, + exp: 1000 + } + }, + moonstone3: { + text: t('questMoonstone3Text'), + notes: t('questMoonstone3Notes'), + completion: t('questMoonstone3Completion'), + previous: 'moonstone2', + value: 4, + lvl: 60, + category: 'unlockable', + boss: { + name: t('questMoonstone3Boss'), + hp: 2000, + str: 3.5 + }, + drop: { + items: [ + { + type: 'gear', + key: "armor_special_2", + text: t('armorSpecial2Text') + }, { + type: 'food', + key: 'RottenMeat', + text: t('questMoonstone3DropRottenMeat') + }, { + type: 'food', + key: 'RottenMeat', + text: t('questMoonstone3DropRottenMeat') + }, { + type: 'food', + key: 'RottenMeat', + text: t('questMoonstone3DropRottenMeat') + }, { + type: 'food', + key: 'RottenMeat', + text: t('questMoonstone3DropRottenMeat') + }, { + type: 'food', + key: 'RottenMeat', + text: t('questMoonstone3DropRottenMeat') + }, { + type: 'hatchingPotions', + key: 'Zombie', + text: t('questMoonstone3DropZombiePotion') + }, { + type: 'hatchingPotions', + key: 'Zombie', + text: t('questMoonstone3DropZombiePotion') + }, { + type: 'hatchingPotions', + key: 'Zombie', + text: t('questMoonstone3DropZombiePotion') + } + ], + gp: 900, + exp: 1500 + } + }, + goldenknight1: { + text: t('questGoldenknight1Text'), + notes: t('questGoldenknight1Notes'), + value: 4, + lvl: 40, + category: 'unlockable', + collect: { + testimony: { + text: t('questGoldenknight1CollectTestimony'), + count: 300 + } + }, + drop: { + items: [ + { + type: 'quests', + key: "goldenknight2", + text: t('questGoldenknight1DropGoldenknight2Quest') + } + ], + gp: 15, + exp: 120 + } + }, + goldenknight2: { + text: t('questGoldenknight2Text'), + notes: t('questGoldenknight2Notes'), + value: 4, + previous: 'goldenknight1', + lvl: 40, + category: 'unlockable', + boss: { + name: t('questGoldenknight2Boss'), + hp: 1000, + str: 3 + }, + drop: { + items: [ + { + type: 'quests', + key: 'goldenknight3', + text: t('questGoldenknight2DropGoldenknight3Quest') + } + ], + gp: 75, + exp: 750 + } + }, + goldenknight3: { + text: t('questGoldenknight3Text'), + notes: t('questGoldenknight3Notes'), + completion: t('questGoldenknight3Completion'), + previous: 'goldenknight2', + value: 4, + lvl: 40, + category: 'unlockable', + boss: { + name: t('questGoldenknight3Boss'), + hp: 1700, + str: 3.5 + }, + drop: { + items: [ + { + type: 'food', + key: 'Honey', + text: t('questGoldenknight3DropHoney') + }, { + type: 'food', + key: 'Honey', + text: t('questGoldenknight3DropHoney') + }, { + type: 'food', + key: 'Honey', + text: t('questGoldenknight3DropHoney') + }, { + type: 'hatchingPotions', + key: 'Golden', + text: t('questGoldenknight3DropGoldenPotion') + }, { + type: 'hatchingPotions', + key: 'Golden', + text: t('questGoldenknight3DropGoldenPotion') + }, { + type: 'gear', + key: 'shield_special_goldenknight', + text: t('questGoldenknight3DropWeapon') + } + ], + gp: 900, + exp: 1500 + } + }, + basilist: { + text: t('questBasilistText'), + notes: t('questBasilistNotes'), + completion: t('questBasilistCompletion'), + value: 4, + category: 'unlockable', + unlockCondition: { + condition: 'party invite', + text: t('inviteFriends') + }, + boss: { + name: t('questBasilistBoss'), + hp: 100, + str: 0.5 + }, + drop: { + gp: 8, + exp: 42 + } + }, + owl: { + text: t('questOwlText'), + notes: t('questOwlNotes'), + completion: t('questOwlCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questOwlBoss'), + hp: 500, + str: 1.5 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Owl', + text: t('questOwlDropOwlEgg') + }, { + type: 'eggs', + key: 'Owl', + text: t('questOwlDropOwlEgg') + }, { + type: 'eggs', + key: 'Owl', + text: t('questOwlDropOwlEgg') + } + ], + gp: 37, + exp: 275, + unlock: t('questOwlUnlockText') + } + }, + penguin: { + text: t('questPenguinText'), + notes: t('questPenguinNotes'), + completion: t('questPenguinCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questPenguinBoss'), + hp: 400, + str: 1.5 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Penguin', + text: t('questPenguinDropPenguinEgg') + }, { + type: 'eggs', + key: 'Penguin', + text: t('questPenguinDropPenguinEgg') + }, { + type: 'eggs', + key: 'Penguin', + text: t('questPenguinDropPenguinEgg') + } + ], + gp: 31, + exp: 200, + unlock: t('questPenguinUnlockText') + } + }, + trex: { + text: t('questTRexText'), + notes: t('questTRexNotes'), + completion: t('questTRexCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questTRexBoss'), + hp: 800, + str: 2 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'TRex', + text: t('questTRexDropTRexEgg') + }, { + type: 'eggs', + key: 'TRex', + text: t('questTRexDropTRexEgg') + }, { + type: 'eggs', + key: 'TRex', + text: t('questTRexDropTRexEgg') + } + ], + gp: 55, + exp: 500, + unlock: t('questTRexUnlockText') + } + }, + trex_undead: { + text: t('questTRexUndeadText'), + notes: t('questTRexUndeadNotes'), + completion: t('questTRexUndeadCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questTRexUndeadBoss'), + hp: 500, + str: 2, + rage: { + title: t("questTRexUndeadRageTitle"), + description: t("questTRexUndeadRageDescription"), + value: 50, + healing: .3, + effect: t('questTRexUndeadRageEffect') + } + }, + drop: { + items: [ + { + type: 'eggs', + key: 'TRex', + text: t('questTRexDropTRexEgg') + }, { + type: 'eggs', + key: 'TRex', + text: t('questTRexDropTRexEgg') + }, { + type: 'eggs', + key: 'TRex', + text: t('questTRexDropTRexEgg') + } + ], + gp: 55, + exp: 500, + unlock: t('questTRexUnlockText') + } + }, + rock: { + text: t('questRockText'), + notes: t('questRockNotes'), + completion: t('questRockCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questRockBoss'), + hp: 400, + str: 1.5 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Rock', + text: t('questRockDropRockEgg') + }, { + type: 'eggs', + key: 'Rock', + text: t('questRockDropRockEgg') + }, { + type: 'eggs', + key: 'Rock', + text: t('questRockDropRockEgg') + } + ], + gp: 31, + exp: 200, + unlock: t('questRockUnlockText') + } + }, + bunny: { + text: t('questBunnyText'), + notes: t('questBunnyNotes'), + completion: t('questBunnyCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questBunnyBoss'), + hp: 300, + str: 1.5 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Bunny', + text: t('questBunnyDropBunnyEgg') + }, { + type: 'eggs', + key: 'Bunny', + text: t('questBunnyDropBunnyEgg') + }, { + type: 'eggs', + key: 'Bunny', + text: t('questBunnyDropBunnyEgg') + } + ], + gp: 25, + exp: 125, + unlock: t('questBunnyUnlockText') + } + }, + slime: { + text: t('questSlimeText'), + notes: t('questSlimeNotes'), + completion: t('questSlimeCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questSlimeBoss'), + hp: 400, + str: 1.5 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Slime', + text: t('questSlimeDropSlimeEgg') + }, { + type: 'eggs', + key: 'Slime', + text: t('questSlimeDropSlimeEgg') + }, { + type: 'eggs', + key: 'Slime', + text: t('questSlimeDropSlimeEgg') + } + ], + gp: 31, + exp: 200, + unlock: t('questSlimeUnlockText') + } + }, + sheep: { + text: t('questSheepText'), + notes: t('questSheepNotes'), + completion: t('questSheepCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questSheepBoss'), + hp: 300, + str: 1.5 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Sheep', + text: t('questSheepDropSheepEgg') + }, { + type: 'eggs', + key: 'Sheep', + text: t('questSheepDropSheepEgg') + }, { + type: 'eggs', + key: 'Sheep', + text: t('questSheepDropSheepEgg') + } + ], + gp: 25, + exp: 125, + unlock: t('questSheepUnlockText') + } + }, + kraken: { + text: t('questKrakenText'), + notes: t('questKrakenNotes'), + completion: t('questKrakenCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questKrakenBoss'), + hp: 800, + str: 2 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Cuttlefish', + text: t('questKrakenDropCuttlefishEgg') + }, { + type: 'eggs', + key: 'Cuttlefish', + text: t('questKrakenDropCuttlefishEgg') + }, { + type: 'eggs', + key: 'Cuttlefish', + text: t('questKrakenDropCuttlefishEgg') + } + ], + gp: 55, + exp: 500, + unlock: t('questKrakenUnlockText') + } + }, + whale: { + text: t('questWhaleText'), + notes: t('questWhaleNotes'), + completion: t('questWhaleCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questWhaleBoss'), + hp: 500, + str: 1.5 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Whale', + text: t('questWhaleDropWhaleEgg') + }, { + type: 'eggs', + key: 'Whale', + text: t('questWhaleDropWhaleEgg') + }, { + type: 'eggs', + key: 'Whale', + text: t('questWhaleDropWhaleEgg') + } + ], + gp: 37, + exp: 275, + unlock: t('questWhaleUnlockText') + } + }, + dilatoryDistress1: { + text: t('questDilatoryDistress1Text'), + notes: t('questDilatoryDistress1Notes'), + completion: t('questDilatoryDistress1Completion'), + value: 4, + goldValue: 200, + category: 'gold', + collect: { + fireCoral: { + text: t('questDilatoryDistress1CollectFireCoral'), + count: 25 + }, + blueFins: { + text: t('questDilatoryDistress1CollectBlueFins'), + count: 25 + } + }, + drop: { + items: [ + { + type: 'gear', + key: "armor_special_finnedOceanicArmor", + text: t('questDilatoryDistress1DropArmor') + } + ], + gp: 0, + exp: 75 + } + }, + dilatoryDistress2: { + text: t('questDilatoryDistress2Text'), + notes: t('questDilatoryDistress2Notes'), + completion: t('questDilatoryDistress2Completion'), + previous: 'dilatoryDistress1', + value: 4, + goldValue: 300, + category: 'gold', + boss: { + name: t('questDilatoryDistress2Boss'), + hp: 500, + rage: { + title: t("questDilatoryDistress2RageTitle"), + description: t("questDilatoryDistress2RageDescription"), + value: 50, + healing: .3, + effect: t('questDilatoryDistress2RageEffect') + } + }, + drop: { + items: [ + { + type: 'hatchingPotions', + key: 'Skeleton', + text: t('questDilatoryDistress2DropSkeletonPotion') + }, { + type: 'hatchingPotions', + key: 'CottonCandyBlue', + text: t('questDilatoryDistress2DropCottonCandyBluePotion') + }, { + type: 'gear', + key: "head_special_fireCoralCirclet", + text: t('questDilatoryDistress2DropHeadgear') + } + ], + gp: 0, + exp: 500 + } + }, + dilatoryDistress3: { + text: t('questDilatoryDistress3Text'), + notes: t('questDilatoryDistress3Notes'), + completion: t('questDilatoryDistress3Completion'), + previous: 'dilatoryDistress2', + value: 4, + goldValue: 400, + category: 'gold', + boss: { + name: t('questDilatoryDistress3Boss'), + hp: 1000, + str: 2 + }, + drop: { + items: [ + { + type: 'food', + key: 'Fish', + text: t('questDilatoryDistress3DropFish') + }, { + type: 'food', + key: 'Fish', + text: t('questDilatoryDistress3DropFish') + }, { + type: 'food', + key: 'Fish', + text: t('questDilatoryDistress3DropFish') + }, { + type: 'gear', + key: "weapon_special_tridentOfCrashingTides", + text: t('questDilatoryDistress3DropWeapon') + }, { + type: 'gear', + key: "shield_special_moonpearlShield", + text: t('questDilatoryDistress3DropShield') + } + ], + gp: 0, + exp: 650 + } + }, + cheetah: { + text: t('questCheetahText'), + notes: t('questCheetahNotes'), + completion: t('questCheetahCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questCheetahBoss'), + hp: 600, + str: 1.5 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Cheetah', + text: t('questCheetahDropCheetahEgg') + }, { + type: 'eggs', + key: 'Cheetah', + text: t('questCheetahDropCheetahEgg') + }, { + type: 'eggs', + key: 'Cheetah', + text: t('questCheetahDropCheetahEgg') + } + ], + gp: 43, + exp: 350, + unlock: t('questCheetahUnlockText') + } + }, + horse: { + text: t('questHorseText'), + notes: t('questHorseNotes'), + completion: t('questHorseCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questHorseBoss'), + hp: 500, + str: 1.5 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Horse', + text: t('questHorseDropHorseEgg') + }, { + type: 'eggs', + key: 'Horse', + text: t('questHorseDropHorseEgg') + }, { + type: 'eggs', + key: 'Horse', + text: t('questHorseDropHorseEgg') + } + ], + gp: 37, + exp: 275, + unlock: t('questHorseUnlockText') + } + }, + frog: { + text: t('questFrogText'), + notes: t('questFrogNotes'), + completion: t('questFrogCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questFrogBoss'), + hp: 300, + str: 1.5 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Frog', + text: t('questFrogDropFrogEgg') + }, { + type: 'eggs', + key: 'Frog', + text: t('questFrogDropFrogEgg') + }, { + type: 'eggs', + key: 'Frog', + text: t('questFrogDropFrogEgg') + } + ], + gp: 25, + exp: 125, + unlock: t('questFrogUnlockText') + } + }, + snake: { + text: t('questSnakeText'), + notes: t('questSnakeNotes'), + completion: t('questSnakeCompletion'), + value: 4, + category: 'pet', + boss: { + name: t('questSnakeBoss'), + hp: 1100, + str: 2.5 + }, + drop: { + items: [ + { + type: 'eggs', + key: 'Snake', + text: t('questSnakeDropSnakeEgg') + }, { + type: 'eggs', + key: 'Snake', + text: t('questSnakeDropSnakeEgg') + }, { + type: 'eggs', + key: 'Snake', + text: t('questSnakeDropSnakeEgg') + } + ], + gp: 73, + exp: 725, + unlock: t('questSnakeUnlockText') + } + } +}; + +_.each(api.quests, function(v, key) { + var b; + _.defaults(v, { + key: key, + canBuy: (function() { + return true; + }) + }); + b = v.boss; + if (b) { + _.defaults(b, { + str: 1, + def: 1 + }); + if (b.rage) { + return _.defaults(b.rage, { + title: t('bossRageTitle'), + description: t('bossRageDescription') + }); + } + } +}); + +api.questsByLevel = _.sortBy(api.quests, function(quest) { + return quest.lvl || 0; +}); + +api.backgrounds = { + backgrounds062014: { + beach: { + text: t('backgroundBeachText'), + notes: t('backgroundBeachNotes') + }, + fairy_ring: { + text: t('backgroundFairyRingText'), + notes: t('backgroundFairyRingNotes') + }, + forest: { + text: t('backgroundForestText'), + notes: t('backgroundForestNotes') + } + }, + backgrounds072014: { + open_waters: { + text: t('backgroundOpenWatersText'), + notes: t('backgroundOpenWatersNotes') + }, + coral_reef: { + text: t('backgroundCoralReefText'), + notes: t('backgroundCoralReefNotes') + }, + seafarer_ship: { + text: t('backgroundSeafarerShipText'), + notes: t('backgroundSeafarerShipNotes') + } + }, + backgrounds082014: { + volcano: { + text: t('backgroundVolcanoText'), + notes: t('backgroundVolcanoNotes') + }, + clouds: { + text: t('backgroundCloudsText'), + notes: t('backgroundCloudsNotes') + }, + dusty_canyons: { + text: t('backgroundDustyCanyonsText'), + notes: t('backgroundDustyCanyonsNotes') + } + }, + backgrounds092014: { + thunderstorm: { + text: t('backgroundThunderstormText'), + notes: t('backgroundThunderstormNotes') + }, + autumn_forest: { + text: t('backgroundAutumnForestText'), + notes: t('backgroundAutumnForestNotes') + }, + harvest_fields: { + text: t('backgroundHarvestFieldsText'), + notes: t('backgroundHarvestFieldsNotes') + } + }, + backgrounds102014: { + graveyard: { + text: t('backgroundGraveyardText'), + notes: t('backgroundGraveyardNotes') + }, + haunted_house: { + text: t('backgroundHauntedHouseText'), + notes: t('backgroundHauntedHouseNotes') + }, + pumpkin_patch: { + text: t('backgroundPumpkinPatchText'), + notes: t('backgroundPumpkinPatchNotes') + } + }, + backgrounds112014: { + harvest_feast: { + text: t('backgroundHarvestFeastText'), + notes: t('backgroundHarvestFeastNotes') + }, + sunset_meadow: { + text: t('backgroundSunsetMeadowText'), + notes: t('backgroundSunsetMeadowNotes') + }, + starry_skies: { + text: t('backgroundStarrySkiesText'), + notes: t('backgroundStarrySkiesNotes') + } + }, + backgrounds122014: { + iceberg: { + text: t('backgroundIcebergText'), + notes: t('backgroundIcebergNotes') + }, + twinkly_lights: { + text: t('backgroundTwinklyLightsText'), + notes: t('backgroundTwinklyLightsNotes') + }, + south_pole: { + text: t('backgroundSouthPoleText'), + notes: t('backgroundSouthPoleNotes') + } + }, + backgrounds012015: { + ice_cave: { + text: t('backgroundIceCaveText'), + notes: t('backgroundIceCaveNotes') + }, + frigid_peak: { + text: t('backgroundFrigidPeakText'), + notes: t('backgroundFrigidPeakNotes') + }, + snowy_pines: { + text: t('backgroundSnowyPinesText'), + notes: t('backgroundSnowyPinesNotes') + } + }, + backgrounds022015: { + blacksmithy: { + text: t('backgroundBlacksmithyText'), + notes: t('backgroundBlacksmithyNotes') + }, + crystal_cave: { + text: t('backgroundCrystalCaveText'), + notes: t('backgroundCrystalCaveNotes') + }, + distant_castle: { + text: t('backgroundDistantCastleText'), + notes: t('backgroundDistantCastleNotes') + } + }, + backgrounds032015: { + spring_rain: { + text: t('backgroundSpringRainText'), + notes: t('backgroundSpringRainNotes') + }, + stained_glass: { + text: t('backgroundStainedGlassText'), + notes: t('backgroundStainedGlassNotes') + }, + rolling_hills: { + text: t('backgroundRollingHillsText'), + notes: t('backgroundRollingHillsNotes') + } + }, + backgrounds042015: { + cherry_trees: { + text: t('backgroundCherryTreesText'), + notes: t('backgroundCherryTreesNotes') + }, + floral_meadow: { + text: t('backgroundFloralMeadowText'), + notes: t('backgroundFloralMeadowNotes') + }, + gumdrop_land: { + text: t('backgroundGumdropLandText'), + notes: t('backgroundGumdropLandNotes') + } + }, + backgrounds052015: { + marble_temple: { + text: t('backgroundMarbleTempleText'), + notes: t('backgroundMarbleTempleNotes') + }, + mountain_lake: { + text: t('backgroundMountainLakeText'), + notes: t('backgroundMountainLakeNotes') + }, + pagodas: { + text: t('backgroundPagodasText'), + notes: t('backgroundPagodasNotes') + } + }, + backgrounds062015: { + drifting_raft: { + text: t('backgroundDriftingRaftText'), + notes: t('backgroundDriftingRaftNotes') + }, + shimmery_bubbles: { + text: t('backgroundShimmeryBubblesText'), + notes: t('backgroundShimmeryBubblesNotes') + }, + island_waterfalls: { + text: t('backgroundIslandWaterfallsText'), + notes: t('backgroundIslandWaterfallsNotes') + } + }, + backgrounds072015: { + dilatory_ruins: { + text: t('backgroundDilatoryRuinsText'), + notes: t('backgroundDilatoryRuinsNotes') + }, + giant_wave: { + text: t('backgroundGiantWaveText'), + notes: t('backgroundGiantWaveNotes') + }, + sunken_ship: { + text: t('backgroundSunkenShipText'), + notes: t('backgroundSunkenShipNotes') + } + }, + backgrounds082015: { + pyramids: { + text: t('backgroundPyramidsText'), + notes: t('backgroundPyramidsNotes') + }, + sunset_savannah: { + text: t('backgroundSunsetSavannahText'), + notes: t('backgroundSunsetSavannahNotes') + }, + twinkly_party_lights: { + text: t('backgroundTwinklyPartyLightsText'), + notes: t('backgroundTwinklyPartyLightsNotes') + } + }, + backgrounds092015: { + market: { + text: t('backgroundMarketText'), + notes: t('backgroundMarketNotes') + }, + stable: { + text: t('backgroundStableText'), + notes: t('backgroundStableNotes') + }, + tavern: { + text: t('backgroundTavernText'), + notes: t('backgroundTavernNotes') + } + }, + backgrounds102015: { + harvest_moon: { + text: t('backgroundHarvestMoonText'), + notes: t('backgroundHarvestMoonNotes') + }, + slimy_swamp: { + text: t('backgroundSlimySwampText'), + notes: t('backgroundSlimySwampNotes') + }, + swarming_darkness: { + text: t('backgroundSwarmingDarknessText'), + notes: t('backgroundSwarmingDarknessNotes') + } + }, + backgrounds112015: { + floating_islands: { + text: t('backgroundFloatingIslandsText'), + notes: t('backgroundFloatingIslandsNotes') + }, + night_dunes: { + text: t('backgroundNightDunesText'), + notes: t('backgroundNightDunesNotes') + }, + sunset_oasis: { + text: t('backgroundSunsetOasisText'), + notes: t('backgroundSunsetOasisNotes') + } + }, + backgrounds122015: { + alpine_slopes: { + text: t('backgroundAlpineSlopesText'), + notes: t('backgroundAlpineSlopesNotes') + }, + snowy_sunrise: { + text: t('backgroundSnowySunriseText'), + notes: t('backgroundSnowySunriseNotes') + }, + winter_town: { + text: t('backgroundWinterTownText'), + notes: t('backgroundWinterTownNotes') + } + }, +}; + +api.subscriptionBlocks = { + basic_earned: { + months: 1, + price: 5 + }, + basic_3mo: { + months: 3, + price: 15 + }, + basic_6mo: { + months: 6, + price: 30 + }, + google_6mo: { + months: 6, + price: 24, + discount: true, + original: 30 + }, + basic_12mo: { + months: 12, + price: 48 + } +}; + +_.each(api.subscriptionBlocks, function(b, k) { + return b.key = k; +}); + +api.userDefaults = { + habits: [ + { + type: 'habit', + text: t('defaultHabit1Text'), + value: 0, + up: true, + down: false, + attribute: 'per' + }, { + type: 'habit', + text: t('defaultHabit2Text'), + value: 0, + up: false, + down: true, + attribute: 'str' + }, { + type: 'habit', + text: t('defaultHabit3Text'), + value: 0, + up: true, + down: true, + attribute: 'str' + } + ], + dailys: [], + todos: [ + { + type: 'todo', + text: t('defaultTodo1Text'), + notes: t('defaultTodoNotes'), + completed: false, + attribute: 'int' + } + ], + rewards: [ + { + type: 'reward', + text: t('defaultReward1Text'), + value: 10 + } + ], + tags: [ + { + name: t('defaultTag1') + }, { + name: t('defaultTag2') + }, { + name: t('defaultTag3') + } + ] +}; + +api.faq = require('./faq.js'); diff --git a/common/script/src/content/mystery-sets.js b/common/script/content/mystery-sets.js similarity index 58% rename from common/script/src/content/mystery-sets.js rename to common/script/content/mystery-sets.js index 9d0c6de7ea..d02ef61d36 100644 --- a/common/script/src/content/mystery-sets.js +++ b/common/script/content/mystery-sets.js @@ -1,128 +1,134 @@ -import {each, where} from 'lodash'; -import {flat as flattenedGear} from './gear/index'; +import { each } from 'lodash'; let mysterySets = { 201402: { start: '2014-02-22', end: '2014-02-28', - text: 'Winged Messenger Set' + text: 'Winged Messenger Set', }, 201403: { start: '2014-03-24', end: '2014-04-02', - text: 'Forest Walker Set' + text: 'Forest Walker Set', }, 201404: { start: '2014-04-24', end: '2014-05-02', - text: 'Twilight Butterfly Set' + text: 'Twilight Butterfly Set', }, 201405: { start: '2014-05-21', end: '2014-06-02', - text: 'Flame Wielder Set' + text: 'Flame Wielder Set', }, 201406: { start: '2014-06-23', end: '2014-07-02', - text: 'Octomage Set' + text: 'Octomage Set', }, 201407: { start: '2014-07-23', end: '2014-08-02', - text: 'Undersea Explorer Set' + text: 'Undersea Explorer Set', }, 201408: { start: '2014-08-23', end: '2014-09-02', - text: 'Sun Sorcerer Set' + text: 'Sun Sorcerer Set', }, 201409: { start: '2014-09-24', end: '2014-10-02', - text: 'Autumn Strider Set' + text: 'Autumn Strider Set', }, 201410: { start: '2014-10-24', end: '2014-11-02', - text: 'Winged Goblin Set' + text: 'Winged Goblin Set', }, 201411: { start: '2014-11-24', end: '2014-12-02', - text: 'Feast and Fun Set' + text: 'Feast and Fun Set', }, 201412: { start: '2014-12-25', end: '2015-01-02', - text: 'Penguin Set' + text: 'Penguin Set', }, 201501: { start: '2015-01-26', end: '2015-02-02', - text: 'Starry Knight Set' + text: 'Starry Knight Set', }, 201502: { start: '2015-02-24', end: '2015-03-02', - text: 'Winged Enchanter Set' + text: 'Winged Enchanter Set', }, 201503: { start: '2015-03-25', end: '2015-04-02', - text: 'Aquamarine Set' + text: 'Aquamarine Set', }, 201504: { start: '2015-04-24', end: '2015-05-02', - text: 'Busy Bee Set' + text: 'Busy Bee Set', }, 201505: { start: '2015-05-25', end: '2015-06-02', - text: 'Green Knight Set' + text: 'Green Knight Set', }, 201506: { start: '2015-06-25', end: '2015-07-02', - text: 'Neon Snorkeler Set' + text: 'Neon Snorkeler Set', }, 201507: { start: '2015-07-24', end: '2015-08-02', - text: 'Rad Surfer Set' + text: 'Rad Surfer Set', }, 201508: { start: '2015-08-23', end: '2015-09-02', - text: 'Cheetah Costume Set' + text: 'Cheetah Costume Set', }, 201509: { - start:'2015-09-24', - end:'2015-10-02', - text:'Werewolf Set' + start: '2015-09-24', + end: '2015-10-02', + text: 'Werewolf Set', + }, + 201510: { + start: '2015-10-26', + end: '2015-11-02', + text: 'Horned Goblin Set', + }, + 201511: { + start: '2015-11-25', + end: '2015-12-02', + text: 'Wood Warrior Set', }, 301404: { start: '3014-03-24', end: '3014-04-02', - text: 'Steampunk Standard Set' + text: 'Steampunk Standard Set', }, 301405: { start: '3014-04-24', end: '3014-05-02', - text: 'Steampunk Accessories Set' + text: 'Steampunk Accessories Set', }, - wondercon: { // @TODO: extract this out of mystery items + wondercon: { start: '2014-03-24', - end: '2014-04-01' - } + end: '2014-04-01', + }, }; -each(mysterySets, (objectSet, name) => { - objectSet.key = name; - objectSet.items = where(flattenedGear, { - mystery: name - }); +each(mysterySets, (value, key) => { + value.key = key; }); export default mysterySets; diff --git a/common/script/content/translation.js b/common/script/content/translation.js index e0e26450c5..eb6a39f8f0 100644 --- a/common/script/content/translation.js +++ b/common/script/content/translation.js @@ -1,21 +1,11 @@ -'use strict'; +import i18n from '../i18n'; -require('coffee-script'); -var i18n = require('../i18n.coffee'); - -var t = function(string, vars) { - var func = function(lang) { - if (vars == null) { - vars = { - a: 'a' - }; - } +export default function translator (string, vars = { a: 'a' }) { + function func (lang) { return i18n.t(string, vars, lang); - }; + } func.i18nLangFunc = true; // Trick to recognize this type of function return func; -}; - -module.exports = t; +} diff --git a/common/script/count.js b/common/script/count.js index de2bbf1227..6305646836 100644 --- a/common/script/count.js +++ b/common/script/count.js @@ -1,72 +1,71 @@ -'use strict'; +import _ from 'lodash'; +import content from './content/index'; -require('coffee-script'); -var _ = require('lodash'); -var content = require('./content/index.coffee'); +const DROP_ANIMALS = _.keys(content.pets); -var DROP_ANIMALS = _.keys(content.pets); +function beastMasterProgress (pets) { + let count = 0; -function beastMasterProgress(pets) { - var count = 0; - _(DROP_ANIMALS).each(function(animal) { - if(pets[animal] > 0 || pets[animal] == -1) - count++ + _(DROP_ANIMALS).each((animal) => { + if (pets[animal] > 0 || pets[animal] === -1) + count++; }); return count; } -function dropPetsCurrentlyOwned(pets) { - var count = 0; +function dropPetsCurrentlyOwned (pets) { + let count = 0; - _(DROP_ANIMALS).each(function(animal) { - if(pets[animal] > 0) - count++ + _(DROP_ANIMALS).each((animal) => { + if (pets[animal] > 0) + count++; }); return count; } -function mountMasterProgress(mounts) { - var count = 0; - _(DROP_ANIMALS).each(function(animal) { +function mountMasterProgress (mounts) { + let count = 0; + + _(DROP_ANIMALS).each((animal) => { if (mounts[animal]) - count++ + count++; }); return count; } -function remainingGearInSet(userGear, set) { - var gear = _.filter(content.gear.flat, function(item) { - var setMatches = item.klass === set; - var hasItem = userGear[item.key]; +function remainingGearInSet (userGear, set) { + let gear = _.filter(content.gear.flat, (item) => { + let setMatches = item.klass === set; + let hasItem = userGear[item.key]; return setMatches && !hasItem; }); - var count = _.size(gear); + let count = _.size(gear); return count; } -function questsOfCategory(userQuests, category) { - var quests = _.filter(content.quests, function(quest) { - var categoryMatches = quest.category === category; - var hasQuest = userQuests[quest.key]; +function questsOfCategory (userQuests, category) { + let quests = _.filter(content.quests, (quest) => { + let categoryMatches = quest.category === category; + let hasQuest = userQuests[quest.key]; return categoryMatches && hasQuest; }); - var count = _.size(quests); + let count = _.size(quests); return count; } -module.exports = { - beastMasterProgress: beastMasterProgress, - dropPetsCurrentlyOwned: dropPetsCurrentlyOwned, - mountMasterProgress: mountMasterProgress, - remainingGearInSet: remainingGearInSet, - questsOfCategory: questsOfCategory +export default { + beastMasterProgress, + dropPetsCurrentlyOwned, + mountMasterProgress, + remainingGearInSet, + questsOfCategory, }; diff --git a/common/script/cron.js b/common/script/cron.js new file mode 100644 index 0000000000..639bbf6b65 --- /dev/null +++ b/common/script/cron.js @@ -0,0 +1,110 @@ +/* + ------------------------------------------------------ + Cron and time / day functions + ------------------------------------------------------ + */ +import _ from 'lodash'; +import moment from 'moment'; + +export const DAY_MAPPING = { + 0: 'su', + 1: 'm', + 2: 't', + 3: 'w', + 4: 'th', + 5: 'f', + 6: 's', +}; + +/* + Each time we perform date maths (cron, task-due-days, etc), we need to consider user preferences. + Specifically {dayStart} (custom day start) and {timezoneOffset}. This function sanitizes / defaults those values. + {now} is also passed in for various purposes, one example being the test scripts scripts testing different "now" times. + */ + +function sanitizeOptions (o) { + let ref = Number(o.dayStart || 0); + let dayStart = !_.isNaN(ref) && ref >= 0 && ref <= 24 ? ref : 0; + let timezoneOffset = o.timezoneOffset ? Number(o.timezoneOffset) : Number(moment().zone()); + // TODO: check and clean timezoneOffset as for dayStart (e.g., might not be a number) + let now = o.now ? moment(o.now).zone(timezoneOffset) : moment().zone(timezoneOffset); + + // return a new object, we don't want to add "now" to user object + return { + dayStart, + timezoneOffset, + now, + }; +} + +export function startOfWeek (options = {}) { + let o = sanitizeOptions(options); + + return moment(o.now).startOf('week'); +} + +/* + This is designed for use with any date that has an important time portion (e.g., when comparing the current date-time with the previous cron's date-time for determing if cron should run now). + It changes the time portion of the date-time to be the Custom Day Start hour, so that the date-time is now the user's correct start of day. + It SUBTRACTS a day if the date-time's original hour is before CDS (e.g., if your CDS is 5am and it's currently 4am, it's still the previous day). + This is NOT suitable for manipulating any dates that are displayed to the user as a date with no time portion, such as a Daily's Start Dates (e.g., a Start Date of today shows only the date, so it should be considered to be today even if the hidden time portion is before CDS). + */ + +export function startOfDay (options = {}) { + let o = sanitizeOptions(options); + let dayStart = moment(o.now).startOf('day').add({ hours: o.dayStart }); + + if (moment(o.now).hour() < o.dayStart) { + dayStart.subtract({ days: 1 }); + } + return dayStart; +} + +/* + Absolute diff from "yesterday" till now + */ + +export function daysSince (yesterday, options = {}) { + let o = sanitizeOptions(options); + + return startOfDay(_.defaults({ now: o.now }, o)).diff(startOfDay(_.defaults({ now: yesterday }, o)), 'days'); +} + +/* + Should the user do this task on this date, given the task's repeat options and user.preferences.dayStart? + */ + +export function shouldDo (day, dailyTask, options = {}) { + if (dailyTask.type !== 'daily') { + return false; + } + let o = sanitizeOptions(options); + let startOfDayWithCDSTime = startOfDay(_.defaults({ now: day }, o)); + + // The time portion of the Start Date is never visible to or modifiable by the user so we must ignore it. + // Therefore, we must also ignore the time portion of the user's day start (startOfDayWithCDSTime), otherwise the date comparison will be wrong for some times. + // NB: The user's day start date has already been converted to the PREVIOUS day's date if the time portion was before CDS. + let taskStartDate = moment(dailyTask.startDate).zone(o.timezoneOffset); + + taskStartDate = moment(taskStartDate).startOf('day'); + if (taskStartDate > startOfDayWithCDSTime.startOf('day')) { + return false; // Daily starts in the future + } + if (dailyTask.frequency === 'daily') { // "Every X Days" + if (!dailyTask.everyX) { + return false; // error condition + } + let daysSinceTaskStart = startOfDayWithCDSTime.startOf('day').diff(taskStartDate, 'days'); + + return daysSinceTaskStart % dailyTask.everyX === 0; + } else if (dailyTask.frequency === 'weekly') { // "On Certain Days of the Week" + if (!dailyTask.repeat) { + return false; // error condition + } + let dayOfWeekNum = startOfDayWithCDSTime.day(); // e.g., 0 for Sunday + + return dailyTask.repeat[DAY_MAPPING[dayOfWeekNum]]; + } else { + return false; // error condition - unexpected frequency string + } +} diff --git a/common/script/i18n.coffee b/common/script/i18n.coffee deleted file mode 100644 index edc3ae02c8..0000000000 --- a/common/script/i18n.coffee +++ /dev/null @@ -1,44 +0,0 @@ -_ = require 'lodash' - -module.exports = - strings: null, # Strings for one single language - translations: {} # Strings for multiple languages {en: strings, de: strings, ...} - t: (stringName) -> # Other parameters allowed are vars (Object) and locale (String) - vars = arguments[1] - - if _.isString(arguments[1]) - vars = null - locale = arguments[1] - else if arguments[2]? - vars = arguments[1] - locale = arguments[2] - - locale = 'en' if (!locale? or (!module.exports.strings and !module.exports.translations[locale])) - - if module.exports.strings - string = module.exports.strings[stringName] - else - string = - module.exports.translations[locale] and - module.exports.translations[locale][stringName] - - clonedVars = _.clone(vars) or {} - clonedVars.locale = locale - - if string - try - _.template(string, (clonedVars)) - catch e - 'Error processing the string. Please see Help > Report a Bug.' - else - if module.exports.strings - stringNotFound = module.exports.strings.stringNotFound - else if module.exports.translations[locale] - stringNotFound = - module.exports.translations[locale] and - module.exports.translations[locale].stringNotFound - - try - _.template(stringNotFound, {string: stringName}) - catch e - 'Error processing the string. Please see Help > Report a Bug.' diff --git a/common/script/i18n.js b/common/script/i18n.js new file mode 100644 index 0000000000..908925e9e5 --- /dev/null +++ b/common/script/i18n.js @@ -0,0 +1,63 @@ +import _ from 'lodash'; + +let i18n = { + strings: null, + translations: {}, + t, // eslint-disable-line no-use-before-define +}; + +function t (stringName) { + let vars = arguments[1]; + let locale; + + if (_.isString(arguments[1])) { + vars = null; + locale = arguments[1]; + } else if (arguments[2]) { + locale = arguments[2]; + } + + let i18nNotSetup = !i18n.strings && !i18n.translations[locale]; + + if (!locale || i18nNotSetup) { + locale = 'en'; + } + + let string; + + if (i18n.strings) { + string = i18n.strings[stringName]; + } else { + string = i18n.translations[locale] && i18n.translations[locale][stringName]; + } + + let clonedVars = _.clone(vars) || {}; + + clonedVars.locale = locale; + + if (string) { + try { + return _.template(string, clonedVars); + } catch (_error) { + return 'Error processing the string. Please see Help > Report a Bug.'; + } + } else { + let stringNotFound; + + if (i18n.strings) { + stringNotFound = i18n.strings.stringNotFound; + } else if (i18n.translations[locale]) { + stringNotFound = i18n.translations[locale] && i18n.translations[locale].stringNotFound; + } + + try { + return _.template(stringNotFound, { + string: stringName, + }); + } catch (_error) { + return 'Error processing the string. Please see Help > Report a Bug.'; + } + } +} + +export default i18n; diff --git a/common/script/index.coffee b/common/script/index.coffee deleted file mode 100644 index 3566f5db79..0000000000 --- a/common/script/index.coffee +++ /dev/null @@ -1,1937 +0,0 @@ -moment = require('moment') -_ = require('lodash') -content = require('./content/index.coffee') -i18n = require('./i18n.coffee') -api = module.exports = {} - -api.i18n = i18n - -# little helper for large arrays of strings. %w"this that another" equivalent from Ruby, I really miss that function -$w = api.$w = (s)->s.split(' ') - -api.dotSet = (obj,path,val)-> - arr = path.split('.') - _.reduce arr, (curr, next, index) => - if (arr.length - 1) == index - curr[next] = val - (curr[next] ?= {}) - , obj -api.dotGet = (obj,path)-> - _.reduce path.split('.'), ((curr, next) => curr?[next]), obj - -### - Reflists are arrays, but stored as objects. Mongoose has a helluvatime working with arrays (the main problem for our - syncing issues) - so the goal is to move away from arrays to objects, since mongoose can reference elements by ID - no problem. To maintain sorting, we use these helper functions: -### -api.refPush = (reflist, item, prune=0) -> - item.sort = if _.isEmpty(reflist) then 0 else _.max(reflist,'sort').sort+1 - item.id = api.uuid() unless item.id and !reflist[item.id] - reflist[item.id] = item - -api.planGemLimits = - convRate: 20 #how much does a gem cost? - convCap: 25 #how many gems can be converted / month? - -### - ------------------------------------------------------ - Time / Day - ------------------------------------------------------ -### - -### - Each time we're performing date math (cron, task-due-days, etc), we need to take user preferences into consideration. - Specifically {dayStart} (custom day start) and {timezoneOffset}. This function sanitizes / defaults those values. - {now} is also passed in for various purposes, one example being the test scripts scripts testing different "now" times -### -sanitizeOptions = (o) -> - dayStart = if (!_.isNaN(+o.dayStart) and 0 <= +o.dayStart <= 24) then +o.dayStart else 0 - timezoneOffset = if o.timezoneOffset then +(o.timezoneOffset) else +moment().zone() - now = if o.now then moment(o.now).zone(timezoneOffset) else moment(+new Date).zone(timezoneOffset) - # return a new object, we don't want to add "now" to user object - {dayStart, timezoneOffset, now} - -api.startOfWeek = api.startOfWeek = (options={}) -> - o = sanitizeOptions(options) - moment(o.now).startOf('week') - -api.startOfDay = (options={}) -> - # This is designed for use with any date that has an important time portion (e.g., when comparing the current date-time with the previous cron's date-time for determing if cron should run now). - # It changes the time portion of the date-time to be the Custom Day Start hour, so that the date-time is now the user's correct start of day. - # It SUBTRACTS a day if the date-time's original hour is before CDS (e.g., if your CDS is 5am and it's currently 4am, it's still the previous day). - # This is NOT suitable for manipulating any dates that are displayed to the user as a date with no time portion, such as a Daily's Start Dates (e.g., a Start Date of today shows only the date, so it should be considered to be today even if the hidden time portion is before CDS). - o = sanitizeOptions(options) - dayStart = moment(o.now).startOf('day').add({hours:o.dayStart}) - if moment(o.now).hour() < o.dayStart - dayStart.subtract({days:1}) - dayStart - -api.dayMapping = {0:'su',1:'m',2:'t',3:'w',4:'th',5:'f',6:'s'} - -### - Absolute diff from "yesterday" till now -### -api.daysSince = (yesterday, options = {}) -> - o = sanitizeOptions options - Math.abs api.startOfDay(_.defaults {now:yesterday}, o).diff(api.startOfDay(_.defaults {now:o.now}, o), 'days') - -### - Should the user do this task on this date, given the task's repeat options and user.preferences.dayStart? -### -api.shouldDo = (day, dailyTask, options = {}) -> - return false unless dailyTask.type == 'daily' - o = sanitizeOptions options - startOfDayWithCDSTime = api.startOfDay(_.defaults {now:day}, o) # a moment() - - taskStartDate = moment(dailyTask.startDate).zone(o.timezoneOffset) - - # The time portion of the Start Date is never visible to or modifiable by the user so we must ignore it. - # Therefore, we must also ignore the time portion of the user's day start (startOfDayWithCDSTime), otherwise the date comparison will be wrong for some times. - # NB: The user's day start date has already been converted to the PREVIOUS day's date if the time portion was before CDS. - taskStartDate = moment(taskStartDate).startOf('day') - - if taskStartDate > startOfDayWithCDSTime.startOf('day') - return false # Daily starts in the future - - if dailyTask.frequency == 'daily' # "Every X Days" - if !dailyTask.everyX - return false # error condition - daysSinceTaskStart = startOfDayWithCDSTime.startOf('day').diff(taskStartDate, 'days') - everyXCheck = (daysSinceTaskStart % dailyTask.everyX == 0) - return everyXCheck - else if dailyTask.frequency == 'weekly' # "On Certain Days of the Week" - if !dailyTask.repeat - return false # error condition - dayOfWeekNum = startOfDayWithCDSTime.day() # e.g. 0 for Sunday - dayOfWeekCheck = dailyTask.repeat[api.dayMapping[dayOfWeekNum]] - return dayOfWeekCheck - else - # unexpected frequency string - return false - -### - ------------------------------------------------------ - Level cap - ------------------------------------------------------ -### - -api.maxLevel = 100 - -api.capByLevel = (lvl) -> - if lvl > api.maxLevel then api.maxLevel else lvl - -### - ------------------------------------------------------ - Health cap - ------------------------------------------------------ -### - -api.maxHealth = 50 - -### - ------------------------------------------------------ - Scoring - ------------------------------------------------------ -### - -api.tnl = (lvl) -> - Math.round(((Math.pow(lvl, 2) * 0.25) + (10 * lvl) + 139.75) / 10) * 10 - # round to nearest 10? - -### - A hyperbola function that creates diminishing returns, so you can't go to infinite (eg, with Exp gain). - {max} The asymptote - {bonus} All the numbers combined for your point bonus (eg, task.value * user.stats.int * critChance, etc) - {halfway} (optional) the point at which the graph starts bending -### -api.diminishingReturns = (bonus, max, halfway=max/2) -> - max*(bonus/(bonus+halfway)) - -api.monod = (bonus, rateOfIncrease, max) -> - rateOfIncrease*max*bonus/(rateOfIncrease*bonus+max) - -### -Preen history for users with > 7 history entries -This takes an infinite array of single day entries [day day day day day...], and turns it into a condensed array -of averages, condensing more the further back in time we go. Eg, 7 entries each for last 7 days; 1 entry each week -of this month; 1 entry for each month of this year; 1 entry per previous year: [day*7 week*4 month*12 year*infinite] -### -preenHistory = (history) -> - history = _.filter(history, (h) -> !!h) # discard nulls (corrupted somehow) - newHistory = [] - preen = (amount, groupBy) -> - groups = _.chain(history) - .groupBy((h) -> moment(h.date).format groupBy) # get date groupings to average against - .sortBy((h, k) -> k) # sort by date - .value() # turn into an array - groups = groups.slice(-amount) - groups.pop() # get rid of "this week", "this month", etc (except for case of days) - _.each groups, (group) -> - newHistory.push - date: moment(group[0].date).toDate() - #date: moment(group[0].date).format('MM/DD/YYYY') # Use this one when testing - value: _.reduce(group, ((m, obj) -> m + obj.value), 0) / group.length # average - true - - # Keep the last: - preen 50, "YYYY" # 50 years (habit will toootally be around that long!) - preen moment().format('MM'), "YYYYMM" # last MM months (eg, if today is 05, keep the last 5 months) - - # Then keep all days of this month. Note, the extra logic is to account for Habits, which can be counted multiple times per day - # FIXME I'd rather keep 1-entry/week of this month, then last 'd' days in this week. However, I'm having issues where the 1st starts mid week - thisMonth = moment().format('YYYYMM') - newHistory = newHistory.concat _.filter(history, (h)-> moment(h.date).format('YYYYMM') is thisMonth) - #preen Math.ceil(moment().format('D')/7), "YYYYww" # last __ weeks (# weeks so far this month) - #newHistory = newHistory.concat(history.slice -moment().format('D')) # each day of this week - - newHistory - - -### - Preen 3-day past-completed To-Dos from Angular & mobile app -### -api.preenTodos = (tasks) -> - _.where(tasks, (t) -> !t.completed || (t.challenge && t.challenge.id) || moment(t.dateCompleted).isAfter(moment().subtract({days:3}))) - -### - Update the in-browser store with new gear. FIXME this was in user.fns, but it was causing strange issues there -### -sortOrder = _.reduce content.gearTypes,((m,v,k)->m[v]=k;m), {} -api.updateStore = (user) -> - return unless user - changes= [] - _.each content.gearTypes, (type) -> - found = _.find content.gear.tree[type][user.stats.class], (item) -> - !user.items.gear.owned[item.key] - changes.push(found) if found - true - # Add special items (contrib gear, backer gear, etc) - changes = changes.concat _.filter content.gear.flat, (v) -> - v.klass in ['special','mystery','armoire'] and !user.items.gear.owned[v.key] and v.canOwn?(user) - # Return sorted store (array) - _.sortBy changes, (c)->sortOrder[c.type] - -### ------------------------------------------------------- -Content ------------------------------------------------------- -### - -api.content = content - - -### ------------------------------------------------------- -Misc Helpers ------------------------------------------------------- -### - -api.uuid = -> - "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace /[xy]/g, (c) -> - r = Math.random() * 16 | 0 - v = (if c is "x" then r else (r & 0x3 | 0x8)) - v.toString 16 - -api.countExists = (items)-> _.reduce(items,((m,v)->m+(if v then 1 else 0)),0) - -### -Even though Mongoose handles task defaults, we want to make sure defaults are set on the client-side before -sending up to the server for performance -### -api.taskDefaults = (task={}) -> - task.type = 'habit' unless task.type and task.type in ['habit','daily','todo','reward'] - defaults = - id: api.uuid() - text: if task.id? then task.id else '' - notes: '' - priority: 1 - challenge: {} - attribute: 'str' - dateCreated: new Date() - _.defaults task, defaults - _.defaults(task, {up:true,down:true}) if task.type is 'habit' - _.defaults(task, {history: []}) if task.type in ['habit', 'daily'] - _.defaults(task, {completed:false}) if task.type in ['daily', 'todo'] - _.defaults(task, {streak:0, repeat: {su:true,m:true,t:true,w:true,th:true,f:true,s:true}}, startDate: new Date(), everyX: 1, frequency: 'weekly') if task.type is 'daily' - task._id = task.id # may need this for TaskSchema if we go back to using it, see http://goo.gl/a5irq4 - task.value ?= if task.type is 'reward' then 10 else 0 - task.priority = 1 unless _.isNumber(task.priority) # hotfix for apiv1. once we're off apiv1, we can remove this - task - -api.percent = (x,y, dir) -> - switch dir - when "up" then roundFn = Math.ceil - when "down" then roundFn = Math.floor - else roundFn = Math.round - x=1 if x==0 - Math.max(0,roundFn(x/y*100)) - -### -Remove whitespace #FIXME are we using this anywwhere? Should we be? -### -api.removeWhitespace = (str) -> - return '' unless str - str.replace /\s/g, '' - -### -Encode the download link for .ics iCal file -### -api.encodeiCalLink = (uid, apiToken) -> - loc = window?.location.host or process?.env?.BASE_URL or '' - encodeURIComponent "http://#{loc}/v1/users/#{uid}/calendar.ics?apiToken=#{apiToken}" - -### -Gold amount from their money -### -api.gold = (num) -> - if num - return Math.floor num - else - return "0" - -### -Silver amount from their money -### -api.silver = (num) -> - if num - ("0" + Math.floor (num - Math.floor(num))*100).slice -2 - else - return "00" - -### -Task classes given everything about the class -### -api.taskClasses = (task, filters=[], dayStart=0, lastCron=+new Date, showCompleted=false, main=false) -> - return unless task - {type, completed, value, repeat, priority} = task - - # Filters - if main # only show when on your own list - if !task._editing # always show task being edited (even when tag removed) - for filter, enabled of filters - if enabled and not task.tags?[filter] - # All the other classes don't matter - return 'hidden' - - classes = type - - if task._editing - classes += " beingEdited" # Assists filtering by third-party themes. - # Example: theme normally hides daily when not scheduled for today, - # BUT keeps showing daily when being edited to unschedule it for today - - # show as completed if completed (naturally) or not required for today - if type in ['todo', 'daily'] - if completed or (type is 'daily' and !api.shouldDo(+new Date, task, {dayStart})) - classes += " completed" - else - classes += " uncompleted" - else if type is 'habit' - classes += ' habit-wide' if task.down and task.up - classes += ' habit-narrow' if !task.down and !task.up - - if priority == 0.1 - classes += ' difficulty-trivial' - else if priority == 1 - classes += ' difficulty-easy' - else if priority == 1.5 - classes += ' difficulty-medium' - else if priority == 2 - classes += ' difficulty-hard' - - if value < -20 - classes += ' color-worst' - else if value < -10 - classes += ' color-worse' - else if value < -1 - classes += ' color-bad' - else if value < 1 - classes += ' color-neutral' - else if value < 5 - classes += ' color-good' - else if value < 10 - classes += ' color-better' - else - classes += ' color-best' - return classes - -### -Friendly timestamp -### -api.friendlyTimestamp = (timestamp) -> moment(timestamp).format('MM/DD h:mm:ss a') - -### -Does user have new chat messages? -### -api.newChatMessages = (messages, lastMessageSeen) -> - return false unless messages?.length > 0 - messages?[0] and (messages[0].id != lastMessageSeen) - -### -are any tags active? -### -api.noTags = (tags) -> _.isEmpty(tags) or _.isEmpty(_.filter(tags, (t)->t)) - -### -Are there tags applied? -### -api.appliedTags = (userTags, taskTags) -> - arr = [] - _.each userTags, (t) -> - return unless t? - arr.push(t.name) if taskTags?[t.id] - arr.join(', ') - -### -Various counting functions -### -api.count = require('./count') - -### ------------------------------------------------------- -User (prototype wrapper to give it ops, helper funcs, and virtuals ------------------------------------------------------- -### - -### -User is now wrapped (both on client and server), adding a few new properties: - * getters (_statsComputed, tasks, etc) - * user.fns, which is a bunch of helper functions - These were originally up above, but they make more sense belonging to the user object so we don't have to pass - the user object all over the place. In fact, we should pull in more functions such as cron(), updateStats(), etc. - * user.ops, which is super important: - -If a function is inside user.ops, it has magical properties. If you call it on the client it updates the user object in -the browser and when it's done it automatically POSTs to the server, calling src/controllers/user.js#OP_NAME (the exact same name -of the op function). The first argument req is {query, body, params}, it's what the express controller function -expects. This means we call our functions as if we were calling an Express route. Eg, instead of score(task, direction), -we call score({params:{id:task.id,direction:direction}}). This also forces us to think about our routes (whether to use -params, query, or body for variables). see http://stackoverflow.com/questions/4024271/rest-api-best-practices-where-to-put-parameters - -If `src/controllers/user.js#OP_NAME` doesn't exist on the server, it's automatically added. It runs the code in user.ops.OP_NAME -to update the user model server-side, then performs `user.save()`. You can see this in action for `user.ops.buy`. That -function doesn't exist on the server - so the client calls it, it updates user in the browser, auto-POSTs to server, server -handles it by calling `user.ops.buy` again (to update user on the server), and then saves. We can do this for -everything that doesn't need any code difference from what's in user.ops.OP_NAME for special-handling server-side. If we -*do* need special handling, just add `src/controllers/user.js#OP_NAME` to override the user.ops.OP_NAME, and be -sure to call user.ops.OP_NAME at some point within the overridden function. - -TODO - * Is this the best way to wrap the user object? I thought of using user.prototype, but user is an object not a Function. - user on the server is a Mongoose model, so we can use prototype - but to do it on the client, we'd probably have to - move to $resource for user - * Move to $resource! -### -api.wrap = (user, main=true) -> - return if user._wrapped - user._wrapped = true - - # ---------------------------------------------------------------------- - # user.ops shared client/server operations - # ---------------------------------------------------------------------- - - if main - user.ops = - - # ------ - # User - # ------ - - update: (req, cb) -> - _.each req.body, (v,k) -> - user.fns.dotSet(k,v);true - cb? null, user - - sleep: (req, cb) -> - user.preferences.sleep = !user.preferences.sleep - cb? null, {} - - revive: (req, cb, analytics) -> - return cb?({code:400, message: "Cannot revive if not dead"}) unless user.stats.hp <= 0 - - # Reset stats after death - _.merge user.stats, {hp:50, exp:0, gp:0} - user.stats.lvl-- if user.stats.lvl > 1 - - # Lose a stat point - lostStat = user.fns.randomVal _.reduce(['str','con','per','int'], ((m,k)->m[k]=k if user.stats[k];m), {}) - user.stats[lostStat]-- if lostStat - - # Lose a gear piece - # Free items (value:0) cannot be lost to avoid "pay to win". Subscribers have more free (Mystery) items and so would have a higher chance of losing a free one. The only exception is that the weapon_warrior_0 free item can be lost so that a new player who dies before buying any gear does experience equipment loss. - # Note ""+k string-casting. Without this, when run on the server Mongoose returns funny objects - cl = user.stats.class - gearOwned = user.items.gear.owned.toObject?() or user.items.gear.owned - losableItems = {} - _.each gearOwned, (v,k) -> - if v - itm = content.gear.flat[''+k] - if itm - if (itm.value > 0 || k == 'weapon_warrior_0') && ( itm.klass == cl || ( itm.klass == 'special' && (! itm.specialClass || itm.specialClass == cl) ) || itm.klass == 'armoire' ) - losableItems[''+k]=''+k - lostItem = user.fns.randomVal losableItems - if item = content.gear.flat[lostItem] - user.items.gear.owned[lostItem] = false - user.items.gear.equipped[item.type] = "#{item.type}_base_0" if user.items.gear.equipped[item.type] is lostItem - user.items.gear.costume[item.type] = "#{item.type}_base_0" if user.items.gear.costume[item.type] is lostItem - user.markModified? 'items.gear' - - analyticsData = { - uuid: user._id, - lostItem: lostItem, - gaLabel: lostItem, - category: 'behavior' - } - analytics?.track('Death', analyticsData) - - cb? (if item then {code:200,message: i18n.t('messageLostItem', {itemText: item.text(req.language)}, req.language)} else null), user - - reset: (req, cb) -> - user.habits = [] - user.dailys = [] - user.todos = [] - user.rewards = [] - user.stats.hp = 50 - user.stats.lvl = 1 - user.stats.gp = 0 - user.stats.exp = 0 - # TODO handle MP - gear = user.items.gear - _.each ['equipped', 'costume'], (type) -> - gear[type].armor = 'armor_base_0' - gear[type].weapon = 'weapon_base_0' - gear[type].head = 'head_base_0' - gear[type].shield = 'shield_base_0' - gear.owned = {} if typeof gear.owned == 'undefined' - _.each gear.owned, (v, k)-> gear.owned[k]=false if gear.owned[k];true - gear.owned.weapon_warrior_0 = true - user.markModified? 'items.gear.owned' - user.preferences.costume = false - cb? null, user - - reroll: (req, cb, analytics) -> - if user.balance < 1 - return cb? {code:401,message: i18n.t('notEnoughGems', req.language)} - user.balance-- - _.each user.tasks, (task) -> - unless task.type is 'reward' - task.value = 0 - user.stats.hp = 50 - - analyticsData = { - uuid: user._id, - acquireMethod: 'Gems', - gemCost: 4, - category: 'behavior' - } - analytics?.track('Fortify Potion', analyticsData) - - cb? null, user - - rebirth: (req, cb, analytics) -> - # Cost is 8 Gems ($2) - if (user.balance < 2 && user.stats.lvl < api.maxLevel) - return cb? {code:401,message: i18n.t('notEnoughGems', req.language)} - - analyticsData = { - uuid: user._id, - category: 'behavior' - } - # only charge people if they are under the max level - ryan - if user.stats.lvl < api.maxLevel - user.balance -= 2 - analyticsData.acquireMethod = 'Gems' - analyticsData.gemCost = 8 - else - analyticsData.gemCost = 0 - analyticsData.acquireMethod = '> 100' - - analytics?.track('Rebirth', analyticsData) - - # Save off user's level, for calculating achievement eligibility later - lvl = api.capByLevel(user.stats.lvl) - # Turn tasks yellow, zero out streaks - _.each user.tasks, (task) -> - unless task.type is 'reward' - task.value = 0 - if task.type is 'daily' - task.streak = 0 - # Reset all dynamic stats - stats = user.stats - stats.buffs = {} - stats.hp = 50 - stats.lvl = 1 - stats.class = 'warrior' - _.each ['per','int','con','str','points','gp','exp','mp'], (value) -> - stats[value] = 0 - # Deequip character, set back to base armor and training sword - gear = user.items.gear - _.each ['equipped', 'costume'], (type) -> - gear[type] = {}; # deequip weapon, eyewear, headAccessory, etc, plus future new types - gear[type].armor = 'armor_base_0' - gear[type].weapon = 'weapon_warrior_0' - gear[type].head = 'head_base_0' - gear[type].shield = 'shield_base_0' - if user.items.currentPet then user.ops.equip({params:{type: 'pet', key: user.items.currentPet}}) - if user.items.currentMount then user.ops.equip({params:{type: 'mount', key: user.items.currentMount}}) - # Strip owned gear down to the training sword and free items (zero gold value), but preserve purchase history so user can re-purchase limited edition equipment - _.each gear.owned, (v, k) -> if gear.owned[k] and content.gear.flat[k].value then gear.owned[k] = false; true - gear.owned.weapon_warrior_0 = true - user.markModified? 'items.gear.owned' - user.preferences.costume = false - # Remove unlocked features - flags = user.flags - if not user.achievements.beastMaster - flags.rebirthEnabled = false - flags.itemsEnabled = false - flags.dropsEnabled = false - flags.classSelected = false - flags.levelDrops = {} - # Award an achievement if this is their first Rebirth, or if they made it further than last time - if not (user.achievements.rebirths) - user.achievements.rebirths = 1 - user.achievements.rebirthLevel = lvl - else if (lvl > user.achievements.rebirthLevel or lvl is 100) - user.achievements.rebirths++ - user.achievements.rebirthLevel = lvl - user.stats.buffs = {} - # user.markModified? 'stats' - cb? null, user - - allocateNow: (req, cb) -> - _.times user.stats.points, user.fns.autoAllocate - user.stats.points = 0 - user.markModified? 'stats' - cb? null, user.stats - - # ------ - # Tasks - # ------ - - clearCompleted: (req, cb) -> - _.remove user.todos, (t)-> t.completed and !t.challenge?.id - user.markModified? 'todos' - cb? null, user.todos - - sortTask: (req, cb) -> - {id} = req.params - {to, from} = req.query - task = user.tasks[id] - return cb?({code:404, message: i18n.t('messageTaskNotFound', req.language)}) unless task - return cb?('?to=__&from=__ are required') unless to? and from? - tasks = user["#{task.type}s"] - if task.type is 'todo' and tasks[from] isnt task # client indices don't match because of preened tasks - preenedTasks = api.preenTodos(tasks); - to = tasks.indexOf(preenedTasks[to]) unless to == -1 # Push To Bottom doesn't require readjustment - from = tasks.indexOf(preenedTasks[from]) - return cb?({code:404, message: i18n.t('messageTaskNotFound', req.language)}) unless tasks[from] is task - movedTask = tasks.splice(from, 1)[0] - if to == -1 # we've used the Push To Bottom feature - tasks.push(movedTask) - else # any other sort method uses only positive 'to' values - tasks.splice(to, 0, movedTask) - cb? null, tasks - - updateTask: (req, cb) -> - return cb?({code:404,message:i18n.t('messageTaskNotFound', req.language)}) unless task = user.tasks[req.params?.id] - _.merge task, _.omit(req.body,['checklist','id', 'type']) - task.checklist = req.body.checklist if req.body.checklist - task.markModified? 'tags' - cb? null, task - - deleteTask: (req, cb) -> - task = user.tasks[req.params?.id] - return cb?({code:404,message:i18n.t('messageTaskNotFound', req.language)}) unless task - i = user[task.type + "s"].indexOf(task) - user[task.type + "s"].splice(i, 1) if ~i - cb? null, {} - - addTask: (req, cb) -> - task = api.taskDefaults(req.body) - return cb?({code:409,message:i18n.t('messageDuplicateTaskID', req.language)}) if user.tasks[task.id]? - user["#{task.type}s"].unshift(task) - if user.preferences.newTaskEdit then task._editing = true - if user.preferences.tagsCollapsed then task._tags = true - if !user.preferences.advancedCollapsed then task._advanced = true - cb? null, task - task - - # ------ - # Tags - # ------ - - addTag: (req, cb) -> - user.tags ?= [] - user.tags.push - name: req.body.name - id: req.body.id or api.uuid() - cb? null, user.tags - - sortTag: (req, cb) -> - {to, from} = req.query - return cb?('?to=__&from=__ are required') unless to? and from? - user.tags.splice to, 0, user.tags.splice(from, 1)[0] - cb? null, user.tags - - - updateTag: (req, cb) -> - tid = req.params.id - i = _.findIndex user.tags, {id: tid} - return cb?({code:404,message:i18n.t('messageTagNotFound', req.language)}) if !~i - user.tags[i].name = req.body.name - cb? null, user.tags[i] - - deleteTag: (req, cb) -> - tid = req.params.id - i = _.findIndex user.tags, {id: tid} - return cb?({code:404,message:i18n.t('messageTagNotFound', req.language)}) if !~i - tag = user.tags[i] - delete user.filters[tag.id] - user.tags.splice i, 1 - - # remove tag from all tasks - _.each user.tasks, (task) -> - delete task.tags[tag.id] - - _.each ['habits','dailys','todos','rewards'], (type) -> - user.markModified? type - cb? null, user.tags - - # ------ - # Webhooks - # ------ - addWebhook: (req, cb) -> - wh = user.preferences.webhooks - api.refPush(wh, {url:req.body.url, enabled: req.body.enabled or true, id:req.body.id}) - user.markModified? 'preferences.webhooks' - cb? null, user.preferences.webhooks - updateWebhook: (req, cb) -> - _.merge(user.preferences.webhooks[req.params.id], req.body) - user.markModified? 'preferences.webhooks' - cb? null, user.preferences.webhooks - deleteWebhook: (req, cb) -> - delete user.preferences.webhooks[req.params.id] - user.markModified? 'preferences.webhooks' - cb? null, user.preferences.webhooks - - # ------ - # Push Notifications - # ------ - addPushDevice: (req, cb) -> - user.pushDevices = [] unless user.pushDevices - pd = user.pushDevices - item = {regId:req.body.regId, type:req.body.type} - i = _.findIndex pd, {regId: item.regId} - - pd.push(item) unless i != -1 - - cb? null, user.pushDevices - - # ------ - # Inbox - # ------ - clearPMs: (req, cb) -> - user.inbox.messages = {} - user.markModified? 'inbox.messages' - cb? null, user.inbox.messages - deletePM: (req, cb) -> - delete user.inbox.messages[req.params.id] - user.markModified? 'inbox.messages.'+req.params.id - cb? null, user.inbox.messages - blockUser: (req, cb) -> - i = user.inbox.blocks.indexOf(req.params.uuid) - if ~i then user.inbox.blocks.splice(i,1) else user.inbox.blocks.push(req.params.uuid) - user.markModified? 'inbox.blocks' - cb? null, user.inbox.blocks - - # ------ - # Inventory - # ------ - - feed: (req, cb) -> - {pet,food} = req.params - food = content.food[food] - [egg, potion] = pet.split('-') - userPets = user.items.pets - - # Generate pet display name variable - potionText = if content.hatchingPotions[potion] then content.hatchingPotions[potion].text() else potion - eggText = if content.eggs[egg] then content.eggs[egg].text() else egg - petDisplayName = i18n.t('petName', { - potion: potionText - egg: eggText - }) - - return cb?({code:404, message:i18n.t('messagePetNotFound', req.language)}) unless userPets[pet] - return cb?({code:404, message:i18n.t('messageFoodNotFound', req.language)}) unless user.items.food?[food.key] - return cb?({code:401, message:i18n.t('messageCannotFeedPet', req.language)}) if content.specialPets[pet] - return cb?({code:401, message:i18n.t('messageAlreadyMount', req.language)}) if user.items.mounts[pet] - - message = '' - evolve = -> - userPets[pet] = -1 - # changed to -1 to mark "owned" pets - user.items.mounts[pet] = true - user.items.currentPet = "" if pet is user.items.currentPet - message = i18n.t('messageEvolve', {egg: petDisplayName}, req.language) - - if food.key is 'Saddle' - evolve() - else - if food.target is potion or content.hatchingPotions[potion].premium - userPets[pet] += 5 - message = i18n.t('messageLikesFood', {egg: petDisplayName, foodText: food.text(req.language)}, req.language) - else - userPets[pet] += 2 - message = i18n.t('messageDontEnjoyFood', {egg: petDisplayName, foodText: food.text(req.language)}, req.language) - if userPets[pet] >= 50 and !user.items.mounts[pet] - evolve() - user.items.food[food.key]-- - cb? {code:200, message}, {value: userPets[pet]} - - buySpecialSpell: (req,cb) -> - {key} = req.params - item = content.special[key] - return cb?({code:401, message: i18n.t('messageNotEnoughGold', req.language)}) if user.stats.gp < item.value - user.stats.gp -= item.value - user.items.special[key] ?= 0 - user.items.special[key]++ - user.markModified? 'items.special' - message = i18n.t('messageBought', {itemText: item.text(req.language)}, req.language) - cb? {code:200,message}, _.pick(user,$w 'items stats') - - # buy is for using Gold, purchase is for Gems (I know, I know...) - purchase: (req, cb, analytics) -> - {type,key} = req.params - - if type is 'gems' and key is 'gem' - {convRate, convCap} = api.planGemLimits - convCap += user.purchased.plan.consecutive.gemCapExtra - return cb?({code:401,message:"Must subscribe to purchase gems with GP"},req) unless user.purchased?.plan?.customerId - return cb?({code:401,message:"Not enough Gold"}) unless user.stats.gp >= convRate - return cb?({code:401,message:"You've reached the Gold=>Gem conversion cap (#{convCap}) for this month. We have this to prevent abuse / farming. The cap will reset within the first three days of next month."}) if user.purchased.plan.gemsBought >= convCap - user.balance += .25 - user.purchased.plan.gemsBought++ - user.stats.gp -= convRate - - analyticsData = { - uuid: user._id, - itemKey: key, - acquireMethod: 'Gold', - goldCost: convRate, - category: 'behavior' - } - analytics?.track('purchase gems', analyticsData) - - return cb? {code:200,message:"+1 Gem"}, _.pick(user,$w 'stats balance') - - return cb?({code:404,message:":type must be in [eggs,hatchingPotions,food,quests,gear]"},req) unless type in ['eggs','hatchingPotions','food','quests','gear'] - if type is 'gear' - item = content.gear.flat[key] - return cb?({code:401, message: i18n.t('alreadyHave', req.language)}) if user.items.gear.owned[key] - price = (if item.twoHanded or item.gearSet is 'animal' then 2 else 1) / 4 - else - item = content[type][key] - price = item.value / 4 - return cb?({code:404,message:":key not found for Content.#{type}"},req) unless item - return cb?({code:403, message: i18n.t('messageNotAvailable', req.language)}) if not item.canBuy(user) - return cb?({code:403, message: i18n.t('notEnoughGems', req.language)}) if (user.balance < price) or !user.balance - user.balance -= price - if type is 'gear' then user.items.gear.owned[key] = true - else - user.items[type][key] = 0 unless user.items[type][key] > 0 - user.items[type][key]++ - - analyticsData = { - uuid: user._id, - itemKey: key, - itemType: 'Market', - acquireMethod: 'Gems', - gemCost: item.value, - category: 'behavior' - } - analytics?.track('acquire item', analyticsData) - - cb? null, _.pick(user,$w 'items balance') - - releasePets: (req, cb, analytics) -> - if user.balance < 1 - return cb? {code:401,message: i18n.t('notEnoughGems', req.language)} - else - user.balance -= 1 - for pet of content.pets - user.items.pets[pet] = 0 - if not user.achievements.beastMasterCount - user.achievements.beastMasterCount = 0 - user.achievements.beastMasterCount++ - user.items.currentPet = "" - - analyticsData = { - uuid: user._id, - acquireMethod: 'Gems', - gemCost: 4, - category: 'behavior' - } - analytics?.track('release pets', analyticsData) - cb? null, user - - releaseMounts: (req, cb, analytics) -> - if user.balance < 1 - return cb? {code:401,message: i18n.t('notEnoughGems', req.language)} - else - user.balance -= 1 - user.items.currentMount = "" - for mount of content.pets - user.items.mounts[mount] = null - if not user.achievements.mountMasterCount - user.achievements.mountMasterCount = 0 - user.achievements.mountMasterCount++ - - analyticsData = { - uuid: user._id, - acquireMethod: 'Gems', - gemCost: 4, - category: 'behavior' - } - analytics?.track('release mounts', analyticsData) - - cb? null, user - - releaseBoth: (req, cb) -> - if user.balance < 1.5 and not user.achievements.triadBingo - return cb? {code:401,message: i18n.t('notEnoughGems', req.language)} - else - giveTriadBingo = true - if not user.achievements.triadBingo - analyticsData = { - uuid: user._id, - acquireMethod: 'Gems', - gemCost: 6, - category: 'behavior' - } - analytics?.track('release pets & mounts', analyticsData) - user.balance -= 1.5 - user.items.currentMount = "" - user.items.currentPet = "" - for animal of content.pets - giveTriadBingo = false if user.items.pets[animal] == -1 - user.items.pets[animal] = 0 - user.items.mounts[animal] = null - if not user.achievements.beastMasterCount - user.achievements.beastMasterCount = 0 - user.achievements.beastMasterCount++ - if not user.achievements.mountMasterCount - user.achievements.mountMasterCount = 0 - user.achievements.mountMasterCount++ - if giveTriadBingo - if not user.achievements.triadBingoCount - user.achievements.triadBingoCount = 0 - user.achievements.triadBingoCount++ - cb? null, user - - # buy is for gear, purchase is for gem-purchaseables (i know, I know...) - buy: (req, cb, analytics) -> - {key} = req.params - - item = if key is 'potion' then content.potion - else if key is 'armoire' then content.armoire - else content.gear.flat[key] - return cb?({code:404, message:"Item '#{key} not found (see https://github.com/HabitRPG/habitrpg/blob/develop/common/script/content/index.coffee)"}) unless item - return cb?({code:401, message: i18n.t('messageNotEnoughGold', req.language)}) if user.stats.gp < item.value - return cb?({code:401, message: "You can't buy this item"}) if item.canOwn? and !item.canOwn(user) - armoireResp = undefined - if item.key is 'potion' - user.stats.hp += 15 - user.stats.hp = 50 if user.stats.hp > 50 - else if item.key is 'armoire' - armoireResult = user.fns.predictableRandom(user.stats.gp) - # We use a different seed to choose the Armoire action than we use - # to choose the sub-action, otherwise only some of the foods can - # be given. E.g., if a seed gives armoireResult < .5 (food) then - # the same seed would give one of the first five foods only. - eligibleEquipment = _.filter(content.gear.flat, ((i)->i.klass is 'armoire' and !user.items.gear.owned[i.key])) - if !_.isEmpty(eligibleEquipment) and (armoireResult < .6 or !user.flags.armoireOpened) - eligibleEquipment.sort() # https://github.com/HabitRPG/habitrpg/issues/5376#issuecomment-111799217 - drop = user.fns.randomVal(eligibleEquipment) - user.items.gear.owned[drop.key] = true - user.flags.armoireOpened = true - message = i18n.t('armoireEquipment', {image: '', dropText: drop.text(req.language)}, req.language) - if api.count.remainingGearInSet(user.items.gear.owned, 'armoire') is 0 then user.flags.armoireEmpty = true - armoireResp = {type: "gear", dropKey: drop.key, dropText: drop.text(req.language)} - else if (!_.isEmpty(eligibleEquipment) and armoireResult < .8) or armoireResult < .5 - drop = user.fns.randomVal _.where(content.food, {canDrop:true}) - user.items.food[drop.key] ?= 0 - user.items.food[drop.key] += 1 - message = i18n.t('armoireFood', {image: '', dropArticle: drop.article, dropText: drop.text(req.language)}, req.language) - armoireResp = {type: "food", dropKey: drop.key, dropArticle: drop.article, dropText: drop.text(req.language)} - else - armoireExp = Math.floor(user.fns.predictableRandom(user.stats.exp) * 40 + 10) - user.stats.exp += armoireExp - message = i18n.t('armoireExp', req.language) - armoireResp = {"type": "experience", "value": armoireExp} - else - user.items.gear.equipped[item.type] = item.key - user.items.gear.owned[item.key] = true - message = user.fns.handleTwoHanded(item, null, req) - message ?= i18n.t('messageBought', {itemText: item.text(req.language)}, req.language) - if item.last then user.fns.ultimateGear() - user.stats.gp -= item.value - - analyticsData = { - uuid: user._id, - itemKey: key, - acquireMethod: 'Gold', - goldCost: item.value, - category: 'behavior' - } - analytics?.track('acquire item', analyticsData) - - buyResp = _.pick(user,$w 'items achievements stats flags') - buyResp["armoire"] = armoireResp if armoireResp - cb? {code:200, message}, buyResp - - buyQuest: (req, cb, analytics) -> - {key} = req.params - item = content.quests[key] - return cb?({code:404, message:"Quest '#{key} not found (see https://github.com/HabitRPG/habitrpg/blob/develop/common/script/content/index.coffee)"}) unless item - return cb?({code:404, message:"Quest '#{key} is not a Gold-purchasable quest (see https://github.com/HabitRPG/habitrpg/blob/develop/common/script/content/index.coffee)"}) unless item.category is 'gold' and item.goldValue - return cb?({code:401, message: i18n.t('messageNotEnoughGold', req.language)}) if user.stats.gp < item.goldValue - message = i18n.t('messageBought', {itemText: item.text(req.language)}, req.language) - user.items.quests[item.key] ?= 0 - user.items.quests[item.key] += 1 - user.stats.gp -= item.goldValue - analyticsData = { - uuid: user._id, - itemKey: item.key, - itemType: 'Market', - goldCost: item.goldValue, - acquireMethod: 'Gold', - category: 'behavior' - } - analytics?.track('acquire item', analyticsData) - cb? {code:200, message}, user.items.quests - - buyMysterySet: (req, cb, analytics)-> - return cb?({code:401, message:i18n.t('notEnoughHourglasses', req.language)}) unless user.purchased.plan.consecutive.trinkets > 0 - mysterySet = content.timeTravelerStore(user.items.gear.owned)?[req.params.key] - if window?.confirm? - return unless window.confirm(i18n.t('hourglassBuyEquipSetConfirm')) - return cb?({code:404, message:"Mystery set not found, or set already owned"}) unless mysterySet - _.each mysterySet.items, (i)-> - user.items.gear.owned[i.key]=true - analyticsData = { - uuid: user._id, - itemKey: i.key, - itemType: 'Subscriber Gear', - acquireMethod: 'Hourglass', - category: 'behavior' - } - analytics?.track('acquire item', analyticsData) - - user.purchased.plan.consecutive.trinkets-- - cb? {code:200, message:i18n.t('hourglassPurchaseSet', req.language)}, _.pick(user,$w 'items purchased.plan.consecutive') - - hourglassPurchase: (req, cb, analytics)-> - {type, key} = req.params - return cb?({code:403, message:i18n.t('typeNotAllowedHourglass', req.language) + JSON.stringify(_.keys(content.timeTravelStable))}) unless content.timeTravelStable[type] - return cb?({code:403, message:i18n.t(type+'NotAllowedHourglass', req.language)}) unless _.contains(_.keys(content.timeTravelStable[type]), key) - return cb?({code:403, message:i18n.t(type+'AlreadyOwned', req.language)}) if user.items[type][key] - return cb?({code:403, message:i18n.t('notEnoughHourglasses', req.language)}) unless user.purchased.plan.consecutive.trinkets > 0 - user.purchased.plan.consecutive.trinkets-- - if type is 'pets' - user.items.pets[key] = 5 - if type is 'mounts' - user.items.mounts[key] = true - analyticsData = { - uuid: user._id, - itemKey: key, - itemType: type, - acquireMethod: 'Hourglass', - category: 'behavior' - } - analytics?.track('acquire item', analyticsData) - cb? {code:200, message:i18n.t('hourglassPurchase', req.language)}, _.pick(user,$w 'items purchased.plan.consecutive') - - sell: (req, cb) -> - {key, type} = req.params - return cb?({code:404,message:":type not found. Must bes in [eggs, hatchingPotions, food]"}) unless type in ['eggs','hatchingPotions', 'food'] - return cb?({code:404,message:":key not found for user.items.#{type}"}) unless user.items[type][key] - user.items[type][key]-- - user.stats.gp += content[type][key].value - cb? null, _.pick(user,$w 'stats items') - - equip: (req, cb) -> - [type, key] = [req.params.type || 'equipped', req.params.key] - switch type - when 'mount' - return cb?({code:404,message:":You do not own this mount."}) unless user.items.mounts[key] - user.items.currentMount = if user.items.currentMount is key then '' else key - when 'pet' - return cb?({code:404,message:":You do not own this pet."}) unless user.items.pets[key] - user.items.currentPet = if user.items.currentPet is key then '' else key - when 'costume','equipped' - item = content.gear.flat[key] - return cb?({code:404,message:":You do not own this gear."}) unless user.items.gear.owned[key] - if user.items.gear[type][item.type] is key - user.items.gear[type][item.type] = "#{item.type}_base_0" - message = i18n.t('messageUnEquipped', {itemText: item.text(req.language)}, req.language) - else - user.items.gear[type][item.type] = item.key - message = user.fns.handleTwoHanded(item,type,req) - user.markModified? "items.gear.#{type}" - cb? (if message then {code:200,message} else null), user.items - - hatch: (req, cb) -> - {egg, hatchingPotion} = req.params - return cb?({code:400,message:"Please specify query.egg & query.hatchingPotion"}) unless egg and hatchingPotion - return cb?({code:403,message:i18n.t('messageMissingEggPotion', req.language)}) unless user.items.eggs[egg] > 0 and user.items.hatchingPotions[hatchingPotion] > 0 - return cb?({code:403,message:i18n.t('messageInvalidEggPotionCombo', req.language)}) if content.hatchingPotions[hatchingPotion].premium and not content.dropEggs[egg] - pet = "#{egg}-#{hatchingPotion}" - return cb?({code:403, message:i18n.t('messageAlreadyPet', req.language)}) if user.items.pets[pet] and user.items.pets[pet] > 0 - user.items.pets[pet] = 5 - user.items.eggs[egg]-- - user.items.hatchingPotions[hatchingPotion]-- - cb? {code:200, message:i18n.t('messageHatched', req.language)}, user.items - - unlock: (req, cb, analytics) -> - {path} = req.query - fullSet = ~path.indexOf(",") - cost = - # (Backgrounds) 15G per set, 7G per individual - if ~path.indexOf('background.') # FIXME, store prices of things in content/index.coffee instead of hard-coded here? - if fullSet then 3.75 else 1.75 - # (Skin, hair, etc) 5G per set, 2G per individual - else - if fullSet then 1.25 else 0.5 - alreadyOwns = !fullSet and user.fns.dotGet("purchased." + path) is true - return cb?({code:401, message: i18n.t('notEnoughGems', req.language)}) if (user.balance < cost or !user.balance) and !alreadyOwns - if fullSet - _.each path.split(","), (p) -> - if ~path.indexOf('gear.') - user.fns.dotSet("#{p}", true);true - else - user.fns.dotSet("purchased.#{p}", true);true - else - if alreadyOwns - split = path.split('.');v=split.pop();k=split.join('.') - v='' if k is 'background' and v==user.preferences.background - user.fns.dotSet("preferences.#{k}",v) - return cb? null, req - user.fns.dotSet "purchased." + path, true - user.balance -= cost - if ~path.indexOf('gear.') then user.markModified? 'gear.owned' else user.markModified? 'purchased' - - analyticsData = { - uuid: user._id, - itemKey: path, - itemType: 'customization', - acquireMethod: 'Gems', - gemCost: (cost/.25), - category: 'behavior' - } - analytics?.track('acquire item', analyticsData) - - cb? null, _.pick(user,$w 'purchased preferences items') - - # ------ - # Classes - # ------ - - changeClass: (req, cb, analytics) -> - klass = req.query?.class - if klass in ['warrior','rogue','wizard','healer'] - - analyticsData = { - uuid: user._id, - class: klass, - acquireMethod: 'Gems', - gemCost: 3, - category: 'behavior' - } - analytics?.track('change class', analyticsData) - - user.stats.class = klass - user.flags.classSelected = true - # Clear their gear and equip their new class's gear (can still equip old gear from inventory) - # If they've rolled this class before, restore their progress - _.each ["weapon", "armor", "shield", "head"], (type) -> - foundKey = false - _.findLast user.items.gear.owned, (v, k) -> - return foundKey = k if ~k.indexOf(type + "_" + klass) and v is true - # restore progress from when they last rolled this class - # weapon_0 is significant, don't reset to base_0 - # rogues start with an off-hand weapon - user.items.gear.equipped[type] = - if foundKey then foundKey - else if type is "weapon" then "weapon_#{klass}_0" - else if type is "shield" and klass is "rogue" then "shield_rogue_0" - else "#{type}_base_0" # naked for the rest! - - # Grant them their new class's gear - user.items.gear.owned["#{type}_#{klass}_0"] = true if type is "weapon" or (type is "shield" and klass is "rogue") - true - else - # Null ?class value means "reset class" - if user.preferences.disableClasses - user.preferences.disableClasses = false - user.preferences.autoAllocate = false - else - return cb?({code:401,message:i18n.t('notEnoughGems', req.language)}) unless user.balance >= .75 - user.balance -= .75 - _.merge user.stats, {str: 0, con: 0, per: 0, int: 0, points: api.capByLevel(user.stats.lvl)} - user.flags.classSelected = false - #'stats.points': this is handled on the server - cb? null, _.pick(user,$w 'stats flags items preferences') - - disableClasses: (req, cb) -> - user.stats.class = 'warrior' - user.flags.classSelected = true - user.preferences.disableClasses = true - user.preferences.autoAllocate = true - user.stats.str = api.capByLevel(user.stats.lvl) - user.stats.points = 0 - cb? null, _.pick(user,$w 'stats flags preferences') - - allocate: (req, cb) -> - stat = req.query.stat or 'str' - if user.stats.points > 0 - user.stats[stat]++ - user.stats.points-- - user.stats.mp++ if stat is 'int' #increase their MP along with their max MP - cb? null, _.pick(user,$w 'stats') - - readCard: (req, cb) -> - {cardType} = req.params - user.items.special["#{cardType}Received"].shift() - user.markModified? "items.special.#{cardType}Received" - user.flags.cardReceived = false - cb? null, 'items.special flags.cardReceived' - - openMysteryItem: (req,cb,analytics) -> - item = user.purchased.plan?.mysteryItems?.shift() - return cb?(code:400,message:"Empty") unless item - item = content.gear.flat[item] - user.items.gear.owned[item.key] = true - user.markModified? 'purchased.plan.mysteryItems' - item.notificationType = 'Mystery' # needed for website/public/js/controllers/notificationCtrl.js line 59 approx. - analyticsData = { - uuid: user._id, - itemKey: item, - itemType: 'Subscriber Gear', - acquireMethod: 'Subscriber', - category: 'behavior' - } - analytics?.track('open mystery item', analyticsData) - (user._tmp?={}).drop = item if typeof window != 'undefined' - cb? null, user.items.gear.owned - - # ------ - # Score - # ------ - - score: (req, cb) -> - {id, direction} = req.params # up or down - task = user.tasks[id] - options = req.query or {}; _.defaults(options, {times:1, cron:false}) - - # This is for setting one-time temporary flags, such as streakBonus or itemDropped. Useful for notifying - # the API consumer, then cleared afterwards - user._tmp = {} - - # TODO do we need this fail-safe casting anymore? Are we safe now we're off Derby? - stats = {gp: +user.stats.gp, hp: +user.stats.hp, exp: +user.stats.exp} - task.value = +task.value; task.streak = ~~task.streak; task.priority ?= 1 - - # If they're trying to purhcase a too-expensive reward, don't allow them to do that. - if task.value > stats.gp and task.type is 'reward' - return cb? {code:401,message:i18n.t('messageNotEnoughGold', req.language)} - - delta = 0 - - calculateDelta = -> - # Calculates the next task.value based on direction - # Uses a capped inverse log y=.95^x, y>= -5 - - # Min/max on task redness - currVal = - if task.value < -47.27 then -47.27 - else if task.value > 21.27 then 21.27 - else task.value - nextDelta = Math.pow(0.9747, currVal) * (if direction is 'down' then -1 else 1) - - # Checklists - if task.checklist?.length > 0 - # If the Daily, only dock them them a portion based on their checklist completion - if direction is 'down' and task.type is 'daily' and options.cron - nextDelta *= (1 - _.reduce(task.checklist,((m,i)->m+(if i.completed then 1 else 0)),0) / task.checklist.length) - # If To-Do, point-match the TD per checklist item completed - if task.type is 'todo' - nextDelta *= (1 + _.reduce(task.checklist,((m,i)->m+(if i.completed then 1 else 0)),0)) - nextDelta - - calculateReverseDelta = -> - # Approximates the reverse delta for the task value - # This is meant to return the task value to its original value when unchecking a task. - # First, calculate the the value using the normal way for our first guess although - # it will be a bit off - currVal = - if task.value < -47.27 then -47.27 - else if task.value > 21.27 then 21.27 - else task.value - testVal = currVal + Math.pow(0.9747, currVal) * (if direction is 'down' then -1 else 1) - - # Now keep moving closer to the original value until we get "close enough" - closeEnough = 0.00001 - while true - # Check how close we are to the original value by computing the delta off our guess - # and looking at the difference between that and our current value. - calc = (testVal) + Math.pow(0.9747, testVal) - diff = currVal-calc - if Math.abs(diff) < closeEnough - break - if diff > 0 - testVal -= diff - else - testVal += diff - - # When we get close enough, return the difference between our approximated value - # and the current value. This will be the delta calculated from the original value - # before the task was checked. - nextDelta = testVal - currVal - - # Checklists - if task.checklist?.length > 0 - # If To-Do, point-match the TD per checklist item completed - if task.type is 'todo' - nextDelta *= (1 + _.reduce(task.checklist,((m,i)->m+(if i.completed then 1 else 0)),0)) - nextDelta - - - changeTaskValue = -> - # If multiple days have passed, multiply times days missed - _.times options.times, -> - # Each iteration calculate the nextDelta, which is then accumulated in the total delta. - nextDelta = if not options.cron and direction is 'down' then calculateReverseDelta() else calculateDelta() - unless task.type is 'reward' - if (user.preferences.automaticAllocation is true and user.preferences.allocationMode is 'taskbased' and !(task.type is 'todo' and direction is 'down')) then user.stats.training[task.attribute] += nextDelta - if direction is 'up' # Make progress on quest based on STR - user.party.quest.progress.up = user.party.quest.progress.up || 0 - user.party.quest.progress.up += (nextDelta * (1 + (user._statsComputed.str / 200))) if task.type in ['daily','todo'] - user.party.quest.progress.up += (nextDelta * (0.5 + (user._statsComputed.str / 400))) if task.type is 'habit' - task.value += nextDelta - delta += nextDelta - - addPoints = -> - # ===== CRITICAL HITS ===== - # allow critical hit only when checking off a task, not when unchecking it: - _crit = (if delta > 0 then user.fns.crit() else 1) - # if there was a crit, alert the user via notification - user._tmp.crit = _crit if _crit > 1 - - # Exp Modifier - # ===== Intelligence ===== - # TODO Increases Experience gain by .2% per point. - intBonus = 1 + (user._statsComputed.int * .025) - stats.exp += Math.round (delta * intBonus * task.priority * _crit * 6) - - # GP modifier - # ===== PERCEPTION ===== - # TODO Increases Gold gained from tasks by .3% per point. - perBonus = (1 + user._statsComputed.per *.02) - gpMod = (delta * task.priority * _crit * perBonus) - stats.gp += - if task.streak - currStreak = if direction is 'down' then task.streak-1 else task.streak - streakBonus = currStreak / 100 + 1 # eg, 1-day streak is 1.01, 2-day is 1.02, etc - afterStreak = gpMod * streakBonus - if currStreak > 0 - user._tmp.streakBonus = afterStreak - gpMod if (gpMod > 0) # keep this on-hand for later, so we can notify streak-bonus - afterStreak - else gpMod - - # HP modifier - subtractPoints = -> - # ===== CONSTITUTION ===== - # TODO Decreases HP loss from bad habits / missed dailies by 0.5% per point. - conBonus = 1 - (user._statsComputed.con / 250) - conBonus = 0.1 if conBonus < .1 - hpMod = delta * conBonus * task.priority * 2 # constant 2 multiplier for better results - stats.hp += Math.round(hpMod * 10) / 10 # round to 1dp - - gainMP = (delta) -> - delta *= user._tmp.crit or 1 - user.stats.mp += delta - user.stats.mp = user._statsComputed.maxMP if user.stats.mp >= user._statsComputed.maxMP - user.stats.mp = 0 if user.stats.mp < 0 - - # ===== starting to actually do stuff, most of above was definitions ===== - switch task.type - when 'habit' - changeTaskValue() - # Add habit value to habit-history (if different) - if (delta > 0) then addPoints() else subtractPoints() - gainMP(_.max([0.25, (.0025 * user._statsComputed.maxMP)]) * if direction is 'down' then -1 else 1) - - # History - th = (task.history ?= []) - if th[th.length-1] and moment(th[th.length-1].date).isSame(new Date, 'day') - th[th.length-1].value = task.value - else - th.push {date: +new Date, value: task.value} - user.markModified? "habits.#{_.findIndex(user.habits, {id:task.id})}.history" - - when 'daily' - if options.cron - changeTaskValue() - subtractPoints() - task.streak = 0 unless user.stats.buffs.streaks - else - changeTaskValue() - if direction is 'down' - delta = calculateDelta() # recalculate delta for unchecking so the gp and exp come out correctly - addPoints() # obviously for delta>0, but also a trick to undo accidental checkboxes - gainMP(_.max([1, (.01 * user._statsComputed.maxMP)]) * if direction is 'down' then -1 else 1) - if direction is 'up' - task.streak = if task.streak then task.streak + 1 else 1 - # Give a streak achievement when the streak is a multiple of 21 - if (task.streak % 21) is 0 - user.achievements.streak = if user.achievements.streak then user.achievements.streak + 1 else 1 - else - # Remove a streak achievement if streak was a multiple of 21 and the daily was undone - if (task.streak % 21) is 0 - user.achievements.streak = if user.achievements.streak then user.achievements.streak - 1 else 0 - task.streak = if task.streak then task.streak - 1 else 0 - - when 'todo' - if options.cron - changeTaskValue() - #don't touch stats on cron - else - task.dateCompleted = if direction is 'up' then new Date else undefined - changeTaskValue() - if direction is 'down' - delta = calculateDelta() # recalculate delta for unchecking so the gp and exp come out correctly - addPoints() # obviously for delta>0, but also a trick to undo accidental checkboxes - # MP++ per checklist item in ToDo, bonus per CLI - multiplier = _.max([(_.reduce(task.checklist,((m,i)->m+(if i.completed then 1 else 0)),1)),1]) - gainMP(_.max([(multiplier), (.01 * user._statsComputed.maxMP * multiplier)]) * if direction is 'down' then -1 else 1) - - when 'reward' - # Don't adjust values for rewards - changeTaskValue() - # purchase item - stats.gp -= Math.abs(task.value) - num = parseFloat(task.value).toFixed(2) - # if too expensive, reduce health & zero gp - if stats.gp < 0 - # hp - gp difference - stats.hp += stats.gp - stats.gp = 0 - - user.fns.updateStats stats, 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 typeof window is 'undefined' - user.fns.randomDrop({task, delta}, req) if direction is 'up' - - cb? null, user - return delta - - # ---------------------------------------------------------------------- - # user.fns helpers - # ---------------------------------------------------------------------- - - user.fns = - - getItem: (type) -> - item = content.gear.flat[user.items.gear.equipped[type]] - return content.gear.flat["#{type}_base_0"] unless item - item - - handleTwoHanded: (item, type='equipped', req) -> - # If they're buying a shield and wearing a staff, dequip the staff - if item.type is "shield" and (weapon = content.gear.flat[user.items.gear[type].weapon])?.twoHanded - user.items.gear[type].weapon = 'weapon_base_0' - message = i18n.t('messageTwoHandled', {gearText: weapon.text(req.language)}, req.language) - # If they're buying a staff and wearing a shield, dequip the shield - if item.twoHanded - user.items.gear[type].shield = "shield_base_0" - message = i18n.t('messageTwoHandled', {gearText: item.text(req.language)}, req.language) - message - - ### - Because the same op needs to be performed on the client and the server (critical hits, item drops, etc), - we need things to be "random", but technically predictable so that they don't go out-of-sync - ### - predictableRandom: (seed) -> - # Default seed is all user stats combined. Fairly safe, meh - pass in a good seed for situations where that doesn't work - seed = _.reduce(user.stats, ((m,v)->if _.isNumber(v) then m+v else m), 0) if !seed or seed is Math.PI - x = Math.sin(seed++) * 10000 - x - Math.floor(x) - - crit: (stat='str', chance=.03) -> - #console.log("Crit Chance:"+chance*(1+user._statsComputed[stat]/100)) - s = user._statsComputed[stat] - if user.fns.predictableRandom() <= chance*(1 + s/100) - 1.5 + 4*s/(s + 200) - else 1 - - ### - Get a random property from an object - returns random property (the value) - ### - randomVal: (obj, options) -> - array = if options?.key then _.keys(obj) else _.values(obj) - rand = user.fns.predictableRandom(options?.seed) - array.sort() - array[Math.floor(rand * array.length)] - - ### - This allows you to set object properties by dot-path. Eg, you can run pathSet('stats.hp',50,user) which is the same as - user.stats.hp = 50. This is useful because in our habitrpg-shared functions we're returning changesets as {path:value}, - so that different consumers can implement setters their own way. Derby needs model.set(path, value) for example, where - Angular sets object properties directly - in which case, this function will be used. - ### - dotSet: (path, val)-> api.dotSet user,path,val - dotGet: (path)-> api.dotGet user,path - - # ---------------------------------------------------------------------- - # Scoring - # ---------------------------------------------------------------------- - - randomDrop: (modifiers, req) -> - {task} = modifiers - - # % chance of getting a drop - - chance = _.min([Math.abs(task.value - 21.27),37.5])/150+.02 # Base drop chance is a percentage based on task value. Typical fresh task: 15%. Very ripe task: 25%. Very blue task: 2%. - - chance *= - task.priority * # Task priority: +50% for Medium, +100% for Hard - (1 + (task.streak / 100 or 0)) * # Streak bonus: +1% per streak - (1 + (user._statsComputed.per / 100)) * # PERception: +1% per point - (1 + (user.contributor.level / 40 or 0)) * # Contrib levels: +2.5% per level - (1 + (user.achievements.rebirths / 20 or 0)) * # Rebirths: +5% per achievement - (1 + (user.achievements.streak / 200 or 0)) * # Streak achievements: +0.5% per achievement - (user._tmp.crit or 1) * # Use the crit multiplier if we got one - (1 + .5*(_.reduce(task.checklist,((m,i)->m+(if i.completed then 1 else 0)),0) or 0)) # +50% per checklist item complete. TODO: make this into X individual drop chances instead - - chance = api.diminishingReturns(chance, 0.75) - - #console.log("Drop chance: " + chance) - - quest = content.quests[user.party.quest?.key] - if quest?.collect and user.fns.predictableRandom(user.stats.gp) < chance - dropK = user.fns.randomVal quest.collect, {key:true} - user.party.quest.progress.collect[dropK]++ - user.markModified? 'party.quest.progress' - #console.log {progress:user.party.quest.progress} - - dropMultiplier = if user.purchased?.plan?.customerId then 2 else 1 - return if (api.daysSince(user.items.lastDrop.date, user.preferences) is 0) and (user.items.lastDrop.count >= dropMultiplier * (5 + Math.floor(user._statsComputed.per / 25) + (user.contributor.level or 0))) - if user.flags?.dropsEnabled and user.fns.predictableRandom(user.stats.exp) < chance - - rarity = user.fns.predictableRandom(user.stats.gp) - - # Food: 40% chance - if rarity > .6 - drop = user.fns.randomVal _.where(content.food, {canDrop:true}) - user.items.food[drop.key] ?= 0 - user.items.food[drop.key]+= 1 - drop.type = 'Food' - drop.dialog = i18n.t('messageDropFood', {dropArticle: drop.article, dropText: drop.text(req.language), dropNotes: drop.notes(req.language)}, req.language) - - # Eggs: 30% chance - else if rarity > .3 - drop = user.fns.randomVal content.dropEggs - user.items.eggs[drop.key] ?= 0 - user.items.eggs[drop.key]++ - drop.type = 'Egg' - drop.dialog = i18n.t('messageDropEgg', {dropText: drop.text(req.language), dropNotes: drop.notes(req.language)}, req.language) - - # Hatching Potion, 30% chance - break down by rarity. - else - acceptableDrops = - # Very Rare: 10% (of 30%) - if rarity < .02 then ['Golden'] - # Rare: 20% (of 30%) - else if rarity < .09 then ['Zombie', 'CottonCandyPink', 'CottonCandyBlue'] - # Uncommon: 30% (of 30%) - else if rarity < .18 then ['Red', 'Shade', 'Skeleton'] - # Common: 40% (of 30%) - else ['Base', 'White', 'Desert'] - - # No Rarity (@see https://github.com/HabitRPG/habitrpg/issues/1048, we may want to remove rareness when we add mounts) - #drop = helpers.randomVal hatchingPotions - drop = user.fns.randomVal _.pick(content.hatchingPotions, ((v,k) -> k in acceptableDrops)) - - user.items.hatchingPotions[drop.key] ?= 0 - user.items.hatchingPotions[drop.key]++ - drop.type = 'HatchingPotion' - drop.dialog = i18n.t('messageDropPotion', {dropText: drop.text(req.language), dropNotes: drop.notes(req.language)}, req.language) - - # if they've dropped something, we want the consuming client to know so they can notify the user. See how the Derby - # app handles it for example. Would this be better handled as an emit() ? - user._tmp.drop = drop - - user.items.lastDrop.date = +new Date - user.items.lastDrop.count++ - - ### - Updates user stats with new stats. Handles death, leveling up, etc - {stats} new stats - {update} if aggregated changes, pass in userObj as update. otherwise commits will be made immediately - ### - autoAllocate: -> - user.stats[(-> - switch user.preferences.allocationMode - when "flat" - # Favor in order (right-to-left): INT, PER, STR, CON - stats = _.pick user.stats, $w 'con str per int' - _.invert(stats)[_.min stats] - when "classbased" - # Attributes get 3:2:1:1 per 7 levels. - lvlDiv7 = user.stats.lvl / 7 - ideal = [(lvlDiv7 * 3), (lvlDiv7 * 2), lvlDiv7, lvlDiv7] - # Primary, secondary etc. attributes aren't explicitly defined, so hardcode them. In order as above - preference = switch user.stats.class - when "wizard" then ["int", "per", "con", "str"] - when "rogue" then ["per", "str", "int", "con"] - when "healer" then ["con", "int", "str", "per"] - else ["str", "con", "per", "int"] - # Get the difference between the ideal attribute spread according to level, and the user's current spread. - diff = [(user.stats[preference[0]]-ideal[0]),(user.stats[preference[1]]-ideal[1]),(user.stats[preference[2]]-ideal[2]),(user.stats[preference[3]]-ideal[3])] - suggested = _.findIndex(diff, ((val) -> if val is _.min(diff) then true)) # Returns the index of the first attribute that's furthest behind the ideal - return if ~suggested then preference[suggested] else "str" # If _.findIndex failed, we'd get a -1... - when "taskbased" - suggested = _.invert(user.stats.training)[_.max user.stats.training] # Returns the stat that's been trained up the most this level - _.merge user.stats.training, {str:0,int:0,con:0,per:0} # Reset training for this level. - return suggested or "str" # Failed _.findkey gives undefined - else "str" # if all else fails, dump into STR - )()]++ - - updateStats: (stats, req, analytics) -> - # Game Over (death) - return user.stats.hp=0 if stats.hp <= 0 - - user.stats.hp = stats.hp - user.stats.gp = if stats.gp >= 0 then stats.gp else 0 - - tnl = api.tnl(user.stats.lvl) - - # level up & carry-over exp - if stats.exp >= tnl - #silent = true # push through the negative xp silently - user.stats.exp = stats.exp # push normal + notification - while stats.exp >= tnl # keep levelling up - stats.exp -= tnl - user.stats.lvl++ - tnl = api.tnl(user.stats.lvl) - - user.stats.hp = 50 - - continue if user.stats.lvl > api.maxLevel - - # Auto-allocate a point, or give them a new manual point - if user.preferences.automaticAllocation - user.fns.autoAllocate() - else - # add new allocatable points. We could do user.stats.points++, but this does a fail-safe just in case - user.stats.points = user.stats.lvl - (user.stats.con + user.stats.str + user.stats.per + user.stats.int) - if user.stats.points < 0 - user.stats.points = 0 - # This happens after dropping level with Fix Character Values and perhaps from other causes. - # TODO: Subtract points from attributes in the same manner as on death. - user.stats.exp = stats.exp - - # Set flags when they unlock features - user.flags ?= {} - if !user.flags.customizationsNotification and (user.stats.exp > 5 or user.stats.lvl > 1) - user.flags.customizationsNotification = true - if !user.flags.itemsEnabled and (user.stats.exp > 10 or user.stats.lvl > 1) - user.flags.itemsEnabled = true - if !user.flags.dropsEnabled and user.stats.lvl >= 3 - user.flags.dropsEnabled = true - if user.items.eggs["Wolf"] > 0 then user.items.eggs["Wolf"]++ else user.items.eggs["Wolf"] = 1 - if !user.flags.classSelected and user.stats.lvl >= 10 - user.flags.classSelected - # Level Drops - _.each {vice1:30, atom1:15, moonstone1:60, goldenknight1: 40}, (lvl,k)-> - if !user.flags.levelDrops?[k] and user.stats.lvl >= lvl - user.items.quests[k] ?= 0 - user.items.quests[k]++ - (user.flags.levelDrops ?= {})[k] = true - user.markModified? 'flags.levelDrops' - analyticsData = { - uuid: user._id, - itemKey: k, - acquireMethod: 'Level Drop', - category: 'behavior' - } - analytics?.track('acquire item', analyticsData) - user._tmp.drop = {type: 'Quest', key: k} - if !user.flags.rebirthEnabled and (user.stats.lvl >= 50 or user.achievements.beastMaster) - user.flags.rebirthEnabled = true - - ### - ------------------------------------------------------ - Cron - ------------------------------------------------------ - ### - - ### - At end of day, add value to all incomplete Daily & Todo tasks (further incentive) - For incomplete Dailys, deduct experience - Make sure to run this function once in a while as server will not take care of overnight calculations. - And you have to run it every time client connects. - {user} - ### - cron: (options={}) -> - now = +options.now || +new Date - - # They went to a different timezone - # FIXME: - # (1) This exit-early code isn't taking timezone into consideration!! - # (2) Won't switching timezones be handled automatically client-side anyway? (aka, can we just remove this code?) - # (3) And if not, is this the correct way to handle switching timezones - # if moment(user.lastCron).isAfter(now) - # user.lastCron = now - # return - - daysMissed = api.daysSince user.lastCron, _.defaults({now}, user.preferences) - return unless daysMissed > 0 - - user.auth.timestamps.loggedin = new Date() - - user.lastCron = now - - # Reset the lastDrop count to zero - if user.items.lastDrop.count > 0 - user.items.lastDrop.count = 0 - - # "Perfect Day" achievement for perfect-days - perfect = true - clearBuffs = {str:0,int:0,per:0,con:0,stealth:0,streaks:false} - - # end-of-month perks for subscribers - plan = user.purchased?.plan - if plan?.customerId - if moment(plan.dateUpdated).format('MMYYYY') != moment().format('MMYYYY') - plan.gemsBought = 0 # reset gem-cap - plan.dateUpdated = new Date() - # For every month, inc their "consecutive months" counter. Give perks based on consecutive blocks - # If they already got perks for those blocks (eg, 6mo subscription, subscription gifts, etc) - then dec the offset until it hits 0 - # TODO use month diff instead of ++ / --? - _.defaults plan.consecutive, {count:0, offset:0, trinkets:0, gemCapExtra:0} #fixme see https://github.com/HabitRPG/habitrpg/issues/4317 - plan.consecutive.count++ - if plan.consecutive.offset > 0 - plan.consecutive.offset-- - else if plan.consecutive.count%3==0 # every 3 months - plan.consecutive.trinkets++ - plan.consecutive.gemCapExtra+=5 - plan.consecutive.gemCapExtra=25 if plan.consecutive.gemCapExtra>25 # cap it at 50 (hard 25 limit + extra 25) - # If user cancelled subscription, we give them until 30day's end until it terminates - if plan.dateTerminated && moment(plan.dateTerminated).isBefore(+new Date) - _.merge plan, {planId:null, customerId:null, paymentMethod:null} - _.merge plan.consecutive, {count:0, offset:0, gemCapExtra:0} - user.markModified? 'purchased.plan' - - # User is resting at the inn. - # On cron, buffs are cleared and all dailies are reset without performing damage - if user.preferences.sleep is true - user.stats.buffs = clearBuffs - user.dailys.forEach (daily) -> - {completed, repeat} = daily - thatDay = moment(now).subtract({days: 1}) - - if api.shouldDo(thatDay.toDate(), daily, user.preferences) || completed - _.each daily.checklist, ((box)->box.completed=false;true) - daily.completed = false - return - - multiDaysCountAsOneDay = true - # If the user does not log in for two or more days, cron (mostly) acts as if it were only one day. - # When site-wide difficulty settings are introduced, this can be a user preference option. - - # Tally each task - todoTally = 0 - user.todos.forEach (task) -> # make uncompleted todos redder - return unless task - {id, completed} = task - delta = user.ops.score({params:{id:task.id, direction:'down'}, query:{times:(multiDaysCountAsOneDay ? 1 : daysMissed), cron:true}}) - absVal = if (completed) then Math.abs(task.value) else task.value - todoTally += absVal - - dailyChecked = 0 # how many dailies were checked? - dailyDueUnchecked = 0 # how many dailies were due but not checked? - user.party.quest.progress.down ?= 0 - user.dailys.forEach (task) -> - return unless task - {id, completed} = task - - # Deduct points for missed Daily tasks - EvadeTask = 0 - scheduleMisses = daysMissed - if completed - dailyChecked += 1 - else - # dailys repeat, so need to calculate how many they've missed according to their own schedule - scheduleMisses = 0 - for n in [0...daysMissed] - thatDay = moment(now).subtract({days: n + 1}) - if api.shouldDo(thatDay.toDate(), task, user.preferences) - scheduleMisses++ - if user.stats.buffs.stealth - user.stats.buffs.stealth-- - EvadeTask++ - if multiDaysCountAsOneDay - break - - if scheduleMisses > EvadeTask - perfect = false - if task.checklist?.length > 0 # Partially completed checklists dock fewer mana points - fractionChecked = _.reduce(task.checklist,((m,i)->m+(if i.completed then 1 else 0)),0) / task.checklist.length - dailyDueUnchecked += (1 - fractionChecked) - dailyChecked += fractionChecked - else - dailyDueUnchecked += 1 - delta = user.ops.score({params:{id:task.id, direction:'down'}, query:{times:(multiDaysCountAsOneDay ? 1 : (scheduleMisses-EvadeTask)), cron:true}}) - - # Apply damage from a boss, less damage for Trivial priority (difficulty) - user.party.quest.progress.down += delta * (if task.priority < 1 then task.priority else 1) - # NB: Medium and Hard priorities do not increase damage from boss. This was by accident - # initially, and when we realised, we could not fix it because users are used to - # their Medium and Hard Dailies doing an Easy amount of damage from boss. - # Easy is task.priority = 1. Anything < 1 will be Trivial (0.1) or any future - # setting between Trivial and Easy. - - (task.history ?= []).push({ date: +new Date, value: task.value }) - task.completed = false - if completed || (scheduleMisses > 0) - _.each task.checklist, ((i)->i.completed=false;true) # this should not happen for grey tasks unless they are completed - - user.habits.forEach (task) -> # slowly reset 'onlies' value to 0 - if task.up is false or task.down is false - if Math.abs(task.value) < 0.1 - task.value = 0 - else - task.value = task.value / 2 - - # Finished tallying - ((user.history ?= {}).todos ?= []).push { date: now, value: todoTally } - # tally experience - expTally = user.stats.exp - lvl = 0 #iterator - while lvl < (user.stats.lvl - 1) - lvl++ - expTally += api.tnl(lvl) - (user.history.exp ?= []).push { date: now, value: expTally } - - # premium subscribers can keep their full history. - # TODO figure out something performance-wise - unless user.purchased?.plan?.customerId - user.fns.preenUserHistory() - user.markModified? 'history' - user.markModified? 'dailys' # covers dailys.*.history - - user.stats.buffs = - if perfect - user.achievements.perfect ?= 0 - user.achievements.perfect++ - lvlDiv2 = Math.ceil(api.capByLevel(user.stats.lvl) / 2) - {str:lvlDiv2,int:lvlDiv2,per:lvlDiv2,con:lvlDiv2,stealth:0,streaks:false} - else clearBuffs - - # Add 10 MP, or 10% of max MP if that'd be more. Perform this after Perfect Day for maximum benefit - # Adjust for fraction of dailies completed - dailyChecked=1 if dailyDueUnchecked is 0 and dailyChecked is 0 - user.stats.mp += _.max([10,.1 * user._statsComputed.maxMP]) * dailyChecked / (dailyDueUnchecked + dailyChecked) - user.stats.mp = user._statsComputed.maxMP if user.stats.mp > user._statsComputed.maxMP - - # After all is said and done, progress up user's effect on quest, return those values & reset the user's - progress = user.party.quest.progress; _progress = _.cloneDeep progress - _.merge progress, {down:0,up:0} - progress.collect = _.transform progress.collect, ((m,v,k)->m[k]=0) - - # Analytics - user.flags.cronCount?=0 - user.flags.cronCount++ - - analyticsData = { - category: 'behavior', - gaLabel: 'Cron Count', - gaValue: user.flags.cronCount, - uuid: user._id, - user: user, - resting: user.preferences.sleep, - cronCount: user.flags.cronCount, - progressUp: _.min([_progress.up, 900]), - progressDown: _progress.down - } - options.analytics?.track('Cron', analyticsData) - - _progress - - # Registered users with some history - preenUserHistory: (minHistLen = 7) -> - _.each user.habits.concat(user.dailys), (task) -> - task.history = preenHistory(task.history) if task.history?.length > minHistLen - true - - _.defaults user.history, {todos:[], exp: []} - user.history.exp = preenHistory(user.history.exp) if user.history.exp.length > minHistLen - user.history.todos = preenHistory(user.history.todos) if user.history.todos.length > minHistLen - #user.markModified? 'history' - #user.markModified? 'habits' - #user.markModified? 'dailys' - - # ---------------------------------------------------------------------- - # Achievements - # ---------------------------------------------------------------------- - ultimateGear: -> - # on the server this is a Lodash transform, on the client its an object - owned = if window? then user.items.gear.owned else user.items.gear.owned.toObject() - user.achievements.ultimateGearSets ?= {healer: false, wizard: false, rogue: false, warrior: false} - content.classes.forEach (klass) -> - if user.achievements.ultimateGearSets[klass] isnt true - user.achievements.ultimateGearSets[klass] = _.reduce ['armor', 'shield', 'head', 'weapon'], (soFarGood, type) -> - found = _.find content.gear.tree[type][klass], {last:true} - soFarGood and (!found or owned[found.key]==true) #!found only true when weapon is two-handed (mages) - , true # start with true, else `and` will fail right away - user.markModified? 'achievements.ultimateGearSets' - if _.contains(user.achievements.ultimateGearSets, true) and user.flags.armoireEnabled != true - user.flags.armoireEnabled = true - user.markModified? 'flags' - - nullify: -> - user.ops = null - user.fns = null - user = null - - # ---------------------------------------------------------------------- - # Virtual Attributes - # ---------------------------------------------------------------------- - - # Aggregate all intrinsic stats, buffs, weapon, & armor into computed stats - Object.defineProperty user, '_statsComputed', - get: -> - computed = _.reduce ['per','con','str','int'], (m,stat) => - m[stat] = _.reduce $w('stats stats.buffs items.gear.equipped.weapon items.gear.equipped.armor items.gear.equipped.head items.gear.equipped.shield'), (m2,path) => - val = user.fns.dotGet(path) - m2 + - if ~path.indexOf('items.gear') - # get the gear stat, and multiply it by 1.5 if it's class-gear - item = content.gear.flat[val] - (+item?[stat] or 0) * (if item?.klass is user.stats.class || item?.specialClass is user.stats.class then 1.5 else 1) - else - +val[stat] or 0 - , 0 - m[stat] += Math.floor(api.capByLevel(user.stats.lvl) / 2) - m - , {} - computed.maxMP = computed.int*2 + 30 - computed - Object.defineProperty user, 'tasks', - get: -> - tasks = user.habits.concat(user.dailys).concat(user.todos).concat(user.rewards) - _.object(_.pluck(tasks, "id"), tasks) diff --git a/common/script/index.js b/common/script/index.js new file mode 100644 index 0000000000..b39ff00e89 --- /dev/null +++ b/common/script/index.js @@ -0,0 +1,2701 @@ +import { + daysSince, + shouldDo, +} from '../../common/script/cron'; +import * as statHelpers from './statHelpers'; + +var $w, _, api, content, i18n, moment, preenHistory, sortOrder, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + +moment = require('moment'); + +_ = require('lodash'); + +content = require('./content/index'); + +i18n = require('./i18n'); + +api = module.exports = {}; + +api.i18n = i18n; +api.shouldDo = shouldDo; + +api.maxLevel = statHelpers.MAX_LEVEL; +api.capByLevel = statHelpers.capByLevel; +api.maxHealth = statHelpers.MAX_HEALTH; +api.tnl = statHelpers.toNextLevel; +api.diminishingReturns = statHelpers.diminishingReturns; + +$w = api.$w = function(s) { + return s.split(' '); +}; + +api.dotSet = function(obj, path, val) { + var arr; + arr = path.split('.'); + return _.reduce(arr, (function(_this) { + return function(curr, next, index) { + if ((arr.length - 1) === index) { + curr[next] = val; + } + return curr[next] != null ? curr[next] : curr[next] = {}; + }; + })(this), obj); +}; + +api.dotGet = function(obj, path) { + return _.reduce(path.split('.'), ((function(_this) { + return function(curr, next) { + return curr != null ? curr[next] : void 0; + }; + })(this)), obj); +}; + + +/* + Reflists are arrays, but stored as objects. Mongoose has a helluvatime working with arrays (the main problem for our + syncing issues) - so the goal is to move away from arrays to objects, since mongoose can reference elements by ID + no problem. To maintain sorting, we use these helper functions: + */ + +api.refPush = function(reflist, item, prune) { + if (prune == null) { + prune = 0; + } + item.sort = _.isEmpty(reflist) ? 0 : _.max(reflist, 'sort').sort + 1; + if (!(item.id && !reflist[item.id])) { + item.id = api.uuid(); + } + return reflist[item.id] = item; +}; + +api.planGemLimits = { + convRate: 20, + convCap: 25 +}; + +/* +Preen history for users with > 7 history entries +This takes an infinite array of single day entries [day day day day day...], and turns it into a condensed array +of averages, condensing more the further back in time we go. Eg, 7 entries each for last 7 days; 1 entry each week +of this month; 1 entry for each month of this year; 1 entry per previous year: [day*7 week*4 month*12 year*infinite] + */ + +preenHistory = function(history) { + var newHistory, preen, thisMonth; + history = _.filter(history, function(h) { + return !!h; + }); + newHistory = []; + preen = function(amount, groupBy) { + var groups; + groups = _.chain(history).groupBy(function(h) { + return moment(h.date).format(groupBy); + }).sortBy(function(h, k) { + return k; + }).value(); + groups = groups.slice(-amount); + groups.pop(); + return _.each(groups, function(group) { + newHistory.push({ + date: moment(group[0].date).toDate(), + value: _.reduce(group, (function(m, obj) { + return m + obj.value; + }), 0) / group.length + }); + return true; + }); + }; + preen(50, "YYYY"); + preen(moment().format('MM'), "YYYYMM"); + thisMonth = moment().format('YYYYMM'); + newHistory = newHistory.concat(_.filter(history, function(h) { + return moment(h.date).format('YYYYMM') === thisMonth; + })); + return newHistory; +}; + + +/* + Preen 3-day past-completed To-Dos from Angular & mobile app + */ + +api.preenTodos = function(tasks) { + return _.where(tasks, function(t) { + return !t.completed || (t.challenge && t.challenge.id) || moment(t.dateCompleted).isAfter(moment().subtract({ + days: 3 + })); + }); +}; + +/* + Update the in-browser store with new gear. FIXME this was in user.fns, but it was causing strange issues there + */ + +sortOrder = _.reduce(content.gearTypes, (function(m, v, k) { + m[v] = k; + return m; +}), {}); + +api.updateStore = function(user) { + var changes; + if (!user) { + return; + } + changes = []; + _.each(content.gearTypes, function(type) { + var found; + found = _.find(content.gear.tree[type][user.stats["class"]], function(item) { + return !user.items.gear.owned[item.key]; + }); + if (found) { + changes.push(found); + } + return true; + }); + changes = changes.concat(_.filter(content.gear.flat, function(v) { + var ref; + return ((ref = v.klass) === 'special' || ref === 'mystery' || ref === 'armoire') && !user.items.gear.owned[v.key] && (typeof v.canOwn === "function" ? v.canOwn(user) : void 0); + })); + return _.sortBy(changes, function(c) { + return sortOrder[c.type]; + }); +}; + + +/* +------------------------------------------------------ +Content +------------------------------------------------------ + */ + +api.content = content; + + +/* +------------------------------------------------------ +Misc Helpers +------------------------------------------------------ + */ + +api.uuid = function() { + return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) { + var r, v; + r = Math.random() * 16 | 0; + v = (c === "x" ? r : r & 0x3 | 0x8); + return v.toString(16); + }); +}; + +api.countExists = function(items) { + return _.reduce(items, (function(m, v) { + return m + (v ? 1 : 0); + }), 0); +}; + + +/* +Even though Mongoose handles task defaults, we want to make sure defaults are set on the client-side before +sending up to the server for performance + */ + +api.taskDefaults = function(task) { + var defaults, ref, ref1, ref2; + if (task == null) { + task = {}; + } + if (!(task.type && ((ref = task.type) === 'habit' || ref === 'daily' || ref === 'todo' || ref === 'reward'))) { + task.type = 'habit'; + } + defaults = { + id: api.uuid(), + text: task.id != null ? task.id : '', + notes: '', + priority: 1, + challenge: {}, + attribute: 'str', + dateCreated: new Date() + }; + _.defaults(task, defaults); + if (task.type === 'habit') { + _.defaults(task, { + up: true, + down: true + }); + } + if ((ref1 = task.type) === 'habit' || ref1 === 'daily') { + _.defaults(task, { + history: [] + }); + } + if ((ref2 = task.type) === 'daily' || ref2 === 'todo') { + _.defaults(task, { + completed: false + }); + } + if (task.type === 'daily') { + _.defaults(task, { + streak: 0, + repeat: { + su: true, + m: true, + t: true, + w: true, + th: true, + f: true, + s: true + } + }, { + startDate: new Date(), + everyX: 1, + frequency: 'weekly' + }); + } + task._id = task.id; + if (task.value == null) { + task.value = task.type === 'reward' ? 10 : 0; + } + if (!_.isNumber(task.priority)) { + task.priority = 1; + } + return task; +}; + +api.percent = function(x, y, dir) { + var roundFn; + switch (dir) { + case "up": + roundFn = Math.ceil; + break; + case "down": + roundFn = Math.floor; + break; + default: + roundFn = Math.round; + } + if (x === 0) { + x = 1; + } + return Math.max(0, roundFn(x / y * 100)); +}; + + +/* +Remove whitespace #FIXME are we using this anywwhere? Should we be? + */ + +api.removeWhitespace = function(str) { + if (!str) { + return ''; + } + return str.replace(/\s/g, ''); +}; + + +/* +Encode the download link for .ics iCal file + */ + +api.encodeiCalLink = function(uid, apiToken) { + var loc, ref; + loc = (typeof window !== "undefined" && window !== null ? window.location.host : void 0) || (typeof process !== "undefined" && process !== null ? (ref = process.env) != null ? ref.BASE_URL : void 0 : void 0) || ''; + return encodeURIComponent("http://" + loc + "/v1/users/" + uid + "/calendar.ics?apiToken=" + apiToken); +}; + + +/* +Gold amount from their money + */ + +api.gold = function(num) { + if (num) { + return Math.floor(num); + } else { + return "0"; + } +}; + + +/* +Silver amount from their money + */ + +api.silver = function(num) { + if (num) { + return ("0" + Math.floor((num - Math.floor(num)) * 100)).slice(-2); + } else { + return "00"; + } +}; + + +/* +Task classes given everything about the class + */ + +api.taskClasses = function(task, filters, dayStart, lastCron, showCompleted, main) { + var classes, completed, enabled, filter, priority, ref, repeat, type, value; + if (filters == null) { + filters = []; + } + if (dayStart == null) { + dayStart = 0; + } + if (lastCron == null) { + lastCron = +(new Date); + } + if (showCompleted == null) { + showCompleted = false; + } + if (main == null) { + main = false; + } + if (!task) { + return; + } + type = task.type, completed = task.completed, value = task.value, repeat = task.repeat, priority = task.priority; + if (main) { + if (!task._editing) { + for (filter in filters) { + enabled = filters[filter]; + if (enabled && !((ref = task.tags) != null ? ref[filter] : void 0)) { + return 'hidden'; + } + } + } + } + classes = type; + if (task._editing) { + classes += " beingEdited"; + } + if (type === 'todo' || type === 'daily') { + if (completed || (type === 'daily' && !shouldDo(+(new Date), task, { + dayStart: dayStart + }))) { + classes += " completed"; + } else { + classes += " uncompleted"; + } + } else if (type === 'habit') { + if (task.down && task.up) { + classes += ' habit-wide'; + } + if (!task.down && !task.up) { + classes += ' habit-narrow'; + } + } + if (priority === 0.1) { + classes += ' difficulty-trivial'; + } else if (priority === 1) { + classes += ' difficulty-easy'; + } else if (priority === 1.5) { + classes += ' difficulty-medium'; + } else if (priority === 2) { + classes += ' difficulty-hard'; + } + if (value < -20) { + classes += ' color-worst'; + } else if (value < -10) { + classes += ' color-worse'; + } else if (value < -1) { + classes += ' color-bad'; + } else if (value < 1) { + classes += ' color-neutral'; + } else if (value < 5) { + classes += ' color-good'; + } else if (value < 10) { + classes += ' color-better'; + } else { + classes += ' color-best'; + } + return classes; +}; + + +/* +Friendly timestamp + */ + +api.friendlyTimestamp = function(timestamp) { + return moment(timestamp).format('MM/DD h:mm:ss a'); +}; + + +/* +Does user have new chat messages? + */ + +api.newChatMessages = function(messages, lastMessageSeen) { + if (!((messages != null ? messages.length : void 0) > 0)) { + return false; + } + return (messages != null ? messages[0] : void 0) && (messages[0].id !== lastMessageSeen); +}; + + +/* +are any tags active? + */ + +api.noTags = function(tags) { + return _.isEmpty(tags) || _.isEmpty(_.filter(tags, function(t) { + return t; + })); +}; + + +/* +Are there tags applied? + */ + +api.appliedTags = function(userTags, taskTags) { + var arr; + arr = []; + _.each(userTags, function(t) { + if (t == null) { + return; + } + if (taskTags != null ? taskTags[t.id] : void 0) { + return arr.push(t.name); + } + }); + return arr.join(', '); +}; + + +/* +Various counting functions + */ + +api.count = require('./count'); + + +/* +------------------------------------------------------ +User (prototype wrapper to give it ops, helper funcs, and virtuals +------------------------------------------------------ + */ + + +/* +User is now wrapped (both on client and server), adding a few new properties: + * getters (_statsComputed, tasks, etc) + * user.fns, which is a bunch of helper functions + These were originally up above, but they make more sense belonging to the user object so we don't have to pass + the user object all over the place. In fact, we should pull in more functions such as cron(), updateStats(), etc. + * user.ops, which is super important: + +If a function is inside user.ops, it has magical properties. If you call it on the client it updates the user object in +the browser and when it's done it automatically POSTs to the server, calling src/controllers/user.js#OP_NAME (the exact same name +of the op function). The first argument req is {query, body, params}, it's what the express controller function +expects. This means we call our functions as if we were calling an Express route. Eg, instead of score(task, direction), +we call score({params:{id:task.id,direction:direction}}). This also forces us to think about our routes (whether to use +params, query, or body for variables). see http://stackoverflow.com/questions/4024271/rest-api-best-practices-where-to-put-parameters + +If `src/controllers/user.js#OP_NAME` doesn't exist on the server, it's automatically added. It runs the code in user.ops.OP_NAME +to update the user model server-side, then performs `user.save()`. You can see this in action for `user.ops.buy`. That +function doesn't exist on the server - so the client calls it, it updates user in the browser, auto-POSTs to server, server +handles it by calling `user.ops.buy` again (to update user on the server), and then saves. We can do this for +everything that doesn't need any code difference from what's in user.ops.OP_NAME for special-handling server-side. If we +*do* need special handling, just add `src/controllers/user.js#OP_NAME` to override the user.ops.OP_NAME, and be +sure to call user.ops.OP_NAME at some point within the overridden function. + +TODO + * Is this the best way to wrap the user object? I thought of using user.prototype, but user is an object not a Function. + user on the server is a Mongoose model, so we can use prototype - but to do it on the client, we'd probably have to + move to $resource for user + * Move to $resource! + */ + +api.wrap = function(user, main) { + if (main == null) { + main = true; + } + if (user._wrapped) { + return; + } + user._wrapped = true; + if (main) { + user.ops = { + update: function(req, cb) { + _.each(req.body, function(v, k) { + user.fns.dotSet(k, v); + return true; + }); + return typeof cb === "function" ? cb(null, user) : void 0; + }, + sleep: function(req, cb) { + user.preferences.sleep = !user.preferences.sleep; + return typeof cb === "function" ? cb(null, {}) : void 0; + }, + revive: function(req, cb, analytics) { + var analyticsData, base, cl, gearOwned, item, losableItems, lostItem, lostStat; + if (!(user.stats.hp <= 0)) { + return typeof cb === "function" ? cb({ + code: 400, + message: "Cannot revive if not dead" + }) : void 0; + } + _.merge(user.stats, { + hp: 50, + exp: 0, + gp: 0 + }); + if (user.stats.lvl > 1) { + user.stats.lvl--; + } + lostStat = user.fns.randomVal(_.reduce(['str', 'con', 'per', 'int'], (function(m, k) { + if (user.stats[k]) { + m[k] = k; + } + return m; + }), {})); + if (lostStat) { + user.stats[lostStat]--; + } + cl = user.stats["class"]; + gearOwned = (typeof (base = user.items.gear.owned).toObject === "function" ? base.toObject() : void 0) || user.items.gear.owned; + losableItems = {}; + _.each(gearOwned, function(v, k) { + var itm; + if (v) { + itm = content.gear.flat['' + k]; + if (itm) { + if ((itm.value > 0 || k === 'weapon_warrior_0') && (itm.klass === cl || (itm.klass === 'special' && (!itm.specialClass || itm.specialClass === cl)) || itm.klass === 'armoire')) { + return losableItems['' + k] = '' + k; + } + } + } + }); + lostItem = user.fns.randomVal(losableItems); + if (item = content.gear.flat[lostItem]) { + user.items.gear.owned[lostItem] = false; + if (user.items.gear.equipped[item.type] === lostItem) { + user.items.gear.equipped[item.type] = item.type + "_base_0"; + } + if (user.items.gear.costume[item.type] === lostItem) { + user.items.gear.costume[item.type] = item.type + "_base_0"; + } + } + if (typeof user.markModified === "function") { + user.markModified('items.gear'); + } + analyticsData = { + uuid: user._id, + lostItem: lostItem, + gaLabel: lostItem, + category: 'behavior' + }; + if (analytics != null) { + analytics.track('Death', analyticsData); + } + return typeof cb === "function" ? cb((item ? { + code: 200, + message: i18n.t('messageLostItem', { + itemText: item.text(req.language) + }, req.language) + } : null), user) : void 0; + }, + reset: function(req, cb) { + var gear; + user.habits = []; + user.dailys = []; + user.todos = []; + user.rewards = []; + user.stats.hp = 50; + user.stats.lvl = 1; + user.stats.gp = 0; + user.stats.exp = 0; + gear = user.items.gear; + _.each(['equipped', 'costume'], function(type) { + gear[type].armor = 'armor_base_0'; + gear[type].weapon = 'weapon_base_0'; + gear[type].head = 'head_base_0'; + return gear[type].shield = 'shield_base_0'; + }); + if (typeof gear.owned === 'undefined') { + gear.owned = {}; + } + _.each(gear.owned, function(v, k) { + if (gear.owned[k]) { + gear.owned[k] = false; + } + return true; + }); + gear.owned.weapon_warrior_0 = true; + if (typeof user.markModified === "function") { + user.markModified('items.gear.owned'); + } + user.preferences.costume = false; + return typeof cb === "function" ? cb(null, user) : void 0; + }, + reroll: function(req, cb, analytics) { + var analyticsData; + if (user.balance < 1) { + return typeof cb === "function" ? cb({ + code: 401, + message: i18n.t('notEnoughGems', req.language) + }) : void 0; + } + user.balance--; + _.each(user.tasks, function(task) { + if (task.type !== 'reward') { + return task.value = 0; + } + }); + user.stats.hp = 50; + analyticsData = { + uuid: user._id, + acquireMethod: 'Gems', + gemCost: 4, + category: 'behavior' + }; + if (analytics != null) { + analytics.track('Fortify Potion', analyticsData); + } + return typeof cb === "function" ? cb(null, user) : void 0; + }, + rebirth: function(req, cb, analytics) { + var analyticsData, flags, gear, lvl, stats; + if (user.balance < 2 && user.stats.lvl < api.maxLevel) { + return typeof cb === "function" ? cb({ + code: 401, + message: i18n.t('notEnoughGems', req.language) + }) : void 0; + } + analyticsData = { + uuid: user._id, + category: 'behavior' + }; + if (user.stats.lvl < api.maxLevel) { + user.balance -= 2; + analyticsData.acquireMethod = 'Gems'; + analyticsData.gemCost = 8; + } else { + analyticsData.gemCost = 0; + analyticsData.acquireMethod = '> 100'; + } + if (analytics != null) { + analytics.track('Rebirth', analyticsData); + } + lvl = api.capByLevel(user.stats.lvl); + _.each(user.tasks, function(task) { + if (task.type !== 'reward') { + task.value = 0; + } + if (task.type === 'daily') { + return task.streak = 0; + } + }); + stats = user.stats; + stats.buffs = {}; + stats.hp = 50; + stats.lvl = 1; + stats["class"] = 'warrior'; + _.each(['per', 'int', 'con', 'str', 'points', 'gp', 'exp', 'mp'], function(value) { + return stats[value] = 0; + }); + // TODO during refactoring: move all gear code from rebirth() to its own function and then call it in reset() as well + gear = user.items.gear; + _.each(['equipped', 'costume'], function(type) { + gear[type] = {}; + gear[type].armor = 'armor_base_0'; + gear[type].weapon = 'weapon_warrior_0'; + gear[type].head = 'head_base_0'; + return gear[type].shield = 'shield_base_0'; + }); + if (user.items.currentPet) { + user.ops.equip({ + params: { + type: 'pet', + key: user.items.currentPet + } + }); + } + if (user.items.currentMount) { + user.ops.equip({ + params: { + type: 'mount', + key: user.items.currentMount + } + }); + } + _.each(gear.owned, function(v, k) { + if (gear.owned[k] && content.gear.flat[k].value) { + gear.owned[k] = false; + return true; + } + }); + gear.owned.weapon_warrior_0 = true; + if (typeof user.markModified === "function") { + user.markModified('items.gear.owned'); + } + user.preferences.costume = false; + flags = user.flags; + if (!user.achievements.beastMaster) { + flags.rebirthEnabled = false; + } + flags.itemsEnabled = false; + flags.dropsEnabled = false; + flags.classSelected = false; + flags.levelDrops = {}; + if (!user.achievements.rebirths) { + user.achievements.rebirths = 1; + user.achievements.rebirthLevel = lvl; + } else if (lvl > user.achievements.rebirthLevel || lvl === 100) { + user.achievements.rebirths++; + user.achievements.rebirthLevel = lvl; + } + user.stats.buffs = {}; + return typeof cb === "function" ? cb(null, user) : void 0; + }, + allocateNow: function(req, cb) { + _.times(user.stats.points, user.fns.autoAllocate); + user.stats.points = 0; + if (typeof user.markModified === "function") { + user.markModified('stats'); + } + return typeof cb === "function" ? cb(null, user.stats) : void 0; + }, + clearCompleted: function(req, cb) { + _.remove(user.todos, function(t) { + var ref; + return t.completed && !((ref = t.challenge) != null ? ref.id : void 0); + }); + if (typeof user.markModified === "function") { + user.markModified('todos'); + } + return typeof cb === "function" ? cb(null, user.todos) : void 0; + }, + sortTask: function(req, cb) { + var from, id, movedTask, preenedTasks, ref, task, tasks, to; + id = req.params.id; + ref = req.query, to = ref.to, from = ref.from; + task = user.tasks[id]; + if (!task) { + return typeof cb === "function" ? cb({ + code: 404, + message: i18n.t('messageTaskNotFound', req.language) + }) : void 0; + } + if (!((to != null) && (from != null))) { + return typeof cb === "function" ? cb('?to=__&from=__ are required') : void 0; + } + tasks = user[task.type + "s"]; + if (task.type === 'todo' && tasks[from] !== task) { + preenedTasks = api.preenTodos(tasks); + if (to !== -1) { + to = tasks.indexOf(preenedTasks[to]); + } + from = tasks.indexOf(preenedTasks[from]); + } + if (tasks[from] !== task) { + return typeof cb === "function" ? cb({ + code: 404, + message: i18n.t('messageTaskNotFound', req.language) + }) : void 0; + } + movedTask = tasks.splice(from, 1)[0]; + if (to === -1) { + tasks.push(movedTask); + } else { + tasks.splice(to, 0, movedTask); + } + return typeof cb === "function" ? cb(null, tasks) : void 0; + }, + updateTask: function(req, cb) { + var ref, task; + if (!(task = user.tasks[(ref = req.params) != null ? ref.id : void 0])) { + return typeof cb === "function" ? cb({ + code: 404, + message: i18n.t('messageTaskNotFound', req.language) + }) : void 0; + } + _.merge(task, _.omit(req.body, ['checklist', 'id', 'type'])); + if (req.body.checklist) { + task.checklist = req.body.checklist; + } + if (typeof task.markModified === "function") { + task.markModified('tags'); + } + return typeof cb === "function" ? cb(null, task) : void 0; + }, + deleteTask: function(req, cb) { + var i, ref, task; + task = user.tasks[(ref = req.params) != null ? ref.id : void 0]; + if (!task) { + return typeof cb === "function" ? cb({ + code: 404, + message: i18n.t('messageTaskNotFound', req.language) + }) : void 0; + } + i = user[task.type + "s"].indexOf(task); + if (~i) { + user[task.type + "s"].splice(i, 1); + } + return typeof cb === "function" ? cb(null, {}) : void 0; + }, + addTask: function(req, cb) { + var task; + task = api.taskDefaults(req.body); + if (user.tasks[task.id] != null) { + return typeof cb === "function" ? cb({ + code: 409, + message: i18n.t('messageDuplicateTaskID', req.language) + }) : void 0; + } + user[task.type + "s"].unshift(task); + if (user.preferences.newTaskEdit) { + task._editing = true; + } + if (user.preferences.tagsCollapsed) { + task._tags = true; + } + if (!user.preferences.advancedCollapsed) { + task._advanced = true; + } + if (typeof cb === "function") { + cb(null, task); + } + return task; + }, + addTag: function(req, cb) { + if (user.tags == null) { + user.tags = []; + } + user.tags.push({ + name: req.body.name, + id: req.body.id || api.uuid() + }); + return typeof cb === "function" ? cb(null, user.tags) : void 0; + }, + sortTag: function(req, cb) { + var from, ref, to; + ref = req.query, to = ref.to, from = ref.from; + if (!((to != null) && (from != null))) { + return typeof cb === "function" ? cb('?to=__&from=__ are required') : void 0; + } + user.tags.splice(to, 0, user.tags.splice(from, 1)[0]); + return typeof cb === "function" ? cb(null, user.tags) : void 0; + }, + getTags: function(req, cb) { + return typeof cb === "function" ? cb(null, user.tags) : void 0; + }, + getTag: function(req, cb) { + var i, tid; + tid = req.params.id; + i = _.findIndex(user.tags, { + id: tid + }); + if (!~i) { + return typeof cb === "function" ? cb({ + code: 404, + message: i18n.t('messageTagNotFound', req.language) + }) : void 0; + } + return typeof cb === "function" ? cb(null, user.tags[i]) : void 0; + }, + updateTag: function(req, cb) { + var i, tid; + tid = req.params.id; + i = _.findIndex(user.tags, { + id: tid + }); + if (!~i) { + return typeof cb === "function" ? cb({ + code: 404, + message: i18n.t('messageTagNotFound', req.language) + }) : void 0; + } + user.tags[i].name = req.body.name; + return typeof cb === "function" ? cb(null, user.tags[i]) : void 0; + }, + deleteTag: function(req, cb) { + var i, tag, tid; + tid = req.params.id; + i = _.findIndex(user.tags, { + id: tid + }); + if (!~i) { + return typeof cb === "function" ? cb({ + code: 404, + message: i18n.t('messageTagNotFound', req.language) + }) : void 0; + } + tag = user.tags[i]; + delete user.filters[tag.id]; + user.tags.splice(i, 1); + _.each(user.tasks, function(task) { + return delete task.tags[tag.id]; + }); + _.each(['habits', 'dailys', 'todos', 'rewards'], function(type) { + return typeof user.markModified === "function" ? user.markModified(type) : void 0; + }); + return typeof cb === "function" ? cb(null, user.tags) : void 0; + }, + addWebhook: function(req, cb) { + var wh; + wh = user.preferences.webhooks; + api.refPush(wh, { + url: req.body.url, + enabled: req.body.enabled || true, + id: req.body.id + }); + if (typeof user.markModified === "function") { + user.markModified('preferences.webhooks'); + } + return typeof cb === "function" ? cb(null, user.preferences.webhooks) : void 0; + }, + updateWebhook: function(req, cb) { + _.merge(user.preferences.webhooks[req.params.id], req.body); + if (typeof user.markModified === "function") { + user.markModified('preferences.webhooks'); + } + return typeof cb === "function" ? cb(null, user.preferences.webhooks) : void 0; + }, + deleteWebhook: function(req, cb) { + delete user.preferences.webhooks[req.params.id]; + if (typeof user.markModified === "function") { + user.markModified('preferences.webhooks'); + } + return typeof cb === "function" ? cb(null, user.preferences.webhooks) : void 0; + }, + addPushDevice: function(req, cb) { + var i, item, pd; + if (!user.pushDevices) { + user.pushDevices = []; + } + pd = user.pushDevices; + item = { + regId: req.body.regId, + type: req.body.type + }; + i = _.findIndex(pd, { + regId: item.regId + }); + if (i === -1) { + pd.push(item); + } + return typeof cb === "function" ? cb(null, user.pushDevices) : void 0; + }, + clearPMs: function(req, cb) { + user.inbox.messages = {}; + if (typeof user.markModified === "function") { + user.markModified('inbox.messages'); + } + return typeof cb === "function" ? cb(null, user.inbox.messages) : void 0; + }, + deletePM: function(req, cb) { + delete user.inbox.messages[req.params.id]; + if (typeof user.markModified === "function") { + user.markModified('inbox.messages.' + req.params.id); + } + return typeof cb === "function" ? cb(null, user.inbox.messages) : void 0; + }, + blockUser: function(req, cb) { + var i; + i = user.inbox.blocks.indexOf(req.params.uuid); + if (~i) { + user.inbox.blocks.splice(i, 1); + } else { + user.inbox.blocks.push(req.params.uuid); + } + if (typeof user.markModified === "function") { + user.markModified('inbox.blocks'); + } + return typeof cb === "function" ? cb(null, user.inbox.blocks) : void 0; + }, + feed: function(req, cb) { + var egg, eggText, evolve, food, message, pet, petDisplayName, potion, potionText, ref, ref1, ref2, userPets; + ref = req.params, pet = ref.pet, food = ref.food; + food = content.food[food]; + ref1 = pet.split('-'), egg = ref1[0], potion = ref1[1]; + userPets = user.items.pets; + potionText = content.hatchingPotions[potion] ? content.hatchingPotions[potion].text() : potion; + eggText = content.eggs[egg] ? content.eggs[egg].text() : egg; + petDisplayName = i18n.t('petName', { + potion: potionText, + egg: eggText + }); + if (!userPets[pet]) { + return typeof cb === "function" ? cb({ + code: 404, + message: i18n.t('messagePetNotFound', req.language) + }) : void 0; + } + if (!((ref2 = user.items.food) != null ? ref2[food.key] : void 0)) { + return typeof cb === "function" ? cb({ + code: 404, + message: i18n.t('messageFoodNotFound', req.language) + }) : void 0; + } + if (content.specialPets[pet]) { + return typeof cb === "function" ? cb({ + code: 401, + message: i18n.t('messageCannotFeedPet', req.language) + }) : void 0; + } + if (user.items.mounts[pet]) { + return typeof cb === "function" ? cb({ + code: 401, + message: i18n.t('messageAlreadyMount', req.language) + }) : void 0; + } + message = ''; + evolve = function() { + userPets[pet] = -1; + user.items.mounts[pet] = true; + if (pet === user.items.currentPet) { + user.items.currentPet = ""; + } + return message = i18n.t('messageEvolve', { + egg: petDisplayName + }, req.language); + }; + if (food.key === 'Saddle') { + evolve(); + } else { + if (food.target === potion || content.hatchingPotions[potion].premium) { + userPets[pet] += 5; + message = i18n.t('messageLikesFood', { + egg: petDisplayName, + foodText: food.text(req.language) + }, req.language); + } else { + userPets[pet] += 2; + message = i18n.t('messageDontEnjoyFood', { + egg: petDisplayName, + foodText: food.text(req.language) + }, req.language); + } + if (userPets[pet] >= 50 && !user.items.mounts[pet]) { + evolve(); + } + } + user.items.food[food.key]--; + return typeof cb === "function" ? cb({ + code: 200, + message: message + }, { + value: userPets[pet] + }) : void 0; + }, + buySpecialSpell: function(req, cb) { + var base, item, key, message; + key = req.params.key; + item = content.special[key]; + if (user.stats.gp < item.value) { + return typeof cb === "function" ? cb({ + code: 401, + message: i18n.t('messageNotEnoughGold', req.language) + }) : void 0; + } + user.stats.gp -= item.value; + if ((base = user.items.special)[key] == null) { + base[key] = 0; + } + user.items.special[key]++; + if (typeof user.markModified === "function") { + user.markModified('items.special'); + } + message = i18n.t('messageBought', { + itemText: item.text(req.language) + }, req.language); + return typeof cb === "function" ? cb({ + code: 200, + message: message + }, _.pick(user, $w('items stats'))) : void 0; + }, + purchase: function(req, cb, analytics) { + var analyticsData, convCap, convRate, item, key, price, ref, ref1, ref2, ref3, type; + ref = req.params, type = ref.type, key = ref.key; + if (type === 'gems' && key === 'gem') { + ref1 = api.planGemLimits, convRate = ref1.convRate, convCap = ref1.convCap; + convCap += user.purchased.plan.consecutive.gemCapExtra; + if (!((ref2 = user.purchased) != null ? (ref3 = ref2.plan) != null ? ref3.customerId : void 0 : void 0)) { + return typeof cb === "function" ? cb({ + code: 401, + message: "Must subscribe to purchase gems with GP" + }, req) : void 0; + } + if (!(user.stats.gp >= convRate)) { + return typeof cb === "function" ? cb({ + code: 401, + message: "Not enough Gold" + }) : void 0; + } + if (user.purchased.plan.gemsBought >= convCap) { + return typeof cb === "function" ? cb({ + code: 401, + message: "You've reached the Gold=>Gem conversion cap (" + convCap + ") for this month. We have this to prevent abuse / farming. The cap will reset within the first three days of next month." + }) : void 0; + } + user.balance += .25; + user.purchased.plan.gemsBought++; + user.stats.gp -= convRate; + analyticsData = { + uuid: user._id, + itemKey: key, + acquireMethod: 'Gold', + goldCost: convRate, + category: 'behavior' + }; + if (analytics != null) { + analytics.track('purchase gems', analyticsData); + } + return typeof cb === "function" ? cb({ + code: 200, + message: "+1 Gem" + }, _.pick(user, $w('stats balance'))) : void 0; + } + if (type !== 'eggs' && type !== 'hatchingPotions' && type !== 'food' && type !== 'quests' && type !== 'gear') { + return typeof cb === "function" ? cb({ + code: 404, + message: ":type must be in [eggs,hatchingPotions,food,quests,gear]" + }, req) : void 0; + } + if (type === 'gear') { + item = content.gear.flat[key]; + if (user.items.gear.owned[key]) { + return typeof cb === "function" ? cb({ + code: 401, + message: i18n.t('alreadyHave', req.language) + }) : void 0; + } + price = (item.twoHanded || item.gearSet === 'animal' ? 2 : 1) / 4; + } else { + item = content[type][key]; + price = item.value / 4; + } + if (!item) { + return typeof cb === "function" ? cb({ + code: 404, + message: ":key not found for Content." + type + }, req) : void 0; + } + if (!item.canBuy(user)) { + return typeof cb === "function" ? cb({ + code: 403, + message: i18n.t('messageNotAvailable', req.language) + }) : void 0; + } + if ((user.balance < price) || !user.balance) { + return typeof cb === "function" ? cb({ + code: 403, + message: i18n.t('notEnoughGems', req.language) + }) : void 0; + } + user.balance -= price; + if (type === 'gear') { + user.items.gear.owned[key] = true; + } else { + if (!(user.items[type][key] > 0)) { + user.items[type][key] = 0; + } + user.items[type][key]++; + } + analyticsData = { + uuid: user._id, + itemKey: key, + itemType: 'Market', + acquireMethod: 'Gems', + gemCost: item.value, + category: 'behavior' + }; + if (analytics != null) { + analytics.track('acquire item', analyticsData); + } + return typeof cb === "function" ? cb(null, _.pick(user, $w('items balance'))) : void 0; + }, + releasePets: function(req, cb, analytics) { + var analyticsData, pet; + if (user.balance < 1) { + return typeof cb === "function" ? cb({ + code: 401, + message: i18n.t('notEnoughGems', req.language) + }) : void 0; + } else { + user.balance -= 1; + for (pet in content.pets) { + user.items.pets[pet] = 0; + } + if (!user.achievements.beastMasterCount) { + user.achievements.beastMasterCount = 0; + } + user.achievements.beastMasterCount++; + user.items.currentPet = ""; + } + analyticsData = { + uuid: user._id, + acquireMethod: 'Gems', + gemCost: 4, + category: 'behavior' + }; + if (analytics != null) { + analytics.track('release pets', analyticsData); + } + return typeof cb === "function" ? cb(null, user) : void 0; + }, + releaseMounts: function(req, cb, analytics) { + var analyticsData, mount; + if (user.balance < 1) { + return typeof cb === "function" ? cb({ + code: 401, + message: i18n.t('notEnoughGems', req.language) + }) : void 0; + } else { + user.balance -= 1; + user.items.currentMount = ""; + for (mount in content.pets) { + user.items.mounts[mount] = null; + } + if (!user.achievements.mountMasterCount) { + user.achievements.mountMasterCount = 0; + } + user.achievements.mountMasterCount++; + } + analyticsData = { + uuid: user._id, + acquireMethod: 'Gems', + gemCost: 4, + category: 'behavior' + }; + if (analytics != null) { + analytics.track('release mounts', analyticsData); + } + return typeof cb === "function" ? cb(null, user) : void 0; + }, + releaseBoth: function(req, cb) { + var analyticsData, animal, giveTriadBingo; + if (user.balance < 1.5 && !user.achievements.triadBingo) { + return typeof cb === "function" ? cb({ + code: 401, + message: i18n.t('notEnoughGems', req.language) + }) : void 0; + } else { + giveTriadBingo = true; + if (!user.achievements.triadBingo) { + analyticsData = { + uuid: user._id, + acquireMethod: 'Gems', + gemCost: 6, + category: 'behavior' + }; + if (typeof analytics !== "undefined" && analytics !== null) { + analytics.track('release pets & mounts', analyticsData); + } + user.balance -= 1.5; + } + user.items.currentMount = ""; + user.items.currentPet = ""; + for (animal in content.pets) { + if (user.items.pets[animal] === -1) { + giveTriadBingo = false; + } + user.items.pets[animal] = 0; + user.items.mounts[animal] = null; + } + if (!user.achievements.beastMasterCount) { + user.achievements.beastMasterCount = 0; + } + user.achievements.beastMasterCount++; + if (!user.achievements.mountMasterCount) { + user.achievements.mountMasterCount = 0; + } + user.achievements.mountMasterCount++; + if (giveTriadBingo) { + if (!user.achievements.triadBingoCount) { + user.achievements.triadBingoCount = 0; + } + user.achievements.triadBingoCount++; + } + } + return typeof cb === "function" ? cb(null, user) : void 0; + }, + buy: function(req, cb, analytics) { + var analyticsData, armoireExp, armoireResp, armoireResult, base, buyResp, drop, eligibleEquipment, item, key, message, name; + key = req.params.key; + item = key === 'potion' ? content.potion : key === 'armoire' ? content.armoire : content.gear.flat[key]; + if (!item) { + return typeof cb === "function" ? cb({ + code: 404, + message: "Item '" + key + " not found (see https://github.com/HabitRPG/habitrpg/blob/develop/common/script/content/index.js)" + }) : void 0; + } + if (user.stats.gp < item.value) { + return typeof cb === "function" ? cb({ + code: 401, + message: i18n.t('messageNotEnoughGold', req.language) + }) : void 0; + } + if ((item.canOwn != null) && !item.canOwn(user)) { + return typeof cb === "function" ? cb({ + code: 401, + message: "You can't buy this item" + }) : void 0; + } + armoireResp = void 0; + if (item.key === 'potion') { + user.stats.hp += 15; + if (user.stats.hp > 50) { + user.stats.hp = 50; + } + } else if (item.key === 'armoire') { + armoireResult = user.fns.predictableRandom(user.stats.gp); + eligibleEquipment = _.filter(content.gear.flat, (function(i) { + return i.klass === 'armoire' && !user.items.gear.owned[i.key]; + })); + if (!_.isEmpty(eligibleEquipment) && (armoireResult < .6 || !user.flags.armoireOpened)) { + eligibleEquipment.sort(); + drop = user.fns.randomVal(eligibleEquipment); + user.items.gear.owned[drop.key] = true; + user.flags.armoireOpened = true; + message = i18n.t('armoireEquipment', { + image: '', + dropText: drop.text(req.language) + }, req.language); + if (api.count.remainingGearInSet(user.items.gear.owned, 'armoire') === 0) { + user.flags.armoireEmpty = true; + } + armoireResp = { + type: "gear", + dropKey: drop.key, + dropText: drop.text(req.language) + }; + } else if ((!_.isEmpty(eligibleEquipment) && armoireResult < .8) || armoireResult < .5) { + drop = user.fns.randomVal(_.where(content.food, { + canDrop: true + })); + if ((base = user.items.food)[name = drop.key] == null) { + base[name] = 0; + } + user.items.food[drop.key] += 1; + message = i18n.t('armoireFood', { + image: '', + dropArticle: drop.article, + dropText: drop.text(req.language) + }, req.language); + armoireResp = { + type: "food", + dropKey: drop.key, + dropArticle: drop.article, + dropText: drop.text(req.language) + }; + } else { + armoireExp = Math.floor(user.fns.predictableRandom(user.stats.exp) * 40 + 10); + user.stats.exp += armoireExp; + message = i18n.t('armoireExp', req.language); + armoireResp = { + "type": "experience", + "value": armoireExp + }; + } + } else { + if (user.preferences.autoEquip) { + user.items.gear.equipped[item.type] = item.key; + message = user.fns.handleTwoHanded(item, null, req); + } + user.items.gear.owned[item.key] = true; + if (message == null) { + message = i18n.t('messageBought', { + itemText: item.text(req.language) + }, req.language); + } + if (item.last) { + user.fns.ultimateGear(); + } + } + user.stats.gp -= item.value; + analyticsData = { + uuid: user._id, + itemKey: key, + acquireMethod: 'Gold', + goldCost: item.value, + category: 'behavior' + }; + if (analytics != null) { + analytics.track('acquire item', analyticsData); + } + buyResp = _.pick(user, $w('items achievements stats flags')); + if (armoireResp) { + buyResp["armoire"] = armoireResp; + } + return typeof cb === "function" ? cb({ + code: 200, + message: message + }, buyResp) : void 0; + }, + buyQuest: function(req, cb, analytics) { + var analyticsData, base, item, key, message, name; + key = req.params.key; + item = content.quests[key]; + if (!item) { + return typeof cb === "function" ? cb({ + code: 404, + message: "Quest '" + key + " not found (see https://github.com/HabitRPG/habitrpg/blob/develop/common/script/content/index.js)" + }) : void 0; + } + if (!(item.category === 'gold' && item.goldValue)) { + return typeof cb === "function" ? cb({ + code: 404, + message: "Quest '" + key + " is not a Gold-purchasable quest (see https://github.com/HabitRPG/habitrpg/blob/develop/common/script/content/index.js)" + }) : void 0; + } + if (user.stats.gp < item.goldValue) { + return typeof cb === "function" ? cb({ + code: 401, + message: i18n.t('messageNotEnoughGold', req.language) + }) : void 0; + } + message = i18n.t('messageBought', { + itemText: item.text(req.language) + }, req.language); + if ((base = user.items.quests)[name = item.key] == null) { + base[name] = 0; + } + user.items.quests[item.key] += 1; + user.stats.gp -= item.goldValue; + analyticsData = { + uuid: user._id, + itemKey: item.key, + itemType: 'Market', + goldCost: item.goldValue, + acquireMethod: 'Gold', + category: 'behavior' + }; + if (analytics != null) { + analytics.track('acquire item', analyticsData); + } + return typeof cb === "function" ? cb({ + code: 200, + message: message + }, user.items.quests) : void 0; + }, + buyMysterySet: function(req, cb, analytics) { + var mysterySet, ref; + if (!(user.purchased.plan.consecutive.trinkets > 0)) { + return typeof cb === "function" ? cb({ + code: 401, + message: i18n.t('notEnoughHourglasses', req.language) + }) : void 0; + } + mysterySet = (ref = content.timeTravelerStore(user.items.gear.owned)) != null ? ref[req.params.key] : void 0; + if ((typeof window !== "undefined" && window !== null ? window.confirm : void 0) != null) { + if (!window.confirm(i18n.t('hourglassBuyEquipSetConfirm'))) { + return; + } + } + if (!mysterySet) { + return typeof cb === "function" ? cb({ + code: 404, + message: "Mystery set not found, or set already owned" + }) : void 0; + } + _.each(mysterySet.items, function(i) { + var analyticsData; + user.items.gear.owned[i.key] = true; + analyticsData = { + uuid: user._id, + itemKey: i.key, + itemType: 'Subscriber Gear', + acquireMethod: 'Hourglass', + category: 'behavior' + }; + return analytics != null ? analytics.track('acquire item', analyticsData) : void 0; + }); + user.purchased.plan.consecutive.trinkets--; + return typeof cb === "function" ? cb({ + code: 200, + message: i18n.t('hourglassPurchaseSet', req.language) + }, _.pick(user, $w('items purchased.plan.consecutive'))) : void 0; + }, + hourglassPurchase: function(req, cb, analytics) { + var analyticsData, key, ref, type; + ref = req.params, type = ref.type, key = ref.key; + if (!content.timeTravelStable[type]) { + return typeof cb === "function" ? cb({ + code: 403, + message: i18n.t('typeNotAllowedHourglass', req.language) + JSON.stringify(_.keys(content.timeTravelStable)) + }) : void 0; + } + if (!_.contains(_.keys(content.timeTravelStable[type]), key)) { + return typeof cb === "function" ? cb({ + code: 403, + message: i18n.t(type + 'NotAllowedHourglass', req.language) + }) : void 0; + } + if (user.items[type][key]) { + return typeof cb === "function" ? cb({ + code: 403, + message: i18n.t(type + 'AlreadyOwned', req.language) + }) : void 0; + } + if (!(user.purchased.plan.consecutive.trinkets > 0)) { + return typeof cb === "function" ? cb({ + code: 403, + message: i18n.t('notEnoughHourglasses', req.language) + }) : void 0; + } + user.purchased.plan.consecutive.trinkets--; + if (type === 'pets') { + user.items.pets[key] = 5; + } + if (type === 'mounts') { + user.items.mounts[key] = true; + } + analyticsData = { + uuid: user._id, + itemKey: key, + itemType: type, + acquireMethod: 'Hourglass', + category: 'behavior' + }; + if (analytics != null) { + analytics.track('acquire item', analyticsData); + } + return typeof cb === "function" ? cb({ + code: 200, + message: i18n.t('hourglassPurchase', req.language) + }, _.pick(user, $w('items purchased.plan.consecutive'))) : void 0; + }, + sell: function(req, cb) { + var key, ref, type; + ref = req.params, key = ref.key, type = ref.type; + if (type !== 'eggs' && type !== 'hatchingPotions' && type !== 'food') { + return typeof cb === "function" ? cb({ + code: 404, + message: ":type not found. Must bes in [eggs, hatchingPotions, food]" + }) : void 0; + } + if (!user.items[type][key]) { + return typeof cb === "function" ? cb({ + code: 404, + message: ":key not found for user.items." + type + }) : void 0; + } + user.items[type][key]--; + user.stats.gp += content[type][key].value; + return typeof cb === "function" ? cb(null, _.pick(user, $w('stats items'))) : void 0; + }, + equip: function(req, cb) { + var item, key, message, ref, type; + ref = [req.params.type || 'equipped', req.params.key], type = ref[0], key = ref[1]; + switch (type) { + case 'mount': + if (!user.items.mounts[key]) { + return typeof cb === "function" ? cb({ + code: 404, + message: ":You do not own this mount." + }) : void 0; + } + user.items.currentMount = user.items.currentMount === key ? '' : key; + break; + case 'pet': + if (!user.items.pets[key]) { + return typeof cb === "function" ? cb({ + code: 404, + message: ":You do not own this pet." + }) : void 0; + } + user.items.currentPet = user.items.currentPet === key ? '' : key; + break; + case 'costume': + case 'equipped': + item = content.gear.flat[key]; + if (!user.items.gear.owned[key]) { + return typeof cb === "function" ? cb({ + code: 404, + message: ":You do not own this gear." + }) : void 0; + } + if (user.items.gear[type][item.type] === key) { + user.items.gear[type][item.type] = item.type + "_base_0"; + message = i18n.t('messageUnEquipped', { + itemText: item.text(req.language) + }, req.language); + } else { + user.items.gear[type][item.type] = item.key; + message = user.fns.handleTwoHanded(item, type, req); + } + if (typeof user.markModified === "function") { + user.markModified("items.gear." + type); + } + } + return typeof cb === "function" ? cb((message ? { + code: 200, + message: message + } : null), user.items) : void 0; + }, + hatch: function(req, cb) { + var egg, hatchingPotion, pet, ref; + ref = req.params, egg = ref.egg, hatchingPotion = ref.hatchingPotion; + if (!(egg && hatchingPotion)) { + return typeof cb === "function" ? cb({ + code: 400, + message: "Please specify query.egg & query.hatchingPotion" + }) : void 0; + } + if (!(user.items.eggs[egg] > 0 && user.items.hatchingPotions[hatchingPotion] > 0)) { + return typeof cb === "function" ? cb({ + code: 403, + message: i18n.t('messageMissingEggPotion', req.language) + }) : void 0; + } + if (content.hatchingPotions[hatchingPotion].premium && !content.dropEggs[egg]) { + return typeof cb === "function" ? cb({ + code: 403, + message: i18n.t('messageInvalidEggPotionCombo', req.language) + }) : void 0; + } + pet = egg + "-" + hatchingPotion; + if (user.items.pets[pet] && user.items.pets[pet] > 0) { + return typeof cb === "function" ? cb({ + code: 403, + message: i18n.t('messageAlreadyPet', req.language) + }) : void 0; + } + user.items.pets[pet] = 5; + user.items.eggs[egg]--; + user.items.hatchingPotions[hatchingPotion]--; + return typeof cb === "function" ? cb({ + code: 200, + message: i18n.t('messageHatched', req.language) + }, user.items) : void 0; + }, + unlock: function(req, cb, analytics) { + var alreadyOwns, analyticsData, cost, fullSet, k, path, split, v; + path = req.query.path; + fullSet = ~path.indexOf(","); + cost = ~path.indexOf('background.') ? fullSet ? 3.75 : 1.75 : fullSet ? 1.25 : 0.5; + alreadyOwns = !fullSet && user.fns.dotGet("purchased." + path) === true; + if ((user.balance < cost || !user.balance) && !alreadyOwns) { + return typeof cb === "function" ? cb({ + code: 401, + message: i18n.t('notEnoughGems', req.language) + }) : void 0; + } + if (fullSet) { + _.each(path.split(","), function(p) { + if (~path.indexOf('gear.')) { + user.fns.dotSet("" + p, true); + true; + } else { + + } + user.fns.dotSet("purchased." + p, true); + return true; + }); + } else { + if (alreadyOwns) { + split = path.split('.'); + v = split.pop(); + k = split.join('.'); + if (k === 'background' && v === user.preferences.background) { + v = ''; + } + user.fns.dotSet("preferences." + k, v); + return typeof cb === "function" ? cb(null, req) : void 0; + } + user.fns.dotSet("purchased." + path, true); + } + user.balance -= cost; + if (~path.indexOf('gear.')) { + if (typeof user.markModified === "function") { + user.markModified('gear.owned'); + } + } else { + if (typeof user.markModified === "function") { + user.markModified('purchased'); + } + } + analyticsData = { + uuid: user._id, + itemKey: path, + itemType: 'customization', + acquireMethod: 'Gems', + gemCost: cost / .25, + category: 'behavior' + }; + if (analytics != null) { + analytics.track('acquire item', analyticsData); + } + return typeof cb === "function" ? cb(null, _.pick(user, $w('purchased preferences items'))) : void 0; + }, + changeClass: function(req, cb, analytics) { + var analyticsData, klass, ref; + klass = (ref = req.query) != null ? ref["class"] : void 0; + if (klass === 'warrior' || klass === 'rogue' || klass === 'wizard' || klass === 'healer') { + analyticsData = { + uuid: user._id, + "class": klass, + acquireMethod: 'Gems', + gemCost: 3, + category: 'behavior' + }; + if (analytics != null) { + analytics.track('change class', analyticsData); + } + user.stats["class"] = klass; + user.flags.classSelected = true; + _.each(["weapon", "armor", "shield", "head"], function(type) { + var foundKey; + foundKey = false; + _.findLast(user.items.gear.owned, function(v, k) { + if (~k.indexOf(type + "_" + klass) && v === true) { + return foundKey = k; + } + }); + user.items.gear.equipped[type] = foundKey ? foundKey : type === "weapon" ? "weapon_" + klass + "_0" : type === "shield" && klass === "rogue" ? "shield_rogue_0" : type + "_base_0"; + if (type === "weapon" || (type === "shield" && klass === "rogue")) { + user.items.gear.owned[type + "_" + klass + "_0"] = true; + } + return true; + }); + } else { + if (user.preferences.disableClasses) { + user.preferences.disableClasses = false; + user.preferences.autoAllocate = false; + } else { + if (!(user.balance >= .75)) { + return typeof cb === "function" ? cb({ + code: 401, + message: i18n.t('notEnoughGems', req.language) + }) : void 0; + } + user.balance -= .75; + } + _.merge(user.stats, { + str: 0, + con: 0, + per: 0, + int: 0, + points: api.capByLevel(user.stats.lvl) + }); + user.flags.classSelected = false; + } + return typeof cb === "function" ? cb(null, _.pick(user, $w('stats flags items preferences'))) : void 0; + }, + disableClasses: function(req, cb) { + user.stats["class"] = 'warrior'; + user.flags.classSelected = true; + user.preferences.disableClasses = true; + user.preferences.autoAllocate = true; + user.stats.str = api.capByLevel(user.stats.lvl); + user.stats.points = 0; + return typeof cb === "function" ? cb(null, _.pick(user, $w('stats flags preferences'))) : void 0; + }, + allocate: function(req, cb) { + var stat; + stat = req.query.stat || 'str'; + if (user.stats.points > 0) { + user.stats[stat]++; + user.stats.points--; + if (stat === 'int') { + user.stats.mp++; + } + } + return typeof cb === "function" ? cb(null, _.pick(user, $w('stats'))) : void 0; + }, + readCard: function(req, cb) { + var cardType; + cardType = req.params.cardType; + user.items.special[cardType + "Received"].shift(); + if (typeof user.markModified === "function") { + user.markModified("items.special." + cardType + "Received"); + } + user.flags.cardReceived = false; + return typeof cb === "function" ? cb(null, 'items.special flags.cardReceived') : void 0; + }, + openMysteryItem: function(req, cb, analytics) { + var analyticsData, item, ref, ref1; + item = (ref = user.purchased.plan) != null ? (ref1 = ref.mysteryItems) != null ? ref1.shift() : void 0 : void 0; + if (!item) { + return typeof cb === "function" ? cb({ + code: 400, + message: "Empty" + }) : void 0; + } + item = content.gear.flat[item]; + user.items.gear.owned[item.key] = true; + if (typeof user.markModified === "function") { + user.markModified('purchased.plan.mysteryItems'); + } + item.notificationType = 'Mystery'; + analyticsData = { + uuid: user._id, + itemKey: item, + itemType: 'Subscriber Gear', + acquireMethod: 'Subscriber', + category: 'behavior' + }; + if (analytics != null) { + analytics.track('open mystery item', analyticsData); + } + if (typeof window !== 'undefined') { + (user._tmp != null ? user._tmp : user._tmp = {}).drop = item; + } + return typeof cb === "function" ? cb(null, user.items.gear.owned) : void 0; + }, + score: function(req, cb) { + var addPoints, calculateDelta, calculateReverseDelta, changeTaskValue, delta, direction, gainMP, id, multiplier, num, options, ref, stats, subtractPoints, task, th; + ref = req.params, id = ref.id, direction = ref.direction; + task = user.tasks[id]; + options = req.query || {}; + _.defaults(options, { + times: 1, + cron: false + }); + user._tmp = {}; + stats = { + gp: +user.stats.gp, + hp: +user.stats.hp, + exp: +user.stats.exp + }; + task.value = +task.value; + task.streak = ~~task.streak; + if (task.priority == null) { + task.priority = 1; + } + if (task.value > stats.gp && task.type === 'reward') { + return typeof cb === "function" ? cb({ + code: 401, + message: i18n.t('messageNotEnoughGold', req.language) + }) : void 0; + } + delta = 0; + calculateDelta = function() { + var currVal, nextDelta, ref1; + currVal = task.value < -47.27 ? -47.27 : task.value > 21.27 ? 21.27 : task.value; + nextDelta = Math.pow(0.9747, currVal) * (direction === 'down' ? -1 : 1); + if (((ref1 = task.checklist) != null ? ref1.length : void 0) > 0) { + if (direction === 'down' && task.type === 'daily' && options.cron) { + nextDelta *= 1 - _.reduce(task.checklist, (function(m, i) { + return m + (i.completed ? 1 : 0); + }), 0) / task.checklist.length; + } + if (task.type === 'todo') { + nextDelta *= 1 + _.reduce(task.checklist, (function(m, i) { + return m + (i.completed ? 1 : 0); + }), 0); + } + } + return nextDelta; + }; + calculateReverseDelta = function() { + var calc, closeEnough, currVal, diff, nextDelta, ref1, testVal; + currVal = task.value < -47.27 ? -47.27 : task.value > 21.27 ? 21.27 : task.value; + testVal = currVal + Math.pow(0.9747, currVal) * (direction === 'down' ? -1 : 1); + closeEnough = 0.00001; + while (true) { + calc = testVal + Math.pow(0.9747, testVal); + diff = currVal - calc; + if (Math.abs(diff) < closeEnough) { + break; + } + if (diff > 0) { + testVal -= diff; + } else { + testVal += diff; + } + } + nextDelta = testVal - currVal; + if (((ref1 = task.checklist) != null ? ref1.length : void 0) > 0) { + if (task.type === 'todo') { + nextDelta *= 1 + _.reduce(task.checklist, (function(m, i) { + return m + (i.completed ? 1 : 0); + }), 0); + } + } + return nextDelta; + }; + changeTaskValue = function() { + return _.times(options.times, function() { + var nextDelta, ref1; + nextDelta = !options.cron && direction === 'down' ? calculateReverseDelta() : calculateDelta(); + if (task.type !== 'reward') { + if (user.preferences.automaticAllocation === true && user.preferences.allocationMode === 'taskbased' && !(task.type === 'todo' && direction === 'down')) { + user.stats.training[task.attribute] += nextDelta; + } + if (direction === 'up') { + user.party.quest.progress.up = user.party.quest.progress.up || 0; + if ((ref1 = task.type) === 'daily' || ref1 === 'todo') { + user.party.quest.progress.up += nextDelta * (1 + (user._statsComputed.str / 200)); + } + if (task.type === 'habit') { + user.party.quest.progress.up += nextDelta * (0.5 + (user._statsComputed.str / 400)); + } + } + task.value += nextDelta; + } + return delta += nextDelta; + }); + }; + addPoints = function() { + var _crit, afterStreak, currStreak, gpMod, intBonus, perBonus, streakBonus; + _crit = (delta > 0 ? user.fns.crit() : 1); + if (_crit > 1) { + user._tmp.crit = _crit; + } + intBonus = 1 + (user._statsComputed.int * .025); + stats.exp += Math.round(delta * intBonus * task.priority * _crit * 6); + perBonus = 1 + user._statsComputed.per * .02; + gpMod = delta * task.priority * _crit * perBonus; + return stats.gp += task.streak ? (currStreak = direction === 'down' ? task.streak - 1 : task.streak, streakBonus = currStreak / 100 + 1, afterStreak = gpMod * streakBonus, currStreak > 0 ? gpMod > 0 ? user._tmp.streakBonus = afterStreak - gpMod : void 0 : void 0, afterStreak) : gpMod; + }; + subtractPoints = function() { + var conBonus, hpMod; + conBonus = 1 - (user._statsComputed.con / 250); + if (conBonus < .1) { + conBonus = 0.1; + } + hpMod = delta * conBonus * task.priority * 2; + return stats.hp += Math.round(hpMod * 10) / 10; + }; + gainMP = function(delta) { + delta *= user._tmp.crit || 1; + user.stats.mp += delta; + if (user.stats.mp >= user._statsComputed.maxMP) { + user.stats.mp = user._statsComputed.maxMP; + } + if (user.stats.mp < 0) { + return user.stats.mp = 0; + } + }; + switch (task.type) { + case 'habit': + changeTaskValue(); + if (delta > 0) { + addPoints(); + } else { + subtractPoints(); + } + gainMP(_.max([0.25, .0025 * user._statsComputed.maxMP]) * (direction === 'down' ? -1 : 1)); + th = (task.history != null ? task.history : task.history = []); + if (th[th.length - 1] && moment(th[th.length - 1].date).isSame(new Date, 'day')) { + th[th.length - 1].value = task.value; + } else { + th.push({ + date: +(new Date), + value: task.value + }); + } + if (typeof user.markModified === "function") { + user.markModified("habits." + (_.findIndex(user.habits, { + id: task.id + })) + ".history"); + } + break; + case 'daily': + if (options.cron) { + changeTaskValue(); + subtractPoints(); + if (!user.stats.buffs.streaks) { + task.streak = 0; + } + } else { + changeTaskValue(); + if (direction === 'down') { + delta = calculateDelta(); + } + addPoints(); + gainMP(_.max([1, .01 * user._statsComputed.maxMP]) * (direction === 'down' ? -1 : 1)); + if (direction === 'up') { + task.streak = task.streak ? task.streak + 1 : 1; + if ((task.streak % 21) === 0) { + user.achievements.streak = user.achievements.streak ? user.achievements.streak + 1 : 1; + } + } else { + if ((task.streak % 21) === 0) { + user.achievements.streak = user.achievements.streak ? user.achievements.streak - 1 : 0; + } + task.streak = task.streak ? task.streak - 1 : 0; + } + } + break; + case 'todo': + if (options.cron) { + changeTaskValue(); + } else { + task.dateCompleted = direction === 'up' ? new Date : void 0; + changeTaskValue(); + if (direction === 'down') { + delta = calculateDelta(); + } + addPoints(); + multiplier = _.max([ + _.reduce(task.checklist, (function(m, i) { + return m + (i.completed ? 1 : 0); + }), 1), 1 + ]); + gainMP(_.max([multiplier, .01 * user._statsComputed.maxMP * multiplier]) * (direction === 'down' ? -1 : 1)); + } + break; + case 'reward': + changeTaskValue(); + stats.gp -= Math.abs(task.value); + num = parseFloat(task.value).toFixed(2); + if (stats.gp < 0) { + stats.hp += stats.gp; + stats.gp = 0; + } + } + user.fns.updateStats(stats, req); + if (typeof window === 'undefined') { + if (direction === 'up') { + user.fns.randomDrop({ + task: task, + delta: delta + }, req); + } + } + if (typeof cb === "function") { + cb(null, user); + } + return delta; + } + }; + } + user.fns = { + getItem: function(type) { + var item; + item = content.gear.flat[user.items.gear.equipped[type]]; + if (!item) { + return content.gear.flat[type + "_base_0"]; + } + return item; + }, + handleTwoHanded: function(item, type, req) { + var message, currentWeapon, currentShield; + if (type == null) { + type = 'equipped'; + } + currentShield = content.gear.flat[user.items.gear[type].shield]; + currentWeapon = content.gear.flat[user.items.gear[type].weapon]; + + if (item.type === "shield" && (currentWeapon ? currentWeapon.twoHanded : false)) { + user.items.gear[type].weapon = 'weapon_base_0'; + message = i18n.t('messageTwoHandedUnequip', { + twoHandedText: currentWeapon.text(req.language), offHandedText: item.text(req.language), + }, req.language); + } else if (item.twoHanded && (currentShield && user.items.gear[type].shield != "shield_base_0")) { + user.items.gear[type].shield = "shield_base_0"; + message = i18n.t('messageTwoHandedEquip', { + twoHandedText: item.text(req.language), offHandedText: currentShield.text(req.language), + }, req.language); + } + return message; + }, + + /* + Because the same op needs to be performed on the client and the server (critical hits, item drops, etc), + we need things to be "random", but technically predictable so that they don't go out-of-sync + */ + predictableRandom: function(seed) { + var x; + if (!seed || seed === Math.PI) { + seed = _.reduce(user.stats, (function(m, v) { + if (_.isNumber(v)) { + return m + v; + } else { + return m; + } + }), 0); + } + x = Math.sin(seed++) * 10000; + return x - Math.floor(x); + }, + crit: function(stat, chance) { + var s; + if (stat == null) { + stat = 'str'; + } + if (chance == null) { + chance = .03; + } + s = user._statsComputed[stat]; + if (user.fns.predictableRandom() <= chance * (1 + s / 100)) { + return 1.5 + 4 * s / (s + 200); + } else { + return 1; + } + }, + + /* + Get a random property from an object + returns random property (the value) + */ + randomVal: function(obj, options) { + var array, rand; + array = (options != null ? options.key : void 0) ? _.keys(obj) : _.values(obj); + rand = user.fns.predictableRandom(options != null ? options.seed : void 0); + array.sort(); + return array[Math.floor(rand * array.length)]; + }, + + /* + This allows you to set object properties by dot-path. Eg, you can run pathSet('stats.hp',50,user) which is the same as + user.stats.hp = 50. This is useful because in our habitrpg-shared functions we're returning changesets as {path:value}, + so that different consumers can implement setters their own way. Derby needs model.set(path, value) for example, where + Angular sets object properties directly - in which case, this function will be used. + */ + dotSet: function(path, val) { + return api.dotSet(user, path, val); + }, + dotGet: function(path) { + return api.dotGet(user, path); + }, + randomDrop: function(modifiers, req) { + var acceptableDrops, base, base1, base2, chance, drop, dropK, dropMultiplier, name, name1, name2, quest, rarity, ref, ref1, ref2, ref3, task; + task = modifiers.task; + chance = _.min([Math.abs(task.value - 21.27), 37.5]) / 150 + .02; + chance *= task.priority * (1 + (task.streak / 100 || 0)) * (1 + (user._statsComputed.per / 100)) * (1 + (user.contributor.level / 40 || 0)) * (1 + (user.achievements.rebirths / 20 || 0)) * (1 + (user.achievements.streak / 200 || 0)) * (user._tmp.crit || 1) * (1 + .5 * (_.reduce(task.checklist, (function(m, i) { + return m + (i.completed ? 1 : 0); + }), 0) || 0)); + chance = api.diminishingReturns(chance, 0.75); + quest = content.quests[(ref = user.party.quest) != null ? ref.key : void 0]; + if ((quest != null ? quest.collect : void 0) && user.fns.predictableRandom(user.stats.gp) < chance) { + dropK = user.fns.randomVal(quest.collect, { + key: true + }); + user.party.quest.progress.collect[dropK]++; + if (typeof user.markModified === "function") { + user.markModified('party.quest.progress'); + } + } + dropMultiplier = ((ref1 = user.purchased) != null ? (ref2 = ref1.plan) != null ? ref2.customerId : void 0 : void 0) ? 2 : 1; + if ((daysSince(user.items.lastDrop.date, user.preferences) === 0) && (user.items.lastDrop.count >= dropMultiplier * (5 + Math.floor(user._statsComputed.per / 25) + (user.contributor.level || 0)))) { + return; + } + if (((ref3 = user.flags) != null ? ref3.dropsEnabled : void 0) && user.fns.predictableRandom(user.stats.exp) < chance) { + rarity = user.fns.predictableRandom(user.stats.gp); + if (rarity > .6) { + drop = user.fns.randomVal(_.where(content.food, { + canDrop: true + })); + if ((base = user.items.food)[name = drop.key] == null) { + base[name] = 0; + } + user.items.food[drop.key] += 1; + drop.type = 'Food'; + drop.dialog = i18n.t('messageDropFood', { + dropArticle: drop.article, + dropText: drop.text(req.language), + dropNotes: drop.notes(req.language) + }, req.language); + } else if (rarity > .3) { + drop = user.fns.randomVal(content.dropEggs); + if ((base1 = user.items.eggs)[name1 = drop.key] == null) { + base1[name1] = 0; + } + user.items.eggs[drop.key]++; + drop.type = 'Egg'; + drop.dialog = i18n.t('messageDropEgg', { + dropText: drop.text(req.language), + dropNotes: drop.notes(req.language) + }, req.language); + } else { + acceptableDrops = rarity < .02 ? ['Golden'] : rarity < .09 ? ['Zombie', 'CottonCandyPink', 'CottonCandyBlue'] : rarity < .18 ? ['Red', 'Shade', 'Skeleton'] : ['Base', 'White', 'Desert']; + drop = user.fns.randomVal(_.pick(content.hatchingPotions, (function(v, k) { + return indexOf.call(acceptableDrops, k) >= 0; + }))); + if ((base2 = user.items.hatchingPotions)[name2 = drop.key] == null) { + base2[name2] = 0; + } + user.items.hatchingPotions[drop.key]++; + drop.type = 'HatchingPotion'; + drop.dialog = i18n.t('messageDropPotion', { + dropText: drop.text(req.language), + dropNotes: drop.notes(req.language) + }, req.language); + } + user._tmp.drop = drop; + user.items.lastDrop.date = +(new Date); + return user.items.lastDrop.count++; + } + }, + + /* + Updates user stats with new stats. Handles death, leveling up, etc + {stats} new stats + {update} if aggregated changes, pass in userObj as update. otherwise commits will be made immediately + */ + autoAllocate: function() { + return user.stats[(function() { + var diff, ideal, lvlDiv7, preference, stats, suggested; + switch (user.preferences.allocationMode) { + case "flat": + stats = _.pick(user.stats, $w('con str per int')); + return _.invert(stats)[_.min(stats)]; + case "classbased": + lvlDiv7 = user.stats.lvl / 7; + ideal = [lvlDiv7 * 3, lvlDiv7 * 2, lvlDiv7, lvlDiv7]; + preference = (function() { + switch (user.stats["class"]) { + case "wizard": + return ["int", "per", "con", "str"]; + case "rogue": + return ["per", "str", "int", "con"]; + case "healer": + return ["con", "int", "str", "per"]; + default: + return ["str", "con", "per", "int"]; + } + })(); + diff = [user.stats[preference[0]] - ideal[0], user.stats[preference[1]] - ideal[1], user.stats[preference[2]] - ideal[2], user.stats[preference[3]] - ideal[3]]; + suggested = _.findIndex(diff, (function(val) { + if (val === _.min(diff)) { + return true; + } + })); + if (~suggested) { + return preference[suggested]; + } else { + return "str"; + } + case "taskbased": + suggested = _.invert(user.stats.training)[_.max(user.stats.training)]; + _.merge(user.stats.training, { + str: 0, + int: 0, + con: 0, + per: 0 + }); + return suggested || "str"; + default: + return "str"; + } + })()]++; + }, + updateStats: function(stats, req, analytics) { + var tnl; + if (stats.hp <= 0) { + return user.stats.hp = 0; + } + user.stats.hp = stats.hp; + user.stats.gp = stats.gp >= 0 ? stats.gp : 0; + tnl = api.tnl(user.stats.lvl); + if (stats.exp >= tnl) { + user.stats.exp = stats.exp; + while (stats.exp >= tnl) { + stats.exp -= tnl; + user.stats.lvl++; + tnl = api.tnl(user.stats.lvl); + user.stats.hp = 50; + if (user.stats.lvl > api.maxLevel) { + continue; + } + if (user.preferences.automaticAllocation) { + user.fns.autoAllocate(); + } else { + user.stats.points = user.stats.lvl - (user.stats.con + user.stats.str + user.stats.per + user.stats.int); + if (user.stats.points < 0) { + user.stats.points = 0; + } + } + } + } + user.stats.exp = stats.exp; + if (user.flags == null) { + user.flags = {}; + } + if (!user.flags.customizationsNotification && (user.stats.exp > 5 || user.stats.lvl > 1)) { + user.flags.customizationsNotification = true; + } + if (!user.flags.itemsEnabled && (user.stats.exp > 10 || user.stats.lvl > 1)) { + user.flags.itemsEnabled = true; + } + if (!user.flags.dropsEnabled && user.stats.lvl >= 3) { + user.flags.dropsEnabled = true; + if (user.items.eggs["Wolf"] > 0) { + user.items.eggs["Wolf"]++; + } else { + user.items.eggs["Wolf"] = 1; + } + } + if (!user.flags.classSelected && user.stats.lvl >= 10) { + user.flags.classSelected; + } + _.each({ + vice1: 30, + atom1: 15, + moonstone1: 60, + goldenknight1: 40 + }, function(lvl, k) { + var analyticsData, base, base1, ref; + if (!((ref = user.flags.levelDrops) != null ? ref[k] : void 0) && user.stats.lvl >= lvl) { + if ((base = user.items.quests)[k] == null) { + base[k] = 0; + } + user.items.quests[k]++; + ((base1 = user.flags).levelDrops != null ? base1.levelDrops : base1.levelDrops = {})[k] = true; + if (typeof user.markModified === "function") { + user.markModified('flags.levelDrops'); + } + analyticsData = { + uuid: user._id, + itemKey: k, + acquireMethod: 'Level Drop', + category: 'behavior' + }; + if (analytics != null) { + analytics.track('acquire item', analyticsData); + } + return user._tmp.drop = { + type: 'Quest', + key: k + }; + } + }); + if (!user.flags.rebirthEnabled && (user.stats.lvl >= 50 || user.achievements.beastMaster)) { + return user.flags.rebirthEnabled = true; + } + }, + + /* + ------------------------------------------------------ + Cron + ------------------------------------------------------ + */ + + /* + At end of day, add value to all incomplete Daily & Todo tasks (further incentive) + For incomplete Dailys, deduct experience + Make sure to run this function once in a while as server will not take care of overnight calculations. + And you have to run it every time client connects. + {user} + */ + cron: function(options) { + var _progress, analyticsData, base, base1, base2, base3, base4, clearBuffs, dailyChecked, dailyDueUnchecked, daysMissed, expTally, lvl, lvlDiv2, multiDaysCountAsOneDay, now, perfect, plan, progress, ref, ref1, ref2, ref3, todoTally; + if (options == null) { + options = {}; + } + now = +options.now || +(new Date); + daysMissed = daysSince(user.lastCron, _.defaults({ + now: now + }, user.preferences)); + if (!(daysMissed > 0)) { + return; + } + user.auth.timestamps.loggedin = new Date(); + user.lastCron = now; + if (user.items.lastDrop.count > 0) { + user.items.lastDrop.count = 0; + } + perfect = true; + clearBuffs = { + str: 0, + int: 0, + per: 0, + con: 0, + stealth: 0, + streaks: false + }; + plan = (ref = user.purchased) != null ? ref.plan : void 0; + if (plan != null ? plan.customerId : void 0) { + if (moment(plan.dateUpdated).format('MMYYYY') !== moment().format('MMYYYY')) { + plan.gemsBought = 0; + plan.dateUpdated = new Date(); + _.defaults(plan.consecutive, { + count: 0, + offset: 0, + trinkets: 0, + gemCapExtra: 0 + }); + plan.consecutive.count++; + if (plan.consecutive.offset > 0) { + plan.consecutive.offset--; + } else if (plan.consecutive.count % 3 === 0) { + plan.consecutive.trinkets++; + plan.consecutive.gemCapExtra += 5; + if (plan.consecutive.gemCapExtra > 25) { + plan.consecutive.gemCapExtra = 25; + } + } + } + if (plan.dateTerminated && moment(plan.dateTerminated).isBefore(+(new Date))) { + _.merge(plan, { + planId: null, + customerId: null, + paymentMethod: null + }); + _.merge(plan.consecutive, { + count: 0, + offset: 0, + gemCapExtra: 0 + }); + if (typeof user.markModified === "function") { + user.markModified('purchased.plan'); + } + } + } + if (user.preferences.sleep === true) { + user.stats.buffs = clearBuffs; + user.dailys.forEach(function(daily) { + var completed, repeat, thatDay; + completed = daily.completed, repeat = daily.repeat; + thatDay = moment(now).subtract({ + days: 1 + }); + if (shouldDo(thatDay.toDate(), daily, user.preferences) || completed) { + _.each(daily.checklist, (function(box) { + box.completed = false; + return true; + })); + } + return daily.completed = false; + }); + return; + } + multiDaysCountAsOneDay = true; + todoTally = 0; + user.todos.forEach(function(task) { + var absVal, completed, delta, id; + if (!task) { + return; + } + id = task.id, completed = task.completed; + delta = user.ops.score({ + params: { + id: task.id, + direction: 'down' + }, + query: { + times: multiDaysCountAsOneDay != null ? multiDaysCountAsOneDay : { + 1: daysMissed + }, + cron: true + } + }); + absVal = completed ? Math.abs(task.value) : task.value; + return todoTally += absVal; + }); + dailyChecked = 0; + dailyDueUnchecked = 0; + if ((base = user.party.quest.progress).down == null) { + base.down = 0; + } + user.dailys.forEach(function(task) { + var EvadeTask, completed, delta, fractionChecked, id, j, n, ref1, ref2, scheduleMisses, thatDay; + if (!task) { + return; + } + id = task.id, completed = task.completed; + EvadeTask = 0; + scheduleMisses = daysMissed; + if (completed) { + dailyChecked += 1; + } else { + scheduleMisses = 0; + for (n = j = 0, ref1 = daysMissed; 0 <= ref1 ? j < ref1 : j > ref1; n = 0 <= ref1 ? ++j : --j) { + thatDay = moment(now).subtract({ + days: n + 1 + }); + if (shouldDo(thatDay.toDate(), task, user.preferences)) { + scheduleMisses++; + if (user.stats.buffs.stealth) { + user.stats.buffs.stealth--; + EvadeTask++; + } + if (multiDaysCountAsOneDay) { + break; + } + } + } + if (scheduleMisses > EvadeTask) { + perfect = false; + if (((ref2 = task.checklist) != null ? ref2.length : void 0) > 0) { + fractionChecked = _.reduce(task.checklist, (function(m, i) { + return m + (i.completed ? 1 : 0); + }), 0) / task.checklist.length; + dailyDueUnchecked += 1 - fractionChecked; + dailyChecked += fractionChecked; + } else { + dailyDueUnchecked += 1; + } + delta = user.ops.score({ + params: { + id: task.id, + direction: 'down' + }, + query: { + times: multiDaysCountAsOneDay != null ? multiDaysCountAsOneDay : { + 1: scheduleMisses - EvadeTask + }, + cron: true + } + }); + user.party.quest.progress.down += delta * (task.priority < 1 ? task.priority : 1); + } + } + (task.history != null ? task.history : task.history = []).push({ + date: +(new Date), + value: task.value + }); + task.completed = false; + if (completed || (scheduleMisses > 0)) { + return _.each(task.checklist, (function(i) { + i.completed = false; + return true; + })); + } + }); + user.habits.forEach(function(task) { + if (task.up === false || task.down === false) { + if (Math.abs(task.value) < 0.1) { + return task.value = 0; + } else { + return task.value = task.value / 2; + } + } + }); + ((base1 = (user.history != null ? user.history : user.history = {})).todos != null ? base1.todos : base1.todos = []).push({ + date: now, + value: todoTally + }); + expTally = user.stats.exp; + lvl = 0; + while (lvl < (user.stats.lvl - 1)) { + lvl++; + expTally += api.tnl(lvl); + } + ((base2 = user.history).exp != null ? base2.exp : base2.exp = []).push({ + date: now, + value: expTally + }); + if (!((ref1 = user.purchased) != null ? (ref2 = ref1.plan) != null ? ref2.customerId : void 0 : void 0)) { + user.fns.preenUserHistory(); + if (typeof user.markModified === "function") { + user.markModified('history'); + } + if (typeof user.markModified === "function") { + user.markModified('dailys'); + } + } + user.stats.buffs = perfect ? ((base3 = user.achievements).perfect != null ? base3.perfect : base3.perfect = 0, user.achievements.perfect++, lvlDiv2 = Math.ceil(api.capByLevel(user.stats.lvl) / 2), { + str: lvlDiv2, + int: lvlDiv2, + per: lvlDiv2, + con: lvlDiv2, + stealth: 0, + streaks: false + }) : clearBuffs; + if (dailyDueUnchecked === 0 && dailyChecked === 0) { + dailyChecked = 1; + } + user.stats.mp += _.max([10, .1 * user._statsComputed.maxMP]) * dailyChecked / (dailyDueUnchecked + dailyChecked); + if (user.stats.mp > user._statsComputed.maxMP) { + user.stats.mp = user._statsComputed.maxMP; + } + progress = user.party.quest.progress; + _progress = _.cloneDeep(progress); + _.merge(progress, { + down: 0, + up: 0 + }); + progress.collect = _.transform(progress.collect, (function(m, v, k) { + return m[k] = 0; + })); + if ((base4 = user.flags).cronCount == null) { + base4.cronCount = 0; + } + user.flags.cronCount++; + analyticsData = { + category: 'behavior', + gaLabel: 'Cron Count', + gaValue: user.flags.cronCount, + uuid: user._id, + user: user, + resting: user.preferences.sleep, + cronCount: user.flags.cronCount, + progressUp: _.min([_progress.up, 900]), + progressDown: _progress.down + }; + if ((ref3 = options.analytics) != null) { + ref3.track('Cron', analyticsData); + } + return _progress; + }, + preenUserHistory: function(minHistLen) { + if (minHistLen == null) { + minHistLen = 7; + } + _.each(user.habits.concat(user.dailys), function(task) { + var ref; + if (((ref = task.history) != null ? ref.length : void 0) > minHistLen) { + task.history = preenHistory(task.history); + } + return true; + }); + _.defaults(user.history, { + todos: [], + exp: [] + }); + if (user.history.exp.length > minHistLen) { + user.history.exp = preenHistory(user.history.exp); + } + if (user.history.todos.length > minHistLen) { + return user.history.todos = preenHistory(user.history.todos); + } + }, + ultimateGear: function() { + var base, owned; + owned = typeof window !== "undefined" && window !== null ? user.items.gear.owned : user.items.gear.owned.toObject(); + if ((base = user.achievements).ultimateGearSets == null) { + base.ultimateGearSets = { + healer: false, + wizard: false, + rogue: false, + warrior: false + }; + } + content.classes.forEach(function(klass) { + if (user.achievements.ultimateGearSets[klass] !== true) { + return user.achievements.ultimateGearSets[klass] = _.reduce(['armor', 'shield', 'head', 'weapon'], function(soFarGood, type) { + var found; + found = _.find(content.gear.tree[type][klass], { + last: true + }); + return soFarGood && (!found || owned[found.key] === true); + }, true); + } + }); + if (typeof user.markModified === "function") { + user.markModified('achievements.ultimateGearSets'); + } + if (_.contains(user.achievements.ultimateGearSets, true) && user.flags.armoireEnabled !== true) { + user.flags.armoireEnabled = true; + return typeof user.markModified === "function" ? user.markModified('flags') : void 0; + } + }, + nullify: function() { + user.ops = null; + user.fns = null; + return user = null; + } + }; + Object.defineProperty(user, '_statsComputed', { + get: function() { + var computed; + computed = _.reduce(['per', 'con', 'str', 'int'], (function(_this) { + return function(m, stat) { + m[stat] = _.reduce($w('stats stats.buffs items.gear.equipped.weapon items.gear.equipped.armor items.gear.equipped.head items.gear.equipped.shield'), function(m2, path) { + var item, val; + val = user.fns.dotGet(path); + return m2 + (~path.indexOf('items.gear') ? (item = content.gear.flat[val], (+(item != null ? item[stat] : void 0) || 0) * ((item != null ? item.klass : void 0) === user.stats["class"] || (item != null ? item.specialClass : void 0) === user.stats["class"] ? 1.5 : 1)) : +val[stat] || 0); + }, 0); + m[stat] += Math.floor(api.capByLevel(user.stats.lvl) / 2); + return m; + }; + })(this), {}); + computed.maxMP = computed.int * 2 + 30; + return computed; + } + }); + return Object.defineProperty(user, 'tasks', { + get: function() { + var tasks; + tasks = user.habits.concat(user.dailys).concat(user.todos).concat(user.rewards); + return _.object(_.pluck(tasks, "id"), tasks); + } + }); +}; diff --git a/common/script/public/config.js b/common/script/public/config.js index fca510da0f..bb78e244bd 100644 --- a/common/script/public/config.js +++ b/common/script/public/config.js @@ -35,9 +35,9 @@ angular.module('habitrpg').config(['$httpProvider', function($httpProvider){ // Error } else { - var error = 'Please reload, ' + - '"'+window.env.t('error')+' '+(response.data.err || response.data || 'something went wrong')+'" ' + - window.env.t('seeConsole'); + var error = window.env.t('requestError') + '

"' + + window.env.t('error') + ' ' + (response.data.err || response.data || 'something went wrong') + + '"

' + window.env.t('seeConsole'); if (mobileApp) error = 'Error contacting the server. Please try again in a few minutes.'; $rootScope.$broadcast('responseError', error); console.error(response); diff --git a/common/script/public/userServices.js b/common/script/public/userServices.js index b26a4c531d..ba02382fc4 100644 --- a/common/script/public/userServices.js +++ b/common/script/public/userServices.js @@ -106,11 +106,10 @@ angular.module('habitrpg') } if (err) { var message = err.code ? err.message : err; - console.log(message); if (MOBILE_APP) Notification.push({type:'text',text:message}); else Notification.text(message); // In the case of 200s, they're friendly alert messages like "Your pet has hatched!" - still send the op - if ((err.code && err.code >= 400) || !err.code) return; + if ((err.code && err.code >= 400) || !err.code) return; } userServices.log({op:k, params: req.params, query:req.query, body:req.body}); }); @@ -251,7 +250,8 @@ angular.module('habitrpg') $window.location.href='/'; }); } else { - if ($window.location.pathname.indexOf('/static') !== 0){ + var isStaticOrSocial = $window.location.pathname.match(/^\/(static|social)/); + if (!isStaticOrSocial){ localStorage.clear(); $window.location.href = '/logout'; } diff --git a/common/script/src/content/backgrounds.js b/common/script/src/content/backgrounds.js index af098bc66d..1f7ca6a1ed 100644 --- a/common/script/src/content/backgrounds.js +++ b/common/script/src/content/backgrounds.js @@ -21,7 +21,8 @@ let sets = { 'backgrounds072015': ['dilatory_ruins', 'giant_wave', 'sunken_ship'], 'backgrounds082015': ['pyramids', 'sunset_savannah', 'twinkly_party_lights'], 'backgrounds092015': ['market', 'stable', 'tavern'], - 'backgrounds102015': ['harvest_moon', 'slimy_swamp', 'swarming_darkness'] + 'backgrounds102015': ['harvest_moon', 'slimy_swamp', 'swarming_darkness'], + 'backgrounds112015': ['floating_islands', 'night_dunes', 'sunset_oasis'] }; generateBackgrounds(sets); diff --git a/common/script/src/content/classes.js b/common/script/src/content/classes.js deleted file mode 100644 index 7966effb1c..0000000000 --- a/common/script/src/content/classes.js +++ /dev/null @@ -1,3 +0,0 @@ -let classes = ['warrior', 'rogue', 'healer', 'wizard']; - -export default classes; diff --git a/common/script/src/content/eggs/quest.js b/common/script/src/content/eggs/quest.js index efde0776af..cd27ecd4d4 100644 --- a/common/script/src/content/eggs/quest.js +++ b/common/script/src/content/eggs/quest.js @@ -22,6 +22,7 @@ const QUEST_EGGS = [ 'Whale', 'Cheetah', 'Horse', + 'Frog' ]; let eggDefaults = { diff --git a/common/script/src/content/events.js b/common/script/src/content/events.js deleted file mode 100644 index 26bc8c8fda..0000000000 --- a/common/script/src/content/events.js +++ /dev/null @@ -1,18 +0,0 @@ -// IMPORTANT: The end date should be one to two days AFTER the actual end of -// the event, to allow people in different timezones to still buy the -// event gear up until at least the actual end of the event. - -let events = { - winter: {start:'2013-12-31',end:'2014-02-01'}, - birthday: {start:'2013-01-30',end:'2014-02-01'}, - spring: {start:'2014-03-21',end:'2014-05-01'}, - summer: {start:'2014-06-20',end:'2014-08-01'}, - gaymerx: {start:'2014-07-02',end:'2014-08-01'}, - fall: {start:'2014-09-21',end:'2014-11-01'}, - winter2015: {start:'2014-12-21',end:'2015-02-02'}, - spring2015: {start:'2015-03-20',end:'2015-05-02'}, - summer2015: {start:'2015-06-20',end:'2015-08-02'}, - fall2015: {start:'2015-09-21',end:'2015-11-01'}, -} - -export default events; diff --git a/common/script/src/content/food/base.js b/common/script/src/content/food/base.js index aec05e7b1e..27a84c22d2 100644 --- a/common/script/src/content/food/base.js +++ b/common/script/src/content/food/base.js @@ -3,8 +3,8 @@ import { setFoodDefaults } from '../helpers'; -const CAN_BUY = false; -const CAN_DROP = false; +const CAN_BUY = true; +const CAN_DROP = true; let baseFood = { Meat: { diff --git a/common/script/src/content/food/fall.js b/common/script/src/content/food/fall.js index b9ec1f00fa..385b7c2d34 100644 --- a/common/script/src/content/food/fall.js +++ b/common/script/src/content/food/fall.js @@ -3,8 +3,8 @@ import { setFoodDefaults } from '../helpers'; -const CAN_BUY = true; -const CAN_DROP = true; +const CAN_BUY = false; +const CAN_DROP = false; let candy = { Candy_Skeleton: { diff --git a/common/script/src/content/gear/index.js b/common/script/src/content/gear/index.js deleted file mode 100644 index 2d78868d38..0000000000 --- a/common/script/src/content/gear/index.js +++ /dev/null @@ -1,119 +0,0 @@ -import {each, defaults} from 'lodash'; -import moment from 'moment'; - -//-------------------------------------------------- -// Gear is structured by equipment type, but organized by set. Each set exports the equipment for each type that it has -// -// The class sets have numbered key values, as they are purchased sequentially -// -// : { -// key: __, -// type: , -// klass: , -// index: , -// text: t(Text), -// notes: t(Notes { -// -// }), -// con: , -// int: , -// per: , -// str: , -// value: , -// last: , -// -// event: , -// canOwn: , -// mystery: -// } -// -// - What type of euqipment it is (armor, head, weapon, etc) -// - What set this gear is a part of (special, mystery, warrior, etc) -// - The order in this particular set -// - CamelCased version of key -// -// - if gear has stat bonuses, they are automatically applied to notes -// -// - Boost to con, defaults to 0 -// - Boost to int, defaults to 0 -// - Boost to per, defaults to 0 -// - Boost to str, defaults to 0 -// -// - Price in gold -// - whether this is the last in a particular class set -// -// - the event key, present if gear is part of an event -// - a function that determines whether or not gear can be purchased in the rewards column -// - the mystery set key, present if item is a mystery item -// -//-------------------------------------------------- - -import classes from '../classes'; - -import weapon from './weapon'; -import armor from './armor'; -import head from './head'; -import shield from './shield'; -import back from './back'; -import body from './body'; -import headAccessory from './head-accessory'; -import eyewear from './eyewear'; - -const GEAR_TYPES = [ 'weapon', 'armor', 'head', 'shield', 'body', 'back', 'headAccessory', 'eyewear'] - -let gear = { - weapon: weapon, - armor: armor, - head: head, - shield: shield, - back: back, - body: body, - headAccessory: headAccessory, - eyewear: eyewear, -}; - -let flat = {}; - - -// The gear is exported as a tree (defined above), and a flat list (eg, {weapon_healer_1: .., shield_special_0: ...}) since -// they are needed in different forms at different points in the app - -each(GEAR_TYPES, (type) => { - let classTypes = classes.concat(['base', 'special', 'mystery', 'armoire']); - - each(classTypes, (klass) => { - each(gear[type][klass], (item, i) => { - let key = type + "_" + klass + "_" + i; - defaults(item, { - type: type, - key: key, - klass: klass, - index: i, - str: 0, - int: 0, - per: 0, - con: 0 - }); - if (item.event) { - let _canOwn = item.canOwn || (() => { - return true; - }); - item.canOwn = (u) => { - return _canOwn(u) && ((u.items.gear.owned[key] != null) || (moment().isAfter(item.event.start) && moment().isBefore(item.event.end))) && (item.specialClass ? u.stats["class"] === item.specialClass : true); - }; - } - if (item.mystery) { - item.canOwn = (u) => { - return u.items.gear.owned[key] != null; - }; - } - flat[key] = item; - }); - }); -}); - -export default { - tree: gear, - flat: flat, - gearTypes: GEAR_TYPES -}; diff --git a/common/script/src/content/gear/sets/armoire.js b/common/script/src/content/gear/sets/armoire.js deleted file mode 100644 index 24246e4b78..0000000000 --- a/common/script/src/content/gear/sets/armoire.js +++ /dev/null @@ -1,333 +0,0 @@ -import { - translator as t, - setGearSetDefaults -} from '../../helpers'; - -let armor = { - lunarArmor: { - value: 100, - str: 7, - int: 7, - set: 'soothing', - canOwn: ((u) => { - return u.items.gear.owned.armor_armoire_lunarArmor != null; - }) - }, - gladiatorArmor: { - value: 100, - str: 7, - per: 7, - set: 'gladiator', - canOwn: ((u) => { - return u.items.gear.owned.armor_armoire_gladiatorArmor != null; - }) - }, - rancherRobes: { - value: 100, - str: 5, - per: 5, - int: 5, - set: 'rancher', - canOwn: ((u) => { - return u.items.gear.owned.armor_armoire_rancherRobes != null; - }) - }, - goldenToga: { - text: t('armorArmoireGoldenTogaText'), - notes: t('armorArmoireGoldenTogaNotes', { - attrs: 8 - }), - value: 100, - str: 8, - con: 8, - set: 'goldenToga', - canOwn: ((u) => { - return u.items.gear.owned.armor_armoire_goldenToga != null; - }) - }, - hornedIronArmor: { - value: 100, - con: 9, - per: 7, - set: 'hornedIron', - canOwn: ((u) => { - return u.items.gear.owned.armor_armoire_hornedIronArmor != null; - }) - }, - plagueDoctorOvercoat: { - value: 100, - int: 6, - str: 5, - con: 6, - set: 'plagueDoctor', - canOwn: ((u) => { - return u.items.gear.owned.armor_armoire_plagueDoctorOvercoat != null; - }) - } -}; - -let eyewear = { - plagueDoctorMask: { - value: 100, - set: 'plagueDoctor', - canOwn: ((u) => { - return u.items.gear.owned.eyewear_armoire_plagueDoctorMask != null; - }) - } -}; - -let head = { - lunarCrown: { - value: 100, - con: 7, - per: 7, - set: 'soothing', - canOwn: ((u) => { - return u.items.gear.owned.head_armoire_lunarCrown != null; - }) - }, - redHairbow: { - value: 100, - str: 5, - int: 5, - con: 5, - canOwn: ((u) => { - return u.items.gear.owned.head_armoire_redHairbow != null; - }) - }, - violetFloppyHat: { - value: 100, - per: 5, - int: 5, - con: 5, - canOwn: ((u) => { - return u.items.gear.owned.head_armoire_violetFloppyHat != null; - }) - }, - gladiatorHelm: { - value: 100, - per: 7, - int: 7, - set: 'gladiator', - canOwn: ((u) => { - return u.items.gear.owned.head_armoire_gladiatorHelm != null; - }) - }, - rancherHat: { - value: 100, - str: 5, - per: 5, - int: 5, - set: 'rancher', - canOwn: ((u) => { - return u.items.gear.owned.head_armoire_rancherHat != null; - }) - }, - royalCrown: { - value: 100, - str: 10, - canOwn: ((u) => { - return u.items.gear.owned.head_armoire_royalCrown != null; - }) - }, - blueHairbow: { - value: 100, - per: 5, - int: 5, - con: 5, - canOwn: ((u) => { - return u.items.gear.owned.head_armoire_blueHairbow != null; - }) - }, - goldenLaurels: { - text: t('headArmoireGoldenLaurelsText'), - notes: t('headArmoireGoldenLaurelsNotes', { - attrs: 8 - }), - value: 100, - per: 8, - con: 8, - set: 'goldenToga', - canOwn: ((u) => { - return u.items.gear.owned.head_armoire_goldenLaurels != null; - }) - }, - hornedIronHelm: { - value: 100, - con: 9, - str: 7, - set: 'hornedIron', - canOwn: ((u) => { - return u.items.gear.owned.head_armoire_hornedIronHelm != null; - }) - }, - yellowHairbow: { - notes: t('headArmoireYellowHairbowNotes', { - attrs: 5 - }), - value: 100, - int: 5, - per: 5, - str: 5, - canOwn: ((u) => { - return u.items.gear.owned.head_armoire_yellowHairbow != null; - }) - }, - redFloppyHat: { - notes: t('headArmoireRedFloppyHatNotes', { - attrs: 6 - }), - value: 100, - con: 6, - int: 6, - per: 6, - canOwn: ((u) => { - return u.items.gear.owned.head_armoire_redFloppyHat != null; - }) - }, - plagueDoctorHat: { - value: 100, - int: 5, - str: 6, - con: 5, - set: 'plagueDoctor', - canOwn: ((u) => { - return u.items.gear.owned.head_armoire_plagueDoctorHat != null; - }) - }, - blackCat: { - notes: t('headArmoireBlackCatNotes', { - attrs: 9 - }), - value: 100, - int: 9, - per: 9, - canOwn: (function(u) { - return u.items.gear.owned.head_armoire_blackCat != null; - }) - }, - orangeCat: { - notes: t('headArmoireOrangeCatNotes', { - attrs: 9 - }), - value: 100, - con: 9, - str: 9, - canOwn: (function(u) { - return u.items.gear.owned.head_armoire_orangeCat != null; - }) - }, -}; - -let shield = { - gladiatorShield: { - value: 100, - con: 5, - str: 5, - set: 'gladiator', - canOwn: ((u) => { - return u.items.gear.owned.shield_armoire_gladiatorShield != null; - }) - }, - midnightShield: { - value: 100, - con: 10, - str: 2, - canOwn: ((u) => { - return u.items.gear.owned.shield_armoire_midnightShield != null; - }) - }, -}; - -let weapon = { - basicCrossbow: { - value: 100, - str: 5, - per: 5, - con: 5, - canOwn: (function(u) { - return u.items.gear.owned.weapon_armoire_basicCrossbow != null; - }) - }, - lunarSceptre: { - value: 100, - con: 7, - int: 7, - set: 'soothing', - canOwn: (function(u) { - return u.items.gear.owned.weapon_armoire_lunarSceptre != null; - }) - }, - rancherLasso: { - notes: t('weaponArmoireRancherLassoNotes', { - str: 5, - per: 5, - int: 5 - }), - value: 100, - str: 5, - per: 5, - int: 5, - set: 'rancher', - canOwn: (function(u) { - return u.items.gear.owned.weapon_armoire_rancherLasso != null; - }) - }, - mythmakerSword: { - notes: t('weaponArmoireMythmakerSwordNotes', { - attrs: 6 - }), - value: 100, - str: 6, - per: 6, - set: 'goldenToga', - canOwn: (function(u) { - return u.items.gear.owned.weapon_armoire_mythmakerSword != null; - }) - }, - ironCrook: { - notes: t('weaponArmoireIronCrookNotes', { - attrs: 7 - }), - value: 100, - str: 7, - per: 7, - set: 'hornedIron', - canOwn: (function(u) { - return u.items.gear.owned.weapon_armoire_ironCrook != null; - }) - }, - goldWingStaff: { - notes: t('weaponArmoireGoldWingStaffNotes', { - attrs: 4 - }), - value: 100, - con: 4, - int: 4, - per: 4, - str: 4, - canOwn: (function(u) { - return u.items.gear.owned.weapon_armoire_goldWingStaff != null; - }) - }, - batWand: { - value: 100, - int: 10, - per: 2, - canOwn: (function(u) { - return u.items.gear.owned.weapon_armoire_batWand != null; - }) - } -}; - -let armoireSet = { - armor: armor, - eyewear: eyewear, - head: head, - shield: shield, - weapon: weapon, -}; - -setGearSetDefaults(armoireSet, {setName: 'armoire'}); - -export default armoireSet; diff --git a/common/script/src/content/gear/sets/base.js b/common/script/src/content/gear/sets/base.js deleted file mode 100644 index b051b8a03b..0000000000 --- a/common/script/src/content/gear/sets/base.js +++ /dev/null @@ -1,48 +0,0 @@ -import {setGearSetDefaults} from '../../helpers'; - -let armor = { - 0: { value: 0 }, -}; - -let back = { - 0: { value: 0 } -}; - -let body = { - 0: { value: 0 } -}; - -let eyewear = { - 0: { value: 0 } -}; - -let head = { - 0: { value: 0 }, -}; - -let headAccessory = { - 0: { value: 0 }, -}; - -let shield = { - 0: { value: 0 }, -}; - -let weapon = { - 0: { value: 0 }, -}; - -let baseSet = { - armor: armor, - back: back, - body: body, - eyewear: eyewear, - head: head, - headAccessory: headAccessory, - shield: shield, - weapon: weapon, -}; - -setGearSetDefaults(baseSet, {setName: 'base'}); - -export default baseSet; diff --git a/common/script/src/content/gear/sets/healer.js b/common/script/src/content/gear/sets/healer.js deleted file mode 100644 index 0265ce434c..0000000000 --- a/common/script/src/content/gear/sets/healer.js +++ /dev/null @@ -1,46 +0,0 @@ -import {setGearSetDefaults} from '../../helpers'; - -let armor = { - 1: { con: 6, value: 30 }, - 2: { con: 9, value: 45 }, - 3: { con: 12, value: 65 }, - 4: { con: 15, value: 90 }, - 5: { con: 18, value: 120, last: true }, -}; - -let head = { - 1: { int: 2, value: 15 }, - 2: { int: 3, value: 25 }, - 3: { int: 5, value: 40 }, - 4: { int: 7, value: 60 }, - 5: { int: 9, value: 80, last: true }, -}; - -let shield = { - 1: { con: 2, value: 20 }, - 2: { con: 4, value: 35 }, - 3: { con: 6, value: 50 }, - 4: { con: 9, value: 70 }, - 5: { con: 12, value: 90, last: true }, -}; - -let weapon = { - 0: { value: 0 }, - 1: { int: 2, value: 20 }, - 2: { int: 3, value: 30 }, - 3: { int: 5, value: 45 }, - 4: { int: 7, value: 65 }, - 5: { int: 9, value: 90 }, - 6: { int: 11, value: 120, last: true }, -}; - -let healerSet = { - armor: armor, - head: head, - shield: shield, - weapon: weapon, -}; - -setGearSetDefaults(healerSet, {setName: 'healer'}); - -export default healerSet; diff --git a/common/script/src/content/gear/sets/mystery.js b/common/script/src/content/gear/sets/mystery.js deleted file mode 100644 index 715548fe46..0000000000 --- a/common/script/src/content/gear/sets/mystery.js +++ /dev/null @@ -1,85 +0,0 @@ -import {setGearSetDefaults} from '../../helpers'; - -let armor = { - 201402: { mystery: '201402', value: 0 }, - 201403: { mystery: '201403', value: 0 }, - 201405: { mystery: '201405', value: 0 }, - 201406: { mystery: '201406', value: 0 }, - 201407: { mystery: '201407', value: 0 }, - 201408: { mystery: '201408', value: 0 }, - 201409: { mystery: '201409', value: 0 }, - 201410: { mystery: '201410', value: 0 }, - 201412: { mystery: '201412', value: 0 }, - 201501: { mystery: '201501', value: 0 }, - 201503: { mystery: '201503', value: 0 }, - 201504: { mystery: '201504', value: 0 }, - 201506: { mystery: '201506', value: 0 }, - 201508: { mystery: '201508', value: 0 }, - 201509: { mystery: '201509', value: 0 }, - 301404: { mystery: '301404', value: 0 }, -}; - -let back = { - 201402: { mystery: '201402', value: 0 }, - 201404: { mystery: '201404', value: 0 }, - 201410: { mystery: '201410', value: 0 }, - 201504: { mystery: '201504', value: 0 }, - 201507: { mystery: '201507', value: 0 }, -}; - -let eyewear = { - 201503: { mystery: '201503', value: 0 }, - 201506: { mystery: '201506', value: 0 }, - 201507: { mystery: '201507', value: 0 }, - 301404: { mystery: '301404', value: 0 }, - 301405: { mystery: '301405', value: 0 }, -}; - -let head = { - 201402: { mystery: '201402', value: 0 }, - 201405: { mystery: '201405', value: 0 }, - 201406: { mystery: '201406', value: 0 }, - 201407: { mystery: '201407', value: 0 }, - 201408: { mystery: '201408', value: 0 }, - 201411: { mystery: '201411', value: 0 }, - 201412: { mystery: '201412', value: 0 }, - 201501: { mystery: '201501', value: 0 }, - 201505: { mystery: '201505', value: 0 }, - 201508: { mystery: '201508', value: 0 }, - 201509: { mystery:'201509', value: 0 }, - 301404: { mystery: '301404', value: 0 }, - 301405: { mystery: '301405', value: 0 }, -}; - -let headAccessory = { - 201403: { mystery: '201403', value: 0 }, - 201404: { mystery: '201404', value: 0 }, - 201409: { mystery: '201409', value: 0 }, - 201502: { mystery: '201502', value: 0 }, - 301405: { mystery: '301405', value: 0 }, -}; - -let shield = { - 301405: { mystery: '301405', value: 0 }, -}; - -let weapon = { - 201411: { mystery: '201411', value: 0 }, - 201502: { mystery: '201502', value: 0 }, - 201505: { mystery: '201505', value: 0 }, - 301404: { mystery: '301404', value: 0 }, -}; - -let mysterySet = { - armor: armor, - back: back, - eyewear: eyewear, - head: head, - headAccessory: headAccessory, - shield: shield, - weapon: weapon, -}; - -setGearSetDefaults(mysterySet, {setName: 'mystery'}); - -export default mysterySet; diff --git a/common/script/src/content/gear/sets/rogue.js b/common/script/src/content/gear/sets/rogue.js deleted file mode 100644 index 274b2eb189..0000000000 --- a/common/script/src/content/gear/sets/rogue.js +++ /dev/null @@ -1,37 +0,0 @@ -import {setGearSetDefaults} from '../../helpers'; - -let armor = { - 1: { per: 6, value: 30 }, - 2: { per: 9, value: 45 }, - 3: { per: 12, value: 65 }, - 4: { per: 15, value: 90 }, - 5: { per: 18, value: 120, last: true }, -}; - -let head = { - 1: { per: 2, value: 15 }, - 2: { per: 4, value: 25 }, - 3: { per: 6, value: 40 }, - 4: { per: 9, value: 60 }, - 5: { per: 12, value: 80, last: true }, -}; - -let weapon = { - 0: { str: 0, value: 0 }, - 1: { str: 2, value: 20 }, - 2: { str: 3, value: 35 }, - 3: { str: 4, value: 50 }, - 4: { str: 6, value: 70 }, - 5: { str: 8, value: 90 }, - 6: { str: 10, value: 120, last: true }, -}; - -let rogueSet = { - armor: armor, - head: head, - weapon: weapon, -}; - -setGearSetDefaults(rogueSet, {setName: 'rogue'}); - -export default rogueSet; diff --git a/common/script/src/content/gear/sets/special.js b/common/script/src/content/gear/sets/special.js deleted file mode 100644 index 7a94c9dd4e..0000000000 --- a/common/script/src/content/gear/sets/special.js +++ /dev/null @@ -1,1203 +0,0 @@ -import { - setGearSetDefaults, - translator as t -} from '../../helpers'; -import events from '../../events'; - -let armor = { - 0: { - con: 20, - value: 150, - canOwn: ((u) => { - var ref; - return +((ref = u.backer) != null ? ref.tier : void 0) >= 45; - }) - }, - 1: { - notes: t('armorSpecial1Notes', { - attrs: 6 - }), - con: 6, - str: 6, - per: 6, - int: 6, - value: 170, - canOwn: ((u) => { - var ref; - return +((ref = u.contributor) != null ? ref.level : void 0) >= 2; - }) - }, - 2: { - notes: t('armorSpecial2Notes', { - attrs: 25 - }), - int: 25, - con: 25, - value: 200, - canOwn: ((u) => { - var ref; - return +((ref = u.backer) != null ? ref.tier : void 0) >= 300 || (u.items.gear.owned.armor_special_2 != null); - }) - }, - finnedOceanicArmor: { - str: 15, - value: 130, - canOwn: ((u) => { - return u.items.gear.owned.armor_special_finnedOceanicArmor != null; - }) - }, - yeti: { - event: events.winter, - specialClass: 'warrior', - con: 9, - value: 90 - }, - ski: { - event: events.winter, - specialClass: 'rogue', - per: 15, - value: 90 - }, - candycane: { - event: events.winter, - specialClass: 'wizard', - int: 9, - value: 90 - }, - snowflake: { - event: events.winter, - specialClass: 'healer', - con: 15, - value: 90 - }, - birthday: { - event: events.birthday, - value: 0 - }, - springRogue: { - event: events.spring, - specialClass: 'rogue', - value: 90, - per: 15 - }, - springWarrior: { - event: events.spring, - specialClass: 'warrior', - value: 90, - con: 9 - }, - springMage: { - event: events.spring, - specialClass: 'wizard', - value: 90, - int: 9 - }, - springHealer: { - event: events.spring, - specialClass: 'healer', - value: 90, - con: 15 - }, - summerRogue: { - event: events.summer, - specialClass: 'rogue', - value: 90, - per: 15 - }, - summerWarrior: { - event: events.summer, - specialClass: 'warrior', - value: 90, - con: 9 - }, - summerMage: { - event: events.summer, - specialClass: 'wizard', - value: 90, - int: 9 - }, - summerHealer: { - event: events.summer, - specialClass: 'healer', - value: 90, - con: 15 - }, - fallRogue: { - event: events.fall, - specialClass: 'rogue', - value: 90, - canBuy: () => { return true; }, - per: 15 - }, - fallWarrior: { - event: events.fall, - specialClass: 'warrior', - value: 90, - canBuy: () => { return true; }, - con: 9 - }, - fallMage: { - event: events.fall, - specialClass: 'wizard', - value: 90, - canBuy: () => { return true; }, - int: 9 - }, - fallHealer: { - event: events.fall, - specialClass: 'healer', - value: 90, - canBuy: () => { return true; }, - con: 15 - }, - winter2015Rogue: { - event: events.winter2015, - specialClass: 'rogue', - value: 90, - per: 15 - }, - winter2015Warrior: { - event: events.winter2015, - specialClass: 'warrior', - value: 90, - con: 9 - }, - winter2015Mage: { - event: events.winter2015, - specialClass: 'wizard', - value: 90, - int: 9 - }, - winter2015Healer: { - event: events.winter2015, - specialClass: 'healer', - value: 90, - con: 15 - }, - birthday2015: { - value: 0, - canOwn: ((u) => { - return u.items.gear.owned.armor_special_birthday2015 != null; - }) - }, - spring2015Rogue: { - event: events.spring2015, - specialClass: 'rogue', - value: 90, - per: 15 - }, - spring2015Warrior: { - event: events.spring2015, - specialClass: 'warrior', - value: 90, - con: 9 - }, - spring2015Mage: { - event: events.spring2015, - specialClass: 'wizard', - value: 90, - int: 9 - }, - spring2015Healer: { - event: events.spring2015, - specialClass: 'healer', - value: 90, - con: 15 - }, - summer2015Rogue: { - event: events.summer2015, - specialClass: 'rogue', - value: 90, - per: 15 - }, - summer2015Warrior: { - event: events.summer2015, - specialClass: 'warrior', - value: 90, - con: 9 - }, - summer2015Mage: { - event: events.summer2015, - specialClass: 'wizard', - value: 90, - int: 9 - }, - summer2015Healer: { - event: events.summer2015, - specialClass: 'healer', - value: 90, - con: 15 - }, - fall2015Rogue: { - event: events.fall2015, - specialClass: 'rogue', - value: 90, - per: 15 - }, - fall2015Warrior: { - event: events.fall2015, - specialClass: 'warrior', - value: 90, - con: 9 - }, - fall2015Mage: { - event: events.fall2015, - specialClass: 'wizard', - value: 90, - int: 9 - }, - fall2015Healer: { - event: events.fall2015, - specialClass: 'healer', - value: 90, - con: 15 - }, - gaymerx: { - event: events.gaymerx, - value: 0 - } -}; - -let back = { - wondercon_red: { - value: 0, - mystery: 'wondercon' - }, - wondercon_black: { - value: 0, - mystery: 'wondercon' - } -}; - -let body = { - wondercon_red: { - value: 0, - mystery: 'wondercon' - }, - wondercon_gold: { - value: 0, - mystery: 'wondercon' - }, - wondercon_black: { - value: 0, - mystery: 'wondercon' - }, - summerHealer: { - event: events.summer, - specialClass: 'healer', - value: 20 - }, - summerMage: { - event: events.summer, - specialClass: 'wizard', - value: 20 - }, - summer2015Healer: { - event: events.summer2015, - specialClass: 'healer', - value: 20 - }, - summer2015Mage: { - event: events.summer2015, - specialClass: 'wizard', - value: 20 - }, - summer2015Rogue: { - event: events.summer2015, - specialClass: 'rogue', - value: 20 - }, - summer2015Warrior: { - event: events.summer2015, - specialClass: 'warrior', - value: 20 - } -}; - -let eyewear = { - wondercon_red: { - value: 0, - mystery: 'wondercon' - }, - wondercon_black: { - value: 0, - mystery: 'wondercon' - }, - summerRogue: { - event: events.summer, - specialClass: 'rogue', - value: 20 - }, - summerWarrior: { - event: events.summer, - specialClass: 'warrior', - value: 20 - } -}; - -let head = { - 0: { - int: 20, - value: 150, - canOwn: ((u) => { - var ref; - return +((ref = u.backer) != null ? ref.tier : void 0) >= 45; - }) - }, - 1: { - notes: t('headSpecial1Notes', { - attrs: 6 - }), - con: 6, - str: 6, - per: 6, - int: 6, - value: 170, - canOwn: ((u) => { - var ref; - return +((ref = u.contributor) != null ? ref.level : void 0) >= 3; - }) - }, - 2: { - notes: t('headSpecial2Notes', { - attrs: 25 - }), - int: 25, - str: 25, - value: 200, - canOwn: ((u) => { - var ref; - return (+((ref = u.backer) != null ? ref.tier : void 0) >= 300) || (u.items.gear.owned.head_special_2 != null); - }) - }, - fireCoralCirclet: { - per: 15, - value: 130, - canOwn: ((u) => { - return u.items.gear.owned.head_special_fireCoralCirclet != null; - }) - }, - nye: { - event: events.winter, - value: 0 - }, - yeti: { - event: events.winter, - specialClass: 'warrior', - str: 9, - value: 60 - }, - ski: { - event: events.winter, - specialClass: 'rogue', - per: 9, - value: 60 - }, - candycane: { - event: events.winter, - specialClass: 'wizard', - per: 7, - value: 60 - }, - snowflake: { - event: events.winter, - specialClass: 'healer', - int: 7, - value: 60 - }, - springRogue: { - event: events.spring, - specialClass: 'rogue', - value: 60, - per: 9 - }, - springWarrior: { - event: events.spring, - specialClass: 'warrior', - value: 60, - str: 9 - }, - springMage: { - event: events.spring, - specialClass: 'wizard', - value: 60, - per: 7 - }, - springHealer: { - event: events.spring, - specialClass: 'healer', - value: 60, - int: 7 - }, - summerRogue: { - event: events.summer, - specialClass: 'rogue', - value: 60, - per: 9 - }, - summerWarrior: { - event: events.summer, - specialClass: 'warrior', - value: 60, - str: 9 - }, - summerMage: { - event: events.summer, - specialClass: 'wizard', - value: 60, - per: 7 - }, - summerHealer: { - event: events.summer, - specialClass: 'healer', - value: 60, - int: 7 - }, - fallRogue: { - event: events.fall, - specialClass: 'rogue', - value: 60, - canBuy: () => { return true; }, - per: 9 - }, - fallWarrior: { - event: events.fall, - specialClass: 'warrior', - value: 60, - canBuy: () => { return true; }, - str: 9 - }, - fallMage: { - event: events.fall, - specialClass: 'wizard', - value: 60, - canBuy: () => { return true; }, - per: 7 - }, - fallHealer: { - event: events.fall, - specialClass: 'healer', - value: 60, - canBuy: () => { return true; }, - int: 7 - }, - winter2015Rogue: { - event: events.winter2015, - specialClass: 'rogue', - value: 60, - per: 9 - }, - winter2015Warrior: { - event: events.winter2015, - specialClass: 'warrior', - value: 60, - str: 9 - }, - winter2015Mage: { - event: events.winter2015, - specialClass: 'wizard', - value: 60, - per: 7 - }, - winter2015Healer: { - event: events.winter2015, - specialClass: 'healer', - value: 60, - int: 7 - }, - nye2014: { - value: 0, - canOwn: ((u) => { - return u.items.gear.owned.head_special_nye2014 != null; - }) - }, - spring2015Rogue: { - event: events.spring2015, - specialClass: 'rogue', - value: 60, - per: 9 - }, - spring2015Warrior: { - event: events.spring2015, - specialClass: 'warrior', - value: 60, - str: 9 - }, - spring2015Mage: { - event: events.spring2015, - specialClass: 'wizard', - value: 60, - per: 7 - }, - spring2015Healer: { - event: events.spring2015, - specialClass: 'healer', - value: 60, - int: 7 - }, - summer2015Rogue: { - event: events.summer2015, - specialClass: 'rogue', - value: 60, - per: 9 - }, - summer2015Warrior: { - event: events.summer2015, - specialClass: 'warrior', - value: 60, - str: 9 - }, - summer2015Mage: { - event: events.summer2015, - specialClass: 'wizard', - value: 60, - per: 7 - }, - summer2015Healer: { - event: events.summer2015, - specialClass: 'healer', - value: 60, - int: 7 - }, - fall2015Rogue: { - event: events.fall2015, - specialClass: 'rogue', - value: 60, - per: 9 - }, - fall2015Warrior: { - event: events.fall2015, - specialClass: 'warrior', - value: 60, - str: 9 - }, - fall2015Mage: { - event: events.fall2015, - specialClass: 'wizard', - value: 60, - per: 7 - }, - fall2015Healer: { - event: events.fall2015, - specialClass: 'healer', - value: 60, - int: 7 - }, - gaymerx: { - event: events.gaymerx, - value: 0 - } -}; - -let headAccessory = { - springRogue: { - event: events.spring, - specialClass: 'rogue', - value: 20 - }, - springWarrior: { - event: events.spring, - specialClass: 'warrior', - value: 20 - }, - springMage: { - event: events.spring, - specialClass: 'wizard', - value: 20 - }, - springHealer: { - event: events.spring, - specialClass: 'healer', - value: 20 - }, - spring2015Rogue: { - event: events.spring2015, - specialClass: 'rogue', - value: 20 - }, - spring2015Warrior: { - event: events.spring2015, - specialClass: 'warrior', - value: 20 - }, - spring2015Mage: { - event: events.spring2015, - specialClass: 'wizard', - value: 20 - }, - spring2015Healer: { - event: events.spring2015, - specialClass: 'healer', - value: 20 - }, - bearEars: { - gearSet: 'animal', - text: t('headAccessoryBearEarsText'), - notes: t('headAccessoryBearEarsNotes'), - value: 20, - canBuy: () => { return true; }, - canOwn: ((u) => { - return u.items.gear.owned.headAccessory_special_bearEars != null; - }) - }, - cactusEars: { - gearSet: 'animal', - text: t('headAccessoryCactusEarsText'), - notes: t('headAccessoryCactusEarsNotes'), - value: 20, - canBuy: () => { return true; }, - canOwn: ((u) => { - return u.items.gear.owned.headAccessory_special_cactusEars != null; - }) - }, - foxEars: { - gearSet: 'animal', - text: t('headAccessoryFoxEarsText'), - notes: t('headAccessoryFoxEarsNotes'), - value: 20, - canBuy: () => { return true; }, - canOwn: ((u) => { - return u.items.gear.owned.headAccessory_special_foxEars != null; - }) - }, - lionEars: { - gearSet: 'animal', - text: t('headAccessoryLionEarsText'), - notes: t('headAccessoryLionEarsNotes'), - value: 20, - canBuy: () => { return true; }, - canOwn: ((u) => { - return u.items.gear.owned.headAccessory_special_lionEars != null; - }) - }, - pandaEars: { - gearSet: 'animal', - text: t('headAccessoryPandaEarsText'), - notes: t('headAccessoryPandaEarsNotes'), - value: 20, - canBuy: () => { return true; }, - canOwn: ((u) => { - return u.items.gear.owned.headAccessory_special_pandaEars != null; - }) - }, - pigEars: { - gearSet: 'animal', - text: t('headAccessoryPigEarsText'), - notes: t('headAccessoryPigEarsNotes'), - value: 20, - canBuy: () => { return true; }, - canOwn: ((u) => { - return u.items.gear.owned.headAccessory_special_pigEars != null; - }) - }, - tigerEars: { - gearSet: 'animal', - text: t('headAccessoryTigerEarsText'), - notes: t('headAccessoryTigerEarsNotes'), - value: 20, - canBuy: () => { return true; }, - canOwn: ((u) => { - return u.items.gear.owned.headAccessory_special_tigerEars != null; - }) - }, - wolfEars: { - gearSet: 'animal', - text: t('headAccessoryWolfEarsText'), - notes: t('headAccessoryWolfEarsNotes'), - value: 20, - canBuy: () => { return true; }, - canOwn: ((u) => { - return u.items.gear.owned.headAccessory_special_wolfEars != null; - }) - } -}; - -let shield = { - 0: { - per: 20, - value: 150, - canOwn: ((u) => { - var ref; - return +((ref = u.backer) != null ? ref.tier : void 0) >= 45; - }) - }, - 1: { - notes: t('shieldSpecial1Notes', { - attrs: 6 - }), - con: 6, - str: 6, - per: 6, - int: 6, - value: 170, - canOwn: ((u) => { - var ref; - return +((ref = u.contributor) != null ? ref.level : void 0) >= 5; - }) - }, - goldenknight: { - notes: t('shieldSpecialGoldenknightNotes', { - attrs: 25 - }), - con: 25, - per: 25, - value: 200, - canOwn: ((u) => { - return u.items.gear.owned.shield_special_goldenknight != null; - }) - }, - moonpearlShield: { - con: 15, - value: 130, - canOwn: ((u) => { - return u.items.gear.owned.shield_special_moonpearlShield != null; - }) - }, - yeti: { - event: events.winter, - specialClass: 'warrior', - con: 7, - value: 70 - }, - ski: { - text: t('weaponSpecialSkiText'), - notes: t('weaponSpecialSkiNotes', { - str: 8 - }), - event: events.winter, - specialClass: 'rogue', - str: 8, - value: 90 - }, - snowflake: { - event: events.winter, - specialClass: 'healer', - con: 9, - value: 70 - }, - springRogue: { - event: events.spring, - specialClass: 'rogue', - value: 80, - str: 8 - }, - springWarrior: { - event: events.spring, - specialClass: 'warrior', - value: 70, - con: 7 - }, - springHealer: { - event: events.spring, - specialClass: 'healer', - value: 70, - con: 9 - }, - summerRogue: { - event: events.summer, - specialClass: 'rogue', - value: 80, - str: 8 - }, - summerWarrior: { - event: events.summer, - specialClass: 'warrior', - value: 70, - con: 7 - }, - summerHealer: { - event: events.summer, - specialClass: 'healer', - value: 70, - con: 9 - }, - fallRogue: { - event: events.fall, - specialClass: 'rogue', - value: 80, - canBuy: () => { return true; }, - str: 8 - }, - fallWarrior: { - event: events.fall, - specialClass: 'warrior', - value: 70, - canBuy: () => { return true; }, - con: 7 - }, - fallHealer: { - event: events.fall, - specialClass: 'healer', - value: 70, - canBuy: () => { return true; }, - con: 9 - }, - winter2015Rogue: { - event: events.winter2015, - specialClass: 'rogue', - value: 80, - str: 8 - }, - winter2015Warrior: { - event: events.winter2015, - specialClass: 'warrior', - value: 70, - con: 7 - }, - winter2015Healer: { - event: events.winter2015, - specialClass: 'healer', - value: 70, - con: 9 - }, - spring2015Rogue: { - event: events.spring2015, - specialClass: 'rogue', - value: 80, - str: 8 - }, - spring2015Warrior: { - event: events.spring2015, - specialClass: 'warrior', - value: 70, - con: 7 - }, - spring2015Healer: { - event: events.spring2015, - specialClass: 'healer', - value: 70, - con: 9 - }, - summer2015Rogue: { - event: events.summer2015, - specialClass: 'rogue', - value: 80, - str: 8 - }, - summer2015Warrior: { - event: events.summer2015, - specialClass: 'warrior', - value: 70, - con: 7 - }, - summer2015Healer: { - event: events.summer2015, - specialClass: 'healer', - value: 70, - con: 9 - }, - fall2015Rogue: { - event: events.fall2015, - specialClass: 'rogue', - value: 80, - str: 8 - }, - fall2015Warrior: { - event: events.fall2015, - specialClass: 'warrior', - value: 70, - con: 7 - }, - fall2015Healer: { - event: events.fall2015, - specialClass: 'healer', - value: 70, - con: 9 - } -}; - -let weapon = { - 0: { - str: 20, - value: 150, - canOwn: (function(u) { - var ref; - return +((ref = u.backer) != null ? ref.tier : void 0) >= 70; - }) - }, - 1: { - notes: t('weaponSpecial1Notes', { - attrs: 6 - }), - str: 6, - per: 6, - con: 6, - int: 6, - value: 170, - canOwn: (function(u) { - var ref; - return +((ref = u.contributor) != null ? ref.level : void 0) >= 4; - }) - }, - 2: { - notes: t('weaponSpecial2Notes', { - attrs: 25 - }), - str: 25, - per: 25, - value: 200, - canOwn: (function(u) { - var ref; - return (+((ref = u.backer) != null ? ref.tier : void 0) >= 300) || (u.items.gear.owned.weapon_special_2 != null); - }) - }, - 3: { - notes: t('weaponSpecial3Notes', { - attrs: 17 - }), - str: 17, - int: 17, - con: 17, - value: 200, - canOwn: (function(u) { - var ref; - return (+((ref = u.backer) != null ? ref.tier : void 0) >= 300) || (u.items.gear.owned.weapon_special_3 != null); - }) - }, - critical: { - notes: t('weaponSpecialCriticalNotes', { - attrs: 40 - }), - str: 40, - per: 40, - value: 200, - canOwn: (function(u) { - var ref; - return !!((ref = u.contributor) != null ? ref.critical : void 0); - }) - }, - tridentOfCrashingTides: { - int: 15, - value: 130, - canOwn: (function(u) { - return u.items.gear.owned.weapon_special_tridentOfCrashingTides != null; - }) - }, - yeti: { - event: events.winter, - specialClass: 'warrior', - str: 15, - value: 90 - }, - ski: { - event: events.winter, - specialClass: 'rogue', - str: 8, - value: 90 - }, - candycane: { - event: events.winter, - specialClass: 'wizard', - twoHanded: true, - int: 15, - per: 7, - value: 160 - }, - snowflake: { - event: events.winter, - specialClass: 'healer', - int: 9, - value: 90 - }, - springRogue: { - event: events.spring, - specialClass: 'rogue', - value: 80, - str: 8 - }, - springWarrior: { - event: events.spring, - specialClass: 'warrior', - value: 90, - str: 15 - }, - springMage: { - event: events.spring, - specialClass: 'wizard', - twoHanded: true, - value: 160, - int: 15, - per: 7 - }, - springHealer: { - event: events.spring, - specialClass: 'healer', - value: 90, - int: 9 - }, - summerRogue: { - event: events.summer, - specialClass: 'rogue', - value: 80, - str: 8 - }, - summerWarrior: { - event: events.summer, - specialClass: 'warrior', - value: 90, - str: 15 - }, - summerMage: { - event: events.summer, - specialClass: 'wizard', - twoHanded: true, - value: 160, - int: 15, - per: 7 - }, - summerHealer: { - event: events.summer, - specialClass: 'healer', - value: 90, - int: 9 - }, - fallRogue: { - event: events.fall, - specialClass: 'rogue', - value: 80, - canBuy: () => { return true; }, - str: 8 - }, - fallWarrior: { - event: events.fall, - specialClass: 'warrior', - value: 90, - canBuy: () => { return true; }, - str: 15 - }, - fallMage: { - event: events.fall, - specialClass: 'wizard', - twoHanded: true, - value: 160, - canBuy: () => { return true; }, - int: 15, - per: 7 - }, - fallHealer: { - event: events.fall, - specialClass: 'healer', - value: 90, - canBuy: () => { return true; }, - int: 9 - }, - winter2015Rogue: { - event: events.winter2015, - specialClass: 'rogue', - value: 80, - str: 8 - }, - winter2015Warrior: { - event: events.winter2015, - specialClass: 'warrior', - value: 90, - str: 15 - }, - winter2015Mage: { - event: events.winter2015, - specialClass: 'wizard', - twoHanded: true, - value: 160, - int: 15, - per: 7 - }, - winter2015Healer: { - event: events.winter2015, - specialClass: 'healer', - value: 90, - int: 9 - }, - spring2015Rogue: { - event: events.spring2015, - specialClass: 'rogue', - value: 80, - str: 8 - }, - spring2015Warrior: { - event: events.spring2015, - specialClass: 'warrior', - value: 90, - str: 15 - }, - spring2015Mage: { - event: events.spring2015, - specialClass: 'wizard', - twoHanded: true, - value: 160, - int: 15, - per: 7 - }, - spring2015Healer: { - event: events.spring2015, - specialClass: 'healer', - value: 90, - int: 9 - }, - summer2015Rogue: { - event: events.summer2015, - specialClass: 'rogue', - value: 80, - str: 8 - }, - summer2015Warrior: { - event: events.summer2015, - specialClass: 'warrior', - value: 90, - str: 15 - }, - summer2015Mage: { - event: events.summer2015, - specialClass: 'wizard', - twoHanded: true, - value: 160, - int: 15, - per: 7 - }, - summer2015Healer: { - event: events.summer2015, - specialClass: 'healer', - value: 90, - int: 9 - }, - fall2015Rogue: { - event: events.fall2015, - specialClass: 'rogue', - value: 80, - str: 8 - }, - fall2015Warrior: { - event: events.fall2015, - specialClass: 'warrior', - value: 90, - str: 15 - }, - fall2015Mage: { - event: events.fall2015, - specialClass: 'wizard', - twoHanded: true, - value: 160, - int: 15, - per: 7 - }, - fall2015Healer: { - event: events.fall2015, - specialClass: 'healer', - value: 90, - int: 9 - } -}; - -let specialSet = { - armor: armor, - back: back, - body: body, - eyewear: eyewear, - head: head, - headAccessory: headAccessory, - shield: shield, - weapon: weapon, -}; - -setGearSetDefaults(specialSet, {setName: 'special'}); - -export default specialSet; diff --git a/common/script/src/content/gear/sets/warrior.js b/common/script/src/content/gear/sets/warrior.js deleted file mode 100644 index 2470f20a9c..0000000000 --- a/common/script/src/content/gear/sets/warrior.js +++ /dev/null @@ -1,46 +0,0 @@ -import {setGearSetDefaults} from '../../helpers'; - -let armor = { - 1: { con: 3, value: 30 }, - 2: { con: 5, value: 45 }, - 3: { con: 7, value: 65 }, - 4: { con: 9, value: 90 }, - 5: { con: 11, value: 120, last: true }, -}; - -let head = { - 1: { str: 2, value: 15 }, - 2: { str: 4, value: 25 }, - 3: { str: 6, value: 40 }, - 4: { str: 9, value: 60 }, - 5: { str: 12, value: 80, last: true }, -}; - -let shield = { - 1: { con: 2, value: 20 }, - 2: { con: 3, value: 35 }, - 3: { con: 5, value: 50 }, - 4: { con: 7, value: 70 }, - 5: { con: 9, value: 90, last: true }, -}; - -let weapon = { - 0: { value: 1 }, - 1: { str: 3, value: 20 }, - 2: { str: 6, value: 30 }, - 3: { str: 9, value: 45 }, - 4: { str: 12, value: 65 }, - 5: { str: 15, value: 90 }, - 6: { str: 18, value: 120, last: true }, -}; - -let warriorSet = { - armor: armor, - head: head, - shield: shield, - weapon: weapon, -}; - -setGearSetDefaults(warriorSet, {setName: 'warrior'}); - -export default warriorSet; diff --git a/common/script/src/content/gear/sets/wizard.js b/common/script/src/content/gear/sets/wizard.js deleted file mode 100644 index d113e85462..0000000000 --- a/common/script/src/content/gear/sets/wizard.js +++ /dev/null @@ -1,44 +0,0 @@ -import {setGearSetDefaults} from '../../helpers'; - -let armor = { - 1: { int: 2, value: 30 }, - 2: { int: 4, value: 45 }, - 3: { int: 6, value: 65 }, - 4: { int: 9, value: 90 }, - 5: { int: 12, value: 120, last: true }, -}; - -let head = { - 1: { per: 2, value: 15 }, - 2: { per: 3, value: 25 }, - 3: { per: 5, value: 40 }, - 4: { per: 7, value: 60 }, - 5: { per: 10, value: 80, last: true }, -}; - -let shield = { - // Wizard's weapons are two handed - // And thus do not have shields - // But the content structure still expects an object -}; - -let weapon = { - 0: { twoHanded: true, value: 0 }, - 1: { twoHanded: true, int: 3, per: 1, value: 30 }, - 2: { twoHanded: true, int: 6, per: 2, value: 50 }, - 3: { twoHanded: true, int: 9, per: 3, value: 80 }, - 4: { twoHanded: true, int: 12, per: 5, value: 120 }, - 5: { twoHanded: true, int: 15, per: 7, value: 160 }, - 6: { twoHanded: true, int: 18, per: 10, value: 200, last: true }, -}; - -let wizardSet = { - armor: armor, - head: head, - shield: shield, - weapon: weapon, -}; - -setGearSetDefaults(wizardSet, {setName: 'wizard'}); - -export default wizardSet; diff --git a/common/script/src/content/hatching-potions.js b/common/script/src/content/hatching-potions.js index 38d1fbcb60..feab00328e 100644 --- a/common/script/src/content/hatching-potions.js +++ b/common/script/src/content/hatching-potions.js @@ -43,6 +43,7 @@ let premiumPotions = { addlNotes: t('premiumPotionAddlNotes'), premium: true, limited: true, + canBuy: () => { return false }, }, }; diff --git a/common/script/src/content/item-list.js b/common/script/src/content/item-list.js deleted file mode 100644 index e56aec678a..0000000000 --- a/common/script/src/content/item-list.js +++ /dev/null @@ -1,56 +0,0 @@ -let itemList = { - 'weapon': { - localeKey: 'weapon', - isEquipment: true - }, - 'armor': { - localeKey: 'armor', - isEquipment: true - }, - 'head': { - localeKey: 'headgear', - isEquipment: true - }, - 'shield': { - localeKey: 'offhand', - isEquipment: true - }, - 'back': { - localeKey: 'back', - isEquipment: true - }, - 'body': { - localeKey: 'body', - isEquipment: true - }, - 'headAccessory': { - localeKey: 'headAccessory', - isEquipment: true - }, - 'eyewear': { - localeKey: 'eyewear', - isEquipment: true - }, - 'hatchingPotions': { - localeKey: 'hatchingPotion', - isEquipment: false - }, - 'eggs': { - localeKey: 'eggSingular', - isEquipment: false - }, - 'quests': { - localeKey: 'quest', - isEquipment: false - }, - 'food': { - localeKey: 'foodText', - isEquipment: false - }, - 'Saddle': { - localeKey: 'foodSaddleText', - isEquipment: false - } -}; - -export default itemList; diff --git a/common/script/src/content/quests/pet.js b/common/script/src/content/quests/pet.js index 865c6ab1c4..6ae4f7f8a5 100644 --- a/common/script/src/content/quests/pet.js +++ b/common/script/src/content/quests/pet.js @@ -325,6 +325,16 @@ let petQuests = { gp: 37, exp: 275, } + }, + frog: { + boss: { + hp: 300, + str: 1.5 + }, + drop: { + gp: 25, + exp: 125, + } } }; diff --git a/common/script/statHelpers.js b/common/script/statHelpers.js new file mode 100644 index 0000000000..9f92d506ba --- /dev/null +++ b/common/script/statHelpers.js @@ -0,0 +1,44 @@ +/* + ------------------------------------------------------ + Level cap + ------------------------------------------------------ + */ + +export const MAX_LEVEL = 100; + +export function capByLevel (lvl) { + if (lvl > MAX_LEVEL) { + return MAX_LEVEL; + } else { + return lvl; + } +} + +/* + ------------------------------------------------------ + Health cap + ------------------------------------------------------ + */ + +export const MAX_HEALTH = 50; + +/* + ------------------------------------------------------ + Scoring + ------------------------------------------------------ + */ + +export function toNextLevel (lvl) { + return Math.round((Math.pow(lvl, 2) * 0.25 + 10 * lvl + 139.75) / 10) * 10; +} + +/* + A hyperbola function that creates diminishing returns, so you can't go to infinite (eg, with Exp gain). + {max} The asymptote + {bonus} All the numbers combined for your point bonus (eg, task.value * user.stats.int * critChance, etc) + {halfway} (optional) the point at which the graph starts bending + */ + +export function diminishingReturns (bonus, max, halfway = max / 2) { + return max * (bonus / (bonus + halfway)); +} diff --git a/gulpfile.js b/gulpfile.js index 9e32600ef4..84da7d11a3 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -6,7 +6,7 @@ * directory, and it will automatically be included. */ -require('babel/register'); +require('babel-core/register'); if (process.env.NODE_ENV === 'production') { require('./tasks/gulp-newstuff'); diff --git a/keys/google/iap-live b/keys/google/iap-live index 69dc38136b..cc086655a1 100644 --- a/keys/google/iap-live +++ b/keys/google/iap-live @@ -1 +1 @@ -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk6EVccD7D6y5vLmsUxUXVYTMyByq+NjfTzjMBaKCk93fq8Ahn6Ipha1K4oBIvArUj3CsP5Tb/Yf6c6SrEsSnE3eqgKQgeq+fYyfIm+Fb+tFGTttLonZ2Sqemqeyx2PjOG2CVZBXj1+Zr7jb0ocMNYraYUTvklWnpcK6/5ZaZLLent1PGiU9l5jIfRAsxmJH/UpssgpFPnCs+8PRKUALkJATTfVCCF+PJef6mcKAafAArKUEo0lR2/NeaE62Wpii33DLuKDPfMqL3g4EHZTEVE1ezFl/3WPeLlxuQm38hZLpEfEYKp17qzplU+GmWIfjZt6OdtVdonlYxIxNAZLnWEQIDAQAB \ No newline at end of file +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnmbea0F4VJb93JnAyzEHXt0RMubikRn+nLhU6nRD6Wdt/utizmkfEca3HJlbrG2J1yB3DO8Js/hiVZiu4JdX9ApU9GDwXJxMjSCf+Y5XAV6SB/gtsnR1eFTRcNqroHUlN419xzWBcjMtlcCJ28QguG/vkLoumKDomVbqcUKKHycbQYtI+BZZ2fENeyIJRTQ7luvWX4kJ99vsTZTlQZ02aRAF6yE2lCGUpLSH3CoRaKrmsHB3NOJRDQj74Ulc038NQ86X9Jeb9+/D5gBZh/R6i9DX6ipNKAoSH5n+5TdBfId6UPMUhejiQH4OjoG2VyiP6FKRH07Q3XZ83seunoCeaQIDAQAB diff --git a/migrations/20151013_jackolanterns.js b/migrations/20151013_jackolanterns.js index 35da80c1cc..67ff0ac9a2 100644 --- a/migrations/20151013_jackolanterns.js +++ b/migrations/20151013_jackolanterns.js @@ -1,4 +1,4 @@ -var migrationName = 'new_stuff.js'; +var migrationName = '20151013_jackolanterns.js'; var authorName = 'Sabe'; // in case script author needs to know when their ... var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done diff --git a/migrations/20151021_usernames_emails_lowercase.js b/migrations/20151021_usernames_emails_lowercase.js new file mode 100644 index 0000000000..432d7eb650 --- /dev/null +++ b/migrations/20151021_usernames_emails_lowercase.js @@ -0,0 +1,63 @@ +/* + * Migrate email to lowerCase version and add auth.local.lowerCaseUsername email + */ + +var mongo = require('mongoskin'); +var async = require('async'); + +var dbserver = 'url'; +var dbname = 'dbname'; +var countUsers = 0; + +var db = mongo.db(dbserver + '/' + dbname + '?auto_reconnect'); +var dbUsers = db.collection('users'); + +console.log('Begins work on db'); + +function findUsers(gt){ + var query = {}; + if(gt) query._id = {$gt: gt}; + + console.log(query) + + dbUsers.find(query, { + fields: {_id: 1, auth: 1}, + limit: 10000, + sort: { + _id: 1 + } + }).toArray(function(err, users){ + if(err) throw err; + + var lastUser = null; + if(users.length === 10000){ + lastUser = users[users.length - 1]; + } + + async.eachLimit(users, 20, function(user, cb){ + countUsers++; + console.log('User: ', countUsers, user._id); + + var update = { + $set: {}; + }; + + if(user.auth && user.auth.local) { + if(user.auth.local.username) update['$set']['auth.local.lowerCaseUsername'] = user.auth.local.username.toLowerCase(); + if(user.auth.local.email) update['$set']['auth.local.email'] = user.auth.local.email.toLowerCase(); + } + + dbUsers.update({ + _id: user._id + }, update, cb); + }, function(err){ + if(err) throw err; + + if(lastUser && lastUser._id){ + findUsers(lastUser._id); + } + }); + }); +}; + +findUsers(); \ No newline at end of file diff --git a/migrations/20151105_tutorial_flags.js b/migrations/20151105_tutorial_flags.js new file mode 100644 index 0000000000..6af069965c --- /dev/null +++ b/migrations/20151105_tutorial_flags.js @@ -0,0 +1,63 @@ +var migrationName = '20151105_tutorial_flags_v1'; +var authorName = 'Alys'; // in case script author needs to know when their ... +var authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; //... own data is done + +/* + * set flags.tutorial.ios and flags.tutorial.main flags to true in preparation + * for the release of a new iOS tutorial + * + */ + +// var dbserver = 'localhost:27017' // FOR TEST DATABASE +var dbserver = 'alys:@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 fields = { +}; + + +var query = { + 'auth.timestamps.loggedin':{$gt:new Date('2015-10-20')} +}; + +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.'); + return displayData(); + } + count++; + + // var set = {'migration':migrationName, 'flags.tutorial.ios':true, 'flags.tutorial.main':true }; + var set = {'migration':migrationName, 'flags.tutorial.ios':{} }; + + 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/20151116_costume_contest_award.js b/migrations/20151116_costume_contest_award.js new file mode 100644 index 0000000000..25891f9215 --- /dev/null +++ b/migrations/20151116_costume_contest_award.js @@ -0,0 +1,102 @@ +var migrationName = '20151116_costume_contest.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 Costume Contest achievement to 2015 winners + */ + +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'); + +// specify a query to limit the affected users (empty for all users): +var query = { + _id: { + $in: [ + 'e411dab3-a4ca-414d-bdbd-b6940b3bdeb3', + '35ced5cc-c33a-45c8-93dc-16000ee66fde', + 'ab3f0549-7247-4fd5-975b-efcff98c79c3', + 'b1261fd2-eb25-46b4-97a9-ae7a0dc8a131', + '1f27893f-3808-4724-9725-f46dab93faca', + '216a0c23-6afd-4a5e-b434-d386a10862a2', + '2d6ef231-50b4-4a22-90e7-45eb97147a2c', + '98b8cf4f-89bd-4b0a-988d-02629a217232', + 'c5183dfa-c741-43ce-935e-c6d89b41a030', + '262a7afb-6b57-4d81-88e0-80d2e9f6cbdc', + '33991e0a-de55-4986-ac81-af78491a84de', + '7adf6ada-3c05-4054-b5df-fa7d49d3b9eb', + '235a1cbd-48c5-41b1-afb4-59d2f8645c57', + 'b7617a61-188b-4332-bf4d-32268fa77f2b', + '672c1ce0-9f47-44f0-a3f3-8cc3c6c5a9cb', + 'd0a3217a-7b92-48d6-b39a-b1b1be96702e', + '5ef910dc-1d22-47d9-aa38-a60132c60679', + '370a44c8-e94a-4a2c-91f2-33166926db1f', + '1b0b3ef3-28bd-4046-a49b-e1c83e281baf', + '75b93321-66b9-49bd-9076-052499c1d2bf', + 'd97516e4-81d0-4f60-bf03-95f7330925ab', + '3e13cc79-de38-420d-822e-9e9da309ce6b', + '0e471dc1-ecb0-4388-a891-b873a237d2cf', + 'ca3da398-4f73-4304-b838-af3669ed4cbb', + '44cdf105-8bda-4197-9d1a-1bcb83b4dc84', + '5419830c-b837-4573-ae82-4718ab95b7f1', + 'ac6fbe37-b0dc-40d8-ba14-77dde66fbfa8', + '8789ba18-a498-46b9-b367-3b929a0acb94', + '52fce1a9-9b0a-4e26-95dc-adc12f52e752', + '21bf71ac-399c-470b-abe0-cc49a03b6a8b', + 'f1618ce2-552e-4f23-bc76-e73d63ebedd0', + '4cc0c749-d943-4090-b529-42bc665b7244', + 'e259682e-cb5c-4d94-b472-ceedc66d7484', + 'fa197a4b-e065-4551-803a-c8a5b9970f9d' + ] + } +}; + +// specify fields we are interested in to limit retrieved data (empty if we're not reading data): +var fields = { +}; + +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.'); + return displayData(); + } + count++; + + // specify user data to change: + var set = {'migration':migrationName}; + var inc = {'achievements.costumeContests':1}; + + dbUsers.update({_id:user._id}, {$set:set}); + dbUsers.update({_id:user._id}, {$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/20151116_costume_contest_to_number.js b/migrations/20151116_costume_contest_to_number.js new file mode 100644 index 0000000000..7121e9bc31 --- /dev/null +++ b/migrations/20151116_costume_contest_to_number.js @@ -0,0 +1,64 @@ +var migrationName = '20151116_costume_contest_to_number.js'; +var authorName = 'Sabe'; // in case script author needs to know when their ... +var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done + +/* + * Change Costume Contest achievement from Boolean to Number, so people can win repeatedly + */ + +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'); + +// specify a query to limit the affected users (empty for all users): +var query = { + 'achievements.costumeContest':true +}; + +// specify fields we are interested in to limit retrieved data (empty if we're not reading data): +var fields = { + 'achievements.costumeContest':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.'); + return displayData(); + } + count++; + + // specify user data to change: + var set = {'achievements.costumeContests':1}; + + 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/20151125_turkey_ladder.js b/migrations/20151125_turkey_ladder.js new file mode 100644 index 0000000000..e028b4f882 --- /dev/null +++ b/migrations/20151125_turkey_ladder.js @@ -0,0 +1,71 @@ +var migrationName = '20151125_turkey_ladder.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 Gilded Turkey pet to Turkey mount owners, Turkey Mount if they only have Turkey Pet, + * and Turkey Pet otherwise + */ + +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'); + +// specify a query to limit the affected users (empty for all users): +var query = { +}; + +// specify fields we are interested in to limit retrieved data (empty if we're not reading data): +var fields = { + 'items.pets.Turkey-Base': 1, + 'items.mounts.Turkey-Base': 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.'); + return displayData(); + } + count++; + + // specify user data to change: + var set = {}; + if (user.items.mounts['Turkey-Base']) { + set = {'migration':migrationName, 'items.pets.Turkey-Gilded':5}; + } else if (user.items.pets['Turkey-Base']) { + set = {'migration':migrationName, 'items.mounts.Turkey-Base':true}; + } else { + set = {'migration':migrationName, 'items.pets.Turkey-Base':5}; + } + + 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 48f2009b15..1feef7de2a 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_201509','armor_mystery_201509'] + $each:['head_mystery_201511','armor_mystery_201511'] } } }; @@ -24,9 +24,15 @@ var update = { if (_id) { // singular (missing items) - db.users.update({_id:_id}, update); + db.users.update({_id: _id}, update); } else { // multiple (once @ start of event) - db.users.update({'purchased.plan.customerId':{$ne:null}}, update, {multi:true}); + db.users.update({ + 'purchased.plan.customerId': { $ne: null }, + $or: [ + { 'purchased.plan.dateTerminated': { $gte: new Date() } }, + { 'purchased.plan.dateTerminated': { $exists: false } }, + { 'purchased.plan.dateTerminated': { $eq: null } } + ] + }, update, { multi: true }); } - diff --git a/newrelic.js b/newrelic.js deleted file mode 100644 index 682f608e42..0000000000 --- a/newrelic.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * New Relic agent configuration. - * - * See lib/config.defaults.js in the agent distribution for a more complete - * description of configuration variables and their potential values. - */ -var nconf = require('nconf') -exports.config = { - /** - * Array of application names. - */ - app_name : ['HabitRPG'], - /** - * Your New Relic license key. - */ - license_key : nconf.get('NEW_RELIC_LICENSE_KEY'), - logging : { - /** - * Level at which to log. 'trace' is most useful to New Relic when diagnosing - * issues with the agent, 'info' and higher will impose the least overhead on - * production applications. - */ - level : 'warning' - } -}; diff --git a/package.json b/package.json index 5893a7d523..5c0048a131 100644 --- a/package.json +++ b/package.json @@ -5,15 +5,13 @@ "main": "./website/src/server.js", "dependencies": { "amazon-payments": "0.0.4", - "amplitude": "^1.0.6", + "amplitude": "^2.0.3", "async": "~0.9.0", "aws-sdk": "^2.0.25", - "babel": "^5.5.4", - "gulp-babel": "^5.2.1", + "babel-core": "^5.8.34", + "babelify": "^6.x.x", "bower": "~1.3.12", - "browserify": "~3.30.2", - "coffee-script": "1.6.x", - "coffeeify": "0.6.0", + "browserify": "~12.0.1", "connect-ratelimit": "0.0.7", "coupon-code": "~0.3.0", "domain-middleware": "~0.1.0", @@ -23,7 +21,6 @@ "firebase-token-generator": "^2.0.0", "glob": "^4.3.5", "grunt": "~0.4.1", - "grunt-browserify": "^3.3.0", "grunt-cli": "~0.1.9", "grunt-contrib-clean": "~0.6.0", "grunt-contrib-copy": "~0.6.0", @@ -32,13 +29,14 @@ "grunt-contrib-uglify": "~0.6.0", "grunt-contrib-watch": "~0.6.1", "grunt-hashres": "~0.4.1", - "grunt-karma": "~0.6.2", + "grunt-karma": "~0.12.1", "gulp": "^3.9.0", - "gulp-clean": "^0.3.1", "gulp-eslint": "^1.0.0", "gulp-grunt": "^0.5.2", "gulp-imagemin": "^2.3.0", "gulp-nodemon": "^2.0.4", + "gulp-sourcemaps": "^1.6.0", + "gulp-uglify": "^1.4.2", "gulp.spritesmith": "^4.1.0", "icalendar": "lefnire/node-icalendar#e06da0e55901f0ba940dfadc42c158ed0b1fead9", "image-size": "~0.3.2", @@ -56,7 +54,7 @@ "mongoose": "~3.8.23", "mongoose-id-autoinc": "~2013.7.14-4", "nconf": "~0.6.9", - "newrelic": "~1.11.2", + "newrelic": "~1.23.0", "nib": "~1.0.1", "nodemailer": "~0.5.2", "pageres": "^1.0.1", @@ -72,22 +70,20 @@ "request": "~2.44.0", "s3-upload-stream": "^1.0.6", "stripe": "*", - "superagent": "~0.15.7", + "superagent": "~1.4.0", "swagger-node-express": "lefnire/swagger-node-express#habitrpg", "universal-analytics": "~0.3.2", "validator": "~3.19.0", + "vinyl-buffer": "^1.0.0", + "vinyl-source-stream": "^1.1.0", "winston": "~0.8.0", "winston-mail": "~0.2.9", "winston-newrelic": "~0.1.4" }, "private": true, - "subdomain": "habitrpg", - "domains": [ - "habitrpg.com", - "www.habitrpg.com" - ], "engines": { - "node": "0.10.x" + "node": "^0.10.40", + "npm": "^2.14.9" }, "scripts": { "test": "gulp test", @@ -97,37 +93,35 @@ "coverage": "COVERAGE=true mocha --require register-handlers.js --reporter html-cov > coverage.html; open coverage.html" }, "devDependencies": { - "chai": "^2.3.0", - "coffee-coverage": "~0.4.2", + "chai": "^3.4.0", + "chai-as-promised": "^5.1.0", "coveralls": "^2.11.2", "csv": "~0.3.6", "deep-diff": "~0.1.4", + "eslint": "^1.9.0", + "eslint-plugin-mocha": "^1.1.0", "event-stream": "^3.2.2", "expect.js": "~0.2.0", "istanbul": "^0.3.14", - "karma": "~0.10.2", - "karma-chai-plugins": "~0.1.0", - "karma-chrome-launcher": "~0.1.0", - "karma-coffee-preprocessor": "~0.1.0", - "karma-coverage": "^0.3.1", - "karma-firefox-launcher": "~0.1.0", - "karma-html2js-preprocessor": "~0.1.0", - "karma-jasmine": "~0.1.3", - "karma-mocha": "0.1.3", - "karma-mocha-reporter": "^1.0.2", - "karma-ng-html2js-preprocessor": "~0.1.0", - "karma-phantomjs-launcher": "~0.1.0", - "karma-requirejs": "~0.2.0", - "karma-script-launcher": "~0.1.0", + "karma": "~0.13.15", + "karma-chai-plugins": "~0.6.0", + "karma-coverage": "^0.5.3", + "karma-mocha": "^0.2.0", + "karma-mocha-reporter": "^1.1.1", + "karma-phantomjs-launcher": "~0.2.1", "lcov-result-merger": "^1.0.2", - "mocha": "~1.12.1", + "mocha": "^2.3.3", + "mongodb": "^2.0.46", "mongoskin": "~0.6.1", - "protractor": "~2.0.0", + "protractor": "~2.5.1", "rewire": "^2.3.3", + "rimraf": "^2.4.3", + "run-sequence": "^1.1.4", "shelljs": "^0.4.0", - "sinon": "1.15.4", - "sinon-chai": "^2.7.0", - "superagent-defaults": "~0.1.5", + "sinon": "^1.17.2", + "sinon-chai": "^2.8.0", + "superagent-defaults": "^0.1.13", + "uuid": "^2.0.1", "vinyl-source-stream": "^1.0.0", "vinyl-transform": "^1.0.0" } diff --git a/protractor.conf.js b/protractor.conf.js index ab91fc074b..0f810a8915 100644 --- a/protractor.conf.js +++ b/protractor.conf.js @@ -14,7 +14,7 @@ exports.config = { // A base URL for your application under test. Calls to protractor.get() // with relative paths will be prepended with this. - baseUrl: 'http://localhost:3001', + baseUrl: 'http://localhost:3003', // Options to be passed to Jasmine-node. jasmineNodeOpts: { diff --git a/register-handlers.js b/register-handlers.js deleted file mode 100644 index 7a6c57a91a..0000000000 --- a/register-handlers.js +++ /dev/null @@ -1,7 +0,0 @@ -if(process.env.COVERAGE) { - require('coffee-coverage').register({ - path: 'abbr', - basePath: __dirname + '/common/script', - initAll: true, - }); -} diff --git a/tasks/gulp-babelify.js b/tasks/gulp-babelify.js index a77be47ecc..7516594fee 100644 --- a/tasks/gulp-babelify.js +++ b/tasks/gulp-babelify.js @@ -1,16 +1,31 @@ import gulp from 'gulp'; -import babel from 'gulp-babel'; +import browserify from 'browserify'; +import source from 'vinyl-source-stream'; +import buffer from 'vinyl-buffer'; +import uglify from 'gulp-uglify'; +import sourcemaps from 'gulp-sourcemaps'; +import babel from 'babelify'; -const ES2015_SOURCE = 'common/script/src/**/*.js'; -const ES2015_DIST = 'common/dist/scripts/'; +gulp.task('browserify', function () { + let bundler = browserify({ + entries: './common/index.js', + debug: true, + transform: [[babel, { compact: false }]], + }); -gulp.task('babel:common', () => { - return gulp.src(ES2015_SOURCE) - .pipe(babel()) - .pipe(gulp.dest(ES2015_DIST)); + return bundler.bundle() + .pipe(source('habitrpg-shared.js')) + .pipe(buffer()) + .pipe(sourcemaps.init({loadMaps: true})) + .pipe(uglify()) + .on('error', function (err) { + console.error(err); + this.emit('end'); + }) + .pipe(sourcemaps.write('./')) + .pipe(gulp.dest('./common/dist/scripts/')); }); -gulp.task('babel:common:watch', () => { - gulp.watch([ES2015_SOURCE], ['babel:common']); +gulp.task('browserify:watch', () => { + gulp.watch('./common/script/**/*.js', ['browserify']); }); - diff --git a/tasks/gulp-build.js b/tasks/gulp-build.js index 8b0b752ca2..599d577b10 100644 --- a/tasks/gulp-build.js +++ b/tasks/gulp-build.js @@ -9,7 +9,7 @@ gulp.task('build', () => { } }); -gulp.task('build:dev', ['babel:common', 'prepare:staticNewStuff'], (done) => { +gulp.task('build:dev', ['browserify', 'prepare:staticNewStuff'], (done) => { gulp.start('grunt-build:dev', done); }); @@ -17,6 +17,6 @@ gulp.task('build:dev:watch', ['build:dev'], () => { gulp.watch(['website/public/**/*.styl', 'common/script/*']); }); -gulp.task('build:prod', ['babel:common', 'prepare:staticNewStuff'], (done) => { +gulp.task('build:prod', ['browserify', 'prepare:staticNewStuff'], (done) => { gulp.start('grunt-build:prod', done); }); diff --git a/tasks/gulp-console.js b/tasks/gulp-console.js index 5b98853845..07512c6357 100644 --- a/tasks/gulp-console.js +++ b/tasks/gulp-console.js @@ -1,10 +1,8 @@ -import 'coffee-script'; - import mongoose from 'mongoose'; import autoinc from 'mongoose-id-autoinc'; -import logging from '../website/src/logging'; +import logging from '../website/src/libs/logging'; import nconf from 'nconf'; -import utils from '../website/src/utils'; +import utils from '../website/src/libs/utils'; import repl from 'repl'; import gulp from 'gulp'; diff --git a/tasks/gulp-eslint.js b/tasks/gulp-eslint.js index ec8866c4dc..83930556c7 100644 --- a/tasks/gulp-eslint.js +++ b/tasks/gulp-eslint.js @@ -1,45 +1,79 @@ import gulp from 'gulp'; import eslint from 'gulp-eslint'; -import _ from 'lodash'; -// TODO remove once we upgrade to lodash 3 -const defaultsDeep = _.partialRight(_.merge, _.defaults); +const SERVER_FILES = [ + './website/src/**/api-v3/**/*.js', + // Comment these out in develop, uncomment them in api-v3 + // './website/src/models/user.js', + // './website/src/server.js' +]; +const COMMON_FILES = [ + './common/script/**/*.js', + // @TODO remove these negations as the files are converted over. + '!./common/script/index.js', + '!./common/script/content/index.js', + '!./common/script/src/**/*.js', + '!./common/script/public/**/*.js', +]; +const TEST_FILES = [ + './test/**/*.js', + // @TODO remove these negations as the test files are cleaned up. + '!./test/api-legacy/**/*', + '!./test/api/**/*', + '!./test/common/simulations/**/*', + '!./test/content/**/*', + '!./test/e2e/**/*', + '!./test/server_side/**/*', + '!./test/spec/**/*', +]; -const shared = { - rules: { - indent: [2, 2], - quotes: [2, 'single'], - 'linebreak-style': [2, 'unix'], - semi: [2, 'always'] - }, - extends: 'eslint:recommended', - env: { - es6: true - } -}; - -gulp.task('lint:client', () => { - // Ignore .coffee files - return gulp.src(['./website/public/js/**/*.js']) - .pipe(eslint(defaultsDeep({ - env: { - node: true - } - }, shared))) +let linter = (src, options) => { + return gulp + .src(src) + .pipe(eslint(options)) .pipe(eslint.format()) .pipe(eslint.failAfterError()); -}); +} +// TODO lint client +// TDOO separate linting cong between +// TODO lint gulp tasks, tests, ...? +// TODO what about prefer-const rule? +// TODO remove estraverse dependency once https://github.com/adametry/gulp-eslint/issues/117 sorted out gulp.task('lint:server', () => { - // Ignore .coffee files - return gulp.src(['./website/src/**/*.js']) - .pipe(eslint(defaultsDeep({ - env: { - browser: true - } - }, shared))) - .pipe(eslint.format()) - .pipe(eslint.failAfterError()); + return linter(SERVER_FILES); }); -gulp.task('lint', ['lint:server', 'lint:client']); \ No newline at end of file +gulp.task('lint:common', () => { + return linter(COMMON_FILES); +}); + +gulp.task('lint:tests', () => { + let options = { + rules: { + 'max-nested-callbacks': 0, + 'no-unused-expressions': 0, + 'mocha/no-exclusive-tests': 2, + 'mocha/no-global-tests': 2, + 'mocha/handle-done-callback': 2, + }, + globals: { + 'expect': true, + '_': true, + 'sinon': true, + }, + plugins: [ 'mocha' ], + }; + + return linter(TEST_FILES, options); +}); + +gulp.task('lint', ['lint:server', 'lint:common', 'lint:tests']); + +gulp.task('lint:watch', () => { + gulp.watch([ + SERVER_FILES, + COMMON_FILES, + TEST_FILES, + ], ['lint']); +}); diff --git a/tasks/gulp-sprites.js b/tasks/gulp-sprites.js index a5777af9ce..18c289f47c 100644 --- a/tasks/gulp-sprites.js +++ b/tasks/gulp-sprites.js @@ -1,7 +1,7 @@ import gulp from 'gulp'; import imagemin from 'gulp-imagemin'; import spritesmith from 'gulp.spritesmith'; -import clean from 'gulp-clean'; +import clean from 'rimraf'; import sizeOf from 'image-size'; import mergeStream from 'merge-stream'; import {basename} from 'path'; @@ -25,10 +25,7 @@ gulp.task('sprites:largeSprites', () => { }); gulp.task('sprites:clean', (done) => { - gulp.src(`${DIST_PATH}spritesmith*`) - .pipe(clean()); - - done(); + clean(`${DIST_PATH}spritesmith*`, done); }); gulp.task('sprites:checkCompiledDimensions', ['sprites:main', 'sprites:largeSprites'], () => { diff --git a/tasks/gulp-start.js b/tasks/gulp-start.js index 5c33ae9293..7cb842af00 100644 --- a/tasks/gulp-start.js +++ b/tasks/gulp-start.js @@ -8,6 +8,10 @@ gulp.task('run:dev', ['nodemon', 'build:dev:watch']); gulp.task('nodemon', () => { nodemon({ script: pkg.main, - ignore: ['website/public/*', 'website/views/*'] + ignore: [ + 'website/public/*', + 'website/views/*', + 'common/dist/script/content/*', + ] }); }); diff --git a/tasks/gulp-tests.js b/tasks/gulp-tests.js index 881d4559d9..c553fdcd3f 100644 --- a/tasks/gulp-tests.js +++ b/tasks/gulp-tests.js @@ -1,24 +1,32 @@ -import { pipe, awaitPort, kill } from './taskHelper'; +import { + pipe, + awaitPort, + kill, + runMochaTests, +} from './taskHelper'; import { server as karma } from 'karma'; import mongoose from 'mongoose'; import { exec } from 'child_process'; import psTree from 'ps-tree'; import gulp from 'gulp'; import Q from 'q'; +import runSequence from 'run-sequence'; -const TEST_SERVER_PORT = 3001 +const TEST_SERVER_PORT = 3003 const TEST_DB = 'habitrpg_test' +let server; const TEST_DB_URI = `mongodb://localhost/${TEST_DB}` -const API_TEST_COMMAND = 'mocha test/api'; +const API_V2_TEST_COMMAND = 'mocha test/api/v2 --recursive'; +const LEGACY_API_TEST_COMMAND = 'mocha test/api-legacy'; const COMMON_TEST_COMMAND = 'mocha test/common'; -const CONTENT_TEST_COMMAND = 'mocha test/content --opts test/content/mocha.content.opts'; +const CONTENT_TEST_COMMAND = 'mocha test/content'; const CONTENT_OPTIONS = {maxBuffer: 1024 * 500}; const KARMA_TEST_COMMAND = 'karma start'; const SERVER_SIDE_TEST_COMMAND = 'mocha test/server_side'; -const INSTANBUL_TEST_COMMAND = `istanbul cover -i "website/src/**" --dir coverage/api $(npm bin)/${API_TEST_COMMAND}`; +const ISTANBUL_TEST_COMMAND = `istanbul cover -i "website/src/**" --dir coverage/api ./node_modules/.bin/${LEGACY_API_TEST_COMMAND}`; /* Helper methods for reporting test summary */ let testResults = []; @@ -31,14 +39,31 @@ let testBin = (string) => { return `NODE_ENV=testing ./node_modules/.bin/${string}`; }; +gulp.task('test:nodemon', (done) => { + process.env.PORT = TEST_SERVER_PORT; + process.env.NODE_DB_URI=TEST_DB_URI; + + runSequence('nodemon') +}); + gulp.task('test:prepare:mongo', (cb) => { - mongoose.connect(TEST_DB_URI, () => { + mongoose.connect(TEST_DB_URI, (err) => { + if (err) return cb(`Unable to connect to mongo database. Are you sure it's running? \n\n${err}`); mongoose.connection.db.dropDatabase(); mongoose.connection.close(); cb(); }); }); +gulp.task('test:prepare:server', ['test:prepare:mongo'], () => { + if (!server) { + server = exec(`NODE_ENV="TESTING" NODE_DB_URI="${TEST_DB_URI}" PORT="${TEST_SERVER_PORT}" node ./website/src/server.js`, (error, stdout, stderr) => { + if (error) { throw `Problem with the server: ${error}`; } + if (stderr) { console.error(stderr); } + }); + } +}); + gulp.task('test:prepare:build', (cb) => { exec(testBin('grunt build:test'), cb); }); @@ -78,7 +103,7 @@ gulp.task('test:common:safe', ['test:prepare:build'], (cb) => { testResults.push({ suite: 'Common Specs\t', pass: testCount(stdout, /(\d+) passing/), - fail: testCount(stderr, /(\d+) failing/), + fail: testCount(stdout, /(\d+) failing/), pend: testCount(stdout, /(\d+) pending/) }); cb(); @@ -114,7 +139,7 @@ gulp.task('test:content:safe', ['test:prepare:build'], (cb) => { testResults.push({ suite: 'Content Specs\t', pass: testCount(stdout, /(\d+) passing/), - fail: testCount(stderr, /(\d+) failing/), + fail: testCount(stdout, /(\d+) failing/), pend: testCount(stdout, /(\d+) pending/) }); cb(); @@ -140,7 +165,7 @@ gulp.task('test:server_side:safe', ['test:prepare:build'], (cb) => { testResults.push({ suite: 'Server Side Specs', pass: testCount(stdout, /(\d+) passing/), - fail: testCount(stderr, /(\d+) failing/), + fail: testCount(stdout, /(\d+) failing/), pend: testCount(stdout, /(\d+) pending/) }); cb(); @@ -149,9 +174,9 @@ gulp.task('test:server_side:safe', ['test:prepare:build'], (cb) => { pipe(runner); }); -gulp.task('test:api', ['test:prepare:mongo'], (cb) => { +gulp.task('test:api-legacy', ['test:prepare:mongo'], (cb) => { let runner = exec( - testBin(INSTANBUL_TEST_COMMAND), + testBin(ISTANBUL_TEST_COMMAND), (err, stdout, stderr) => { cb(err); } @@ -159,14 +184,14 @@ gulp.task('test:api', ['test:prepare:mongo'], (cb) => { pipe(runner); }); -gulp.task('test:api:safe', ['test:prepare:mongo'], (cb) => { +gulp.task('test:api-legacy:safe', ['test:prepare:mongo'], (cb) => { let runner = exec( - testBin(INSTANBUL_TEST_COMMAND), + testBin(ISTANBUL_TEST_COMMAND), (err, stdout, stderr) => { testResults.push({ - suite: 'API Specs\t', + suite: 'API (legacy) Specs', pass: testCount(stdout, /(\d+) passing/), - fail: testCount(stderr, /(\d+) failing/), + fail: testCount(stdout, /(\d+) failing/), pend: testCount(stdout, /(\d+) pending/) }); cb(); @@ -175,15 +200,15 @@ gulp.task('test:api:safe', ['test:prepare:mongo'], (cb) => { pipe(runner); }); -gulp.task('test:api:clean', (cb) => { - pipe(exec(testBin(API_TEST_COMMAND), () => cb())); +gulp.task('test:api-legacy:clean', (cb) => { + pipe(exec(testBin(LEGACY_API_TEST_COMMAND), () => cb())); }); -gulp.task('test:api:watch', [ +gulp.task('test:api-legacy:watch', [ 'test:prepare:mongo', - 'test:api:clean' + 'test:api-legacy:clean' ], () => { - gulp.watch(['website/src/**', 'test/api/**'], ['test:api:clean']); + gulp.watch(['website/src/**', 'test/api-legacy/**'], ['test:api-legacy:clean']); }); gulp.task('test:karma', ['test:prepare:build'], (cb) => { @@ -222,15 +247,15 @@ gulp.task('test:karma:safe', ['test:prepare:build'], (cb) => { pipe(runner); }); -gulp.task('test:e2e', ['test:prepare'], (cb) => { +gulp.task('test:e2e', ['test:prepare', 'test:prepare:server'], (cb) => { let support = [ 'Xvfb :99 -screen 0 1024x768x24 -extension RANDR', - `NODE_DB_URI="${TEST_DB_URI}" PORT="${TEST_SERVER_PORT}" node ./website/src/server.js`, './node_modules/protractor/bin/webdriver-manager start', ].map(exec); + support.push(server); Q.all([ - awaitPort(3001), + awaitPort(TEST_SERVER_PORT), awaitPort(4444) ]).then(() => { let runner = exec( @@ -247,15 +272,14 @@ gulp.task('test:e2e', ['test:prepare'], (cb) => { }); }); -gulp.task('test:e2e:safe', ['test:prepare'], (cb) => { +gulp.task('test:e2e:safe', ['test:prepare', 'test:prepare:server'], (cb) => { let support = [ 'Xvfb :99 -screen 0 1024x768x24 -extension RANDR', - `NODE_DB_URI="${TEST_DB_URI}" PORT="${TEST_SERVER_PORT}" node ./website/src/server.js`, './node_modules/protractor/bin/webdriver-manager start', ].map(exec); Q.all([ - awaitPort(3001), + awaitPort(TEST_SERVER_PORT), awaitPort(4444) ]).then(() => { let runner = exec( @@ -279,14 +303,50 @@ gulp.task('test:e2e:safe', ['test:prepare'], (cb) => { }); }); -gulp.task('test', [ +gulp.task('test:api-v2', ['test:prepare:server'], (done) => { + + 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/src/**', '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 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( + 'lint', + 'test:e2e:safe', 'test:common:safe', - 'test:content:safe', - 'test:server_side:safe', + // 'test:content:safe', + // 'test:server_side:safe', 'test:karma:safe', - 'test:api:safe', - 'test:e2e:safe' -], () => { + 'test:api-legacy:safe', + 'test:api-v2:safe', + done); +}); + +gulp.task('test', ['test:all'], () => { let totals = [0,0,0]; console.log('\n\x1b[36m\x1b[4mHabitica Test Summary\x1b[0m\n'); @@ -309,8 +369,13 @@ gulp.task('test', [ `\x1b[36mPending: ${totals[2]}\t` ); - if (totals[1] > 0) throw "ERROR: There are failing tests!" - else { + 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(); } }); diff --git a/tasks/taskHelper.js b/tasks/taskHelper.js index a303421d0f..cafaa25439 100644 --- a/tasks/taskHelper.js +++ b/tasks/taskHelper.js @@ -4,6 +4,9 @@ import nconf from 'nconf'; import net from 'net'; import Q from 'q'; import { post } from 'superagent'; +import { sync as glob } from 'glob'; +import Mocha from 'mocha'; +import { resolve } from 'path'; /* * Get access to configruable values @@ -91,3 +94,23 @@ export function postToSlack(msg, config={}) { if (err) console.error('Unable to post to slack', err); }); } + +export function runMochaTests(files, server, cb) { + require('../test/helpers/globals.helper'); + + let mocha = new Mocha({reporter: 'spec'}); + let tests = glob(files); + + tests.forEach((test) => { + delete require.cache[resolve(test)]; + mocha.addFile(test); + }); + + mocha.run((numberOfFailures) => { + if (!process.env.RUN_INTEGRATION_TEST_FOREVER) { + if (server) kill(server); + process.exit(numberOfFailures); + } + cb(); + }); +} diff --git a/test/api-legacy/README.md b/test/api-legacy/README.md new file mode 100644 index 0000000000..9157af554d --- /dev/null +++ b/test/api-legacy/README.md @@ -0,0 +1,5 @@ +# 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 new file mode 100644 index 0000000000..9e61773211 --- /dev/null +++ b/test/api-legacy/api-helper.js @@ -0,0 +1,89 @@ +var path, superagentDefaults; + +superagentDefaults = require("superagent-defaults"); + +global.request = superagentDefaults(); + +global.mongoose = require("mongoose"); + +global.moment = require("moment"); + +global.async = require("async"); + +global._ = require("lodash"); + +global.shared = require("../../common"); + +global.User = require("../../website/src/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 new file mode 100644 index 0000000000..2f264655ef --- /dev/null +++ b/test/api-legacy/challenges.js @@ -0,0 +1,412 @@ +var Challenge, Group, app; + +app = require("../../website/src/server"); + +Group = require("../../website/src/models/group").model; + +Challenge = require("../../website/src/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 new file mode 100644 index 0000000000..89b32b0c54 --- /dev/null +++ b/test/api-legacy/chat.js @@ -0,0 +1,71 @@ +var Group, app, diff; + +diff = require("deep-diff"); + +Group = require("../../website/src/models/group").model; + +app = require("../../website/src/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 new file mode 100644 index 0000000000..af315c549c --- /dev/null +++ b/test/api-legacy/coupons.js @@ -0,0 +1,218 @@ +var Coupon, app, makeSudoUser; + +app = require("../../website/src/server"); + +Coupon = require("../../website/src/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) { + return makeSudoUser(user, done); + }); + return it("generates coupons", function(done) { + var queries; + queries = '?count=10'; + return request.post(baseURL + '/coupons/generate/wondercon' + queries).end(function(err, res) { + expectCode(res, 200); + return Coupon.find({ + event: 'wondercon' + }, function(err, _coupons) { + coupons = _coupons; + expect(coupons.length).to.equal(10); + _(coupons).each(function(c) { + return expect(c.event).to.equal('wondercon'); + }); + return 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); + }); + 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); + }); + _(secondHalf).each(function(c) { + return expect(codes).to.not.contain(c._id); + }); + 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); + }); + _(secondHalf).each(function(c) { + return expect(codes).to.contain(c._id); + }); + 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; + } + }); + }; + 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 new file mode 100644 index 0000000000..d4182e437c --- /dev/null +++ b/test/api-legacy/inAppPurchases.js @@ -0,0 +1,367 @@ +var app, iapMock, inApp, rewire, sinon; + +app = require('../../website/src/server'); + +rewire = require('rewire'); + +sinon = require('sinon'); + +inApp = rewire('../../website/src/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 new file mode 100644 index 0000000000..8ea8188713 --- /dev/null +++ b/test/api-legacy/party.js @@ -0,0 +1,372 @@ +var Group, app, diff; + +diff = require("deep-diff"); + +Group = require("../../website/src/models/group").model; + +app = require("../../website/src/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 new file mode 100644 index 0000000000..ce3d9672f8 --- /dev/null +++ b/test/api-legacy/pushNotifications.js @@ -0,0 +1,430 @@ +var app, rewire, sinon; + +app = require("../../website/src/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/src/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/src/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/src/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/src/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 new file mode 100644 index 0000000000..8c6906acfb --- /dev/null +++ b/test/api-legacy/score.js @@ -0,0 +1,142 @@ +require("../../website/src/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 new file mode 100644 index 0000000000..9d8624cb73 --- /dev/null +++ b/test/api-legacy/subscriptions.js @@ -0,0 +1,50 @@ +var app, payments; + +payments = require("../../website/src/controllers/payments"); + +app = require("../../website/src/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 new file mode 100644 index 0000000000..5285847fd1 --- /dev/null +++ b/test/api-legacy/todos.js @@ -0,0 +1,87 @@ +require("../../website/src/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/README.md b/test/api/README.md deleted file mode 100644 index 2f3dc40681..0000000000 --- a/test/api/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# API Tests - -Our API tests are written in [coffeescript](http://coffeescript.org/) using the [Mocha testing framework](http://mochajs.org/). - -There's a variety of ways to run the tests: - -```bash -# Individually -mocha test/api/name_of_test.coffee -# The entire collection of api tests -mocha test/api -# As part of the whole test suite -npm test -``` - -### Modules - -Some modules are declared in the [api-helper.coffee](api-helper.coffee) file for use in any of the api tests: - -* `moment` - time manipulation -* `async` - run async processes, good for before blocks -* `lodash (_)` - many utilities -* `shared` - generate uuids -* `expect` - making assertions -* `User` - look up a User in the db - -### Helper Methods - -There are helper methods declared in the [api-helper.coffee](api-helper.coffee) file. Some useful methods contained there: - -* `registerNewUser(callback, main)` - Theres a global user variable that gets overwritten with the new user whenever you call `registerNewUser` unless you pass false in as the second argument. -* `registerManyUsers(number, callback)` - Good for testing things that require many users. The callback function returns new users as and array in the second argument. diff --git a/test/api/anonymized.coffee b/test/api/anonymized.coffee deleted file mode 100644 index 5532a8c472..0000000000 --- a/test/api/anonymized.coffee +++ /dev/null @@ -1,62 +0,0 @@ -'use strict' - -app = require("../../website/src/server") - -describe "GET /api/v2/user/anonymized", -> - - anon = null - - before (done) -> - # TODO: Seed user with messages, rewards, dailys, checklists, webhooks, etc - registerNewUser -> - request.get(baseURL + "/user/anonymized") - .end (res) -> - anon = res.body - done() - , true - - it 'retains user id', (done) -> - expect(anon._id).to.equal user._id - done() - - it 'removes credentials and financial information', (done) -> - expect(anon.apiToken).to.not.exist - expect(anon.auth.local).to.not.exist - expect(anon.auth.facebook).to.not.exist - expect(anon.purchased.plan).to.not.exist - done() - - it 'removes profile information', (done) -> - expect(anon.profile).to.not.exist - expect(anon.contributor).to.not.exist - expect(anon.achievements.challenges).to.not.exist - done() - - it 'removes social information', (done) -> - expect(anon.newMessages).to.not.exist - expect(anon.invitations).to.not.exist - expect(anon.items.special.nyeReceived).to.not.exist - expect(anon.items.special.valentineReceived).to.not.exist - _(anon.inbox.messages).each (msg) -> - expect(msg).to.equal 'inbox message text' - done() - - it 'removes webhooks', (done) -> - expect(anon.webhooks).to.not.exist - done() - - it 'anonymizes task info', (done) -> - _(['habits', 'todos', 'dailys', 'rewards']).each (tasks) -> - _(anon[tasks]).each (task) -> - expect(task.text).to.equal 'task text' - expect(task.notes).to.equal 'task notes' - checklist_count = 0 - _(task.checklist).each (box) -> - box.text = 'item' + checklist_count++ - done() - - it 'anonymizes tags', (done) -> - _(anon.tags).each (tag) -> - expect(tag.name).to.equal 'tag' - expect(tag.challenge).to.equal 'challenge' - done() diff --git a/test/api/api-helper.coffee b/test/api/api-helper.coffee deleted file mode 100644 index 0c3ae7b580..0000000000 --- a/test/api/api-helper.coffee +++ /dev/null @@ -1,76 +0,0 @@ -############################## -# Global modules -############################## -superagentDefaults = require("superagent-defaults") -global.request = superagentDefaults() - -global.mongoose = require("mongoose") -global.moment = require("moment") -global.async = require("async") -global._ = require("lodash") -global.shared = require("../../common") -global.User = require("../../website/src/models/user").model - -global.chai = require("chai") -chai.use(require("sinon-chai")) -global.expect = chai.expect - -############################## -# Nconf config -############################## -path = require("path") -global.conf = require("nconf") -conf.argv().env().file(file: path.join(__dirname, "../config.json")).defaults() -conf.set "PORT", "1337" - -############################## -# Node ENV and global variables -############################## -process.env.NODE_DB_URI = "mongodb://localhost/habitrpg_test" -global.baseURL = "http://localhost:" + conf.get("PORT") + "/api/v2" -global.user = undefined - -############################## -# Helper Methods -############################## -global.expectCode = (res, code) -> - expect(res.body.err).to.not.exist if code is 200 - expect(res.statusCode).to.equal code - -global.registerNewUser = (cb, main) -> - main = true unless main? - randomID = shared.uuid() - username = password = randomID if main - 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 (res) -> - return cb(null, res.body) unless main - _id = res.body._id - apiToken = res.body.apiToken - User.findOne - _id: _id - apiToken: apiToken - , (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) - cb null, res.body - -global.registerManyUsers = (number, callback) -> - async.times number, (n, next) -> - registerNewUser (err, user) -> - next(err, user) - , false - , (err, users) -> - callback(err, users) diff --git a/test/api/challenges.coffee b/test/api/challenges.coffee deleted file mode 100644 index ad4172c30a..0000000000 --- a/test/api/challenges.coffee +++ /dev/null @@ -1,343 +0,0 @@ -'use strict' - -app = require("../../website/src/server") -Group = require("../../website/src/models/group").model -Challenge = require("../../website/src/models/challenge").model - -describe "Challenges", -> - - challenge = undefined - updateTodo = undefined - group = undefined - - beforeEach (done) -> - async.waterfall [ - (cb) -> - registerNewUser(cb, true) - , (user, cb) -> - request.post(baseURL + "/groups").send( - name: "TestGroup" - type: "party" - ).end (res) -> - expectCode res, 200 - group = res.body - expect(group.members.length).to.equal 1 - expect(group.leader).to.equal user._id - cb() - , (cb) -> - 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 (res) -> - challenge = res.body - done() - ] - - describe 'POST /challenge', -> - - it "Creates a challenge", (done) -> - 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 (res) -> - expectCode res, 200 - async.parallel [ - (cb) -> - User.findById user._id, cb - (cb) -> - Challenge.findById res.body._id, cb - ], (err, results) -> - user = results[0] - challenge = results[1] - expect(user.dailys[user.dailys.length - 1].text).to.equal "Challenge Daily" - expect(challenge.official).to.equal false - done() - - describe 'POST /challenge/:cid', -> - it "updates the notes on user's version of a challenge task's note without updating the challenge", (done) -> - updateTodo = challenge.todos[0] - updateTodo.notes = "User overriden notes" - async.waterfall [ - (cb) -> - request.put(baseURL + "/user/tasks/" + updateTodo.id).send(updateTodo).end (res) -> - cb() - , (cb) -> - Challenge.findById challenge._id, cb - , (chal, cb) -> - expect(chal.todos[0].notes).to.eql("Challenge Notes") - cb() - , (cb) -> - request.get(baseURL + "/user/tasks/" + updateTodo.id) - .end (res) -> - expect(res.body.notes).to.eql("User overriden notes") - done() - ] - - it "changes user's copy of challenge tasks when the challenge is updated", (done) -> - challenge.dailys[0].text = "Updated Daily" - request.post(baseURL + "/challenges/" + challenge._id) - .send(challenge) - .end (res) -> - challenge = res.body - expect(challenge.dailys[0].text).to.equal "Updated Daily" - User.findById user._id, (err, _user) -> - expectCode res, 200 - expect(_user.dailys[_user.dailys.length - 1].text).to.equal "Updated Daily" - done() - - it "does not changes user's notes on tasks when challenge task notes are updated", (done) -> - challenge.todos[0].notes = "Challenge Updated Todo Notes" - request.post(baseURL + "/challenges/" + challenge._id) - .send(challenge) - .end (res) -> - challenge = res.body - expect(challenge.todos[0].notes).to.equal "Challenge Updated Todo Notes" - User.findById user._id, (err, _user) -> - expectCode res, 200 - expect(_user.todos[_user.todos.length - 1].notes).to.equal "Challenge Notes" - done() - - - it "shows user notes on challenge page", (done) -> - updateTodo = challenge.todos[0] - updateTodo.notes = "User overriden notes" - async.waterfall [ - (cb) -> - request.put(baseURL + "/user/tasks/" + updateTodo.id).send(updateTodo).end (res) -> - cb() - , (cb) -> - Challenge.findById challenge._id, cb - , (chal, cb) -> - expect(chal.todos[0].notes).to.eql("Challenge Notes") - cb() - , (cb) -> - request.get(baseURL + "/challenges/" + challenge._id + "/member/" + user._id).end (res) -> - expect(res.body.todos[res.body.todos.length - 1].notes).to.equal "User overriden notes" - done() - ] - - it "Complete To-Dos", (done) -> - User.findById user._id, (err, _user) -> - u = _user - numTasks = (_.size(u.todos)) - request.post(baseURL + "/user/tasks/" + u.todos[0].id + "/up").end (res) -> - request.post(baseURL + "/user/tasks/clear-completed").end (res) -> - expect(_.size(res.body)).to.equal numTasks - 1 - done() - - it "Challenge deleted, breaks task link", (done) -> - itThis = this - request.del(baseURL + "/challenges/" + challenge._id).end (res) -> - User.findById user._id, (err, user) -> - len = user.dailys.length - 1 - daily = user.dailys[user.dailys.length - 1] - expect(daily.challenge.broken).to.equal "CHALLENGE_DELETED" - - # Now let's handle if challenge was deleted, but didn't get to update all the users (an error) - unset = $unset: {} - unset["$unset"]["dailys." + len + ".challenge.broken"] = 1 - User.findByIdAndUpdate user._id, unset, (err, user) -> - expect(err).to.not.exist - expect(user.dailys[len].challenge.broken).to.not.exist - request.post(baseURL + "/user/tasks/" + daily.id + "/up").end (res) -> - setTimeout (-> - User.findById user._id, (err, user) -> - expect(user.dailys[len].challenge.broken).to.equal "CHALLENGE_DELETED" - done() - ), 100 # we need to wait for challenge to update user, it's a background job for perf reasons - - it "admin creates a challenge", (done) -> - User.findByIdAndUpdate user._id, - $set: - "contributor.admin": true - , (err, _user) -> - expect(err).to.not.exist - async.parallel [ - (cb) -> - request.post(baseURL + "/challenges").send( - group: group._id - dailys: [] - todos: [] - rewards: [] - habits: [] - official: false - ).end (res) -> - expect(res.body.official).to.equal false - cb() - (cb) -> - request.post(baseURL + "/challenges").send( - group: group._id - dailys: [] - todos: [] - rewards: [] - habits: [] - official: true - ).end (res) -> - expect(res.body.official).to.equal true - cb() - ], done - - it "User creates a non-tavern challenge with prize, deletes it, gets refund", (done) -> - User.findByIdAndUpdate user._id, - $set: - "balance": 8 - , (err, user) -> - expect(err).to.not.be.ok - request.post(baseURL + "/challenges").send( - group: group._id - dailys: [] - todos: [] - rewards: [] - habits: [] - prize: 10 - ).end (res) -> - expect(res.body.prize).to.equal 10 - async.parallel [ - (cb) -> - User.findById user._id, cb - (cb) -> - Challenge.findById res.body._id, cb - ], (err, results) -> - user = results[0] - challenge = results[1] - expect(user.balance).to.equal 5.5 - request.del(baseURL + "/challenges/" + challenge._id).end (res) -> - User.findById user._id, (err, _user) -> - expect(_user.balance).to.equal 8 - done() - - it "User creates a tavern challenge with prize, deletes it, and does not get refund", (done) -> - User.findByIdAndUpdate user._id, - $set: - "balance": 8 - , (err, user) -> - expect(err).to.not.be.ok - request.post(baseURL + "/challenges").send( - group: 'habitrpg' - dailys: [] - todos: [] - rewards: [] - habits: [] - prize: 10 - ).end (res) -> - expect(res.body.prize).to.equal 10 - async.parallel [ - (cb) -> - User.findById user._id, cb - (cb) -> - Challenge.findById res.body._id, cb - ], (err, results) -> - user = results[0] - challenge = results[1] - expect(user.balance).to.equal 5.5 - request.del(baseURL + "/challenges/" + challenge._id).end (res) -> - User.findById user._id, (err, _user) -> - expect(_user.balance).to.equal 5.5 - done() - - describe "non-owner permissions", () -> - challenge = undefined - - beforeEach (done) -> - async.waterfall [ - (cb) -> - request.post(baseURL + "/challenges").send( - group: group._id - name: 'challenge name' - dailys: [ - type: "daily" - text: "Challenge Daily" - ] - ).end (res) -> - challenge = res.body - cb() - - (cb) -> - registerNewUser(done, true) - ] - - context "non-owner", () -> - - it 'can not edit challenge', (done) -> - challenge.name = 'foobar' - request.post(baseURL + "/challenges/" + challenge._id) - .send(challenge) - .end (res) -> - error = res.body.err - - expect(error).to.eql("You don't have permissions to edit this challenge") - done() - - it 'can not close challenge', (done) -> - request.post(baseURL + "/challenges/" + challenge._id + "/close?uid=" + user._id) - .end (res) -> - error = res.body.err - - expect(error).to.eql("You don't have permissions to close this challenge") - done() - - it 'can not delete challenge', (done) -> - request.del(baseURL + "/challenges/" + challenge._id) - .end (res) -> - error = res.body.err - - expect(error).to.eql("You don't have permissions to delete this challenge") - done() - - context "non-owner that is an admin", () -> - - beforeEach (done) -> - User.findByIdAndUpdate(user._id, { 'contributor.admin': true }, done) - - it 'can edit challenge', (done) -> - challenge.name = 'foobar' - request.post(baseURL + "/challenges/" + challenge._id) - .send(challenge) - .end (res) -> - expect(res.body.err).to.not.exist - Challenge.findById challenge._id, (err, chal) -> - expect(chal.name).to.eql('foobar') - done() - - it 'can close challenge', (done) -> - request.post(baseURL + "/challenges/" + challenge._id + "/close?uid=" + user._id) - .end (res) -> - expect(res.body.err).to.not.exist - User.findById user._id, (err, usr) -> - expect(usr.achievements.challenges[0]).to.eql(challenge.name) - done() - - it 'can delete challenge', (done) -> - request.del(baseURL + "/challenges/" + challenge._id) - .end (res) -> - expect(res.body.err).to.not.exist - request.get(baseURL + "/challenges/" + challenge._id) - .end (res) -> - error = res.body.err - expect(error).to.eql("Challenge #{challenge._id} not found") - done() diff --git a/test/api/chat.coffee b/test/api/chat.coffee deleted file mode 100644 index 38c1254a00..0000000000 --- a/test/api/chat.coffee +++ /dev/null @@ -1,145 +0,0 @@ -'use strict' - -diff = require("deep-diff") - -Group = require("../../website/src/models/group").model -app = require("../../website/src/server") - -describe "Chat", -> - group = undefined - before (done) -> - async.waterfall [ - (cb) -> - registerNewUser(cb, true) - - (user, cb) -> - request.post(baseURL + "/groups").send( - name: "TestGroup" - type: "party" - ).end (res) -> - expectCode res, 200 - group = res.body - expect(group.members.length).to.equal 1 - expect(group.leader).to.equal user._id - cb() - - ], done - - chat = undefined - it "posts a message to party chat", (done) -> - msg = "TestMsg" - request.post(baseURL + "/groups/" + group._id + "/chat?message=" + msg).end (res) -> - expectCode res, 200 - chat = res.body.message - expect(chat.id).to.be.ok - expect(chat.text).to.equal msg - expect(chat.timestamp).to.be.exist - expect(chat.likes).to.be.empty - expect(chat.flags).to.be.empty - expect(chat.flagCount).to.equal 0 - expect(chat.uuid).to.be.exist - expect(chat.contributor).to.be.empty - expect(chat.backer).to.be.empty - expect(chat.uuid).to.equal user._id - expect(chat.user).to.equal user.profile.name - done() - - it "does not post an empty message", (done) -> - msg = "" - request.post(baseURL + "/groups/" + group._id + "/chat?message=" + msg).send( - ).end (res) -> - expectCode res, 400 - expect(res.body.err).to.equal 'You cannot send a blank message' - done() - - it "can not like own chat message", (done) -> - request.post(baseURL + "/groups/" + group._id + "/chat/" + chat.id + "/like").send( - ).end (res) -> - expectCode res, 401 - body = res.body - expect(body.err).to.equal "Can't like your own message. Don't be that person." - done() - - it "can not flag own message", (done) -> - request.post(baseURL + "/groups/" + group._id + "/chat/" + chat.id + "/flag").send( - ).end (res) -> - expectCode res, 401 - body = res.body - expect(body.err).to.equal "Can't report your own message." - done() - - it "gets chat messages from party chat", (done) -> - request.get(baseURL + "/groups/" + group._id + "/chat").send( - ).end (res) -> - expectCode res, 200 - message = res.body[0] - expect(message.id).to.equal chat.id - expect(message.timestamp).to.equal chat.timestamp - expect(message.likes).to.deep.equal chat.likes - expect(message.flags).to.deep.equal chat.flags - expect(message.flagCount).to.equal chat.flagCount - expect(message.uuid).to.equal chat.uuid - expect(message.contributor).to.deep.equal chat.contributor - expect(message.backer).to.deep.equal chat.backer - expect(message.user).to.equal chat.user - done() - - it "deletes a chat messages from party chat", (done) -> - request.del(baseURL + "/groups/" + group._id + "/chat/" + chat.id).send( - ).end (res) -> - expectCode res, 204 - expect(res.body).to.be.empty - done() - - it "can not delete already deleted message", (done) -> - request.del(baseURL + "/groups/" + group._id + "/chat/" + chat.id).send( - ).end (res) -> - expectCode res, 404 - body = res.body - expect(body.err).to.equal "Message not found!" - done() - - it "removes a user's chat notifications when user is kicked", (done) -> - userToRemove = null - async.waterfall [ - (cb) -> - registerManyUsers 1, cb - - (members, cb) -> - userToRemove = members[0] - request.post(baseURL + "/groups/" + group._id + "/invite").send( - uuids: [userToRemove._id] - ) - .end -> cb() - - (cb) -> - request.post(baseURL + "/groups/" + group._id + "/join") - .set("X-API-User", userToRemove._id) - .set("X-API-Key", userToRemove.apiToken) - .end (res) -> cb() - - (cb) -> - msg = "TestMsg" - request.post(baseURL + "/groups/" + group._id + "/chat?message=" + msg) - .end (res) -> cb() - - (cb) -> - request.get(baseURL + "/user") - .set("X-API-User", userToRemove._id) - .set("X-API-Key", userToRemove.apiToken) - .end (res) -> - expect(res.body.newMessages[group._id]).to.exist - cb() - - (cb) -> - request.post(baseURL + "/groups/" + group._id + "/removeMember?uuid=" + userToRemove._id) - .end (res) -> cb() - - (cb) -> - request.get(baseURL + "/user") - .set("X-API-User", userToRemove._id) - .set("X-API-Key", userToRemove.apiToken) - .end (res) -> - expect(res.body.newMessages[group._id]).to.not.exist - cb() - ], done diff --git a/test/api/coupons.coffee b/test/api/coupons.coffee deleted file mode 100644 index 4a0635aa9c..0000000000 --- a/test/api/coupons.coffee +++ /dev/null @@ -1,191 +0,0 @@ -'use strict' - -app = require("../../website/src/server") -Coupon = require("../../website/src/models/coupon").model - -makeSudoUser = (usr, cb) -> - registerNewUser -> - sudoUpdate = { "$set" : { "contributor.sudo" : true } } - User.findByIdAndUpdate user._id, sudoUpdate, (err, _user) -> - usr = _user - cb() - , true - -describe "Coupons", -> - before (done) -> - async.parallel [ - (cb) -> - mongoose.connection.collections['coupons'].drop (err) -> - cb() - (cb) -> - mongoose.connection.collections['users'].drop (err) -> - cb() - ], done - - coupons = null - - describe "POST /api/v2/coupons/generate/:event", -> - - context "while sudo user", -> - before (done) -> - makeSudoUser(user, done) - - it "generates coupons", (done) -> - queries = '?count=10' - request - .post(baseURL + '/coupons/generate/wondercon' + queries) - .end (res) -> - expectCode res, 200 - Coupon.find { event: 'wondercon' }, (err, _coupons) -> - coupons = _coupons - expect(coupons.length).to.equal 10 - _(coupons).each (c)-> - expect(c.event).to.equal 'wondercon' - done() - - context "while regular user", -> - - before (done) -> - registerNewUser(done, true) - - it "does not generate coupons", (done) -> - queries = '?count=10' - request - .post(baseURL + '/coupons/generate/wondercon' + queries) - .end (res) -> - expectCode res, 401 - expect(res.body.err).to.equal 'You don\'t have admin access' - done() - - describe "GET /api/v2/coupons", -> - - context "while sudo user", -> - - before (done) -> - makeSudoUser(user, done) - - it "gets coupons", (done) -> - queries = '?_id=' + user._id + '&apiToken=' + user.apiToken - request - .get(baseURL + '/coupons' + queries) - .end (res) -> - expectCode res, 200 - codes = res.text - expect(codes).to.contain('code') - # Expect each coupon code _id to exist in response - _(coupons).each (c) -> expect(codes).to.contain(c._id) - - done() - - it "gets first 5 coupons out of 10 when a limit of 5 is set", (done) -> - queries = '?_id=' + user._id + '&apiToken=' + user.apiToken + '&limit=5' - request - .get(baseURL + '/coupons' + queries) - .end (res) -> - expectCode res, 200 - codes = res.text - sortedCoupons = _.sortBy(coupons, 'seq') - firstHalf = sortedCoupons[0..4] - secondHalf = sortedCoupons[5..9] - - # First five coupons should be present in codes - _(firstHalf).each (c) -> expect(codes).to.contain(c._id) - # Second five coupons should not be present in codes - _(secondHalf).each (c) -> expect(codes).to.not.contain(c._id) - done() - - it "gets last 5 coupons out of 10 when a limit of 5 is set", (done) -> - queries = '?_id=' + user._id + '&apiToken=' + user.apiToken + '&skip=5' - request - .get(baseURL + '/coupons' + queries) - .end (res) -> - expectCode res, 200 - codes = res.text - sortedCoupons = _.sortBy(coupons, 'seq') - firstHalf = sortedCoupons[0..4] - secondHalf = sortedCoupons[5..9] - - # First five coupons should not be present in codes - _(firstHalf).each (c) -> expect(codes).to.not.contain(c._id) - # Second five coupons should be present in codes - _(secondHalf).each (c) -> expect(codes).to.contain(c._id) - done() - - context "while regular user", -> - - before (done) -> - registerNewUser(done, true) - - it "does not get coupons", (done) -> - - queries = '?_id=' + user._id + '&apiToken=' + user.apiToken - request - .get(baseURL + '/coupons' + queries) - .end (res) -> - expectCode res, 401 - expect(res.body.err).to.equal 'You don\'t have admin access' - done() - - describe "POST /api/v2/user/coupon/:code", -> - specialGear = (gear, has) -> - 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'] - - _(items).each (i) -> - if(has) - expect(gear[i]).to.exist - else - expect(gear[i]).to.not.exist - - beforeEach (done) -> - registerNewUser -> - gear = user.items.gear.owned - specialGear(gear, false) - done() - , true - - context "unused coupon", -> - it "applies coupon and awards equipment", (done) -> - - code = coupons[0]._id - request - .post(baseURL + '/user/coupon/' + code) - .end (res) -> - expectCode res, 200 - gear = res.body.items.gear.owned - specialGear(gear, true) - done() - - context "already used coupon", -> - it "does not apply coupon and does not award equipment", (done) -> - - code = coupons[0]._id - request - .post(baseURL + '/user/coupon/' + code) - .end (res) -> - expectCode res, 400 - expect(res.body.err).to.equal "Coupon already used" - User.findById user._id, (err, _user) -> - gear = _user.items.gear.owned - specialGear(gear, false) - done() - - context "invalid coupon", -> - it "does not apply coupon and does not award equipment", (done) -> - - code = "not-a-real-coupon" - request - .post(baseURL + '/user/coupon/' + code) - .end (res) -> - expectCode res, 400 - expect(res.body.err).to.equal "Invalid coupon code" - User.findById user._id, (err, _user) -> - gear = _user.items.gear.owned - specialGear(gear, false) - done() diff --git a/test/api/get_user.coffee b/test/api/get_user.coffee deleted file mode 100644 index 530fa398a9..0000000000 --- a/test/api/get_user.coffee +++ /dev/null @@ -1,25 +0,0 @@ -'use strict' - -require('../../website/src/server') - -describe 'User', -> - - before (done) -> - registerNewUser done, true - - describe 'GET /user', -> - it 'removes password from user object', (done) -> - request.get(baseURL + '/user') - .end (err, res) -> - expectCode res, 200 - localAuth = res.body.auth.local - expect(localAuth.hashed_password).to.not.exist - expect(localAuth.salt).to.not.exist - done() - - it 'removes apiToken from user object', (done) -> - request.get(baseURL + '/user') - .end (err, res) -> - expectCode res, 200 - expect(res.body.apiToken).to.not.exist - done() diff --git a/test/api/groups.coffee b/test/api/groups.coffee deleted file mode 100644 index b5a4fa2765..0000000000 --- a/test/api/groups.coffee +++ /dev/null @@ -1,500 +0,0 @@ -'use strict' - -diff = require("deep-diff") - -Group = require("../../website/src/models/group").model -app = require("../../website/src/server") - -describe "Guilds", -> - context "creating groups", -> - before (done) -> - registerNewUser -> - User.findByIdAndUpdate user._id, - $set: - "balance": 40 - , (err, _user) -> - done() - , true - - it "can create a public guild", (done) -> - request.post(baseURL + "/groups").send( - name: "TestGroup" - type: "guild", - privacy: "public" - ).end (res) -> - expectCode res, 200 - guild = res.body - expect(guild.members.length).to.equal 1 - expect(guild.leader).to.equal user._id - done() - - it "can create a private guild", (done) -> - request.post(baseURL + "/groups").send( - name: "TestGroup" - type: "guild", - privacy: "private" - ).end (res) -> - expectCode res, 200 - guild = res.body - expect(guild.members.length).to.equal 1 - expect(guild.leader).to.equal user._id - done() - - it "prevents user from creating a guild when the user has 0 gems", (done) -> - registerNewUser (err, user_with_0_gems) -> - request.post(baseURL + "/groups").send( - name: "TestGroup" - type: "guild", - ) - .set("X-API-User", user_with_0_gems._id) - .set("X-API-Key", user_with_0_gems.apiToken) - .end (res) -> - expectCode res, 401 - done() - , false - - context "get guilds", -> - guild = undefined - - beforeEach (done)-> - request.post(baseURL + "/groups").send( - name: "TestGroup2" - type: "guild" - ).end (res) -> - guild = res.body - done() - - it "can find a guild", (done) -> - request.get(baseURL + "/groups/" + guild._id) - .end (res) -> - expectCode res, 200 - expect(res.body._id).to.equal res.body._id - done() - - it "transforms members array to an arrray of user objects", (done) -> - request.get(baseURL + "/groups/" + guild._id) - .end (res) -> - expectCode res, 200 - members = res.body.members - # @TODO: would be more instructive if it had more members in guild :( - _(members).each (member) -> - expect(member).to.be.an 'object' - expect(member.profile.name).to.exist - done() - - it "transforms leader id to a user object", (done) -> - request.get(baseURL + "/groups/" + guild._id) - .end (res) -> - expectCode res, 200 - leader = res.body.leader - expect(leader).to.be.an 'object' - expect(leader.profile.name).to.exist - done() - - it "can list guilds", (done) -> - request.get(baseURL + "/groups").send() - .end (res) -> - expectCode res, 200 - guild = res.body[0] - expect(guild).to.exist - done() - - context "updating groups", -> - groupToUpdate = undefined - before (done) -> - request.post(baseURL + "/groups").send( - name: "TestGroup" - type: "guild" - description: "notUpdatedDesc" - ).end (res) -> - groupToUpdate = res.body - done() - - it "prevents user from updating a party when they aren't the leader", (done) -> - registerNewUser (err, tmpUser) -> - request.post(baseURL + "/groups/" + groupToUpdate._id).send( - name: "TestGroupName" - description: "updatedDesc" - ) - .set("X-API-User", tmpUser._id) - .set("X-API-Key", tmpUser.apiToken) - .end (res) -> - expectCode res, 401 - expect(res.body.err).to.equal "Only the group leader can update the group!" - done() - , false - - it "allows user to update a group", (done) -> - request.post(baseURL + "/groups/" + groupToUpdate._id).send( - description: "updatedDesc" - ) - .end (res) -> - expectCode res, 204 - request.get(baseURL + "/groups/" + groupToUpdate._id).send() - .end (res) -> - updatedGroup = res.body - expect(updatedGroup.description).to.equal "updatedDesc" - done() - - context "leaving groups", -> - it "can leave a guild", (done) -> - guildToLeave = undefined - request.post(baseURL + "/groups").send( - name: "TestGroupToLeave" - type: "guild" - ).end (res) -> - guildToLeave = res.body - request.post(baseURL + "/groups/" + guildToLeave._id + "/leave") - .send() - .end (res) -> - expectCode res, 204 - done() - - it "deletes a group when the last member leaves", (done) -> - groupToDeleteAfterLeave = undefined - request.post(baseURL + "/groups").send( - name: "TestGroupToDeleteAfteLeave" - type: "guild" - privacy: "private" - ).end (res) -> - groupToDeleteAfterLeave = res.body - async.waterfall [ - (cb) -> - request.post(baseURL + "/groups/" + groupToDeleteAfterLeave._id + "/leave") - .end (res) -> - expectCode res, 204 - cb() - - (cb) -> - request.post(baseURL + "/groups/" + groupToDeleteAfterLeave._id) - .end (res) -> - expectCode res, 404 - cb() - ], done - - it "deletes all invites to a group (guild) when the last member leaves", (done) -> - groupToDeleteAfterLeave = undefined - userToRemoveInvite = undefined - request.post(baseURL + "/groups").send( - name: "TestGroupToDeleteAfterLeave" - type: "guild" - privacy: "private" - ).end (res) -> - groupToDeleteAfterLeave = res.body - async.waterfall [ - (cb) -> - registerManyUsers 1, cb - - (_members, cb) -> - userToRemoveInvite = _members[0] - inviteURL = baseURL + "/groups/" + groupToDeleteAfterLeave._id + "/invite" - request.post(inviteURL).send( - uuids: [userToRemoveInvite._id] - ) - .end -> - cb() - - (cb) -> - request.post(baseURL + "/groups/" + groupToDeleteAfterLeave._id + "/leave") - .end (res) -> - expectCode res, 204 - cb() - - (cb) -> - request.get(baseURL + '/user') - .set("X-API-User", userToRemoveInvite._id) - .set("X-API-Key", userToRemoveInvite.apiToken) - .end (err, res) -> - expectCode res, 200 - groupInvitation = _.find(res.body.invitations.guilds, {id: groupToDeleteAfterLeave._id}) - expect(groupInvitation).to.not.exist - cb() - - (cb) -> - request.post(baseURL + "/groups/" + groupToDeleteAfterLeave._id) - .end (res) -> - expectCode res, 404 - cb() - ], done - - it "deletes all invites to a group (party) when the last member leaves", (done) -> - partyToDeleteAfterLeave = undefined - userToRemovePartyInvite = undefined - request.post(baseURL + "/groups").send( - name: "TestPartyToDeleteAfterLeave" - type: "party" - ).end (res) -> - partyToDeleteAfterLeave = res.body - async.waterfall [ - (cb) -> - registerManyUsers 1, cb - - (_members, cb) -> - userToRemovePartyInvite = _members[0] - inviteURL = baseURL + "/groups/" + partyToDeleteAfterLeave._id + "/invite" - request.post(inviteURL).send( - uuids: [userToRemovePartyInvite._id] - ) - .end -> - cb() - - (cb) -> - request.post(baseURL + "/groups/" + partyToDeleteAfterLeave._id + "/leave") - .end (res) -> - expectCode res, 204 - cb() - - (cb) -> - request.get(baseURL + '/user') - .set("X-API-User", userToRemovePartyInvite._id) - .set("X-API-Key", userToRemovePartyInvite.apiToken) - .end (err, res) -> - expectCode res, 200 - party = partyToDeleteAfterLeave - partyInvitation = _.find(res.body.invitations.party, (invite) -> - return invite == party._id - ) - expect(partyInvitation).to.not.exist - cb() - - (cb) -> - request.post(baseURL + "/groups/" + partyToDeleteAfterLeave._id) - .end (res) -> - expectCode res, 404 - cb() - ], done - - context "removing users groups", -> - it "allows guild leaders to remove a member (but not themselves)", (done) -> - guildToRemoveMember = undefined - members = undefined - userToRemove = undefined - request.post(baseURL + "/groups").send( - name: "TestGuildToRemoveMember" - type: "guild" - ).end (res) -> - guildToRemoveMember = res.body - #Add members to guild - async.waterfall [ - (cb) -> - registerManyUsers 1, cb - - (_members, cb) -> - userToRemove = _members[0] - members = _members - inviteURL = baseURL + "/groups/" + guildToRemoveMember._id + "/invite" - request.post(inviteURL).send( - uuids: [userToRemove._id] - ) - .end -> - cb() - - (cb) -> - request.post(baseURL + "/groups/" + guildToRemoveMember._id + "/join") - .set("X-API-User", userToRemove._id) - .set("X-API-Key", userToRemove.apiToken) - .end (res) -> - cb() - (cb) -> - request.post(baseURL + "/groups/" + guildToRemoveMember._id + "/removeMember?uuid=" + guildToRemoveMember.leader) - .send().end (res) -> - expectCode res, 401 - cb() - - (cb) -> - request.post(baseURL + "/groups/" + guildToRemoveMember._id + "/removeMember?uuid=" + userToRemove._id) - .send().end (res) -> - expectCode res, 204 - cb() - - (cb) -> - request.get(baseURL + "/groups/" + guildToRemoveMember._id) - .send() - .end (res) -> - g = res.body - userInGroup = _.find g.members, (member) -> return member._id == userToRemove._id - expect(userInGroup).to.not.exist - cb() - - ], done - - describe "Private Guilds", -> - guild = undefined - before (done) -> - request.post(baseURL + "/groups").send( - name: "TestPrivateGroup" - type: "guild" - privacy: "private" - ).end (res) -> - expectCode res, 200 - guild = res.body - expect(guild.members.length).to.equal 1 - expect(guild.leader).to.equal user._id - #Add members to guild - async.waterfall [ - (cb) -> - registerManyUsers 15, cb - - (_members, cb) -> - members = _members - - joinGuild = (member, callback) -> - request.post(baseURL + "/groups/" + guild._id + "/join") - .set("X-API-User", member._id) - .set("X-API-Key", member.apiToken) - .end -> - callback(null, null) - - async.map members, joinGuild, (err, results) -> cb() - - ], done - - it "includes user in private group member list when user is a member", (done) -> - - request.get(baseURL + "/groups/" + guild._id) - .end (res) -> - g = res.body - userInGroup = _.find g.members, (member) -> return member._id == user._id - expect(userInGroup).to.exist - done() - - it "excludes user from viewing private group member list when user is not a member", (done) -> - - request.post(baseURL + "/groups/" + guild._id + "/leave") - .end (res) -> - request.get(baseURL + "/groups/" + guild._id) - .end (res) -> - expect res, 404 - done() - - describe "Public Guilds", -> - before (done) -> - async.waterfall [ - (cb) -> - registerNewUser -> - User.findByIdAndUpdate user._id, {$set: { "balance": 10 } }, (err, _user) -> - cb() - , true - ], done - - context "joining groups", -> - it "makes user a group leader when group is empty", (done) -> - guildToEmptyAndAssignLeader = undefined - members = undefined - userToBecomeLeader = undefined - request.post(baseURL + "/groups").send( - name: "TestGuildToEmptyAndAssignLeader" - type: "guild", - privacy: "public" - ).end (res) -> - guildToEmptyAndAssignLeader = res.body - #Add members to guild - async.waterfall [ - (cb) -> - registerManyUsers 1, cb - - (_members, cb) -> - userToBecomeLeader = _members[0] - members = _members - inviteURL = baseURL + "/groups/" + guildToEmptyAndAssignLeader._id + "/invite" - request.post(inviteURL).send( - uuids: [userToBecomeLeader._id] - ) - .end -> - cb() - - (cb) -> - request.post(baseURL + "/groups/" + guildToEmptyAndAssignLeader._id + "/leave") - .send() - .end (res) -> - expectCode res, 204 - cb() - - (cb) -> - request.post(baseURL + "/groups/" + guildToEmptyAndAssignLeader._id + "/join") - .set("X-API-User", userToBecomeLeader._id) - .set("X-API-Key", userToBecomeLeader.apiToken) - .end (res) -> - expectCode res, 200 - cb() - - (cb) -> - request.get(baseURL + "/groups/" + guildToEmptyAndAssignLeader._id) - .set("X-API-User", userToBecomeLeader._id) - .set("X-API-Key", userToBecomeLeader.apiToken) - .send() - .end (res) -> - expectCode res, 200 - g = res.body - expect(g.leader._id).to.equal(userToBecomeLeader._id) - cb() - - ], done - - context "viewing", -> - guild = undefined - before (done) -> - async.waterfall [ - (cb) -> - registerNewUser -> - User.findByIdAndUpdate user._id, {$set: { "balance": 10 } }, (err, _user) -> - cb() - , true - (cb) -> - request.post(baseURL + "/groups").send( - name: "TestPublicGroup" - type: "guild" - privacy: "public" - ).end (res) -> - guild = res.body - expect(guild.members.length).to.equal 1 - expect(guild.leader).to.equal user._id - #Add members to guild - cb() - - (cb) -> - registerManyUsers 15, cb - - (_members, cb) -> - members = _members - - joinGuild = (member, callback) -> - request.post(baseURL + "/groups/" + guild._id + "/join") - .set("X-API-User", member._id) - .set("X-API-Key", member.apiToken) - .end -> - callback(null, null) - - async.map members, joinGuild, (err, results) -> cb() - - ], done - - context "is a member", -> - before (done) -> - registerNewUser -> - request.post(baseURL + "/groups/" + guild._id + "/join") - .end (res)-> - done() - , true - - it "includes user in public group member list", (done) -> - request.get(baseURL + "/groups/" + guild._id) - .end (res) -> - g = res.body - expect(g.members.length).to.equal 15 - userInGroup = _.find g.members, (member) -> return member._id == user._id - expect(userInGroup).to.exist - done() - - context "is not a member", -> - before (done) -> - registerNewUser done, true - - it "excludes user in public group member list", (done) -> - request.get(baseURL + "/groups/" + guild._id) - .end (res) -> - g = res.body - expect(g.members.length).to.equal 15 - userInGroup = _.find g.members, (member) -> return member._id == user._id - expect(userInGroup).to.not.exist - done() diff --git a/test/api/inAppPurchases.coffee b/test/api/inAppPurchases.coffee deleted file mode 100644 index b31e982e71..0000000000 --- a/test/api/inAppPurchases.coffee +++ /dev/null @@ -1,281 +0,0 @@ -'use strict' - -app = require('../../website/src/server') -rewire = require('rewire') -sinon = require('sinon') -inApp = rewire('../../website/src/controllers/payments/iap') -iapMock = { } -inApp.__set__('iap', iapMock) - -describe 'In-App Purchases', -> - describe 'Android', -> - req = { - body: { - transaction: { - reciept: 'foo' - signature: 'sig' - } - } - } - res = { - locals: { user: { _id: 'user' } } - json: sinon.spy() - } - next = -> true - paymentSpy = sinon.spy() - - before -> - inApp.__set__('payments.buyGems', paymentSpy) - - afterEach -> - paymentSpy.reset() - res.json.reset() - - context 'successful app purchase', -> - before -> - iapMock.setup = (cb)-> return cb(null) - iapMock.validate = (iapGoogle, iapBodyReciept, cb)-> return cb(null, true) - iapMock.isValidated = (googleRes)-> return googleRes - iapMock.GOOGLE = 'google' - - it 'calls res.json with succesful result object', -> - expectedResObj = { - ok: true - data: true - } - - inApp.androidVerify(req, res, next) - - expect(res.json).to.be.calledOnce - expect(res.json).to.be.calledWith(expectedResObj) - - it 'calls payments.buyGems function', -> - inApp.androidVerify(req, res, next) - - expect(paymentSpy).to.be.calledOnce - expect(paymentSpy).to.be.calledWith({user: res.locals.user, paymentMethod:'IAP GooglePlay'}) - - context 'error in setup', -> - before -> - iapMock.setup = (cb)-> return cb("error in setup") - - it 'calls res.json with setup error object', -> - expectedResObj = { - ok: false - data: 'IAP Error' - } - - inApp.androidVerify(req, res, next) - - expect(res.json).to.be.calledOnce - expect(res.json).to.be.calledWith(expectedResObj) - - it 'does not calls payments.buyGems function', -> - inApp.androidVerify(req, res, next) - - expect(paymentSpy).to.not.be.called - - context 'error in validation', -> - before -> - iapMock.setup = (cb)-> return cb(null) - iapMock.validate = (iapGoogle, iapBodyReciept, cb)-> return cb('error in validation', true) - - it 'calls res.json with validation error object', -> - expectedResObj = { - ok: false - data: { - code: 6778001 - message: 'error in validation' - } - } - - inApp.androidVerify(req, res, next) - - expect(res.json).to.be.calledOnce - expect(res.json).to.be.calledWith(expectedResObj) - - it 'does not calls payments.buyGems function', -> - inApp.androidVerify(req, res, next) - - expect(paymentSpy).to.not.be.called - - context 'iap is not valid', -> - before -> - iapMock.setup = (cb)-> return cb(null) - iapMock.validate = (iapGoogle, iapBodyReciept, cb)-> return cb(null, false) - iapMock.isValidated = (googleRes)-> return googleRes - - it 'does not call res.json', -> - inApp.androidVerify(req, res, next) - - expect(res.json).to.not.be.called - - it 'does not calls payments.buyGems function', -> - inApp.androidVerify(req, res, next) - - expect(paymentSpy).to.not.be.called - - describe 'iOS', -> - req = { body: { transaction: { reciept: 'foo' } } } - res = { - locals: { user: { _id: 'user' } } - json: sinon.spy() - } - next = -> true - paymentSpy = sinon.spy() - - before -> - inApp.__set__('payments.buyGems', paymentSpy) - - afterEach -> - paymentSpy.reset() - res.json.reset() - - context 'successful app purchase', -> - before -> - iapMock.setup = (cb)-> return cb(null) - iapMock.validate = (iapApple, iapBodyReciept, cb)-> return cb(null, true) - iapMock.isValidated = (appleRes)-> return appleRes - iapMock.getPurchaseData = (appleRes)-> - return [{ productId: 'com.habitrpg.ios.Habitica.20gems' }] - iapMock.APPLE = 'apple' - - it 'calls res.json with succesful result object', -> - expectedResObj = { - ok: true - data: true - } - - inApp.iosVerify(req, res, next) - - expect(res.json).to.be.calledOnce - expect(res.json).to.be.calledWith(expectedResObj) - - it 'calls payments.buyGems function', -> - inApp.iosVerify(req, res, next) - - expect(paymentSpy).to.be.calledOnce - expect(paymentSpy).to.be.calledWith({user: res.locals.user, paymentMethod:'IAP AppleStore'}) - - context 'error in setup', -> - before -> - iapMock.setup = (cb)-> return cb("error in setup") - - it 'calls res.json with setup error object', -> - expectedResObj = { - ok: false - data: 'IAP Error' - } - - inApp.iosVerify(req, res, next) - - expect(res.json).to.be.calledOnce - expect(res.json).to.be.calledWith(expectedResObj) - - it 'does not calls payments.buyGems function', -> - inApp.iosVerify(req, res, next) - - expect(paymentSpy).to.not.be.called - - context 'error in validation', -> - before -> - iapMock.setup = (cb)-> return cb(null) - iapMock.validate = (iapApple, iapBodyReciept, cb)-> return cb('error in validation', true) - - it 'calls res.json with validation error object', -> - expectedResObj = { - ok: false - data: { - code: 6778001 - message: 'error in validation' - } - } - - inApp.iosVerify(req, res, next) - - expect(res.json).to.be.calledOnce - expect(res.json).to.be.calledWith(expectedResObj) - - it 'does not calls payments.buyGems function', -> - inApp.iosVerify(req, res, next) - - expect(paymentSpy).to.not.be.called - - context 'iap is not valid', -> - before -> - iapMock.setup = (cb)-> return cb(null) - iapMock.validate = (iapApple, iapBodyReciept, cb)-> return cb(null, false) - iapMock.isValidated = (appleRes)-> return appleRes - - it 'does not call res.json', -> - inApp.iosVerify(req, res, next) - expectedResObj = { - ok: false - data: { - code: 6778001 - message: 'Invalid receipt' - } - } - expect(res.json).to.be.calledOnce - expect(res.json).to.be.calledWith(expectedResObj) - - it 'does not calls payments.buyGems function', -> - inApp.iosVerify(req, res, next) - - expect(paymentSpy).to.not.be.called - - context 'iap is valid but has no purchaseDataList', -> - before -> - iapMock.setup = (cb)-> return cb(null) - iapMock.validate = (iapApple, iapBodyReciept, cb)-> return cb(null, true) - iapMock.isValidated = (appleRes)-> return appleRes - iapMock.getPurchaseData = (appleRes)-> - return [] - iapMock.APPLE = 'apple' - - it 'calls res.json with succesful result object', -> - expectedResObj = { - ok: false - data: { - code: 6778001 - message: 'Incorrect receipt content' - } - } - - inApp.iosVerify(req, res, next) - - expect(res.json).to.be.calledOnce - expect(res.json).to.be.calledWith(expectedResObj) - - it 'does not calls payments.buyGems function', -> - inApp.iosVerify(req, res, next) - - expect(paymentSpy).to.not.be.called - - context 'iap is valid, has purchaseDataList, but productId does not match', -> - before -> - iapMock.setup = (cb)-> return cb(null) - iapMock.validate = (iapApple, iapBodyReciept, cb)-> return cb(null, true) - iapMock.isValidated = (appleRes)-> return appleRes - iapMock.getPurchaseData = (appleRes)-> - return [{ productId: 'com.another.company' }] - iapMock.APPLE = 'apple' - - it 'calls res.json with incorrect reciept obj', -> - expectedResObj = { - ok: false - data: { - code: 6778001 - message: 'Incorrect receipt content' - } - } - - inApp.iosVerify(req, res, next) - - expect(res.json).to.be.calledOnce - expect(res.json).to.be.calledWith(expectedResObj) - - it 'does not calls payments.buyGems function', -> - inApp.iosVerify(req, res, next) - - expect(paymentSpy).to.not.be.called diff --git a/test/api/party.coffee b/test/api/party.coffee deleted file mode 100644 index 2a8b54801a..0000000000 --- a/test/api/party.coffee +++ /dev/null @@ -1,478 +0,0 @@ -'use strict' - -diff = require("deep-diff") - -Group = require("../../website/src/models/group").model -app = require("../../website/src/server") - -describe "Party", -> - context "creating a party", -> - it "creates a party", (done) -> - async.waterfall [ - (cb) -> - registerNewUser(cb, true) - - (user, cb) -> - request.post(baseURL + "/groups").send( - name: "TestGroup" - type: "party" - ).end (res) -> - expectCode res, 200 - group = res.body - expect(group.members.length).to.equal 1 - expect(group.leader).to.equal user._id - cb() - ], done - - it "prevents user from creating a second party", (done) -> - request.post(baseURL + "/groups").send( - name: "TestGroup" - type: "party" - ).end (res) -> - expectCode res, 400 - expect(res.body.err).to.equal "Already in a party, try refreshing." - done() - - context "Searching for a party", -> - group = undefined - beforeEach (done) -> - async.waterfall [ - (cb) -> - registerNewUser(cb, true) - - (user, cb) -> - request.post(baseURL + "/groups").send( - name: "TestGroup" - type: "party" - ).end (res) -> - expectCode res, 200 - group = res.body - expect(group.members.length).to.equal 1 - expect(group.leader).to.equal user._id - cb() - ], done - - it "can be found by querying for group type party", (done) -> - request.get(baseURL + "/groups/").send( - type: "party" - ).end (res) -> - expectCode res, 200 - party = _.find res.body, (g) -> return g._id == group._id - expect(party._id).to.equal group._id - expect(party.leader).to.equal user._id - expect(party.name).to.equal group.name - expect(party.quest).to.deep.equal { progress: {} } - expect(party.memberCount).to.equal group.memberCount - done() - - context "joining a party", -> - group = undefined - beforeEach (done) -> - async.waterfall [ - (cb) -> - registerNewUser(cb, true) - - (user, cb) -> - request.post(baseURL + "/groups").send( - name: "TestGroup" - type: "party" - ).end (res) -> - expectCode res, 200 - group = res.body - expect(group.members.length).to.equal 1 - expect(group.leader).to.equal user._id - cb() - ], done - - it "prevents user from joining a party when they haven't been invited", (done) -> - registerNewUser (err, user) -> - request.post(baseURL + "/groups/" + group._id + "/join").send() - .set("X-API-User", user._id) - .set("X-API-Key", user.apiToken) - .end (res) -> - expectCode res, 401 - expect(res.body.err).to.equal "Can't join a group you're not invited to." - done() - , false - - it "allows users to join a party when they have been invited", (done) -> - tmpUser = undefined - async.waterfall [ - (cb) -> - registerNewUser(cb, false) - - (user, cb) -> - tmpUser = user - inviteURL = baseURL + "/groups/" + group._id + "/invite" - request.post(inviteURL).send( - uuids: [tmpUser._id] - ) - .end -> - cb() - - (cb) -> - request.post(baseURL + "/groups/" + group._id + "/join") - .set("X-API-User", tmpUser._id) - .set("X-API-Key", tmpUser.apiToken) - .end (res) -> - expectCode res, 200 - cb() - - (cb) -> - Group.findById group._id, (err, grp) -> - expect(grp.members).to.include(tmpUser._id) - cb() - ], done - - context "Quests", -> - party = undefined - group = undefined - participating = [] - notParticipating = [] - beforeEach (done) -> - # Tavern boss, side-by-side - Group.update( - _id: "habitrpg" - , - $set: - quest: - key: "dilatory" - active: true - progress: - hp: shared.content.quests.dilatory.boss.hp - rage: 0 - ).exec() - - # Tally some progress for later. Later we want to test that progress made before the quest began gets - # counted after the quest starts - async.waterfall [ - (cb) -> - registerNewUser(cb, true) - - (user, cb) -> - request.post(baseURL + "/groups").send( - name: "TestGroup" - type: "party" - ).end (res) -> - expectCode res, 200 - group = res.body - expect(group.members.length).to.equal 1 - expect(group.leader).to.equal user._id - cb() - - (cb) -> - request.post(baseURL + '/user/tasks').send({ - type: 'daily' - text: 'daily one' - }).end (res) -> - cb() - (cb) -> - request.post(baseURL + '/user/tasks').send({ - type: 'daily' - text: 'daily two' - }).end (res) -> - cb() - (cb) -> - User.findByIdAndUpdate user._id, - $set: - "stats.lvl": 50 - , (err, _user) -> - cb(null, _user) - (_user, cb) -> - user = _user - 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 (res) -> - user = res.body - expect(user.party.quest.progress.up).to.be.above 0 - - # Invite some members - async.waterfall [ - - # Register new users - (cb) -> - registerManyUsers 3, cb - - # Send them invitations - (_party, cb) -> - party = _party - inviteURL = baseURL + "/groups/" + group._id + "/invite" - async.parallel [ - (cb2) -> - request.post(inviteURL).send( - uuids: [party[0]._id] - ).end -> - cb2() - (cb2) -> - request.post(inviteURL).send( - uuids: [party[1]._id] - ).end -> - cb2() - (cb2) -> - request.post(inviteURL).send( - uuids: [party[2]._id] - ).end (res)-> - cb2() - ], cb - - # Accept / Reject - (results, cb) -> - - # series since they'll be modifying the same group record - series = _.reduce(party, (m, v, i) -> - m.push (cb2) -> - request.post(baseURL + "/groups/" + group._id + "/join").set("X-API-User", party[i]._id).set("X-API-Key", party[i].apiToken).end -> - cb2() - m - , []) - async.series series, cb - - # Make sure the invites stuck - (whatever, cb) -> - Group.findById group._id, (err, g) -> - group = g - expect(g.members.length).to.equal 4 - cb() - - ], -> - - # Start the quest - async.waterfall [ - (cb) -> - request.post(baseURL + "/groups/" + group._id + "/questAccept?key=vice3").end (res) -> - expectCode res, 400 - User.findByIdAndUpdate user._id, - $set: - "items.quests.vice3": 1 - , cb - - (_user, cb) -> - request.post(baseURL + "/groups/" + group._id + "/questAccept?key=vice3").end (res) -> - expectCode res, 200 - Group.findById group._id, cb - - (_group, cb) -> - expect(_group.quest.key).to.equal "vice3" - expect(_group.quest.active).to.equal false - request.post(baseURL + "/groups/" + group._id + "/questAccept").set("X-API-User", party[0]._id).set("X-API-Key", party[0].apiToken).end -> - request.post(baseURL + "/groups/" + group._id + "/questAccept").set("X-API-User", party[1]._id).set("X-API-Key", party[1].apiToken).end (res) -> - request.post(baseURL + "/groups/" + group._id + "/questReject").set("X-API-User", party[2]._id).set("X-API-Key", party[2].apiToken).end (res) -> - group = res.body - expect(group.quest.active).to.equal true - cb() - - ], done - ] - - it "Casts a spell", (done) -> - mp = user.stats.mp - request.get(baseURL + "/members/" + party[0]._id).end (res) -> - party[0] = res.body - request.post(baseURL + "/user/class/cast/snowball?targetType=user&targetId=" + party[0]._id).end (res) -> - - #expect(res.body.stats.mp).to.be.below(mp); - request.get(baseURL + "/members/" + party[0]._id).end (res) -> - 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 - - # level up user so str is > 0 - request.put(baseURL + "/user").send("stats.lvl": 5).end (res) -> - - # Refill mana so user can cast - request.put(baseURL + "/user").send("stats.mp": 100).end (res) -> - request.post(baseURL + "/user/class/cast/valorousPresence?targetType=party").end (res) -> - request.get(baseURL + "/members/" + member._id).end (res) -> - expect(res.body.stats.buffs.str).to.be.above 0 - expect(diff(res.body, member).length).to.equal 1 - done() - - it "Doesn't include people who aren't participating", (done) -> - request.get(baseURL + "/groups/" + group._id).end (res) -> - expect(_.size(res.body.quest.members)).to.equal 3 - done() - - it "allows quest participants to leave quest", (done) -> - leavingMember = party[1] - expect(group.quest.members[leavingMember._id]).to.eql(true) - - request.post(baseURL + "/groups/" + group._id + "/questLeave") - .set("X-API-User", leavingMember._id) - .set("X-API-Key", leavingMember.apiToken) - .end (err, res) -> - expectCode res, 204 - request.get(baseURL + '/groups/party') - .end (err, res) -> - expect(res.body.quest.members[leavingMember._id]).to.not.be.ok - done() - - xit "Hurts the boss", (done) -> - request.post(baseURL + "/user/batch-update").end (res) -> - user = res.body - up = user.party.quest.progress.up - expect(up).to.be.above 0 - - #{op:'score',params:{direction:'up',id:user.dailys[3].id}}, // leave one daily undone so Trapper hurts party - # set day to yesterday, cron will then be triggered on next action - 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 (res) -> - expect(res.body.party.quest.progress.up).to.be.above up - request.post(baseURL + "/user/batch-update").end -> - request.get(baseURL + "/groups/party").end (res) -> - - # Check boss damage - async.waterfall [ - (cb) -> - async.parallel [ - - #tavern boss - (cb2) -> - Group.findById "habitrpg", - quest: 1 - , (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 - cb2() - - # party boss - (cb2) -> - 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 - cb2() - ], cb - - # Kill the boss - (whatever, cb) -> - async.waterfall [ - - # tavern boss - (cb2) -> - expect(user.items.pets["MantisShrimp-Base"]).to.not.be.ok() - Group.update - _id: "habitrpg" - , - $set: - "quest.progress.hp": 0 - , cb2 - - # party boss - (arg1, arg2, cb2) -> - expect(user.items.gear.owned.weapon_special_2).to.not.be.ok() - Group.findByIdAndUpdate group._id, - $set: - "quest.progress.hp": 0 - , cb2 - ], cb - (_group, cb) -> - # set day to yesterday, cron will then be triggered on next action - 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 -> - cb() - - (cb) -> - request.post(baseURL + "/user/batch-update").end (res) -> - cb null, res.body - - (_user, cb) -> - - # need to load the user again, since tavern boss does update after user's cron - User.findById _user._id, cb - (_user, cb) -> - user = _user - Group.findById group._id, cb - (_group, cb) -> - 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 - - #//FIXME check that user got exp, but user is leveling up making the exp check difficult - # expect(user.stats.exp).to.be.above(cummExp); - # expect(user.stats.gp).to.be.above(cummGp); - async.parallel [ - - # Tavern Boss - (cb2) -> - Group.findById "habitrpg", (err, tavern) -> - - #use an explicit get because mongoose wraps the null in an object - 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 - cb2() - - # Party Boss - (cb2) -> - - #use an explicit get because mongoose wraps the null in an object - 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 - - # need to fetch users to get updated data - async.parallel [ - (cb3) -> - User.findById party[0].id, (err, mbr) -> - expect(mbr.items.gear.owned.weapon_special_2).to.equal true - cb3() - (cb3) -> - User.findById party[1].id, (err, mbr) -> - expect(mbr.items.gear.owned.weapon_special_2).to.equal true - cb3() - (cb3) -> - User.findById party[2].id, (err, mbr) -> - expect(mbr.items.gear.owned.weapon_special_2).to.not.be.ok() - cb3() - ], cb2 - ], cb - ], done diff --git a/test/api/pushNotifications.coffee b/test/api/pushNotifications.coffee deleted file mode 100644 index d7c23ce47c..0000000000 --- a/test/api/pushNotifications.coffee +++ /dev/null @@ -1,361 +0,0 @@ -'use strict' -#@TODO: Have to mock most things to get to the parts that -#call pushNotify. Consider refactoring group controller -#so things are easier to test - -app = require("../../website/src/server") -rewire = require('rewire') -sinon = require('sinon') - -describe "Push-Notifications", -> - before (done) -> - registerNewUser(done, true) - - describe "POST /user/pushDevice", -> - it "Registers a DeviceID", (done) -> - request.post(baseURL + "/user/pushDevice").send( - { regId: "123123", type: "android"} - ).end (res) -> - expectCode res, 200 - - User.findOne - _id: global.user._id - , (err, _user) -> - expect(_user.pushDevices.length).to.equal 1 - expect(_user.pushDevices[0].regId).to.equal "123123" - - done() - - describe "Events that send push notifications", -> - pushSpy = { sendNotify: sinon.spy() } - - afterEach (done) -> - pushSpy.sendNotify.reset() - done() - - context "Challenges", -> - challenges = rewire("../../website/src/controllers/challenges") - challenges.__set__('pushNotify', pushSpy) - challengeMock = { - findById: (arg, cb) -> - cb(null, {leader: user._id, name: 'challenge-name'}) - } - userMock = { - findById: (arg, cb) -> - cb(null, user) - } - - challenges.__set__('Challenge', challengeMock) - challenges.__set__('User', userMock) - challenges.__set__('closeChal', -> true) - - beforeEach (done) -> - registerNewUser -> - user.preferences.emailNotifications.wonChallenge = false - user.save = (cb) -> cb(null, user) - done() - , true - - it "sends a push notification when you win a challenge", (done) -> - req = { - params: { cid: 'challenge-id' } - query: {uid: 'user-id'} - } - res = { - locals: { user: user } - } - challenges.selectWinner req, res - - setTimeout -> # Allow selectWinner to finish - expect(pushSpy.sendNotify).to.have.been.calledOnce - expect(pushSpy.sendNotify).to.have.been.calledWith( - user, - 'You Won a Challenge', - 'challenge-name' - ) - done() - , 100 - - context "Groups", -> - - recipient = null - - groups = rewire("../../website/src/controllers/groups") - groups.__set__('pushNotify', pushSpy) - - before (done) -> - registerNewUser (err,_user)-> - recipient = _user - recipient.invitations.guilds = [] - recipient.save = (cb) -> cb(null, recipient) - recipient.preferences.emailNotifications.invitedGuild = false - recipient.preferences.emailNotifications.invitedParty = false - recipient.preferences.emailNotifications.invitedQuest = false - userMock = { - findById: (arg, cb) -> - cb(null, recipient) - find: (arg, arg2, cb) -> - cb(null, [recipient]) - update: (arg, arg2) -> - { exec: -> true} - } - groups.__set__('User', userMock) - done() - - , false - - it "sends a push notification when invited to a guild", (done) -> - group = { _id: 'guild-id', name: 'guild-name', type: 'guild', members: [user._id], invites: [] } - group.save = (cb) -> cb(null, group) - req = { - body: { uuids: [recipient._id] } - } - res = { - locals: { group: group, user: user } - json: -> return true - } - - groups.invite req, res - - setTimeout -> # Allow invite to finish - expect(pushSpy.sendNotify).to.have.been.calledOnce - expect(pushSpy.sendNotify).to.have.been.calledWith( - recipient, - 'Invited To Guild', - group.name - ) - done() - , 100 - - it "sends a push notification when invited to a party", (done) -> - group = { _id: 'party-id', name: 'party-name', type: 'party', members: [user._id], invites: [] } - group.save = (cb) -> cb(null, group) - req = { - body: { uuids: [recipient._id] } - } - res = { - locals: { group: group, user: user } - json: -> return true - } - - groups.invite req, res - - setTimeout -> # Allow invite to finish - expect(pushSpy.sendNotify).to.have.been.calledOnce - expect(pushSpy.sendNotify).to.have.been.calledWith( - recipient, - 'Invited To Party', - group.name - ) - done() - , 100 - - it "sends a push notification when invited to a quest", (done) -> - group = { _id: 'party-id', name: 'party-name', type: 'party', members: [user._id, recipient._id], invites: [], quest: {}} - user.items.quests.hedgehog = 5 - group.save = (cb) -> cb(null, group) - group.markModified = -> true - req = { - body: { uuids: [recipient._id] } - query: { key: 'hedgehog' } - } - res = { - locals: { group: group, user: user } - json: -> return true - } - - groups.questAccept req, res - - setTimeout -> # Allow questAccept to finish - expect(pushSpy.sendNotify).to.have.been.calledOnce - expect(pushSpy.sendNotify).to.have.been.calledWith( - recipient, - 'Quest Invitation', - 'Invitation for the Quest The Hedgebeast' - ) - done() - , 100 - - it "sends a push notification to participating members when quest starts", (done) -> - 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 = (cb) -> cb(null, group) - group.markModified = -> true - req = { - body: { uuids: [recipient._id] } - query: { } - # force: true - } - res = { - locals: { group: group, user: user } - json: -> return true - } - userMock = { - findOne: (arg, arg2, cb) -> - cb(null, recipient) - update: (arg, arg2, cb) -> - if (cb) - return cb(null, user) - else - return { - exec: -> true - } - } - groups.__set__('User', userMock) - groups.__set__('populateQuery', - (arg, arg2, arg3) -> - return { - exec: -> group.members - } - ) - - groups.questAccept req, res - - setTimeout -> # Allow questAccept to finish - expect(pushSpy.sendNotify).to.have.been.calledTwice - expect(pushSpy.sendNotify).to.have.been.calledWith( - recipient, - 'HabitRPG', - 'Your Quest has Begun: The Hedgebeast' - ) - done() - , 100 - - describe "Gifts", -> - - recipient = null - - before (done) -> - registerNewUser (err, _user) -> - recipient = _user - recipient.preferences.emailNotifications.giftedGems = false - user.balance = 4 - user.save = -> return true - recipient.save = -> return true - done() - , false - - context "sending gems from balance", -> - members = rewire("../../website/src/controllers/members") - members.sendMessage = -> true - - members.__set__('pushNotify', pushSpy) - members.__set__ 'fetchMember', (id) -> - return (cb) -> cb(null, recipient) - - it "sends a push notification", (done) -> - req = { - params: { uuid: "uuid" }, - body: { - type: 'gems', - gems: { amount: 1 } - } - } - res = { locals: { user: user } } - - members.sendGift req, res - - setTimeout -> # Allow sendGift to finish - expect(pushSpy.sendNotify).to.have.been.calledOnce - expect(pushSpy.sendNotify).to.have.been.calledWith( - recipient, - 'Gifted Gems', - '1 Gems - by ' + user.profile.name - ) - done() - , 100 - - describe "Purchases", -> - - payments = rewire("../../website/src/controllers/payments") - - payments.__set__('pushNotify', pushSpy) - membersMock = { sendMessage: -> true } - payments.__set__('members', membersMock) - - context "buying gems as a purchased gift", -> - - it "sends a push notification", (done) -> - data = { - user: user, - gift: { - member: recipient, - gems: { amount: 1 } - } - } - - payments.buyGems data - - setTimeout -> # Allow buyGems to finish - expect(pushSpy.sendNotify).to.have.been.calledOnce - expect(pushSpy.sendNotify).to.have.been.calledWith( - recipient, - 'Gifted Gems', - '1 Gems - by ' + user.profile.name - ) - - done() - , 100 - - it "does not send a push notification if buying gems for self", (done) -> - data = { - user: user, - gift: { - member: user - gems: { amount: 1 } - } - } - - payments.buyGems data - - setTimeout -> # Allow buyGems to finish - expect(pushSpy.sendNotify).to.not.have.been.called - - done() - , 100 - - context "sending a subscription as a purchased gift", -> - - it "sends a push notification", (done) -> - data = { - user: user, - gift: { - member: recipient - subscription: { key: 'basic_6mo' } - } - } - - payments.createSubscription data - - setTimeout -> # Allow createSubscription to finish - expect(pushSpy.sendNotify).to.have.been.calledOnce - expect(pushSpy.sendNotify).to.have.been.calledWith( - recipient, - 'Gifted Subscription', - '6 months - by ' + user.profile.name - ) - - done() - , 100 - - it "does not send a push notification if buying subscription for self", (done) -> - data = { - user: user, - gift: { - member: user - subscription: { key: 'basic_6mo' } - } - } - - payments.createSubscription data - - setTimeout -> # Allow buyGems to finish - expect(pushSpy.sendNotify).to.not.have.been.called - - done() - , 100 diff --git a/test/api/score.coffee b/test/api/score.coffee deleted file mode 100644 index a3b1b41826..0000000000 --- a/test/api/score.coffee +++ /dev/null @@ -1,114 +0,0 @@ -'use strict' - -require("../../website/src/server") - -describe "Score", -> - before (done) -> - registerNewUser done, true - - context "Todos that did not previously exist", -> - it "creates a completed a todo when using up url", (done) -> - request.post(baseURL + "/user/tasks/withUp/up").send( - type: "todo" - text: "withUp" - ).end (res) -> - expectCode res, 200 - request.get(baseURL + "/user/tasks/withUp").end (res) -> - upTodo = res.body - expect(upTodo.completed).to.equal true - done() - - it "creates an uncompleted todo when using down url", (done) -> - request.post(baseURL + "/user/tasks/withDown/down").send( - type: "todo" - text: "withDown" - ).end (res) -> - expectCode res, 200 - request.get(baseURL + "/user/tasks/withDown").end (res) -> - downTodo = res.body - expect(downTodo.completed).to.equal false - done() - - it "creates a completed a todo overriding the complete parameter when using up url", (done) -> - request.post(baseURL + "/user/tasks/withUpWithComplete/up").send( - type: "todo" - text: "withUpWithComplete" - completed: false - ).end (res) -> - expectCode res, 200 - request.get(baseURL + "/user/tasks/withUpWithComplete").end (res) -> - upTodo = res.body - expect(upTodo.completed).to.equal true - done() - - it "Creates an uncompleted todo overriding the completed parameter when using down url", (done) -> - request.post(baseURL + "/user/tasks/withDownWithUncomplete/down").send( - type: "todo" - text: "withDownWithUncomplete" - completed: true - ).end (res) -> - expectCode res, 200 - request.get(baseURL + "/user/tasks/withDownWithUncomplete").end (res) -> - downTodo = res.body - expect(downTodo.completed).to.equal false - done() - - context "Todo that already exists", -> - it "It completes a todo when using up url", (done) -> - request.post(baseURL + "/user/tasks").send( - type: "todo" - text: "Sample Todo" - ).end (res) -> - expectCode res, 200 - unCompletedTodo = res.body - expect(unCompletedTodo.completed).to.equal false - request.post(baseURL + "/user/tasks/"+unCompletedTodo._id+"/up").end (res) -> - expectCode res, 200 - request.get(baseURL + "/user/tasks/"+unCompletedTodo._id).end (res) -> - unCompletedTodo = res.body - expect(unCompletedTodo.completed).to.equal true - done() - - it "It uncompletes a todo when using down url", (done) -> - request.post(baseURL + "/user/tasks").send( - type: "todo" - text: "Sample Todo" - completed: true - ).end (res) -> - expectCode res, 200 - completedTodo = res.body - expect(completedTodo.completed).to.equal true - request.post(baseURL + "/user/tasks/"+completedTodo._id+"/down").end (res) -> - expectCode res, 200 - request.get(baseURL + "/user/tasks/"+completedTodo._id).end (res) -> - completedTodo = res.body - expect(completedTodo.completed).to.equal false - done() - - it "Creates and scores up a habit when using up url", (done) -> - upHabit = undefined - request.post(baseURL + "/user/tasks/habitWithUp/up").send( - type: "habit" - text: "testTitle" - completed: true - ).end (res) -> - expectCode res, 200 - request.get(baseURL + "/user/tasks/habitWithUp").end (res) -> - upHabit = res.body - expect(upHabit.value).to.be.at.least(1) - expect(upHabit.type).to.equal("habit") - done() - - it "Creates and scores down a habit when using down url", (done) -> - downHabit = undefined - request.post(baseURL + "/user/tasks/habitWithDown/down").send( - type: "habit" - text: "testTitle" - completed: true - ).end (res) -> - expectCode res, 200 - request.get(baseURL + "/user/tasks/habitWithDown").end (res) -> - downHabit = res.body - expect(downHabit.value).to.have.at.most(-1) - expect(downHabit.type).to.equal("habit") - done() diff --git a/test/api/status.coffee b/test/api/status.coffee deleted file mode 100644 index b70dca0ea5..0000000000 --- a/test/api/status.coffee +++ /dev/null @@ -1,13 +0,0 @@ -'use strict' - -app = require("../../website/src/server") - -describe "Site Status", -> - - describe "GET /status", -> - - it "/api/v2/status", (done) -> - request.get(baseURL + "/status").set("Accept", "application/json").end (res) -> - expect(res.statusCode).to.equal 200 - expect(res.body.status).to.equal "up" - done() diff --git a/test/api/subscriptions.coffee b/test/api/subscriptions.coffee deleted file mode 100644 index ca4e1da242..0000000000 --- a/test/api/subscriptions.coffee +++ /dev/null @@ -1,41 +0,0 @@ -'use strict' - -payments = require("../../website/src/controllers/payments") -app = require("../../website/src/server") - -describe "Subscriptions", -> - - before (done) -> - registerNewUser(done, true) - - it "Handles unsubscription", (done) -> - cron = -> - user.lastCron = moment().subtract(1, "d") - 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 - done() diff --git a/test/api/todos.coffee b/test/api/todos.coffee deleted file mode 100644 index 7b57378bf4..0000000000 --- a/test/api/todos.coffee +++ /dev/null @@ -1,185 +0,0 @@ -'use strict' - -require("../../website/src/server") - -describe "Todos", -> - - before (done) -> - registerNewUser done, true - - beforeEach (done) -> - User.findById user._id, (err, _user) -> - user = _user - shared.wrap user - done() - - it "Archives old todos", (done) -> - numTasks = _.size(user.todos) - 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 (res) -> - expectCode res, 200 - # Expect number of todos to be 3 greater than the number the user started with - expect(_.size(res.body.todos)).to.equal numTasks + 3 - # Assign new number to numTasks variable - numTasks += 3 - 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 (res) -> - expectCode res, 200 - expect(_.size(res.body.todos)).to.equal numTasks - 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 (res) -> - # Expect todos to be 2 less than the total count - expect(_.size(res.body.todos)).to.equal numTasks - 2 - done() - - describe "Creating, Updating, Deleting Todos", -> - todo = undefined - updateTodo = undefined - describe "Creating todos", -> - it "Creates a todo", (done) -> - request.post(baseURL + "/user/tasks").send( - type: "todo" - text: "Sample Todo" - ).end (res) -> - expectCode res, 200 - todo = res.body - expect(todo.text).to.equal "Sample Todo" - expect(todo.id).to.be.ok - expect(todo.value).to.equal 0 - done() - - it "Does not create a todo with an id that already exists", (done) -> - original_todo = { - type: "todo" - text: "original todo" - id: "custom-id" - } - duplicate_id_todo = { - type: "todo" - text: "not original todo" - id: "custom-id" - } - request.post(baseURL + "/user/tasks").send( - original_todo - ).end (res) -> - request.post(baseURL + "/user/tasks").send( - duplicate_id_todo - ).end (res) -> - expectCode res, 409 - expect(res.body.err).to.eql('A task with that ID already exists.') - done() - - describe "Updating todos", -> - it "Does not update id of todo", (done) -> - request.put(baseURL + "/user/tasks/" + todo.id).send( - id: "a-new-id" - ).end (res) -> - expectCode res, 200 - updateTodo = res.body - expect(updateTodo.id).to.equal todo.id - done() - - it "Does not update type of todo", (done) -> - request.put(baseURL + "/user/tasks/" + todo.id).send( - type: "habit" - ).end (res) -> - expectCode res, 200 - updateTodo = res.body - expect(updateTodo.type).to.equal todo.type - done() - - it "Does update text, attribute, priority, value, notes", (done) -> - request.put(baseURL + "/user/tasks/" + todo.id).send( - text: "Changed Title" - attribute: "int" - priority: 1.5 - value: 5 - notes: "Some notes" - ).end (res) -> - expectCode res, 200 - todo = res.body - expect(todo.text).to.equal "Changed Title" - expect(todo.attribute).to.equal "int" - expect(todo.priority).to.equal 1.5 - expect(todo.value).to.equal 5 - expect(todo.notes).to.equal "Some notes" - done() - - describe "Deleting todos", -> - it "Does delete todo", (done) -> - request.del(baseURL + "/user/tasks/" + todo.id).send( - ).end (res) -> - expectCode res, 200 - body = res.body - expect(body).to.be.empty - done() - - it "Does not delete already deleted todo", (done) -> - request.del(baseURL + "/user/tasks/" + todo.id).send( - ).end (res) -> - expectCode res, 404 - body = res.body - expect(body.err).to.equal "Task not found." - done() - - it "Does not update text, attribute, priority, value, notes if task is already deleted", (done) -> - request.put(baseURL + "/user/tasks/" + todo.id).send( - text: "New Title" - attribute: "str" - priority: 1 - value: 4 - notes: "Other notes" - ).end (res) -> - expectCode res, 404 - body = res.body - expect(body.err).to.equal "Task not found." - done() diff --git a/test/api/users.coffee b/test/api/users.coffee deleted file mode 100644 index 87f7897dde..0000000000 --- a/test/api/users.coffee +++ /dev/null @@ -1,276 +0,0 @@ -'use strict' - -User = require("../../website/src/models/user").model -app = require("../../website/src/server") - -describe "Users", -> - - describe "GET /user without token or user id", -> - - it "/api/v2/user", (done) -> - request - .get(baseURL + "/user") - .set("Accept", "application/json") - .set("X-API-User", '') - .set("X-API-Key", '') - .end (res) -> - expect(res.statusCode).to.equal 401 - expect(res.body.err).to.equal "You must include a token and uid (user id) in your request" - done() - - describe "GET /user with token or user id", -> - - before (done) -> - registerNewUser(done, true) - - it "/api/v2/user", (done) -> - request.get(baseURL + "/user").set("Accept", "application/json").end (res) -> - expect(res.statusCode).to.equal 200 - expect(res.body._id).to.equal user._id - done() - - describe "Deleting Users", -> - - before (done) -> - registerNewUser -> - done() - , true - - it 'Should delete a user', (done) -> - async.waterfall [ - (cb) -> - registerManyUsers 1, cb - - (_userToDelete, cb) -> - userToDelete = _userToDelete[0] - request.del(baseURL + "/user") - .set("X-API-User", userToDelete._id) - .set("X-API-Key", userToDelete.apiToken) - .end (res) -> - expectCode res, 200 - request.get(baseURL + "/user/" + userToDelete._id) - .end (res) -> - expectCode res, 404 - cb() - - ], done - - context "handle group changes when user cancels", -> - it "Should choose a new group leader when deleting a user", (done) -> - userToDelete = undefined - userToBecomeLeader = undefined - guildToHaveNewLeader = undefined - async.waterfall [ - (cb) -> - registerManyUsers 2, cb - - (_users, cb) -> - userToDelete = _users[0] - userToBecomeLeader = _users[1] - User.findByIdAndUpdate userToDelete._id, - $set: - "balance": 4 - , (err, _user) -> - cb() - - (cb) -> - request.post(baseURL + "/groups").send( - name: "GuildToGainNewLeader" - type: "guild" - ) - .set("X-API-User", userToDelete._id) - .set("X-API-Key", userToDelete.apiToken) - .end (res) -> - expectCode res, 200 - guildToHaveNewLeader = res.body - expect(guildToHaveNewLeader.leader).to.eql(userToDelete._id) - cb() - - (cb) -> - inviteURL = baseURL + "/groups/" + guildToHaveNewLeader._id + "/invite" - request.post(inviteURL) - .send( uuids: [userToBecomeLeader._id]) - .end (res) -> - expectCode res, 200 - cb() - - (cb) -> - request.post(baseURL + "/groups/" + guildToHaveNewLeader._id + "/join") - .set("X-API-User", userToBecomeLeader._id) - .set("X-API-Key", userToBecomeLeader.apiToken) - .end (res) -> - expectCode res, 200 - cb() - - (cb) -> - request.del(baseURL + "/user") - .set("X-API-User", userToDelete._id) - .set("X-API-Key", userToDelete.apiToken) - .end (res) -> - expectCode res, 200 - cb() - - (cb) -> - request.get(baseURL + "/groups/" + guildToHaveNewLeader._id) - .set("X-API-User", userToBecomeLeader._id) - .set("X-API-Key", userToBecomeLeader.apiToken) - .end (res) -> - expectCode res, 200 - g = res.body - userInGroup = _.find(g.members, (member) -> return member._id == userToDelete._id; ) - expect(userInGroup).to.equal(undefined) - expect(g.leader._id).to.equal(userToBecomeLeader._id) - cb() - - ], done - - context "handle group and invite removals", -> - guild = undefined - party = undefined - before (done) -> - User.findByIdAndUpdate user._id, - $set: - "balance": 4 - , (err, _user) -> - async.waterfall [ - (cb) -> - request.post(baseURL + "/groups").send( - name: "TestPrivateGroup" - type: "party" - ) - .end (res) -> - expectCode res, 200 - party = res.body - cb() - - (cb) -> - request.post(baseURL + "/groups").send( - name: "TestPrivateGroup" - type: "guild" - ) - .end (res) -> - expectCode res, 200 - guild = res.body - cb() - - ], done - - it 'Should remove a user from a group when deleting a user', (done) -> - userToDelete = undefined - async.waterfall [ - (cb) -> - registerManyUsers 1, cb - - # Send them invitations - (_users, cb) -> - userToDelete = _users[0] - inviteURL = baseURL + "/groups/" + party._id + "/invite" - request.post(inviteURL) - .send( uuids: [userToDelete._id]) - .end (res) -> - expectCode res, 200 - cb() - - (cb) -> - inviteURL = baseURL + "/groups/" + guild._id + "/invite" - request.post(inviteURL) - .send( uuids: [userToDelete._id]) - .end (res) -> - expectCode res, 200 - cb() - - (cb) -> - request.post(baseURL + "/groups/" + party._id + "/join") - .set("X-API-User", userToDelete._id) - .set("X-API-Key", userToDelete.apiToken) - .end (res) -> - expectCode res, 200 - cb() - - (cb) -> - request.post(baseURL + "/groups/" + guild._id + "/join") - .set("X-API-User", userToDelete._id) - .set("X-API-Key", userToDelete.apiToken) - .end (res) -> - expectCode res, 200 - cb() - - (cb) -> - request.del(baseURL + "/user") - .set("X-API-User", userToDelete._id) - .set("X-API-Key", userToDelete.apiToken) - .end (res) -> - expectCode res, 200 - cb() - - (cb) -> - request.get(baseURL + "/groups/" + party._id) - .end (res) -> - expectCode res, 200 - g = res.body - userInGroup = _.find(g.members, (member) -> return member._id == userToDelete._id; ) - expect(userInGroup).to.equal(undefined) - cb() - - (cb) -> - request.get(baseURL + "/groups/" + guild._id) - .end (res) -> - expectCode res, 200 - g = res.body - userInGroup = _.find(g.members, (member) -> return member._id == userToDelete._id; ); - expect(userInGroup).to.equal(undefined) - cb() - - ], done - - it 'Should remove invitations when deleting a user', (done) -> - userToDeleteInvites = undefined - async.waterfall [ - (cb) -> - registerManyUsers 1, cb - - # Send them invitations - (_users, cb) -> - userToDeleteInvites = _users[0] - inviteURL = baseURL + "/groups/" + party._id + "/invite" - request.post(inviteURL) - .send( uuids: [userToDeleteInvites._id]) - .end (res) -> - expectCode res, 200 - cb() - - (cb) -> - inviteURL = baseURL + "/groups/" + guild._id + "/invite" - request.post(inviteURL) - .send( uuids: [userToDeleteInvites._id]) - .end (res) -> - expectCode res, 200 - cb() - - (cb) -> - request.del(baseURL + "/user") - .set("X-API-User", userToDeleteInvites._id) - .set("X-API-Key", userToDeleteInvites.apiToken) - .end (res) -> - expectCode res, 200 - cb() - - (cb) -> - request.get(baseURL + "/groups/" + party._id) - .end (res) -> - expectCode res, 200 - g = res.body - userInviteForGroup = _.find(g.invites, (invite) -> return invite._id == userToDeleteInvites._id; ) - expect(userInviteForGroup).to.equal(undefined) - cb() - - (cb) -> - request.get(baseURL + "/groups/" + guild._id) - .end (res) -> - expectCode res, 200 - g = res.body - userInviteForGroup = _.find(g.invites, (invite) -> return invite._id == userToDeleteInvites._id; ) - expect(userInviteForGroup).to.equal(undefined) - cb() - - ], done diff --git a/test/api/v2/README.md b/test/api/v2/README.md new file mode 100644 index 0000000000..118f17078a --- /dev/null +++ b/test/api/v2/README.md @@ -0,0 +1,106 @@ +# So you want to write API integration tests? + +That's great! This README will serve as a quick primer for style conventions and practices for these tests. + +## What is this? + +These are integration tests for the Habitica API. They are performed by making REST requests to the API's endpoints and asserting on the data that is returned. + +If the javascript looks weird to you, that's because it's written in [ES2015](http://www.ecma-international.org/ecma-262/6.0/) and transpiled by [Babel](https://babeljs.io/docs/learn-es2015/). + +## How to run the tests + +First, install gulp. + +```bash +$ npm install -g gulp +``` + +To run the api tests, make sure the mongo db is up and running and then type this on the command line: + +```bash +$ gulp test:api-v2 +``` + +It may take a little while to get going, since it requires the web server to start up before the tests can run. + +You can also run a watch command for the api tests. This will allow the tests to re-run automatically when you make changes in the `/test/api/v2/`. + +```bash +$ gulp test:api-v2:watch +``` + +One caveat. If you have a severe syntax error in your files, the tests may fail to run, but they won't alert you that they are not running. If you ever find your test hanging for a while, run this to get the stackstrace. Once you've fixed the problem, you can resume running the watch comand. + +```bash +$ gulp test:api:safe +``` + +## Structure + +Each top level route has it's own directory. So, all the routes that begin with `/groups/` live in `/test/api/groups/`. + +Each test should: + + * encompase a single route + * begin with the REST parameter for the route + * display the full name of the route, swapping out `/` for `_` + * end with test.js + +So, for the `POST` route `/groups/:id/leave`, it would be + +```bash +POST-groups_id_leave.test.js +``` + +## Promises + +To mitigate [callback hell](http://callbackhell.com/) :imp:, we've written helper methods that [return promises](https://babeljs.io/docs/learn-es2015/#promises). This makes it very easy to chain together commands. All you need to do to make a subsequent request is return another promise and then call `.then((result) => {})` on the surrounding block, like so: + +```js +it('does something', () => { + let request; + return generateUser().then((user) => { // We return the initial promise so this test can be run asyncronously + request = requester(user); + return request.post('/groups', { + type: 'party', + }); + }).then((party) => { // the result of the promise above is the argument of the function + return request.put(`/groups/${party._id}`, { + name: 'My party', + }); + }).then((result) => { + return request.get('/groups/party'); + }).then((party) => { + expect(party.name).to.eql('My party'); + }); +}); +``` + +If the test is simple, you can use the [chai-as-promised](http://chaijs.com/plugins/chai-as-promised) `return expect(somePromise).to.eventually` syntax to make your assertion. + +```js +it('makes the party creator the leader automatically', () => { + let api = requester(user); + return expect(request.post('/groups', { + type: 'party', + })).to.eventually.have.deep.property('leader._id', user._id); +}); +``` + +If the test is checking that the request returns an error, use the `.eventually.be.rejected.and.eql` syntax. + +```js +it('returns an error', () => { + let api = requester(user); + return expect(request.get('/groups/id-of-a-party-that-user-does-not-belong-to')) + .to.eventually.be.rejected.and.eql({ + code: 404, + text: t('messageGroupNotFound'), + }); +}); +``` + +## Questions? + +Ask in the [Aspiring Coder's Guild](https://habitica.com/#/options/groups/guilds/68d4a01e-db97-4786-8ee3-05d612c5af6f)! diff --git a/test/api/v2/groups/GET-groups.test.js b/test/api/v2/groups/GET-groups.test.js new file mode 100644 index 0000000000..191afea663 --- /dev/null +++ b/test/api/v2/groups/GET-groups.test.js @@ -0,0 +1,122 @@ +import { + generateGroup, + generateUser, + resetHabiticaDB, + requester, +} from '../../../helpers/api-integration.helper'; + +describe('GET /groups', () => { + const NUMBER_OF_PUBLIC_GUILDS = 3; + const NUMBER_OF_USERS_GUILDS = 2; + + let user, api; + + before(() => { + let leader, createdGroup; + + // Set up a world with a mixture of public and private guilds + // Invite user to a few of them + return resetHabiticaDB().then(() => { + return generateUser(); + }).then((_user) => { + user = _user; + + return generateUser({ + balance: 10, + }); + }).then((_user) => { + leader = _user; + api = requester(leader); + + let publicGuildWithUserAsMember = generateGroup(leader, { + name: 'public guild - is member', + type: 'guild', + privacy: 'public', + members: [leader._id, user._id], + }); + + let publicGuildWithoutUserAsMember = generateGroup(leader, { + name: 'public guild - is not member', + type: 'guild', + privacy: 'public', + }); + + let privateGuildWithUserAsMember = generateGroup(leader, { + name: 'private guild - is member', + type: 'guild', + privacy: 'private', + members: [leader._id, user._id], + }); + + let privateGuildWithoutUserAsMember = generateGroup(leader, { + name: 'private guild - is not member', + type: 'guild', + privacy: 'private', + }); + + let partyWithoutUserAsMember = generateGroup(leader, { + name: 'party name', + type: 'party', + privacy: 'private', + }); + + let promises = [ + publicGuildWithUserAsMember, + publicGuildWithoutUserAsMember, + privateGuildWithUserAsMember, + privateGuildWithoutUserAsMember, + partyWithoutUserAsMember, + ]; + + return Promise.all(promises); + }).then((groups) => { + api = requester(user); + return api.post('/groups', { + type: 'party', + name: 'user\'s 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', () => { + return expect(api.get('/groups', null, {type: 'tavern'})) + .to.eventually.have.a.lengthOf(1) + .and.to.have.deep.property('[0]') + .and.to.have.property('_id', 'habitrpg'); + }); + }); + + context('party passed in as query', () => { + + it('returns only the user\'s party', () => { + return expect(api.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', () => { + return expect(api.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 ', () => { + return expect(api.get('/groups', null, {type: 'guilds'})) + .to.eventually.have.a.lengthOf(NUMBER_OF_USERS_GUILDS); + }); + }); +}); diff --git a/test/api/v2/groups/GET-groups_id.test.js b/test/api/v2/groups/GET-groups_id.test.js new file mode 100644 index 0000000000..3c2fda55b8 --- /dev/null +++ b/test/api/v2/groups/GET-groups_id.test.js @@ -0,0 +1,361 @@ +import { + createAndPopulateGroup, + generateUser, + requester, + translate as t, +} from '../../../helpers/api-integration.helper'; +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, (groupData, groupType) => { + context(`Member of a ${groupType}`, () => { + let leader, member, createdGroup; + + before(() => { + return createAndPopulateGroup({ + members: 30, + groupDetails: { + name: 'test guild', + type: 'guild', + privacy: 'public', + }, + }).then((res) => { + leader = res.leader; + member = res.members[0]; + createdGroup = res.group; + }); + }); + + it('returns the group object', () => { + let api = requester(member); + return api.get(`/groups/${createdGroup._id}`).then((group) => { + 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', () => { + let api = requester(member); + return api.get(`/groups/${createdGroup._id}`).then((group) => { + let member = group.members[0]; + expect(member._id).to.exist; + expect(member.profile.name).to.exist; + expect(member.contributor).to.exist; + expect(member.achievements).to.exist; + expect(member.items).to.exist; + }); + }); + + it('transforms leader id to leader object', () => { + let api = requester(member); + return api.get(`/groups/${createdGroup._id}`).then((group) => { + 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', () => { + let api = requester(member); + return api.get(`/groups/${createdGroup._id}`).then((group) => { + let members = group.members; + let userInGroup = find(members, (user) => { + return member._id === user._id; + }); + expect(userInGroup).to.be.ok; + }); + }); + }); + }); + + 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(() => { + return createAndPopulateGroup({ + groupDetails: { + name: 'test guild', + type: 'guild', + privacy: 'public', + chat: [ + chat1, + chat2, + chat3, + chat4, + chat5, + ], + }, + }).then((res) => { + group = res.group; + }); + }); + + context('non-admin', () => { + let api; + + beforeEach(() => { + return generateUser().then((user) => { + api = requester(user); + }); + }); + + it('does not include messages with a flag count of 2 or greater', () => { + return api.get(`/groups/${group._id}`).then((_group) => { + expect(_group.chat).to.have.lengthOf(3); + expect(_group.chat[0].id).to.eql(chat1.id); + expect(_group.chat[1].id).to.eql(chat2.id); + expect(_group.chat[2].id).to.eql(chat3.id); + }); + }); + + it('does not include user ids in flags object', () => { + return api.get(`/groups/${group._id}`).then((_group) => { + let chatWithOneFlag = _group.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 api; + + beforeEach(() => { + return generateUser({ + 'contributor.admin': true, + }).then((user) => { + api = requester(user); + }); + }); + + it('includes all messages', () => { + return api.get(`/groups/${group._id}`).then((_group) => { + expect(_group.chat).to.have.lengthOf(5); + expect(_group.chat[0].id).to.eql(chat1.id); + expect(_group.chat[1].id).to.eql(chat2.id); + expect(_group.chat[2].id).to.eql(chat3.id); + expect(_group.chat[3].id).to.eql(chat4.id); + expect(_group.chat[4].id).to.eql(chat5.id); + }); + }); + + it('includes user ids in flags object', () => { + return api.get(`/groups/${group._id}`).then((_group) => { + let chatWithOneFlag = _group.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 leader, nonMember, createdGroup; + + before(() => { + return createAndPopulateGroup({ + members: 1, + groupDetails: { + name: 'test guild', + type: 'guild', + privacy: 'public', + }, + }).then((res) => { + leader = res.leader; + createdGroup = res.group; + return generateUser(); + }).then((user) => { + nonMember = user; + }); + }); + + it('returns the group object for a non-member', () => { + let api = requester(nonMember); + return api.get(`/groups/${createdGroup._id}`) + .then((group) => { + 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', () => { + let api = requester(nonMember); + return api.get(`/groups/${createdGroup._id}`).then((group) => { + let userInGroup = find(group.members, (user) => { + return nonMember._id === user._id; + }); + expect(userInGroup).to.not.be.ok; + }); + }); + }); + + context('Private Guilds', () => { + let leader, nonMember, createdGroup; + + before(() => { + return createAndPopulateGroup({ + members: 1, + groupDetails: { + name: 'test guild', + type: 'guild', + privacy: 'private', + }, + }).then((res) => { + leader = res.leader; + createdGroup = res.group; + return generateUser(); + }).then((user) => { + nonMember = user; + }); + }); + + it('does not return the group object for a non-member', () => { + let api = requester(nonMember); + return expect(api.get(`/groups/${createdGroup._id}`)) + .to.eventually.be.rejected.and.eql({ + code: 404, + text: t('messageGroupNotFound'), + }); + }); + }); + + context('Non-member of a party', () => { + let leader, nonMember, createdGroup; + + before(() => { + return createAndPopulateGroup({ + members: 1, + groupDetails: { + name: 'test party', + type: 'party', + privacy: 'private', + }, + }).then((res) => { + leader = res.leader; + createdGroup = res.group; + return generateUser(); + }).then((user) => { + nonMember = user; + }); + }); + + it('does not return the group object for a non-member', () => { + let api = requester(nonMember); + return expect(api.get(`/groups/${createdGroup._id}`)) + .to.eventually.be.rejected.and.eql({ + code: 404, + text: t('messageGroupNotFound'), + }); + }); + }); + + context('Member of a party', () => { + let leader, member, createdGroup; + + before(() => { + return createAndPopulateGroup({ + members: 1, + groupDetails: { + name: 'test party', + type: 'party', + privacy: 'private', + }, + }).then((res) => { + leader = res.leader; + createdGroup = res.group; + member = res.members[0]; + }); + }); + + it('returns the user\'s party if an id of "party" is passed in', () => { + let api = requester(member); + return api.get('/groups/party') + .then((group) => { + 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(() => { + return generateUser().then((_user) => { + user = _user; + }); + }); + + it('returns error if group does not exist', () => { + let api = requester(user); + return expect(api.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 new file mode 100644 index 0000000000..2fb70e0a7a --- /dev/null +++ b/test/api/v2/groups/POST-groups.test.js @@ -0,0 +1,151 @@ +import { + generateGroup, + generateUser, + requester, + translate as t, +} from '../../../helpers/api-integration.helper'; + +describe('POST /groups', () => { + + context('All groups', () => { + let api, leader; + + beforeEach(() => { + return generateUser().then((user) => { + leader = user; + api = requester(user); + }); + }); + + 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?', () => { + return api.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', () => { + let group = { + name: 'Test Group', + type: 'party', + leaderOnly: { challenges: true }, + description: 'Test Group Description', + leaderMessage: 'Test Group Message', + }; + + return api.post('/groups', group).then((createdGroup) => { + expect(createdGroup._id).to.exist; + expect(createdGroup.leader).to.eql(leader._id); + expect(createdGroup.name).to.eql(group.name); + expect(createdGroup.description).to.eql(group.description); + expect(createdGroup.leaderMessage).to.eql(group.leaderMessage); + expect(createdGroup.leaderOnly).to.eql(group.leaderOnly); + expect(createdGroup.memberCount).to.eql(1); + }); + }); + + it('returns a populated members array', () => { + return api.post('/groups', { + type: 'party', + }).then((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 api, leader; + + beforeEach(() => { + return generateUser().then((user) => { + leader = user; + api = requester(user); + }); + }); + + it('allows party creation without gems', () => { + return expect(api.post('/groups', { + type: 'party', + })).to.eventually.have.property('_id'); + }); + + it('prevents party creation if user is already in party', () => { + return expect(generateGroup(leader, { + type: 'party', + }).then((group) => { + return api.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?', () => { + return expect(api.post('/groups', { + type: 'party', + privacy: 'public', + })).to.eventually.be.rejected.and.eql({ + code: 400, + text: 'Parties must be private', + }); + }); + }); + + context('Guilds', () => { + let api, leader; + + beforeEach(() => { + return generateUser({ + balance: 2, + }).then((user) => { + leader = user; + api = requester(user); + }); + }); + + it('prevents guild creation when user does not have enough gems', () => { + return expect(generateUser({ + balance: 0.75, + }).then((user) => { + api = requester(user); + return api.post('/groups', { + type: 'guild', + }); + })).to.eventually.be.rejected.and.eql({ + code: 401, + text: t('messageInsufficientGems'), + }); + }); + + it('can create a public guild', () => { + return expect(api.post('/groups', { + type: 'guild', + privacy: 'public', + })).to.eventually.have.property('leader', leader._id); + }); + + it('can create a private guild', () => { + return expect(api.post('/groups', { + type: 'guild', + privacy: 'private', + })).to.eventually.have.property('leader', leader._id); + }); + + it('deducts gems from user and adds them to guild bank', () => { + return expect(api.post('/groups', { + type: 'guild', + privacy: 'private', + }).then((group) => { + expect(group.balance).to.eql(1); + return api.get('/user'); + })).to.eventually.have.deep.property('balance', 1); + }); + }); +}); diff --git a/test/api/v2/groups/POST-groups_id.test.js b/test/api/v2/groups/POST-groups_id.test.js new file mode 100644 index 0000000000..d71f37a076 --- /dev/null +++ b/test/api/v2/groups/POST-groups_id.test.js @@ -0,0 +1,75 @@ +import { + generateGroup, + generateUser, + requester, + translate as t, +} from '../../../helpers/api-integration.helper'; + +describe('POST /groups/:id', () => { + + context('user is not the leader of the group', () => { + let api, user, otherUser, groupUserDoesNotOwn; + + beforeEach(() => { + return Promise.all([ + generateUser({ balance: 10 }), + generateUser({ balance: 10 }), + ]).then((users) => { + user = users[0]; + otherUser = users[1]; + api = requester(user); + + 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', () => { + return expect(api.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 api, user, usersGroup; + + beforeEach(() => { + return generateUser({ + balance: 10, + }).then((_user) => { + user = _user; + api = requester(user); + + return generateGroup(user, { + name: 'Original Group Title', + type: 'guild', + privacy: 'public', + }); + }).then((group) => { + usersGroup = group; + }); + }); + + it('allows user to update group', () => { + return api.post(`/groups/${usersGroup._id}`, { + name: 'New Group Title', + description: 'New group description', + }).then((group) => { + return api.get(`/groups/${usersGroup._id}`); + }).then((group) => { + expect(group.name).to.eql('New Group Title'); + expect(group.description).to.eql('New group description'); + }); + }); + }); +}); diff --git a/test/api/v2/groups/POST-groups_id_join.test.js b/test/api/v2/groups/POST-groups_id_join.test.js new file mode 100644 index 0000000000..ce00136f19 --- /dev/null +++ b/test/api/v2/groups/POST-groups_id_join.test.js @@ -0,0 +1,144 @@ +import { + createAndPopulateGroup, + generateUser, + requester, + translate as t, +} from '../../../helpers/api-integration.helper'; +import { each, find } 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'}, + }, (data, groupType) => { + context(`user has invitation to a ${groupType}`, () => { + let api, group, invitee; + + beforeEach(() => { + return createAndPopulateGroup({ + groupDetails: { + type: data.type, + privacy: data.privacy, + }, + invites: 1, + }).then((res) => { + group = res.group; + invitee = res.invitees[0]; + api = requester(invitee); + }); + }); + + it(`allows user to join a ${groupType}`, () => { + return api.post(`/groups/${group._id}/join`).then((res) => { + return api.get(`/groups/${group._id}`); + }).then((_group) => { + let members = _group.members; + let userInGroup = find(members, (user) => { + return user._id === invitee._id; + }); + + expect(userInGroup).to.exist; + }); + }); + }); + }); + + each({ + 'private guild': {type: 'guild', privacy: 'private'}, + 'party': {type: 'party', privacy: 'private'}, + }, (data, groupType) => { + context(`user does not have an invitation to a ${groupType}`, () => { + let api, group, user; + + beforeEach(() => { + return createAndPopulateGroup({ + groupDetails: { + type: data.type, + privacy: data.privacy, + }, + }).then((res) => { + group = res.group; + return generateUser(); + }).then((generatedUser) => { + user = generatedUser; + api = requester(user); + }); + }); + + it(`does not allow user to join a ${groupType}`, () => { + return expect(api.post(`/groups/${group._id}/join`).then((res) => { + return api.get(`/groups/${group._id}`); + })).to.eventually.be.rejected.and.eql({ + code: 401, + text: t('messageGroupRequiresInvite'), + }); + }); + }); + }); + + context('user does not have an invitation to a public group', () => { + let api, group, user; + + beforeEach(() => { + return createAndPopulateGroup({ + groupDetails: { + type: 'guild', + privacy: 'public', + }, + }).then((res) => { + group = res.group; + return generateUser(); + }).then((generatedUser) => { + user = generatedUser; + api = requester(user); + }); + }); + + it('allows user to join a public guild', () => { + return api.post(`/groups/${group._id}/join`).then((res) => { + return api.get(`/groups/${group._id}`); + }).then((_group) => { + let members = _group.members; + let userInGroup = find(members, (member) => { + return user._id === user._id; + }); + + expect(userInGroup).to.exist; + }); + }); + }); + + context('public guild has no leader', () => { + let user, group; + + beforeEach(() => { + return createAndPopulateGroup({ + groupDetails: { + name: 'test guild', + type: 'guild', + privacy: 'public', + }, + }).then((res) => { + group = res.group; + return requester(res.leader).post(`/groups/${group._id}/leave`); + }).then((res) => { + return generateUser(); + }).then((generatedUser) => { + user = generatedUser; + }); + }); + + it('makes the joining user the leader', () => { + let api = requester(user); + return expect(api.post(`/groups/${group._id}/join`).then((result) => { + return api.get(`/groups/${group._id}`); + })).to.eventually.have.deep.property('leader._id', 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 new file mode 100644 index 0000000000..408d7ca024 --- /dev/null +++ b/test/api/v2/groups/POST-groups_id_leave.test.js @@ -0,0 +1,161 @@ +import { + checkExistence, + createAndPopulateGroup, + generateUser, + requester, + translate as t, +} from '../../../helpers/api-integration.helper'; +import { find } from 'lodash'; + +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 api, user, group; + + beforeEach(() => { + return createAndPopulateGroup({ + members: 3, + groupDetails: { + name: 'test guild', + type: 'guild', + privacy: 'public', + }, + }).then((res) => { + user = res.members[0]; + api = requester(user); + group = res.group; + }); + }); + + it('leaves the group', () => { + return api.post(`/groups/${group._id}/leave`).then((result) => { + return api.get(`/groups/${group._id}`); + }).then((group) => { + let userInGroup = find(group.members, (member) => { + return member._id === user._id; + }); + expect(userInGroup).to.not.be.ok; + }); + }); + }); + + context('user is the last member of a public guild', () => { + let api, user, group; + + beforeEach(() => { + return createAndPopulateGroup({ + groupDetails: { + name: 'test guild', + type: 'guild', + privacy: 'public', + }, + }).then((res) => { + user = res.leader; + api = requester(user); + group = res.group; + }); + }); + + it('leaves the group accessible', () => { + return expect(api.post(`/groups/${group._id}/leave`).then((result) => { + return api.get(`/groups/${group._id}`); + })).to.eventually.have.property('_id', group._id); + }); + }); + + context('user is the last member of a private group', () => { + let api, user, group; + + beforeEach(() => { + return createAndPopulateGroup({ + groupDetails: { + name: 'test guild', + type: 'guild', + privacy: 'private', + }, + }).then((res) => { + user = res.leader; + api = requester(user); + group = res.group; + }); + }); + + it('group is deleted', () => { + return expect(api.post(`/groups/${group._id}/leave`).then((result) => { + return checkExistence('groups', group._id); + })).to.eventually.eql(false); + }); + }); + + context('user is the last member of a private group with pending invites', () => { + let api, user, inviteeRequest1, inviteeRequest2, group; + + beforeEach(() => { + return createAndPopulateGroup({ + invites: 2, + groupDetails: { + name: 'test guild', + type: 'guild', + privacy: 'private', + }, + }).then((res) => { + user = res.leader; + inviteeRequest1 = requester(res.invitees[0]); + inviteeRequest2 = requester(res.invitees[1]); + api = requester(user); + group = res.group; + }); + }); + + it('deletes the group invitations from users', () => { + return api.post(`/groups/${group._id}/leave`).then((result) => { + return Promise.all([ + expect(inviteeRequest1.get(`/user`)) + .to.eventually.have.deep.property('invitations.guilds') + .and.to.be.empty, + expect(inviteeRequest2.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 api, user, inviteeRequest1, inviteeRequest2, group; + + beforeEach(() => { + return createAndPopulateGroup({ + invites: 2, + groupDetails: { + name: 'test party', + type: 'party', + privacy: 'private', + }, + }).then((res) => { + user = res.leader; + inviteeRequest1 = requester(res.invitees[0]); + inviteeRequest2 = requester(res.invitees[1]); + api = requester(user); + group = res.group; + }); + }); + + it('deletes the group invitations from users', () => { + return api.post(`/groups/${group._id}/leave`).then((result) => { + return Promise.all([ + expect(inviteeRequest1.get(`/user`)) + .to.eventually.have.deep.property('invitations.party') + .and.to.be.empty, + expect(inviteeRequest2.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 new file mode 100644 index 0000000000..541f2fd736 --- /dev/null +++ b/test/api/v2/groups/POST-groups_id_removeMember.test.js @@ -0,0 +1,59 @@ +import { + createAndPopulateGroup, + generateGroup, + generateUser, + requester, + translate as t, +} from '../../../helpers/api-integration.helper'; + +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 api, leader, member, group; + + beforeEach(() => { + return createAndPopulateGroup({ + members: 1, + groupDetails: { + name: 'test group', + type: 'guild', + privacy: 'public', + }, + }).then((res) => { + leader = res.leader; + member = res.members[0]; + group = res.group; + + api = requester(leader); + }); + }); + + it('does not allow leader to remove themselves', () => { + return expect(api.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', () => { + return api.post(`/groups/${group._id}/removeMember`, null, { + uuid: member._id, + }).then((res) => { + return api.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 new file mode 100644 index 0000000000..10e79e3963 --- /dev/null +++ b/test/api/v2/groups/chat/DELETE-groups_id_chat.test.js @@ -0,0 +1,42 @@ +import { + createAndPopulateGroup, + generateUser, + requester, + translate as t, +} from '../../../../helpers/api-integration.helper'; + +describe('DELETE /groups/:id/chat', () => { + let api, group, message, user; + + beforeEach(() => { + return createAndPopulateGroup({ + groupDetails: { + type: 'guild', + privacy: 'public', + }, + }).then((res) => { + group = res.group; + user = res.leader; + api = requester(user); + + return api.post(`/groups/${group._id}/chat`, null, { message: 'Some message', }); + }).then((res) => { + message = res.message; + }); + }); + + it('deletes a message', () => { + return api.del(`/groups/${group._id}/chat/${message.id}`).then((res) => { + return api.get(`/groups/${group._id}/chat/`); + }).then((messages) => { + expect(messages).to.have.length(0); + }); + }); + + it('returns an error is message does not exist', () => { + return expect(api.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 new file mode 100644 index 0000000000..1d750e5e7e --- /dev/null +++ b/test/api/v2/groups/chat/GET-groups_id_chat.test.js @@ -0,0 +1,48 @@ +import { + createAndPopulateGroup, + generateUser, + requester, + translate as t, +} from '../../../../helpers/api-integration.helper'; + +describe('GET /groups/:id/chat', () => { + + context('group with multiple messages', () => { + let group, member, message1, message2, user; + + beforeEach(() => { + return createAndPopulateGroup({ + groupDetails: { + type: 'guild', + privacy: 'public', + }, + members: 1, + }).then((res) => { + group = res.group; + user = res.leader; + member = res.members[0]; + + return requester(member).post(`/groups/${group._id}/chat`, null, { message: 'Group member message' }); + }).then((res) => { + message1 = res.message; + + return requester(user).post(`/groups/${group._id}/chat`, null, { message: 'User message' }); + }).then((res) => { + message2 = res.message; + }); + }); + + it('gets messages', () => { + let api = requester(user); + + return api.get(`/groups/${group._id}/chat`).then((messages) => { + 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 new file mode 100644 index 0000000000..6a4f3a0c05 --- /dev/null +++ b/test/api/v2/groups/chat/POST-groups_id_chat.test.js @@ -0,0 +1,46 @@ +import { + createAndPopulateGroup, + generateUser, + requester, + translate as t, +} from '../../../../helpers/api-integration.helper'; + +describe('POST /groups/:id/chat', () => { + + let api, group, user; + + beforeEach(() => { + return createAndPopulateGroup({ + groupDetails: { + type: 'guild', + privacy: 'public', + }, + }).then((res) => { + group = res.group; + user = res.leader; + api = requester(user); + }); + }); + + it('creates a chat message', () => { + return api.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', () => { + return expect(api.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 new file mode 100644 index 0000000000..e6873c96b1 --- /dev/null +++ b/test/api/v2/groups/chat/POST-groups_id_chat_id_clearflags.test.js @@ -0,0 +1,140 @@ +import { + createAndPopulateGroup, + generateUser, + requester, + translate as t, +} from '../../../../helpers/api-integration.helper'; + +describe('POST /groups/:id/chat/:id/clearflags', () => { + let group; + + beforeEach(() => { + return createAndPopulateGroup({ + groupDetails: { + type: 'guild', + privacy: 'public', + members: 1, + flagCount: 1, + chat: [{ + id: 'message-to-clear', + flagCount: 1, + flags: { 'some-id': true }, + }], + }, + }).then((res) => { + group = res.group; + }); + }); + + context('non admin', () => { + let api; + + beforeEach(() => { + return generateUser().then((user) => { + api = requester(user); + }); + }); + + it('cannot clear flags', () => { + return expect(api.post(`/groups/${group._id}/chat/message-to-clear/clearflags`)) + .to.eventually.be.rejected.and.eql({ + code: 401, + text: t('messageGroupChatAdminClearFlagCount'), + }); + }); + }); + + context('admin', () => { + let api; + + beforeEach(() => { + return generateUser({ + 'contributor.admin': true, + }).then((user) => { + api = requester(user); + }); + }); + + it('clears flags', () => { + return api.post(`/groups/${group._id}/chat/message-to-clear/clearflags`).then((res) => { + return api.get(`/groups/${group._id}/chat`); + }).then((messages) => { + expect(messages[0].flagCount).to.eql(0); + }); + }); + + it('leaves old flags on the flag object', () => { + return api.post(`/groups/${group._id}/chat/message-to-clear/clearflags`).then((res) => { + return api.get(`/groups/${group._id}/chat`); + }).then((messages) => { + expect(messages[0].flags).to.have.property('some-id', true); + }); + }); + + it('returns error if message does not exist', () => { + return expect(api.post(`/groups/${group._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, group, member; + + beforeEach(() => { + return generateUser().then((user) => { + author = user; + + return 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, + }); + }).then((res) => { + group = res.group; + return generateUser({ + 'contributor.admin': true, + }); + }).then((user) => { + admin = user; + }); + }); + + it('changes only the message that is flagged', () => { + let api = requester(admin); + + return api.post(`/groups/${group._id}/chat/message-to-unflag/clearflags`).then((messages) => { + return api.get(`/groups/${group._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 new file mode 100644 index 0000000000..dc204e940d --- /dev/null +++ b/test/api/v2/groups/chat/POST-groups_id_chat_id_flag.test.js @@ -0,0 +1,211 @@ +import { + createAndPopulateGroup, + generateUser, + requester, + translate as t, +} from '../../../../helpers/api-integration.helper'; + +describe('POST /groups/:id/chat/:id/flag', () => { + + context('another member\'s message', () => { + let group, member, message, user; + + beforeEach(() => { + return createAndPopulateGroup({ + groupDetails: { + type: 'guild', + privacy: 'public', + }, + members: 1, + }).then((res) => { + group = res.group; + user = res.leader; + member = res.members[0]; + + return requester(member) + .post(`/groups/${group._id}/chat`, null, { message: 'Group member message', }); + }).then((res) => { + message = res.message; + }); + }); + + it('flags message', () => { + let api = requester(user); + + return api.post(`/groups/${group._id}/chat/${message.id}/flag`).then((messages) => { + return api.get(`/groups/${group._id}/chat`); + }).then((messages) => { + let message = messages[0]; + expect(message.flagCount).to.eql(1); + }); + }); + + it('cannot flag the same message twice', () => { + let api = requester(user); + + return expect(api.post(`/groups/${group._id}/chat/${message.id}/flag`).then((messages) => { + return api.post(`/groups/${group._id}/chat/${message.id}/flag`); + })).to.eventually.be.rejected.and.eql({ + code: 401, + text: t('messageGroupChatFlagAlreadyReported'), + }); + }); + }); + + context('own message', () => { + let api, group, message, user; + + beforeEach(() => { + return createAndPopulateGroup({ + groupDetails: { + type: 'guild', + privacy: 'public', + members: 1, + }, + }).then((res) => { + group = res.group; + user = res.leader; + api = requester(user); + + return api.post(`/groups/${group._id}/chat`, null, { message: 'User\'s own message', }); + }).then((res) => { + message = res.message; + }); + }); + + it('cannot flag message', () => { + let api = requester(user); + + return expect(api.post(`/groups/${group._id}/chat/${message.id}/flag`)) + .to.eventually.be.rejected.and.eql({ + code: 401, + text: t('messageGroupChatFlagOwnMessage'), + }); + }); + }); + + context('nonexistant message', () => { + let api, group, message, user; + + beforeEach(() => { + return createAndPopulateGroup({ + groupDetails: { + type: 'guild', + privacy: 'public', + }, + }).then((res) => { + group = res.group; + user = res.leader; + api = requester(user); + }); + }); + + it('returns error', () => { + let api = requester(user); + + return expect(api.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, member, message, user; + + beforeEach(() => { + return generateUser().then((user) => { + author = user; + + return 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, + }); + }).then((res) => { + group = res.group; + user = res.leader; + member = res.members[0]; + return generateUser({ + 'contributor.admin': true, + }); + }).then((user) => { + admin = user; + }); + }); + + it('changes only the message that is flagged', () => { + let api = requester(user); + + return api.post(`/groups/${group._id}/chat/message-to-be-flagged/flag`).then((messages) => { + return requester(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(() => { + return createAndPopulateGroup({ + groupDetails: { + type: 'guild', + privacy: 'public', + }, + leaderDetails: { + 'contributor.admin': true, + balance: 10, + }, + members: 1, + }).then((res) => { + group = res.group; + user = res.leader; + member = res.members[0]; + + return requester(member) + .post(`/groups/${group._id}/chat`, null, { message: 'Group member message', }); + }).then((res) => { + message = res.message; + }); + }); + + it('sets flagCount to 5', () => { + let api = requester(user); + + return api.post(`/groups/${group._id}/chat/${message.id}/flag`).then((messages) => { + return api.get(`/groups/${group._id}/chat`); + }).then((messages) => { + let message = messages[0]; + expect(message.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 new file mode 100644 index 0000000000..a89a83742f --- /dev/null +++ b/test/api/v2/groups/chat/POST-groups_id_chat_id_like.test.js @@ -0,0 +1,171 @@ +import { + createAndPopulateGroup, + generateUser, + requester, + translate as t, +} from '../../../../helpers/api-integration.helper'; + +describe('POST /groups/:id/chat/:id/like', () => { + + context('another member\'s message', () => { + let group, member, message, user; + + beforeEach(() => { + return createAndPopulateGroup({ + groupDetails: { + type: 'guild', + privacy: 'public', + }, + members: 1, + }).then((res) => { + group = res.group; + user = res.leader; + member = res.members[0]; + + return requester(member) + .post(`/groups/${group._id}/chat`, null, { message: 'Group member message', }); + }).then((res) => { + message = res.message; + }); + }); + + it('likes message', () => { + let api = requester(user); + + return api.post(`/groups/${group._id}/chat/${message.id}/like`).then((messages) => { + let message = messages[0]; + expect(message.likes[user._id]).to.eql(true); + }); + }); + + it('returns the message object', () => { + let api = requester(user); + + return api.post(`/groups/${group._id}/chat/${message.id}/like`).then((messages) => { + let message = messages[0]; + expect(message.text).to.eql('Group member message'); + expect(message.uuid).to.eql(member._id); + expect(message.user).to.eql(member.profile.name); + }); + }); + }); + + context('own message', () => { + let api, group, message, user; + + beforeEach(() => { + return createAndPopulateGroup({ + groupDetails: { + type: 'guild', + privacy: 'public', + members: 1, + }, + }).then((res) => { + group = res.group; + user = res.leader; + api = requester(user); + + return api.post(`/groups/${group._id}/chat`, null, { message: 'User\'s own message', }); + }).then((res) => { + message = res.message; + }); + }); + + it('cannot like message', () => { + let api = requester(user); + + return expect(api.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, member, message, user; + + beforeEach(() => { + return generateUser().then((user) => { + author = user; + + return 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, + }); + }).then((res) => { + group = res.group; + user = res.leader; + member = res.members[0]; + return generateUser({ + 'contributor.admin': true, + }); + }).then((user) => { + admin = user; + }); + }); + + it('changes only the message that is liked', () => { + let api = requester(user); + + return api.post(`/groups/${group._id}/chat/message-to-be-liked/like`).then((messages) => { + return requester(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 api, group, message, user; + + beforeEach(() => { + return createAndPopulateGroup({ + groupDetails: { + type: 'guild', + privacy: 'public', + }, + }).then((res) => { + group = res.group; + user = res.leader; + api = requester(user); + }); + }); + + it('returns error', () => { + let api = requester(user); + + return expect(api.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/register/POST-register.test.js b/test/api/v2/register/POST-register.test.js new file mode 100644 index 0000000000..a4d1987002 --- /dev/null +++ b/test/api/v2/register/POST-register.test.js @@ -0,0 +1,294 @@ +import { + generateUser, + requester, + translate as t, +} from '../../../helpers/api-integration.helper'; +import { v4 as generateRandomUserName } from 'uuid'; +import { each } from 'lodash'; + +describe('POST /register', () => { + + context('username and email are free', () => { + it('registers a new user', () => { + let api = requester(); + let username = generateRandomUserName(); + let email = `${username}@example.com`; + let password = 'password'; + + return api.post('/register', { + username: username, + email: email, + password: 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', () => { + let api = requester(); + let username = generateRandomUserName(); + let email = `${username}@example.com`; + let password = 'password'; + let confirmPassword = 'not password'; + + return expect(api.post('/register', { + username: username, + email: email, + password: password, + confirmPassword: confirmPassword, + })).to.eventually.be.rejected.and.eql({ + code: 401, + text: t('messageAuthPasswordMustMatch'), + }); + }); + + it('requires a username', () => { + let api = requester(); + let email = `${generateRandomUserName()}@example.com`; + let password = 'password'; + let confirmPassword = 'password'; + + return expect(api.post('/register', { + email: email, + password: password, + confirmPassword: confirmPassword, + })).to.eventually.be.rejected.and.eql({ + code: 401, + text: t('messageAuthCredentialsRequired'), + }); + }); + + it('requires an email', () => { + let api = requester(); + let username = generateRandomUserName(); + let password = 'password'; + let confirmPassword = 'password'; + + return expect(api.post('/register', { + username: username, + password: password, + confirmPassword: confirmPassword, + })).to.eventually.be.rejected.and.eql({ + code: 401, + text: t('messageAuthCredentialsRequired'), + }); + }); + + it('requires a password', () => { + let api = requester(); + let username = generateRandomUserName(); + let email = `${username}@example.com`; + let confirmPassword = 'password'; + + return expect(api.post('/register', { + username: username, + email: email, + confirmPassword: confirmPassword, + })).to.eventually.be.rejected.and.eql({ + code: 401, + text: t('messageAuthCredentialsRequired'), + }); + }); + }); + + context('login is already taken', () => { + let username, email; + beforeEach(() => { + 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', () => { + let api = requester(); + let uniqueEmail = `${generateRandomUserName()}@exampe.com`; + let password = 'password'; + + return expect(api.post('/register', { + username: username, + email: uniqueEmail, + password: password, + confirmPassword: password, + })).to.eventually.be.rejected.and.eql({ + code: 401, + text: t('messageAuthUsernameTaken'), + }); + }); + + it('rejects if email is already taken', () => { + let api = requester(); + let uniqueUsername = generateRandomUserName(); + let password = 'password'; + + return expect(api.post('/register', { + username: uniqueUsername, + email: email, + password: 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(() => { + api = requester(); + username = generateRandomUserName(); + email = `${username}@example.com`; + password = 'password'; + }); + + it('sets all site tour values to -2 (already seen)', () => { + return api.post('/register', { + username: username, + email: email, + password: password, + confirmPassword: password, + }).then((user) => { + expect(user.flags.tour).to.not.be.empty; + + each(user.flags.tour, (value, attribute) => { + expect(value).to.eql(-2); + }); + }); + }); + + it('populates user with default todos, not no other task types', () => { + return api.post('/register', { + username: username, + email: email, + password: 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', () => { + return api.post('/register', { + username: username, + email: email, + password: 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(() => { + api = requester({}, {'x-client': 'habitica-web'}); + username = generateRandomUserName(); + email = `${username}@example.com`; + password = 'password'; + }); + + it('sets all common tutorial flags to true', () => { + return api.post('/register', { + username: username, + email: email, + password: password, + confirmPassword: password, + }).then((user) => { + expect(user.flags.tour).to.not.be.empty; + + each(user.flags.tutorial.common, (value, attribute) => { + expect(value).to.eql(true); + }); + }); + }); + + it('populates user with default todos, habits, and rewards', () => { + return api.post('/register', { + username: username, + email: email, + password: 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', () => { + return api.post('/register', { + username: username, + email: email, + password: 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(() => { + api = requester({}, {'x-client': 'habitica-android'}); + username = generateRandomUserName(); + email = `${username}@example.com`; + password = 'password'; + }); + + it('sets all common tutorial flags to true', () => { + return api.post('/register', { + username: username, + email: email, + password: password, + confirmPassword: password, + }).then((user) => { + expect(user.flags.tour).to.not.be.empty; + + each(user.flags.tutorial.common, (value, attribute) => { + expect(value).to.eql(true); + }); + }); + }); + + it('populates user with default todos, habits, and rewards', () => { + return api.post('/register', { + username: username, + email: email, + password: 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', () => { + return api.post('/register', { + username: username, + email: email, + password: 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 new file mode 100644 index 0000000000..d5b5c2513f --- /dev/null +++ b/test/api/v2/status/GET-status.test.js @@ -0,0 +1,10 @@ +import {requester} from '../../../helpers/api-integration.helper'; + +describe('Status', () => { + + it('returns a status of up when server is up', () => { + let api = requester(); + return 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 new file mode 100644 index 0000000000..7958c7fddd --- /dev/null +++ b/test/api/v2/user/DELETE-user.test.js @@ -0,0 +1,176 @@ +import { + checkExistence, + createAndPopulateGroup, + generateGroup, + generateUser, + requester, + translate as t, +} from '../../../helpers/api-integration.helper'; +import { find } from 'lodash'; + +describe('DELETE /user', () => { + let api, user; + + beforeEach(() => { + return generateUser().then((usr) => { + api = requester(usr); + user = usr; + }); + }); + + it('deletes the user', () => { + return expect(api.del('/user').then((fetchedUser) => { + return checkExistence('users', user._id); + })).to.eventually.eql(false); + }); + + context('user has active subscription', () => { + it('does not delete account'); + }); + + context('last member of a party', () => { + let party; + + beforeEach(() => { + return generateGroup(user, { + type: 'party', + privacy: 'private' + }).then((group) => { + party = group; + }); + }); + + it('deletes party when user is the only member', () => { + return expect(api.del('/user').then((result) => { + return checkExistence('groups', party._id); + })).to.eventually.eql(false); + }); + }); + + context('last member of a private guild', () => { + let guild; + + beforeEach(() => { + return generateGroup(user, { + type: 'guild', + privacy: 'private' + }).then((group) => { + guild = group; + }); + }); + + it('deletes guild when user is the only member', () => { + return expect(api.del('/user').then((result) => { + return checkExistence('groups', guild._id); + })).to.eventually.eql(false); + }); + }); + + context('groups user is leader of', () => { + let api, group, oldLeader, newLeader; + + beforeEach(() => { + return createAndPopulateGroup({ + groupDetails: { + type: 'guild', + privacy: 'public', + }, + members: 3, + }).then((res) => { + group = res.group; + newLeader = res.members[0]; + oldLeader = res.leader; + api = requester(oldLeader); + }); + }); + + it('chooses new group leader for any group user was the leader of', () => { + return api.del('/user').then((res) => { + return requester(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 api, group1, group2, userToDelete, otherUser; + + beforeEach(() => { + return generateUser({ + balance: 10, + }).then((user) => { + userToDelete = user; + api = requester(userToDelete); + + 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 api.post(`/groups/${group2._id}/join`); + }); + }); + + it('removes user from all groups user was a part of', () => { + return api.del('/user').then((res) => { + return requester(otherUser).get(`/groups/${group1._id}`); + }).then((fetchedGroup1) => { + expect(fetchedGroup1.members).to.be.empty; + + return requester(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 api, group, userToDelete, otherUser; + + beforeEach(() => { + 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', () => { + return requester(userToDelete).del('/user').then((res) => { + return requester(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 new file mode 100644 index 0000000000..d370f4cb0a --- /dev/null +++ b/test/api/v2/user/GET-user.test.js @@ -0,0 +1,33 @@ +import { + generateUser, + requester, +} from '../../../helpers/api-integration.helper'; + +describe('GET /user', () => { + let user; + + before(() => { + return generateUser().then((usr) => { + let api = requester(usr); + return api.get('/user'); + }).then((fetchedUser) => { + user = fetchedUser; + }); + }); + + it('gets the user object', () => { + 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', () => { + expect(user.auth.local.hashed_password).to.not.exist + expect(user.auth.local.salt).to.not.exist + }); + + it('does not include api token', () => { + 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 new file mode 100644 index 0000000000..e652a8fcf1 --- /dev/null +++ b/test/api/v2/user/GET-user_tags.test.js @@ -0,0 +1,20 @@ +import { + generateUser, + requester, +} from '../../../helpers/api-integration.helper'; + +describe('GET /user/tags', () => { + let api, user; + + beforeEach(() => { + return generateUser().then((usr) => { + user = usr; + api = requester(usr); + }); + }); + + it('gets the user\'s tags', () => { + return expect(api.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 new file mode 100644 index 0000000000..e7678caec0 --- /dev/null +++ b/test/api/v2/user/GET-user_tags_id.test.js @@ -0,0 +1,29 @@ +import { + generateUser, + requester, + translate as t, +} from '../../../helpers/api-integration.helper'; + +describe('GET /user/tags/id', () => { + let api, user; + + beforeEach(() => { + return generateUser().then((usr) => { + user = usr; + api = requester(usr); + }); + }); + + it('gets a user\'s tag by id', () => { + return expect(api.get('/user/tags/' + user.tags[0].id)) + .to.eventually.eql(user.tags[0]); + }); + + it('fails for non-existent tags', () => { + return expect(api.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 new file mode 100644 index 0000000000..87a8898008 --- /dev/null +++ b/test/api/v2/user/PUT-user.test.js @@ -0,0 +1,76 @@ +import { + generateUser, + requester, + translate as t, +} from '../../../helpers/api-integration.helper'; + +import { each } from 'lodash'; + +describe('PUT /user', () => { + let api, user; + + beforeEach(() => { + return generateUser().then((usr) => { + user = usr; + api = requester(user); + }); + }); + + context('allowed operations', () => { + it('updates the user', () => { + return api.put('/user', { + 'profile.name' : 'Frodo', + 'preferences.costume': true, + 'stats.hp': 14, + }).then((updatedUser) => { + expect(updatedUser.profile.name).to.eql('Frodo'); + expect(updatedUser.preferences.costume).to.eql(true); + expect(updatedUser.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}`, () => { + let errorText = []; + each(data, (value, operation) => { + errorText.push(t('messageUserOperationProtected', { operation: operation })); + }); + return expect(api.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}`, () => { + let errorText = []; + each(data, (value, operation) => { + errorText.push(t('messageUserOperationProtected', { operation: operation })); + }); + return expect(api.put('/user', data)).to.eventually.be.rejected.and.eql({ + code: 401, + text: errorText, + }); + }); + }); + }); +}); diff --git a/test/api/v2/user/anonymized/GET-user_anonymized.test.js b/test/api/v2/user/anonymized/GET-user_anonymized.test.js new file mode 100644 index 0000000000..b4cb5cb2b0 --- /dev/null +++ b/test/api/v2/user/anonymized/GET-user_anonymized.test.js @@ -0,0 +1,102 @@ +import { + generateUser, + requester, +} from '../../../../helpers/api-integration.helper'; +import { each } from 'lodash'; + +describe('GET /user/anonymized', () => { + let api, user; + + before(() => { + return 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 + } + } + }).then((usr) => { + api = requester(usr); + return api.post('/user/tasks', { + text: 'some private text', + notes: 'some private notes', + checklist: [ + {text: 'a private checklist'}, + {text: 'another private checklist'}, + ], + type: 'daily', + }); + }).then((result) => { + return api.get('/user/anonymized'); + }).then((anonymizedUser) => { + user = anonymizedUser; + }); + }); + + it('retains user id', () => { + expect(user._id).to.exist; + }); + + it('removes credentials and financial information', () => { + expect(user.apiToken).to.not.exist; + expect(user.auth.local).to.not.exist; + expect(user.auth.facebook).to.not.exist; + expect(user.purchased.plan).to.not.exist; + }); + + it('removes profile information', () => { + expect(user.profile).to.not.exist; + expect(user.contributor).to.not.exist; + expect(user.achievements.challenges).to.not.exist; + }); + + it('removes social information', () => { + expect(user.newMessages).to.not.exist; + expect(user.invitations).to.not.exist; + expect(user.items.special.nyeReceived).to.not.exist; + expect(user.items.special.valentineReceived).to.not.exist; + + each(user.inbox.messages, (msg) => { + expect(msg.text).to.eql('inbox message text'); + }); + }); + + it('anonymizes task info', () => { + each(['habits', 'todos', 'dailys', 'rewards'], (tasks) => { + each(user[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', () => { + each(user.tags, (tag) => { + expect(tag.name).to.eql('tag'); + expect(tag.challenge).to.eql('challenge'); + }); + }); + + it('removes webhooks', () => { + expect(user.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 new file mode 100644 index 0000000000..c1b1e499b4 --- /dev/null +++ b/test/api/v2/user/batch-update/POST-user_batch-update.test.js @@ -0,0 +1,69 @@ +import { + generateUser, + requester, + translate as t, +} from '../../../../helpers/api-integration.helper'; + +import { each } from 'lodash'; + +describe('POST /user/batch-update', () => { + let api, user; + + beforeEach(() => { + return generateUser().then((usr) => { + user = usr; + api = requester(user); + }); + }); + + context('allowed operations', () => { + it('makes batch operations', () => { + let task; + + return api.get('/user/tasks').then((tasks) => { + task = tasks[0]; + return api.post('/user/batch-update', [ + {op: 'update', body: {'stats.hp': 30}}, + {op: 'update', body: {'profile.name': 'Samwise'}}, + {op: 'score', params: { direction: 'up', id: task.id }}, + ]); + }).then((user) => { + expect(user.stats.hp).to.eql(30); + expect(user.profile.name).to.eql('Samwise'); + return api.get(`/user/tasks/${task.id}`); + }).then((task) => { + expect(task.value).to.be.greaterThan(0); + }); + }); + }); + + context('development only operations', () => { + let protectedOperations = { + 'Add Ten Gems': 'addTenGems', + 'Add Hourglass': 'addHourglass', + }; + + each(protectedOperations, (operation, description) => { + + it(`it sends back a 500 error for ${description} operation`, () => { + return expect(api.post('/user/batch-update', [ + {op: operation}, + ])).to.eventually.be.rejected.and.eql({ + code: 500, + text: t('messageUserOperationNotFound', { operation: operation}), + }); + }); + }); + }); + + context('unknown operations', () => { + it('sends back a 500 error', () => { + return expect(api.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 new file mode 100644 index 0000000000..1b5ae41681 --- /dev/null +++ b/test/api/v2/user/pushDevice/POST-pushDevice.test.js @@ -0,0 +1,26 @@ +import { + generateUser, + requester, +} from '../../../../helpers/api-integration.helper'; + +describe('POST /user/pushDevice', () => { + let api; + + beforeEach(() => { + return generateUser().then((user) => { + api = requester(user); + }); + }); + + it('registers a device id', () => { + return api.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 new file mode 100644 index 0000000000..72c18f6b6c --- /dev/null +++ b/test/api/v2/user/tasks/DELETE-tasks_id.test.js @@ -0,0 +1,45 @@ +import { + generateUser, + requester, + translate as t, +} from '../../../../helpers/api-integration.helper'; + +describe('DELETE /user/tasks/:id', () => { + let api, user, task; + + beforeEach(() => { + return generateUser().then((_user) => { + user = _user; + task = user.todos[0]; + api = requester(user); + }); + }); + + it('deletes a task', () => { + return expect(api.del(`/user/tasks/${task.id}`) + .then((res) => { + return api.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', () => { + return expect(api.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', () => { + return expect(generateUser().then((otherUser) => { + let otherUsersTask = otherUser.todos[0]; + return api.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 new file mode 100644 index 0000000000..89492b717b --- /dev/null +++ b/test/api/v2/user/tasks/GET-tasks.test.js @@ -0,0 +1,35 @@ +import { + generateUser, + requester, + translate as t, +} from '../../../../helpers/api-integration.helper'; + +describe('GET /user/tasks/', () => { + let api, user; + + beforeEach(() => { + return generateUser({ + dailys: [ + {text: 'daily', type: 'daily'}, + {text: 'daily', type: 'daily'}, + {text: 'daily', type: 'daily'}, + {text: 'daily', type: 'daily'}, + ], + }).then((_user) => { + user = _user; + api = requester(user); + }); + }); + + it('gets all tasks', () => { + return api.get(`/user/tasks/`).then((tasks) => { + expect(tasks).to.be.an('array'); + expect(tasks.length).to.be.greaterThan(3); + + 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 new file mode 100644 index 0000000000..d3242ab40e --- /dev/null +++ b/test/api/v2/user/tasks/GET-tasks_id.test.js @@ -0,0 +1,45 @@ +import { + generateUser, + requester, + translate as t, +} from '../../../../helpers/api-integration.helper'; + +describe('GET /user/tasks/:id', () => { + let api, user, task; + + beforeEach(() => { + return generateUser().then((_user) => { + user = _user; + task = user.todos[0]; + api = requester(user); + }); + }); + + it('gets a task', () => { + return api.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', () => { + return expect(api.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', () => { + return expect(generateUser().then((otherUser) => { + let otherUsersTask = otherUser.todos[0]; + return api.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-tasks.test.js b/test/api/v2/user/tasks/POST-tasks.test.js new file mode 100644 index 0000000000..1f7a837990 --- /dev/null +++ b/test/api/v2/user/tasks/POST-tasks.test.js @@ -0,0 +1,71 @@ +import { + generateUser, + requester, + translate as t, +} from '../../../../helpers/api-integration.helper'; + +describe('POST /user/tasks', () => { + + let api, user; + + beforeEach(() => { + return generateUser().then((_user) => { + user = _user; + api = requester(user); + }); + }); + + it('creates a task', () => { + return api.post('/user/tasks').then((task) => { + expect(task.id).to.exist; + }); + }); + + it('creates a habit by default', () => { + return expect(api.post('/user/tasks')) + .to.eventually.have.property('type', 'habit'); + }); + + it('creates a task with specified values', () => { + return api.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'); + }); + }); + + it('does not create a task with an id that already exists', () => { + let todo = user.todos[0]; + + return expect(api.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', () => { + return expect(api.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', () => { + return expect(api.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 new file mode 100644 index 0000000000..14ed0262ba --- /dev/null +++ b/test/api/v2/user/tasks/PUT-tasks_id.test.js @@ -0,0 +1,71 @@ +import { + generateUser, + requester, + translate as t, +} from '../../../../helpers/api-integration.helper'; + +describe('PUT /user/tasks/:id', () => { + let api, user, task; + + beforeEach(() => { + return generateUser().then((_user) => { + user = _user; + api = requester(user); + task = user.todos[0]; + }); + }); + + it('does not update the id of the task', () => { + return api.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', () => { + return api.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, value and notes', () => { + return api.put(`/user/tasks/${task.id}`, { + text: 'new text', + notes: 'new notes', + value: 10000, + priority: .5, + attribute: 'str', + }).then((updatedTask) => { + expect(updatedTask.text).to.eql('new text'); + expect(updatedTask.notes).to.eql('new notes'); + expect(updatedTask.value).to.eql(10000); + expect(updatedTask.priority).to.eql(.5); + expect(updatedTask.attribute).to.eql('str'); + }); + }); + + it('returns an error if the task does not exist', () => { + return expect(api.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', () => { + return expect(generateUser().then((otherUser) => { + let otherUsersTask = otherUser.todos[0]; + return api.put(`/user/tasks/${otherUsersTask._id}`, { + name: 'some name', + }); + })).to.eventually.be.rejected.and.eql({ + code: 404, + text: 'Task not found.', + }); + }); +}); diff --git a/test/archive/README.md b/test/archive/README.md deleted file mode 100644 index 27eaee4c77..0000000000 --- a/test/archive/README.md +++ /dev/null @@ -1,3 +0,0 @@ -These are tests which are no longer used. While we could delete them and depend on git history for later lookup, -I think it's important these are visible to developers since they may have valuable tests which haven't been ported -to our new setup. Once a file is ported or determined useless, feel free to delete. \ No newline at end of file diff --git a/test/archive/api.mocha.coffee b/test/archive/api.mocha.coffee deleted file mode 100644 index cf9d276f03..0000000000 --- a/test/archive/api.mocha.coffee +++ /dev/null @@ -1,656 +0,0 @@ -_ = require 'lodash' -expect = require 'expect.js' -require 'coffee-script' -async = require 'async' -superagentDefaults = require 'superagent-defaults' - -request = superagentDefaults() - -conf = require("nconf") -conf.argv().env().file({file: __dirname + '../config.json'}).defaults -conf.set('port','1337') - -# Override normal ENV values with nconf ENV values (ENV values are used the same way without nconf) -#FIXME can't get nconf file above to load... -process.env.BASE_URL = conf.get("BASE_URL") -process.env.FACEBOOK_KEY = conf.get("FACEBOOK_KEY") -process.env.FACEBOOK_SECRET = conf.get("FACEBOOK_SECRET") -process.env.NODE_DB_URI = 'mongodb://localhost/habitrpg' - -User = require('../../src/models/user').model -Group = require('../../src/models/group').model -Challenge = require('../../src/models/challenge').model - -app = require '../../src/server' - -## monkey-patch expect.js for better diffs on mocha -## see: https://github.com/LearnBoost/expect.js/pull/34 -#origBe = expect.Assertion::be -#expect.Assertion::be = expect.Assertion::equal = (obj) -> -# @_expected = obj -# origBe.call this, obj - -# Custom modules -shared = require 'habitrpg-shared' - -###### Helpers & Variables ###### - -model = null -uuid = null -taskPath = null -baseURL = 'http://localhost:3000/api/v2' - -### - expect().eql expects object keys to be in the correct order, this sorts that out -### - -expectUserEqual = (u1, u2) -> - [u1, u2] = _.map [u1, u2], (obj) -> - 'update__ stats.toNextLevel stats.maxHealth __v'.split(' ').forEach (path) -> - helpers.dotSet path, null, obj - sorted = {} - _.each _.keys(obj).sort(), (k) -> sorted[k] = obj[k] - sorted.tasks = _.sortBy sorted.tasks, 'id' - sorted -# console.log {u1, u2} - expect(u1).to.eql(u2) - -expectSameValues = (obj1, obj2, paths) -> - _.each paths, (k) -> - expect(helpers.dotGet(k,obj1)).to.eql helpers.dotGet(k,obj2) - -expectCode = (res, code) -> - expect(res.body.err).to.be undefined if code is 200 - expect(res.statusCode).to.be code - -###### Specs ###### - -describe 'API', -> - user = null - _id = null - apiToken = null - username = null - password = null - - registerNewUser = (cb, main=true)-> - randomID = shared.uuid() - [username,password] = [randomID,randomID] if main - request.post("#{baseURL}/register") - .set('Accept', 'application/json') - .send({ - username: randomID - password: randomID - confirmPassword: randomID - email: "#{randomID}@gmail.com" - }) - .end (res) -> - return cb(null,res.body) unless main - {_id,apiToken} = res.body - console.log {_id,apiToken} - User.findOne {_id, apiToken}, (err, _user) -> - expect(err).to.not.be.ok - user = _user - request - .set('Accept', 'application/json') - .set('X-API-User', _id) - .set('X-API-Key', apiToken) - cb null, res.body - - before (done)-> - require '../../src/server' #start the server - # then wait for it to do it's thing. TODO make a cb-compatible export of server - setTimeout done, 2000 - - describe 'Without token or user id', -> - it '/api/v2/status', (done) -> - request.get("#{baseURL}/status") - .set('Accept', 'application/json') - .end (res) -> - expect(res.statusCode).to.be 200 - expect(res.body.status).to.be 'up' - done() - - it '/api/v2/user', (done) -> - request.get("#{baseURL}/user") - .set('Accept', 'application/json') - .end (res) -> - expect(res.statusCode).to.be 401 - expect(res.body.err).to.be 'You must include a token and uid (user id) in your request' - done() - - describe 'With token and user id', -> - currentUser = null - - before (done) -> - registerNewUser(done,true) - - beforeEach (done) -> - User.findById _id, (err,_user) -> - currentUser = _user - done() - - ############ - # Groups - ############ - - describe 'Groups', -> - group = undefined - - before (done) -> - request.post("#{baseURL}/groups") - .send({name:"TestGroup", type:"party"}) - .end (res) -> - expectCode res, 200 - group = res.body - expect(group.members.length).to.be 1 - expect(group.leader).to.be user._id - done() - - describe 'Challenges', -> - challenge = undefined - updateTodo = undefined - - it 'Creates a challenge', (done) -> - request.post("#{baseURL}/challenges") - .send({ - group:group._id - dailys: [{type:'daily',text:'Challenge Daily'}] - todos: [{type:'todo', text:'Challenge Todo', notes:'Challenge Notes'}] - rewards: [] - habits: [] - official: true - }) - .end (res) -> - expectCode res, 200 - async.parallel [ - (cb) -> User.findById _id, cb - (cb) -> Challenge.findById res.body._id, cb - ], (err, results) -> - [_user,challenge] = [results[0],results[1]] - expect(_user.dailys[_user.dailys.length-1].text).to.be('Challenge Daily') - updateTodo = _user.todos[_user.todos.length-1] - expect(updateTodo.text).to.be('Challenge Todo') - expect(challenge.official).to.be false - done() - - it 'User updates challenge notes', (done) -> - updateTodo.notes = "User overriden notes" - request.put("#{baseURL}/user/tasks/#{updateTodo.id}") - .send(updateTodo) - .end (res) -> - done() #we'll do the check down below - - it 'Change challenge daily', (done) -> - challenge.dailys[0].text = 'Updated Daily' - challenge.todos[0].notes = 'Challenge Updated Todo Notes' - request.post("#{baseURL}/challenges/#{challenge._id}") - .send(challenge) - .end (res) -> - setTimeout -> - User.findById _id, (err,_user) -> - expectCode res, 200 - expect(_user.dailys[_user.dailys.length-1].text).to.be('Updated Daily') - expect(res.body.todos[0].notes).to.be('Challenge Updated Todo Notes') - expect(_user.todos[_user.todos.length-1].notes).to.be('User overriden notes') - currentUser = _user - done() - , 500 # we have to wait a while for users' tasks to be updated, called async on server - - it 'Shows user notes on challenge page', (done) -> - request.get("#{baseURL}/challenges/#{challenge._id}/member/#{_id}") - .end (res) -> - expect(res.body.todos[res.body.todos.length-1].notes).to.be('User overriden notes') - done() - - it 'Complete To-Dos', (done) -> - u = currentUser - request.post("#{baseURL}/user/tasks/#{u.todos[0].id}/up").end (res) -> - request.post("#{baseURL}/user/tasks/#{u.todos[1].id}/up").end (res) -> - request.post("#{baseURL}/user/tasks/").send({type:'todo'}).end (res) -> - request.post("#{baseURL}/user/tasks/clear-completed").end (res) -> - expect(_.size res.body).to.be 2 - done() - - it 'Admin creates a challenge', (done) -> - User.findByIdAndUpdate _id, {$set:{'contributor.admin':true}}, (err,_user) -> - expect(err).to.not.be.ok - - async.parallel [ - (cb)-> - request.post("#{baseURL}/challenges") - .send({group:group._id, dailys: [], todos: [], rewards: [], habits: [], official: false}).end (res) -> - expect(res.body.official).to.be false - cb() - (cb)-> - request.post("#{baseURL}/challenges") - .send({group:group._id, dailys: [], todos: [], rewards: [], habits: [], official: true}).end (res) -> - expect(res.body.official).to.be true - cb() - ], done - - - describe 'Quests', -> - party = undefined - participating = [] - notParticipating = [] - - it 'Invites some members', (done) -> - async.waterfall [ - - # Register new users - (cb) -> - async.parallel [ - (cb2) -> registerNewUser(cb2,false) - (cb2) -> registerNewUser(cb2,false) - (cb2) -> registerNewUser(cb2,false) - ], cb - - # Send them invitations - (_party, cb) -> - party = _party - async.parallel [ - (cb2) -> request.post("#{baseURL}/groups/#{group._id}/invite?uuid=#{party[0]._id}").end (-> cb2()) - (cb2) -> request.post("#{baseURL}/groups/#{group._id}/invite?uuid=#{party[1]._id}").end (-> cb2()) - (cb2) -> request.post("#{baseURL}/groups/#{group._id}/invite?uuid=#{party[2]._id}").end (-> cb2()) - ], cb - - # Accept / Reject - (results, cb) -> - #series since they'll be modifying the same group record - async.series (_.reduce party, (m,v,i) -> - m.push (cb2) -> - request.post("#{baseURL}/groups/#{group._id}/join") - .set('X-API-User', party[i]._id) - .set('X-API-Key', party[i].apiToken) - .end (res) -> cb2() - m - , []), cb - - # Make sure the invites stuck - (whatever, cb) -> - Group.findById group._id, (err, g) -> - expect(g.members.length).to.be 4 - cb() - - ], (err, results) -> - expect(err).to.be.ok - done() - - it 'Starts a quest', (done) -> - async.waterfall [ - (cb)-> - request.post("#{baseURL}/groups/#{group._id}/questAccept?key=evilsanta") - .end (res) -> - expectCode(res, 401) - User.findByIdAndUpdate _id, {$set:'items.quests.evilsanta':1}, cb - (_user,cb)-> - request.post("#{baseURL}/groups/#{group._id}/questAccept?key=evilsanta") - .end (res) -> - expectCode(res, 200) - Group.findById group._id,cb - (_group,cb)-> - group = _group #refresh local group - expect(group.quest.key).to.be 'evilsanta' - - async.series (_.reduce party, (m,v,i) -> - m.push (cb2) -> - request.post("#{baseURL}/groups/#{group._id}/questAccept") - .set('X-API-User', party[i]._id) - .set('X-API-Key', party[i].apiToken) - .end (res) -> cb2() - m - , []), cb - - ], done - - it "Doesn't include people who aren't participating" - - -# ############ -# # Batch Update -# ############ -# -# describe 'Batch Update', -> -# -# it 'POST /api/v1/batch-update', (done) -> -# userBefore = _.cloneDeep(currentUser) -# -# ops = [ -# # Good scores -# op: 'score', params: {id:user.habits[0].id, direction: 'up'} -# op: 'score', params: {id:user.habits[1].id, direction: 'down'} -# op: 'score', params: {id:user.dailys[0].id, direction: 'up'} -# op: 'score', params: {id:user.todos[0].id, direction: 'up'} -# ] -# -# request.post("#{baseURL}/user/batch-update") -# .send(ops) -# .end (res) -> -# expect(res.body.err).to.be undefined -# expect(res.statusCode).to.be 200 -# #expectUserEqual(userBefore, res.body) -# done() -# -# -# ############ -# # To Be Updated (these are old v1 tests which haven't been touched in over 6 months, need to be portd to new API tests or deleted) -# ############ -# -# it.skip 'POST /api/v2/batch-update (handles corrupt values)', (done) -> -# registerNewUser (_res) -> -# # corrupt the tasks, and let's see how the server handles this -# ids = _res.dailyIds -# _res.tasks[ids[0]].value = NaN -# _res.tasks[ids[1]].value = undefined -# _res.tasks[ids[2]] = {} -# _res.tasks["undefined"] = {} -# -# _res.stats.hp = _res.stats.gp = NaN -# -# _res.lastCron = +new Date('08/13/2013') -# -# ops = [ -# op: 'score', task: _res.tasks[ids[0]], dir: 'up' -# ] -# -# model.set "users.#{_res.id}", _res, -> -# request.post("#{baseURL}/user/batch-update") -# .set('Accept', 'application/json') -# .set('X-API-User', _res.id) -# .set('X-API-Key', _res.apiToken) -# .send(ops) -# .end (res) -> -# expect(res.statusCode).to.be 200 -# console.log {stats:res.body.stats, tasks:res.body.tasks} -# done() -# -# -# #FIXME figure out how to compare the objects -# it.skip 'GET /api/v1/user', (done) -> -# request.get("#{baseURL}/user") -# .end (res) -> -# expect(res.body.err).to.be undefined -# expect(res.statusCode).to.be 200 -# expect(res.body.id).not.to.be.empty() -# self = _.clone(currentUser) -# delete self.apiToken -# self.stats.toNextLevel = 150 -# self.stats.maxHealth = 50 -# -# expectUserEqual(res.body, self) -# done() -# -# it.skip 'GET /api/v1/user/task/:id', (done) -> -# tid = _.pluck(currentUser.tasks, 'id')[0] -# request.get("#{baseURL}/user/task/#{tid}") -# .end (res) -> -# expect(res.body.err).to.be undefined -# expect(res.statusCode).to.be 200 -# expect(res.body).to.eql currentUser.tasks[tid] -# done() -# -# it.skip 'POST /api/v1/user/task', (done) -> -# request.post("#{baseURL}/user/task") -# .send({title: 'Title', text: 'Text', type: 'habit'}) -# .end (res) -> -# query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken) -# query.fetch (err, user) -> -# expect(res.body.err).to.be undefined -# expect(res.statusCode).to.be 201 -# expect(res.body.id).not.to.be.empty() -# # Ensure that user owns the newly created object -# saved = user.get("tasks.#{res.body.id}") -# expect(saved).to.be.an('object') -# done() -# -# it.skip 'POST /api/v1/user/task (without type)', (done) -> -# request.post("#{baseURL}/user/task") -# .send({}) -# .end (res) -> -# expect(res.body.err).to.be 'type must be habit, todo, daily, or reward' -# expect(res.statusCode).to.be 400 -# done() -# -# it.skip 'POST /api/v1/user/task (only type)', (done) -> -# request.post("#{baseURL}/user/task") -# .send(type: 'habit') -# .end (res) -> -# query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken) -# query.fetch (err, user) -> -# expect(res.body.err).to.be undefined -# expect(res.statusCode).to.be 201 -# expect(res.body.id).not.to.be.empty() -# # Ensure that user owns the newly created object -# expect(user.get().tasks[res.body.id]).to.be.an('object') -# # Ensure that value gets set to 0 since not otherwise specified -# expect(user.get().tasks[res.body.id].value).to.be.equal(0) -# done() -# -# it.skip 'PUT /api/v1/user/task/:id', (done) -> -# tid = _.pluck(currentUser.tasks, 'id')[0] -# request.put("#{baseURL}/user/task/#{tid}") -# .send(text: 'bye') -# .end (res) -> -# expect(res.body.err).to.be undefined -# expect(res.statusCode).to.be 200 -# currentUser.tasks[tid].text = 'bye' -# expectSameValues res.body, currentUser.tasks[tid], ['id','type','text'] -# #expect(res.body).to.eql currentUser.tasks[tid] -# done() -# -# it.skip 'PUT /api/v1/user/task/:id (shouldnt update type)', (done) -> -# tid = _.pluck(currentUser.tasks, 'id')[1] -# type = if currentUser.tasks[tid].type is 'habit' then 'daily' else 'habit' -# request.put("#{baseURL}/user/task/#{tid}") -# .send(type: type, text: 'fishman') -# .end (res) -> -# expect(res.body.err).to.be undefined -# expect(res.statusCode).to.be 200 -# currentUser.tasks[tid].text = 'fishman' -# expect(res.body).to.eql currentUser.tasks[tid] -# done() -# -# it.skip 'PUT /api/v1/user/task/:id (update notes)', (done) -> -# tid = _.pluck(currentUser.tasks, 'id')[2] -# request.put("#{baseURL}/user/task/#{tid}") -# .send(text: 'hi',notes:'foobar matey') -# .end (res) -> -# expect(res.body.err).to.be undefined -# expect(res.statusCode).to.be 200 -# currentUser.tasks[tid].text = 'hi' -# currentUser.tasks[tid].notes = 'foobar matey' -# expect(res.body).to.eql currentUser.tasks[tid] -# done() -# -# it.skip 'GET /api/v1/user/tasks', (done) -> -# request.get("#{baseURL}/user/tasks") -# .end (res) -> -# query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken) -# query.fetch (err, user) -> -# expect(res.body.err).to.be undefined -# expect(user.get()).to.be.ok() -# expect(res.statusCode).to.be 200 -# model.ref '_user', user -# tasks = [] -# for type in ['habit','todo','daily','reward'] -# model.refList "_#{type}List", "_user.tasks", "_user.#{type}Ids" -# tasks = tasks.concat model.get("_#{type}List") -# # Ensure that user owns the tasks -# expect(res.body.length).to.equal tasks.length -# # Ensure that the two sets are equal -# expect(_.difference(_.pluck(res.body,'id'), _.pluck(tasks,'id')).length).to.equal 0 -# done() -# -# it.skip 'GET /api/v1/user/tasks (todos)', (done) -> -# request.get("#{baseURL}/user/tasks") -# .query(type:'todo') -# .end (res) -> -# query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken) -# query.fetch (err, user) -> -# expect(res.body.err).to.be undefined -# expect(res.statusCode).to.be 200 -# model.ref '_user', user -# model.refList "_todoList", "_user.tasks", "_user.todoIds" -# tasks = model.get("_todoList") -# # Ensure that user owns the tasks -# expect(res.body.length).to.equal tasks.length -# # Ensure that the two sets are equal -# expect(_.difference(_.pluck(res.body,'id'), _.pluck(tasks,'id')).length).to.equal 0 -# done() -# -# it.skip 'DELETE /api/v1/user/task/:id', (done) -> -# tid = currentUser.habitIds[2] -# request.del("#{baseURL}/user/task/#{tid}") -# .end (res) -> -# expect(res.body.err).to.be undefined -# expect(res.statusCode).to.be 204 -# query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken) -# query.fetch (err, user) -> -# expect(user.get('habitIds').indexOf(tid)).to.be -1 -# expect(user.get("tasks.#{tid}")).to.be undefined -# done() -# -# it.skip 'DELETE /api/v1/user/task/:id (no task found)', (done) -> -# tid = "adsfasdfjunkshouldntbeatask" -# request.del("#{baseURL}/user/task/#{tid}") -# .end (res) -> -# expect(res.statusCode).to.be 400 -# expect(res.body.err).to.be 'No task found.' -# done() -# -# it.skip 'POST /api/v1/user/task/:id/up (habit)', (done) -> -# tid = currentUser.habitIds[0] -# request.post("#{baseURL}/user/task/#{tid}/up") -# .send({}) -# .end (res) -> -# expect(res.body.err).to.be undefined -# expect(res.statusCode).to.be 200 -# expect(res.body).to.eql { gp: 1, exp: 7.5, lvl: 1, hp: 50, delta: 1 } -# done() -# -# it.skip 'POST /api/v1/user/task/:id/up (daily)', (done) -> -# tid = currentUser.dailyIds[0] -# request.post("#{baseURL}/user/task/#{tid}/up") -# .send({}) -# .end (res) -> -# expect(res.body.err).to.be undefined -# expect(res.statusCode).to.be 200 -# expect(res.body).to.eql { gp: 2, exp: 15, lvl: 1, hp: 50, delta: 1 } -# query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken) -# query.fetch (err, user) -> -# expect(user.get("tasks.#{tid}.completed")).to.be true -# done() -# -# it.skip 'POST /api/v1/user/task (array)', (done) -> -# habitId = currentUser.habitIds[0] -# dailyId = currentUser.dailyIds[0] -# arr = [{ -# id: habitId -# text: 'hello' -# notes: 'note' -# },{ -# text: 'new task' -# notes: 'notes!' -# },{ -# id: dailyId -# del: true -# }] -# -# request.post("#{baseURL}/user/tasks") -# .send(arr) -# .end (res) -> -# expect(res.body.err).to.be undefined -# expect(res.statusCode).to.be 201 -# -# expectSameValues res.body[0], {id: habitId,text: 'hello',notes: 'note'}, ['id','text','notes'] -# expect(res.body[1].id).to.be.a 'string' -# expect(res.body[1].text).to.be 'new task' -# expect(res.body[1].notes).to.be 'notes!' -# expect(res.body[2]).to.eql deleted: true -# -# query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken) -# query.fetch (err, user) -> -# expectSameValues user.get("tasks.#{habitId}"), {id: habitId,text: 'hello',notes: 'note'}, ['id','text','notes'] -# expect(user.get("tasks.#{dailyId}")).to.be undefined -# expectSameValues user.get("tasks.#{res.body[1].id}"), {id: res.body[1].id, text: 'new task', notes: 'notes!'}, ['id','text','notes'] -# done() -# -# it.skip 'PUT /api/v1/user (bad path)', (done) -> -# # These updates should not save, as per the API changes -# userUpdates = -# stats: hp: 30 -# flags: itemsEnabled: true -# tasks: [{ -# text: 'hello2' -# notes: 'note2' -# }] -# -# request.put("#{baseURL}/user") -# .send(userUpdates) -# .end (res) -> -# expect(res.body.err).to.be.ok() -# expect(res.statusCode).to.be 500 -# done() -# -# it.skip 'PUT /api/v1/user', (done) -> -# userBefore = {} -# query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken) -# query.fetch (err, user) -> -# userBefore = user.get() -# -# habitId = currentUser.habitIds[0] -# dailyId = currentUser.dailyIds[0] -# updates = {} -# updates['stats.hp'] = 30 -# updates['flags.itemsEnabled'] = true -# updates["tasks.#{habitId}.text"] = 'hello2' -# updates["tasks.#{habitId}.notes"] = 'note2' -# -# request.put("#{baseURL}/user") -# .send(updates) -# .end (res) -> -# expect(res.body.err).to.be undefined -# expect(res.statusCode).to.be 200 -# changesWereMade = (obj) -> -# expect(obj.stats.hp).to.be 30 -# expect(obj.flags.itemsEnabled).to.be true -# expectSameValues _.find(obj.tasks,{id:habitId}), {id: habitId,text: 'hello2',notes: 'note2'}, ['id','text','notes'] -# changesWereMade res.body -# query.fetch (err, user) -> -# changesWereMade user.get() -# done() -# -# it.skip 'POST /api/v1/user/auth/local', (done) -> -# userAuth = {username, password} -# request.post("#{baseURL}/user/auth/local") -# .set('Accept', 'application/json') -# .send(userAuth) -# .end (res) -> -# expect(res.body.err).to.be undefined -# expect(res.statusCode).to.be 200 -# expect(res.body.id).to.be currentUser.id -# expect(res.body.token).to.be currentUser.apiToken -# done() -# -# it.skip 'POST /api/v1/user/auth/facebook', (done) -> -# id = shared.uuid() -# userAuth = facebook_id: 12345, name: 'Tyler Renelle', email: 'x@y.com' -# newUser = helpers.newUser(true) -# newUser.id = id -# newUser.auth = facebook: -# id: userAuth.facebook_id -# name: userAuth.name -# email: userAuth.email -# model.set "users.#{id}", newUser, -> -# -# request.post("#{baseURL}/user/auth/facebook") -# .set('Accept', 'application/json') -# .send(userAuth) -# .end (res) -> -# expect(res.body.err).to.be undefined -# expect(res.statusCode).to.be 200 -# expect(res.body.id).to.be newUser.id -# #expect(res.body.token).to.be newUser.apiToken -# done() -# -# diff --git a/test/archive/casper/dailies.casper.coffee b/test/archive/casper/dailies.casper.coffee deleted file mode 100644 index 3730b91ad9..0000000000 --- a/test/archive/casper/dailies.casper.coffee +++ /dev/null @@ -1,45 +0,0 @@ -helpers = new require('./test/casper/helpers')() -casper = helpers.casper -utils = helpers.utils -url = helpers.playUrl - -casper.start url - -# ---------- Daily ------------ -casper.then -> - helpers.reset() - helpers.addTasks(['daily']) - -# Gained exp on +daily -casper.then -> - helpers.modelBeforeAfter (-> casper.click '.dailys input[type="checkbox"]'), (model) -> - casper.test.assertEquals model.before._user.stats.hp, model.after._user.stats.hp, '+daily =hp' - casper.test.assert model.before._user.stats.exp < model.after._user.stats.exp, '+daily +exp' - casper.test.assert model.before._user.stats.gp < model.after._user.stats.gp, '+daily +gp' - -# -daily acts as undo -casper.then -> - helpers.modelBeforeAfter (-> casper.click '.dailys input[type="checkbox"]'), (model) -> - casper.test.assertEquals model.before._user.stats.hp, model.after._user.stats.hp, '-daily =hp' - casper.test.assert model.before._user.stats.exp > model.after._user.stats.exp, '-daily -exp' - casper.test.assert model.before._user.stats.gp > model.after._user.stats.gp, '-daily -gp' - -# ---------- Cron ------------ -casper.then -> - helpers.reset() - helpers.addTasks(['daily']) - -casper.then -> - helpers.cronBeforeAfter (model) -> - casper.then -> - casper.test.assert model.before._user.stats.hp > model.after._user.stats.hp, 'daily:cron:hp lost value' - - # Go through all the dailys, all of them are uncompleted, so should all get a negative value - casper.echo "Testing all uncompleted dailys after cron" - for id in model.before._user.dailyIds - casper.test.assertEquals model.before._user.tasks[id].value, 0, "daily:cron:daily value before was 0" - casper.test.assert model.after._user.tasks[id].value < 0, "daily:cron:daily value after is negative" - -# ---------- Run ------------ -casper.run -> - casper.test.renderResults true \ No newline at end of file diff --git a/test/archive/casper/general.casper.coffee b/test/archive/casper/general.casper.coffee deleted file mode 100644 index 8ce7280ab8..0000000000 --- a/test/archive/casper/general.casper.coffee +++ /dev/null @@ -1,38 +0,0 @@ -helpers = new require('./test/casper/helpers')() -casper = helpers.casper -utils = helpers.utils -url = helpers.playUrl - -# ---------- Basic Reset Test ------------ - -casper.start url, -> - casper.test.assertTitle 'HabitRPG | Gamify Your Life', 'Page Title' - -# Gain some GP and lose some HP -casper.then -> - casper.repeat 5, -> casper.click '.habits a[data-direction="down"]' - casper.repeat 5, -> casper.click '.habits a[data-direction="up"]' - -# Reset -casper.then -> - helpers.reset() - -# Test that reset worked -casper.then -> - model = helpers.getModelDelayed (model) -> - casper.echo 'testing user after reset' - casper.test.assertEqual model._user.tasks, {}, 'no tasks' - casper.test.assertEqual model._user.stats, {hp:50, gp:0, exp:0, lvl:1}, 'stats' - - -# ---------- Misc Pages ------------ - -casper.thenOpen "#{helpers.baseUrl}/terms", -> - casper.test.assertTitle "Terms Of Use", "terms page works" - -casper.thenOpen "#{helpers.baseUrl}/privacy", -> - casper.test.assertTitle "Privacy Policy", "privacy page works" - -# ---------- Run ------------ -casper.run -> - casper.test.renderResults true \ No newline at end of file diff --git a/test/archive/casper/habits.casper.coffee b/test/archive/casper/habits.casper.coffee deleted file mode 100644 index 075b2ba434..0000000000 --- a/test/archive/casper/habits.casper.coffee +++ /dev/null @@ -1,40 +0,0 @@ -helpers = new require('./test/casper/helpers')() -casper = helpers.casper -utils = helpers.utils -url = helpers.playUrl - -casper.start url - -# # ---------- Register ------------ -# casper.then -> helpers.register() -# casper.then -> user = helpers.getUser() - -# ---------- Habits ------------ -casper.then -> - helpers.reset() - helpers.addTasks(['habit']) - -casper.then -> - helpers.modelBeforeAfter (-> casper.click '.habits a[data-direction="down"]'), (model) -> - casper.test.assert model.before._user.stats.hp > model.after._user.stats.hp, '-habit -hp' - casper.test.assertEquals model.before._user.stats.exp, model.after._user.stats.exp, '-habit =exp' - casper.test.assertEquals model.before._user.stats.gp, model.after._user.stats.gp, '-habit =gp' - -casper.then -> - helpers.modelBeforeAfter (-> casper.click '.habits a[data-direction="up"]'), (model) -> - casper.test.assert model.before._user.stats.exp < model.after._user.stats.exp, '+habit +exp' - casper.test.assert model.before._user.stats.gp < model.after._user.stats.gp, '+habit +gp' - casper.test.assertEquals model.before._user.stats.hp, model.after._user.stats.hp, '+habit =hp' - -# Test Death -casper.then -> - casper.repeat 50, (-> casper.click '.habits a[data-direction="down"]') - casper.then -> - helpers.getModelDelayed (model) -> - casper.test.assertEquals model._user.stats.hp, 0, 'hp==0 (death by habits)' - casper.test.assertEquals model._user.stats.lvl, 0, 'lvl==0 (death by habits)' - casper.test.assertVisible '#dead-modal', 'Revive Modal Visible' - -# ---------- Run ------------ -casper.run -> - casper.test.renderResults true \ No newline at end of file diff --git a/test/archive/casper/helpers.coffee b/test/archive/casper/helpers.coffee deleted file mode 100644 index 138da7d03f..0000000000 --- a/test/archive/casper/helpers.coffee +++ /dev/null @@ -1,106 +0,0 @@ -utils = require('utils') - -module.exports = -> - - SYNC_WAIT_TIME = 40 - - baseUrl = 'http://localhost:3000' - - random = Math.random().toString(36).substring(7) - - casper = require("casper").create - clientScripts: 'test/includes/lodash.min.js' - - getModel = -> - casper.evaluate -> - model = window.DERBY.app.model - { - _userId: model.get('_userId') - _user: model.get('_user') - _todoList: model.get('_todoList') - _dailyList: model.get('_dailyList') - _rewardList: model.get('_rewardList') - _habitList: model.get('_habitList') - } - - { - casper: casper - - baseUrl: baseUrl - playUrl: baseUrl + '/?play=1' - - utils: utils - - addTasks: (types = 'all', num = 5)-> - if types == 'all' - types = ['habit', 'daily', 'todo', 'reward'] - types.forEach (type) -> - i = 0 - casper.repeat num, -> - casper.fill "form#new-#{type}", {'new-task': "#{type}-#{i}"} # why can't I use true here? - casper.click "form#new-#{type} input[type=submit]" - - reset: -> - casper.evaluate -> window.DERBY.app.reset() - - getModelDelayed: (cb) -> - # This time is needed for derby to have enough time to update all it's data. - # It still happens sometimes that the retrieved model does not contain any - # data. It might be worth to do some basic checks on the model here, and if - # it doesn't look OK, wait a bit longer and get it again. - casper.wait SYNC_WAIT_TIME, -> - cb(getModel()) - - modelBeforeAfter: (between_cb, done_cb) -> - that = @ - model = {} - @getModelDelayed (before) -> - model.before = before - casper.then -> - between_cb() - that.getModelDelayed (after) -> - model.after = after - casper.then -> done_cb(model) - - runCron: -> - casper.evaluate -> - yesterday = new Date() - yesterday.setDate(yesterday.getDate() - 1); - window.DERBY.app.model.set('_user.lastCron', yesterday) - casper.then -> casper.reload() - - cronBeforeAfter: (cb) -> - that = @ - model = {} - @getModelDelayed (before) -> - model.before = before - casper.then -> that.runCron() - casper.then -> - casper.wait 1100, -> # user's hp is updated after 1s for animation - model.after = getModel() - casper.then -> - casper.test.assertEqual model.before._user.id, model.after._user.id, 'user id equal after cron' - casper.test.assertEqual model.before._user.tasks.length, model.after._user.tasks.length, "Didn't lose anything on cron" - cb(model) - - register: -> - casper.fill 'form#derby-auth-register', - username: random - email: random + '@example.com' - password: random - 'password-confirmation': random - , true - - login: -> - casper.fill 'form#derby-auth-login', - username: random - password: random - , true - - deleteOne: (list, typeSelector) -> - selector = "#{typeSelector} a[data-original-title=\"Delete\"]" - @modelBeforeAfter (-> casper.click selector), (model) -> - casper.test.assertEquals Object.keys(model.before._user.tasks).length - 1, Object.keys(model.after._user.tasks).length, "1 #{typeSelector} deleted from user.tasks" - casper.test.assertEquals model.before._user["#{list}Ids"].length - 1, model.after._user["#{list}Ids"].length, "1 #{typeSelector} deleted from user._typeIds" - casper.test.assertEquals model.before["_#{list}List"].length - 1, model.after["_#{list}List"].length, "1 #{typeSelector} deleted from _typeList" - } diff --git a/test/archive/casper/items.casper.coffee b/test/archive/casper/items.casper.coffee deleted file mode 100644 index 853aa3f127..0000000000 --- a/test/archive/casper/items.casper.coffee +++ /dev/null @@ -1,22 +0,0 @@ -helpers = new require('./test/casper/helpers')() -casper = helpers.casper -utils = helpers.utils -url = helpers.playUrl - -casper.start url - -# ---------- Items (in-game rewards) ------------ -casper.then -> - helpers.reset() - helpers.addTasks(['habit'], 1) - -casper.then -> casper.test.assertDoesntExist 'ul.items', 'no items after reset' -casper.then -> casper.repeat 70, -> - casper.click '.habits a[data-direction="up"]' -casper.then -> - casper.test.assertVisible '.item-store-popover', 'store popover visible' - casper.test.assertExists 'ul.items', 'items appear after lvl up' - -# ---------- Run ------------ -casper.run -> - casper.test.renderResults true \ No newline at end of file diff --git a/test/archive/casper/memoryleak.casper.coffee b/test/archive/casper/memoryleak.casper.coffee deleted file mode 100644 index ff5357a90f..0000000000 --- a/test/archive/casper/memoryleak.casper.coffee +++ /dev/null @@ -1,12 +0,0 @@ -helpers = new require('./test/casper/helpers')() -casper = helpers.casper -utils = helpers.utils -url = helpers.playUrl - -casper.start url - -casper.repeat 100, -> - casper.reload() - -casper.run -> - casper.test.renderResults true \ No newline at end of file diff --git a/test/archive/casper/registration.casper.coffee b/test/archive/casper/registration.casper.coffee deleted file mode 100644 index e3e1a53574..0000000000 --- a/test/archive/casper/registration.casper.coffee +++ /dev/null @@ -1,35 +0,0 @@ -helpers = new require('./test/casper/helpers')() -casper = helpers.casper -utils = helpers.utils -url = helpers.playUrl - -casper.start url - -# ---------- Register ------------ -registeredUser = undefined -casper.then -> helpers.register() -casper.then -> - helpers.getModelDelayed (model) -> - registeredUser = model - -casper.then -> casper.reload() -casper.then -> - helpers.getModelDelayed (nowModel) -> - casper.test.assertEqual registeredUser._userId, nowModel._userId, 'user registered and maintained session' - -# ---------- Log Out ------------ -casper.thenOpen helpers.baseUrl + '/logout' -casper.thenOpen helpers.playUrl -casper.then -> - helpers.getModelDelayed (nowModel) -> - casper.test.assertNotEquals registeredUser._userId, nowModel._userId, 'user logged out' - -# ---------- Login ------------ -casper.then -> helpers.login() -casper.then -> - helpers.getModelDelayed (nowModel) -> - casper.test.assertEqual registeredUser._userId, nowModel._userId, 'user logged out' - -# ---------- Run ------------ -casper.run -> - casper.test.renderResults true \ No newline at end of file diff --git a/test/archive/casper/rest.casper.coffee b/test/archive/casper/rest.casper.coffee deleted file mode 100644 index 767d93489e..0000000000 --- a/test/archive/casper/rest.casper.coffee +++ /dev/null @@ -1,74 +0,0 @@ -url = 'http://localhost:3000' -utils = require('utils') -casper = require("casper").create() - -user1 = {} -user2 = {} - -# ---------- Main Stuff ------------ - -casper.start "#{url}/?play=1", -> - user1 = casper.evaluate -> window.DERBY.app.model.get("_user") - @fill 'form#derby-auth-register', - username: user1.id - email: "{user1.id}@gmail.com" - password: 'habitrpg123' - 'password-confirmation': "habitrpg123" - , true -casper.thenOpen "#{url}/logout" -casper.thenOpen "#{url}/?play=1", -> - user2 = @evaluate -> window.DERBY.app.model.get("_user") - casper.then -> @test.assertNotEquals user1.id, user2.id, '2 new users created' - - - # ---------- REST API ------------ - - # casper.thenOpen "#{url}/users/#{user.id}" - # casper.thenOpen "#{url}/users/#{user.id}/tasks" - # casper.thenOpen "#{url}/users/#{user.id}/tasks/{taskId}" - - taskId = 'productivity' - pomodoro = { - 'title': 'Stay Focused', - 'service': 'pomodoro', - 'icon': 'http://www.veryicon.com/icon/16/Food%20%26%20Drinks/Paradise%20Fruits/Tomato.png' - } - - # ---------- v1 ------------ - - @thenOpen "#{url}/users/#{user2.id}/tasks/#{taskId}/up", { - method: 'post', - data: pomodoro - }, -> - result = JSON.parse @getPageContent() - @test.assertEqual user2.stats.hp, result.hp, 'REST +habit =hp' - @test.assert user2.stats.exp < result.exp, 'REST +habit +exp' - @test.assert user2.stats.money < result.money, 'REST +habit +money' - utils.dump result - - @thenOpen "#{url}/users/#{user1.id}/tasks/#{taskId}/down", { - method: 'post', - data: pomodoro - }, -> - result = JSON.parse @getPageContent() - @test.assert user1.stats.hp > result.hp, 'REST -habit -hp' - @test.assertEqual user1.stats.exp, result.exp, 'REST -habit =exp' - @test.assertEqual user1.stats.money, result.money, 'REST -habit =money' - utils.dump result - -casper.thenOpen "#{url}/?play=1", -> - # User2 is logged in by now. Make sure we don't get logged in as user1 since that was the last REST call - current = casper.evaluate -> window.DERBY.app.model.get('_user') - casper.then -> casper.test.assertEqual current.id, user2.id, "session remains user2's" - - # ---------- v2 ------------ - -# @thenOpen "#{url}/v2/users/#{uid}/tasks/#{taskId}/down", { -# method: 'post', -# data: pomodoro -# } - -# ---------- Run ------------ - -casper.run -> - @test.renderResults true \ No newline at end of file diff --git a/test/archive/casper/todos.casper.coffee b/test/archive/casper/todos.casper.coffee deleted file mode 100644 index f898f68b12..0000000000 --- a/test/archive/casper/todos.casper.coffee +++ /dev/null @@ -1,59 +0,0 @@ -helpers = new require('./test/casper/helpers')() -casper = helpers.casper -utils = helpers.utils -url = helpers.playUrl - -casper.start url - -# ---------- Todos ------------ -casper.then -> - helpers.reset() - helpers.addTasks(['todo']) - -# Completing todo gives exp and gp -casper.then -> - helpers.modelBeforeAfter (-> casper.click '.todos .uncompleted input[type="checkbox"]'), (model) -> - casper.test.assertEquals model.before._user.stats.hp, 50, 'todo:hp starts at 50' - casper.test.assertEquals model.before._user.stats.hp, model.after._user.stats.hp, '+todo =hp' - casper.test.assertEquals model.after._user.stats.exp, 1, '+todo exp=1' - casper.test.assertEquals model.after._user.stats.gp, 1, '+todo gp=1' - - casper.test.assert model.before._user.stats.exp < model.after._user.stats.exp, '+todo +exp' - casper.test.assert model.before._user.stats.gp < model.after._user.stats.gp, '+todo +gp' - -# Can delete completed -casper.then -> helpers.deleteOne('todo', '.todos .completed') - -# Can delete uncompleted -casper.then -> helpers.deleteOne('todo', '.todos .uncompleted') - -# Uncompleting subtracts exp and gp -casper.then -> - casper.click '.todos .uncompleted input[type="checkbox"]' - helpers.modelBeforeAfter (-> casper.click '.todos .completed input[type="checkbox"]'), (model) -> - casper.test.assertEquals model.before._user.stats.hp, model.after._user.stats.hp, '-todo =hp' - casper.test.assert model.before._user.stats.exp > model.after._user.stats.exp, '-todo -exp' - casper.test.assert model.before._user.stats.gp > model.after._user.stats.gp, '-todo -gp' - - - -# ---------- Cron ------------ -casper.then -> - helpers.reset() - helpers.addTasks(['todo']) - -casper.then -> - helpers.cronBeforeAfter (model) -> - casper.then -> - casper.test.assertEqual model.before._user.stats.hp, model.after._user.stats.hp, 'todo:cron:hp no change' - - # Go through all the todos, all of them are uncompleted, so should all get a negative value - casper.echo "Testing all uncompleted todos after cron" - for id in model.before._user.todoIds - casper.test.assertEquals model.before._user.tasks[id].value, 0, "todo:cron:todo value before was 0" - casper.test.assert model.after._user.tasks[id].value < 0, "todo:cron:todo value after is negative" - - -# ---------- Run ------------ -casper.run -> - casper.test.renderResults true \ No newline at end of file diff --git a/test/archive/test2/casper/add.items.coffee b/test/archive/test2/casper/add.items.coffee deleted file mode 100644 index 9094b67c77..0000000000 --- a/test/archive/test2/casper/add.items.coffee +++ /dev/null @@ -1,40 +0,0 @@ -helpers = casper.helpers -uid = helpers.uid -# test creation of Todos, Rewards, Habits, etc - -casper.start helpers.playUrl, -> - casper.test.assert(true,'true==true') -# helpers.getModel (err, model) -> -# tasksCount=0 -# for own key,value of model.user.tasks -# tasksCount++ -# utils.dump model.user.tasks -# casper.fill "form[data-task-type='habit']", { -# 'new-task': 'Habit' + uid -# }, true -# helpers.getModel (err, model) -> -# newTasksCount=0 -# for own key,value of model.user.tasks -# newTasksCount++ -# casper.echo "Tasks new: " + tasksCount -# casper.test.assert(newTasksCount>tasksCount,"Task list increases in length after new habit form submitted") -# -# -##casper.then -> -## helpers.getModel (err, model) -> -## casper.test.assertEquals(typeof model.user.stats.exp, "number", 'XP is number') -## casper.test.assertEquals(model.user.stats.exp, 0, 'XP == 0') -## casper.click '.habits a[data-direction="up"]' -## helpers.getModel (err, newModel) -> -## casper.test.assert(newModel.user.stats.exp > model.user.stats.exp, 'XP has increased after clicking habits "+"') -## casper.test.assert(newModel.user.stats.gp > model.user.stats.gp, 'GP has increased after clicking habits "+"') - - -# ---------- finish tests ------------ -casper.then -> - casper.test.done() - - -# ---------- Run ------------ -casper.run -> - casper.test.renderResults true diff --git a/test/archive/test2/casper/stats.coffee b/test/archive/test2/casper/stats.coffee deleted file mode 100644 index d134f518ee..0000000000 --- a/test/archive/test2/casper/stats.coffee +++ /dev/null @@ -1,103 +0,0 @@ -#helpers = new require('./lib/helpers')() -#casper = helpers.casper -helpers = casper.helpers -eTest = helpers.evalTest -getModel = helpers.getModel -# ---------- Checks if clicking on the buttons changes stats and in right direction ------------ - - -casper.start helpers.playUrl, -> - test = 'EXP and GP increasing after clicking habits "+"' - getModel (err, model) -> - casper.test.assertEquals(typeof model.user.stats.exp, "number", 'XP is number') - casper.test.assertEquals(model.user.stats.exp, 0, 'XP == 0') - casper.click '.habits a[data-direction="up"]' - eTest( - (oldStats)-> - stats = window.DERBY.app.model.get '_user.stats' - console.log "Was:" + oldStats.exp + "Is: " + stats.exp - console.log "Was:" + oldStats.gp + "Is: " + stats.gp - (stats.exp > oldStats.exp && stats.gp > oldStats.gp) - test - model.user.stats - ) - - -casper.then -> - test = 'HP decreasing after clicking habits "-"' - getModel (err, model) -> - casper.click '.habits a[data-direction="down"]' - eTest( - (oldStats)-> - stats = window.DERBY.app.model.get '_user.stats' - console.log "Was:" + oldStats.hp + "Is: " + stats.hp - (stats.hp < oldStats.hp) - test - model.user.stats - ) - -casper.then -> - test = 'EXP and GP increasing after clicking .todo.uncompleted' - getModel (err, model) -> - casper.click '.task.todo.uncompleted input[type=checkbox]' - eTest( - (oldStats)-> - stats = window.DERBY.app.model.get '_user.stats' - console.log "Was:" + oldStats.exp + "Is: " + stats.exp - console.log "Was:" + oldStats.gp + "Is: " + stats.gp - (stats.exp > oldStats.exp && stats.gp > oldStats.gp) - test - model.user.stats - ) - -casper.then -> - test = 'EXP and GP decreasing after clicking .todo.completed' - getModel (err, model) -> - casper.click '.task.todo.completed input[type=checkbox]' - eTest( - (oldStats)-> - stats = window.DERBY.app.model.get '_user.stats' - console.log "Was:" + oldStats.exp + "Is: " + stats.exp - console.log "Was:" + oldStats.gp + "Is: " + stats.gp - (stats.exp < oldStats.exp && stats.gp < oldStats.gp) - test - model.user.stats - ) - -casper.then -> - test = 'EXP and GP increasing after clicking .daily.uncompleted' - getModel (err, model) -> - casper.click '.task.daily.uncompleted input[type=checkbox]' - eTest( - (oldStats)-> - stats = window.DERBY.app.model.get '_user.stats' - console.log "Was:" + oldStats.exp + "Is: " + stats.exp - console.log "Was:" + oldStats.gp + "Is: " + stats.gp - (stats.exp > oldStats.exp && stats.gp > oldStats.gp) - test - model.user.stats - ) - -casper.then -> - test = 'EXP and GP decreasing after clicking .daily.completed' - getModel (err, model) -> - casper.click '.task.daily.completed input[type=checkbox]' - eTest( - (oldStats)-> - stats = window.DERBY.app.model.get '_user.stats' - console.log "Was:" + oldStats.exp + "Is: " + stats.exp - console.log "Was:" + oldStats.gp + "Is: " + stats.gp - (stats.exp < oldStats.exp && stats.gp < oldStats.gp) - test - model.user.stats - ) - - -# ---------- finish tests ------------ -casper.then -> - casper.test.done() - - -# ---------- Run ------------ -casper.run -> - casper.test.renderResults true \ No newline at end of file diff --git a/test/archive/test2/readme.md b/test/archive/test2/readme.md deleted file mode 100644 index a0567235cb..0000000000 --- a/test/archive/test2/readme.md +++ /dev/null @@ -1,9 +0,0 @@ -1) It is a bit verbose -2) It needs to be refactored using "async" library. Somehow casper.then() is introducing bugs so I'm not going to use it until I figure out why exactly. Leave it as it is, I'll refactor as it grows. -3) It does not use any timeouts along the way, which is a good thing. -4) It runs consistently on my side (i.e. always passes). -5) So far phantomJS is given new userID every time so app.reset,app.revive is not necessary. I'll add it later. - -To run the tests run from terminal: -cd test/test2 -casperjs test ./casper/ --includes=./lib/helpers.coffee \ No newline at end of file diff --git a/test/common/algos.mocha.coffee b/test/common/algos.mocha.coffee deleted file mode 100644 index 5f98890666..0000000000 --- a/test/common/algos.mocha.coffee +++ /dev/null @@ -1,950 +0,0 @@ -_ = require 'lodash' -expect = require 'expect.js' -sinon = require 'sinon' -moment = require 'moment' -shared = require '../../common/script/index.coffee' -shared.i18n.translations = require('../../website/src/i18n.js').translations -test_helper = require './test_helper' -test_helper.addCustomMatchers() -$w = (s)->s.split(' ') - -### Helper Functions #### -newUser = (addTasks=true)-> - buffs = {per:0, int:0, con:0, str:0, stealth: 0, streaks: false} - user = - auth: - timestamps: {} - stats: {str:1, con:1, per:1, int:1, mp: 32, class: 'warrior', buffs: buffs} - items: - lastDrop: - count: 0 - hatchingPotions: {} - eggs: {} - food: {} - gear: - equipped: {} - costume: {} - owned: {} - quests: {} - party: - quest: - progress: - down: 0 - preferences: {} - dailys: [] - todos: [] - rewards: [] - flags: {} - achievements: - ultimateGearSets: {} - contributor: - level: 2 - _tmp: {} - - shared.wrap(user) - user.ops.reset(null, ->) - if addTasks - _.each ['habit', 'todo', 'daily'], (task)-> - user.ops.addTask {body: {type: task, id: shared.uuid()}} - user - -rewrapUser = (user)-> - user._wrapped = false - shared.wrap(user) - user - -expectStrings = (obj, paths) -> - _.each paths, (path) -> expect(obj[path]).to.be.ok() - -# options.daysAgo: days ago when the last cron was executed -# cronAfterStart: moves the lastCron to be after the dayStart. -# This way the daysAgo works as expected if the test case -# makes the assumption that the lastCron was after dayStart. -beforeAfter = (options={}) -> - user = newUser() - [before, after] = [user, _.cloneDeep(user)] - # avoid closure on the original user - rewrapUser(after) - before.preferences.dayStart = after.preferences.dayStart = options.dayStart if options.dayStart - before.preferences.timezoneOffset = after.preferences.timezoneOffset = (options.timezoneOffset or moment().zone()) - if options.limitOne - before["#{options.limitOne}s"] = [before["#{options.limitOne}s"][0]] - after["#{options.limitOne}s"] = [after["#{options.limitOne}s"][0]] - lastCron = moment(options.now || +new Date).subtract( {days:options.daysAgo} ) if options.daysAgo - lastCron.add( {hours:options.dayStart, minutes:1} ) if options.daysAgo and options.cronAfterStart - lastCron = +lastCron if options.daysAgo - _.each [before,after], (obj) -> - obj.lastCron = lastCron if options.daysAgo - {before:before, after:after} -#TODO calculate actual points - -expectLostPoints = (before, after, taskType) -> - if taskType in ['daily','habit'] - expect(after.stats.hp).to.be.lessThan before.stats.hp - expect(after["#{taskType}s"][0].history).to.have.length(1) - else expect(after.history.todos).to.have.length(1) - expect(after).toHaveExp 0 - expect(after).toHaveGP 0 - expect(after["#{taskType}s"][0].value).to.be.lessThan before["#{taskType}s"][0].value - -expectGainedPoints = (before, after, taskType) -> - expect(after.stats.hp).to.be 50 - expect(after.stats.exp).to.be.greaterThan before.stats.exp - expect(after.stats.gp).to.be.greaterThan before.stats.gp - expect(after["#{taskType}s"][0].value).to.be.greaterThan before["#{taskType}s"][0].value - expect(after["#{taskType}s"][0].history).to.have.length(1) if taskType is 'habit' - # daily & todo histories handled on cron - -expectNoChange = (before,after) -> - _.each $w('stats items gear dailys todos rewards preferences'), (attr)-> - expect(after[attr]).to.eql before[attr] - -expectClosePoints = (before, after, taskType) -> - expect( Math.abs(after.stats.exp - before.stats.exp) ).to.be.lessThan 0.0001 - expect( Math.abs(after.stats.gp - before.stats.gp) ).to.be.lessThan 0.0001 - expect( Math.abs(after["#{taskType}s"][0].value - before["#{taskType}s"][0].value) ).to.be.lessThan 0.0001 - -expectDayResetNoDamage = (b,a) -> - [before,after] = [_.cloneDeep(b), _.cloneDeep(a)] - _.each after.dailys, (task,i) -> - expect(task.completed).to.be false - expect(before.dailys[i].value).to.be task.value - expect(before.dailys[i].streak).to.be task.streak - expect(task.history).to.have.length(1) - _.each after.todos, (task,i) -> - expect(task.completed).to.be false - expect(before.todos[i].value).to.be.greaterThan task.value - expect(after.history.todos).to.have.length(1) - # hack so we can compare user before/after obj equality sans effected paths - _.each [before,after], (obj) -> - delete obj.stats.buffs - _.each $w('dailys todos history lastCron'), (path) -> delete obj[path] - delete after._tmp - expectNoChange(before, after) - -cycle = (array)-> - n = -1 - (seed=0)-> - n++ - return array[n % array.length] - -repeatWithoutLastWeekday = ()-> - repeat = {su:true,m:true,t:true,w:true,th:true,f:true,s:true} - if shared.startOfWeek(moment().zone(0)).isoWeekday() == 1 # Monday - repeat.su = false - else - repeat.s = false - {repeat: repeat} - -###### Specs ###### - -describe 'User', -> - it 'sets correct user defaults', -> - user = newUser() - base_gear = { armor: 'armor_base_0', weapon: 'weapon_base_0', head: 'head_base_0', shield: 'shield_base_0' } - buffs = {per:0, int:0, con:0, str:0, stealth: 0, streaks: false} - expect(user.stats).to.eql { str: 1, con: 1, per: 1, int: 1, hp: 50, mp: 32, lvl: 1, exp: 0, gp: 0, class: 'warrior', buffs: buffs } - expect(user.items.gear).to.eql { equipped: base_gear, costume: base_gear, owned: {weapon_warrior_0: true} } - expect(user.preferences).to.eql { costume: false } - - it 'calculates max MP', -> - user = newUser() - expect(user).toHaveMaxMP 32 - user.stats.int = 10 - expect(user).toHaveMaxMP 50 - user.stats.lvl = 5 - expect(user).toHaveMaxMP 54 - user.stats.class = 'wizard' - user.items.gear.equipped.weapon = 'weapon_wizard_1' - expect(user).toHaveMaxMP 63 - - it 'handles perfect days', -> - user = newUser() - user.dailys = [] - _.times 3, ->user.dailys.push shared.taskDefaults({type:'daily', startDate: moment().subtract(7, 'days')}) - cron = -> user.lastCron = moment().subtract(1,'days');user.fns.cron() - - cron() - expect(user.stats.buffs.str).to.be 0 - expect(user.achievements.perfect).to.not.be.ok() - - user.dailys[0].completed = true - cron() - expect(user.stats.buffs.str).to.be 0 - expect(user.achievements.perfect).to.not.be.ok() - - _.each user.dailys, (d)->d.completed = true - cron() - expect(user.stats.buffs.str).to.be 1 - expect(user.achievements.perfect).to.be 1 - - # Handle greyed-out dailys - yesterday = moment().subtract(1,'days') - user.dailys[0].repeat[shared.dayMapping[yesterday.day()]] = false - _.each user.dailys[1..], (d)->d.completed = true - cron() - expect(user.stats.buffs.str).to.be 1 - expect(user.achievements.perfect).to.be 2 - - describe 'Resting in the Inn', -> - user = null - cron = null - - beforeEach -> - user = newUser() - user.preferences.sleep = true - cron = -> user.lastCron = moment().subtract(1, 'days');user.fns.cron() - user.dailys = [] - _.times 2, -> user.dailys.push shared.taskDefaults({type:'daily', startDate: moment().subtract(7, 'days')}) - - it 'remains in the inn on cron', -> - cron() - expect(user.preferences.sleep).to.be true - - it 'resets dailies', -> - user.dailys[0].completed = true - cron() - expect(user.dailys[0].completed).to.be false - - it 'resets checklist on incomplete dailies', -> - user.dailys[0].checklist = [ - { - "text" : "1", - "id" : "checklist-one", - "completed" : true - }, - { - "text" : "2", - "id" : "checklist-two", - "completed" : true - }, - { - "text" : "3", - "id" : "checklist-three", - "completed" : false - } - ] - cron() - _.each user.dailys[0].checklist, (box)-> - expect(box.completed).to.be false - - it 'resets checklist on complete dailies', -> - user.dailys[0].checklist = [ - { - "text" : "1", - "id" : "checklist-one", - "completed" : true - }, - { - "text" : "2", - "id" : "checklist-two", - "completed" : true - }, - { - "text" : "3", - "id" : "checklist-three", - "completed" : false - } - ] - user.dailys[0].completed = true - cron() - _.each user.dailys[0].checklist, (box)-> - expect(box.completed).to.be false - - it 'does not reset checklist on grey incomplete dailies', -> - yesterday = moment().subtract(1,'days') - user.dailys[0].repeat[shared.dayMapping[yesterday.day()]] = false - user.dailys[0].checklist = [ - { - "text" : "1", - "id" : "checklist-one", - "completed" : true - }, - { - "text" : "2", - "id" : "checklist-two", - "completed" : true - }, - { - "text" : "3", - "id" : "checklist-three", - "completed" : true - } - ] - - cron() - _.each user.dailys[0].checklist, (box)-> - expect(box.completed).to.be true - - it 'resets checklist on complete grey complete dailies', -> - yesterday = moment().subtract(1,'days') - user.dailys[0].repeat[shared.dayMapping[yesterday.day()]] = false - user.dailys[0].checklist = [ - { - "text" : "1", - "id" : "checklist-one", - "completed" : true - }, - { - "text" : "2", - "id" : "checklist-two", - "completed" : true - }, - { - "text" : "3", - "id" : "checklist-three", - "completed" : true - } - ] - user.dailys[0].completed = true - - cron() - _.each user.dailys[0].checklist, (box)-> - expect(box.completed).to.be false - - it 'does not damage user for incomplete dailies', -> - expect(user).toHaveHP 50 - user.dailys[0].completed = true - user.dailys[1].completed = false - cron() - expect(user).toHaveHP 50 - - it 'gives credit for complete dailies', -> - user.dailys[0].completed = true - expect(user.dailys[0].history).to.be.empty - cron() - expect(user.dailys[0].history).to.not.be.empty - - it 'damages user for incomplete dailies after checkout', -> - expect(user).toHaveHP 50 - user.dailys[0].completed = true - user.dailys[1].completed = false - user.preferences.sleep = false - cron() - expect(user.stats.hp).to.be.lessThan 50 - - describe 'Death', -> - user = undefined - it 'revives correctly', -> - user = newUser() - user.stats = { gp: 10, exp: 100, lvl: 2, hp: 0, class: 'warrior' } - user.ops.revive() - expect(user).toHaveGP 0 - expect(user).toHaveExp 0 - expect(user).toHaveLevel 1 - expect(user).toHaveHP 50 - expect(user.items.gear.owned).to.eql { weapon_warrior_0: false } - - it "doesn't break unbreakables", -> - ce = shared.countExists - user = newUser() - # breakables (includes default weapon_warrior_0): - user.items.gear.owned['shield_warrior_1'] = true - # unbreakables because off-class or 0 value: - user.items.gear.owned['shield_rogue_1'] = true - user.items.gear.owned['head_special_nye'] = true - expect(ce user.items.gear.owned).to.be 4 - user.stats.hp = 0 - user.ops.revive() - expect(ce(user.items.gear.owned)).to.be 3 - user.stats.hp = 0 - user.ops.revive() - expect(ce(user.items.gear.owned)).to.be 2 - user.stats.hp = 0 - user.ops.revive() - expect(ce(user.items.gear.owned)).to.be 2 - expect(user.items.gear.owned).to.eql { weapon_warrior_0: false, shield_warrior_1: false, shield_rogue_1: true, head_special_nye: true } - - it "handles event items", -> - shared.content.gear.flat.head_special_nye.event.start = '2012-01-01' - shared.content.gear.flat.head_special_nye.event.end = '2012-02-01' - expect(shared.content.gear.flat.head_special_nye.canOwn(user)).to.be true - delete user.items.gear.owned['head_special_nye'] - expect(shared.content.gear.flat.head_special_nye.canOwn(user)).to.be false - - shared.content.gear.flat.head_special_nye.event.start = moment().subtract(5,'days') - shared.content.gear.flat.head_special_nye.event.end = moment().add(5,'days') - expect(shared.content.gear.flat.head_special_nye.canOwn(user)).to.be true - - describe 'Rebirth', -> - user = undefined - it 'removes correct gear', -> - user = newUser() - user.stats.lvl = 100 - user.items.gear.owned = { - "weapon_warrior_0": true, - "weapon_warrior_1": true, - "armor_warrior_1": false, - "armor_mystery_201402": true, - "back_mystery_201402": false, - "head_mystery_201402": true, - "weapon_armoire_basicCrossbow": true, - } - user.ops.rebirth() - expect(user.items.gear.owned).to.eql { - "weapon_warrior_0": true, - "weapon_warrior_1": false, - "armor_warrior_1": false, - "armor_mystery_201402": true, - "back_mystery_201402": false, - "head_mystery_201402": true, - "weapon_armoire_basicCrossbow": false, - } - - describe 'store', -> - it 'recovers hp buying potions', -> - user = newUser() - user.stats.hp = 30 - user.stats.gp = 50 - user.ops.buy {params: {key: 'potion'}} - expect(user).toHaveHP 45 - expect(user).toHaveGP 25 - - user.ops.buy {params: {key: 'potion'}} - expect(user).toHaveHP 50 # don't exceed max hp - expect(user).toHaveGP 0 - - it 'buys equipment', -> - user = newUser() - user.stats.gp = 31 - user.ops.buy {params: {key: 'armor_warrior_1'}} - expect(user.items.gear.owned).to.eql { weapon_warrior_0: true, armor_warrior_1: true } - expect(user.items.gear.equipped).to.eql { armor: 'armor_warrior_1', weapon: 'weapon_base_0', head: 'head_base_0', shield: 'shield_base_0' } - expect(user).toHaveGP 1 - - it 'does not buy equipment without enough Gold', -> - user = newUser() - user.stats.gp = 1 - user.ops.buy {params: {key: 'armor_warrior_1'}} - expect(user.items.gear.equipped).to.eql { armor: 'armor_base_0', weapon: 'weapon_base_0', head: 'head_base_0', shield: 'shield_base_0' } - expect(user).toHaveGP 1 - - it 'buys a Quest scroll', -> - user = newUser() - user.stats.gp = 205 - user.ops.buyQuest {params: {key: 'dilatoryDistress1'}} - expect(user.items.quests).to.eql {dilatoryDistress1: 1} - expect(user).toHaveGP 5 - - it 'does not buy Quests without enough Gold', -> - user = newUser() - user.stats.gp = 1 - user.ops.buyQuest {params: {key: 'dilatoryDistress1'}} - expect(user.items.quests).to.eql {} - expect(user).toHaveGP 1 - - it 'does not buy nonexistent Quests', -> - user = newUser() - user.stats.gp = 9999 - user.ops.buyQuest {params: {key: 'snarfblatter'}} - expect(user.items.quests).to.eql {} - expect(user).toHaveGP 9999 - - it 'does not buy Gem-premium Quests', -> - user = newUser() - user.stats.gp = 9999 - user.ops.buyQuest {params: {key: 'kraken'}} - expect(user.items.quests).to.eql {} - expect(user).toHaveGP 9999 - - describe 'Gem purchases', -> - it 'does not purchase items without enough Gems', -> - user = newUser() - user.ops.purchase {params: {type: 'eggs', key: 'Cactus'}} - user.ops.purchase {params: {type: 'gear', key: 'headAccessory_special_foxEars'}} - user.ops.unlock {query: {path: 'items.gear.owned.headAccessory_special_bearEars,items.gear.owned.headAccessory_special_cactusEars,items.gear.owned.headAccessory_special_foxEars,items.gear.owned.headAccessory_special_lionEars,items.gear.owned.headAccessory_special_pandaEars,items.gear.owned.headAccessory_special_pigEars,items.gear.owned.headAccessory_special_tigerEars,items.gear.owned.headAccessory_special_wolfEars'}} - expect(user.items.eggs).to.eql {} - expect(user.items.gear.owned).to.eql { weapon_warrior_0: true } - - it 'purchases an egg', -> - user = newUser() - user.balance = 1 - user.ops.purchase {params: {type: 'eggs', key: 'Cactus'}} - expect(user.items.eggs).to.eql { Cactus: 1} - expect(user.balance).to.eql 0.25 - - it 'purchases fox ears', -> - user = newUser() - user.balance = 1 - user.ops.purchase {params: {type: 'gear', key: 'headAccessory_special_foxEars'}} - expect(user.items.gear.owned).to.eql { weapon_warrior_0: true, headAccessory_special_foxEars: true } - expect(user.balance).to.eql 0.5 - - it 'unlocks all the animal ears at once', -> - user = newUser() - user.balance = 2 - user.ops.unlock {query: {path: 'items.gear.owned.headAccessory_special_bearEars,items.gear.owned.headAccessory_special_cactusEars,items.gear.owned.headAccessory_special_foxEars,items.gear.owned.headAccessory_special_lionEars,items.gear.owned.headAccessory_special_pandaEars,items.gear.owned.headAccessory_special_pigEars,items.gear.owned.headAccessory_special_tigerEars,items.gear.owned.headAccessory_special_wolfEars'}} - expect(user.items.gear.owned).to.eql { weapon_warrior_0: true, headAccessory_special_bearEars: true, headAccessory_special_cactusEars: true, headAccessory_special_foxEars: true, headAccessory_special_lionEars: true, headAccessory_special_pandaEars: true, headAccessory_special_pigEars: true, headAccessory_special_tigerEars: true, headAccessory_special_wolfEars: true} - expect(user.balance).to.eql 0.75 - - describe 'spells', -> - _.each shared.content.spells, (spellClass)-> - _.each spellClass, (spell)-> - it "#{spell.text} has valid values", -> - expect(spell.target).to.match(/^(task|self|party|user)$/) - expect(spell.mana).to.be.an('number') - if spell.lvl - expect(spell.lvl).to.be.an('number') - expect(spell.lvl).to.be.above(0) - expect(spell.cast).to.be.a('function') - - describe 'drop system', -> - user = null - MIN_RANGE_FOR_POTION = 0 - MAX_RANGE_FOR_POTION = .3 - MIN_RANGE_FOR_EGG = .4 - MAX_RANGE_FOR_EGG = .6 - MIN_RANGE_FOR_FOOD = .7 - MAX_RANGE_FOR_FOOD = 1 - - beforeEach -> - user = newUser() - user.flags.dropsEnabled = true - @task_id = shared.uuid() - user.ops.addTask({body: {type: 'daily', id: @task_id}}) - - it 'drops a hatching potion', -> - for random in [MIN_RANGE_FOR_POTION..MAX_RANGE_FOR_POTION] by .1 - sinon.stub(user.fns, 'predictableRandom').returns random - user.ops.score {params: { id: @task_id, direction: 'up'}} - expect(user.items.eggs).to.be.empty - expect(user.items.hatchingPotions).to.not.be.empty - expect(user.items.food).to.be.empty - user.fns.predictableRandom.restore() - - it 'drops a pet egg', -> - for random in [MIN_RANGE_FOR_EGG..MAX_RANGE_FOR_EGG] by .1 - sinon.stub(user.fns, 'predictableRandom').returns random - user.ops.score {params: { id: @task_id, direction: 'up'}} - expect(user.items.eggs).to.not.be.empty - expect(user.items.hatchingPotions).to.be.empty - expect(user.items.food).to.be.empty - user.fns.predictableRandom.restore() - - it 'drops food', -> - for random in [MIN_RANGE_FOR_FOOD..MAX_RANGE_FOR_FOOD] by .1 - sinon.stub(user.fns, 'predictableRandom').returns random - user.ops.score {params: { id: @task_id, direction: 'up'}} - expect(user.items.eggs).to.be.empty - expect(user.items.hatchingPotions).to.be.empty - expect(user.items.food).to.not.be.empty - user.fns.predictableRandom.restore() - - it 'does not get a drop', -> - sinon.stub(user.fns, 'predictableRandom').returns 0.5 - user.ops.score {params: { id: @task_id, direction: 'up'}} - expect(user.items.eggs).to.eql {} - expect(user.items.hatchingPotions).to.eql {} - expect(user.items.food).to.eql {} - user.fns.predictableRandom.restore() - - describe 'Quests', -> - _.each shared.content.quests, (quest)-> - it "#{quest.text()} has valid values", -> - expect(quest.notes()).to.be.an('string') - expect(quest.completion()).to.be.an('string') if quest.completion - expect(quest.previous).to.be.an('string') if quest.previous - expect(quest.value).to.be.greaterThan 0 if quest.canBuy() - expect(quest.drop.gp).to.not.be.lessThan 0 - expect(quest.drop.exp).to.not.be.lessThan 0 - expect(quest.category).to.match(/pet|unlockable|gold|world/) - if quest.drop.items - expect(quest.drop.items).to.be.an(Array) - if quest.boss - expect(quest.boss.name()).to.be.an('string') - expect(quest.boss.hp).to.be.greaterThan 0 - expect(quest.boss.str).to.be.greaterThan 0 - else if quest.collect - _.each quest.collect, (collect)-> - expect(collect.text()).to.be.an('string') - expect(collect.count).to.be.greaterThan 0 - - describe 'Achievements', -> - _.each shared.content.classes, (klass) -> - user = newUser() - user.stats.gp = 10000 - _.each shared.content.gearTypes, (type) -> - _.each [1..5], (i) -> - user.ops.buy {params:'#{type}_#{klass}_#{i}'} - it 'does not get ultimateGear ' + klass, -> - expect(user.achievements.ultimateGearSets[klass]).to.not.be.ok() - _.each shared.content.gearTypes, (type) -> - user.ops.buy {params:'#{type}_#{klass}_6'} - xit 'gets ultimateGear ' + klass, -> - expect(user.achievements.ultimateGearSets[klass]).to.be.ok() - - it 'does not remove existing Ultimate Gear achievements', -> - user = newUser() - user.achievements.ultimateGearSets = {'healer':true,'wizard':true,'rogue':true,'warrior':true} - user.items.gear.owned.shield_warrior_5 = false - user.items.gear.owned.weapon_rogue_6 = false - user.ops.buy {params:'shield_warrior_5'} - expect(user.achievements.ultimateGearSets).to.eql {'healer':true,'wizard':true,'rogue':true,'warrior':true} - - describe 'unlocking features', -> - it 'unlocks drops at level 3', -> - user = newUser() - user.stats.lvl = 3 - user.fns.updateStats(user.stats) - expect(user.flags.dropsEnabled).to.be.ok() - - it 'unlocks Rebirth at level 50', -> - user = newUser() - user.stats.lvl = 50 - user.fns.updateStats(user.stats) - expect(user.flags.rebirthEnabled).to.be.ok() - - describe 'level-awarded Quests', -> - it 'gets Attack of the Mundane at level 15', -> - user = newUser() - user.stats.lvl = 15 - user.fns.updateStats(user.stats) - expect(user.flags.levelDrops.atom1).to.be.ok() - expect(user.items.quests.atom1).to.eql 1 - - it 'gets Vice at level 30', -> - user = newUser() - user.stats.lvl = 30 - user.fns.updateStats(user.stats) - expect(user.flags.levelDrops.vice1).to.be.ok() - expect(user.items.quests.vice1).to.eql 1 - - it 'gets Golden Knight at level 40', -> - user = newUser() - user.stats.lvl = 40 - user.fns.updateStats(user.stats) - expect(user.flags.levelDrops.goldenknight1).to.be.ok() - expect(user.items.quests.goldenknight1).to.eql 1 - - it 'gets Moonstone Chain at level 60', -> - user = newUser() - user.stats.lvl = 60 - user.fns.updateStats(user.stats) - expect(user.flags.levelDrops.moonstone1).to.be.ok() - expect(user.items.quests.moonstone1).to.eql 1 - -describe 'Simple Scoring', -> - beforeEach -> - {@before, @after} = beforeAfter() - - it 'Habits : Up', -> - @after.ops.score {params: {id: @after.habits[0].id, direction: 'down'}, query: {times: 5}} - expectLostPoints(@before, @after,'habit') - - it 'Habits : Down', -> - @after.ops.score {params: {id: @after.habits[0].id, direction: 'up'}, query: {times: 5}} - expectGainedPoints(@before, @after,'habit') - - it 'Dailys : Up', -> - @after.ops.score {params: {id: @after.dailys[0].id, direction: 'up'}} - expectGainedPoints(@before, @after,'daily') - - it 'Dailys : Up, Down', -> - @after.ops.score {params: {id: @after.dailys[0].id, direction: 'up'}} - @after.ops.score {params: {id: @after.dailys[0].id, direction: 'down'}} - expectClosePoints(@before, @after, 'daily') - - it 'Todos : Up', -> - @after.ops.score {params: {id: @after.todos[0].id, direction: 'up'}} - expectGainedPoints(@before, @after,'todo') - - it 'Todos : Up, Down', -> - @after.ops.score {params: {id: @after.todos[0].id, direction: 'up'}} - @after.ops.score {params: {id: @after.todos[0].id, direction: 'down'}} - expectClosePoints(@before, @after, 'todo') - -describe 'Cron', -> - - it 'computes shouldCron', -> - user = newUser() - - paths = {};user.fns.cron {paths} - expect(user.lastCron).to.not.be.ok # it setup the cron property now - - user.lastCron = +moment().subtract(1,'days') - - paths = {};user.fns.cron {paths} - expect(user.lastCron).to.be.greaterThan 0 - -# user.lastCron = +moment().add(1,'days') -# paths = {};algos.cron user, {paths} -# expect(paths.lastCron).to.be true # busted cron (was set to after today's date) - - it 'only dailies & todos are affected', -> - {before,after} = beforeAfter({daysAgo:1}) - before.dailys = before.todos = after.dailys = after.todos = [] - after.fns.cron() - before.stats.mp=after.stats.mp #FIXME - expect(after.lastCron).to.not.be before.lastCron # make sure cron was run - delete after.stats.buffs;delete before.stats.buffs - expect(before.stats).to.eql after.stats - beforeTasks = before.habits.concat(before.dailys).concat(before.todos).concat(before.rewards) - afterTasks = after.habits.concat(after.dailys).concat(after.todos).concat(after.rewards) - expect(beforeTasks).to.eql afterTasks - - describe 'preening', -> - beforeEach -> - @clock = sinon.useFakeTimers(Date.parse("2013-11-20"), "Date") - - afterEach -> - @clock.restore() - - it 'should preen user history', -> - {before,after} = beforeAfter({daysAgo:1}) - history = [ - # Last year should be condensed to one entry, avg: 1 - {date:'09/01/2012', value: 0} - {date:'10/01/2012', value: 0} - {date:'11/01/2012', value: 2} - {date:'12/01/2012', value: 2} - - # Each month of this year should be condensed to 1/mo, averages follow - {date:'01/01/2013', value: 1} #2 - {date:'01/15/2013', value: 3} - - {date:'02/01/2013', value: 2} #3 - {date:'02/15/2013', value: 4} - - {date:'03/01/2013', value: 3} #4 - {date:'03/15/2013', value: 5} - - {date:'04/01/2013', value: 4} #5 - {date:'04/15/2013', value: 6} - - {date:'05/01/2013', value: 5} #6 - {date:'05/15/2013', value: 7} - - {date:'06/01/2013', value: 6} #7 - {date:'06/15/2013', value: 8} - - {date:'07/01/2013', value: 7} #8 - {date:'07/15/2013', value: 9} - - {date:'08/01/2013', value: 8} #9 - {date:'08/15/2013', value: 10} - - {date:'09/01/2013', value: 9} #10 - {date:'09/15/2013', value: 11} - - {date:'010/01/2013', value: 10} #11 - {date:'010/15/2013', value: 12} - - # This month should condense each week - {date:'011/01/2013', value: 12} - {date:'011/02/2013', value: 13} - {date:'011/03/2013', value: 14} - {date:'011/04/2013', value: 15} - ] - after.history = {exp: _.cloneDeep(history), todos: _.cloneDeep(history)} - after.habits[0].history = _.cloneDeep(history) - after.fns.cron() - - # remove history entries created by cron - after.history.exp.pop() - after.history.todos.pop() - - _.each [after.history.exp, after.history.todos, after.habits[0].history], (arr) -> - expect(_.map(arr, (x)->x.value)).to.eql [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] - - describe 'Todos', -> - it '1 day missed', -> - {before,after} = beforeAfter({daysAgo:1}) - before.dailys = after.dailys = [] - after.fns.cron() - - # todos don't effect stats - expect(after).toHaveHP 50 - expect(after).toHaveExp 0 - expect(after).toHaveGP 0 - - # but they devalue - expect(before.todos[0].value).to.be 0 # sanity check for task setup - expect(after.todos[0].value).to.be -1 # the actual test - expect(after.history.todos).to.have.length 1 - - it '2 days missed', -> - {before,after} = beforeAfter({daysAgo:2}) - before.dailys = after.dailys = [] - after.fns.cron() - - # todos devalue by only one day's worth of devaluation - expect(before.todos[0].value).to.be 0 # sanity check for task setup - expect(after.todos[0].value).to.be -1 # the actual test - - # I used hard-coded dates here instead of 'now' so the tests don't fail - # when you run them between midnight and dayStart. Nothing worse than - # intermittent failures. - describe 'cron day calculations', -> - dayStart = 4 - fstr = "YYYY-MM-DD HH:mm:ss" - - it 'startOfDay before dayStart', -> - # If the time is before dayStart, then we expect the start of the day to be yesterday at dayStart - start = shared.startOfDay {now: moment('2014-10-09 02:30:00'), dayStart} - expect(start.format(fstr)).to.eql '2014-10-08 04:00:00' - - it 'startOfDay after dayStart', -> - # If the time is after dayStart, then we expect the start of the day to be today at dayStart - start = shared.startOfDay {now: moment('2014-10-09 05:30:00'), dayStart} - expect(start.format(fstr)).to.eql '2014-10-09 04:00:00' - - it 'daysSince cron before, now after', -> - # If the lastCron was before dayStart, then a time on the same day after dayStart - # should be 1 day later than lastCron - lastCron = moment('2014-10-09 02:30:00') - days = shared.daysSince(lastCron, {now: moment('2014-10-09 11:30:00'), dayStart}) - expect(days).to.eql 1 - - it 'daysSince cron before, now before', -> - # If the lastCron was before dayStart, then a time on the same day also before dayStart - # should be 0 days later than lastCron - lastCron = moment('2014-10-09 02:30:00') - days = shared.daysSince(lastCron, {now: moment('2014-10-09 03:30:00'), dayStart}) - expect(days).to.eql 0 - - it 'daysSince cron after, now after', -> - # If the lastCron was after dayStart, then a time on the same day also after dayStart - # should be 0 days later than lastCron - lastCron = moment('2014-10-09 05:30:00') - days = shared.daysSince(lastCron, {now: moment('2014-10-09 06:30:00'), dayStart}) - expect(days).to.eql 0 - - it 'daysSince cron after, now tomorrow before', -> - # If the lastCron was after dayStart, then a time on the following day but before dayStart - # should be 0 days later than lastCron - lastCron = moment('2014-10-09 12:30:00') - days = shared.daysSince(lastCron, {now: moment('2014-10-10 01:30:00'), dayStart}) - expect(days).to.eql 0 - - it 'daysSince cron after, now tomorrow after', -> - # If the lastCron was after dayStart, then a time on the following day and after dayStart - # should be 1 day later than lastCron - lastCron = moment('2014-10-09 12:30:00') - days = shared.daysSince(lastCron, {now: moment('2014-10-10 10:30:00'), dayStart}) - expect(days).to.eql 1 - - xit 'daysSince, last cron before new dayStart', -> - # If lastCron was after dayStart (at 1am) with dayStart set at 0, changing dayStart to 4am - # should not trigger another cron the same day - - # dayStart is 0 - lastCron = moment('2014-10-09 01:00:00') - # dayStart is 4 - days = shared.daysSince(lastCron, {now: moment('2014-10-09 05:00:00'), dayStart}) - expect(days).to.eql 0 - - describe 'dailies', -> - - describe 'new day', -> - - ### - This section runs through a "cron matrix" of all permutations (that I can easily account for). It sets - task due days, user custom day start, timezoneOffset, etc - then runs cron, jumps to tomorrow and runs cron, - and so on - testing each possible outcome along the way - ### - - runCron = (options) -> - _.each [480, 240, 0, -120], (timezoneOffset) -> # test different timezones - now = shared.startOfWeek({timezoneOffset}).add(options.currentHour||0, 'hours') - {before,after} = beforeAfter({now, timezoneOffset, daysAgo:1, cronAfterStart:options.cronAfterStart||true, dayStart:options.dayStart||0, limitOne:'daily'}) - before.dailys[0].repeat = after.dailys[0].repeat = options.repeat if options.repeat - before.dailys[0].streak = after.dailys[0].streak = 10 - before.dailys[0].completed = after.dailys[0].completed = true if options.checked - before.dailys[0].startDate = after.dailys[0].startDate = moment().subtract(30, 'days') - if options.shouldDo - expect(shared.shouldDo(now.toDate(), after.dailys[0], {timezoneOffset, dayStart:options.dayStart, now})).to.be.ok() - after.fns.cron {now} - before.stats.mp=after.stats.mp #FIXME - switch options.expect - when 'losePoints' then expectLostPoints(before,after,'daily') - when 'noChange' then expectNoChange(before,after) - when 'noDamage' then expectDayResetNoDamage(before,after) - {before,after} - - # These test cases were written assuming that lastCron was run after dayStart - # even if currentHour < dayStart and lastCron = yesterday at currentHour. - # cronAfterStart makes sure that lastCron is moved to be after dayStart. - cronMatrix = - steps: - - 'due yesterday': - defaults: {daysAgo:1, cronAfterStart:true, limitOne: 'daily'} - steps: - - '(simple)': {expect:'losePoints'} - - 'due today': - # NOTE: a strange thing here, moment().startOf('week') is Sunday, but moment.zone(myTimeZone).startOf('week') is Monday. - defaults: {repeat:{su:true,m:true,t:true,w:true,th:true,f:true,s:true}} - steps: - 'pre-dayStart': - defaults: {currentHour:3, dayStart:4, shouldDo:true} - steps: - 'checked': {checked: true, expect:'noChange'} - 'un-checked': {checked: false, expect:'noChange'} - 'post-dayStart': - defaults: {currentHour:5, dayStart:4, shouldDo:true} - steps: - 'checked': {checked:true, expect:'noDamage'} - 'unchecked': {checked:false, expect: 'losePoints'} - - 'NOT due today': - defaults: {repeat:{su:true,m:false,t:true,w:true,th:true,f:true,s:true}} - steps: - 'pre-dayStart': - defaults: {currentHour:3, dayStart:4, shouldDo:true} - steps: - 'checked': {checked: true, expect:'noChange'} - 'un-checked': {checked: false, expect:'noChange'} - 'post-dayStart': - defaults: {currentHour:5, dayStart:4, shouldDo:false} - steps: - 'checked': {checked:true, expect:'noDamage'} - 'unchecked': {checked:false, expect: 'losePoints'} - - 'not due yesterday': - defaults: repeatWithoutLastWeekday() - steps: - '(simple)': {expect:'noDamage'} - 'post-dayStart': {currentHour:5,dayStart:4, expect:'noDamage'} - 'pre-dayStart': {currentHour:3, dayStart:4, expect:'noChange'} - - recurseCronMatrix = (obj, options={}) -> - if obj.steps - _.each obj.steps, (step, text) -> - o = _.cloneDeep options - o.text ?= ''; o.text += " #{text} " - recurseCronMatrix step, _.defaults(o,obj.defaults) - else - it "#{options.text}", -> runCron(_.defaults(obj,options)) - recurseCronMatrix(cronMatrix) - -describe 'Helper', -> - - it 'calculates gold coins', -> - expect(shared.gold(10)).to.eql 10 - expect(shared.gold(1.957)).to.eql 1 - expect(shared.gold()).to.eql 0 - - it 'calculates silver coins', -> - expect(shared.silver(10)).to.eql 0 - expect(shared.silver(1.957)).to.eql 95 - expect(shared.silver(0.01)).to.eql "01" - expect(shared.silver()).to.eql "00" - - it 'calculates experience to next level', -> - expect(shared.tnl 1).to.eql 150 - expect(shared.tnl 2).to.eql 160 - expect(shared.tnl 10).to.eql 260 - expect(shared.tnl 99).to.eql 3580 - - it 'calculates the start of the day', -> - fstr = 'YYYY-MM-DD HH:mm:ss' - today = '2013-01-01 00:00:00' - # get the timezone for the day, so the test case doesn't fail - # if you run it during daylight savings time because by default - # it uses moment().zone() which is the current minute offset - zone = moment(today).zone() - expect(shared.startOfDay({now: new Date(2013, 0, 1, 0)}, timezoneOffset:zone).format(fstr)).to.eql today - expect(shared.startOfDay({now: new Date(2013, 0, 1, 5)}, timezoneOffset:zone).format(fstr)).to.eql today - expect(shared.startOfDay({now: new Date(2013, 0, 1, 23, 59, 59), timezoneOffset:zone}).format(fstr)).to.eql today diff --git a/test/common/algos.mocha.js b/test/common/algos.mocha.js new file mode 100644 index 0000000000..b398a5bb72 --- /dev/null +++ b/test/common/algos.mocha.js @@ -0,0 +1,1521 @@ +/* eslint-disable camelcase, func-names, no-shadow */ +import { + DAY_MAPPING, + startOfWeek, + startOfDay, + daysSince, +} from '../../common/script/cron'; + +let expect = require('expect.js'); +let sinon = require('sinon'); +let moment = require('moment'); +let test_helper = require('./test_helper'); +let shared = require('../../common/script/index.js'); +let $w = (s) => { + return s.split(' '); +}; + +shared.i18n.translations = require('../../website/src/libs/i18n.js').translations; +test_helper.addCustomMatchers(); + +/* Helper Functions */ + +let newUser = (addTasks = true) => { + let buffs = { + per: 0, + int: 0, + con: 0, + str: 0, + stealth: 0, + streaks: false, + }; + let user = { + auth: { + timestamps: {}, + }, + stats: { + str: 1, + con: 1, + per: 1, + int: 1, + mp: 32, + class: 'warrior', + buffs, + }, + items: { + lastDrop: { + count: 0, + }, + hatchingPotions: {}, + eggs: {}, + food: {}, + gear: { + equipped: {}, + costume: {}, + owned: {}, + }, + quests: {}, + }, + party: { + quest: { + progress: { + down: 0, + }, + }, + }, + preferences: { + autoEquip: true, + }, + dailys: [], + todos: [], + rewards: [], + flags: {}, + achievements: { + ultimateGearSets: {}, + }, + contributor: { + level: 2, + }, + _tmp: {}, + }; + + shared.wrap(user); + user.ops.reset(null, () => {}); + if (addTasks) { + _.each(['habit', 'todo', 'daily'], (task) => { + user.ops.addTask({ + body: { + type: task, + id: shared.uuid(), + }, + }); + }); + } + return user; +}; + +let rewrapUser = (user) => { + user._wrapped = false; + shared.wrap(user); + return user; +}; + +let beforeAfter = (options = {}) => { + let lastCron; + let user = newUser(); + let ref = [user, _.cloneDeep(user)]; + let before = ref[0]; + let after = ref[1]; + + rewrapUser(after); + if (options.dayStart) { + before.preferences.dayStart = after.preferences.dayStart = options.dayStart; + } + before.preferences.timezoneOffset = after.preferences.timezoneOffset = options.timezoneOffset || moment().zone(); + if (options.limitOne) { + before[`${options.limitOne}s`] = [before[`${options.limitOne}s`][0]]; + after[`${options.limitOne}s`] = [after[`${options.limitOne}s`][0]]; + } + if (options.daysAgo) { + lastCron = moment(options.now || Number(new Date())).subtract({ + days: options.daysAgo, + }); + } + if (options.daysAgo && options.cronAfterStart) { + lastCron.add({ + hours: options.dayStart, + minutes: 1, + }); + } + if (options.daysAgo) { + lastCron = Number(lastCron); + } + _.each([before, after], (obj) => { + if (options.daysAgo) { + obj.lastCron = lastCron; + } + }); + return { + before, + after, + }; +}; + +let expectLostPoints = (before, after, taskType) => { + if (taskType === 'daily' || taskType === 'habit') { + expect(after.stats.hp).to.be.lessThan(before.stats.hp); + expect(after[`${taskType}s`][0].history).to.have.length(1); + } else { + expect(after.history.todos).to.have.length(1); + } + expect(after).toHaveExp(0); + expect(after).toHaveGP(0); + expect(after[`${taskType}s`][0].value).to.be.lessThan(before[`${taskType}s`][0].value); +}; + +let expectGainedPoints = (before, after, taskType) => { + expect(after.stats.hp).to.be(50); + expect(after.stats.exp).to.be.greaterThan(before.stats.exp); + expect(after.stats.gp).to.be.greaterThan(before.stats.gp); + expect(after[`${taskType}s`][0].value).to.be.greaterThan(before[`${taskType}s`][0].value); + if (taskType === 'habit') { + expect(after[`${taskType}s`][0].history).to.have.length(1); + } +}; + +let expectNoChange = (before, after) => { + _.each($w('stats items gear dailys todos rewards preferences'), (attr) => { + expect(after[attr]).to.eql(before[attr]); + }); +}; + +let expectClosePoints = (before, after, taskType) => { + expect(Math.abs(after.stats.exp - before.stats.exp)).to.be.lessThan(0.0001); + expect(Math.abs(after.stats.gp - before.stats.gp)).to.be.lessThan(0.0001); + expect(Math.abs(after[taskType + 's'][0].value - before[taskType + 's'][0].value)).to.be.lessThan(0.0001); // eslint-disable-line prefer-template +}; + +let expectDayResetNoDamage = (b, a) => { + let ref = [_.cloneDeep(b), _.cloneDeep(a)]; + let before = ref[0]; + let after = ref[1]; + + _.each(after.dailys, (task, i) => { + expect(task.completed).to.be(false); + expect(before.dailys[i].value).to.be(task.value); + expect(before.dailys[i].streak).to.be(task.streak); + expect(task.history).to.have.length(1); + }); + _.each(after.todos, (task, i) => { + expect(task.completed).to.be(false); + expect(before.todos[i].value).to.be.greaterThan(task.value); + }); + expect(after.history.todos).to.have.length(1); + _.each([before, after], (obj) => { + delete obj.stats.buffs; + _.each($w('dailys todos history lastCron'), (path) => { + return delete obj[path]; + }); + }); + delete after._tmp; + expectNoChange(before, after); +}; + +let repeatWithoutLastWeekday = () => { + let repeat = { + su: true, + m: true, + t: true, + w: true, + th: true, + f: true, + s: true, + }; + + if (startOfWeek(moment().zone(0)).isoWeekday() === 1) { + repeat.su = false; + } else { + repeat.s = false; + } + return { + repeat, + }; +}; + +describe('User', () => { + it('sets correct user defaults', () => { + let user = newUser(); + let base_gear = { + armor: 'armor_base_0', + weapon: 'weapon_base_0', + head: 'head_base_0', + shield: 'shield_base_0', + }; + let buffs = { + per: 0, + int: 0, + con: 0, + str: 0, + stealth: 0, + streaks: false, + }; + + expect(user.stats).to.eql({ + str: 1, + con: 1, + per: 1, + int: 1, + hp: 50, + mp: 32, + lvl: 1, + exp: 0, + gp: 0, + class: 'warrior', + buffs, + }); + expect(user.items.gear).to.eql({ + equipped: base_gear, + costume: base_gear, + owned: { + weapon_warrior_0: true, + }, + }); + expect(user.preferences).to.eql({ + autoEquip: true, + costume: false, + }); + }); + it('calculates max MP', () => { + let user = newUser(); + + expect(user).toHaveMaxMP(32); + user.stats.int = 10; + expect(user).toHaveMaxMP(50); + user.stats.lvl = 5; + expect(user).toHaveMaxMP(54); + user.stats.class = 'wizard'; + user.items.gear.equipped.weapon = 'weapon_wizard_1'; + expect(user).toHaveMaxMP(63); + }); + it('handles perfect days', () => { + let user = newUser(); + + user.dailys = []; + _.times(3, () => { + return user.dailys.push(shared.taskDefaults({ + type: 'daily', + startDate: moment().subtract(7, 'days'), + })); + }); + let cron = () => { + user.lastCron = moment().subtract(1, 'days'); + return user.fns.cron(); + }; + + cron(); + expect(user.stats.buffs.str).to.be(0); + expect(user.achievements.perfect).to.not.be.ok(); + user.dailys[0].completed = true; + cron(); + expect(user.stats.buffs.str).to.be(0); + expect(user.achievements.perfect).to.not.be.ok(); + _.each(user.dailys, (d) => { + d.completed = true; + }); + cron(); + expect(user.stats.buffs.str).to.be(1); + expect(user.achievements.perfect).to.be(1); + + let yesterday = moment().subtract(1, 'days'); + + user.dailys[0].repeat[DAY_MAPPING[yesterday.day()]] = false; + _.each(user.dailys.slice(1), (d) => { + d.completed = true; + }); + cron(); + expect(user.stats.buffs.str).to.be(1); + expect(user.achievements.perfect).to.be(2); + }); + describe('Resting in the Inn', () => { + let user = null; + let cron = null; + + beforeEach(() => { + user = newUser(); + user.preferences.sleep = true; + cron = () => { + user.lastCron = moment().subtract(1, 'days'); + return user.fns.cron(); + }; + user.dailys = []; + _.times(2, () => { + return user.dailys.push(shared.taskDefaults({ + type: 'daily', + startDate: moment().subtract(7, 'days'), + })); + }); + }); + it('remains in the inn on cron', () => { + cron(); + expect(user.preferences.sleep).to.be(true); + }); + it('resets dailies', () => { + user.dailys[0].completed = true; + cron(); + expect(user.dailys[0].completed).to.be(false); + }); + it('resets checklist on incomplete dailies', () => { + user.dailys[0].checklist = [ + { + text: '1', + id: 'checklist-one', + completed: true, + }, { + text: '2', + id: 'checklist-two', + completed: true, + }, { + text: '3', + id: 'checklist-three', + completed: false, + }, + ]; + cron(); + _.each(user.dailys[0].checklist, (box) => { + expect(box.completed).to.be(false); + }); + }); + it('resets checklist on complete dailies', () => { + user.dailys[0].checklist = [ + { + text: '1', + id: 'checklist-one', + completed: true, + }, { + text: '2', + id: 'checklist-two', + completed: true, + }, { + text: '3', + id: 'checklist-three', + completed: false, + }, + ]; + user.dailys[0].completed = true; + cron(); + _.each(user.dailys[0].checklist, (box) => { + expect(box.completed).to.be(false); + }); + }); + it('does not reset checklist on grey incomplete dailies', () => { + let yesterday = moment().subtract(1, 'days'); + + user.dailys[0].repeat[DAY_MAPPING[yesterday.day()]] = false; + user.dailys[0].checklist = [ + { + text: '1', + id: 'checklist-one', + completed: true, + }, { + text: '2', + id: 'checklist-two', + completed: true, + }, { + text: '3', + id: 'checklist-three', + completed: true, + }, + ]; + cron(); + _.each(user.dailys[0].checklist, (box) => { + expect(box.completed).to.be(true); + }); + }); + it('resets checklist on complete grey complete dailies', () => { + let yesterday = moment().subtract(1, 'days'); + + user.dailys[0].repeat[DAY_MAPPING[yesterday.day()]] = false; + user.dailys[0].checklist = [ + { + text: '1', + id: 'checklist-one', + completed: true, + }, { + text: '2', + id: 'checklist-two', + completed: true, + }, { + text: '3', + id: 'checklist-three', + completed: true, + }, + ]; + user.dailys[0].completed = true; + cron(); + _.each(user.dailys[0].checklist, (box) => { + expect(box.completed).to.be(false); + }); + }); + it('does not damage user for incomplete dailies', () => { + expect(user).toHaveHP(50); + user.dailys[0].completed = true; + user.dailys[1].completed = false; + cron(); + expect(user).toHaveHP(50); + }); + it('gives credit for complete dailies', () => { + user.dailys[0].completed = true; + expect(user.dailys[0].history).to.be.empty; + cron(); + expect(user.dailys[0].history).to.not.be.empty; + }); + it('damages user for incomplete dailies after checkout', () => { + expect(user).toHaveHP(50); + user.dailys[0].completed = true; + user.dailys[1].completed = false; + user.preferences.sleep = false; + cron(); + expect(user.stats.hp).to.be.lessThan(50); + }); + }); + describe('Death', () => { + let user; + + beforeEach(() => { + user = newUser(); + }); + + it('revives correctly', () => { + user.stats = { + gp: 10, + exp: 100, + lvl: 2, + hp: 0, + class: 'warrior', + }; + user.ops.revive(); + expect(user).toHaveGP(0); + expect(user).toHaveExp(0); + expect(user).toHaveLevel(1); + expect(user).toHaveHP(50); + expect(user.items.gear.owned).to.eql({ + weapon_warrior_0: false, + }); + }); + + it('doesn\'t break unbreakables', () => { + let ce; + + ce = shared.countExists; + user.items.gear.owned.shield_warrior_1 = true; + user.items.gear.owned.shield_rogue_1 = true; + user.items.gear.owned.head_special_nye = true; + expect(ce(user.items.gear.owned)).to.be(4); + user.stats.hp = 0; + user.ops.revive(); + expect(ce(user.items.gear.owned)).to.be(3); + user.stats.hp = 0; + user.ops.revive(); + expect(ce(user.items.gear.owned)).to.be(2); + user.stats.hp = 0; + user.ops.revive(); + expect(ce(user.items.gear.owned)).to.be(2); + expect(user.items.gear.owned).to.eql({ + weapon_warrior_0: false, + shield_warrior_1: false, + shield_rogue_1: true, + head_special_nye: true, + }); + }); + + it('handles event items', () => { + user.items.gear.owned.head_special_nye = true; + + shared.content.gear.flat.head_special_nye.event.start = '2012-01-01'; + shared.content.gear.flat.head_special_nye.event.end = '2012-02-01'; + expect(shared.content.gear.flat.head_special_nye.canOwn(user)).to.be(true); + delete user.items.gear.owned.head_special_nye; + expect(shared.content.gear.flat.head_special_nye.canOwn(user)).to.be(false); + shared.content.gear.flat.head_special_nye.event.start = moment().subtract(5, 'days'); + shared.content.gear.flat.head_special_nye.event.end = moment().add(5, 'days'); + expect(shared.content.gear.flat.head_special_nye.canOwn(user)).to.be(true); + }); + }); + describe('Rebirth', () => { + it('removes correct gear', () => { + let user = newUser(); + + user.stats.lvl = 100; + user.items.gear.owned = { + weapon_warrior_0: true, + weapon_warrior_1: true, + armor_warrior_1: false, + armor_mystery_201402: true, + back_mystery_201402: false, + head_mystery_201402: true, + weapon_armoire_basicCrossbow: true, + }; + user.ops.rebirth(); + expect(user.items.gear.owned).to.eql({ + weapon_warrior_0: true, + weapon_warrior_1: false, + armor_warrior_1: false, + armor_mystery_201402: true, + back_mystery_201402: false, + head_mystery_201402: true, + weapon_armoire_basicCrossbow: false, + }); + }); + }); + describe('store', () => { + it('buys a Quest scroll', () => { + let user = newUser(); + + user.stats.gp = 205; + user.ops.buyQuest({ + params: { + key: 'dilatoryDistress1', + }, + }); + expect(user.items.quests).to.eql({ + dilatoryDistress1: 1, + }); + expect(user).toHaveGP(5); + }); + it('does not buy Quests without enough Gold', () => { + let user = newUser(); + + user.stats.gp = 1; + user.ops.buyQuest({ + params: { + key: 'dilatoryDistress1', + }, + }); + expect(user.items.quests).to.eql({}); + expect(user).toHaveGP(1); + }); + it('does not buy nonexistent Quests', () => { + let user = newUser(); + + user.stats.gp = 9999; + user.ops.buyQuest({ + params: { + key: 'snarfblatter', + }, + }); + expect(user.items.quests).to.eql({}); + expect(user).toHaveGP(9999); + }); + it('does not buy Gem-premium Quests', () => { + let user = newUser(); + + user.stats.gp = 9999; + user.ops.buyQuest({ + params: { + key: 'kraken', + }, + }); + expect(user.items.quests).to.eql({}); + expect(user).toHaveGP(9999); + }); + }); + describe('Gem purchases', () => { + it('does not purchase items without enough Gems', () => { + let user = newUser(); + + user.ops.purchase({ + params: { + type: 'eggs', + key: 'Cactus', + }, + }); + user.ops.purchase({ + params: { + type: 'gear', + key: 'headAccessory_special_foxEars', + }, + }); + user.ops.unlock({ + query: { + path: 'items.gear.owned.headAccessory_special_bearEars,items.gear.owned.headAccessory_special_cactusEars,items.gear.owned.headAccessory_special_foxEars,items.gear.owned.headAccessory_special_lionEars,items.gear.owned.headAccessory_special_pandaEars,items.gear.owned.headAccessory_special_pigEars,items.gear.owned.headAccessory_special_tigerEars,items.gear.owned.headAccessory_special_wolfEars', + }, + }); + expect(user.items.eggs).to.eql({}); + expect(user.items.gear.owned).to.eql({ + weapon_warrior_0: true, + }); + }); + it('purchases an egg', () => { + let user = newUser(); + + user.balance = 1; + user.ops.purchase({ + params: { + type: 'eggs', + key: 'Cactus', + }, + }); + expect(user.items.eggs).to.eql({ + Cactus: 1, + }); + expect(user.balance).to.eql(0.25); + }); + it('purchases fox ears', () => { + let user = newUser(); + + user.balance = 1; + user.ops.purchase({ + params: { + type: 'gear', + key: 'headAccessory_special_foxEars', + }, + }); + expect(user.items.gear.owned).to.eql({ + weapon_warrior_0: true, + headAccessory_special_foxEars: true, + }); + expect(user.balance).to.eql(0.5); + }); + it('unlocks all the animal ears at once', () => { + let user = newUser(); + + user.balance = 2; + user.ops.unlock({ + query: { + path: 'items.gear.owned.headAccessory_special_bearEars,items.gear.owned.headAccessory_special_cactusEars,items.gear.owned.headAccessory_special_foxEars,items.gear.owned.headAccessory_special_lionEars,items.gear.owned.headAccessory_special_pandaEars,items.gear.owned.headAccessory_special_pigEars,items.gear.owned.headAccessory_special_tigerEars,items.gear.owned.headAccessory_special_wolfEars', + }, + }); + expect(user.items.gear.owned).to.eql({ + weapon_warrior_0: true, + headAccessory_special_bearEars: true, + headAccessory_special_cactusEars: true, + headAccessory_special_foxEars: true, + headAccessory_special_lionEars: true, + headAccessory_special_pandaEars: true, + headAccessory_special_pigEars: true, + headAccessory_special_tigerEars: true, + headAccessory_special_wolfEars: true, + }); + expect(user.balance).to.eql(0.75); + }); + }); + describe('spells', () => { + _.each(shared.content.spells, (spellClass) => { + _.each(spellClass, (spell) => { + it(`${spell.text} has valid values`, () => { + expect(spell.target).to.match(/^(task|self|party|user)$/); + expect(spell.mana).to.be.an('number'); + if (spell.lvl) { + expect(spell.lvl).to.be.an('number'); + expect(spell.lvl).to.be.above(0); + } + expect(spell.cast).to.be.a('function'); + }); + }); + }); + }); + describe('drop system', () => { + let user = null; + const MIN_RANGE_FOR_POTION = 0; + const MAX_RANGE_FOR_POTION = 0.3; + const MIN_RANGE_FOR_EGG = 0.4; + const MAX_RANGE_FOR_EGG = 0.6; + const MIN_RANGE_FOR_FOOD = 0.7; + const MAX_RANGE_FOR_FOOD = 1; + + beforeEach(function () { + user = newUser(); + user.flags.dropsEnabled = true; + this.task_id = shared.uuid(); + return user.ops.addTask({ + body: { + type: 'daily', + id: this.task_id, + }, + }); + }); + + it('drops a hatching potion', function () { + let results = []; + + for (let random = MIN_RANGE_FOR_POTION; random <= MAX_RANGE_FOR_POTION; random += 0.1) { + sinon.stub(user.fns, 'predictableRandom').returns(random); + user.ops.score({ + params: { + id: this.task_id, + direction: 'up', + }, + }); + expect(user.items.eggs).to.be.empty; + expect(user.items.hatchingPotions).to.not.be.empty; + expect(user.items.food).to.be.empty; + results.push(user.fns.predictableRandom.restore()); + } + return results; + }); + it('drops a pet egg', function () { + let results = []; + + for (let random = MIN_RANGE_FOR_EGG; random <= MAX_RANGE_FOR_EGG; random += 0.1) { + sinon.stub(user.fns, 'predictableRandom').returns(random); + user.ops.score({ + params: { + id: this.task_id, + direction: 'up', + }, + }); + expect(user.items.eggs).to.not.be.empty; + expect(user.items.hatchingPotions).to.be.empty; + expect(user.items.food).to.be.empty; + results.push(user.fns.predictableRandom.restore()); + } + return results; + }); + + it('drops food', function () { + let results = []; + + for (let random = MIN_RANGE_FOR_FOOD; random <= MAX_RANGE_FOR_FOOD; random += 0.1) { + sinon.stub(user.fns, 'predictableRandom').returns(random); + user.ops.score({ + params: { + id: this.task_id, + direction: 'up', + }, + }); + expect(user.items.eggs).to.be.empty; + expect(user.items.hatchingPotions).to.be.empty; + expect(user.items.food).to.not.be.empty; + results.push(user.fns.predictableRandom.restore()); + } + return results; + }); + + it('does not get a drop', function () { + sinon.stub(user.fns, 'predictableRandom').returns(0.5); + user.ops.score({ + params: { + id: this.task_id, + direction: 'up', + }, + }); + expect(user.items.eggs).to.eql({}); + expect(user.items.hatchingPotions).to.eql({}); + expect(user.items.food).to.eql({}); + + user.fns.predictableRandom.restore(); + }); + }); + describe('Quests', () => { + _.each(shared.content.quests, (quest) => { + it(`${ quest.text() } has valid values`, () => { + expect(quest.notes()).to.be.an('string'); + if (quest.completion) { + expect(quest.completion()).to.be.an('string'); + } + if (quest.previous) { + expect(quest.previous).to.be.an('string'); + } + if (quest.canBuy()) { + expect(quest.value).to.be.greaterThan(0); + } + expect(quest.drop.gp).to.not.be.lessThan(0); + expect(quest.drop.exp).to.not.be.lessThan(0); + expect(quest.category).to.match(/pet|unlockable|gold|world/); + if (quest.drop.items) { + expect(quest.drop.items).to.be.an(Array); + } + if (quest.boss) { + expect(quest.boss.name()).to.be.an('string'); + expect(quest.boss.hp).to.be.greaterThan(0); + expect(quest.boss.str).to.be.greaterThan(0); + } else if (quest.collect) { + _.each(quest.collect, (collect) => { + expect(collect.text()).to.be.an('string'); + expect(collect.count).to.be.greaterThan(0); + }); + } + }); + }); + }); + describe('Achievements', () => { + _.each(shared.content.classes, (klass) => { + let user = newUser(); + + user.stats.gp = 10000; + _.each(shared.content.gearTypes, (type) => { + _.each([1, 2, 3, 4, 5], (i) => { + return user.ops.buy({ + params: `${type}_${klass}_${i}`, + }); + }); + }); + + it(`does not get ultimateGear ${klass}`, () => { + expect(user.achievements.ultimateGearSets[klass]).to.not.be.ok(); + }); + _.each(shared.content.gearTypes, (type) => { + return user.ops.buy({ + params: `${type}_${klass}_6`, + }); + }); + + xit(`gets ultimateGear ${klass}`, () => { + expect(user.achievements.ultimateGearSets[klass]).to.be.ok(); + }); + }); + it('does not remove existing Ultimate Gear achievements', () => { + let user = newUser(); + + user.achievements.ultimateGearSets = { + healer: true, + wizard: true, + rogue: true, + warrior: true, + }; + user.items.gear.owned.shield_warrior_5 = false; + user.items.gear.owned.weapon_rogue_6 = false; + user.ops.buy({ + params: 'shield_warrior_5', + }); + expect(user.achievements.ultimateGearSets).to.eql({ + healer: true, + wizard: true, + rogue: true, + warrior: true, + }); + }); + }); + describe('unlocking features', () => { + it('unlocks drops at level 3', () => { + let user = newUser(); + + user.stats.lvl = 3; + user.fns.updateStats(user.stats); + expect(user.flags.dropsEnabled).to.be.ok(); + }); + it('unlocks Rebirth at level 50', () => { + let user = newUser(); + + user.stats.lvl = 50; + user.fns.updateStats(user.stats); + expect(user.flags.rebirthEnabled).to.be.ok(); + }); + describe('level-awarded Quests', () => { + it('gets Attack of the Mundane at level 15', () => { + let user = newUser(); + + user.stats.lvl = 15; + user.fns.updateStats(user.stats); + expect(user.flags.levelDrops.atom1).to.be.ok(); + expect(user.items.quests.atom1).to.eql(1); + }); + + it('gets Vice at level 30', () => { + let user = newUser(); + + user.stats.lvl = 30; + user.fns.updateStats(user.stats); + expect(user.flags.levelDrops.vice1).to.be.ok(); + expect(user.items.quests.vice1).to.eql(1); + }); + + it('gets Golden Knight at level 40', () => { + let user = newUser(); + + user.stats.lvl = 40; + user.fns.updateStats(user.stats); + expect(user.flags.levelDrops.goldenknight1).to.be.ok(); + expect(user.items.quests.goldenknight1).to.eql(1); + }); + + it('gets Moonstone Chain at level 60', () => { + let user = newUser(); + + user.stats.lvl = 60; + user.fns.updateStats(user.stats); + expect(user.flags.levelDrops.moonstone1).to.be.ok(); + expect(user.items.quests.moonstone1).to.eql(1); + }); + }); + }); +}); + +describe('Simple Scoring', () => { + beforeEach(function () { + let ref = beforeAfter(); + + this.before = ref.before; + this.after = ref.after; + }); + + it('Habits : Up', function () { + this.after.ops.score({ + params: { + id: this.after.habits[0].id, + direction: 'down', + }, + query: { + times: 5, + }, + }); + expectLostPoints(this.before, this.after, 'habit'); + }); + it('Habits : Down', function () { + this.after.ops.score({ + params: { + id: this.after.habits[0].id, + direction: 'up', + }, + query: { + times: 5, + }, + }); + expectGainedPoints(this.before, this.after, 'habit'); + }); + it('Dailys : Up', function () { + this.after.ops.score({ + params: { + id: this.after.dailys[0].id, + direction: 'up', + }, + }); + expectGainedPoints(this.before, this.after, 'daily'); + }); + it('Dailys : Up, Down', function () { + this.after.ops.score({ + params: { + id: this.after.dailys[0].id, + direction: 'up', + }, + }); + this.after.ops.score({ + params: { + id: this.after.dailys[0].id, + direction: 'down', + }, + }); + expectClosePoints(this.before, this.after, 'daily'); + }); + it('Todos : Up', function () { + this.after.ops.score({ + params: { + id: this.after.todos[0].id, + direction: 'up', + }, + }); + expectGainedPoints(this.before, this.after, 'todo'); + }); + + it('Todos : Up, Down', function () { + this.after.ops.score({ + params: { + id: this.after.todos[0].id, + direction: 'up', + }, + }); + this.after.ops.score({ + params: { + id: this.after.todos[0].id, + direction: 'down', + }, + }); + expectClosePoints(this.before, this.after, 'todo'); + }); +}); + +describe('Cron', () => { + it('computes shouldCron', () => { + let user = newUser(); + let paths = {}; + + user.fns.cron({ + paths, + }); + expect(user.lastCron).to.not.be.ok; + user.lastCron = Number(moment().subtract(1, 'days')); + paths = {}; + user.fns.cron({ + paths, + }); + expect(user.lastCron).to.be.greaterThan(0); + }); + it('only dailies & todos are affected', () => { + let ref = beforeAfter({ + daysAgo: 1, + }); + let before = ref.before; + let after = ref.after; + + before.dailys = before.todos = after.dailys = after.todos = []; + after.fns.cron(); + before.stats.mp = after.stats.mp; + expect(after.lastCron).to.not.be(before.lastCron); + delete after.stats.buffs; + delete before.stats.buffs; + expect(before.stats).to.eql(after.stats); + + let beforeTasks = before.habits.concat(before.dailys).concat(before.todos).concat(before.rewards); + let afterTasks = after.habits.concat(after.dailys).concat(after.todos).concat(after.rewards); + + expect(beforeTasks).to.eql(afterTasks); + }); + describe('preening', () => { + beforeEach(function () { + this.clock = sinon.useFakeTimers(Date.parse('2013-11-20'), 'Date'); + }); + afterEach(function () { + return this.clock.restore(); + }); + + it('should preen user history', function () { + let ref = beforeAfter({ + daysAgo: 1, + }); + let after = ref.after; + + let history = [ + { + date: '09/01/2012', + value: 0, + }, { + date: '10/01/2012', + value: 0, + }, { + date: '11/01/2012', + value: 2, + }, { + date: '12/01/2012', + value: 2, + }, { + date: '01/01/2013', + value: 1, + }, { + date: '01/15/2013', + value: 3, + }, { + date: '02/01/2013', + value: 2, + }, { + date: '02/15/2013', + value: 4, + }, { + date: '03/01/2013', + value: 3, + }, { + date: '03/15/2013', + value: 5, + }, { + date: '04/01/2013', + value: 4, + }, { + date: '04/15/2013', + value: 6, + }, { + date: '05/01/2013', + value: 5, + }, { + date: '05/15/2013', + value: 7, + }, { + date: '06/01/2013', + value: 6, + }, { + date: '06/15/2013', + value: 8, + }, { + date: '07/01/2013', + value: 7, + }, { + date: '07/15/2013', + value: 9, + }, { + date: '08/01/2013', + value: 8, + }, { + date: '08/15/2013', + value: 10, + }, { + date: '09/01/2013', + value: 9, + }, { + date: '09/15/2013', + value: 11, + }, { + date: '010/01/2013', + value: 10, + }, { + date: '010/15/2013', + value: 12, + }, { + date: '011/01/2013', + value: 12, + }, { + date: '011/02/2013', + value: 13, + }, { + date: '011/03/2013', + value: 14, + }, { + date: '011/04/2013', + value: 15, + }, + ]; + + after.history = { + exp: _.cloneDeep(history), + todos: _.cloneDeep(history), + }; + after.habits[0].history = _.cloneDeep(history); + after.fns.cron(); + after.history.exp.pop(); + after.history.todos.pop(); + _.each([after.history.exp, after.history.todos, after.habits[0].history], function (arr) { + expect(_.map(arr, (x) => { + return x.value; + })).to.eql([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]); + }); + }); + }); + describe('Todos', () => { + it('1 day missed', () => { + let ref = beforeAfter({ + daysAgo: 1, + }); + let before = ref.before; + let after = ref.after; + + before.dailys = after.dailys = []; + after.fns.cron(); + expect(after).toHaveHP(50); + expect(after).toHaveExp(0); + expect(after).toHaveGP(0); + expect(before.todos[0].value).to.be(0); + expect(after.todos[0].value).to.be(-1); + expect(after.history.todos).to.have.length(1); + }); + it('2 days missed', () => { + let ref = beforeAfter({ + daysAgo: 2, + }); + let before = ref.before; + let after = ref.after; + + before.dailys = after.dailys = []; + after.fns.cron(); + expect(before.todos[0].value).to.be(0); + expect(after.todos[0].value).to.be(-1); + }); + }); + describe('cron day calculations', () => { + let dayStart = 4; + let fstr = 'YYYY-MM-DD HH: mm: ss'; + + it('startOfDay before dayStart', () => { + let start = startOfDay({ + now: moment('2014-10-09 02: 30: 00'), + dayStart, + }); + + expect(start.format(fstr)).to.eql('2014-10-08 04: 00: 00'); + }); + it('startOfDay after dayStart', () => { + let start = startOfDay({ + now: moment('2014-10-09 05: 30: 00'), + dayStart, + }); + + expect(start.format(fstr)).to.eql('2014-10-09 04: 00: 00'); + }); + it('daysSince cron before, now after', () => { + let lastCron = moment('2014-10-09 02: 30: 00'); + let days = daysSince(lastCron, { + now: moment('2014-10-09 11: 30: 00'), + dayStart, + }); + + expect(days).to.eql(1); + }); + it('daysSince cron before, now before', () => { + let lastCron = moment('2014-10-09 02: 30: 00'); + let days = daysSince(lastCron, { + now: moment('2014-10-09 03: 30: 00'), + dayStart, + }); + + expect(days).to.eql(0); + }); + it('daysSince cron after, now after', () => { + let lastCron = moment('2014-10-09 05: 30: 00'); + let days = daysSince(lastCron, { + now: moment('2014-10-09 06: 30: 00'), + dayStart, + }); + + expect(days).to.eql(0); + }); + it('daysSince cron after, now tomorrow before', () => { + let lastCron = moment('2014-10-09 12: 30: 00'); + let days = daysSince(lastCron, { + now: moment('2014-10-10 01: 30: 00'), + dayStart, + }); + + expect(days).to.eql(0); + }); + it('daysSince cron after, now tomorrow after', () => { + let lastCron = moment('2014-10-09 12: 30: 00'); + let days = daysSince(lastCron, { + now: moment('2014-10-10 10: 30: 00'), + dayStart, + }); + + expect(days).to.eql(1); + }); + xit('daysSince, last cron before new dayStart', () => { + let lastCron = moment('2014-10-09 01: 00: 00'); + let days = daysSince(lastCron, { + now: moment('2014-10-09 05: 00: 00'), + dayStart, + }); + + expect(days).to.eql(0); + }); + }); + + describe('dailies', () => { + describe('new day', () => { + /* + This section runs through a 'cron matrix' of all permutations (that I can easily account for). It sets + task due days, user custom day start, timezoneOffset, etc - then runs cron, jumps to tomorrow and runs cron, + and so on - testing each possible outcome along the way + */ + + function runCron (options) { + _.each([480, 240, 0, -120], function (timezoneOffset) { + let now = startOfWeek({ + timezoneOffset, + }).add(options.currentHour || 0, 'hours'); + + let ref = beforeAfter({ + now, + timezoneOffset, + daysAgo: 1, + cronAfterStart: options.cronAfterStart || true, + dayStart: options.dayStart || 0, + limitOne: 'daily', + }); + + let before = ref.before; + let after = ref.after; + + if (options.repeat) { + before.dailys[0].repeat = after.dailys[0].repeat = options.repeat; + } + before.dailys[0].streak = after.dailys[0].streak = 10; + if (options.checked) { + before.dailys[0].completed = after.dailys[0].completed = true; + } + before.dailys[0].startDate = after.dailys[0].startDate = moment().subtract(30, 'days'); + if (options.shouldDo) { + expect(shared.shouldDo(now.toDate(), after.dailys[0], { + timezoneOffset, + dayStart: options.dayStart, + now, + })).to.be.ok(); + } + after.fns.cron({ + now, + }); + before.stats.mp = after.stats.mp; + + if (options.expect === 'losePoints') { + expectLostPoints(before, after, 'daily'); + } else if (options.expect === 'noChange') { + expectNoChange(before, after); + } else if (options.expect === 'noDamage') { + expectDayResetNoDamage(before, after); + } + + return { + before, + after, + }; + }); + } + + let cronMatrix = { + steps: { + 'due yesterday': { + defaults: { + daysAgo: 1, + cronAfterStart: true, + limitOne: 'daily', + }, + steps: { + '(simple)': { + expect: 'losePoints', + }, + 'due today': { + defaults: { + repeat: { + su: true, + m: true, + t: true, + w: true, + th: true, + f: true, + s: true, + }, + }, + steps: { + 'pre-dayStart': { + defaults: { + currentHour: 3, + dayStart: 4, + shouldDo: true, + }, + steps: { + checked: { + checked: true, + expect: 'noChange', + }, + 'un-checked': { + checked: false, + expect: 'noChange', + }, + }, + }, + 'post-dayStart': { + defaults: { + currentHour: 5, + dayStart: 4, + shouldDo: true, + }, + steps: { + checked: { + checked: true, + expect: 'noDamage', + }, + unchecked: { + checked: false, + expect: 'losePoints', + }, + }, + }, + }, + }, + 'NOT due today': { + defaults: { + repeat: { + su: true, + m: false, + t: true, + w: true, + th: true, + f: true, + s: true, + }, + }, + steps: { + 'pre-dayStart': { + defaults: { + currentHour: 3, + dayStart: 4, + shouldDo: true, + }, + steps: { + checked: { + checked: true, + expect: 'noChange', + }, + 'un-checked': { + checked: false, + expect: 'noChange', + }, + }, + }, + 'post-dayStart': { + defaults: { + currentHour: 5, + dayStart: 4, + shouldDo: false, + }, + steps: { + checked: { + checked: true, + expect: 'noDamage', + }, + unchecked: { + checked: false, + expect: 'losePoints', + }, + }, + }, + }, + }, + }, + }, + 'not due yesterday': { + defaults: repeatWithoutLastWeekday(), + steps: { + '(simple)': { + expect: 'noDamage', + }, + 'post-dayStart': { + currentHour: 5, + dayStart: 4, + expect: 'noDamage', + }, + 'pre-dayStart': { + currentHour: 3, + dayStart: 4, + expect: 'noChange', + }, + }, + }, + }, + }; + + let recurseCronMatrix = (obj, options = {}) => { + if (obj.steps) { + _.each(obj.steps, (step, text) => { + let o = _.cloneDeep(options); + + if (!o.text) { + o.text = ''; + } + o.text += `${text}`; + return recurseCronMatrix(step, _.defaults(o, obj.defaults)); + }); + } else { + it(`${options.text}`, () => { + return runCron(_.defaults(obj, options)); + }); + } + }; + + return recurseCronMatrix(cronMatrix); + }); + }); +}); + +describe('Helper', () => { + it('calculates gold coins', () => { + expect(shared.gold(10)).to.eql(10); + expect(shared.gold(1.957)).to.eql(1); + expect(shared.gold()).to.eql(0); + }); + it('calculates silver coins', () => { + expect(shared.silver(10)).to.eql(0); + expect(shared.silver(1.957)).to.eql(95); + expect(shared.silver(0.01)).to.eql('01'); + expect(shared.silver()).to.eql('00'); + }); + it('calculates experience to next level', () => { + expect(shared.tnl(1)).to.eql(150); + expect(shared.tnl(2)).to.eql(160); + expect(shared.tnl(10)).to.eql(260); + expect(shared.tnl(99)).to.eql(3580); + }); + it('calculates the start of the day', () => { + let fstr = 'YYYY-MM-DD HH: mm: ss'; + let today = '2013-01-01 00: 00: 00'; + let zone = moment(today).zone(); + + expect(startOfDay({ + now: new Date(2013, 0, 1, 0), + }, { + timezoneOffset: zone, + }).format(fstr)).to.eql(today); + expect(startOfDay({ + now: new Date(2013, 0, 1, 5), + }, { + timezoneOffset: zone, + }).format(fstr)).to.eql(today); + expect(startOfDay({ + now: new Date(2013, 0, 1, 23, 59, 59), + timezoneOffset: zone, + }).format(fstr)).to.eql(today); + }); +}); diff --git a/test/common/count.js b/test/common/count.js index b9040a71f1..a19d648267 100644 --- a/test/common/count.js +++ b/test/common/count.js @@ -1,192 +1,206 @@ -var sinon = require('sinon'); -var chai = require("chai") -chai.use(require("sinon-chai")) -var expect = chai.expect +/* eslint-disable camelcase */ +let count = require('../../common/script/count'); -require('coffee-script'); -var count = require('../../common/script/count'); +describe('count', () => { + describe('beastMasterProgress', () => { + it('returns 0 if no pets', () => { + let pets = {}; + let beastMasterTotal = count.beastMasterProgress(pets); -describe('count', function() { - describe('beastMasterProgress', function() { - it('returns 0 if no pets', function() { - var pets = {}; - var beastMasterTotal = count.beastMasterProgress(pets); expect(beastMasterTotal).to.eql(0); }); - it('counts drop pets', function() { - var pets = { "Dragon-Red": 1, "Wolf-Base": 2 }; - var beastMasterTotal = count.beastMasterProgress(pets); + it('counts drop pets', () => { + let pets = { 'Dragon-Red': 1, 'Wolf-Base': 2 }; + let beastMasterTotal = count.beastMasterProgress(pets); + expect(beastMasterTotal).to.eql(2); }); - it('does not count quest pets', function() { - var pets = { "Dragon-Red": 1, "Gryphon-Base": 1 }; - var beastMasterTotal = count.beastMasterProgress(pets); + it('does not count quest pets', () => { + let pets = { 'Dragon-Red': 1, 'Gryphon-Base': 1 }; + let beastMasterTotal = count.beastMasterProgress(pets); + expect(beastMasterTotal).to.eql(1); }); - it('does not count pets hatched with premium potions', function() { - var pets = { - "Wolf-Spooky": 5, - "Dragon-Spooky": 5, - "FlyingPig-Base": 5 - } - var beastMasterTotal = count.beastMasterProgress(pets); - expect(beastMasterTotal).to.eql(1); - }); - - it('does not count special pets', function() { - var pets = { - "Wolf-Base": 2, - "Wolf-Veteran": 1, - "Wolf-Cerberus": 1, - "Dragon-Hydra": 1 + it('does not count pets hatched with premium potions', () => { + let pets = { + 'Wolf-Spooky': 5, + 'Dragon-Spooky': 5, + 'FlyingPig-Base': 5, }; - var beastMasterTotal = count.beastMasterProgress(pets); + let beastMasterTotal = count.beastMasterProgress(pets); + expect(beastMasterTotal).to.eql(1); }); - it('counts drop pets that have been raised to a mount', function() { - var raisedToMount = -1; - var pets = { "Dragon-Red": 1, "Wolf-Base": raisedToMount }; - var beastMasterTotal = count.beastMasterProgress(pets); + it('does not count special pets', () => { + let pets = { + 'Wolf-Base': 2, + 'Wolf-Veteran': 1, + 'Wolf-Cerberus': 1, + 'Dragon-Hydra': 1, + }; + let beastMasterTotal = count.beastMasterProgress(pets); + + expect(beastMasterTotal).to.eql(1); + }); + + it('counts drop pets that have been raised to a mount', () => { + let raisedToMount = -1; + let pets = { 'Dragon-Red': 1, 'Wolf-Base': raisedToMount }; + let beastMasterTotal = count.beastMasterProgress(pets); + expect(beastMasterTotal).to.eql(2); }); - it('does not counts drop pets that have been released', function() { - var releasedPet = 0; - var pets = { "Dragon-Red": 1, "Wolf-Base": releasedPet }; - var beastMasterTotal = count.beastMasterProgress(pets); + it('does not counts drop pets that have been released', () => { + let releasedPet = 0; + let pets = { 'Dragon-Red': 1, 'Wolf-Base': releasedPet }; + let beastMasterTotal = count.beastMasterProgress(pets); + expect(beastMasterTotal).to.eql(1); }); }); - describe('mountMasterProgress', function() { - it('returns 0 if no mounts', function() { - var mounts = {}; - var mountMasterTotal = count.mountMasterProgress(mounts); + describe('mountMasterProgress', () => { + it('returns 0 if no mounts', () => { + let mounts = {}; + let mountMasterTotal = count.mountMasterProgress(mounts); + expect(mountMasterTotal).to.eql(0); }); - it('counts drop mounts', function() { - var mounts = { "Dragon-Red": true, "Wolf-Base": true }; - var mountMasterTotal = count.mountMasterProgress(mounts); + it('counts drop mounts', () => { + let mounts = { 'Dragon-Red': true, 'Wolf-Base': true }; + let mountMasterTotal = count.mountMasterProgress(mounts); + expect(mountMasterTotal).to.eql(2); }); - it('does not count premium mounts', function() { - var mounts = { - "Dragon-Red": true, - "FlyingPig-Spooky": true - } - var mountMasterTotal = count.mountMasterProgress(mounts); + it('does not count premium mounts', () => { + let mounts = { + 'Dragon-Red': true, + 'FlyingPig-Spooky': true, + }; + let mountMasterTotal = count.mountMasterProgress(mounts); + expect(mountMasterTotal).to.eql(1); }); - it('does not count quest mounts', function() { - var mounts = { "Dragon-Red": true, "Gryphon-Base": true }; - var mountMasterTotal = count.mountMasterProgress(mounts); + it('does not count quest mounts', () => { + let mounts = { 'Dragon-Red': true, 'Gryphon-Base': true }; + let mountMasterTotal = count.mountMasterProgress(mounts); + expect(mountMasterTotal).to.eql(1); }); - it('does not count special mounts', function() { - var mounts = { "Wolf-Base": true, "BearCub-Polar": true}; - var mountMasterTotal = count.mountMasterProgress(mounts); + it('does not count special mounts', () => { + let mounts = { 'Wolf-Base': true, 'BearCub-Polar': true}; + let mountMasterTotal = count.mountMasterProgress(mounts); + expect(mountMasterTotal).to.eql(1); }); - it('only counts drop mounts that are currently owned', function() { - var notCurrentlyOwned = false; - var mounts = { "Dragon-Red": true, "Wolf-Base": notCurrentlyOwned }; - var mountMasterTotal = count.mountMasterProgress(mounts); + it('only counts drop mounts that are currently owned', () => { + let notCurrentlyOwned = false; + let mounts = { 'Dragon-Red': true, 'Wolf-Base': notCurrentlyOwned }; + let mountMasterTotal = count.mountMasterProgress(mounts); + expect(mountMasterTotal).to.eql(1); }); }); - describe('remainingGearInSet', function() { - it('counts remaining gear based on set', function() { - var gear = { - 'weapon_wizard_0':true, - 'weapon_wizard_1':true, - 'weapon_warrior_0':true, - 'weapon_warrior_1':true, - 'weapon_armor_0':true, - 'weapon_armor_1':true + describe('remainingGearInSet', () => { + it('counts remaining gear based on set', () => { + let gear = { + weapon_wizard_0: true, + weapon_wizard_1: true, + weapon_warrior_0: true, + weapon_warrior_1: true, + weapon_armor_0: true, + weapon_armor_1: true, }; - var armoireCount = count.remainingGearInSet(gear, 'warrior'); + let armoireCount = count.remainingGearInSet(gear, 'warrior'); + expect(armoireCount).to.eql(20); }); - it.skip('includes previously owned items in count (https://github.com/HabitRPG/habitrpg/issues/5624#issuecomment-124018717)', function() { - var gear = { - 'weapon_warrior_0':false, - 'weapon_warrior_1':false, - 'weapon_armor_0':true, - 'weapon_armor_1':true + it.skip('includes previously owned items in count (https: //github.com/HabitRPG/habitrpg/issues/5624#issuecomment-124018717)', () => { + let gear = { + weapon_warrior_0: false, + weapon_warrior_1: false, + weapon_armor_0: true, + weapon_armor_1: true, }; - var armoireCount = count.remainingGearInSet(gear, 'warrior'); + let armoireCount = count.remainingGearInSet(gear, 'warrior'); + expect(armoireCount).to.eql(20); }); }); - describe('dropPetsCurrentlyOwned', function() { - it('counts drop pets owned', function() { - var pets = { - "Wolf-Base": 2, - "Wolf-Red": 4 + describe('dropPetsCurrentlyOwned', () => { + it('counts drop pets owned', () => { + let pets = { + 'Wolf-Base': 2, + 'Wolf-Red': 4, }; - var dropPets = count.dropPetsCurrentlyOwned(pets); + let dropPets = count.dropPetsCurrentlyOwned(pets); + expect(dropPets).to.eql(2); }); - it('does not count pets that have been raised to mounts', function() { - var pets = { - "Wolf-Base": -1, - "Wolf-Red": 4, - "Wolf-Veteran": 1, - "Gryphon-Base": 1 + it('does not count pets that have been raised to mounts', () => { + let pets = { + 'Wolf-Base': -1, + 'Wolf-Red': 4, + 'Wolf-Veteran': 1, + 'Gryphon-Base': 1, }; - var dropPets = count.dropPetsCurrentlyOwned(pets); + let dropPets = count.dropPetsCurrentlyOwned(pets); + expect(dropPets).to.eql(1); }); - it('does not count quest pets', function() { - var pets = { - "Wolf-Base": 2, - "Wolf-Red": 4, - "Gryphon-Base": 1 + it('does not count quest pets', () => { + let pets = { + 'Wolf-Base': 2, + 'Wolf-Red': 4, + 'Gryphon-Base': 1, }; - var dropPets = count.dropPetsCurrentlyOwned(pets); + let dropPets = count.dropPetsCurrentlyOwned(pets); + expect(dropPets).to.eql(2); }); - it('does not count special pets', function() { - var pets = { - "Wolf-Base": 2, - "Wolf-Red": 4, - "Wolf-Veteran": 1 + it('does not count special pets', () => { + let pets = { + 'Wolf-Base': 2, + 'Wolf-Red': 4, + 'Wolf-Veteran': 1, }; - var dropPets = count.dropPetsCurrentlyOwned(pets); + let dropPets = count.dropPetsCurrentlyOwned(pets); + expect(dropPets).to.eql(2); }); }); - describe('questsOfCategory', function() { - - it('counts user quest scrolls of a particular category', function() { - var quests = { - "atom1": 2, - "whale": 4, - "kraken": 2, - "sheep": 1, - "goldenknight2": 1 + describe('questsOfCategory', () => { + it('counts user quest scrolls of a particular category', () => { + let quests = { + atom1: 2, + whale: 4, + kraken: 2, + sheep: 1, + goldenknight2: 1, }; - var petQuestCount = count.questsOfCategory(quests, 'pet'); - var unlockableQuestCount = count.questsOfCategory(quests, 'unlockable'); - var goldQuestCount = count.questsOfCategory(quests, 'gold'); + let petQuestCount = count.questsOfCategory(quests, 'pet'); + let unlockableQuestCount = count.questsOfCategory(quests, 'unlockable'); + let goldQuestCount = count.questsOfCategory(quests, 'gold'); + expect(petQuestCount).to.eql(3); expect(unlockableQuestCount).to.eql(2); expect(goldQuestCount).to.eql(0); diff --git a/test/common/dailies.coffee b/test/common/dailies.coffee deleted file mode 100644 index d06c291f27..0000000000 --- a/test/common/dailies.coffee +++ /dev/null @@ -1,418 +0,0 @@ -_ = require 'lodash' -expect = require 'expect.js' -sinon = require 'sinon' -moment = require 'moment' -shared = require '../../common/script/index.coffee' -shared.i18n.translations = require('../../website/src/i18n.js').translations - -repeatWithoutLastWeekday = ()-> - repeat = {su:true,m:true,t:true,w:true,th:true,f:true,s:true} - if shared.startOfWeek(moment().zone(0)).isoWeekday() == 1 # Monday - repeat.su = false - else - repeat.s = false - {repeat: repeat} - -### Helper Functions #### -# @TODO: Refactor into helper file -newUser = (addTasks=true)-> - buffs = {per:0, int:0, con:0, str:0, stealth: 0, streaks: false} - user = - auth: - timestamps: {} - stats: {str:1, con:1, per:1, int:1, mp: 32, class: 'warrior', buffs: buffs} - items: - lastDrop: - count: 0 - hatchingPotions: {} - eggs: {} - food: {} - gear: - equipped: {} - costume: {} - party: - quest: - progress: - down: 0 - preferences: {} - dailys: [] - todos: [] - rewards: [] - flags: {} - achievements: {} - contributor: - level: 2 - shared.wrap(user) - user.ops.reset(null, ->) - if addTasks - _.each ['habit', 'todo', 'daily'], (task)-> - user.ops.addTask {body: {type: task, id: shared.uuid()}} - user - -cron = (usr, missedDays=1) -> - usr.lastCron = moment().subtract(missedDays,'days') - usr.fns.cron() - -describe 'daily/weekly that repeats everyday (default)', -> - user = null - daily = null - weekly = null - - describe 'when startDate is in the future', -> - beforeEach -> - user = newUser() - user.dailys = [ - shared.taskDefaults({type:'daily', startDate: moment().add(7, 'days'), frequency: 'daily'}) - shared.taskDefaults({type:'daily', startDate: moment().add(7, 'days'), frequency: 'weekly', repeat: {su:true,m:true,t:true,w:true,th:true,f:true,s:true}}) - ] - daily = user.dailys[0] - weekly = user.dailys[1] - - it 'does not damage user for not completing it', -> - cron(user) - expect(user.stats.hp).to.be 50 - - it 'does not change value on cron if daily is incomplete', -> - cron(user) - expect(daily.value).to.be 0 - expect(weekly.value).to.be 0 - - it 'does not reset checklists if daily is not marked as complete', -> - checklist = [ - { - 'text' : '1', - 'id' : 'checklist-one', - 'completed' : true - }, - { - 'text' : '2', - 'id' : 'checklist-two', - 'completed' : true - }, - { - 'text' : '3', - 'id' : 'checklist-three', - 'completed' : false - } - ] - daily.checklist = checklist - weekly.checklist = checklist - cron(user) - - expect(daily.checklist[0].completed).to.be true - expect(daily.checklist[1].completed).to.be true - expect(daily.checklist[2].completed).to.be false - - expect(weekly.checklist[0].completed).to.be true - expect(weekly.checklist[1].completed).to.be true - expect(weekly.checklist[2].completed).to.be false - - it 'resets checklists if daily is marked as complete', -> - checklist = [ - { - 'text' : '1', - 'id' : 'checklist-one', - 'completed' : true - }, - { - 'text' : '2', - 'id' : 'checklist-two', - 'completed' : true - }, - { - 'text' : '3', - 'id' : 'checklist-three', - 'completed' : false - } - ] - daily.checklist = checklist - weekly.checklist = checklist - daily.completed = true - weekly.completed = true - cron(user) - - _.each daily.checklist, (box)-> - expect(box.completed).to.be false - - _.each weekly.checklist, (box)-> - expect(box.completed).to.be false - - it 'is due on startDate', -> - daily_due_today = shared.shouldDo moment(), daily - daily_due_on_start_date = shared.shouldDo moment().add(7, 'days'), daily - - expect(daily_due_today).to.be false - expect(daily_due_on_start_date).to.be true - - weekly_due_today = shared.shouldDo moment(), weekly - weekly_due_on_start_date = shared.shouldDo moment().add(7, 'days'), weekly - - expect(weekly_due_today).to.be false - expect(weekly_due_on_start_date).to.be true - - describe 'when startDate is in the past', -> - beforeEach -> - user = newUser() - user.dailys = [ - shared.taskDefaults({type:'daily', startDate: moment().subtract(7, 'days'), frequency: 'daily'}) - shared.taskDefaults({type:'daily', startDate: moment().subtract(7, 'days'), frequency: 'weekly'}) - ] - daily = user.dailys[0] - weekly = user.dailys[1] - - it 'does damage user for not completing it', -> - cron(user) - expect(user.stats.hp).to.be.lessThan 50 - - it 'decreases value on cron if daily is incomplete', -> - cron(user, 1) - expect(daily.value).to.be -1 - expect(weekly.value).to.be -1 - - it 'decreases value on cron once only if daily is incomplete and multiple days are missed', -> - cron(user, 7) - expect(daily.value).to.be -1 - expect(weekly.value).to.be -1 - - it 'resets checklists if daily is not marked as complete', -> - checklist = [ - { - 'text' : '1', - 'id' : 'checklist-one', - 'completed' : true - }, - { - 'text' : '2', - 'id' : 'checklist-two', - 'completed' : true - }, - { - 'text' : '3', - 'id' : 'checklist-three', - 'completed' : false - } - ] - daily.checklist = checklist - weekly.checklist = checklist - cron(user) - - _.each daily.checklist, (box)-> - expect(box.completed).to.be false - - _.each weekly.checklist, (box)-> - expect(box.completed).to.be false - - it 'resets checklists if daily is marked as complete', -> - checklist = [ - { - 'text' : '1', - 'id' : 'checklist-one', - 'completed' : true - }, - { - 'text' : '2', - 'id' : 'checklist-two', - 'completed' : true - }, - { - 'text' : '3', - 'id' : 'checklist-three', - 'completed' : false - } - ] - daily.checklist = checklist - daily.completed = true - weekly.checklist = checklist - weekly.completed = true - cron(user) - - _.each daily.checklist, (box)-> - expect(box.completed).to.be false - - _.each weekly.checklist, (box)-> - expect(box.completed).to.be false - - describe 'when startDate is today', -> - beforeEach -> - user = newUser() - user.dailys = [ - # Must set start date to yesterday, because cron mock sets last cron to yesterday - shared.taskDefaults({type:'daily', startDate: moment().subtract(1, 'days'), frequency: 'daily'}) - shared.taskDefaults({type:'daily', startDate: moment().subtract(1, 'days'), frequency: 'weekly'}) - ] - daily = user.dailys[0] - weekly = user.dailys[1] - - it 'does damage user for not completing it', -> - cron(user) - expect(user.stats.hp).to.be.lessThan 50 - - it 'decreases value on cron if daily is incomplete', -> - cron(user) - expect(daily.value).to.be.lessThan 0 - expect(weekly.value).to.be.lessThan 0 - - it 'resets checklists if daily is not marked as complete', -> - checklist = [ - { - 'text' : '1', - 'id' : 'checklist-one', - 'completed' : true - }, - { - 'text' : '2', - 'id' : 'checklist-two', - 'completed' : true - }, - { - 'text' : '3', - 'id' : 'checklist-three', - 'completed' : false - } - ] - daily.checklist = checklist - weekly.checklist = checklist - cron(user) - - _.each daily.checklist, (box)-> - expect(box.completed).to.be false - - _.each weekly.checklist, (box)-> - expect(box.completed).to.be false - - it 'resets checklists if daily is marked as complete', -> - checklist = [ - { - 'text' : '1', - 'id' : 'checklist-one', - 'completed' : true - }, - { - 'text' : '2', - 'id' : 'checklist-two', - 'completed' : true - }, - { - 'text' : '3', - 'id' : 'checklist-three', - 'completed' : false - } - ] - daily.checklist = checklist - daily.completed = true - weekly.checklist = checklist - weekly.completed = true - cron(user) - - _.each daily.checklist, (box)-> - expect(box.completed).to.be false - - _.each weekly.checklist, (box)-> - expect(box.completed).to.be false - -describe 'daily that repeats every x days', -> - user = null - daily = null - - beforeEach -> - user = newUser() - user.dailys = [ shared.taskDefaults({type:'daily', startDate: moment(), frequency: 'daily'}) ] - daily = user.dailys[0] - - _.times 11, (due) -> - - it 'where x equals ' + due, -> - daily.everyX = due - - _.times 30, (day) -> - isDue = shared.shouldDo moment().add(day, 'days'), daily - expect(isDue).to.be true if day % due == 0 - expect(isDue).to.be false if day % due != 0 - -describe 'daily that repeats every X days when multiple days are missed', -> - everyX = 3 - startDateDaysAgo = everyX * 3 - user = null - daily = null - - describe 'including missing a due date', -> - missedDays = everyX * 2 + 1 - - beforeEach -> - user = newUser() - user.dailys = [ - shared.taskDefaults({type:'daily', startDate: moment().subtract(startDateDaysAgo, 'days'), frequency: 'daily', everyX: everyX}) - ] - daily = user.dailys[0] - - it 'decreases value on cron once only if daily is incomplete', -> - cron(user, missedDays) - expect(daily.value).to.be -1 - - it 'resets checklists if daily is incomplete', -> - checklist = [ - { - 'text' : '1', - 'id' : 'checklist-one', - 'completed' : true - } - ] - daily.checklist = checklist - cron(user, missedDays) - _.each daily.checklist, (box)-> - expect(box.completed).to.be false - - it 'resets checklists if daily is marked as complete', -> - checklist = [ - { - 'text' : '1', - 'id' : 'checklist-one', - 'completed' : true - } - ] - daily.checklist = checklist - daily.completed = true - cron(user, missedDays) - _.each daily.checklist, (box)-> - expect(box.completed).to.be false - - describe 'but not missing a due date', -> - missedDays = everyX - 1 - - beforeEach -> - user = newUser() - user.dailys = [ - shared.taskDefaults({type:'daily', startDate: moment().subtract(startDateDaysAgo, 'days'), frequency: 'daily', everyX: everyX}) - ] - daily = user.dailys[0] - - it 'does not decrease value on cron', -> - cron(user, missedDays) - expect(daily.value).to.be 0 - - it 'does not reset checklists if daily is incomplete', -> - checklist = [ - { - 'text' : '1', - 'id' : 'checklist-one', - 'completed' : true - } - ] - daily.checklist = checklist - cron(user, missedDays) - _.each daily.checklist, (box)-> - expect(box.completed).to.be true - - it 'resets checklists if daily is marked as complete', -> - checklist = [ - { - 'text' : '1', - 'id' : 'checklist-one', - 'completed' : true - } - ] - daily.checklist = checklist - daily.completed = true - cron(user, missedDays) - _.each daily.checklist, (box)-> - expect(box.completed).to.be false diff --git a/test/common/dailies.js b/test/common/dailies.js new file mode 100644 index 0000000000..079ecb59e9 --- /dev/null +++ b/test/common/dailies.js @@ -0,0 +1,541 @@ +/* eslint-disable camelcase */ +import { + startOfWeek, +} from '../../common/script/cron'; + +let expect = require('expect.js'); // eslint-disable-line no-shadow +let moment = require('moment'); +let shared = require('../../common/script/index.js'); + +shared.i18n.translations = require('../../website/src/libs/i18n.js').translations; + +let repeatWithoutLastWeekday = () => { // eslint-disable-line no-unused-vars + let repeat = { + su: true, + m: true, + t: true, + w: true, + th: true, + f: true, + s: true, + }; + + if (startOfWeek(moment().zone(0)).isoWeekday() === 1) { + repeat.su = false; + } else { + repeat.s = false; + } + return { + repeat, + }; +}; + + +/* Helper Functions */ + +let newUser = (addTasks = true) => { + let buffs; + let user; + + buffs = { + per: 0, + int: 0, + con: 0, + str: 0, + stealth: 0, + streaks: false, + }; + user = { + auth: { + timestamps: {}, + }, + stats: { + str: 1, + con: 1, + per: 1, + int: 1, + mp: 32, + class: 'warrior', + buffs, + }, + items: { + lastDrop: { + count: 0, + }, + hatchingPotions: {}, + eggs: {}, + food: {}, + gear: { + equipped: {}, + costume: {}, + }, + }, + party: { + quest: { + progress: { + down: 0, + }, + }, + }, + preferences: {}, + dailys: [], + todos: [], + rewards: [], + flags: {}, + achievements: {}, + contributor: { + level: 2, + }, + }; + shared.wrap(user); + user.ops.reset(null, () => {}); + if (addTasks) { + _.each(['habit', 'todo', 'daily'], (task) => { + user.ops.addTask({ + body: { + type: task, + id: shared.uuid(), + }, + }); + }); + } + return user; +}; + +let cron = (usr, missedDays = 1) => { + usr.lastCron = moment().subtract(missedDays, 'days'); + usr.fns.cron(); +}; + +describe('daily/weekly that repeats everyday (default)', () => { + let user = null; + let daily = null; + let weekly = null; + + describe('when startDate is in the future', () => { + beforeEach(() => { + user = newUser(); + user.dailys = [ + shared.taskDefaults({ + type: 'daily', + startDate: moment().add(7, 'days'), + frequency: 'daily', + }), shared.taskDefaults({ + type: 'daily', + startDate: moment().add(7, 'days'), + frequency: 'weekly', + repeat: { + su: true, + m: true, + t: true, + w: true, + th: true, + f: true, + s: true, + }, + }), + ]; + daily = user.dailys[0]; + weekly = user.dailys[1]; + }); + it('does not damage user for not completing it', () => { + cron(user); + expect(user.stats.hp).to.be(50); + }); + it('does not change value on cron if daily is incomplete', () => { + cron(user); + expect(daily.value).to.be(0); + expect(weekly.value).to.be(0); + }); + it('does not reset checklists if daily is not marked as complete', () => { + let checklist = [ + { + text: '1', + id: 'checklist-one', + completed: true, + }, { + text: '2', + id: 'checklist-two', + completed: true, + }, { + text: '3', + id: 'checklist-three', + completed: false, + }, + ]; + + daily.checklist = checklist; + weekly.checklist = checklist; + cron(user); + expect(daily.checklist[0].completed).to.be(true); + expect(daily.checklist[1].completed).to.be(true); + expect(daily.checklist[2].completed).to.be(false); + expect(weekly.checklist[0].completed).to.be(true); + expect(weekly.checklist[1].completed).to.be(true); + expect(weekly.checklist[2].completed).to.be(false); + }); + it('resets checklists if daily is marked as complete', () => { + let checklist = [ + { + text: '1', + id: 'checklist-one', + completed: true, + }, { + text: '2', + id: 'checklist-two', + completed: true, + }, { + text: '3', + id: 'checklist-three', + completed: false, + }, + ]; + + daily.checklist = checklist; + weekly.checklist = checklist; + daily.completed = true; + weekly.completed = true; + cron(user); + _.each(daily.checklist, (box) => { + expect(box.completed).to.be(false); + }); + _.each(weekly.checklist, (box) => { + expect(box.completed).to.be(false); + }); + }); + it('is due on startDate', () => { + let daily_due_today = shared.shouldDo(moment(), daily); + let daily_due_on_start_date = shared.shouldDo(moment().add(7, 'days'), daily); + + expect(daily_due_today).to.be(false); + expect(daily_due_on_start_date).to.be(true); + + let weekly_due_today = shared.shouldDo(moment(), weekly); + let weekly_due_on_start_date = shared.shouldDo(moment().add(7, 'days'), weekly); + + expect(weekly_due_today).to.be(false); + expect(weekly_due_on_start_date).to.be(true); + }); + }); + describe('when startDate is in the past', () => { + beforeEach(() => { + user = newUser(); + user.dailys = [ + shared.taskDefaults({ + type: 'daily', + startDate: moment().subtract(7, 'days'), + frequency: 'daily', + }), shared.taskDefaults({ + type: 'daily', + startDate: moment().subtract(7, 'days'), + frequency: 'weekly', + }), + ]; + daily = user.dailys[0]; + weekly = user.dailys[1]; + }); + it('does damage user for not completing it', () => { + cron(user); + expect(user.stats.hp).to.be.lessThan(50); + }); + it('decreases value on cron if daily is incomplete', () => { + cron(user, 1); + expect(daily.value).to.be(-1); + expect(weekly.value).to.be(-1); + }); + it('decreases value on cron once only if daily is incomplete and multiple days are missed', () => { + cron(user, 7); + expect(daily.value).to.be(-1); + expect(weekly.value).to.be(-1); + }); + it('resets checklists if daily is not marked as complete', () => { + let checklist; + + checklist = [ + { + text: '1', + id: 'checklist-one', + completed: true, + }, { + text: '2', + id: 'checklist-two', + completed: true, + }, { + text: '3', + id: 'checklist-three', + completed: false, + }, + ]; + daily.checklist = checklist; + weekly.checklist = checklist; + cron(user); + _.each(daily.checklist, (box) => { + expect(box.completed).to.be(false); + }); + _.each(weekly.checklist, (box) => { + expect(box.completed).to.be(false); + }); + }); + it('resets checklists if daily is marked as complete', () => { + let checklist = [ + { + text: '1', + id: 'checklist-one', + completed: true, + }, { + text: '2', + id: 'checklist-two', + completed: true, + }, { + text: '3', + id: 'checklist-three', + completed: false, + }, + ]; + + daily.checklist = checklist; + daily.completed = true; + weekly.checklist = checklist; + weekly.completed = true; + cron(user); + _.each(daily.checklist, (box) => { + expect(box.completed).to.be(false); + }); + _.each(weekly.checklist, (box) => { + expect(box.completed).to.be(false); + }); + }); + }); + describe('when startDate is today', () => { + beforeEach(() => { + user = newUser(); + user.dailys = [ + shared.taskDefaults({ + type: 'daily', + startDate: moment().subtract(1, 'days'), + frequency: 'daily', + }), shared.taskDefaults({ + type: 'daily', + startDate: moment().subtract(1, 'days'), + frequency: 'weekly', + }), + ]; + daily = user.dailys[0]; + weekly = user.dailys[1]; + }); + it('does damage user for not completing it', () => { + cron(user); + expect(user.stats.hp).to.be.lessThan(50); + }); + it('decreases value on cron if daily is incomplete', () => { + cron(user); + expect(daily.value).to.be.lessThan(0); + expect(weekly.value).to.be.lessThan(0); + }); + it('resets checklists if daily is not marked as complete', () => { + let checklist; + + checklist = [ + { + text: '1', + id: 'checklist-one', + completed: true, + }, { + text: '2', + id: 'checklist-two', + completed: true, + }, { + text: '3', + id: 'checklist-three', + completed: false, + }, + ]; + daily.checklist = checklist; + weekly.checklist = checklist; + cron(user); + _.each(daily.checklist, (box) => { + expect(box.completed).to.be(false); + }); + _.each(weekly.checklist, (box) => { + expect(box.completed).to.be(false); + }); + }); + it('resets checklists if daily is marked as complete', () => { + let checklist; + + checklist = [ + { + text: '1', + id: 'checklist-one', + completed: true, + }, { + text: '2', + id: 'checklist-two', + completed: true, + }, { + text: '3', + id: 'checklist-three', + completed: false, + }, + ]; + daily.checklist = checklist; + daily.completed = true; + weekly.checklist = checklist; + weekly.completed = true; + cron(user); + _.each(daily.checklist, (box) => { + expect(box.completed).to.be(false); + }); + _.each(weekly.checklist, (box) => { + expect(box.completed).to.be(false); + }); + }); + }); +}); + +describe('daily that repeats every x days', () => { + let user = null; + let daily = null; + + beforeEach(() => { + user = newUser(); + user.dailys = [ + shared.taskDefaults({ + type: 'daily', + startDate: moment(), + frequency: 'daily', + }), + ]; + daily = user.dailys[0]; + }); + _.times(11, (due) => { + it(`where x equals ${due}`, () => { + daily.everyX = due; + _.times(30, (day) => { + let isDue; + + isDue = shared.shouldDo(moment().add(day, 'days'), daily); + if (day % due === 0) { + expect(isDue).to.be(true); + } + if (day % due !== 0) { + expect(isDue).to.be(false); + } + }); + }); + }); +}); + +describe('daily that repeats every X days when multiple days are missed', () => { + let everyX = 3; + let startDateDaysAgo = everyX * 3; + let user = null; + let daily = null; + + describe('including missing a due date', () => { + let missedDays = everyX * 2 + 1; + + beforeEach(() => { + user = newUser(); + user.dailys = [ + shared.taskDefaults({ + type: 'daily', + startDate: moment().subtract(startDateDaysAgo, 'days'), + frequency: 'daily', + everyX, + }), + ]; + daily = user.dailys[0]; + }); + it('decreases value on cron once only if daily is incomplete', () => { + cron(user, missedDays); + expect(daily.value).to.be(-1); + }); + it('resets checklists if daily is incomplete', () => { + let checklist = [ + { + text: '1', + id: 'checklist-one', + completed: true, + }, + ]; + + daily.checklist = checklist; + cron(user, missedDays); + _.each(daily.checklist, (box) => { + expect(box.completed).to.be(false); + }); + }); + it('resets checklists if daily is marked as complete', () => { + let checklist; + + checklist = [ + { + text: '1', + id: 'checklist-one', + completed: true, + }, + ]; + daily.checklist = checklist; + daily.completed = true; + cron(user, missedDays); + _.each(daily.checklist, (box) => { + expect(box.completed).to.be(false); + }); + }); + }); + describe('but not missing a due date', () => { + let missedDays; + + missedDays = everyX - 1; + beforeEach(() => { + user = newUser(); + user.dailys = [ + shared.taskDefaults({ + type: 'daily', + startDate: moment().subtract(startDateDaysAgo, 'days'), + frequency: 'daily', + everyX, + }), + ]; + daily = user.dailys[0]; + }); + it('does not decrease value on cron', () => { + cron(user, missedDays); + expect(daily.value).to.be(0); + }); + it('does not reset checklists if daily is incomplete', () => { + let checklist; + + checklist = [ + { + text: '1', + id: 'checklist-one', + completed: true, + }, + ]; + daily.checklist = checklist; + cron(user, missedDays); + _.each(daily.checklist, (box) => { + expect(box.completed).to.be(true); + }); + }); + it('resets checklists if daily is marked as complete', () => { + let checklist; + + checklist = [ + { + text: 1, + id: 'checklist-one', + completed: true, + }, + ]; + daily.checklist = checklist; + daily.completed = true; + cron(user, missedDays); + _.each(daily.checklist, (box) => { + expect(box.completed).to.be(false); + }); + }); + }); +}); diff --git a/test/common/mocha.opts b/test/common/mocha.opts deleted file mode 100644 index 84bfdce89a..0000000000 --- a/test/common/mocha.opts +++ /dev/null @@ -1,8 +0,0 @@ ---colors ---reporter spec ---timeout 8000 ---check-leaks ---growl ---debug ---compilers coffee:coffee-script ---globals io diff --git a/test/common/simulations/autoAllocate.coffee b/test/common/simulations/autoAllocate.coffee deleted file mode 100644 index 6b21b9ca9d..0000000000 --- a/test/common/simulations/autoAllocate.coffee +++ /dev/null @@ -1,82 +0,0 @@ -### -1) clone the repo -2) npm install -3) coffee ./tests/math_samples.coffee - -Current results at https://gist.github.com/lefnire/8049676 -### - -shared = require '../../../common/script/index.coffee' -_ = require 'lodash' -$w = (s)->s.split(' ') - -id = shared.uuid() -user = - stats: - class: 'warrior' - lvl:1, hp:50, gp:0, exp:10 - per:0, int:0, con:0, str:0 - buffs: {per:0, int:0, con:0, str:0} - training: {int:0,con:0,per:0,str:0} - preferences: automaticAllocation: false - party: quest: key:'evilsanta', progress: {up:0,down:0} - achievements: {} - items: - eggs: {} - hatchingPotions: {} - food: {} - gear: - equipped: - weapon: 'weapon_warrior_4' - armor: 'armor_warrior_4' - shield: 'shield_warrior_4' - head: 'head_warrior_4' - habits: [ - # we're gonna change this habit's attribute to mess with taskbased allo. Add the others to make sure our _.reduce is legit - {id:'a',value:1,type:'habit',attribute:'str'} - ] - dailys: [ - {id:'b',value:1,type:'daily',attribute:'str'} - ] - todos: [ - {id:'c',value:1,type:'todo',attribute:'con'} - {id:'d',value:1,type:'todo',attribute:'per'} - {id:'e',value:1,type:'todo',attribute:'int'} - ] - rewards: [] - -modes = - flat: _.cloneDeep user - classbased_warrior: _.cloneDeep user - classbased_rogue: _.cloneDeep user - classbased_wizard: _.cloneDeep user - classbased_healer: _.cloneDeep user - taskbased: _.cloneDeep user - -modes.classbased_warrior.stats.class = 'warrior' -modes.classbased_rogue.stats.class = 'rogue' -modes.classbased_wizard.stats.class = 'wizard' -modes.classbased_healer.stats.class = 'healer' - -_.each $w('flat classbased_warrior classbased_rogue classbased_wizard classbased_healer taskbased'), (mode) -> - _.merge modes[mode].preferences, - automaticAllocation: true - allocationMode: if mode.indexOf('classbased') is 0 then 'classbased' else mode - shared.wrap(modes[mode]) - -console.log "\n\n================================================" -console.log "New Simulation" -console.log "================================================\n\n" - - -_.times [20], (lvl) -> - console.log ("[lvl #{lvl}]\n--------------\n") - _.each $w('flat classbased_warrior classbased_rogue classbased_wizard classbased_healer taskbased'), (mode) -> - u = modes[mode] #local var - u.stats.exp = shared.tnl(lvl)+1 # level up - _.merge u.stats, {per:0,con:0,int:0,str:0} if mode is 'taskbased' # if task-based, clear stat so we can see clearly which stat got +1 - u.habits[0].attribute = u.fns.randomVal({str:'str',int:'int',per:'per',con:'con'}) - u.ops.score {params:{id:u.habits[0].id},direction:'up'} - u.fns.updateStats(u.stats) # trigger stats update - str = mode + (if mode is 'taskbased' then " (#{u.habits[0].attribute})" else "") - console.log str, _.pick(u.stats, $w 'per int con str') diff --git a/test/common/simulations/autoAllocate.js b/test/common/simulations/autoAllocate.js new file mode 100644 index 0000000000..0b0348efee --- /dev/null +++ b/test/common/simulations/autoAllocate.js @@ -0,0 +1,161 @@ +var $w, _, id, modes, shared, user; + +shared = require('../../../common/script/index.js'); + +_ = require('lodash'); + +$w = function(s) { + return s.split(' '); +}; + +id = shared.uuid(); + +user = { + stats: { + "class": 'warrior', + lvl: 1, + hp: 50, + gp: 0, + exp: 10, + per: 0, + int: 0, + con: 0, + str: 0, + buffs: { + per: 0, + int: 0, + con: 0, + str: 0 + }, + training: { + int: 0, + con: 0, + per: 0, + str: 0 + } + }, + preferences: { + automaticAllocation: false + }, + party: { + quest: { + key: 'evilsanta', + progress: { + up: 0, + down: 0 + } + } + }, + achievements: {}, + items: { + eggs: {}, + hatchingPotions: {}, + food: {}, + gear: { + equipped: { + weapon: 'weapon_warrior_4', + armor: 'armor_warrior_4', + shield: 'shield_warrior_4', + head: 'head_warrior_4' + } + } + }, + habits: [ + { + id: 'a', + value: 1, + type: 'habit', + attribute: 'str' + } + ], + dailys: [ + { + id: 'b', + value: 1, + type: 'daily', + attribute: 'str' + } + ], + todos: [ + { + id: 'c', + value: 1, + type: 'todo', + attribute: 'con' + }, { + id: 'd', + value: 1, + type: 'todo', + attribute: 'per' + }, { + id: 'e', + value: 1, + type: 'todo', + attribute: 'int' + } + ], + rewards: [] +}; + +modes = { + flat: _.cloneDeep(user), + classbased_warrior: _.cloneDeep(user), + classbased_rogue: _.cloneDeep(user), + classbased_wizard: _.cloneDeep(user), + classbased_healer: _.cloneDeep(user), + taskbased: _.cloneDeep(user) +}; + +modes.classbased_warrior.stats["class"] = 'warrior'; + +modes.classbased_rogue.stats["class"] = 'rogue'; + +modes.classbased_wizard.stats["class"] = 'wizard'; + +modes.classbased_healer.stats["class"] = 'healer'; + +_.each($w('flat classbased_warrior classbased_rogue classbased_wizard classbased_healer taskbased'), function(mode) { + _.merge(modes[mode].preferences, { + automaticAllocation: true, + allocationMode: mode.indexOf('classbased') === 0 ? 'classbased' : mode + }); + return shared.wrap(modes[mode]); +}); + +console.log("\n\n================================================"); + +console.log("New Simulation"); + +console.log("================================================\n\n"); + +_.times([20], function(lvl) { + console.log("[lvl " + lvl + "]\n--------------\n"); + return _.each($w('flat classbased_warrior classbased_rogue classbased_wizard classbased_healer taskbased'), function(mode) { + var str, u; + u = modes[mode]; + u.stats.exp = shared.tnl(lvl) + 1; + if (mode === 'taskbased') { + _.merge(u.stats, { + per: 0, + con: 0, + int: 0, + str: 0 + }); + } + u.habits[0].attribute = u.fns.randomVal({ + str: 'str', + int: 'int', + per: 'per', + con: 'con' + }); + u.ops.score({ + params: { + id: u.habits[0].id + }, + direction: 'up' + }); + u.fns.updateStats(u.stats); + str = mode + (mode === 'taskbased' ? " (" + u.habits[0].attribute + ")" : ""); + return console.log(str, _.pick(u.stats, $w('per int con str'))); + }); +}); diff --git a/test/common/simulations/passive_active_attrs.coffee b/test/common/simulations/passive_active_attrs.coffee deleted file mode 100644 index 11646ae933..0000000000 --- a/test/common/simulations/passive_active_attrs.coffee +++ /dev/null @@ -1,180 +0,0 @@ -### -1) clone the repo -2) npm install -3) coffee ./tests/math_samples.coffee - -Current results at https://gist.github.com/lefnire/8049676 -### - -shared = require '../../../common/script/index.coffee' -_ = require 'lodash' - -id = shared.uuid() -user = - stats: {class: 'warrior', buffs: {per:0,int:0,con:0,str:0}} - party: quest: key:'evilsanta', progress: {up:0,down:0} - preferences: automaticAllocation:false - achievements:{} - flags: levelDrops: {} - items: - eggs: {} - hatchingPotions: {} - food: {} - quests:{} - gear: - equipped: - weapon: 'weapon_warrior_4' - armor: 'armor_warrior_4' - shield: 'shield_warrior_4' - head: 'head_warrior_4' - habits: [ - shared.taskDefaults({id, value: 0}) - ] - dailys: [{"text" : "1",},{"text" : "1",},{"text" : "1",},{"text" : "1",},{"text" : "1",},{"text" : "1",},{"text" : "1",},{"text" : "1",},{"text" : "1",},{"text" : "1",},{"text" : "1",},{"text" : "1",},{"text" : "1",},{"text" : "1",},{"text" : "1",}], - todos: [] - rewards: [] - -shared.wrap(user) -s = user.stats -task = user.tasks[id] -party = [user] - -console.log "\n\n================================================" -console.log "New Simulation" -console.log "================================================\n\n" - -clearUser = (lvl=1) -> - _.merge user.stats, {exp:0, gp:0, hp:50, lvl:lvl, str:lvl*1.5, con:lvl*1.5, per:lvl*1.5, int:lvl*1.5, mp: 100} - _.merge s.buffs, {str:0,con:0,int:0,per:0} - _.merge user.party.quest.progress, {up:0,down:0} - user.items.lastDrop = {count:0} - -_.each [1,25,50,75,100], (lvl) -> - console.log "[LEVEL #{lvl}] (#{lvl*2} points total in every attr)\n\n" - _.each {red:-25,yellow:0,green:35}, (taskVal, color) -> - console.log "[task.value = #{taskVal} (#{color})]" - console.log "direction\texpΔ\t\thpΔ\tgpΔ\ttask.valΔ\ttask.valΔ bonus\t\tboss-hit" - _.each ['up','down'], (direction) -> - clearUser(lvl) - b4 = {hp:s.hp, taskVal} - task.value = taskVal - task.type = 'daily' if direction is 'up' - delta = user.ops.score params:{id, direction} - console.log "#{if direction is 'up' then '↑' else '↓'}\t\t#{s.exp}/#{shared.tnl(s.lvl)}\t\t#{(b4.hp-s.hp).toFixed(1)}\t#{s.gp.toFixed(1)}\t#{delta.toFixed(1)}\t\t#{(task.value-b4.taskVal-delta).toFixed(1)}\t\t\t#{user.party.quest.progress.up.toFixed(1)}" - - str = '- [Wizard]' - - task.value = taskVal;clearUser(lvl) - b4 = {taskVal} - shared.content.spells.wizard.fireball.cast(user,task) - str += "\tfireball(task.valΔ:#{(task.value-taskVal).toFixed(1)} exp:#{s.exp.toFixed(1)} bossHit:#{user.party.quest.progress.up.toFixed(2)})" - - task.value = taskVal;clearUser(lvl) - _party = [user, {stats:{mp:0}}] - shared.content.spells.wizard.mpheal.cast(user,_party) - str += "\t| mpheal(mp:#{_party[1].stats.mp})" - - task.value = taskVal;clearUser(lvl) - shared.content.spells.wizard.earth.cast(user,party) - str += "\t\t\t\t| earth(buffs.int:#{s.buffs.int})" - s.buffs.int = 0 - - task.value = taskVal;clearUser(lvl) - shared.content.spells.wizard.frost.cast(user,{}) - str += "\t\t\t| frost(N/A)" - - console.log str - str = '- [Warrior]' - - task.value = taskVal;clearUser(lvl) - shared.content.spells.warrior.smash.cast(user,task) - b4 = {taskVal} - str += "\tsmash(task.valΔ:#{(task.value-taskVal).toFixed(1)})" - - task.value = taskVal;clearUser(lvl) - shared.content.spells.warrior.defensiveStance.cast(user,{}) - str += "\t\t| defensiveStance(buffs.con:#{s.buffs.con})" - s.buffs.con = 0 - - task.value = taskVal;clearUser(lvl) - shared.content.spells.warrior.valorousPresence.cast(user,party) - str += "\t\t\t| valorousPresence(buffs.str:#{s.buffs.str})" - s.buffs.str = 0 - - task.value = taskVal;clearUser(lvl) - shared.content.spells.warrior.intimidate.cast(user,party) - str += "\t\t| intimidate(buffs.con:#{s.buffs.con})" - s.buffs.con = 0 - - console.log str - str = '- [Rogue]' - - task.value = taskVal;clearUser(lvl) - shared.content.spells.rogue.pickPocket.cast(user,task) - str += "\tpickPocket(gp:#{s.gp.toFixed(1)})" - - task.value = taskVal;clearUser(lvl) - shared.content.spells.rogue.backStab.cast(user,task) - b4 = {taskVal} - str += "\t\t| backStab(task.valΔ:#{(task.value-b4.taskVal).toFixed(1)} exp:#{s.exp.toFixed(1)} gp:#{s.gp.toFixed(1)})" - - task.value = taskVal;clearUser(lvl) - shared.content.spells.rogue.toolsOfTrade.cast(user,party) - str += "\t| toolsOfTrade(buffs.per:#{s.buffs.per})" - s.buffs.per = 0 - - task.value = taskVal;clearUser(lvl) - shared.content.spells.rogue.stealth.cast(user,{}) - str += "\t\t| stealth(avoiding #{user.stats.buffs.stealth} tasks)" - user.stats.buffs.stealth = 0 - - console.log str - str = '- [Healer]' - - task.value = taskVal;clearUser(lvl) - s.hp=0 - shared.content.spells.healer.heal.cast(user,{}) - str += "\theal(hp:#{s.hp.toFixed(1)})" - - task.value = taskVal;clearUser(lvl) - shared.content.spells.healer.brightness.cast(user,{}) - b4 = {taskVal} - str += "\t\t\t| brightness(task.valΔ:#{(task.value-b4.taskVal).toFixed(1)})" - - task.value = taskVal;clearUser(lvl) - shared.content.spells.healer.protectAura.cast(user,party) - str += "\t\t\t| protectAura(buffs.con:#{s.buffs.con})" - s.buffs.con = 0 - - task.value = taskVal;clearUser(lvl) - s.hp=0 - shared.content.spells.healer.heallAll.cast(user,party) - str += "\t\t| heallAll(hp:#{s.hp.toFixed(1)})" - - console.log str - console.log '\n' - - - console.log '------------------------------------------------------------' - -### -_.each [1,25,50,75,100,125], (lvl) -> - console.log "[LEVEL #{lvl}] (#{lvl*2} points in every attr)\n\n" - _.each {red:-25,yellow:0,green:35}, (taskVal, color) -> - console.log "[task.value = #{taskVal} (#{color})]" - console.log "direction\texpΔ\t\thpΔ\tgpΔ\ttask.valΔ\ttask.valΔ bonus\t\tboss-hit" - _.each ['up','down'], (direction) -> - clearUser(lvl) - b4 = {hp:s.hp, taskVal} - task.value = taskVal - task.type = 'daily' if direction is 'up' - delta = user.ops.score params:{id, direction} - console.log "#{if direction is 'up' then '↑' else '↓'}\t\t#{s.exp}/#{shared.tnl(s.lvl)}\t\t#{(b4.hp-s.hp).toFixed(1)}\t#{s.gp.toFixed(1)}\t#{delta.toFixed(1)}\t\t#{(task.value-b4.taskVal-delta).toFixed(1)}\t\t\t#{user.party.quest.progress.up.toFixed(1)}" - - task.value = taskVal;clearUser(lvl) - shared.content.spells.rogue.stealth.cast(user,{}) - console.log "\t\t| stealth(avoiding #{user.stats.buffs.stealth} tasks)" - user.stats.buffs.stealth = 0 - - console.log user.dailys.length -### diff --git a/test/common/simulations/passive_active_attrs.js b/test/common/simulations/passive_active_attrs.js new file mode 100644 index 0000000000..f69a2cafc2 --- /dev/null +++ b/test/common/simulations/passive_active_attrs.js @@ -0,0 +1,291 @@ +var _, clearUser, id, party, s, shared, task, user; + +shared = require('../../../common/script/index.js'); + +_ = require('lodash'); + +id = shared.uuid(); + +user = { + stats: { + "class": 'warrior', + buffs: { + per: 0, + int: 0, + con: 0, + str: 0 + } + }, + party: { + quest: { + key: 'evilsanta', + progress: { + up: 0, + down: 0 + } + } + }, + preferences: { + automaticAllocation: false + }, + achievements: {}, + flags: { + levelDrops: {} + }, + items: { + eggs: {}, + hatchingPotions: {}, + food: {}, + quests: {}, + gear: { + equipped: { + weapon: 'weapon_warrior_4', + armor: 'armor_warrior_4', + shield: 'shield_warrior_4', + head: 'head_warrior_4' + } + } + }, + habits: [ + shared.taskDefaults({ + id: id, + value: 0 + }) + ], + dailys: [ + { + "text": "1" + }, { + "text": "1" + }, { + "text": "1" + }, { + "text": "1" + }, { + "text": "1" + }, { + "text": "1" + }, { + "text": "1" + }, { + "text": "1" + }, { + "text": "1" + }, { + "text": "1" + }, { + "text": "1" + }, { + "text": "1" + }, { + "text": "1" + }, { + "text": "1" + }, { + "text": "1" + } + ], + todos: [], + rewards: [] +}; + +shared.wrap(user); + +s = user.stats; + +task = user.tasks[id]; + +party = [user]; + +console.log("\n\n================================================"); + +console.log("New Simulation"); + +console.log("================================================\n\n"); + +clearUser = function(lvl) { + if (lvl == null) { + lvl = 1; + } + _.merge(user.stats, { + exp: 0, + gp: 0, + hp: 50, + lvl: lvl, + str: lvl * 1.5, + con: lvl * 1.5, + per: lvl * 1.5, + int: lvl * 1.5, + mp: 100 + }); + _.merge(s.buffs, { + str: 0, + con: 0, + int: 0, + per: 0 + }); + _.merge(user.party.quest.progress, { + up: 0, + down: 0 + }); + return user.items.lastDrop = { + count: 0 + }; +}; + +_.each([1, 25, 50, 75, 100], function(lvl) { + console.log("[LEVEL " + lvl + "] (" + (lvl * 2) + " points total in every attr)\n\n"); + _.each({ + red: -25, + yellow: 0, + green: 35 + }, function(taskVal, color) { + var _party, b4, str; + console.log("[task.value = " + taskVal + " (" + color + ")]"); + console.log("direction\texpΔ\t\thpΔ\tgpΔ\ttask.valΔ\ttask.valΔ bonus\t\tboss-hit"); + _.each(['up', 'down'], function(direction) { + var b4, delta; + clearUser(lvl); + b4 = { + hp: s.hp, + taskVal: taskVal + }; + task.value = taskVal; + if (direction === 'up') { + task.type = 'daily'; + } + delta = user.ops.score({ + params: { + id: id, + direction: direction + } + }); + return console.log((direction === 'up' ? '↑' : '↓') + "\t\t" + s.exp + "/" + (shared.tnl(s.lvl)) + "\t\t" + ((b4.hp - s.hp).toFixed(1)) + "\t" + (s.gp.toFixed(1)) + "\t" + (delta.toFixed(1)) + "\t\t" + ((task.value - b4.taskVal - delta).toFixed(1)) + "\t\t\t" + (user.party.quest.progress.up.toFixed(1))); + }); + str = '- [Wizard]'; + task.value = taskVal; + clearUser(lvl); + b4 = { + taskVal: taskVal + }; + shared.content.spells.wizard.fireball.cast(user, task); + str += "\tfireball(task.valΔ:" + ((task.value - taskVal).toFixed(1)) + " exp:" + (s.exp.toFixed(1)) + " bossHit:" + (user.party.quest.progress.up.toFixed(2)) + ")"; + task.value = taskVal; + clearUser(lvl); + _party = [ + user, { + stats: { + mp: 0 + } + } + ]; + shared.content.spells.wizard.mpheal.cast(user, _party); + str += "\t| mpheal(mp:" + _party[1].stats.mp + ")"; + task.value = taskVal; + clearUser(lvl); + shared.content.spells.wizard.earth.cast(user, party); + str += "\t\t\t\t| earth(buffs.int:" + s.buffs.int + ")"; + s.buffs.int = 0; + task.value = taskVal; + clearUser(lvl); + shared.content.spells.wizard.frost.cast(user, {}); + str += "\t\t\t| frost(N/A)"; + console.log(str); + str = '- [Warrior]'; + task.value = taskVal; + clearUser(lvl); + shared.content.spells.warrior.smash.cast(user, task); + b4 = { + taskVal: taskVal + }; + str += "\tsmash(task.valΔ:" + ((task.value - taskVal).toFixed(1)) + ")"; + task.value = taskVal; + clearUser(lvl); + shared.content.spells.warrior.defensiveStance.cast(user, {}); + str += "\t\t| defensiveStance(buffs.con:" + s.buffs.con + ")"; + s.buffs.con = 0; + task.value = taskVal; + clearUser(lvl); + shared.content.spells.warrior.valorousPresence.cast(user, party); + str += "\t\t\t| valorousPresence(buffs.str:" + s.buffs.str + ")"; + s.buffs.str = 0; + task.value = taskVal; + clearUser(lvl); + shared.content.spells.warrior.intimidate.cast(user, party); + str += "\t\t| intimidate(buffs.con:" + s.buffs.con + ")"; + s.buffs.con = 0; + console.log(str); + str = '- [Rogue]'; + task.value = taskVal; + clearUser(lvl); + shared.content.spells.rogue.pickPocket.cast(user, task); + str += "\tpickPocket(gp:" + (s.gp.toFixed(1)) + ")"; + task.value = taskVal; + clearUser(lvl); + shared.content.spells.rogue.backStab.cast(user, task); + b4 = { + taskVal: taskVal + }; + str += "\t\t| backStab(task.valΔ:" + ((task.value - b4.taskVal).toFixed(1)) + " exp:" + (s.exp.toFixed(1)) + " gp:" + (s.gp.toFixed(1)) + ")"; + task.value = taskVal; + clearUser(lvl); + shared.content.spells.rogue.toolsOfTrade.cast(user, party); + str += "\t| toolsOfTrade(buffs.per:" + s.buffs.per + ")"; + s.buffs.per = 0; + task.value = taskVal; + clearUser(lvl); + shared.content.spells.rogue.stealth.cast(user, {}); + str += "\t\t| stealth(avoiding " + user.stats.buffs.stealth + " tasks)"; + user.stats.buffs.stealth = 0; + console.log(str); + str = '- [Healer]'; + task.value = taskVal; + clearUser(lvl); + s.hp = 0; + shared.content.spells.healer.heal.cast(user, {}); + str += "\theal(hp:" + (s.hp.toFixed(1)) + ")"; + task.value = taskVal; + clearUser(lvl); + shared.content.spells.healer.brightness.cast(user, {}); + b4 = { + taskVal: taskVal + }; + str += "\t\t\t| brightness(task.valΔ:" + ((task.value - b4.taskVal).toFixed(1)) + ")"; + task.value = taskVal; + clearUser(lvl); + shared.content.spells.healer.protectAura.cast(user, party); + str += "\t\t\t| protectAura(buffs.con:" + s.buffs.con + ")"; + s.buffs.con = 0; + task.value = taskVal; + clearUser(lvl); + s.hp = 0; + shared.content.spells.healer.heallAll.cast(user, party); + str += "\t\t| heallAll(hp:" + (s.hp.toFixed(1)) + ")"; + console.log(str); + return console.log('\n'); + }); + return console.log('------------------------------------------------------------'); +}); + + +/* +_.each [1,25,50,75,100,125], (lvl) -> + console.log "[LEVEL #{lvl}] (#{lvl*2} points in every attr)\n\n" + _.each {red:-25,yellow:0,green:35}, (taskVal, color) -> + console.log "[task.value = #{taskVal} (#{color})]" + console.log "direction\texpΔ\t\thpΔ\tgpΔ\ttask.valΔ\ttask.valΔ bonus\t\tboss-hit" + _.each ['up','down'], (direction) -> + clearUser(lvl) + b4 = {hp:s.hp, taskVal} + task.value = taskVal + task.type = 'daily' if direction is 'up' + delta = user.ops.score params:{id, direction} + console.log "#{if direction is 'up' then '↑' else '↓'}\t\t#{s.exp}/#{shared.tnl(s.lvl)}\t\t#{(b4.hp-s.hp).toFixed(1)}\t#{s.gp.toFixed(1)}\t#{delta.toFixed(1)}\t\t#{(task.value-b4.taskVal-delta).toFixed(1)}\t\t\t#{user.party.quest.progress.up.toFixed(1)}" + + task.value = taskVal;clearUser(lvl) + shared.content.spells.rogue.stealth.cast(user,{}) + console.log "\t\t| stealth(avoiding #{user.stats.buffs.stealth} tasks)" + user.stats.buffs.stealth = 0 + + console.log user.dailys.length + */ diff --git a/test/common/statHelpers.test.js b/test/common/statHelpers.test.js new file mode 100644 index 0000000000..a10a1ad714 --- /dev/null +++ b/test/common/statHelpers.test.js @@ -0,0 +1,66 @@ +import { + maxHealth, + maxLevel, + capByLevel, + tnl, + diminishingReturns, +} from '../../common/script/index'; + +describe('helper functions used in stat calculations', () => { + describe('maxHealth', () => { + it('provides a maximum Health value', () => { + const HEALTH_CAP = 50; + + expect(maxHealth).to.eql(HEALTH_CAP); + }); + }); + + const LEVEL_CAP = 100; + const LEVEL = 57; + + describe('maxLevel', () => { + it('returns a maximum level for attribute gain', () => { + expect(maxLevel).to.eql(LEVEL_CAP); + }); + }); + + describe('capByLevel', () => { + it('returns level given if below cap', () => { + expect(capByLevel(LEVEL)).to.eql(LEVEL); + }); + + it('returns level given if equal to cap', () => { + expect(capByLevel(LEVEL_CAP)).to.eql(LEVEL_CAP); + }); + + it('returns level cap if above cap', () => { + expect(capByLevel(LEVEL_CAP + LEVEL)).to.eql(LEVEL_CAP); + }); + }); + + describe('toNextLevel', () => { + it('increases Experience target from one level to the next', () => { + _.times(110, (level) => { + expect(tnl(level + 1)).to.be.greaterThan(tnl(level)); + }); + }); + }); + + describe('diminishingReturns', () => { + const BONUS = 600; + const MAXIMUM = 200; + const HALFWAY = 75; + + it('provides a value under the maximum, given a bonus and maximum', () => { + expect(diminishingReturns(BONUS, MAXIMUM)).to.be.lessThan(MAXIMUM); + }); + + it('provides a value under the maximum, given a bonus, maximum, and halfway point', () => { + expect(diminishingReturns(BONUS, MAXIMUM, HALFWAY)).to.be.lessThan(MAXIMUM); + }); + + it('provides a different curve if a halfway point is defined', () => { + expect(diminishingReturns(BONUS, MAXIMUM, HALFWAY)).to.not.eql(diminishingReturns(BONUS, MAXIMUM)); + }); + }); +}); diff --git a/test/common/test_helper.coffee b/test/common/test_helper.coffee deleted file mode 100644 index 5636e7f0ce..0000000000 --- a/test/common/test_helper.coffee +++ /dev/null @@ -1,44 +0,0 @@ -expect = require 'expect.js' - -module.exports.addCustomMatchers = -> - Assertion = expect.Assertion - - Assertion.prototype.toHaveGP = (gp)-> - actual = @obj.stats.gp - @assert( - actual == gp, - -> "expected user to have #{gp} gp, but got #{actual}", - -> "expected user to not have #{gp} gp" - ) - - Assertion.prototype.toHaveHP = (hp)-> - actual = @obj.stats.hp - @assert( - actual == hp, - -> "expected user to have #{hp} hp, but got #{actual}", - -> "expected user to not have #{hp} hp" - ) - - Assertion.prototype.toHaveExp = (exp)-> - actual = @obj.stats.exp - @assert( - actual == exp, - -> "expected user to have #{exp} experience points, but got #{actual}", - -> "expected user to not have #{exp} experience points" - ) - - Assertion.prototype.toHaveLevel = (lvl)-> - actual = @obj.stats.lvl - @assert( - actual == lvl, - -> "expected user to be level #{lvl}, but got #{actual}", - -> "expected user to not be level #{lvl}" - ) - - Assertion.prototype.toHaveMaxMP = (mp)-> - actual = @obj._statsComputed.maxMP - @assert( - actual == mp, - -> "expected user to have #{mp} max mp, but got #{actual}", - -> "expected user to not have #{mp} max mp" - ) diff --git a/test/common/test_helper.js b/test/common/test_helper.js new file mode 100644 index 0000000000..7b9ba2beff --- /dev/null +++ b/test/common/test_helper.js @@ -0,0 +1,59 @@ +/* eslint-disable prefer-template, no-shadow, func-names */ + +let expect = require('expect.js'); + +module.exports.addCustomMatchers = function () { + let Assertion; + + Assertion = expect.Assertion; + Assertion.prototype.toHaveGP = function (gp) { + let actual; + + actual = this.obj.stats.gp; + return this.assert(actual === gp, () => { + return 'expected user to have ' + gp + ' gp, but got ' + actual; + }, () => { + return 'expected user to not have ' + gp + ' gp'; + }); + }; + Assertion.prototype.toHaveHP = function (hp) { + let actual; + + actual = this.obj.stats.hp; + return this.assert(actual === hp, () => { + return 'expected user to have ' + hp + ' hp, but got ' + actual; + }, () => { + return 'expected user to not have ' + hp + ' hp'; + }); + }; + Assertion.prototype.toHaveExp = function (exp) { + let actual; + + actual = this.obj.stats.exp; + return this.assert(actual === exp, () => { + return 'expected user to have ' + exp + ' experience points, but got ' + actual; + }, () => { + return 'expected user to not have ' + exp + ' experience points'; + }); + }; + Assertion.prototype.toHaveLevel = function (lvl) { + let actual; + + actual = this.obj.stats.lvl; + return this.assert(actual === lvl, () => { + return 'expected user to be level ' + lvl + ', but got ' + actual; + }, () => { + return 'expected user to not be level ' + lvl; + }); + }; + Assertion.prototype.toHaveMaxMP = function (mp) { + let actual; + + actual = this.obj._statsComputed.maxMP; + return this.assert(actual === mp, () => { + return 'expected user to have ' + mp + ' max mp, but got ' + actual; + }, () => { + return 'expected user to not have ' + mp + ' max mp'; + }); + }; +}; diff --git a/test/common/user.fns.buy.test.js b/test/common/user.fns.buy.test.js index bcfe333d27..a4b067f9f4 100644 --- a/test/common/user.fns.buy.test.js +++ b/test/common/user.fns.buy.test.js @@ -1,27 +1,28 @@ -var sinon = require('sinon'); -var chai = require("chai") -chai.use(require("sinon-chai")) -var expect = chai.expect -var _ = require('lodash'); +/* eslint-disable camelcase */ -require('coffee-script'); -var shared = require('../../common/script/index.coffee'); +import sinon from 'sinon'; // eslint-disable-line no-shadow -describe('user.fns.buy', function() { - var user; +let shared = require('../../common/script/index.js'); - beforeEach(function() { +describe('user.fns.buy', () => { + let user; + + beforeEach(() => { user = { items: { gear: { owned: { - weapon_warrior_0: true - } - } + weapon_warrior_0: true, + }, + equipped: { + weapon_warrior_0: true, + }, + }, }, + preferences: {}, stats: { gp: 200 }, achievements: { }, - flags: { } + flags: { }, }; shared.wrap(user); @@ -30,22 +31,114 @@ describe('user.fns.buy', function() { sinon.stub(user.fns, 'predictableRandom'); }); - afterEach(function() { + afterEach(() => { user.fns.randomVal.restore(); user.fns.predictableRandom.restore(); }); - context('Potion', function() { - it('recovers hp'); + context('Potion', () => { + it('recovers 15 hp', () => { + user.stats.hp = 30; + user.ops.buy({params: {key: 'potion'}}); + expect(user.stats.hp).to.eql(45); + }); + + it('does not increase hp above 50', () => { + user.stats.hp = 45; + user.ops.buy({params: {key: 'potion'}}); + expect(user.stats.hp).to.eql(50); + }); + + it('deducts 25 gp', () => { + user.stats.hp = 45; + user.ops.buy({params: {key: 'potion'}}); + + expect(user.stats.gp).to.eql(175); + }); + + it('does not purchase if not enough gp', () => { + user.stats.hp = 45; + user.stats.gp = 5; + user.ops.buy({params: {key: 'potion'}}); + + expect(user.stats.hp).to.eql(45); + expect(user.stats.gp).to.eql(5); + }); }); - context('Gear', function() { - it('buys equipment'); + context('Gear', () => { + it('adds equipment to inventory', () => { + user.stats.gp = 31; - it('does not buy equipment without enough Gold'); + user.ops.buy({params: {key: 'armor_warrior_1'}}); + + expect(user.items.gear.owned).to.eql({ weapon_warrior_0: true, armor_warrior_1: true }); + }); + + it('deducts gold from user', () => { + user.stats.gp = 31; + + user.ops.buy({params: {key: 'armor_warrior_1'}}); + + expect(user.stats.gp).to.eql(1); + }); + + it('auto equips equipment if user has auto-equip preference turned on', () => { + user.stats.gp = 31; + user.preferences.autoEquip = true; + + user.ops.buy({params: {key: 'armor_warrior_1'}}); + + expect(user.items.gear.equipped).to.have.property('armor', 'armor_warrior_1'); + }); + + it('buys equipment but does not auto-equip', () => { + user.stats.gp = 31; + user.preferences.autoEquip = false; + + user.ops.buy({params: {key: 'armor_warrior_1'}}); + + expect(user.items.gear.equipped).to.not.have.property('armor'); + }); + + it('removes one-handed weapon and shield if auto-equip is on and a two-hander is bought', () => { + user.stats.gp = 100; + user.preferences.autoEquip = true; + user.ops.buy({params: {key: 'shield_warrior_1'}}); + user.ops.equip({params: {key: 'shield_warrior_1'}}); + user.ops.buy({params: {key: 'weapon_warrior_1'}}); + user.ops.equip({params: {key: 'weapon_warrior_1'}}); + + user.ops.buy({params: {key: 'weapon_wizard_1'}}); + + expect(user.items.gear.equipped).to.have.property('shield', 'shield_base_0'); + expect(user.items.gear.equipped).to.have.property('weapon', 'weapon_wizard_1'); + }); + + it('buys two-handed equipment but does not automatically remove sword or shield', () => { + user.stats.gp = 100; + user.preferences.autoEquip = false; + user.ops.buy({params: {key: 'shield_warrior_1'}}); + user.ops.equip({params: {key: 'shield_warrior_1'}}); + user.ops.buy({params: {key: 'weapon_warrior_1'}}); + user.ops.equip({params: {key: 'weapon_warrior_1'}}); + + user.ops.buy({params: {key: 'weapon_wizard_1'}}); + + expect(user.items.gear.equipped).to.have.property('shield', 'shield_warrior_1'); + expect(user.items.gear.equipped).to.have.property('weapon', 'weapon_warrior_1'); + }); + + it('does not buy equipment without enough Gold', () => { + user.stats.gp = 20; + + user.ops.buy({params: {key: 'armor_warrior_1'}}); + + expect(user.items.gear.owned).to.not.have.property('armor_warrior_1'); + }); }); - context('Quests', function() { + context('Quests', () => { it('buys a Quest scroll'); it('does not buy Quests without enough Gold'); @@ -55,48 +148,49 @@ describe('user.fns.buy', function() { it('does not buy Gem-premium Quests'); }); - context('Enchanted Armoire', function() { - var YIELD_EQUIPMENT = .5; - var YIELD_FOOD = .7; - var YIELD_EXP = .9; + context('Enchanted Armoire', () => { + let YIELD_EQUIPMENT = 0.5; + let YIELD_FOOD = 0.7; + let YIELD_EXP = 0.9; - var fullArmoire = {} + let fullArmoire = {}; + + _(shared.content.gearTypes).each((type) => { + _(shared.content.gear.tree[type].armoire).each((gearObject) => { + let armoireKey = gearObject.key; - _(shared.content.gearTypes).each(function(type) { - _(shared.content.gear.tree[type].armoire).each(function(gearObject, gearName) { - armoireKey = gearObject.key; fullArmoire[armoireKey] = true; }); }); - beforeEach(function() { + beforeEach(() => { user.achievements.ultimateGearSets = { rogue: true }; user.flags.armoireOpened = true; user.stats.exp = 0; user.items.food = {}; }); - context('failure conditions', function() { - it('does not open if user does not have enough gold', function(done) { + context('failure conditions', () => { + it('does not open if user does not have enough gold', (done) => { user.fns.predictableRandom.returns(YIELD_EQUIPMENT); user.stats.gp = 50; - user.ops.buy({params: {key: 'armoire'}}, function(response) { + user.ops.buy({params: {key: 'armoire'}}, (response) => { expect(response.message).to.eql('Not Enough Gold'); - expect(user.items.gear.owned).to.eql({'weapon_warrior_0': true}); + expect(user.items.gear.owned).to.eql({weapon_warrior_0: true}); expect(user.items.food).to.be.empty; expect(user.stats.exp).to.eql(0); done(); }); }); - it('does not open without Ultimate Gear achievement',function(done) { + it('does not open without Ultimate Gear achievement', (done) => { user.fns.predictableRandom.returns(YIELD_EQUIPMENT); - user.achievements.ultimateGearSets = {'healer':false,'wizard':false,'rogue':false,'warrior':false}; + user.achievements.ultimateGearSets = {healer: false, wizard: false, rogue: false, warrior: false}; - user.ops.buy({params: {key: 'armoire'}}, function(response) { - expect(response.message).to.eql("You can't buy this item"); - expect(user.items.gear.owned).to.eql({'weapon_warrior_0': true}); + user.ops.buy({params: {key: 'armoire'}}, (response) => { + expect(response.message).to.eql('You can\'t buy this item'); + expect(user.items.gear.owned).to.eql({weapon_warrior_0: true}); expect(user.items.food).to.be.empty; expect(user.stats.exp).to.eql(0); done(); @@ -104,32 +198,33 @@ describe('user.fns.buy', function() { }); }); - context('non-gear awards', function() { - it('gives Experience', function() { + context('non-gear awards', () => { + it('gives Experience', () => { user.fns.predictableRandom.returns(YIELD_EXP); - user.ops.buy({params: {key: 'armoire'}}) + user.ops.buy({params: {key: 'armoire'}}); - expect(user.items.gear.owned).to.eql({'weapon_warrior_0': true}); + expect(user.items.gear.owned).to.eql({weapon_warrior_0: true}); expect(user.items.food).to.be.empty; expect(user.stats.exp).to.eql(46); expect(user.stats.gp).to.eql(100); }); - it('gives food', function() { - var honey = shared.content.food.Honey; + it('gives food', () => { + let honey = shared.content.food.Honey; + user.fns.randomVal.returns(honey); user.fns.predictableRandom.returns(YIELD_FOOD); - user.ops.buy({params: {key: 'armoire'}}) + user.ops.buy({params: {key: 'armoire'}}); - expect(user.items.gear.owned).to.eql({'weapon_warrior_0': true}); - expect(user.items.food).to.eql({'Honey': 1}); + expect(user.items.gear.owned).to.eql({weapon_warrior_0: true}); + expect(user.items.food).to.eql({Honey: 1}); expect(user.stats.exp).to.eql(0); expect(user.stats.gp).to.eql(100); }); - it('does not give equipment if all equipment has been found', function() { + it('does not give equipment if all equipment has been found', () => { user.fns.predictableRandom.returns(YIELD_EQUIPMENT); user.items.gear.owned = fullArmoire; user.stats.gp = 150; @@ -137,7 +232,8 @@ describe('user.fns.buy', function() { user.ops.buy({params: {key: 'armoire'}}); expect(user.items.gear.owned).to.eql(fullArmoire); - var armoireCount = shared.count.remainingGearInSet(user.items.gear.owned, 'armoire'); + let armoireCount = shared.count.remainingGearInSet(user.items.gear.owned, 'armoire'); + expect(armoireCount).to.eql(0); expect(user.stats.exp).to.eql(30); @@ -145,43 +241,46 @@ describe('user.fns.buy', function() { }); }); - context('gear awards', function() { - beforeEach(function() { - var shield = shared.content.gear.tree.shield.armoire.gladiatorShield; + context('gear awards', () => { + beforeEach(() => { + let shield = shared.content.gear.tree.shield.armoire.gladiatorShield; + user.fns.randomVal.returns(shield); }); - it('always drops equipment the first time', function() { + it('always drops equipment the first time', () => { delete user.flags.armoireOpened; user.fns.predictableRandom.returns(YIELD_EXP); user.ops.buy({params: {key: 'armoire'}}); expect(user.items.gear.owned).to.eql({ - 'weapon_warrior_0': true, - 'shield_armoire_gladiatorShield': true + weapon_warrior_0: true, + shield_armoire_gladiatorShield: true, }); - var armoireCount = shared.count.remainingGearInSet(user.items.gear.owned, 'armoire'); - expect(armoireCount).to.eql (_.size(fullArmoire) - 1) + let armoireCount = shared.count.remainingGearInSet(user.items.gear.owned, 'armoire'); + + expect(armoireCount).to.eql(_.size(fullArmoire) - 1); expect(user.items.food).to.be.empty; expect(user.stats.exp).to.eql(0); expect(user.stats.gp).to.eql(100); }); - it('gives more equipment', function() { + it('gives more equipment', () => { user.fns.predictableRandom.returns(YIELD_EQUIPMENT); user.items.gear.owned = { weapon_warrior_0: true, - head_armoire_hornedIronHelm: true + head_armoire_hornedIronHelm: true, }; user.stats.gp = 200; user.ops.buy({params: {key: 'armoire'}}); - expect(user.items.gear.owned).to.eql({'weapon_warrior_0': true, 'shield_armoire_gladiatorShield':true, 'head_armoire_hornedIronHelm':true}); - var armoireCount = shared.count.remainingGearInSet(user.items.gear.owned, 'armoire'); - expect(armoireCount).to.eql((_.size(fullArmoire) - 2)); + expect(user.items.gear.owned).to.eql({weapon_warrior_0: true, shield_armoire_gladiatorShield: true, head_armoire_hornedIronHelm: true}); + let armoireCount = shared.count.remainingGearInSet(user.items.gear.owned, 'armoire'); + + expect(armoireCount).to.eql(_.size(fullArmoire) - 2); expect(user.stats.gp).to.eql(100); }); }); diff --git a/test/common/user.fns.ultimateGear.test.js b/test/common/user.fns.ultimateGear.test.js index b7c091e3f5..a95cb403d9 100644 --- a/test/common/user.fns.ultimateGear.test.js +++ b/test/common/user.fns.ultimateGear.test.js @@ -1,27 +1,36 @@ -'use strict'; +/* eslint-disable camelcase */ -var shared = require('../../common/script/index.coffee'); -shared.i18n.translations = require('../../website/src/i18n.js').translations +let shared = require('../../common/script/index.js'); + +shared.i18n.translations = require('../../website/src/libs/i18n.js').translations; require('./test_helper'); -describe('User.fns.ultimateGear', function() { - - it('sets armoirEnabled when partial achievement already achieved', function() { - var user = shared.wrap({ - items: { gear: { owned: { - toObject: function() { return { - armor_warrior_5: true, - shield_warrior_5: true, - head_warrior_5: true, - weapon_warrior_6: true - }} - }}}, - achievements: { - ultimateGearSets: {} +describe('User.fns.ultimateGear', () => { + it('sets armoirEnabled when partial achievement already achieved', () => { + let items = { + gear: { + owned: { + toObject: () => { + return { + armor_warrior_5: true, + shield_warrior_5: true, + head_warrior_5: true, + weapon_warrior_6: true, + }; + }, + }, }, - flags: {} + }; + + let user = shared.wrap({ + items, + achievements: { + ultimateGearSets: {}, + }, + flags: {}, }); + user.fns.ultimateGear(); expect(user.flags.armoireEnabled).to.equal(true); }); diff --git a/test/common/user.ops.buyMysterySet.test.js b/test/common/user.ops.buyMysterySet.test.js index f0a4a7b2f8..8c7899cf50 100644 --- a/test/common/user.ops.buyMysterySet.test.js +++ b/test/common/user.ops.buyMysterySet.test.js @@ -1,80 +1,73 @@ -var sinon = require('sinon'); -var chai = require("chai") -chai.use(require("sinon-chai")) -var expect = chai.expect +/* eslint-disable camelcase */ -require('coffee-script'); -var shared = require('../../common/script/index.coffee'); -var Content = require('../../common/script/content/index.coffee'); +let shared = require('../../common/script/index.js'); -describe('user.ops.buyMysterySet', function() { - var user; +describe('user.ops.buyMysterySet', () => { + let user; - beforeEach(function() { + beforeEach(() => { user = { items: { gear: { owned: { - weapon_warrior_0: true - } - } + weapon_warrior_0: true, + }, + }, }, purchased: { plan: { consecutive: { - trinkets: 0 - } - } - } + trinkets: 0, + }, + }, + }, }; shared.wrap(user); }); - context('Mystery Sets', function() { - - context('failure conditions', function() { - - it('does not grant mystery sets without Mystic Hourglasses', function(done) { - user.ops.buyMysterySet({params:{key:'201501'}}, function(response) { - expect(response.message).to.eql("You don't have enough Mystic Hourglasses."); - expect(user.items.gear.owned).to.eql({'weapon_warrior_0': true}); + context('Mystery Sets', () => { + context('failure conditions', () => { + it('does not grant mystery sets without Mystic Hourglasses', (done) => { + user.ops.buyMysterySet({params: {key: '201501'}}, (response) => { + expect(response.message).to.eql('You don\'t have enough Mystic Hourglasses.'); + expect(user.items.gear.owned).to.eql({weapon_warrior_0: true}); done(); }); }); - it('does not grant mystery set that has already been purchased', function(done) { + it('does not grant mystery set that has already been purchased', (done) => { user.purchased.plan.consecutive.trinkets = 1; user.items.gear.owned = { weapon_warrior_0: true, weapon_mystery_301404: true, armor_mystery_301404: true, head_mystery_301404: true, - eyewear_mystery_301404: true - }; + eyewear_mystery_301404: true, + }; - user.ops.buyMysterySet({params:{key:'301404'}}, function(response) { - expect(response.message).to.eql("Mystery set not found, or set already owned"); + user.ops.buyMysterySet({params: {key: '301404'}}, (response) => { + expect(response.message).to.eql('Mystery set not found, or set already owned'); expect(user.purchased.plan.consecutive.trinkets).to.eql(1); done(); }); }); }); - context('successful purchases', function() { - - it('buys Steampunk Accessories Set', function(done) { + context('successful purchases', () => { + it('buys Steampunk Accessories Set', (done) => { user.purchased.plan.consecutive.trinkets = 1; - user.ops.buyMysterySet({params:{key:'301404'}}, function() { + user.ops.buyMysterySet({params: {key: '301404'}}, () => { expect(user.purchased.plan.consecutive.trinkets).to.eql(0); expect(user.items.gear.owned).to.eql({ weapon_warrior_0: true, weapon_mystery_301404: true, armor_mystery_301404: true, head_mystery_301404: true, - eyewear_mystery_301404: true + eyewear_mystery_301404: true, }); + done(); }); }); diff --git a/test/common/user.ops.equip.test.js b/test/common/user.ops.equip.test.js new file mode 100644 index 0000000000..62f7956e02 --- /dev/null +++ b/test/common/user.ops.equip.test.js @@ -0,0 +1,102 @@ +/* eslint-disable camelcase */ + +import sinon from 'sinon'; // eslint-disable-line no-shadow +import {assert} from 'sinon'; +import i18n from '../../common/script/i18n'; +import shared from '../../common/script/index.js'; +import content from '../../common/script/content/index'; + +describe('user.ops.equip', () => { + let user; + let spy; + + beforeEach(() => { + user = { + items: { + gear: { + owned: { + weapon_warrior_0: true, + weapon_warrior_1: true, + weapon_warrior_2: true, + weapon_wizard_1: true, + weapon_wizard_2: true, + shield_base_0: true, + shield_warrior_1: true, + }, + equipped: { + weapon: 'weapon_warrior_0', + shield: 'shield_base_0', + }, + }, + }, + preferences: {}, + stats: {gp: 200}, + achievements: {}, + flags: {}, + }; + + shared.wrap(user); + spy = sinon.spy(); + }); + + context('Gear', () => { + it('should not send a message if a weapon is equipped while only having zero or one weapons equipped', () => { + // user.ops.equip always calls the callback, even if it isn't sending a message + // so we need to check to see if a single null message was sent. + user.ops.equip({params: {key: 'weapon_warrior_1'}}); + + // one-handed to one-handed + user.ops.equip({params: {key: 'weapon_warrior_2'}}, spy); + + assert.calledOnce(spy); + assert.calledWith(spy, null); + spy.reset(); + + // one-handed to two-handed + user.ops.equip({params: {key: 'weapon_wizard_1'}}, spy); + assert.calledOnce(spy); + assert.calledWith(spy, null); + spy.reset(); + + // two-handed to two-handed + user.ops.equip({params: {key: 'weapon_wizard_2'}}, spy); + assert.calledOnce(spy); + assert.calledWith(spy, null); + spy.reset(); + + // two-handed to one-handed + user.ops.equip({params: {key: 'weapon_warrior_2'}}, spy); + assert.calledOnce(spy); + assert.calledWith(spy, null); + spy.reset(); + }); + + it('should send messages if equipping a two-hander causes the off-hander to be unequipped', () => { + user.ops.equip({params: {key: 'weapon_warrior_1'}}); + user.ops.equip({params: {key: 'shield_warrior_1'}}); + + // equipping two-hander + user.ops.equip({params: {key: 'weapon_wizard_1'}}, spy); + let weapon = content.gear.flat.weapon_wizard_1; + let item = content.gear.flat.shield_warrior_1; + let message = i18n.t('messageTwoHandedEquip', {twoHandedText: weapon.text(null), offHandedText: item.text(null)}); + + assert.calledOnce(spy); + assert.calledWith(spy, {code: 200, message}); + }); + + it('should send messages if equipping an off-hand item causes a two-handed weapon to be unequipped', () => { + // equipping two-hander + user.ops.equip({params: {key: 'weapon_wizard_1'}}); + let weapon = content.gear.flat.weapon_wizard_1; + let shield = content.gear.flat.shield_warrior_1; + + user.ops.equip({params: {key: 'shield_warrior_1'}}, spy); + + let message = i18n.t('messageTwoHandedUnequip', {twoHandedText: weapon.text(null), offHandedText: shield.text(null)}); + + assert.calledOnce(spy); + assert.calledWith(spy, {code: 200, message}); + }); + }); +}); diff --git a/test/common/user.ops.hatch.js b/test/common/user.ops.hatch.js index 2ec1d627d3..573103a360 100644 --- a/test/common/user.ops.hatch.js +++ b/test/common/user.ops.hatch.js @@ -1,136 +1,126 @@ -var sinon = require('sinon'); -var chai = require('chai'); -chai.use(require('sinon-chai')) -var expect = chai.expect +let shared = require('../../common/script/index.js'); -require('coffee-script'); -var shared = require('../../common/script/index.coffee'); -var content = require('../../common/script/content/index.coffee'); +describe('user.ops.hatch', () => { + let user; -describe('user.ops.hatch', function() { - var user; - - beforeEach(function() { + beforeEach(() => { user = { items: { eggs: {}, hatchingPotions: {}, - pets: {} - } + pets: {}, + }, }; shared.wrap(user); }); - context('Pet Hatching', function() { - - context('failure conditions', function() { - - it('does not allow hatching without specifying egg and potion', function(done) { - user.ops.hatch({params:{}},function(response) { + context('Pet Hatching', () => { + context('failure conditions', () => { + it('does not allow hatching without specifying egg and potion', (done) => { + user.ops.hatch({params: {}}, (response) => { expect(response.message).to.eql('Please specify query.egg & query.hatchingPotion'); expect(user.items.pets).to.be.empty; done(); }); }); - it('does not allow hatching if user lacks specified egg', function(done) { - user.items.eggs = {'Wolf':1}; - user.items.hatchingPotions = {'Base':1}; - user.ops.hatch({params:{egg:'Dragon',hatchingPotion:'Base'}}, function(response) { + it('does not allow hatching if user lacks specified egg', (done) => { + user.items.eggs = {Wolf: 1}; + user.items.hatchingPotions = {Base: 1}; + user.ops.hatch({params: {egg: 'Dragon', hatchingPotion: 'Base'}}, (response) => { expect(response.message).to.eql(shared.i18n.t('messageMissingEggPotion')); expect(user.items.pets).to.be.empty; - expect(user.items.eggs).to.eql({'Wolf':1}); - expect(user.items.hatchingPotions).to.eql({'Base':1}); + expect(user.items.eggs).to.eql({Wolf: 1}); + expect(user.items.hatchingPotions).to.eql({Base: 1}); done(); }); }); - it('does not allow hatching if user lacks specified hatching potion', function(done) { - user.items.eggs = {'Wolf':1}; - user.items.hatchingPotions = {'Base':1}; - user.ops.hatch({params:{egg:'Wolf',hatchingPotion:'Golden'}}, function(response) { + it('does not allow hatching if user lacks specified hatching potion', (done) => { + user.items.eggs = {Wolf: 1}; + user.items.hatchingPotions = {Base: 1}; + user.ops.hatch({params: {egg: 'Wolf', hatchingPotion: 'Golden'}}, (response) => { expect(response.message).to.eql(shared.i18n.t('messageMissingEggPotion')); expect(user.items.pets).to.be.empty; - expect(user.items.eggs).to.eql({'Wolf':1}); - expect(user.items.hatchingPotions).to.eql({'Base':1}); + expect(user.items.eggs).to.eql({Wolf: 1}); + expect(user.items.hatchingPotions).to.eql({Base: 1}); done(); }); }); - it('does not allow hatching if user already owns target pet', function(done) { - user.items.eggs = {'Wolf':1}; - user.items.hatchingPotions = {'Base':1}; - user.items.pets = {'Wolf-Base':10}; - user.ops.hatch({params:{egg:'Wolf',hatchingPotion:'Base'}}, function(response) { + it('does not allow hatching if user already owns target pet', (done) => { + user.items.eggs = {Wolf: 1}; + user.items.hatchingPotions = {Base: 1}; + user.items.pets = {'Wolf-Base': 10}; + user.ops.hatch({params: {egg: 'Wolf', hatchingPotion: 'Base'}}, (response) => { expect(response.message).to.eql(shared.i18n.t('messageAlreadyPet')); - expect(user.items.pets).to.eql({'Wolf-Base':10}); - expect(user.items.eggs).to.eql({'Wolf':1}); - expect(user.items.hatchingPotions).to.eql({'Base':1}); + expect(user.items.pets).to.eql({'Wolf-Base': 10}); + expect(user.items.eggs).to.eql({Wolf: 1}); + expect(user.items.hatchingPotions).to.eql({Base: 1}); done(); }); }); - it('does not allow hatching quest pet egg using premium potion', function(done) { - user.items.eggs = {'Cheetah':1}; - user.items.hatchingPotions = {'Spooky':1}; - user.ops.hatch({params:{egg:'Cheetah',hatchingPotion:'Spooky'}}, function(response) { + it('does not allow hatching quest pet egg using premium potion', (done) => { + user.items.eggs = {Cheetah: 1}; + user.items.hatchingPotions = {Spooky: 1}; + user.ops.hatch({params: {egg: 'Cheetah', hatchingPotion: 'Spooky'}}, (response) => { expect(response.message).to.eql(shared.i18n.t('messageInvalidEggPotionCombo')); expect(user.items.pets).to.be.empty; - expect(user.items.eggs).to.eql({'Cheetah':1}); - expect(user.items.hatchingPotions).to.eql({'Spooky':1}); + expect(user.items.eggs).to.eql({Cheetah: 1}); + expect(user.items.hatchingPotions).to.eql({Spooky: 1}); done(); }); }); }); - context('successful hatching', function() { - - it('hatches a basic pet', function(done) { - user.items.eggs = {'Wolf':1}; - user.items.hatchingPotions = {'Base':1}; - user.ops.hatch({params:{egg:'Wolf',hatchingPotion:'Base'}}, function(response) { + context('successful hatching', () => { + it('hatches a basic pet', (done) => { + user.items.eggs = {Wolf: 1}; + user.items.hatchingPotions = {Base: 1}; + user.ops.hatch({params: {egg: 'Wolf', hatchingPotion: 'Base'}}, (response) => { expect(response.message).to.eql(shared.i18n.t('messageHatched')); - expect(user.items.pets).to.eql({'Wolf-Base':5}); - expect(user.items.eggs).to.eql({'Wolf':0}); - expect(user.items.hatchingPotions).to.eql({'Base':0}); + expect(user.items.pets).to.eql({'Wolf-Base': 5}); + expect(user.items.eggs).to.eql({Wolf: 0}); + expect(user.items.hatchingPotions).to.eql({Base: 0}); done(); }); }); - it('hatches a quest pet', function(done) { - user.items.eggs = {'Cheetah':1}; - user.items.hatchingPotions = {'Base':1}; - user.ops.hatch({params:{egg:'Cheetah',hatchingPotion:'Base'}}, function(response) { + it('hatches a quest pet', (done) => { + user.items.eggs = {Cheetah: 1}; + user.items.hatchingPotions = {Base: 1}; + user.ops.hatch({params: {egg: 'Cheetah', hatchingPotion: 'Base'}}, (response) => { expect(response.message).to.eql(shared.i18n.t('messageHatched')); - expect(user.items.pets).to.eql({'Cheetah-Base':5}); - expect(user.items.eggs).to.eql({'Cheetah':0}); - expect(user.items.hatchingPotions).to.eql({'Base':0}); + expect(user.items.pets).to.eql({'Cheetah-Base': 5}); + expect(user.items.eggs).to.eql({Cheetah: 0}); + expect(user.items.hatchingPotions).to.eql({Base: 0}); done(); }); }); - it('hatches a premium pet', function(done) { - user.items.eggs = {'Wolf':1}; - user.items.hatchingPotions = {'Spooky':1}; - user.ops.hatch({params:{egg:'Wolf',hatchingPotion:'Spooky'}}, function(response) { + it('hatches a premium pet', (done) => { + user.items.eggs = {Wolf: 1}; + user.items.hatchingPotions = {Spooky: 1}; + user.ops.hatch({params: {egg: 'Wolf', hatchingPotion: 'Spooky'}}, (response) => { expect(response.message).to.eql(shared.i18n.t('messageHatched')); - expect(user.items.pets).to.eql({'Wolf-Spooky':5}); - expect(user.items.eggs).to.eql({'Wolf':0}); - expect(user.items.hatchingPotions).to.eql({'Spooky':0}); + expect(user.items.pets).to.eql({'Wolf-Spooky': 5}); + expect(user.items.eggs).to.eql({Wolf: 0}); + expect(user.items.hatchingPotions).to.eql({Spooky: 0}); done(); }); }); - it('hatches a pet previously raised to a mount', function(done) { - user.items.eggs = {'Wolf':1}; - user.items.hatchingPotions = {'Base':1}; - user.items.pets = {'Wolf-Base':-1}; - user.ops.hatch({params:{egg:'Wolf',hatchingPotion:'Base'}}, function(response) { + it('hatches a pet previously raised to a mount', (done) => { + user.items.eggs = {Wolf: 1}; + user.items.hatchingPotions = {Base: 1}; + user.items.pets = {'Wolf-Base': -1}; + user.ops.hatch({params: {egg: 'Wolf', hatchingPotion: 'Base'}}, (response) => { expect(response.message).to.eql(shared.i18n.t('messageHatched')); - expect(user.items.pets).to.eql({'Wolf-Base':5}); - expect(user.items.eggs).to.eql({'Wolf':0}); - expect(user.items.hatchingPotions).to.eql({'Base':0}); + expect(user.items.pets).to.eql({'Wolf-Base': 5}); + expect(user.items.eggs).to.eql({Wolf: 0}); + expect(user.items.hatchingPotions).to.eql({Base: 0}); done(); }); }); diff --git a/test/common/user.ops.hourglassPurchase.test.js b/test/common/user.ops.hourglassPurchase.test.js index 458029c6df..b9c7369d21 100644 --- a/test/common/user.ops.hourglassPurchase.test.js +++ b/test/common/user.ops.hourglassPurchase.test.js @@ -1,102 +1,93 @@ -var sinon = require('sinon'); -var chai = require("chai") -chai.use(require("sinon-chai")) -var expect = chai.expect +let shared = require('../../common/script/index.js'); -require('coffee-script'); -var shared = require('../../common/script/index.coffee'); -var Content = require('../../common/script/content/index.coffee'); +describe('user.ops.hourglassPurchase', () => { + let user; -describe('user.ops.hourglassPurchase', function() { - var user; - - beforeEach(function() { + beforeEach(() => { user = { items: { pets: {}, mounts: {}, - hatchingPotions: {} + hatchingPotions: {}, }, purchased: { plan: { consecutive: { - trinkets: 0 - } - } - } + trinkets: 0, + }, + }, + }, }; shared.wrap(user); }); - context('Time Travel Stable', function() { - - context('failure conditions', function() { - - it('does not allow purchase of unsupported item types', function(done) { - user.ops.hourglassPurchase({params:{type: 'hatchingPotions', key: 'Base'}}, function(response) { + context('Time Travel Stable', () => { + context('failure conditions', () => { + it('does not allow purchase of unsupported item types', (done) => { + user.ops.hourglassPurchase({params: {type: 'hatchingPotions', key: 'Base'}}, (response) => { expect(response.message).to.eql('Item type not supported for purchase with Mystic Hourglass. Allowed types: ["pets","mounts"]'); expect(user.items.hatchingPotions).to.eql({}); done(); }); }); - it('does not grant pets without Mystic Hourglasses', function(done) { - user.ops.hourglassPurchase({params:{type: 'pets', key: 'MantisShrimp-Base'}}, function(response) { - expect(response.message).to.eql("You don't have enough Mystic Hourglasses."); + it('does not grant pets without Mystic Hourglasses', (done) => { + user.ops.hourglassPurchase({params: {type: 'pets', key: 'MantisShrimp-Base'}}, (response) => { + expect(response.message).to.eql('You don\'t have enough Mystic Hourglasses.'); expect(user.items.pets).to.eql({}); done(); }); }); - it('does not grant mounts without Mystic Hourglasses', function(done) { - user.ops.hourglassPurchase({params:{type: 'mounts', key: 'MantisShrimp-Base'}}, function(response) { - expect(response.message).to.eql("You don't have enough Mystic Hourglasses."); + it('does not grant mounts without Mystic Hourglasses', (done) => { + user.ops.hourglassPurchase({params: {type: 'mounts', key: 'MantisShrimp-Base'}}, (response) => { + expect(response.message).to.eql('You don\'t have enough Mystic Hourglasses.'); expect(user.items.mounts).to.eql({}); done(); }); }); - it('does not grant pet that has already been purchased', function(done) { + it('does not grant pet that has already been purchased', (done) => { user.purchased.plan.consecutive.trinkets = 1; user.items.pets = { - 'MantisShrimp-Base': true + 'MantisShrimp-Base': true, }; - user.ops.hourglassPurchase({params:{type: 'pets', key: 'MantisShrimp-Base'}}, function(response) { - expect(response.message).to.eql("Pet already owned."); + user.ops.hourglassPurchase({params: {type: 'pets', key: 'MantisShrimp-Base'}}, (response) => { + expect(response.message).to.eql('Pet already owned.'); expect(user.purchased.plan.consecutive.trinkets).to.eql(1); done(); }); }); - it('does not grant mount that has already been purchased', function(done) { + it('does not grant mount that has already been purchased', (done) => { user.purchased.plan.consecutive.trinkets = 1; user.items.mounts = { - 'MantisShrimp-Base': true + 'MantisShrimp-Base': true, }; - user.ops.hourglassPurchase({params:{type: 'mounts', key: 'MantisShrimp-Base'}}, function(response) { - expect(response.message).to.eql("Mount already owned."); + user.ops.hourglassPurchase({params: {type: 'mounts', key: 'MantisShrimp-Base'}}, (response) => { + expect(response.message).to.eql('Mount already owned.'); expect(user.purchased.plan.consecutive.trinkets).to.eql(1); done(); }); }); - it('does not grant pet that is not part of the Time Travel Stable', function(done) { + it('does not grant pet that is not part of the Time Travel Stable', (done) => { user.purchased.plan.consecutive.trinkets = 1; - user.ops.hourglassPurchase({params: {type: 'pets', key: 'Wolf-Veteran'}}, function(response) { + user.ops.hourglassPurchase({params: {type: 'pets', key: 'Wolf-Veteran'}}, (response) => { expect(response.message).to.eql('Pet not available for purchase with Mystic Hourglass.'); expect(user.purchased.plan.consecutive.trinkets).to.eql(1); done(); }); }); - it('does not grant mount that is not part of the Time Travel Stable', function(done) { + it('does not grant mount that is not part of the Time Travel Stable', (done) => { user.purchased.plan.consecutive.trinkets = 1; - user.ops.hourglassPurchase({params: {type: 'mounts', key: 'Orca-Base'}}, function(response) { + user.ops.hourglassPurchase({params: {type: 'mounts', key: 'Orca-Base'}}, (response) => { expect(response.message).to.eql('Mount not available for purchase with Mystic Hourglass.'); expect(user.purchased.plan.consecutive.trinkets).to.eql(1); done(); @@ -104,26 +95,25 @@ describe('user.ops.hourglassPurchase', function() { }); }); - context('successful purchases', function() { - - it('buys a pet', function(done) { + context('successful purchases', () => { + it('buys a pet', (done) => { user.purchased.plan.consecutive.trinkets = 2; - user.ops.hourglassPurchase({params: {type: 'pets', key: 'MantisShrimp-Base'}}, function(response) { + user.ops.hourglassPurchase({params: {type: 'pets', key: 'MantisShrimp-Base'}}, (response) => { expect(response.message).to.eql('Purchased an item using a Mystic Hourglass!'); expect(user.purchased.plan.consecutive.trinkets).to.eql(1); - expect(user.items.pets).to.eql({'MantisShrimp-Base':5}); + expect(user.items.pets).to.eql({'MantisShrimp-Base': 5}); done(); }); }); - it('buys a mount', function(done) { + it('buys a mount', (done) => { user.purchased.plan.consecutive.trinkets = 2; - user.ops.hourglassPurchase({params: {type: 'mounts', key: 'MantisShrimp-Base'}}, function(response) { + user.ops.hourglassPurchase({params: {type: 'mounts', key: 'MantisShrimp-Base'}}, (response) => { expect(response.message).to.eql('Purchased an item using a Mystic Hourglass!'); expect(user.purchased.plan.consecutive.trinkets).to.eql(1); - expect(user.items.mounts).to.eql({'MantisShrimp-Base':true}); + expect(user.items.mounts).to.eql({'MantisShrimp-Base': true}); done(); }); }); diff --git a/test/common/user.ops.test.js b/test/common/user.ops.test.js index 6e26d5430a..f4e4bb82c9 100644 --- a/test/common/user.ops.test.js +++ b/test/common/user.ops.test.js @@ -1,37 +1,30 @@ -var sinon = require('sinon'); -var chai = require("chai") -chai.use(require("sinon-chai")) -var expect = chai.expect -var _ = require('lodash'); +let shared = require('../../common/script/index.js'); -require('coffee-script'); -var shared = require('../../common/script/index.coffee'); +describe('user.ops', () => { + let user; -describe('user.ops', function() { - var user; - - beforeEach(function() { + beforeEach(() => { user = { items: { gear: { }, - special: { } + special: { }, }, achievements: { }, - flags: { } + flags: { }, }; shared.wrap(user); }); - describe('readCard', function() { - it('removes card from invitation array', function() { + describe('readCard', () => { + it('removes card from invitation array', () => { user.items.special.valentineReceived = ['Leslie']; user.ops.readCard({ params: { cardType: 'valentine' } }); expect(user.items.special.valentineReceived).to.be.empty; }); - it('removes the first card from invitation array', function() { + it('removes the first card from invitation array', () => { user.items.special.valentineReceived = ['Leslie', 'Vicky']; user.ops.readCard({ params: { cardType: 'valentine' } }); diff --git a/test/content/faq.js b/test/content/faq.js index 40b58181e1..7a2d890bde 100644 --- a/test/content/faq.js +++ b/test/content/faq.js @@ -1,22 +1,28 @@ +import { each } from 'lodash'; import { expectValidTranslationString, - describeEachItem } from '../helpers/content.helper'; -import {questions, stillNeedHelp} from '../../common/script/src/content/faq'; +import {questions, stillNeedHelp} from '../../common/script/content/faq'; describe('FAQ Locales', () => { - describeEachItem('Questions', questions, (question, index) => { - it('has a valid question', () => { - expectValidTranslationString(question.question); + describe('Questions', () => { + it('has a valid questions', () => { + each(questions, (question, key) => { + expectValidTranslationString(question.question); + }); }); - it('has a valid ios answer', () => { - expectValidTranslationString(question.ios); + it('has a valid ios answers', () => { + each(questions, (question, key) => { + expectValidTranslationString(question.ios); + }); }); - it('has a valid web answer', () => { - expectValidTranslationString(question.web); + it('has a valid web answers', () => { + each(questions, (question, key) => { + expectValidTranslationString(question.web); + }); }); }); diff --git a/test/content/gear.js b/test/content/gear.js index 2d9faf1883..7da129cb26 100644 --- a/test/content/gear.js +++ b/test/content/gear.js @@ -1,54 +1,163 @@ import { expectValidTranslationString, - describeEachItem } from '../helpers/content.helper'; -import {each} from 'lodash'; +import { each } from 'lodash'; +import camelCase from 'lodash.camelcase'; -import {tree as allGear} from '../../common/script/src/content/gear'; +import { tree as allGear } from '../../common/script/content/gear'; +import backerGear from '../../common/script/content/gear/sets/special/special-backer'; +import contributorGear from '../../common/script/content/gear/sets/special/special-contributor'; describe('Gear', () => { - each(allGear, (piece, type) => { - describeEachItem(type, piece, (set, key) => { - checkGearAttributes(set); + each(allGear, (piece, gearType) => { + describe(gearType, () => { + each(piece, (items, klass) => { + context(`${klass} ${gearType}s`, () => { + it('have a value of at least 0 for each stat', () => { + each(items, (gear, itemKey) => { + expect(gear.con).to.be.at.least(0); + expect(gear.int).to.be.at.least(0); + expect(gear.per).to.be.at.least(0); + expect(gear.str).to.be.at.least(0); + }); + }); + + it('have a purchase value of at least 0', () => { + each(items, (gear, itemKey) => { + expect(gear.value).to.be.at.least(0); + }); + }); + + it('has a canBuy function', () => { + each(items, (gear, itemKey) => { + expect(gear.canBuy).to.be.a('function'); + }); + }); + + it('have valid translation strings for text and notes', () => { + each(items, (gear, itemKey) => { + expectValidTranslationString(gear.text); + expectValidTranslationString(gear.notes); + }); + }); + }); + }); + }); + }); + + describe('backer gear', () => { + let user; + + beforeEach(() => { + user = { + backer: {}, + items: { gear: { owned: {} } }, + }; + }); + + let cases = { + armor_special_0: 45, + armor_special_2: 300, + head_special_0: 45, + head_special_2: 300, + weapon_special_0: 70, + weapon_special_2: 300, + weapon_special_3: 300, + } + + each(cases, (tierRequirement, key) => { + context(key, () => { + let camelCaseKey = camelCase(key); + + it(`canOwn returns true if user has a backer tier of ${tierRequirement} or higher`, () => { + user.backer.tier = tierRequirement; + expect(backerGear[camelCaseKey].canOwn(user)).to.eql(true); + + user.backer.tier = tierRequirement + 1; + expect(backerGear[camelCaseKey].canOwn(user)).to.eql(true); + }); + + it('canOwn returns true if user already owns the item', () => { + user.items.gear.owned[key] = true; + expect(backerGear[camelCaseKey].canOwn(user)).to.eql(true); + }); + + it('canOwn returns true if user has previously owned the item', () => { + user.items.gear.owned[key] = false; + expect(backerGear[camelCaseKey].canOwn(user)).to.eql(true); + }); + + it('canOwn returns false if user does not have tier requirement and did not previously own the item', () => { + expect(backerGear[camelCaseKey].canOwn(user)).to.eql(false); + }); + }); + }); + }); + + describe('contributor gear', () => { + let user; + + beforeEach(() => { + user = { + contributor: {}, + items: { gear: { owned: {} } }, + }; + }); + + let cases = { + armor_special_1: 2, + head_special_1: 3, + shield_special_1: 5, + weapon_special_1: 4, + }; + + each(cases, (tierRequirement, key) => { + context(key, () => { + let camelCaseKey = camelCase(key); + + it(`canOwn returns true if user has a contributor tier of ${tierRequirement} or higher`, () => { + user.contributor.level = tierRequirement; + expect(contributorGear[camelCaseKey].canOwn(user)).to.eql(true); + + user.contributor.level = tierRequirement + 1; + expect(contributorGear[camelCaseKey].canOwn(user)).to.eql(true); + }); + + it('canOwn returns true if user already owns the item', () => { + user.items.gear.owned[key] = true; + expect(contributorGear[camelCaseKey].canOwn(user)).to.eql(true); + }); + + it('canOwn returns true if user has previously owned the item', () => { + user.items.gear.owned[key] = false; + expect(contributorGear[camelCaseKey].canOwn(user)).to.eql(true); + }); + + it('canOwn returns false if user does not have tier requirement and did not previously own the item', () => { + expect(contributorGear[camelCaseKey].canOwn(user)).to.eql(false); + }); + }); + }); + + context('hammer of bug smashing', () => { + it('canOwn returns true if user has a critical flag on their contributor object', () => { + user.contributor.critical = true; + expect(contributorGear.weaponSpecialCritical.canOwn(user)).to.eql(true); + }); + + it('canOwn returns true if user already owns the item', () => { + user.items.gear.owned.weapon_special_critical = true; + expect(contributorGear.weaponSpecialCritical.canOwn(user)).to.eql(true); + }); + + it('canOwn returns true if user has previously owned the item', () => { + user.items.gear.owned.weapon_special_critical = false; + expect(contributorGear.weaponSpecialCritical.canOwn(user)).to.eql(true); + }); + + it('canOwn returns false if user does not have tier requirement and did not previously own the item', () => { + expect(contributorGear.weaponSpecialCritical.canOwn(user)).to.eql(false); + }); }); }); }); - -function checkGearAttributes(set) { - each(set, (gear, key) => { - describe(`${key}`, () => { - - it('has a value attribute', () => { - expect(gear.value).to.be.at.least(0); - }); - - it('has a valid con attribute', () => { - expect(gear.con).to.be.at.least(0); - }); - - it('has a valid int attribute', () => { - expect(gear.int).to.be.at.least(0); - }); - - it('has a valid per attribute', () => { - expect(gear.per).to.be.at.least(0); - }); - - it('has a valid str attribute', () => { - expect(gear.str).to.be.at.least(0); - }); - - it('has a canBuy function', () => { - expect(gear.canBuy).to.be.a('function'); - }); - - it('has a valid text attribute', () => { - expectValidTranslationString(gear.text); - }); - - it('has a valid notes attribute', () => { - expectValidTranslationString(gear.notes); - }); - }); - }); -} diff --git a/test/content/mocha.content.opts b/test/content/mocha.content.opts deleted file mode 100644 index 610fc454d3..0000000000 --- a/test/content/mocha.content.opts +++ /dev/null @@ -1,7 +0,0 @@ ---colors ---reporter spec ---timeout 8000 ---check-leaks ---growl ---compilers js:babel/register ---require ./test/helpers/content.helper.js diff --git a/test/e2e/e2e.js b/test/e2e/e2e.js index bc5e013cda..6efeaaa82b 100644 --- a/test/e2e/e2e.js +++ b/test/e2e/e2e.js @@ -37,7 +37,7 @@ describe('front page', function() { var login = element(by.css("#loginForm input[value='Login']")); login.click(); var alertDialog = browser.switchTo().alert(); - expect(alertDialog.getText()).toMatch("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\"."); + expect(alertDialog.getText()).toMatch("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."); alertDialog.accept(); }); diff --git a/test/helpers/api-integration.helper.js b/test/helpers/api-integration.helper.js new file mode 100644 index 0000000000..c8a452f7c3 --- /dev/null +++ b/test/helpers/api-integration.helper.js @@ -0,0 +1,273 @@ +/* eslint-disable no-use-before-define */ + +import { + assign, + each, + isEmpty, + times, +} from 'lodash'; +import { MongoClient as mongo } from 'mongodb'; +import { v4 as generateUUID } from 'uuid'; +import superagent from 'superagent'; +import i18n from '../../common/script/src/i18n'; +i18n.translations = require('../../website/src/libs/i18n.js').translations; + +const API_TEST_SERVER_PORT = 3003; + +// Sets up an abject that can make all REST requests +// If a user is passed in, the uuid and api token of +// the user are used to make the requests +export function requester (user = {}, additionalSets) { + return { + get: _requestMaker(user, 'get', additionalSets), + post: _requestMaker(user, 'post', additionalSets), + put: _requestMaker(user, 'put', additionalSets), + del: _requestMaker(user, 'del', additionalSets), + }; +} + +// Use this to verify error messages returned by the server +// That way, if the translated string changes, the test +// will not break. NOTE: it checks agains errors with string as well. +export function translate (key, variables) { + const STRING_ERROR_MSG = 'Error processing the string. Please see Help > Report a Bug.'; + const STRING_DOES_NOT_EXIST_MSG = /^String '.*' not found.$/; + + let translatedString = i18n.t(key, variables); + + expect(translatedString).to.not.be.empty; + expect(translatedString).to.not.eql(STRING_ERROR_MSG); + expect(translatedString).to.not.match(STRING_DOES_NOT_EXIST_MSG); + + return translatedString; +} + +// Useful for checking things that have been deleted, +// but you no longer have access to, +// like private parties or users +export function checkExistence (collectionName, id) { + return new Promise((resolve, reject) => { + mongo.connect('mongodb://localhost/habitrpg_test', (connectionError, db) => { + if (connectionError) return reject(connectionError); + let collection = db.collection(collectionName); + + collection.find({_id: id}, {_id: 1}).limit(1).toArray((findError, docs) => { + if (findError) return reject(findError); + + let exists = docs.length > 0; + + db.close(); + resolve(exists); + }); + }); + }); +} + +// 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 function generateUser (update = {}) { + let username = generateUUID(); + let password = 'password'; + let email = `${username}@example.com`; + + let request = _requestMaker({}, 'post'); + + return new Promise((resolve, reject) => { + request('/register', { + username, + email, + password, + confirmPassword: password, + }).then((user) => { + _updateDocument('users', user, update, () => { + resolve(user); + }); + }).catch(reject); + }); +} + +// Generates a new group. Requires a user object, which +// will will become the groups leader. Takes an update +// argument which will update group +export function generateGroup (leader, update = {}) { + let request = _requestMaker(leader, 'post'); + + return new Promise((resolve, reject) => { + request('/groups').then((group) => { + _updateDocument('groups', group, update, () => { + resolve(group); + }).catch(reject); + }); + }); +} + +// 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 function createAndPopulateGroup (settings = {}) { + let request; + let leader; + let members; + let invitees; + let group; + + let numberOfMembers = settings.members || 0; + let numberOfInvites = settings.invites || 0; + let groupDetails = settings.groupDetails; + let leaderDetails = settings.leaderDetails || { balance: 10 }; + + let leaderPromise = generateUser(leaderDetails); + + let memberPromises = Promise.all( + times(numberOfMembers, () => { + return generateUser(); + }) + ); + + let invitePromises = Promise.all( + times(numberOfInvites, () => { + return generateUser(); + }) + ); + + return new Promise((resolve, reject) => { + return leaderPromise.then((user) => { + leader = user; + request = _requestMaker(leader, 'post'); + return memberPromises; + }).then((users) => { + members = users; + groupDetails.members = groupDetails.members || [leader._id]; + + each(members, (member) => { + groupDetails.members.push(member._id); + }); + + return generateGroup(leader, groupDetails); + }).then((createdGroup) => { + group = createdGroup; + return invitePromises; + }).then((users) => { + invitees = users; + + let invitationPromises = []; + + each(invitees, (invitee) => { + let invitePromise = request(`/groups/${group._id}/invite`, { + uuids: [invitee._id], + }); + + invitationPromises.push(invitePromise); + }); + + return Promise.all(invitationPromises); + }).then(() => { + resolve({ + leader, + group, + members, + invitees, + }); + }).catch(reject); + }); +} + +// Specifically helpful for the GET /groups tests, +// resets the db to an empty state and creates a tavern document +export function resetHabiticaDB () { + return new Promise((resolve, reject) => { + mongo.connect('mongodb://localhost/habitrpg_test', (err, db) => { + if (err) return reject(err); + + db.dropDatabase((dbErr) => { + if (dbErr) return reject(dbErr); + let groups = db.collection('groups'); + + groups.insertOne({ + _id: 'habitrpg', + chat: [], + leader: '9', + name: 'HabitRPG', + type: 'guild', + privacy: 'public', + members: [], + }, (insertErr) => { + if (insertErr) return reject(insertErr); + + db.close(); + resolve(); + }); + }); + }); + }); +} + +function _requestMaker (user, method, additionalSets) { + return (route, send, query) => { + return new Promise((resolve, reject) => { + let request = superagent[method](`http://localhost:${API_TEST_SERVER_PORT}/api/v2${route}`) + .accept('application/json'); + + if (user && user._id && user.apiToken) { + request + .set('x-api-user', user._id) + .set('x-api-key', user.apiToken); + } + + if (additionalSets) { + request.set(additionalSets); + } + + request + .query(query) + .send(send) + .end((err, response) => { + if (err) { + if (!err.response) return reject(err); + + return reject({ + code: err.response.status, + text: err.response.body.err, + }); + } + + resolve(response.body); + }); + }); + }; +} + +function _updateDocument (collectionName, doc, update, cb) { + if (isEmpty(update)) { + return cb(); + } + + mongo.connect('mongodb://localhost/habitrpg_test', (connectErr, db) => { + if (connectErr) throw new Error(`Error connecting to database when updating ${collectionName} collection: ${connectErr}`); + + let collection = db.collection(collectionName); + + collection.update({ _id: doc._id }, { $set: update }, (updateErr) => { + if (updateErr) throw new Error(`Error updating ${collectionName}: ${updateErr}`); + assign(doc, update); + db.close(); + cb(); + }); + }); +} diff --git a/test/helpers/content.helper.js b/test/helpers/content.helper.js index 83178c1a52..92acd80310 100644 --- a/test/helpers/content.helper.js +++ b/test/helpers/content.helper.js @@ -2,8 +2,7 @@ require('./globals.helper'); import {each} from 'lodash'; import i18n from '../../common/script/src/i18n'; -require('coffee-script'); -i18n.translations = require('../../website/src/i18n.js').translations; +i18n.translations = require('../../website/src/libs/i18n.js').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.$/; @@ -16,7 +15,7 @@ export function expectValidTranslationString (attribute) { expect(translatedString).to.not.be.empty; expect(translatedString).to.not.eql(STRING_ERROR_MSG); expect(translatedString).to.not.match(STRING_DOES_NOT_EXIST_MSG); -}; +} export function describeEachItem (testDescription, set, cb, describeFunction) { // describeFunction allows you to pass in 'only' or 'skip' @@ -35,8 +34,8 @@ export function describeEachItem (testDescription, set, cb, describeFunction) { describeEachItem.only = (des, set, cb) => { describeEachItem(des, set, cb, 'only'); -} +}; describeEachItem.skip = (des, set, cb) => { describeEachItem(des, set, cb, 'skip'); -} +}; diff --git a/test/helpers/globals.helper.js b/test/helpers/globals.helper.js index 892d086dc8..21f60b7f46 100644 --- a/test/helpers/globals.helper.js +++ b/test/helpers/globals.helper.js @@ -1,8 +1,10 @@ +/* eslint-disable no-undef */ //------------------------------ // Global modules //------------------------------ -global._ = require("lodash") -global.chai = require("chai") -chai.use(require("sinon-chai")) -global.expect = chai.expect +global._ = require('lodash'); +global.chai = require('chai'); +chai.use(require('sinon-chai')); +chai.use(require('chai-as-promised')); +global.expect = chai.expect; diff --git a/test/mocha.opts b/test/mocha.opts index 3f0bf9cd67..bcdefd3e55 100644 --- a/test/mocha.opts +++ b/test/mocha.opts @@ -3,7 +3,7 @@ --timeout 8000 --check-leaks --growl ---debug ---compilers coffee:coffee-script --globals io ---require test/api/api-helper +--compilers js:babel-core/register +--require test/api-legacy/api-helper +--require ./test/helpers/globals.helper diff --git a/test/server_side/analytics.test.js b/test/server_side/analytics.test.js index 96caeca914..7cde7aede8 100644 --- a/test/server_side/analytics.test.js +++ b/test/server_side/analytics.test.js @@ -8,7 +8,9 @@ describe('analytics', function() { // Mocks var amplitudeMock = sinon.stub(); var googleAnalyticsMock = sinon.stub(); - var amplitudeTrack = sinon.stub(); + var amplitudeTrack = sinon.stub().returns({ + catch: function () { return true; } + }); var googleEvent = sinon.stub().returns({ send: function() { } }); @@ -28,7 +30,7 @@ describe('analytics', function() { }); describe('init', function() { - var analytics = rewire('../../website/src/analytics'); + var analytics = rewire('../../website/src/libs/analytics'); it('throws an error if no options are passed in', function() { expect(analytics).to.throw('No options provided'); @@ -60,7 +62,7 @@ describe('analytics', function() { describe('track', function() { var analyticsData, event_type; - var analytics = rewire('../../website/src/analytics'); + var analytics = rewire('../../website/src/libs/analytics'); var initializedAnalytics; beforeEach(function() { @@ -96,6 +98,24 @@ describe('analytics', function() { }); }); + it('uses a dummy user id if none is provided', function() { + delete analyticsData.uuid; + + initializedAnalytics.track(event_type, analyticsData); + + expect(amplitudeTrack).to.be.calledOnce; + expect(amplitudeTrack).to.be.calledWith({ + event_type: 'Cron', + user_id: 'no-user-id-was-provided', + platform: 'server', + event_properties: { + category: 'behavior', + resting: true, + cronCount: 5 + } + }); + }); + it('sends english item name for gear if itemKey is provided', function() { analyticsData.itemKey = 'headAccessory_special_foxEars' @@ -350,7 +370,7 @@ describe('analytics', function() { var purchaseData; - var analytics = rewire('../../website/src/analytics'); + var analytics = rewire('../../website/src/libs/analytics'); var initializedAnalytics; beforeEach(function() { diff --git a/test/server_side/controllers/groups.test.js b/test/server_side/controllers/groups.test.js index ad9196e13f..6a75c75c78 100644 --- a/test/server_side/controllers/groups.test.js +++ b/test/server_side/controllers/groups.test.js @@ -5,10 +5,10 @@ var expect = chai.expect; var Q = require('q'); var Group = require('../../../website/src/models/group').model; -var groupsController = require('../../../website/src/controllers/groups'); +var groupsController = require('../../../website/src/controllers/api-v2/groups'); describe('Groups Controller', function() { - var utils = require('../../../website/src/utils'); + var utils = require('../../../website/src/libs/utils'); describe('#invite', function() { var res, req, user, group; @@ -194,7 +194,7 @@ describe('Groups Controller', function() { expect(group.leave).to.not.be.called; expect(res.json).to.be.calledOnce; - expect(res.json).to.be.calledWith(403, 'You cannot leave party during an active quest. Please leave the quest first'); + expect(res.json).to.be.calledWith(403, 'You cannot leave party during an active quest. Please leave the quest first.'); }); it('prevents quest leader from leaving a party if they have started a quest', function() { diff --git a/test/server_side/controllers/user.test.js b/test/server_side/controllers/user.test.js index aac7bf69b7..a000c0cde1 100644 --- a/test/server_side/controllers/user.test.js +++ b/test/server_side/controllers/user.test.js @@ -4,7 +4,7 @@ chai.use(require("sinon-chai")) var expect = chai.expect var rewire = require('rewire'); -var userController = rewire('../../../website/src/controllers/user'); +var userController = rewire('../../../website/src/controllers/api-v2/user'); describe('User Controller', function() { @@ -359,7 +359,7 @@ describe('User Controller', function() { }); it('sends webhooks', function() { - var webhook = require('../../../website/src/webhook'); + var webhook = require('../../../website/src/libs/webhook'); sinon.spy(webhook, 'sendTaskWebhook'); userController.score(req, res); diff --git a/test/server_side/webhooks.test.js b/test/server_side/webhooks.test.js index 596e441620..ef6636bf93 100644 --- a/test/server_side/webhooks.test.js +++ b/test/server_side/webhooks.test.js @@ -4,7 +4,7 @@ chai.use(require("sinon-chai")) var expect = chai.expect var rewire = require('rewire'); -var webhook = rewire('../../website/src/webhook'); +var webhook = rewire('../../website/src/libs/webhook'); describe('webhooks', function() { var postSpy; diff --git a/test/spec/controllers/challengesCtrlSpec.js b/test/spec/controllers/challengesCtrlSpec.js index 283ce4b224..5a48805f46 100644 --- a/test/spec/controllers/challengesCtrlSpec.js +++ b/test/spec/controllers/challengesCtrlSpec.js @@ -148,6 +148,19 @@ describe('Challenges Controller', function() { expect(scope.filterChallenges(notOwnMem)).to.eql(false); expect(scope.filterChallenges(notOwnNotMem)).to.eql(true); }); + + it('it filters challenges to a single group when group id filter is set', inject(function($controller) { + scope.search = { }; + scope.groups = { + 0: specHelper.newGroup({_id: 'group-one'}), + 1: specHelper.newGroup({_id: 'group-two'}), + 2: specHelper.newGroup({_id: 'group-three'}) + }; + + scope.groupIdFilter = 'group-one'; + scope.filterInitialChallenges(); + expect(scope.search.group).to.eql({'group-one': true}); + })); }); describe('selectAll', function() { diff --git a/test/spec/controllers/inventoryCtrlSpec.js b/test/spec/controllers/inventoryCtrlSpec.js index 7456598e7b..2553acbcf3 100644 --- a/test/spec/controllers/inventoryCtrlSpec.js +++ b/test/spec/controllers/inventoryCtrlSpec.js @@ -18,6 +18,9 @@ describe('Inventory Controller', function() { food: { Meat: 1 }, pets: {}, mounts: {} + }, + preferences: { + suppressModals: {} } }); @@ -53,14 +56,136 @@ describe('Inventory Controller', function() { expect(scope.selectedPotion.key).to.eql('Base'); }); - it('hatches a pet', function(){ - scope.chooseEgg('Cactus'); - scope.choosePotion('Base'); - expect(user.items.eggs).to.eql({Cactus: 0}); - expect(user.items.hatchingPotions).to.eql({Base: 0}); - expect(user.items.pets).to.eql({'Cactus-Base': 5}); - expect(scope.selectedEgg).to.eql(null); - expect(scope.selectedPotion).to.eql(null); + describe('Hatching Pets', function(){ + beforeEach(function() { + sandbox.stub(rootScope, 'openModal'); + }); + + it('hatches a pet', function(){ + scope.chooseEgg('Cactus'); + scope.choosePotion('Base'); + expect(user.items.eggs).to.eql({Cactus: 0}); + expect(user.items.hatchingPotions).to.eql({Base: 0}); + expect(user.items.pets).to.eql({'Cactus-Base': 5}); + expect(scope.selectedEgg).to.eql(null); + expect(scope.selectedPotion).to.eql(null); + }); + + it('shows a modal for pet hatching', function(){ + scope.chooseEgg('Cactus'); + scope.choosePotion('Base'); + + expect(rootScope.openModal).to.have.been.calledOnce; + expect(rootScope.openModal).to.have.been.calledWith('hatchPet'); + }); + + it('shows modal even if user has raised that pet to a mount', function(){ + user.items.pets['Cactus-Base'] = -1; + scope.chooseEgg('Cactus'); + scope.choosePotion('Base'); + + expect(rootScope.openModal).to.have.been.calledOnce; + expect(rootScope.openModal).to.have.been.calledWith('hatchPet'); + }); + + it('does not show modal if user tries to hatch a pet they own', function(){ + user.items.pets['Cactus-Base'] = 5; + scope.chooseEgg('Cactus'); + scope.choosePotion('Base'); + expect(rootScope.openModal).to.not.have.been.called; + }); + + it('does not show modal if user tries to hatch a premium quest pet', function(){ + user.items.eggs = {Snake: 1}; + user.items.hatchingPotions = {Peppermint: 1}; + scope.chooseEgg('Snake'); + scope.choosePotion('Peppermint'); + expect(rootScope.openModal).to.not.have.been.called; + }); + + it('does not show pet hatching modal if user has opted out', function(){ + user.preferences.suppressModals.hatchPet = true; + scope.chooseEgg('Cactus'); + scope.choosePotion('Base'); + + expect(rootScope.openModal).to.not.be.called; + }); + }); + + describe('Feeding and Raising Pets', function() { + beforeEach(function() { + sandbox.stub(rootScope, 'openModal'); + user.items.pets = {'PandaCub-Base':5}; + user.items.mounts = {'PandaCub-Base':false}; + }); + + it('feeds a pet', function() { + scope.chooseFood('Meat'); + scope.choosePet('PandaCub','Base'); + + expect(user.items.pets['PandaCub-Base']).to.eql(10); + }); + + it('gives weaker benefit when feeding inappropriate food', function() { + user.items.food.Honey = 1; + + scope.chooseFood('Honey'); + scope.choosePet('PandaCub','Base'); + + expect(user.items.pets['PandaCub-Base']).to.eql(7); + }); + + it('raises pet to a mount when feeding gauge maxes out', function() { + user.items.pets['PandaCub-Base'] = 45; + + scope.chooseFood('Meat'); + scope.choosePet('PandaCub','Base'); + + expect(user.items.pets['PandaCub-Base']).to.eql(-1); + expect(user.items.mounts['PandaCub-Base']).to.exist; + }); + + it('raises pet to a mount instantly when using a Saddle', function() { + user.items.food.Saddle = 1; + + scope.chooseFood('Saddle'); + scope.choosePet('PandaCub','Base'); + + expect(user.items.pets['PandaCub-Base']).to.eql(-1); + expect(user.items.mounts['PandaCub-Base']).to.exist; + }); + + it('displays mount raising modal for drop pets', function() { + user.items.food.Saddle = 1; + + scope.chooseFood('Saddle'); + scope.choosePet('PandaCub','Base'); + + expect(rootScope.openModal).to.have.been.calledOnce; + expect(rootScope.openModal).to.have.been.calledWith('raisePet'); + }); + + it('displays mount raising modal for quest pets', function() { + user.items.food.Saddle = 1; + user.items.pets['Snake-Base'] = 1; + + scope.chooseFood('Saddle'); + scope.choosePet('Snake','Base'); + + expect(rootScope.openModal).to.have.been.calledOnce; + expect(rootScope.openModal).to.have.been.calledWith('raisePet'); + }); + + it('displays mount raising modal for premium pets', function() { + user.items.food.Saddle = 1; + user.items.pets['TigerCub-Spooky'] = 1; + + scope.chooseFood('Saddle'); + scope.choosePet('TigerCub','Spooky'); + + expect(rootScope.openModal).to.have.been.calledOnce; + expect(rootScope.openModal).to.have.been.calledWith('raisePet'); + }); }); it('sells an egg', function(){ diff --git a/test/spec/services/statServicesSpec.js b/test/spec/services/statServicesSpec.js index d688be23fb..81e13645de 100644 --- a/test/spec/services/statServicesSpec.js +++ b/test/spec/services/statServicesSpec.js @@ -135,7 +135,7 @@ describe('Stats Service', function() { }); describe('equipmentStatBonus', function() { - it('tallies up stats from euqipment that is equipped', function() { + it('tallies up stats from equipment that is equipped', function() { var equippedGear = { "weapon" : "weapon_special_1", "shield" : "shield_special_1", diff --git a/validate-commit-msg.js b/validate-commit-msg.js deleted file mode 100755 index 56becc5136..0000000000 --- a/validate-commit-msg.js +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env node - -/** - * Git COMMIT-MSG hook for validating commit message - * From: https://github.com/angular/angular.js - * See https://docs.google.com/document/d/1rk04jEuGfk9kYzfqCuOlPTSJw3hEDZJTBN5E5f1SALo/edit - * - * Installation: - * >> cd - * >> ln -s ../../validate-commit-msg.js .git/hooks/commit-msg - */ -var fs = require('fs'); -var util = require('util'); - - -var MAX_LENGTH = 999; -var PATTERN = /^(?:fixup!\s*)?(\w*)(\(([\w\$\.\-\*/]*)\))?\: (.*)$/; -var IGNORED = /^WIP\:/; -var TYPES = { - feat: true, - fix: true, - docs: true, - style: true, - refactor: true, - perf: true, - test: true, - chore: true, - revert: true, - 'interface': true, - i18n: true -}; - - -var error = function() { - // gitx does not display it - // http://gitx.lighthouseapp.com/projects/17830/tickets/294-feature-display-hook-error-message-when-hook-fails - // https://groups.google.com/group/gitx/browse_thread/thread/a03bcab60844b812 - console.error('INVALID COMMIT MSG: ' + util.format.apply(null, arguments)); -}; - - -var validateMessage = function(message) { - var isValid = true; - - if (IGNORED.test(message)) { - console.log('Commit message validation ignored.'); - return true; - } - - if (message.length > MAX_LENGTH) { - error('is longer than %d characters !', MAX_LENGTH); - isValid = false; - } - - var match = PATTERN.exec(message); - - if (!match) { - error('does not match "(): " ! was: ' + message); - return false; - } - - var type = match[1]; - var scope = match[3]; - var subject = match[4]; - - if (!TYPES.hasOwnProperty(type)) { - error('"%s" is not allowed type !', type); - return false; - } - - // Some more ideas, do want anything like this ? - // - allow only specific scopes (eg. fix(docs) should not be allowed ? - // - auto correct the type to lower case ? - // - auto correct first letter of the subject to lower case ? - // - auto add empty line after subject ? - // - auto remove empty () ? - // - auto correct typos in type ? - // - store incorrect messages, so that we can learn - - return isValid; -}; - - -var firstLineFromBuffer = function(buffer) { - return buffer.toString().split('\n').shift(); -}; - - - -// publish for testing -exports.validateMessage = validateMessage; - -// hacky start if not run by jasmine :-D -if (process.argv.join('').indexOf('jasmine-node') === -1) { - var commitMsgFile = process.argv[2]; - var incorrectLogFile = commitMsgFile.replace('COMMIT_EDITMSG', 'logs/incorrect-commit-msgs'); - - fs.readFile(commitMsgFile, function(err, buffer) { - var msg = firstLineFromBuffer(buffer); - - if (!validateMessage(msg)) { - fs.appendFile(incorrectLogFile, msg + '\n', function() { - process.exit(1); - }); - } else { - process.exit(0); - } - }); -} diff --git a/validate-commit-msg.spec.js b/validate-commit-msg.spec.js deleted file mode 100644 index 4edbfdea5f..0000000000 --- a/validate-commit-msg.spec.js +++ /dev/null @@ -1,71 +0,0 @@ -describe('validate-commit-msg.js', function() { - var m = require('./validate-commit-msg'); - var errors = []; - var logs = []; - - var VALID = true; - var INVALID = false; - - beforeEach(function() { - errors.length = 0; - logs.length = 0; - - spyOn(console, 'error').andCallFake(function(msg) { - errors.push(msg.replace(/\x1B\[\d+m/g, '')); // uncolor - }); - - spyOn(console, 'log').andCallFake(function(msg) { - logs.push(msg.replace(/\x1B\[\d+m/g, '')); // uncolor - }); - }); - - describe('validateMessage', function() { - - it('should be valid', function() { - expect(m.validateMessage('fixup! fix($compile): something')).toBe(VALID); - expect(m.validateMessage('fix($compile): something')).toBe(VALID); - expect(m.validateMessage('feat($location): something')).toBe(VALID); - expect(m.validateMessage('docs($filter): something')).toBe(VALID); - expect(m.validateMessage('style($http): something')).toBe(VALID); - expect(m.validateMessage('refactor($httpBackend): something')).toBe(VALID); - expect(m.validateMessage('test($resource): something')).toBe(VALID); - expect(m.validateMessage('chore($controller): something')).toBe(VALID); - expect(m.validateMessage('chore(foo-bar): something')).toBe(VALID); - expect(m.validateMessage('chore(*): something')).toBe(VALID); - expect(m.validateMessage('chore(guide/location): something')).toBe(VALID); - expect(m.validateMessage('revert(foo): something')).toBe(VALID); - expect(m.validateMessage('i18n(translate): something')).toBe(VALID); - expect(m.validateMessage('interface(ui-change): something')).toBe(VALID); - expect(errors).toEqual([]); - }); - - - it('should validate "(): " format', function() { - var msg = 'not correct format'; - - expect(m.validateMessage(msg)).toBe(INVALID); - expect(errors).toEqual(['INVALID COMMIT MSG: does not match "(): " ! was: not correct format']); - }); - - - it('should validate type', function() { - expect(m.validateMessage('weird($filter): something')).toBe(INVALID); - expect(errors).toEqual(['INVALID COMMIT MSG: "weird" is not allowed type !']); - }); - - - it('should allow empty scope', function() { - expect(m.validateMessage('fix: blablabla')).toBe(VALID); - }); - - - it('should allow dot in scope', function() { - expect(m.validateMessage('chore(mocks.$httpBackend): something')).toBe(VALID); - }); - - - it('should ignore msg prefixed with "WIP: "', function() { - expect(m.validateMessage('WIP: bullshit')).toBe(VALID); - }); - }); -}); diff --git a/website/public/css/alerts.styl b/website/public/css/alerts.styl index 6525f131ea..e5ac4aa042 100644 --- a/website/public/css/alerts.styl +++ b/website/public/css/alerts.styl @@ -14,7 +14,7 @@ display: inline-block .wide-popover - max-width: 400px + max-width: max-content // Small alerts alert-sm-mixin() diff --git a/website/public/css/index.styl b/website/public/css/index.styl index 46013ca73e..382d4838b7 100644 --- a/website/public/css/index.styl +++ b/website/public/css/index.styl @@ -9,8 +9,8 @@ @import "../bower_components/select2/select2.css" // Custom includes -@import "./global-colors.styl"; -@import "./global-modules.styl"; +@import "./global-colors.styl" +@import "./global-modules.styl" @import "./tasks.styl" @import "./avatar.styl" @import "./customizer.styl" @@ -30,6 +30,7 @@ @import "./footer.styl" @import "./menu.styl" @import "./options.styl" +@import "./no-script.styl" html,body,p,h1,ul,li,table,tr,th,td margin: 0 diff --git a/website/public/css/inventory.styl b/website/public/css/inventory.styl index 8e86e70f5b..1740daa407 100644 --- a/website/public/css/inventory.styl +++ b/website/public/css/inventory.styl @@ -104,7 +104,7 @@ menu.pets .customize-menu .pet-button border: none background: none white -.pet-not-owned +.pet-not-owned, .mount-not-owned width: 81px; height: 99px; /* Would use css3 filters and just display the original pet image with a black hue, @@ -115,12 +115,6 @@ menu.pets .customize-menu -o-filter: brightness(0%) -ms-filter: brightness(0%)*/ - .PixelPaw - margin-top: 36px // align paw with pets, at the bottom of the button -.mount-not-owned - width: 104px; - height: 99px; - .PixelPaw margin-top: 36px // align paw with pets, at the bottom of the button diff --git a/website/public/css/items.styl b/website/public/css/items.styl index dd96381fd9..7df10bd4d1 100644 --- a/website/public/css/items.styl +++ b/website/public/css/items.styl @@ -29,7 +29,7 @@ .btn-buy input:focus opacity:0 - + input:focus + a.btn-buy background-color: $bad text-decoration: none diff --git a/website/public/css/no-script.styl b/website/public/css/no-script.styl new file mode 100644 index 0000000000..12abd756d3 --- /dev/null +++ b/website/public/css/no-script.styl @@ -0,0 +1,15 @@ +noscript + display: block + padding: 20px + text-align: center + + p + margin-top: 5px + + a + display: block + margin-top: 5px + +noscript.banner + background-color: #fff9ca + border: 1px solid #dfd8c2 diff --git a/website/public/css/npcs.styl b/website/public/css/npcs.styl index 14fee471ea..7acf652045 100644 --- a/website/public/css/npcs.styl +++ b/website/public/css/npcs.styl @@ -34,4 +34,4 @@ display block position:relative -.popover-navigation {clear:both;} \ No newline at end of file +.popover-navigation {clear:both;} diff --git a/website/public/css/tasks.styl b/website/public/css/tasks.styl index cbeed74de6..854125dcb0 100644 --- a/website/public/css/tasks.styl +++ b/website/public/css/tasks.styl @@ -190,12 +190,17 @@ for $stage in $stages float: right font-size: 0.85em .empty-task-notification + // @TODO: This causes weird centering behavior (see #6332) + // however, this is required to show the tooltip on the task button + // Figure out how to fix the centering behavior while preserving the tooltip height: 100%; // message in Dailies column when Resting in Inn // ------------------------ .dailiesRestingInInn clear: both + button + margin-top 10px // an individual task entry // ------------------------ @@ -441,6 +446,8 @@ form font-size: 0.75em content: "\E114" padding-left: 0.75em + &.active:after + content: "\E113" //&:not(.mega):after //content: ':' diff --git a/website/public/front/images/coding_by_phoneix_faerie.png b/website/public/front/images/coding_by_phoneix_faerie.png new file mode 100644 index 0000000000..cdad452fa5 Binary files /dev/null and b/website/public/front/images/coding_by_phoneix_faerie.png differ diff --git a/website/public/js/app.js b/website/public/js/app.js index d0caf41c2b..bae9606422 100644 --- a/website/public/js/app.js +++ b/website/public/js/app.js @@ -148,6 +148,7 @@ window.habitrpg = angular.module('habitrpg', // Options > Social > Challenges .state('options.social.challenges', { url: "/challenges", + params: { groupIdFilter: null }, controller: 'ChallengesCtrl', templateUrl: "partials/options.social.challenges.html" }) @@ -156,7 +157,6 @@ window.habitrpg = angular.module('habitrpg', templateUrl: 'partials/options.social.challenges.detail.html', controller: ['$scope', 'Challenges', '$stateParams', function($scope, Challenges, $stateParams){ - $scope.obj = $scope.challenge = Challenges.Challenge.get({cid:$stateParams.cid}, function(){ $scope.challenge._locked = true; }); @@ -255,4 +255,6 @@ window.habitrpg = angular.module('habitrpg', $httpProvider.defaults.headers.common['x-api-user'] = settings.auth.apiId; $httpProvider.defaults.headers.common['x-api-key'] = settings.auth.apiToken; } + + $httpProvider.defaults.headers.common['x-client'] = 'habitica-web'; }]); diff --git a/website/public/js/controllers/challengesCtrl.js b/website/public/js/controllers/challengesCtrl.js index d60c15bd00..1cafe40d44 100644 --- a/website/public/js/controllers/challengesCtrl.js +++ b/website/public/js/controllers/challengesCtrl.js @@ -5,6 +5,8 @@ habitrpg.controller("ChallengesCtrl", ['$rootScope','$scope', 'Shared', 'User', // challenge $scope.cid = $state.params.cid; + $scope.groupIdFilter = $stateParams.groupIdFilter; + _getChallenges(); // FIXME $scope.challenges needs to be resolved first (see app.js) @@ -325,6 +327,21 @@ habitrpg.controller("ChallengesCtrl", ['$rootScope','$scope', 'Shared', 'User', }); }; + $scope.filterInitialChallenges = function() { + $scope.groupsFilter = _.uniq(_.pluck($scope.challenges, 'group'), function(g){return g._id}); + $scope.search = { + group: _.transform($scope.groups, function(m,g){m[g._id]=true;}), + _isMember: "either", + _isOwner: "either" + }; + //If we game from a group, then override the filter to that group + + if ($scope.groupIdFilter) { + $scope.search.group = {}; + $scope.search.group[$scope.groupIdFilter] = true ; + } + } + function _calculateMaxPrize(gid) { var userBalance = User.getBalanceInGems() || 0; @@ -375,12 +392,7 @@ habitrpg.controller("ChallengesCtrl", ['$rootScope','$scope', 'Shared', 'User', } else { Challenges.Challenge.query(function(challenges){ $scope.challenges = challenges; - $scope.groupsFilter = _.uniq(_.pluck(challenges, 'group'), function(g){return g._id}); - $scope.search = { - group: _.transform($scope.groups, function(m,g){m[g._id]=true;}), - _isMember: "either", - _isOwner: "either" - }; + $scope.filterInitialChallenges(); }); } }; diff --git a/website/public/js/controllers/footerCtrl.js b/website/public/js/controllers/footerCtrl.js index 008524db51..cd0b9ac182 100644 --- a/website/public/js/controllers/footerCtrl.js +++ b/website/public/js/controllers/footerCtrl.js @@ -1,8 +1,10 @@ "use strict"; angular.module('habitrpg').controller("FooterCtrl", -['$scope', '$rootScope', 'User', '$http', 'Notification', 'ApiUrl', -function($scope, $rootScope, User, $http, Notification, ApiUrl) { +['$scope', '$rootScope', 'User', '$http', 'Notification', 'ApiUrl', 'Social', +function($scope, $rootScope, User, $http, Notification, ApiUrl, Social) { + + $scope.loadWidgets = Social.loadWidgets; if(env.isStaticPage){ $scope.languages = env.avalaibleLanguages; @@ -31,9 +33,6 @@ function($scope, $rootScope, User, $http, Notification, ApiUrl) { // Stripe $.getScript('//checkout.stripe.com/v2/checkout.js'); - // Twitter - $.getScript('https://platform.twitter.com/widgets.js'); - /* Google Content Experiments if (window.env.NODE_ENV === 'production') { $.getScript('//www.google-analytics.com/cx/api.js?experiment=boVO4eEyRfysNE5D53nCMQ', function(){ diff --git a/website/public/js/controllers/inventoryCtrl.js b/website/public/js/controllers/inventoryCtrl.js index 8f683f8265..42d0a0ca97 100644 --- a/website/public/js/controllers/inventoryCtrl.js +++ b/website/public/js/controllers/inventoryCtrl.js @@ -1,6 +1,6 @@ habitrpg.controller("InventoryCtrl", - ['$rootScope', '$scope', 'Shared', '$window', 'User', 'Content', 'Analytics', 'Quests', 'Stats', - function($rootScope, $scope, Shared, $window, User, Content, Analytics, Quests, Stats) { + ['$rootScope', '$scope', 'Shared', '$window', 'User', 'Content', 'Analytics', 'Quests', 'Stats', 'Social', + function($rootScope, $scope, Shared, $window, User, Content, Analytics, Quests, Stats, Social) { var user = User.user; @@ -11,6 +11,9 @@ habitrpg.controller("InventoryCtrl", _updateDropAnimalCount(user.items); + // Social sharing buttons + $scope.loadWidgets = Social.loadWidgets; + // Functions from Quests service $scope.lockQuest = Quests.lockQuest; @@ -111,7 +114,25 @@ habitrpg.controller("InventoryCtrl", var eggName = Content.eggs[egg.key].text(); var potName = Content.hatchingPotions[potion.key].text(); if (!$window.confirm(window.env.t('hatchAPot', {potion: potName, egg: eggName}))) return; + + var userHasPet = user.items.pets[egg.key + '-' + potion.key] > 0; + var isPremiumPet = Content.hatchingPotions[potion.key].premium && !Content.dropEggs[egg.key]; + user.ops.hatch({params:{egg:egg.key, hatchingPotion:potion.key}}); + + if (!user.preferences.suppressModals.hatchPet && !userHasPet && !isPremiumPet) { + $scope.hatchedPet = { + egg: eggName, + potion: potName, + potionKey:potion.key, + eggKey: egg.key, + pet: 'Pet-' + egg.key + '-' + potion.key + }; + $rootScope.openModal('hatchPet', { + scope: $scope, + size: 'sm' + }); + } $scope.selectedEgg = null; $scope.selectedPotion = null; @@ -121,7 +142,7 @@ habitrpg.controller("InventoryCtrl", if(!user.achievements.beastMaster && $scope.petCount >= 90) { User.user.achievements.beastMaster = true; - $rootScope.openModal('achievements/beastMaster'); + $rootScope.openModal('achievements/beastMaster', {controller:'UserCtrl', size:'sm'}); } // Checks if Triad Bingo has been reached for the first time @@ -129,7 +150,7 @@ habitrpg.controller("InventoryCtrl", && $scope.mountCount >= 90 && Shared.count.dropPetsCurrentlyOwned(User.user.items.pets) >= 90) { User.user.achievements.triadBingo = true; - $rootScope.openModal('achievements/triadBingo'); + $rootScope.openModal('achievements/triadBingo', {controller:'UserCtrl', size:'sm'}); } } @@ -142,8 +163,9 @@ habitrpg.controller("InventoryCtrl", // Feeding Pet if ($scope.selectedFood) { - var food = $scope.selectedFood - if (food.key == 'Saddle') { + var food = $scope.selectedFood; + var startingMounts = $rootScope.countExists(user.items.mounts); + if (food.key === 'Saddle') { if (!$window.confirm(window.env.t('useSaddle', {pet: petDisplayName}))) return; } else if (!$window.confirm(window.env.t('feedPet', {name: petDisplayName, article: food.article, text: food.text()}))) { return; @@ -152,12 +174,24 @@ habitrpg.controller("InventoryCtrl", $scope.selectedFood = null; _updateDropAnimalCount(user.items); + if ($rootScope.countExists(user.items.mounts) > startingMounts && !user.preferences.suppressModals.raisePet) { + $scope.raisedPet = { + displayName: petDisplayName, + spriteName: pet, + egg: egg, + potion: potion + } + $rootScope.openModal('raisePet', { + scope: $scope, + size:'sm' + }); + } // Checks if mountmaster has been reached for the first time if(!user.achievements.mountMaster && $scope.mountCount >= 90) { User.user.achievements.mountMaster = true; - $rootScope.openModal('achievements/mountMaster'); + $rootScope.openModal('achievements/mountMaster', {controller:'UserCtrl', size:'sm'}); } // Selecting Pet @@ -228,7 +262,7 @@ habitrpg.controller("InventoryCtrl", } }; - $scope.$on("habit:keyup", function (e, keyEvent) { + $scope.$on("habit:keydown", function (e, keyEvent) { if (keyEvent.keyCode == "27") { $scope.deselectItem(); } diff --git a/website/public/js/controllers/notificationCtrl.js b/website/public/js/controllers/notificationCtrl.js index 06c8dc74be..ac3fab9e6a 100644 --- a/website/public/js/controllers/notificationCtrl.js +++ b/website/public/js/controllers/notificationCtrl.js @@ -27,6 +27,13 @@ habitrpg.controller('NotificationCtrl', $rootScope.playSound('Achievement_Unlocked'); }, true); + $rootScope.$watch('user.achievements.challenges.length', function(after, before) { + if (after === before) return; + if (after > before) { + $rootScope.openModal('wonChallenge', {controller: 'UserCtrl', size: 'sm'}); + } + }); + $rootScope.$watch('user.stats.gp', function(after, before) { if (after == before) return; if (User.user.stats.lvl == 0) return; @@ -53,6 +60,28 @@ habitrpg.controller('NotificationCtrl', Notification.mp(mana); }); + // Levels that already display modals and should not trigger generic Level Up + var unlockLevels = { + '3': 'drop system', + '10': 'class system', + '50': 'Orb of Rebirth' + } + + $rootScope.$watch('user.stats.lvl', function(after, before) { + if (after <= before) return; + Notification.lvl(); + $rootScope.playSound('Level_Up'); + if (User.user._tmp && User.user._tmp.drop && (User.user._tmp.drop.type === 'Quest')) return; + if (unlockLevels['' + after]) return; + if (!User.user.preferences.suppressModals.levelUp) $rootScope.openModal('levelUp', {controller:'UserCtrl', size:'sm'}); + }); + + $rootScope.$watch('!user.flags.classSelected && user.stats.lvl >= 10', function(after, before){ + if(after){ + $rootScope.openModal('chooseClass', {controller:'UserCtrl', keyboard:false, backdrop:'static'}); + } + }); + $rootScope.$watch('user._tmp.crit', function(after, before){ if (after == before || !after) return; var amount = User.user._tmp.crit * 100 - 100; @@ -98,7 +127,7 @@ habitrpg.controller('NotificationCtrl', Notification.drop(env.t('messageDropFood', {dropArticle: after.article, dropText: text, dropNotes: notes}), after); } else if (after.type === 'Quest') { $rootScope.selectedQuest = Content.quests[after.key]; - $rootScope.openModal('questDrop', {controller:'PartyCtrl'}); + $rootScope.openModal('questDrop', {controller:'PartyCtrl',size:'sm'}); } else if (after.notificationType === 'Mystery') { text = Content.gear.flat[after.key].text(); Notification.drop(env.t('messageDropMysteryItem', {dropText: text}), after); @@ -111,19 +140,17 @@ habitrpg.controller('NotificationCtrl', }); $rootScope.$watch('user.achievements.streak', function(after, before){ - if(before == undefined || after == before || after < before) return; - if (User.user.achievements.streak > 1) { - Notification.streak(User.user.achievements.streak); - $rootScope.playSound('Achievement_Unlocked'); - } - else { - $rootScope.openModal('achievements/streak'); + if(before == undefined || after <= before) return; + Notification.streak(User.user.achievements.streak); + $rootScope.playSound('Achievement_Unlocked'); + if (!User.user.preferences.suppressModals.streak) { + $rootScope.openModal('achievements/streak', {controller:'UserCtrl'}); } }); $rootScope.$watch('user.achievements.ultimateGearSets', function(after, before){ if (_.isEqual(after,before) || !_.contains(User.user.achievements.ultimateGearSets, true)) return; - $rootScope.openModal('achievements/ultimateGear'); + $rootScope.openModal('achievements/ultimateGear', {controller:'UserCtrl'}); }, true); $rootScope.$watch('user.flags.armoireEmpty', function(after,before){ @@ -133,27 +160,12 @@ habitrpg.controller('NotificationCtrl', $rootScope.$watch('user.achievements.rebirths', function(after, before){ if(after === before) return; - $rootScope.openModal('achievements/rebirth'); + $rootScope.openModal('achievements/rebirth', {controller:'UserCtrl', size: 'sm'}); }); $rootScope.$watch('user.flags.contributor', function(after, before){ if (after === before || after !== true) return; - $rootScope.openModal('achievements/contributor'); - }); - - // Classes modal - $rootScope.$watch('!user.flags.classSelected && user.stats.lvl >= 10', function(after, before){ - if(after){ - $rootScope.openModal('chooseClass', {controller:'UserCtrl', keyboard:false, backdrop:'static'}); - } - }); - - $rootScope.$watch('user.stats.lvl', function(after, before) { - if (after == before) return; - if (after > before) { - Notification.lvl(); - $rootScope.playSound('Level_Up'); - } + $rootScope.openModal('achievements/contributor',{controller:'UserCtrl'}); }); // Completed quest modal diff --git a/website/public/js/controllers/partyCtrl.js b/website/public/js/controllers/partyCtrl.js index 40af2b7e61..cb53ac3eb5 100644 --- a/website/public/js/controllers/partyCtrl.js +++ b/website/public/js/controllers/partyCtrl.js @@ -1,12 +1,13 @@ 'use strict'; -habitrpg.controller("PartyCtrl", ['$rootScope','$scope','Groups','Chat','User','Challenges','$state','$compile','Analytics','Quests', - function($rootScope,$scope,Groups,Chat,User,Challenges,$state,$compile,Analytics,Quests) { +habitrpg.controller("PartyCtrl", ['$rootScope','$scope','Groups','Chat','User','Challenges','$state','$compile','Analytics','Quests','Social', + function($rootScope,$scope,Groups,Chat,User,Challenges,$state,$compile,Analytics,Quests,Social) { $scope.type = 'party'; $scope.text = window.env.t('party'); $scope.group = $rootScope.party = Groups.party(); $scope.newGroup = new Groups.Group({type:'party'}); $scope.inviteOrStartParty = Groups.inviteOrStartParty; + $scope.loadWidgets = Social.loadWidgets; if ($state.is('options.social.party')) { $scope.group.$syncParty(); // Sync party automatically when navigating to party page diff --git a/website/public/js/controllers/rootCtrl.js b/website/public/js/controllers/rootCtrl.js index 0e6fd743c7..8d0bf5f3d8 100644 --- a/website/public/js/controllers/rootCtrl.js +++ b/website/public/js/controllers/rootCtrl.js @@ -327,5 +327,19 @@ habitrpg.controller("RootCtrl", ['$scope', '$rootScope', '$location', 'User', '$ }); // error will be handled via $http interceptor } + + // Global Keyevents + var ctrlKeys = [17, 224, 91]; + $scope.$on("habit:keydown", function (e, keyEvent) { + if (ctrlKeys.indexOf(keyEvent.keyCode) !== -1) { + $scope.ctrlPressed = true; + } + }); + + $scope.$on("habit:keyup", function (e, keyEvent) { + if (ctrlKeys.indexOf(keyEvent.keyCode) !== -1) { + $scope.ctrlPressed = false; + } + }); } ]); diff --git a/website/public/js/controllers/settingsCtrl.js b/website/public/js/controllers/settingsCtrl.js index a61eb3bd31..e785c7c02e 100644 --- a/website/public/js/controllers/settingsCtrl.js +++ b/website/public/js/controllers/settingsCtrl.js @@ -2,8 +2,8 @@ // Make user and settings available for everyone through root scope. habitrpg.controller('SettingsCtrl', - ['$scope', 'User', '$rootScope', '$http', 'ApiUrl', 'Guide', '$location', '$timeout', 'Notification', 'Shared', - function($scope, User, $rootScope, $http, ApiUrl, Guide, $location, $timeout, Notification, Shared) { + ['$scope', 'User', '$rootScope', '$http', 'ApiUrl', 'Guide', '$location', '$timeout', 'Content', 'Notification', 'Shared', + function($scope, User, $rootScope, $http, ApiUrl, Guide, $location, $timeout, Content, Notification, Shared) { // FIXME we have this re-declared everywhere, figure which is the canonical version and delete the rest // $scope.auth = function (id, token) { @@ -150,6 +150,7 @@ habitrpg.controller('SettingsCtrl', Notification.text(env.t('promoCodeApplied')); }); } + $scope.generateCodes = function(codes){ $http.post(ApiUrl.get() + '/api/v2/coupons/generate/'+codes.event+'?count='+(codes.count || 1)) .success(function(res,code){ @@ -158,6 +159,7 @@ habitrpg.controller('SettingsCtrl', window.location.href = '/api/v2/coupons?limit='+codes.count+'&_id='+User.user._id+'&apiToken='+User.user.apiToken; }) } + $scope.releasePets = function() { User.user.ops.releasePets({}); $rootScope.$state.go('tasks'); @@ -194,12 +196,31 @@ habitrpg.controller('SettingsCtrl', $http.get(ApiUrl.get() + '/api/v2/coupons/valid-discount/'+coupon) .success(function(){ Notification.text("Coupon applied!"); - var subs = $scope.Content.subscriptionBlocks; + var subs = Content.subscriptionBlocks; subs["basic_6mo"].discount = true; subs["google_6mo"].discount = false; }); } + $scope.gemGoldCap = function(subscription) { + var baseCap = 25; + var gemCapIncrement = 5; + var capIncrementThreshold = 3; + var gemCapExtra = User.user.purchased.plan.consecutive.gemCapExtra; + var blocks = Content.subscriptionBlocks[subscription.key].months / capIncrementThreshold; + var flooredBlocks = Math.floor(blocks); + + var userTotalDropCap = baseCap + gemCapExtra + flooredBlocks * gemCapIncrement; + var maxDropCap = 50; + + return [userTotalDropCap, maxDropCap]; + }; + + $scope.numberOfMysticHourglasses = function(subscription) { + var numberOfHourglasses = Content.subscriptionBlocks[subscription.key].months / 3; + return Math.floor(numberOfHourglasses); + }; + function _calculateNextCron() { $scope.dayStart; diff --git a/website/public/js/controllers/tasksCtrl.js b/website/public/js/controllers/tasksCtrl.js index 7eee145e37..9797e7eb21 100644 --- a/website/public/js/controllers/tasksCtrl.js +++ b/website/public/js/controllers/tasksCtrl.js @@ -76,7 +76,7 @@ habitrpg.controller("TasksCtrl", ['$scope', '$rootScope', '$location', 'User','N * Pushes task to top or bottom of list */ $scope.pushTask = function(task, index, location) { - var to = (location === 'bottom') ? -1 : 0; + var to = (location === 'bottom' || $scope.ctrlPressed) ? -1 : 0; User.user.ops.sortTask({params:{id:task.id},query:{from:index, to:to}}) }; diff --git a/website/public/js/controllers/userCtrl.js b/website/public/js/controllers/userCtrl.js index c2d0d09c04..e345d8ba2e 100644 --- a/website/public/js/controllers/userCtrl.js +++ b/website/public/js/controllers/userCtrl.js @@ -1,11 +1,13 @@ "use strict"; -habitrpg.controller("UserCtrl", ['$rootScope', '$scope', '$location', 'User', '$http', '$state', 'Guide', 'Shared', 'Content', 'Stats', - function($rootScope, $scope, $location, User, $http, $state, Guide, Shared, Content, Stats) { +habitrpg.controller("UserCtrl", ['$rootScope', '$scope', '$location', 'User', '$http', '$state', 'Guide', 'Shared', 'Content', 'Stats', 'Social', + function($rootScope, $scope, $location, User, $http, $state, Guide, Shared, Content, Stats, Social) { $scope.profile = User.user; $scope.statCalc = Stats; + $scope.loadWidgets = Social.loadWidgets; + $scope.hideUserAvatar = function() { $(".userAvatar").hide(); }; diff --git a/website/public/js/filters/timezoneOffsetToUtc.js b/website/public/js/filters/timezoneOffsetToUtc.js new file mode 100644 index 0000000000..1999efd0c3 --- /dev/null +++ b/website/public/js/filters/timezoneOffsetToUtc.js @@ -0,0 +1,15 @@ +angular.module('habitrpg') + .filter('timezoneOffsetToUtc', function () { + return function (offset) { + var sign = offset > 0 ? '-' : '+'; + + offset = Math.abs(offset) / 60; + + var hour = Math.floor(offset); + + var minutes_int = (offset - hour) * 60; + var minutes = minutes_int < 10 ? '0'+minutes_int : minutes_int; + + return 'UTC' + sign + hour + ':' + minutes; + } + }); diff --git a/website/public/js/services/notificationServices.js b/website/public/js/services/notificationServices.js index 80d2a18df4..f4556f6989 100644 --- a/website/public/js/services/notificationServices.js +++ b/website/public/js/services/notificationServices.js @@ -114,7 +114,7 @@ angular.module("habitrpg").factory("Notification", opacity: 1, addclass: 'alert-' + type, delay: 7000, - hide: (type == 'error') ? false : true, + hide: (type == 'error' || type == 'danger') ? false : true, mouse_reset: false, width: "250px", stack: stack_topright, diff --git a/website/public/js/services/socialServices.js b/website/public/js/services/socialServices.js new file mode 100644 index 0000000000..23ac719118 --- /dev/null +++ b/website/public/js/services/socialServices.js @@ -0,0 +1,41 @@ +'use strict'; + +(function(){ + angular + .module('habitrpg') + .factory('Social', socialFactory); + + socialFactory.$inject = []; + + function socialFactory() { + + function loadWidgets() { + // Facebook + if (typeof FB === 'undefined') { + (function(d, s, id) { + var js, fjs = d.getElementsByTagName(s)[0]; + if (d.getElementById(id)) return; + js = d.createElement(s); js.id = id; + js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.5"; + fjs.parentNode.insertBefore(js, fjs); + }(document, 'script', 'facebook-jssdk')); + } else { + FB.XFBML.parse(); // http://stackoverflow.com/questions/29133563/ + } + + // Tumblr + $.getScript('https://assets.tumblr.com/share-button.js'); + + // Twitter + if (typeof twttr === 'undefined') { + $.getScript('https://platform.twitter.com/widgets.js'); + } else { + twttr.widgets.load(); + } + } + + return { + loadWidgets: loadWidgets + } + } +}()); diff --git a/website/public/js/static.js b/website/public/js/static.js index e87368cdd8..67a07df815 100644 --- a/website/public/js/static.js +++ b/website/public/js/static.js @@ -19,6 +19,8 @@ window.habitrpg = angular.module('habitrpg', ['chieffancypants.loadingBar', 'ui. }); }) } + + $http.defaults.headers.common['x-client'] = 'habitica-web'; }]) .controller("PlansCtrl", ['$rootScope','Analytics', @@ -56,4 +58,4 @@ window.habitrpg = angular.module('habitrpg', ['chieffancypants.loadingBar', 'ui. $(document).ready(function(){ openHashAccordion(); }); -}) +}) diff --git a/website/public/manifest.json b/website/public/manifest.json index 14ede37a12..accb695df3 100644 --- a/website/public/manifest.json +++ b/website/public/manifest.json @@ -52,11 +52,13 @@ "js/services/challengeServices.js", "js/services/paymentServices.js", "js/services/questServices.js", + "js/services/socialServices.js", "js/services/statServices.js", "js/filters/money.js", "js/filters/roundLargeNumbers.js", "js/filters/taskOrdering.js", + "js/filters/timezoneOffsetToUtc.js", "js/directives/close-menu.directive.js", "js/directives/expand-menu.directive.js", @@ -122,6 +124,7 @@ "js/services/analyticsServices.js", "js/services/notificationServices.js", "js/services/sharedServices.js", + "js/services/socialServices.js", "js/services/statServices.js", "common/script/public/userServices.js", "js/controllers/authCtrl.js", @@ -151,6 +154,7 @@ "js/services/analyticsServices.js", "js/services/notificationServices.js", "js/services/sharedServices.js", + "js/services/socialServices.js", "js/services/statServices.js", "common/script/public/userServices.js", "js/controllers/authCtrl.js", diff --git a/website/public/presskit/Basi-List.png b/website/public/presskit/Basi-List.png new file mode 100644 index 0000000000..eedc25917d Binary files /dev/null and b/website/public/presskit/Basi-List.png differ diff --git a/website/public/presskit/stag_battle_by_leephon.png b/website/public/presskit/Battling the Ghost Stag.png similarity index 100% rename from website/public/presskit/stag_battle_by_leephon.png rename to website/public/presskit/Battling the Ghost Stag.png diff --git a/website/public/presskit/Dread Drag'on of Dilatory.png b/website/public/presskit/Dread Drag'on of Dilatory.png new file mode 100644 index 0000000000..5fd8d2297b Binary files /dev/null and b/website/public/presskit/Dread Drag'on of Dilatory.png differ diff --git a/website/public/presskit/HabitRPGPromoPostCard6.png b/website/public/presskit/HabitRPGPromoPostCard6.png deleted file mode 100755 index a81708db03..0000000000 Binary files a/website/public/presskit/HabitRPGPromoPostCard6.png and /dev/null differ diff --git a/website/public/presskit/HabitRPGdevices.png b/website/public/presskit/HabitRPGdevices.png deleted file mode 100755 index 8981ff8875..0000000000 Binary files a/website/public/presskit/HabitRPGdevices.png and /dev/null differ diff --git a/website/public/presskit/Habitica Gryphon.png b/website/public/presskit/Habitica Gryphon.png new file mode 100644 index 0000000000..92d7f6daec Binary files /dev/null and b/website/public/presskit/Habitica Gryphon.png differ diff --git a/website/public/presskit/Habitica Logo Promo.png b/website/public/presskit/Habitica Logo Promo.png new file mode 100644 index 0000000000..a89c38d626 Binary files /dev/null and b/website/public/presskit/Habitica Logo Promo.png differ diff --git a/website/public/presskit/Habitica Text Logo.png b/website/public/presskit/Habitica Text Logo.png new file mode 100644 index 0000000000..d4478c5cf2 Binary files /dev/null and b/website/public/presskit/Habitica Text Logo.png differ diff --git a/website/public/presskit/HabitRPGPromoThin.png b/website/public/presskit/HabiticaPromoThin.png similarity index 100% rename from website/public/presskit/HabitRPGPromoThin.png rename to website/public/presskit/HabiticaPromoThin.png diff --git a/website/public/presskit/Laundromancer_by_Arcosine.png b/website/public/presskit/Laundromancer.png similarity index 100% rename from website/public/presskit/Laundromancer_by_Arcosine.png rename to website/public/presskit/Laundromancer.png diff --git a/website/public/presskit/vice_reborn_by_baconsaur.png b/website/public/presskit/Necro-Vice.png similarity index 100% rename from website/public/presskit/vice_reborn_by_baconsaur.png rename to website/public/presskit/Necro-Vice.png diff --git a/website/public/presskit/SnackLessMonster_by_Arcosine.png b/website/public/presskit/SnackLess Monster.png similarity index 100% rename from website/public/presskit/SnackLessMonster_by_Arcosine.png rename to website/public/presskit/SnackLess Monster.png diff --git a/website/public/presskit/stagnant_dishes_by_kiwibot.png b/website/public/presskit/Stagnant Dishes Boss.png similarity index 100% rename from website/public/presskit/stagnant_dishes_by_kiwibot.png rename to website/public/presskit/Stagnant Dishes Boss.png diff --git a/website/public/presskit/PROMOdevices2.png b/website/public/presskit/Tasks Page.png similarity index 100% rename from website/public/presskit/PROMOdevices2.png rename to website/public/presskit/Tasks Page.png diff --git a/website/public/presskit/habitica.png b/website/public/presskit/habitica.png new file mode 100644 index 0000000000..a90f684be2 Binary files /dev/null and b/website/public/presskit/habitica.png differ diff --git a/website/public/presskit/habitrpg_pixel.png b/website/public/presskit/habitrpg_pixel.png deleted file mode 100755 index 4bd1c43f3b..0000000000 Binary files a/website/public/presskit/habitrpg_pixel.png and /dev/null differ diff --git a/website/public/presskit/logo with text.png b/website/public/presskit/logo with text.png new file mode 100644 index 0000000000..fb7c21eda7 Binary files /dev/null and b/website/public/presskit/logo with text.png differ diff --git a/website/public/presskit/presskit.zip b/website/public/presskit/presskit.zip index e14b647dff..3122fec5c6 100644 Binary files a/website/public/presskit/presskit.zip and b/website/public/presskit/presskit.zip differ diff --git a/website/public/presskit/promo mobile inventorySTILL1.png b/website/public/presskit/promo mobile inventorySTILL1.png deleted file mode 100755 index 08ea4352e2..0000000000 Binary files a/website/public/presskit/promo mobile inventorySTILL1.png and /dev/null differ diff --git a/website/public/presskit/promo mobile inventorySTILL2.png b/website/public/presskit/promo mobile inventorySTILL2.png deleted file mode 100755 index 4cc2d85925..0000000000 Binary files a/website/public/presskit/promo mobile inventorySTILL2.png and /dev/null differ diff --git a/website/src/controllers/auth.js b/website/src/controllers/api-v2/auth.js similarity index 78% rename from website/src/controllers/auth.js rename to website/src/controllers/api-v2/auth.js index 120e935511..7e838097b5 100644 --- a/website/src/controllers/auth.js +++ b/website/src/controllers/api-v2/auth.js @@ -1,34 +1,30 @@ var _ = require('lodash'); var validator = require('validator'); var passport = require('passport'); -var shared = require('../../../common'); +var shared = require('../../../../common'); var async = require('async'); -var utils = require('../utils'); +var utils = require('../../libs/utils'); var nconf = require('nconf'); var request = require('request'); var FirebaseTokenGenerator = require('firebase-token-generator'); -var User = require('../models/user').model; -var EmailUnsubscription = require('../models/emailUnsubscription').model; +var User = require('../../models/user').model; +var EmailUnsubscription = require('../../models/emailUnsubscription').model; var analytics = utils.analytics; -var i18n = require('./../i18n'); +var i18n = require('./../../libs/i18n'); var isProd = nconf.get('NODE_ENV') === 'production'; var api = module.exports; -var NO_TOKEN_OR_UID = { err: "You must include a token and uid (user id) in your request"}; -var NO_USER_FOUND = {err: "No user found."}; -var NO_SESSION_FOUND = { err: "You must be logged in." }; +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' }; } -// Allow case-insensitive regex searching for Mongo queries. See http://stackoverflow.com/a/3561711/362790 -var RegexEscape = function(s){ - return new RegExp('^' + s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + '$', 'i'); -} api.auth = function(req, res, next) { var uid = req.headers['x-api-user']; @@ -67,20 +63,25 @@ api.authWithUrl = function(req, res, next) { } api.registerUser = function(req, res, next) { - var regUname = RegexEscape(req.body.username); 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 (!(req.body.username && req.body.password && req.body.email)) - return cb({code:401, err: ":username, :email, :password, :confirmPassword required"}); + 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: ":password and :confirmPassword don't match"}); - if (!validator.isEmail(req.body.email)) + return cb({code:401, err: shared.i18n.t('messageAuthPasswordMustMatch')}); + if (!validator.isEmail(email)) return cb({code:401, err: ":email invalid"}); cb(); }, findReg: function(cb) { - User.findOne({$or:[{'auth.local.email': email}, {'auth.local.username': regUname}]}, {'auth.local':1}, 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); @@ -88,14 +89,16 @@ api.registerUser = function(req, res, next) { 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"}); - if (regUname.test(data.findReg.auth.local.username)) return cb({code:401, err:"Username 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: req.body.username, - email: email, + 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) }, @@ -105,6 +108,7 @@ api.registerUser = function(req, res, next) { // 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 { @@ -112,15 +116,18 @@ api.registerUser = function(req, res, next) { 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' + gaLabel: 'local', + uuid: user._id, }; analytics.track('register', analyticsData) user.save(function(err, savedUser){ // Clean previous email preferences + // TODO when emails added to EmailUnsubcription they should use lowercase version EmailUnsubscription.remove({email: savedUser.auth.local.email}, function(){ utils.txnEmail(savedUser, 'welcome'); }); @@ -143,10 +150,13 @@ api.loginLocal = function(req, res, next) { var username = req.body.username; var password = req.body.password; if (!(username && password)) return res.json(401, {err:'Missing :username or :password in request body, please provide both'}); - var login = validator.isEmail(username) ? {'auth.local.email':username.toLowerCase()} : {'auth.local.username':username}; + 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.json(401, {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\"."}); + if (!user) return res.json(401, {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.json(401, accountSuspended(user._id)); // We needed the whole user object first so we can get his salt to encrypt password comparison User.findOne( @@ -154,7 +164,7 @@ api.loginLocal = function(req, res, next) { , {_id:1, apiToken:1} , function(err, user){ if (err) return next(err); - if (!user) return res.json(401,{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\"."}); + if (!user) return res.json(401,{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; }); @@ -192,6 +202,8 @@ api.loginSocial = function(req, res, next) { }; 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){ @@ -205,7 +217,8 @@ api.loginSocial = function(req, res, next) { var analyticsData = { category: 'acquisition', type: network, - gaLabel: network + gaLabel: network, + uuid: user._id, }; analytics.track('register', analyticsData) }] @@ -233,11 +246,13 @@ api.deleteSocial = function(req,res,next){ } api.resetPassword = function(req, res, next){ - var email = req.body.email && req.body.email.toLowerCase(), + 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.json(400, {err: "Email not provided"}); + User.findOne({'auth.local.email': email}, function(err, user){ if (err) return next(err); if (!user) return res.send(401, {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."}); @@ -266,15 +281,22 @@ var invalidPassword = function(user, password){ } 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.json(400, {err: "Username not provided"}); async.waterfall([ function(cb){ - User.findOne({'auth.local.username': RegexEscape(req.body.username)}, {auth:1}, 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(res.locals.user, req.body.password)) return cb(invalidPassword(res.locals.user, req.body.password)); - res.locals.user.auth.local.username = req.body.username; - res.locals.user.save(cb); + 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.json(err.code, err) : next(err); @@ -283,13 +305,15 @@ api.changeUsername = function(req, res, next) { } api.changeEmail = function(req, res, next){ - var email = req.body.email && req.body.email.toLowerCase() + var email = req.body.email && req.body.email.toLowerCase(); // emails are all lowercase + if(!email) return res.json(400, {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: "Email already taken"}); + 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); @@ -334,7 +358,7 @@ api.getFirebaseToken = function(req, res, next) { .createToken({ uid: user._id, isHabiticaUser: true - }, { + }, { expires: expires }); diff --git a/website/src/controllers/challenges.js b/website/src/controllers/api-v2/challenges.js similarity index 96% rename from website/src/controllers/challenges.js rename to website/src/controllers/api-v2/challenges.js index a8bc4dc244..72f28d9f3d 100644 --- a/website/src/controllers/challenges.js +++ b/website/src/controllers/api-v2/challenges.js @@ -3,15 +3,15 @@ var _ = require('lodash'); var nconf = require('nconf'); var async = require('async'); -var shared = require('../../../common'); -var User = require('./../models/user').model; -var Group = require('./../models/group').model; -var Challenge = require('./../models/challenge').model; -var logging = require('./../logging'); +var shared = require('../../../../common'); +var User = require('./../../models/user').model; +var Group = require('./../../models/group').model; +var Challenge = require('./../../models/challenge').model; +var logging = require('./../../libs/logging'); var csv = require('express-csv'); -var utils = require('../utils'); +var utils = require('../../libs/utils'); var api = module.exports; -var pushNotify = require('./pushNotifications'); +var pushNotify = require('./../pushNotifications'); /* ------------------------------------------------------------------------ @@ -230,7 +230,7 @@ api.update = function(req, res, next){ // before-save / after-save comparison to determine if we need to sync to users before = _before; var attrs = _.pick(req.body, 'name shortName description habits dailys todos rewards date'.split(' ')); - Challenge.findByIdAndUpdate(cid, {$set:attrs}, cb); + Challenge.findByIdAndUpdate(cid, {$set:attrs}, {new: true}, cb); }, function(saved, cb) { @@ -271,7 +271,7 @@ function closeChal(cid, broken, cb) { function(_removed, cb2) { removed = _removed; var pull = {'$pull':{}}; pull['$pull'][_removed._id] = 1; - Group.findByIdAndUpdate(_removed.group, pull); + Group.findByIdAndUpdate(_removed.group, {new: true}, pull); User.find({_id:{$in: removed.members}}, cb2); }, function(users, cb2) { @@ -297,7 +297,7 @@ function closeChal(cid, broken, cb) { /** * Delete & close */ -api['delete'] = function(req, res, next){ +api.delete = function(req, res, next){ var user = res.locals.user; var cid = req.params.cid; @@ -370,7 +370,7 @@ api.join = function(req, res, next){ async.waterfall([ function(cb) { - Challenge.findByIdAndUpdate(cid, {$addToSet:{members:user._id}}, cb); + Challenge.findByIdAndUpdate(cid, {$addToSet:{members:user._id}}, {new: true}, cb); }, function(chal, cb) { @@ -403,7 +403,7 @@ api.leave = function(req, res, next){ async.waterfall([ function(cb){ - Challenge.findByIdAndUpdate(cid, {$pull:{members:user._id}}, cb); + Challenge.findByIdAndUpdate(cid, {$pull:{members:user._id}}, {new: true}, cb); }, function(chal, cb){ diff --git a/website/src/controllers/coupon.js b/website/src/controllers/api-v2/coupon.js similarity index 95% rename from website/src/controllers/coupon.js rename to website/src/controllers/api-v2/coupon.js index b8450d34f3..c6811037e5 100644 --- a/website/src/controllers/coupon.js +++ b/website/src/controllers/api-v2/coupon.js @@ -1,5 +1,5 @@ var _ = require('lodash'); -var Coupon = require('./../models/coupon').model; +var Coupon = require('./../../models/coupon').model; var api = module.exports; var csv = require('express-csv'); var async = require('async'); diff --git a/website/src/controllers/groups.js b/website/src/controllers/api-v2/groups.js similarity index 87% rename from website/src/controllers/groups.js rename to website/src/controllers/api-v2/groups.js index 573142887c..cd01d1b27e 100644 --- a/website/src/controllers/groups.js +++ b/website/src/controllers/api-v2/groups.js @@ -9,17 +9,17 @@ var _ = require('lodash'); var nconf = require('nconf'); var async = require('async'); var Q = require('q'); -var utils = require('./../utils'); -var shared = require('../../../common'); -var User = require('./../models/user').model; -var Group = require('./../models/group').model; -var Challenge = require('./../models/challenge').model; -var EmailUnsubscription = require('./../models/emailUnsubscription').model; +var utils = require('./../../libs/utils'); +var shared = require('../../../../common'); +var User = require('./../../models/user').model; +var Group = require('./../../models/group').model; +var Challenge = require('./../../models/challenge').model; +var EmailUnsubscription = require('./../../models/emailUnsubscription').model; var isProd = nconf.get('NODE_ENV') === 'production'; var api = module.exports; -var pushNotify = require('./pushNotifications'); +var pushNotify = require('./../pushNotifications'); var analytics = utils.analytics; -var firebase = require('../libs/firebase'); +var firebase = require('../../libs/firebase'); /* ------------------------------------------------------------------------ @@ -143,12 +143,17 @@ api.get = function(req, res, next) { q.exec(function(err, group){ if (err) return next(err); if(!group){ - if(gid !== 'party') return res.json(404,{err: "Group not found or you don't have access."}); + if(gid !== 'party') return res.json(404,{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); } + + if (!user.contributor.admin) { + _purgeFlagInfoFromChat(group, 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(group.members, function(member){ return member._id == user._id; }); //If the group is private or the group is a party, then the user must be a member of the group based on access restrictions above @@ -184,7 +189,7 @@ api.create = function(req, res, next) { group.leader = user._id; if(group.type === 'guild'){ - if(user.balance < 1) return res.json(401, {err: 'Not enough gems!'}); + if(user.balance < 1) return res.json(401, {err: shared.i18n.t('messageInsufficientGems')}); group.balance = 1; user.balance--; @@ -209,7 +214,7 @@ api.create = function(req, res, next) { Group.findOne({type:'party',members:{$in:[user._id]}},cb); }, function(found, cb){ - if (found) return cb('Already in a party, try refreshing.'); + if (found) return cb(shared.i18n.t('messageGroupAlreadyInParty')); group.save(cb); }, function(saved, count, cb){ @@ -218,7 +223,7 @@ api.create = function(req, res, next) { saved.populate('members', nameFields, cb); } ], function(err, populated){ - if (err == 'Already in a party, try refreshing.') return res.json(400,{err:err}); + if (err === shared.i18n.t('messageGroupAlreadyInParty')) return res.json(400,{err:err}); if (err) return next(err); group = user = null; return res.json(populated); @@ -231,7 +236,7 @@ api.update = function(req, res, next) { var user = res.locals.user; if(group.leader !== user._id) - return res.json(401, {err: "Only the group leader can update the group!"}); + return res.json(401, {err: shared.i18n.t('messageGroupOnlyLeaderCanUpdate')}); 'name description logo logo leaderMessage leader leaderOnly'.split(' ').forEach(function(attr){ group[attr] = req.body[attr]; @@ -247,11 +252,17 @@ api.update = function(req, res, next) { // TODO remove from api object? api.attachGroup = function(req, res, next) { + var user = res.locals.user; var gid = req.params.gid; var q = (gid == 'party') ? Group.findOne({type: 'party', members: {'$in': [res.locals.user._id]}}) : Group.findById(gid); q.exec(function(err, group){ if(err) return next(err); - if(!group) return res.json(404, {err: "Group not found"}); + if(!group) return res.json(404, {err: shared.i18n.t('messageGroupNotFound')}); + + if (!user.contributor.admin) { + _purgeFlagInfoFromChat(group, user); + } + res.locals.group = group; next(); }); @@ -270,7 +281,8 @@ api.getChat = function(req, res, next) { populateQuery(gid, q); q.exec(function(err, group){ if (err) return next(err); - if (!group && gid!=='party') return res.json(404,{err: "Group not found or you don't have access."}); + if (!group && gid!=='party') return res.json(404,{err: shared.i18n.t('messageGroupNotFound')}); + res.json(res.locals.group.chat); gid = null; }); @@ -281,7 +293,7 @@ api.getChat = function(req, res, next) { */ api.postChat = function(req, res, next) { if(!req.query.message) { - return res.json(400,{err:'You cannot send a blank message'}); + return res.json(400,{err: shared.i18n.t('messageGroupChatBlankMessage')}); } else { var user = res.locals.user var group = res.locals.group; @@ -329,15 +341,15 @@ api.flagChatMessage = function(req, res, next){ var group = res.locals.group; var message = _.find(group.chat, {id: req.params.mid}); - if(!message) return res.json(404, {err: "Message not found!"}); - if(message.uuid == user._id) return res.json(401, {err: "Can't report your own message."}); + if(!message) return res.json(404, {err: shared.i18n.t('messageGroupChatNotFound')}); + if(message.uuid == user._id) return res.json(401, {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.json(401, {err: "You have already reported this message"}); + if(message.flags[user._id] && !user.contributor.admin) return res.json(401, {err: shared.i18n.t('messageGroupChatFlagAlreadyReported')}); message.flags[user._id] = true; // Log total number of flags (publicly viewable) @@ -349,44 +361,45 @@ api.flagChatMessage = function(req, res, next){ message.flagCount++ } - group.markModified('chat'); - group.save(function(err,_saved){ - if(err) return next(err); - var addressesToSendTo = nconf.get('FLAG_REPORT_EMAIL'); - addressesToSendTo = (typeof addressesToSendTo == 'string') ? JSON.parse(addressesToSendTo) : addressesToSendTo; + 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); + var addressesToSendTo = nconf.get('FLAG_REPORT_EMAIL'); + addressesToSendTo = (typeof addressesToSendTo == 'string') ? JSON.parse(addressesToSendTo) : addressesToSendTo; - if(Array.isArray(addressesToSendTo)){ - addressesToSendTo = addressesToSendTo.map(function(email){ - return {email: email, canSend: true} - }); - }else{ - addressesToSendTo = {email: addressesToSendTo} - } + if(Array.isArray(addressesToSendTo)){ + addressesToSendTo = addressesToSendTo.map(function(email){ + return {email: email, canSend: true} + }); + }else{ + addressesToSendTo = {email: addressesToSendTo} + } - utils.txnEmail(addressesToSendTo, 'flag-report-to-mods', [ - {name: "MESSAGE_TIME", content: (new Date(message.timestamp)).toString()}, - {name: "MESSAGE_TEXT", content: message.text}, + utils.txnEmail(addressesToSendTo, '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: "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: "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 == 'habitrpg' ? '/#/options/groups/tavern' : (group.type === 'guild' ? ('/#/options/groups/guilds/' + group._id) : 'party')}, - ]); + {name: "GROUP_NAME", content: group.name}, + {name: "GROUP_TYPE", content: group.type}, + {name: "GROUP_ID", content: group._id}, + {name: "GROUP_URL", content: group._id == 'habitrpg' ? '/#/options/groups/tavern' : (group.type === 'guild' ? ('/#/options/groups/guilds/' + group._id) : 'party')}, + ]); return res.send(204); }); }); - } api.clearFlagCount = function(req, res, next){ @@ -394,20 +407,20 @@ api.clearFlagCount = function(req, res, next){ var group = res.locals.group; var message = _.find(group.chat, {id: req.params.mid}); - if(!message) return res.json(404, {err: "Message not found!"}); + if(!message) return res.json(404, {err: shared.i18n.t('messageGroupChatNotFound')}); if(user.contributor.admin){ message.flagCount = 0; - group.markModified('chat'); - group.save(function(err,_saved){ + Group.update({_id: group._id, 'chat.id': message.id}, {'$set': { + 'chat.$.flagCount': message.flagCount, + }}, function(err) { if(err) return next(err); return res.send(204); }); - }else{ - return res.json(401, {err: "Only an admin can clear the flag count!"}) + } else { + return res.json(401, {err: shared.i18n.t('messageGroupChatAdminClearFlagCount')}) } - } api.seenMessage = function(req,res,next){ @@ -425,22 +438,22 @@ 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.json(404, {err: "Message not found!"}); - if (message.uuid == user._id) return res.json(401, {err: "Can't like your own message. Don't be that person."}); + + if (!message) return res.json(404, {err: shared.i18n.t('messageGroupChatNotFound')}); + if (message.uuid == user._id) return res.json(401, {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.markModified('chat'); - group.save(function(err,_saved){ + + Group.update({_id: group._id, 'chat.id': message.id}, {'$set': { + 'chat.$.likes': message.likes + }}, function(err) { if (err) return next(err); - // @TODO: We're sending back the entire array of chats back - // Should we just send back the object of the single chat message? - // If not, should we update the group chat when a chat is liked? - return res.send(_saved.chat); - }) + return res.send(group.chat); + }); } api.join = function(req, res, next) { @@ -470,7 +483,7 @@ api.join = function(req, res, next) { } } - if(!isUserInvited) return res.json(401, {err: "Can't join a group you're not invited to."}); + if(!isUserInvited) return res.json(401, {err: shared.i18n.t('messageGroupRequiresInvite')}); if (!_.contains(group.members, user._id)){ if (group.members.length === 0) { @@ -511,7 +524,7 @@ api.leave = function(req, res, next) { } 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'); + return res.json(403, 'You cannot leave party during an active quest. Please leave the quest first.'); } } @@ -521,6 +534,7 @@ api.leave = function(req, res, next) { group.leave(user, keep, function(err){ if (err) return next(err); user = group = keep = null; + return res.send(204); }); }; @@ -670,7 +684,7 @@ var inviteByEmails = function(invites, group, req, res, next){ // Send only status code down the line because it doesn't need // info on invited users since they are not yet registered - res.send(200); + res.json(200, {}); } }); }; @@ -683,7 +697,7 @@ api.invite = function(req, res, next){ } else if (req.body.emails) { inviteByEmails(req.body.emails, group, req, res, next) } else { - return res.json(400,{err: "Can invite only by email or uuid"}); + return res.json(400, {err: "Can only invite by email or uuid"}); } } @@ -912,7 +926,8 @@ api.questAccept = function(req, res, next) { owner: true, response: 'accept', gaLabel: 'accept', - questName: key + questName: key, + uuid: user._id, }; analytics.track('quest',analyticsData); group.quest.members[m] = true; @@ -958,7 +973,8 @@ api.questAccept = function(req, res, next) { owner: false, response: 'accept', gaLabel: 'accept', - questName: group.quest.key + questName: group.quest.key, + uuid: user._id, }; analytics.track('quest',analyticsData); group.quest.members[user._id] = true; @@ -977,7 +993,8 @@ api.questReject = function(req, res, next) { owner: false, response: 'reject', gaLabel: 'reject', - questName: group.quest.key + questName: group.quest.key, + uuid: user._id, }; analytics.track('quest',analyticsData); group.quest.members[user._id] = false; @@ -1083,3 +1100,15 @@ api.questLeave = function(req, res, next) { 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/src/controllers/hall.js b/website/src/controllers/api-v2/hall.js similarity index 95% rename from website/src/controllers/hall.js rename to website/src/controllers/api-v2/hall.js index 8754bc2e94..f3a3ead240 100644 --- a/website/src/controllers/hall.js +++ b/website/src/controllers/api-v2/hall.js @@ -1,9 +1,9 @@ var _ = require('lodash'); var nconf = require('nconf'); var async = require('async'); -var shared = require('../../../common'); -var User = require('./../models/user').model; -var Group = require('./../models/group').model; +var shared = require('../../../../common'); +var User = require('./../../models/user').model; +var Group = require('./../../models/group').model; var api = module.exports; api.ensureAdmin = function(req, res, next) { diff --git a/website/src/controllers/members.js b/website/src/controllers/api-v2/members.js similarity index 95% rename from website/src/controllers/members.js rename to website/src/controllers/api-v2/members.js index c7fe341d3d..c528b92cd7 100644 --- a/website/src/controllers/members.js +++ b/website/src/controllers/api-v2/members.js @@ -1,13 +1,13 @@ var User = require('mongoose').model('User'); -var groups = require('../models/group'); +var groups = require('../../models/group'); var partyFields = require('./groups').partyFields var api = module.exports; var async = require('async'); var _ = require('lodash'); -var shared = require('../../../common'); -var utils = require('../utils'); +var shared = require('../../../../common'); +var utils = require('../../libs/utils'); var nconf = require('nconf'); -var pushNotify = require('./pushNotifications'); +var pushNotify = require('./../pushNotifications'); var fetchMember = function(uuid, restrict){ return function(cb){ diff --git a/website/src/controllers/unsubscription.js b/website/src/controllers/api-v2/unsubscription.js similarity index 75% rename from website/src/controllers/unsubscription.js rename to website/src/controllers/api-v2/unsubscription.js index d0ef89f920..f768236ee5 100644 --- a/website/src/controllers/unsubscription.js +++ b/website/src/controllers/api-v2/unsubscription.js @@ -1,7 +1,7 @@ -var User = require('../models/user').model; -var EmailUnsubscription = require('../models/emailUnsubscription').model; -var utils = require('../utils'); -var i18n = require('../../../common').i18n; +var User = require('../../models/user').model; +var EmailUnsubscription = require('../../models/emailUnsubscription').model; +var utils = require('../../libs/utils'); +var i18n = require('../../../../common').i18n; var api = module.exports = {}; @@ -13,9 +13,9 @@ api.unsubscribe = function(req, res, next){ if(data._id){ User.update({_id: data._id}, { $set: {'preferences.emailNotifications.unsubscribeFromAll': true} - }, {multi: false}, function(err, nAffected){ + }, {multi: false}, function(err, updateRes){ if(err) return next(err); - if(nAffected !== 1) return res.json(404, {err: 'User not found'}); + if(updateRes !== 1) return res.json(404, {err: 'User not found'}); res.send('

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

' + i18n.t('unsubscribedTextUsers', null, req.language)); }); diff --git a/website/src/controllers/user.js b/website/src/controllers/api-v2/user.js similarity index 90% rename from website/src/controllers/user.js rename to website/src/controllers/api-v2/user.js index b77d10df7f..5e40f8162f 100644 --- a/website/src/controllers/user.js +++ b/website/src/controllers/api-v2/user.js @@ -1,23 +1,21 @@ -/* @see ./routes.coffee for routing*/ - var url = require('url'); var ipn = require('paypal-ipn'); var _ = require('lodash'); var nconf = require('nconf'); var async = require('async'); -var shared = require('../../../common'); -var User = require('./../models/user').model; -var utils = require('./../utils'); +var shared = require('../../../../common'); +var User = require('./../../models/user').model; +var utils = require('./../../libs/utils'); var analytics = utils.analytics; -var Group = require('./../models/group').model; -var Challenge = require('./../models/challenge').model; +var Group = require('./../../models/group').model; +var Challenge = require('./../../models/challenge').model; var moment = require('moment'); -var logging = require('./../logging'); +var logging = require('./../../libs/logging'); var acceptablePUTPaths; var api = module.exports; var qs = require('qs'); -var firebase = require('../libs/firebase'); -var webhook = require('../webhook'); +var firebase = require('../../libs/firebase'); +var webhook = require('../../libs/webhook'); // api.purchase // Shared.ops @@ -66,10 +64,6 @@ var findTask = function(req, res) { --------------- */ -/** - This is called form deprecated.coffee's score function, and the req.headers are setup properly to handle the login - Export it also so we can call it from deprecated.coffee -*/ api.score = function(req, res, next) { var id = req.params.id, direction = req.params.direction, @@ -164,7 +158,7 @@ api.getTasks = function(req, res, next) { */ api.getTask = function(req, res, next) { var task = findTask(req,res); - if (!task) return res.json(404, {err: "No task found."}); + if (!task) return res.json(404, {err: shared.i18n.t('messageTaskNotFound')}); return res.json(200, task); }; @@ -290,7 +284,7 @@ api.getUserAnonymized = function(req, res, next) { * The trick here is to only accept leaf paths, not root/intermediate paths (see http://goo.gl/OEzkAs) * FIXME - 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, function(m,v,leaf){ +acceptablePUTPaths = _.reduce(require('./../../models/user').schema.paths, function(m,v,leaf){ var found= _.find('achievements filters flags invitations lastCron party preferences profile stats inbox'.split(' '), function(root){ return leaf.indexOf(root) == 0; }); @@ -298,10 +292,9 @@ acceptablePUTPaths = _.reduce(require('./../models/user').schema.paths, function return m; }, {}) -//// Uncomment this if we we want to disable GP-restoring (eg, holiday events) -//_.each('stats.gp'.split(' '), function(removePath){ -// delete acceptablePUTPaths[removePath]; -//}) +_.each('stats.class'.split(' '), function(removePath){ + delete acceptablePUTPaths[removePath]; +}) /** * Update user @@ -318,7 +311,7 @@ api.update = function(req, res, next) { if (acceptablePUTPaths[k]) user.fns.dotSet(k, v); else - errors.push("path `" + k + "` was not saved, as it's a protected path. See https://github.com/HabitRPG/habitrpg/blob/develop/API.md for PUT /api/v2/user."); + errors.push(shared.i18n.t('messageUserOperationProtected', { operation: k })); return true; }); user.save(function(err) { @@ -365,7 +358,7 @@ api.cron = function(req, res, next) { // api.reroll // Shared.ops // api.reset // Shared.ops -api['delete'] = function(req, res, next) { +api.delete = function(req, res, next) { var user = res.locals.user; var plan = user.purchased.plan; @@ -397,38 +390,32 @@ api['delete'] = function(req, res, next) { /* ------------------------------------------------------------------------ - Gems + Development Only Operations ------------------------------------------------------------------------ */ +if (nconf.get('NODE_ENV') === 'development') { -// api.unlock // see Shared.ops + api.addTenGems = function(req, res, next) { + var user = res.locals.user; -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.send(204); - }) -} + user.balance += 2.5; -/* - ------------------------------------------------------------------------ - Hourglass - ------------------------------------------------------------------------ - */ + user.save(function(err){ + if (err) return next(err); + res.send(204); + }); + }; -// api.unlock // see Shared.ops + api.addHourglass = function(req, res, next) { + var user = res.locals.user; -api.addHourglass = function(req, res, next) { - var user = res.locals.user; + user.purchased.plan.consecutive.trinkets += 1; - user.purchased.plan.consecutive.trinkets += 1; - - user.save(function(err){ - if (err) return next(err); - res.send(204); - }) + user.save(function(err){ + if (err) return next(err); + res.send(204); + }); + }; } /* @@ -553,7 +540,7 @@ api.sessionPartyInvite = function(req,res,next){ } /** - * All other user.ops which can easily be mapped to habitrpg-shared/index.coffee, not requiring custom API-wrapping + * All other user.ops which can easily be mapped to common/script/index.js, not requiring custom API-wrapping */ _.each(shared.wrap({}).ops, function(op,k){ if (!api[k]) { @@ -607,6 +594,7 @@ api.batchUpdate = function(req, res, next) { 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); }); }) diff --git a/website/src/controllers/payments/iap.js b/website/src/controllers/payments/iap.js index 6065673287..829482ed67 100644 --- a/website/src/controllers/payments/iap.js +++ b/website/src/controllers/payments/iap.js @@ -61,7 +61,7 @@ exports.androidVerify = function(req, res, next) { data: googleRes }; - payments.buyGems({user:user, paymentMethod:'IAP GooglePlay'}); + payments.buyGems({user:user, paymentMethod:'IAP GooglePlay', amount: 5.25}); return res.json(resObj); } @@ -101,9 +101,27 @@ exports.iosVerify = function(req, res, next) { if (iap.isValidated(appleRes)) { var purchaseDataList = iap.getPurchaseData(appleRes); if (purchaseDataList.length > 0) { - if (purchaseDataList[0].productId === 'com.habitrpg.ios.Habitica.20gems') { - //Correct receipt - payments.buyGems({user:user, paymentMethod:'IAP AppleStore'}); + var correctReceipt = true; + for (var index in purchaseDataList) { + switch (purchaseDataList[index].productId) { + case 'com.habitrpg.ios.Habitica.4gems': + payments.buyGems({user:user, paymentMethod:'IAP AppleStore', amount: 1}); + break; + case 'com.habitrpg.ios.Habitica.8gems': + payments.buyGems({user:user, paymentMethod:'IAP AppleStore', amount: 2}); + break; + case 'com.habitrpg.ios.Habitica.20gems': + case 'com.habitrpg.ios.Habitica.21gems': + payments.buyGems({user:user, paymentMethod:'IAP AppleStore', amount: 5.25}); + break; + case 'com.habitrpg.ios.Habitica.42gems': + payments.buyGems({user:user, paymentMethod:'IAP AppleStore', amount: 10.5}); + break; + default: + correctReceipt = false; + } + } + if (correctReceipt) { var resObj = { ok: true, data: appleRes diff --git a/website/src/controllers/payments/index.js b/website/src/controllers/payments/index.js index b1b444006f..465fb31d01 100644 --- a/website/src/controllers/payments/index.js +++ b/website/src/controllers/payments/index.js @@ -1,14 +1,13 @@ -/* @see ./routes.coffee for routing*/ var _ = require('lodash'); var shared = require('../../../../common'); var nconf = require('nconf'); -var utils = require('./../../utils'); +var utils = require('./../../libs/utils'); var moment = require('moment'); var isProduction = nconf.get("NODE_ENV") === "production"; var stripe = require('./stripe'); var paypal = require('./paypal'); var amazon = require('./amazon'); -var members = require('../members') +var members = require('../api-v2/members') var async = require('async'); var iap = require('./iap'); var mongoose= require('mongoose'); @@ -137,7 +136,8 @@ exports.cancelSubscription = function(data, cb) { } exports.buyGems = function(data, cb) { - var amt = data.gift ? data.gift.gems.amount/4 : 5; + var amt = data.amount || 5; + amt = data.gift ? data.gift.gems.amount/4 : amt; (data.gift ? data.gift.member : data.user).balance += amt; data.user.purchased.txnCount++; if(isProduction) { diff --git a/website/src/controllers/payments/paypal.js b/website/src/controllers/payments/paypal.js index 094171e3af..30970f72cf 100644 --- a/website/src/controllers/payments/paypal.js +++ b/website/src/controllers/payments/paypal.js @@ -5,7 +5,7 @@ var _ = require('lodash'); var url = require('url'); var User = require('mongoose').model('User'); var payments = require('./index'); -var logger = require('../../logging'); +var logger = require('../../libs/logging'); var ipn = require('paypal-ipn'); var paypal = require('paypal-rest-sdk'); var shared = require('../../../../common'); diff --git a/website/src/controllers/payments/paypalBillingSetup.js b/website/src/controllers/payments/paypalBillingSetup.js index ce238338f1..8130de99cc 100644 --- a/website/src/controllers/payments/paypalBillingSetup.js +++ b/website/src/controllers/payments/paypalBillingSetup.js @@ -2,7 +2,6 @@ // payment plan definitions, instead you have to create it via their REST SDK and keep it updated the same way. So this // file will be used once for initing your billing plan (then you get the resultant plan.id to store in config.json), // and once for any time you need to edit the plan thereafter -require('coffee-script'); var path = require('path'); var nconf = require('nconf'); _ = require('lodash'); @@ -90,4 +89,4 @@ switch(OP) { }); break; case "remove": break; -} \ No newline at end of file +} diff --git a/website/src/controllers/pushNotifications.js b/website/src/controllers/pushNotifications.js index d0d98b5218..d1c728f365 100644 --- a/website/src/controllers/pushNotifications.js +++ b/website/src/controllers/pushNotifications.js @@ -13,14 +13,14 @@ var gcm = gcmApiKey ? pushNotify.gcm({ if(gcm){ gcm.on('transmitted', function (result, message, registrationId) { - console.info("transmitted", result, message, registrationId); + //console.info("transmitted", result, message, registrationId); }); gcm.on('transmissionError', function (error, message, registrationId) { - console.info("transmissionError", error, message, registrationId); + //console.info("transmissionError", error, message, registrationId); }); gcm.on('updated', function (result, registrationId) { - console.info("updated", result, registrationId); + //console.info("updated", result, registrationId); }); } diff --git a/website/src/analytics.js b/website/src/libs/analytics.js similarity index 93% rename from website/src/analytics.js rename to website/src/libs/analytics.js index c4e8d6fec2..442c4b9b5c 100644 --- a/website/src/analytics.js +++ b/website/src/libs/analytics.js @@ -1,8 +1,7 @@ -require('coffee-script'); require('./i18n'); var _ = require('lodash'); -var Content = require('../../common').content; +var Content = require('../../../common').content; var Amplitude = require('amplitude'); var googleAnalytics = require('universal-analytics'); @@ -31,7 +30,9 @@ function track(eventType, data) { function _sendDataToAmplitude(eventType, data) { var amplitudeData = _formatDataForAmplitude(data); amplitudeData.event_type = eventType; - amplitude.track(amplitudeData); + amplitude.track(amplitudeData).catch(function(error) { + // @TODO log error with new relic + }); } function _sendDataToGoogle(eventType, data) { @@ -87,7 +88,9 @@ function _sendPurchaseDataToAmplitude(data) { amplitudeData.event_type = 'purchase'; amplitudeData.revenue = data.purchaseValue; - amplitude.track(amplitudeData) + amplitude.track(amplitudeData).catch(function(error) { + // @TODO log error with new relic + }); } function _formatDataForAmplitude(data) { @@ -95,7 +98,7 @@ function _formatDataForAmplitude(data) { var event_properties = _.omit(data, PROPERTIES_TO_SCRUB); var ampData = { - user_id: data.uuid, + user_id: data.uuid || 'no-user-id-was-provided', platform: 'server', event_properties: event_properties } diff --git a/website/src/i18n.js b/website/src/libs/i18n.js similarity index 82% rename from website/src/i18n.js rename to website/src/libs/i18n.js index 2f0f14eeb6..3edf901279 100644 --- a/website/src/i18n.js +++ b/website/src/libs/i18n.js @@ -1,11 +1,11 @@ var fs = require('fs'), path = require('path'), _ = require('lodash'), - User = require('./models/user').model, - shared = require('../../common'), + User = require('../models/user').model, + shared = require('../../../common'), translations = {}; -var localePath = path.join(__dirname, "/../../common/locales/") +var localePath = path.join(__dirname, "/../../../common/locales/") var loadTranslations = function(locale){ var files = fs.readdirSync(path.join(localePath, locale)); @@ -54,23 +54,43 @@ _.each(langCodes, function(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'); + 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 +// 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-mx', 'es-gt', 'es-cr', 'es-pa', 'es-do', 'es-ve', 'es-co', 'es-pe', - 'es-ar', 'es-ec', 'es-cl', 'es-uy', 'es-py', 'es-bo', 'es-sv', 'es-hn', - 'es-ni', 'es-pr']; +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']; +var chineseVersions = { + 'zh-tw': 'zh_TW', +}; var getUserLanguage = function(req, res, next){ var getFromBrowser = function(){ @@ -94,10 +114,9 @@ var getUserLanguage = function(req, res, next){ } if(matches[0] === 'es'){ - return (latinAmericanSpanishes.indexOf(acceptedCompleteLang) !== -1) ? 'es_419' : 'es'; + return latinAmericanSpanishes[acceptedCompleteLang] || 'es'; }else if(matches[0] === 'zh'){ - var iChinese = chineseVersions.indexOf(acceptedCompleteLang.toLowerCase()); - return (iChinese !== -1) ? chineseVersions[iChinese] : 'zh'; + return chineseVersions[acceptedCompleteLang] || 'zh'; }else{ return en; } diff --git a/website/src/logging.js b/website/src/libs/logging.js similarity index 100% rename from website/src/logging.js rename to website/src/libs/logging.js diff --git a/website/src/utils.js b/website/src/libs/utils.js similarity index 91% rename from website/src/utils.js rename to website/src/libs/utils.js index 5d1e4ac2ba..1b1231e102 100644 --- a/website/src/utils.js +++ b/website/src/libs/utils.js @@ -159,6 +159,10 @@ module.exports.makeSalt = function() { 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 */ @@ -166,12 +170,12 @@ module.exports.setupConfig = function(){ nconf.argv() .env() //.file('defaults', path.join(path.resolve(__dirname, '../config.json.example'))) - .file('user', path.join(path.resolve(__dirname, './../../config.json'))); + .file('user', path.join(path.resolve(__dirname, './../../../config.json'))); if (nconf.get('NODE_ENV') === "development") Error.stackTraceLimit = Infinity; //if (nconf.get('NODE_ENV') === 'production') - // require('newrelic'); + //require('newrelic'); isProd = nconf.get('NODE_ENV') === 'production'; baseUrl = nconf.get('BASE_URL'); @@ -182,9 +186,13 @@ module.exports.setupConfig = function(){ googleAnalytics: nconf.get('GA_ID') } - module.exports.analytics = analytics - ? analytics(analyticsTokens) - : { track: function() { }, trackPurchase: function() { } }; + 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'; diff --git a/website/src/webhook.js b/website/src/libs/webhook.js similarity index 100% rename from website/src/webhook.js rename to website/src/libs/webhook.js diff --git a/website/src/middlewares/domain.js b/website/src/middlewares/domain.js index ef35bfac5e..b7c386b16a 100644 --- a/website/src/middlewares/domain.js +++ b/website/src/middlewares/domain.js @@ -12,8 +12,9 @@ module.exports = function(server,mongoose) { 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(){ + // TODO, DISABLED UNTIL NEW RELIC IS ADDED AGAIN // 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({ + /*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){ @@ -22,8 +23,15 @@ module.exports = function(server,mongoose) { apdexBad = score < .75 || score == 1, memory = os.freemem() / os.totalmem(), memoryHigh = memory < 0.1; - if (/*apdexBad || */memoryHigh) throw '[Memory Leak] Apdex='+score+' Memory='+parseFloat(memory).toFixed(3)+' Time='+moment().format(); - }); + if (apdexBad || memoryHigh) throw '[Memory Leak] Apdex='+score+' Memory='+parseFloat(memory).toFixed(3)+' Time='+moment().format(); + + });*/ + 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); } diff --git a/website/src/middlewares/errorHandler.js b/website/src/middlewares/errorHandler.js index eebf25ac6b..9a82316a75 100644 --- a/website/src/middlewares/errorHandler.js +++ b/website/src/middlewares/errorHandler.js @@ -1,4 +1,4 @@ -var logging = require('../logging'); +var logging = require('../libs/logging'); module.exports = function(err, req, res, next) { //res.locals.domain.emit('error', err); diff --git a/website/src/middlewares/locals.js b/website/src/middlewares/locals.js index e9dbb31260..2f238a6a99 100644 --- a/website/src/middlewares/locals.js +++ b/website/src/middlewares/locals.js @@ -1,8 +1,8 @@ var nconf = require('nconf'); var _ = require('lodash'); -var utils = require('../utils'); +var utils = require('../libs/utils'); var shared = require('../../../common'); -var i18n = require('../i18n.js'); +var i18n = require('../libs/i18n'); var buildManifest = require('../libs/buildManifest'); var shared = require('../../../common'); var forceRefresh = require('./forceRefresh'); diff --git a/website/src/models/group.js b/website/src/models/group.js index 9ec1f28a21..7ba8dac173 100644 --- a/website/src/models/group.js +++ b/website/src/models/group.js @@ -4,7 +4,7 @@ var User = require('./user').model; var shared = require('../../../common'); var _ = require('lodash'); var async = require('async'); -var logging = require('../logging'); +var logging = require('../libs/logging'); var Challenge = require('./../models/challenge').model; var firebase = require('../libs/firebase'); @@ -475,11 +475,6 @@ GroupSchema.methods.leave = function(user, keep, mainCb){ GroupSchema.methods.toJSON = function() { var doc = this.toObject(); - if(doc.chat){ - doc.chat.forEach(function(msg){ - msg.flags = {}; - }); - } return doc; }; diff --git a/website/src/models/user.js b/website/src/models/user.js index c883caacc1..cca59d7719 100644 --- a/website/src/models/user.js +++ b/website/src/models/user.js @@ -53,11 +53,12 @@ var UserSchema = new Schema({ perfect: Number, habitBirthdays: Number, valentine: Number, - costumeContest: Boolean, + costumeContest: Boolean, // Superseded by costumeContests nye: Number, habiticaDays: Number, greeting: Number, - thankyou: Number + thankyou: Number, + costumeContests: Number }, auth: { blocked: Boolean, @@ -66,7 +67,8 @@ var UserSchema = new Schema({ email: String, hashed_password: String, salt: String, - username: String + username: String, + lowerCaseUsername: String // Store a lowercase version of username to check for duplicates }, timestamps: { created: {type: Date,'default': Date.now}, @@ -138,6 +140,30 @@ var UserSchema = new Schema({ hall: {type: Number, 'default': -1}, equipment: {type: Number, 'default': -1} }, + tutorial: { + common: { + habits: {type: Boolean, 'default': false}, + dailies: {type: Boolean, 'default': false}, + todos: {type: Boolean, 'default': false}, + rewards: {type: Boolean, 'default': false}, + party: {type: Boolean, 'default': false}, + pets: {type: Boolean, 'default': false}, + gems: {type: Boolean, 'default': false}, + skills: {type: Boolean, 'default': false}, + classes: {type: Boolean, 'default': false}, + tavern: {type: Boolean, 'default': false}, + equipment: {type: Boolean, 'default': false}, + items: {type: Boolean, 'default': false}, + }, + ios: { + addTask: {type: Boolean, 'default': false}, + editTask: {type: Boolean, 'default': false}, + deleteTask: {type: Boolean, 'default': false}, + filterTask: {type: Boolean, 'default': false}, + groupPets: {type: Boolean, 'default': false}, + inviteParty: {type: Boolean, 'default': false}, + } + }, dropsEnabled: {type: Boolean, 'default': false}, itemsEnabled: {type: Boolean, 'default': false}, newStuff: {type: Boolean, 'default': false}, @@ -171,7 +197,6 @@ var UserSchema = new Schema({ todos: Array //[{data: Date, value: Number}] // big peformance issues if these are defined }, - // FIXME remove? invitations: { guilds: {type: Array, 'default': []}, party: Schema.Types.Mixed @@ -324,6 +349,7 @@ var UserSchema = new Schema({ language: String, automaticAllocation: Boolean, allocationMode: {type:String, enum: ['flat','classbased','taskbased'], 'default': 'flat'}, + autoEquip: {type: Boolean, 'default': true}, costume: Boolean, dateFormat: {type: String, enum:['MM/dd/yyyy', 'dd/MM/yyyy', 'yyyy/MM/dd'], 'default': 'MM/dd/yyyy'}, sleep: {type: Boolean, 'default': false}, @@ -354,6 +380,12 @@ var UserSchema = new Schema({ // Those importantAnnouncements are in fact the recapture emails importantAnnouncements: {type: Boolean, 'default': true}, weeklyRecaps: {type: Boolean, 'default': true} + }, + suppressModals: { + levelUp: {type: Boolean, 'default': false}, + hatchPet: {type: Boolean, 'default': false}, + raisePet: {type: Boolean, 'default': false}, + streak: {type: Boolean, 'default': false} } }, profile: { @@ -457,34 +489,7 @@ UserSchema.pre('save', function(next) { // Populate new users with default content if (this.isNew){ - //TODO for some reason this doesn't work here: `_.merge(this, shared.content.userDefaults);` - var self = this; - _.each(['habits', 'dailys', 'todos', 'rewards', 'tags'], function(taskType){ - self[taskType] = _.map(shared.content.userDefaults[taskType], function(task){ - var newTask = _.cloneDeep(task); - - // Render task's text and notes in user's language - if(taskType === 'tags'){ - // tasks automatically get id=helpers.uuid() from TaskSchema id.default, but tags are Schema.Types.Mixed - so we need to manually invoke here - newTask.id = shared.uuid(); - newTask.name = newTask.name(self.preferences.language); - }else{ - newTask.text = newTask.text(self.preferences.language); - if(newTask.notes) { - newTask.notes = newTask.notes(self.preferences.language); - } - - if(newTask.checklist){ - newTask.checklist = _.map(newTask.checklist, function(checklistItem){ - checklistItem.text = checklistItem.text(self.preferences.language); - return checklistItem; - }); - } - } - - return newTask; - }); - }); + _populateDefaultsForNewUser(this); } //this.markModified('tasks'); @@ -577,9 +582,92 @@ UserSchema.methods.unlink = function(options, cb) { self.save(cb); } +function _populateDefaultsForNewUser(user) { + var taskTypes; + + if (user.registeredThrough === "habitica-web" || user.registeredThrough === "habitica-android") { + taskTypes = ['habits', 'dailys', 'todos', 'rewards', 'tags']; + + var tutorialCommonSections = [ + 'habits', + 'dailies', + 'todos', + 'rewards', + 'party', + 'pets', + 'gems', + 'skills', + 'classes', + 'tavern', + 'equipment', + 'items', + 'inviteParty', + ]; + + _.each(tutorialCommonSections, function(section) { + user.flags.tutorial.common[section] = true; + }); + } else { + taskTypes = ['todos', 'tags'] + + user.flags.showTour = false; + + var tourSections = [ + 'showTour', + 'intro', + 'classes', + 'stats', + 'tavern', + 'party', + 'guilds', + 'challenges', + 'market', + 'pets', + 'mounts', + 'hall', + 'equipment', + ]; + + _.each(tourSections, function(section) { + user.flags.tour[section] = -2; + }); + } + + _populateDefaultTasks(user, taskTypes); +} + +function _populateDefaultTasks (user, taskTypes) { + _.each(taskTypes, function(taskType){ + user[taskType] = _.map(shared.content.userDefaults[taskType], function(task){ + var newTask = _.cloneDeep(task); + + // Render task's text and notes in user's language + if(taskType === 'tags'){ + // tasks automatically get id=helpers.uuid() from TaskSchema id.default, but tags are Schema.Types.Mixed - so we need to manually invoke here + newTask.id = shared.uuid(); + newTask.name = newTask.name(user.preferences.language); + }else{ + newTask.text = newTask.text(user.preferences.language); + if(newTask.notes) { + newTask.notes = newTask.notes(user.preferences.language); + } + + if(newTask.checklist){ + newTask.checklist = _.map(newTask.checklist, function(checklistItem){ + checklistItem.text = checklistItem.text(user.preferences.language); + return checklistItem; + }); + } + } + + return newTask; + }); + }); +} + module.exports.schema = UserSchema; module.exports.model = mongoose.model("User", UserSchema); -// Initially export an empty object so external requires will get +// Initially export an empty object so external requires will get // the right object by reference when it's defined later // Otherwise it would remain undefined if requested before the query executes module.exports.mods = []; diff --git a/website/src/routes/apiv1.js b/website/src/routes/api-v1.js similarity index 94% rename from website/src/routes/apiv1.js rename to website/src/routes/api-v1.js index 5a28ef8f3b..1002391cae 100644 --- a/website/src/routes/apiv1.js +++ b/website/src/routes/api-v1.js @@ -3,10 +3,10 @@ var router = new express.Router(); var _ = require('lodash'); var async = require('async'); var icalendar = require('icalendar'); -var api = require('./../controllers/user'); -var auth = require('./../controllers/auth'); -var logging = require('./../logging'); -var i18n = require('./../i18n'); +var api = require('./../controllers/api-v2/user'); +var auth = require('./../controllers/api-v2/auth'); +var logging = require('./../libs/logging'); +var i18n = require('./../libs/i18n'); var forceRefresh = require('../middlewares/forceRefresh').middleware; /* ---------- Deprecated API ------------*/ @@ -155,7 +155,7 @@ router.post('/user/tasks/:id/:direction', auth.auth, i18n.getUserLanguage, cron, // Tasks router.get('/user/tasks', auth.auth, i18n.getUserLanguage, cron, api.getTasks); router.get('/user/task/:id', auth.auth, i18n.getUserLanguage, cron, api.getTask); -router["delete"]('/user/task/:id', auth.auth, i18n.getUserLanguage, cron, api.deleteTask); +router.delete('/user/task/:id', auth.auth, i18n.getUserLanguage, cron, api.deleteTask); router.post('/user/task', auth.auth, i18n.getUserLanguage, cron, api.addTask); // User @@ -170,4 +170,4 @@ router.get('*', i18n.getUserLanguage, deprecated); router.post('*', i18n.getUserLanguage, deprecated); router.put('*', i18n.getUserLanguage, deprecated); -module.exports = router; +module.exports = router; \ No newline at end of file diff --git a/website/src/routes/auth.js b/website/src/routes/api-v2/auth.js similarity index 89% rename from website/src/routes/auth.js rename to website/src/routes/api-v2/auth.js index 7d53253210..39f2f6e069 100644 --- a/website/src/routes/auth.js +++ b/website/src/routes/api-v2/auth.js @@ -1,6 +1,6 @@ -var auth = require('../controllers/auth'); +var auth = require('../../controllers/api-v2/auth'); var express = require('express'); -var i18n = require('../i18n'); +var i18n = require('../../libs/i18n'); var router = new express.Router(); /* auth.auth*/ @@ -15,8 +15,7 @@ router.post('/api/v2/user/change-username', i18n.getUserLanguage, auth.auth, aut router.post('/api/v2/user/change-email', i18n.getUserLanguage, auth.auth, auth.changeEmail); router.post('/api/v2/user/auth/firebase', i18n.getUserLanguage, auth.auth, auth.getFirebaseToken); -router.post('/api/v1/register', i18n.getUserLanguage, auth.registerUser); -router.post('/api/v1/user/auth/local', i18n.getUserLanguage, auth.loginLocal); -router.post('/api/v1/user/auth/social', i18n.getUserLanguage, auth.loginSocial); - +router.post('/api/v1/register', i18n.getUserLanguage, auth.registerUser); +router.post('/api/v1/user/auth/local', i18n.getUserLanguage, auth.loginLocal); +router.post('/api/v1/user/auth/social', i18n.getUserLanguage, auth.loginSocial); module.exports = router; \ No newline at end of file diff --git a/website/src/routes/coupon.js b/website/src/routes/api-v2/coupon.js similarity index 75% rename from website/src/routes/coupon.js rename to website/src/routes/api-v2/coupon.js index 57a33866c6..811d81a6f2 100644 --- a/website/src/routes/coupon.js +++ b/website/src/routes/api-v2/coupon.js @@ -1,9 +1,9 @@ var nconf = require('nconf'); var express = require('express'); var router = new express.Router(); -var auth = require('../controllers/auth'); -var coupon = require('../controllers/coupon'); -var i18n = require('../i18n'); +var auth = require('../../controllers/api-v2/auth'); +var coupon = require('../../controllers/api-v2/coupon'); +var i18n = require('../../libs/i18n'); router.get('/api/v2/coupons', auth.authWithUrl, i18n.getUserLanguage, coupon.ensureAdmin, coupon.getCoupons); router.post('/api/v2/coupons/generate/:event', auth.auth, i18n.getUserLanguage, coupon.ensureAdmin, coupon.generateCoupons); diff --git a/website/src/routes/api-v2/swagger.js b/website/src/routes/api-v2/swagger.js new file mode 100644 index 0000000000..a1500ac39a --- /dev/null +++ b/website/src/routes/api-v2/swagger.js @@ -0,0 +1,775 @@ +/* +---------- /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/dataexport"); +var nconf = require("nconf"); +var cron = user.cron; +var _ = require('lodash'); +var content = require('../../../../common').content; +var i18n = require('../../libs/i18n'); +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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.getUserLanguage, groups.attachGroup], + action: groups.clearFlagCount + }, + "/members/{uuid}:GET": { + spec: { + path: '/members/{uuid}', + description: "Get a member.", + parameters: [path('uuid', 'Member ID', 'string')] + }, + middleware: [i18n.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, i18n.getUserLanguage], + action: hall.getHeroes + }, + "/hall/heroes/{uid}:GET": { + spec: { + path: "/hall/heroes/{uid}" + }, + middleware: [auth.auth, i18n.getUserLanguage, hall.ensureAdmin], + action: hall.getHero + }, + "/hall/heroes/{uid}:POST": { + spec: { + method: 'POST', + path: "/hall/heroes/{uid}" + }, + middleware: [auth.auth, i18n.getUserLanguage, hall.ensureAdmin], + action: hall.updateHero + }, + "/hall/patrons": { + spec: { + parameters: [query('page', 'Page number to fetch (this list is long)', 'string')] + }, + middleware: [auth.auth, i18n.getUserLanguage], + action: hall.getPatrons + }, + "/challenges:GET": { + spec: { + path: '/challenges', + description: "Get a list of challenges" + }, + middleware: [auth.auth, i18n.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, i18n.getUserLanguage], + action: challenges.create + }, + "/challenges/{cid}:GET": { + spec: { + path: '/challenges/{cid}', + description: 'Get a challenge', + parameters: [path('cid', 'Challenge id', 'string')] + }, + middleware: [auth.auth, i18n.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, i18n.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, i18n.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, i18n.getUserLanguage], + action: challenges.selectWinner + }, + "/challenges/{cid}/join": { + spec: { + method: 'POST', + description: "Join a challenge", + parameters: [path('cid', 'Challenge id', 'string')] + }, + middleware: [auth.auth, i18n.getUserLanguage], + action: challenges.join + }, + "/challenges/{cid}/leave": { + spec: { + method: 'POST', + description: 'Leave a challenge', + parameters: [path('cid', 'Challenge id', 'string')] + }, + middleware: [auth.auth, i18n.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, i18n.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, i18n.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/src/routes/unsubscription.js b/website/src/routes/api-v2/unsubscription.js similarity index 60% rename from website/src/routes/unsubscription.js rename to website/src/routes/api-v2/unsubscription.js index efd06f9197..942a396eef 100644 --- a/website/src/routes/unsubscription.js +++ b/website/src/routes/api-v2/unsubscription.js @@ -1,7 +1,7 @@ var express = require('express'); var router = new express.Router(); -var i18n = require('../i18n'); -var unsubscription = require('../controllers/unsubscription'); +var i18n = require('../../libs/i18n'); +var unsubscription = require('../../controllers/api-v2/unsubscription'); router.get('/unsubscribe', i18n.getUserLanguage, unsubscription.unsubscribe); diff --git a/website/src/routes/apiv2.coffee b/website/src/routes/apiv2.coffee deleted file mode 100644 index 5a6aba7a49..0000000000 --- a/website/src/routes/apiv2.coffee +++ /dev/null @@ -1,835 +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.coffee#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: -$ mocha test/user.mocha.coffee -### - -user = require("../controllers/user") -groups = require("../controllers/groups") -members = require("../controllers/members") -auth = require("../controllers/auth") -hall = require("../controllers/hall") -challenges = require("../controllers/challenges") -dataexport = require("../controllers/dataexport") -nconf = require("nconf") -cron = user.cron -_ = require('lodash') -content = require('../../../common').content -i18n = require('../i18n') -forceRefresh = require('../middlewares/forceRefresh').middleware - -module.exports = (swagger, v2) -> - [path,body,query] = [swagger.pathParam, swagger.bodyParam, swagger.queryParam] - - swagger.setAppHandler(v2) - swagger.setErrorHandler("next") - swagger.setHeaders = -> #disable setHeaders, since we have our own thing going on in middleware.js (and which requires `req`, which swagger doesn't pass in) - swagger.configureSwaggerPaths("", "/api-docs", "") - - api = - - '/status': - spec: - description: "Returns the status of the server (up or down). Does not require authentication." - action: (req, res) -> - 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, i18n.getUserLanguage] - action: dataexport.history #[todo] encode data output options in the data controller and use these to build routes - - # --------------------------------- - # User - # --------------------------------- - - # Scoring - - "/user/tasks/{id}/{direction}": - spec: - #notes: "Simple scoring of a task." - 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 - - # Tasks - "/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, i18n.getUserLanguage] ## removing cron since they may want to remove task first - action: challenges.unlink - - - # Inventory - "/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: [ - #TODO verify these are the correct types - 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 - "/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, i18n.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.coffee)",'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, i18n.getUserLanguage, cron, user.sessionPartyInvite] - action: user.batchUpdate - - # Tags - "/user/tags": - spec: - method: 'POST' - description: 'Create a new tag' - parameters: [ - body '','New tag (see UserSchema.tags)','object' - ] - action: user.addTag - - "/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 - - # Webhooks - "/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 - - # Push Notifications - "/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 - # --------------------------------- - "/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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.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, i18n.getUserLanguage, groups.attachGroup] - action: groups.questLeave - - #TODO PUT /groups/:gid/chat/:messageId - - "/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, i18n.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, i18n.getUserLanguage, groups.attachGroup] - action: groups.postChat - - # placing before route below, so that if !=='seen' it goes to next() - "/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, i18n.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, i18n.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, i18n.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, i18n.getUserLanguage, groups.attachGroup] - action: groups.clearFlagCount - - # --------------------------------- - # Members - # --------------------------------- - "/members/{uuid}:GET": - spec: - path: '/members/{uuid}' - description: "Get a member." - parameters: [path('uuid','Member ID','string')] - middleware: [i18n.getUserLanguage] # removed auth.auth, so anon users can view shared avatars - 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 of Heroes / Patrons - # --------------------------------- - "/hall/heroes": - spec: {} - middleware:[auth.auth, i18n.getUserLanguage] - action: hall.getHeroes - - "/hall/heroes/{uid}:GET": - spec: path: "/hall/heroes/{uid}" - middleware:[auth.auth, i18n.getUserLanguage, hall.ensureAdmin] - action: hall.getHero - - "/hall/heroes/{uid}:POST": - spec: - method: 'POST' - path: "/hall/heroes/{uid}" - middleware: [auth.auth, i18n.getUserLanguage, hall.ensureAdmin] - action: hall.updateHero - - "/hall/patrons": - spec: - parameters: [ - query 'page','Page number to fetch (this list is long)','string' - ] - middleware:[auth.auth, i18n.getUserLanguage] - action: hall.getPatrons - - - # --------------------------------- - # Challenges - # --------------------------------- - - # Note: while challenges belong to groups, and would therefore make sense as a nested resource - # (eg /groups/:gid/challenges/:cid), they will also be referenced by users from the "challenges" tab - # without knowing which group they belong to. So to prevent unecessary lookups, we have them as a top-level resource - "/challenges:GET": - spec: - path: '/challenges' - description: "Get a list of challenges" - middleware: [auth.auth, i18n.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, i18n.getUserLanguage] - action: challenges.create - - "/challenges/{cid}:GET": - spec: - path: '/challenges/{cid}' - description: 'Get a challenge' - parameters: [path('cid','Challenge id','string')] - middleware: [auth.auth, i18n.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, i18n.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, i18n.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, i18n.getUserLanguage] - action: challenges.selectWinner - - "/challenges/{cid}/join": - spec: - method: 'POST' - description: "Join a challenge" - parameters: [path('cid','Challenge id','string')] - middleware: [auth.auth, i18n.getUserLanguage] - action: challenges.join - - "/challenges/{cid}/leave": - spec: - method: 'POST' - description: 'Leave a challenge' - parameters: [path('cid','Challenge id','string')] - middleware: [auth.auth, i18n.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, i18n.getUserLanguage] - action: challenges.getMember - - - if nconf.get("NODE_ENV") is "development" - api["/user/addTenGems"] = - spec: method:'POST' - action: user.addTenGems - - api["/user/addHourglass"] = - spec: method:'POST' - action: user.addHourglass - - _.each api, (route, path) -> - ## Spec format is: - # spec: - # path: "/pet/{petId}" - # description: "Operations about pets" - # notes: "Returns a pet based on ID" - # summary: "Find pet by ID" - # method: "GET" - # parameters: [path("petId", "ID of pet that needs to be fetched", "string")] - # type: "Pet" - # errorResponses: [swagger.errors.invalid("id"), swagger.errors.notFound("pet")] - # nickname: "getPetById" - - route.spec.description ?= '' - _.defaults route.spec, - path: path - nickname: path - notes: route.spec.description - summary: route.spec.description - parameters: [] - #type: 'Pet' - errorResponses: [] - method: 'GET' - route.middleware ?= if path.indexOf('/user') is 0 then [auth.auth, i18n.getUserLanguage, cron] else [i18n.getUserLanguage] - swagger["add#{route.spec.method}"](route);true - - - swagger.configure("#{nconf.get('BASE_URL')}/api/v2", "2") diff --git a/website/src/routes/dataexport.js b/website/src/routes/dataexport.js index 9fc2ded323..5bf02a228c 100644 --- a/website/src/routes/dataexport.js +++ b/website/src/routes/dataexport.js @@ -1,9 +1,9 @@ var express = require('express'); var router = new express.Router(); var dataexport = require('../controllers/dataexport'); -var auth = require('../controllers/auth'); +var auth = require('../controllers/api-v2/auth'); var nconf = require('nconf'); -var i18n = require('../i18n'); +var i18n = require('../libs/i18n'); var locals = require('../middlewares/locals'); /* Data export */ diff --git a/website/src/routes/pages.js b/website/src/routes/pages.js index be2d429e59..27bc9a3619 100644 --- a/website/src/routes/pages.js +++ b/website/src/routes/pages.js @@ -3,9 +3,7 @@ var express = require('express'); var router = new express.Router(); var _ = require('lodash'); var locals = require('../middlewares/locals'); -var user = require('../controllers/user'); -var auth = require('../controllers/auth'); -var i18n = require('../i18n'); +var i18n = require('../libs/i18n'); // -------- App -------- router.get('/', i18n.getUserLanguage, locals, function(req, res) { @@ -18,9 +16,9 @@ router.get('/', i18n.getUserLanguage, locals, function(req, res) { }); }); -// -------- Marketing -------- +// -------- Static Pages -------- -var pages = ['front', 'privacy', 'terms', 'api', 'features', 'videos', 'contact', 'plans', 'new-stuff', 'community-guidelines', 'old-news', 'press-kit', 'faq']; +var pages = ['front', 'privacy', 'terms', 'api', 'features', 'videos', 'contact', 'plans', 'new-stuff', 'community-guidelines', 'old-news', 'press-kit', 'faq', 'overview', 'apps']; _.each(pages, function(name){ router.get('/static/' + name, i18n.getUserLanguage, locals, function(req, res) { @@ -31,6 +29,19 @@ _.each(pages, function(name){ }); }); +// -------- Social Media Sharing -------- + +var shareables = ['level-up','hatch-pet','raise-pet','unlock-quest','won-challenge','achievement']; + +_.each(shareables, function(name){ + router.get('/social/' + name, i18n.getUserLanguage, locals, function(req, res) { + res.render( 'social/' + name, { + env: res.locals.habitrpg, + marked: require('marked') + }); + }); +}); + // --------- Redirects -------- router.get('/static/extensions', function(req, res) { diff --git a/website/src/routes/payments.js b/website/src/routes/payments.js index 01667fe747..41c03210be 100644 --- a/website/src/routes/payments.js +++ b/website/src/routes/payments.js @@ -1,9 +1,9 @@ var nconf = require('nconf'); var express = require('express'); var router = new express.Router(); -var auth = require('../controllers/auth'); +var auth = require('../controllers/api-v2/auth'); var payments = require('../controllers/payments'); -var i18n = require('../i18n'); +var i18n = require('../libs/i18n'); router.get('/paypal/checkout', auth.authWithUrl, i18n.getUserLanguage, payments.paypalCheckout); router.get('/paypal/checkout/success', i18n.getUserLanguage, payments.paypalCheckoutSuccess); diff --git a/website/src/seed.js b/website/src/seed.js deleted file mode 100644 index c54c715168..0000000000 --- a/website/src/seed.js +++ /dev/null @@ -1,55 +0,0 @@ -/* - * This script is no longer required due to this code in src/models/group.js: - * // initialize tavern if !exists (fresh installs) - * Group.count({_id:'habitrpg'},function(err,ct){ - * ... - * }) - * - * However we're keeping this script in case future seed updates are needed. - * - * Reference: https://github.com/HabitRPG/habitrpg/issues/3852#issuecomment-55334572 - */ - - -/* - -require('coffee-script') // for habitrpg-shared -var nconf = require('nconf'); -var utils = require('./utils'); -var logging = require('./logging'); -utils.setupConfig(); -var async = require('async'); -var mongoose = require('mongoose'); -User = require('./models/user').model; -Group = require('./models/group').model; - -async.waterfall([ - function(cb){ - mongoose.connect(nconf.get('NODE_DB_URI'), cb); - }, - function(cb){ - Group.findById('habitrpg', cb); - }, - function(tavern, cb){ - logging.info({tavern:tavern,cb:cb}); - if (!tavern) { - tavern = new Group({ - _id: 'habitrpg', - chat: [], - leader: '9', - name: 'HabitRPG', - type: 'guild', - privacy:'public' - }); - tavern.save(cb) - } else { - cb(); - } - } -],function(err){ - if (err) throw err; - logging.info("Done initializing database"); - mongoose.disconnect(); -}) - -*/ diff --git a/website/src/server.js b/website/src/server.js index 52919d523c..7040d82c3d 100644 --- a/website/src/server.js +++ b/website/src/server.js @@ -1,10 +1,11 @@ +require('babel-core/register'); // Only do the minimal amount of work before forking just in case of a dyno restart var cluster = require("cluster"); var _ = require('lodash'); var nconf = require('nconf'); -var utils = require('./utils'); +var utils = require('./libs/utils'); utils.setupConfig(); -var logging = require('./logging'); +var logging = require('./libs/logging'); var isProd = nconf.get('NODE_ENV') === 'production'; var isDev = nconf.get('NODE_ENV') === 'development'; var DISABLE_LOGGING = nconf.get('DISABLE_REQUEST_LOGGING'); @@ -20,7 +21,6 @@ if (cores!==0 && cluster.isMaster && (isDev || isProd)) { }); } else { - require('coffee-script'); // remove this once we've fully converted over var express = require("express"); var http = require("http"); var path = require("path"); @@ -29,7 +29,7 @@ if (cores!==0 && cluster.isMaster && (isDev || isProd)) { var shared = require('../../common'); // Setup translations - var i18n = require('./i18n'); + var i18n = require('./libs/i18n'); var TWO_WEEKS = 1000 * 60 * 60 * 24 * 14; var app = express(); @@ -90,54 +90,68 @@ if (cores!==0 && cluster.isMaster && (isDev || isProd)) { var publicDir = path.join(__dirname, "/../public"); app.set("port", nconf.get('PORT')); - require('./middlewares/apiThrottle')(app); - app.use(require('./middlewares/domain')(server,mongoose)); - if (!isProd && !DISABLE_LOGGING) app.use(express.logger("dev")); - app.use(express.compress()); - app.set("views", __dirname + "/../views"); - app.set("view engine", "jade"); - app.use(express.favicon(publicDir + '/favicon.ico')); - app.use(require('./middlewares/cors')); + + // Setup two different Express apps, one that matches everything except '/api/v3' + // and the other for /api/v3 routes, so we can keep the old an new api versions completely separate + // not sharing a single middleware if we don't want to + var oldApp = express(); // api v1 and v2, and not scoped routes + var newApp = express(); // api v3 + + // Route requests to the right app + app.use(app.router); + // Matches all request except the ones going to /api/v3/** + app.all(/^(?!\/api\/v3).+/i, oldApp); + // Matches all requests going to /api/v3 + app.all('/api/v3', newApp); + + require('./middlewares/apiThrottle')(oldApp); + oldApp.use(require('./middlewares/domain')(server,mongoose)); + if (!isProd && !DISABLE_LOGGING) oldApp.use(express.logger("dev")); + oldApp.use(express.compress()); + oldApp.set("views", __dirname + "/../views"); + oldApp.set("view engine", "jade"); + oldApp.use(express.favicon(publicDir + '/favicon.ico')); + oldApp.use(require('./middlewares/cors')); var redirects = require('./middlewares/redirects'); - app.use(redirects.forceHabitica); - app.use(redirects.forceSSL); - app.use(express.urlencoded()); - app.use(express.json()); - app.use(require('method-override')()); - //app.use(express.cookieParser(nconf.get('SESSION_SECRET'))); - app.use(express.cookieParser()); - app.use(express.cookieSession({ secret: nconf.get('SESSION_SECRET'), httpOnly: false, cookie: { maxAge: TWO_WEEKS }})); - //app.use(express.session()); + oldApp.use(redirects.forceHabitica); + oldApp.use(redirects.forceSSL); + oldApp.use(express.urlencoded()); + oldApp.use(express.json()); + oldApp.use(require('method-override')()); + //oldApp.use(express.cookieParser(nconf.get('SESSION_SECRET'))); + oldApp.use(express.cookieParser()); + oldApp.use(express.cookieSession({ secret: nconf.get('SESSION_SECRET'), httpOnly: false, cookie: { maxAge: TWO_WEEKS }})); + //oldApp.use(express.session()); // Initialize Passport! Also use passport.session() middleware, to support // persistent login sessions (recommended). - app.use(passport.initialize()); - app.use(passport.session()); + oldApp.use(passport.initialize()); + oldApp.use(passport.session()); - app.use(app.router); + oldApp.use(oldApp.router); var maxAge = isProd ? 31536000000 : 0; // Cache emojis without copying them to build, they are too many - app.use(express['static'](path.join(__dirname, "/../build"), { maxAge: maxAge })); - app.use('/common/dist', express['static'](publicDir + "/../../common/dist", { maxAge: maxAge })); - app.use('/common/audio', express['static'](publicDir + "/../../common/audio", { maxAge: maxAge })); - app.use('/common/script/public', express['static'](publicDir + "/../../common/script/public", { maxAge: maxAge })); - app.use('/common/img', express['static'](publicDir + "/../../common/img", { maxAge: maxAge })); - app.use(express['static'](publicDir)); + oldApp.use(express['static'](path.join(__dirname, "/../build"), { maxAge: maxAge })); + oldApp.use('/common/dist', express['static'](publicDir + "/../../common/dist", { maxAge: maxAge })); + oldApp.use('/common/audio', express['static'](publicDir + "/../../common/audio", { maxAge: maxAge })); + oldApp.use('/common/script/public', express['static'](publicDir + "/../../common/script/public", { maxAge: maxAge })); + oldApp.use('/common/img', express['static'](publicDir + "/../../common/img", { maxAge: maxAge })); + oldApp.use(express['static'](publicDir)); // Custom Directives - app.use(require('./routes/pages').middleware); - app.use(require('./routes/payments').middleware); - app.use(require('./routes/auth').middleware); - app.use(require('./routes/coupon').middleware); - app.use(require('./routes/unsubscription').middleware); + oldApp.use(require('./routes/pages').middleware); + oldApp.use(require('./routes/payments').middleware); + oldApp.use(require('./routes/api-v2/auth').middleware); + oldApp.use(require('./routes/api-v2/coupon').middleware); + oldApp.use(require('./routes/api-v2/unsubscription').middleware); var v2 = express(); - app.use('/api/v2', v2); - app.use('/api/v1', require('./routes/apiv1').middleware); - app.use('/export', require('./routes/dataexport').middleware); - require('./routes/apiv2.coffee')(swagger, v2); - app.use(require('./middlewares/errorHandler')); + oldApp.use('/api/v2', v2); + oldApp.use('/api/v1', require('./routes/api-v1').middleware); + oldApp.use('/export', require('./routes/dataexport').middleware); + require('./routes/api-v2/swagger')(swagger, v2); + oldApp.use(require('./middlewares/errorHandler')); server.on('request', app); server.listen(app.get("port"), function() { diff --git a/website/views/index.jade b/website/views/index.jade index 39060c1d4c..359134bc5a 100644 --- a/website/views/index.jade +++ b/website/views/index.jade @@ -1,6 +1,6 @@ doctype html //html(ng-app="habitrpg", ng-controller="RootCtrl", ng-class='{"applying-action":applyingAction}', ui-keypress="{27:'castCancel()'}") -html(ng-app="habitrpg", ng-controller="RootCtrl", ng-class='{"applying-action":applyingAction}', ui-keyup="{27:'castCancel()'}", ng-keydown="$broadcast('habit:keyup', $event)") +html(ng-app="habitrpg", ng-controller="RootCtrl", ng-class='{"applying-action":applyingAction}', ui-keyup="{27:'castCancel()'}", ng-keydown="$broadcast('habit:keydown', $event)", ng-keyup="$broadcast('habit:keyup', $event)") head title=env.t('titleIndex') // ?v=1 needed to force refresh @@ -12,6 +12,7 @@ html(ng-app="habitrpg", ng-controller="RootCtrl", ng-class='{"applying-action":a meta(name='apple-mobile-web-app-capable', content='yes') meta(name='mobile-web-app-capable', content='yes') + //- Disable NewRelic until we add it again on the server if(env.NODE_ENV == 'production' && false) script(type='text/javascript'). @@ -31,6 +32,7 @@ html(ng-app="habitrpg", ng-controller="RootCtrl", ng-class='{"applying-action":a body(ng-cloak, ng-controller='GroupsCtrl') + include ./shared/noscript include ./shared/mixins include ./shared/avatar/index include ./shared/header/menu diff --git a/website/views/options/inventory/drops.jade b/website/views/options/inventory/drops.jade index f4eaef8487..9718cc2283 100644 --- a/website/views/options/inventory/drops.jade +++ b/website/views/options/inventory/drops.jade @@ -93,10 +93,22 @@ a(target='_blank', href='http://www.kickstarter.com/profile/523661924')=env.t('alexander') .popover-content p=env.t('welcomeMarket') - p - button.btn.btn-primary(ng-show='selectedEgg', ng-click='sellInventory()')=env.t('sellEggForGold', {itemType: "{{selectedEgg.text()}}", gold: "{{selectedEgg.value}}"}) - button.btn.btn-primary(ng-show='selectedPotion', ng-click='sellInventory()')=env.t('sellPotionForGold', {itemType: "{{selectedPotion.text()}}", gold: "{{selectedPotion.value}}"}) - button.btn.btn-primary(ng-show='selectedFood', ng-click='sellInventory()')=env.t('sellForGold', {item: "{{selectedFood.text()}}", gold: "{{selectedFood.value}}"}) + hr(ng-show='selectedEgg || selectedPotion || selectedFood') + div(ng-show='selectedEgg || selectedPotion || selectedFood') + .pull-left.customize-option(class='Pet_Egg_{{selectedEgg.key}}' ng-show='selectedEgg') + p(ng-show='selectedEgg') + !=env.t('displayEggForGold', {itemType: "{{selectedEgg.text()}}"}) + .pull-left.customize-option(class='Pet_HatchingPotion_{{selectedPotion.key}}' ng-show='selectedPotion') + p(ng-show='selectedPotion') + !=env.t('displayPotionForGold', {itemType: "{{selectedPotion.text()}}"}) + .pull-left.customize-option(class='Pet_Food_{{selectedFood.key}}' ng-show='selectedFood') + p(ng-show='selectedFood') + !=env.t('displayItemForGold', {itemType: "{{selectedFood.text()}}"}) + .clearfix + button.btn.btn-primary.btn-block(ng-show='selectedEgg', ng-click='sellInventory()')=env.t('sellForGold', {itemType: "{{selectedEgg.text()}}", gold: "{{selectedEgg.value}}"}) + button.btn.btn-primary.btn-block(ng-show='selectedPotion', ng-click='sellInventory()')=env.t('sellForGold', {itemType: "{{selectedPotion.text()}}", gold: "{{selectedPotion.value}}"}) + 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')) @@ -125,7 +137,7 @@ span.Pet_Currency_Gem1x.inline-gems li.customize-menu - menu.pets-menu!=env.t('magicHatchingPotions') + " - " + env.t('fallEventAvailability') + menu.pets-menu!=env.t('magicHatchingPotions') + " - " + env.t('winterEventAvailability') 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}}', @@ -134,7 +146,7 @@ popover-trigger='mouseenter', popover-placement='top', ng-click='purchase("hatchingPotions", pot)') p - | {{::pot.value}}  + | {{::pot.value}}  span.Pet_Currency_Gem1x.inline-gems li.customize-menu diff --git a/website/views/options/inventory/equipment.jade b/website/views/options/inventory/equipment.jade index ba45f9a693..8d77a25a8b 100644 --- a/website/views/options/inventory/equipment.jade +++ b/website/views/options/inventory/equipment.jade @@ -4,6 +4,13 @@ h3.equipment-title.hint(popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', popover=env.t('battleGearText'))=env.t('battleGear') + + .checkbox.equipment-title + label + input(type="checkbox", ng-model="user.preferences.autoEquip", + ng-change='set({"preferences.autoEquip":user.preferences.autoEquip ? true : false})') + |   + =env.t('autoEquipBattleGear') div button.btn.btn-default(type="button", ng-click='dequip("battleGear");') {{env.t("unequipBattleGear")}} diff --git a/website/views/options/inventory/mounts.jade b/website/views/options/inventory/mounts.jade index bbb9e9889d..e08d25c642 100644 --- a/website/views/options/inventory/mounts.jade +++ b/website/views/options/inventory/mounts.jade @@ -7,7 +7,7 @@ mixin mountList(eggSource, potionSource) each potion in potionSource - mount = egg.key+"-"+potion.key div(popover-trigger='mouseenter', popover=env.t('mountName', {potion: potion.text(env.language.code), mount: egg.mountText(env.language.code)}), popover-placement='bottom') - button(class="pet-button Mount_Head_#{mount}", ng-show='user.items.mounts["#{mount}"]', ng-class='{active: user.items.currentMount == "#{mount}"}', ng-click='chooseMount("#{egg.key}", "#{potion.key}")') + button(class="pet-button Mount_Icon_#{mount}", ng-show='user.items.mounts["#{mount}"]', ng-class='{active: user.items.currentMount == "#{mount}"}', ng-click='chooseMount("#{egg.key}", "#{potion.key}")') button(class="pet-button mount-not-owned", ng-if='!user.items.mounts["#{mount}"] && (#{potion.canBuy()} || user.items.hatchingPotions["#{potion.key}"] || user.items.pets["#{mount}"])') .PixelPaw -} @@ -34,7 +34,7 @@ mixin mountList(eggSource, potionSource) each egg in env.Content.dropEggs - mount = egg.key+"-"+potion.key div(popover-trigger='mouseenter', popover=env.t('mountName', {potion: potion.text(env.language.code), mount: egg.mountText(env.language.code)}), popover-placement='bottom') - button(class="pet-button Mount_Head_#{mount}", ng-show='user.items.mounts["#{mount}"]', ng-class='{active: user.items.currentMount == "#{mount}"}', ng-click='chooseMount("#{egg.key}", "#{potion.key}")') + button(class="pet-button Mount_Icon_#{mount}", ng-show='user.items.mounts["#{mount}"]', ng-class='{active: user.items.currentMount == "#{mount}"}', ng-click='chooseMount("#{egg.key}", "#{potion.key}")') button(class="pet-button mount-not-owned", ng-if='!user.items.mounts["#{mount}"] && (#{potion.canBuy()} || user.items.hatchingPotions["#{potion.key}"] || user.items.pets["#{mount}"])') .PixelPaw .row: .col-md-12 @@ -46,4 +46,4 @@ mixin mountList(eggSource, potionSource) div each t,k in env.Content.specialMounts - var animal = k.split('-')[0], color = k.split('-')[1] - button(ng-if='user.items.mounts["#{animal}-#{color}"]', class="pet-button Mount_Head_#{animal}-#{color}", ng-class='{active: user.items.currentMount == "#{animal}-#{color}"}', ng-click='chooseMount("#{animal}", "#{color}")', popover=env.t(t), popover-trigger='mouseenter', popover-placement='bottom') + button(ng-if='user.items.mounts["#{animal}-#{color}"]', class="pet-button Mount_Icon_#{animal}-#{color}", ng-class='{active: user.items.currentMount == "#{animal}-#{color}"}', ng-click='chooseMount("#{animal}", "#{color}")', popover=env.t(t), popover-trigger='mouseenter', popover-placement='bottom') diff --git a/website/views/options/inventory/seasonal-shop.jade b/website/views/options/inventory/seasonal-shop.jade index 57ed54c585..f932f70648 100644 --- a/website/views/options/inventory/seasonal-shop.jade +++ b/website/views/options/inventory/seasonal-shop.jade @@ -1,15 +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!=env.t('seasonalShopFallText') + p(ng-if='!env.worldDmg.seasonalShop')!=env.t('seasonalShopClosedText') + p(ng-if='env.worldDmg.seasonalShop')!=env.t('seasonalShopFallTextBroken') - .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 + // li.customize-menu.inventory-gear menu.pets-menu(label='{{::label}}', ng-repeat='(set,label) in ::{fallWarrior:env.t("monsterOfScienceSet"), fallMage:env.t("witchyWizardSet"), fallHealer:env.t("mummyMedicSet"), fallRogue:env.t("vampireSmiterSet")}') div(ng-repeat='item in ::getSeasonalShopArray(set)', ng-class="{transparent: user.items.gear.owned[item.key] !== undefined}") @@ -22,7 +23,7 @@ | {{((item.specialClass == "wizard") && (item.type == "weapon")) + 1}}  span.Pet_Currency_Gem1x.inline-gems - // menu.pets-menu(label=env.t('quests')) + 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}}", diff --git a/website/views/options/inventory/time-travelers.jade b/website/views/options/inventory/time-travelers.jade index 82dd6227b4..a54c3e03d8 100644 --- a/website/views/options/inventory/time-travelers.jade +++ b/website/views/options/inventory/time-travelers.jade @@ -12,7 +12,7 @@ .pull-right span.inventory_special_trinket.inline-gems b x{{user.purchased.plan.consecutive.trinkets}} - p!=env.t('timeTravelersPopover', {linkStart: "", linkEnd: ""}) + p!=env.t('timeTravelersPopover') .row: .col-md-7 .alert.alert-info(ng-if='hasAllTimeTravelerItems()')=env.t('timeTravelersAlreadyOwned') diff --git a/website/views/options/profile.jade b/website/views/options/profile.jade index a11ad3f29d..8c4b437df8 100644 --- a/website/views/options/profile.jade +++ b/website/views/options/profile.jade @@ -84,7 +84,7 @@ mixin customizeProfile(mobile) button(type='button', ng-if='user.purchased.hair.color.#{color}', class='customize-option hair hair_bangs_1_#{color}', ng-click='unlock("hair.color.#{color}")', ng-class='{selectableInventory: user.preferences.hair.color == "#{color}"}') +buyPref('hair.color', ['rainbow','yellow','green','purple','blue','TRUred'], 'rainbowColors') +buyPref('hair.color', ['pblue2','pgreen2','porange2','ppink2','ppurple2','pyellow2'], 'shimmerColors', 'disabled') - +buyPref('hair.color', ['candycorn','ghostwhite','halloween','midnight','pumpkin','zombie'], 'hauntedColors') + +buyPref('hair.color', ['candycorn','ghostwhite','halloween','midnight','pumpkin','zombie'], 'hauntedColors', 'disabled') +buyPref('hair.color', ['aurora','festive','hollygreen','peppermint','snowy','winterstar'], 'winteryColors', 'disabled') li.customize-menu @@ -152,7 +152,7 @@ mixin customizeProfile(mobile) // Seasonal event skins. Note that Spooky Skins are a legacy set and should always be disabled for purchase +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') + +buyPref('skin', ['candycorn','ogre','pumpkin2','reptile','shadow2','skeleton2','transparent','zombie2'], 'supernaturalSkins', 'disabled') +buyPref('skin', ['clownfish','deepocean','merblue','mergold','mergreen','merruby','shark','tropicalwater'], 'splashySkins', 'disabled') diff --git a/website/views/options/settings.jade b/website/views/options/settings.jade index c2445a04a8..2f27a2b719 100644 --- a/website/views/options/settings.jade +++ b/website/views/options/settings.jade @@ -75,7 +75,18 @@ script(type='text/ng-template', id='partials/options.settings.settings.html') label input(type='checkbox', ng-model='user.preferences.displayInviteToPartyWhenPartyIs1', ng-change='set({"preferences.displayInviteToPartyWhenPartyIs1": user.preferences.displayInviteToPartyWhenPartyIs1 ? true : false})') span.hint(popover-trigger='mouseenter', popover-placement='right', popover=env.t('displayInviteToPartyWhenPartyIs1'))=env.t('displayInviteToPartyWhenPartyIs1') - // button.btn.btn-default(ng-click='showTour()', popover-placement='right', popover-trigger='mouseenter', popover=env.t('restartTour'))= env.t('showTour') + .checkbox + label=env.t('suppressLevelUpModal') + input(type='checkbox', ng-model='user.preferences.suppressModals.levelUp', ng-change='set({"preferences.suppressModals.levelUp": user.preferences.suppressModals.levelUp?true: false})') + .checkbox + label=env.t('suppressHatchPetModal') + input(type='checkbox', ng-model='user.preferences.suppressModals.hatchPet', ng-change='set({"preferences.suppressModals.hatchPet": user.preferences.suppressModals.hatchPet?true: false})') + .checkbox + label=env.t('suppressRaisePetModal') + input(type='checkbox', ng-model='user.preferences.suppressModals.raisePet', ng-change='set({"preferences.suppressModals.raisePet": user.preferences.suppressModals.raisePet?true: false})') + .checkbox + label=env.t('suppressStreakModal') + input(type='checkbox', ng-model='user.preferences.suppressModals.streak', ng-change='set({"preferences.suppressModals.streak": user.preferences.suppressModals.streak?true: false})') hr @@ -103,19 +114,29 @@ script(type='text/ng-template', id='partials/options.settings.settings.html') br.visible-xs button.btn.btn-block.btn-primary(ng-click='openDayStartModal(dayStart)', ng-disabled='dayStart == user.preferences.dayStart') - | Save Custom Day Start + =env.t('saveCustomDayStart') + + hr + + h5=env.t('timezone') + .form-horizontal + .form-group + .col-sm-12 + p!=env.t('timezoneUTC', {utc: "{{ user.preferences.timezoneOffset | timezoneOffsetToUtc }}"}) + br + p!=env.t('timezoneInfo') .personal-options.col-md-6 .panel.panel-default .panel-heading - span Registration + span=env.t('registration') .panel-body div(ng-if='user.auth.facebook.id') button.btn.btn-primary(disabled='disabled', ng-if='!user.auth.local.username')=env.t('registeredWithFb') button.btn.btn-danger(ng-click='http("delete","/api/v2/user/auth/social",null,"detachedFacebook")', ng-if='user.auth.local.username')=env.t('detachFacebook') hr div(ng-if='!user.auth.local.username') - p Add local authentication: + p=env.t('addLocalAuth') form(ng-submit='http("post","/api/v2/register",localAuth,"addedLocalAuth")', ng-init='localAuth={}', name='localAuth', novalidate) //-.alert.alert-danger(ng-messages='changeUsername.$error && changeUsername.submitted')=env.t('fillAll') .form-group @@ -189,15 +210,15 @@ script(type='text/ng-template', id='partials/options.settings.promo.html') small= env.t('couponText') div(ng-if='user.contributor.sudo') hr - h4 Generate Codes + h4=env.t('generateCodes') form.form(role='form',ng-submit='generateCodes(_codes)',ng-init='_codes={}') .form-group input.form-control(type='text',ng-model='_codes.event',placeholder="Event code (eg, 'wondercon')") .form-group input.form-control(type='number',ng-model='_codes.count',placeholder="Number of codes to generate (eg, 250)") .form-group - button.btn.btn-primary(type='submit') Generate - a.btn.btn-default(href='/api/v2/coupons?_id={{user._id}}&apiToken={{user.apiToken}}') Get Codes + button.btn.btn-primary(type='submit')=env.t('generate') + a.btn.btn-default(href='/api/v2/coupons?_id={{user._id}}&apiToken={{user.apiToken}}')=env.t('getCodes') script(type='text/ng-template', id='partials/options.settings.api.html') .container-fluid @@ -214,12 +235,12 @@ script(type='text/ng-template', id='partials/options.settings.api.html') hr - h2 Webhooks + h2=env.t('webhooks') table.table.table-striped thead(ng-if='hasWebhooks') tr - th Enabled - th Webhook URL + th=env.t('enabled') + th=env.t('webhookURL') th tbody tr(ng-repeat="webhook in user.preferences.webhooks | toArray:true | orderBy:'sort'") @@ -235,9 +256,9 @@ script(type='text/ng-template', id='partials/options.settings.api.html') td(colspan=2) form.form-horizontal(ng-submit='addWebhook(_newWebhook.url)') .form-group.col-sm-10 - input.form-control(type='url', ng-model='_newWebhook.url', placeholder='Webhook URL') + input.form-control(type='url', ng-model='_newWebhook.url', placeholder=env.t('webhookURL')) .col-sm-2 - button.btn.btn-sm.btn-primary(type='submit') Add + button.btn.btn-sm.btn-primary(type='submit')=env.t('add') script(id='partials/options.settings.export.html', type="text/ng-template") .container-fluid @@ -258,7 +279,7 @@ mixin subPerks() tr td span.hint(popover=env.t('buyGemsGoldText', {gemCost: "{{Shared.planGemLimits.convRate}}", gemLimit: "{{Shared.planGemLimits.convCap}}"}),popover-trigger='mouseenter',popover-placement='right') #{env.t('buyGemsGold')}  - span.badge.badge-success(ng-show='_subscription.key!="basic_earned"') Cap raised to {{ [25 + user.purchased.plan.consecutive.gemCapExtra + Math.floor(Content.subscriptionBlocks[_subscription.key].months/3*5), 50] | min }} + span.badge.badge-success(ng-show='_subscription.key!="basic_earned"')=env.t('buyGemsGoldCap', {amount: '{{gemGoldCap(_subscription) | min }}'}) tr td span.hint(popover=env.t('retainHistoryText'),popover-trigger='mouseenter',popover-placement='right')=env.t('retainHistory') @@ -269,8 +290,8 @@ mixin subPerks() td span.hint(popover=env.t('mysteryItemText'),popover-trigger='mouseenter',popover-placement='right') #{env.t('mysteryItem')}  div(ng-show='_subscription.key!="basic_earned"') - .badge.badge-success +{{Math.floor(Content.subscriptionBlocks[_subscription.key].months/3)}} Mystic Hourglass - .small.muted Mystic Hourglasses allow purchasing a previous month's Mystery Item set. + .badge.badge-success=env.t('mysticHourglass', {amount: '+{{numberOfMysticHourglasses(_subscription)}}'}) + .small.muted=env.t('mysticHourglassText') tr td span.hint(popover=env.t('supportDevsText'),popover-trigger='mouseenter',popover-placement='right')=env.t('supportDevs') @@ -324,17 +345,17 @@ script(id='partials/options.settings.subscription.html',type='text/ng-template') | #{env.t('subCanceled')} {{moment(user.purchased.plan.dateTerminated).format('MM/DD/YYYY')}} tr(ng-if='!user.purchased.plan.dateTerminated'): td h4=env.t('subscribed') - p(ng-if='user.purchased.plan.planId') Recurring ${{Content.subscriptionBlocks[user.purchased.plan.planId].price}} each {{Content.subscriptionBlocks[user.purchased.plan.planId].months}} Month(s) ({{user.purchased.plan.paymentMethod}}) + p(ng-if='user.purchased.plan.planId')=env.t('purchasedPlanId', {price: '{{Content.subscriptionBlocks[user.purchased.plan.planId].price}}', months: '{{Content.subscriptionBlocks[user.purchased.plan.planId].months}}', plan: '{{user.purchased.plan.paymentMethod}}'}) tr(ng-if='user.purchased.plan.extraMonths'): td span.glyphicon.glyphicon-credit-card - | You have {{user.purchased.plan.extraMonths | number:2}} months of subscription credit. + |  #{env.t('purchasedPlanExtraMonths', {months: '{{user.purchased.plan.extraMonths | number:2}}'})} tr(ng-if='user.purchased.plan.consecutive.count || user.purchased.plan.consecutive.offset'): td span.glyphicon.glyphicon-forward - |  Consecutive Subscription + |  #{env.t('consecutiveSubscription')} ul.list-unstyled - li Consecutive Months: {{user.purchased.plan.consecutive.count + user.purchased.plan.consecutive.offset}} - li Gem Cap Extra: {{user.purchased.plan.consecutive.gemCapExtra}} - li Mystic Hourglasses: {{user.purchased.plan.consecutive.trinkets}} + li #{env.t('consecutiveMonths')} {{user.purchased.plan.consecutive.count + user.purchased.plan.consecutive.offset}} + li #{env.t('gemCapExtra')} {{user.purchased.plan.consecutive.gemCapExtra}} + li #{env.t('mysticHourglasses')} {{user.purchased.plan.consecutive.trinkets}} div(ng-if='!user.purchased.plan.customerId || (user.purchased.plan.customerId && user.purchased.plan.dateTerminated)') .form-group .radio(ng-repeat='block in Content.subscriptionBlocks | toArray | omit: "discount==true" | orderBy:"months"') @@ -355,8 +376,8 @@ script(id='partials/options.settings.subscription.html',type='text/ng-template') h3(ng-if='(user.purchased.plan.customerId && user.purchased.plan.dateTerminated)')= env.t("resubscribe") a.btn.btn-primary(ng-click='Payments.showStripe({subscription:_subscription.key, coupon:_subscription.coupon})', ng-disabled='!_subscription.key')= env.t('card') - a.btn.btn-success(href='/paypal/subscribe?_id={{user._id}}&apiToken={{user.apiToken}}&sub={{_subscription.key}}{{_subscription.coupon ? "&coupon="+_subscription.coupon : ""}}', ng-disabled='!_subscription.key') PayPal - a.btn.btn-warning(ng-click="Payments.amazonPayments.init({type: 'subscription', subscription:_subscription.key, coupon:_subscription.coupon})") Amazon Payments + a.btn.btn-success(href='/paypal/subscribe?_id={{user._id}}&apiToken={{user.apiToken}}&sub={{_subscription.key}}{{_subscription.coupon ? "&coupon="+_subscription.coupon : ""}}', ng-disabled='!_subscription.key')=env.t('paypal') + a.btn.btn-warning(ng-click="Payments.amazonPayments.init({type: 'subscription', subscription:_subscription.key, coupon:_subscription.coupon})")=env.t('amazonPayments') div(ng-if='user.purchased.plan.customerId') .btn.btn-primary(ng-if='!user.purchased.plan.dateTerminated && user.purchased.plan.paymentMethod=="Stripe"', ng-click='Payments.showStripeEdit()')=env.t('subUpdateCard') .btn.btn-sm.btn-danger(ng-if='!user.purchased.plan.dateTerminated', ng-click='Payments.cancelSubscription()')=env.t('cancelSub') diff --git a/website/views/options/social/challenge-box.jade b/website/views/options/social/challenge-box.jade index 25364798d0..9a7df490d8 100644 --- a/website/views/options/social/challenge-box.jade +++ b/website/views/options/social/challenge-box.jade @@ -10,7 +10,8 @@ table.table.table-striped tr(ng-repeat='challenge in group.challenges') td - a(ui-sref='options.social.challenges.detail({cid:challenge._id})') {{challenge.name}} + a(ui-sref='options.social.challenges.detail({cid:challenge._id, groupIdFilter: group._id})') + markdown(text='challenge.name') div(ng-if='group.challenges.length == 0') p |  diff --git a/website/views/options/social/challenges.jade b/website/views/options/social/challenges.jade index 555b188eeb..3fd8dba61e 100644 --- a/website/views/options/social/challenges.jade +++ b/website/views/options/social/challenges.jade @@ -139,32 +139,34 @@ script(type='text/ng-template', id='partials/options.social.challenges.html') placeholder=env.t('challengeTitle'), required='required', ng-disabled='insufficientGemsForTavernChallenge()') - .form-group - input.form-control(type='text', minlength="3", maxlength="16", - ng-model='newChallenge.shortName', placeholder=env.t('challengeTag'), required - ng-disabled='insufficientGemsForTavernChallenge()') - |  - a.hint.vertical-20(target='_blank', href='http://habitica.wikia.com/wiki/Tags', - popover=env.t('challengeTagPop'), popover-trigger='mouseenter', popover-placement='right') - =env.t('moreInfo') - .form-group textarea.form-control(cols='3', placeholder=env.t('challengeDescr'), ng-model='newChallenge.description' ng-disabled='insufficientGemsForTavernChallenge()') - .form-group - .input-group - span.input-group-addon - .Pet_Currency_Gem1x - input.form-control(type='number', placeholder=env.t('prize'), - ng-disabled='insufficientGemsForTavernChallenge()' - min="{{newChallenge.group=='habitrpg' ? 1 : 0}}", - max="{{maxPrize}}", ng-model='newChallenge.prize') - a.hint(popover="{{newChallenge.group=='habitrpg' ? env.t('prizePopTavern') : env.t('prizePop')}}", - popover-trigger='mouseenter', popover-placement='right') - =env.t('moreInfo') - .pull-right(ng-show='newChallenge.group=="habitrpg"') - !=env.t('publicChallenges') + .row + .form-group.col-md-6.col-sm-12 + input.form-control(type='text', minlength="3", + ng-model='newChallenge.shortName', placeholder=env.t('challengeTag'), required + ng-disabled='insufficientGemsForTavernChallenge()') + |  + a.hint.vertical-20(target='_blank', href='http://habitica.wikia.com/wiki/Tags', + popover=env.t('challengeTagPop'), popover-trigger='mouseenter', popover-placement='right') + =env.t('moreInfo') + + .row + .form-group.col-md-6.col-sm-12 + .input-group + span.input-group-addon + .Pet_Currency_Gem1x + input.form-control(type='number', placeholder=env.t('prize'), + ng-disabled='insufficientGemsForTavernChallenge()' + min="{{newChallenge.group=='habitrpg' ? 1 : 0}}", + max="{{maxPrize}}", ng-model='newChallenge.prize') + a.hint(popover="{{newChallenge.group=='habitrpg' ? env.t('prizePopTavern') : env.t('prizePop')}}", + popover-trigger='mouseenter', popover-placement='right') + =env.t('moreInfo') + div(ng-show='newChallenge.group=="habitrpg"') + !=env.t('publicChallenges') .form-group(ng-if='user.contributor.admin') .checkbox @@ -186,11 +188,13 @@ script(type='text/ng-template', id='partials/options.social.challenges.html') | {{challenge.group.name}} a(ui-sref="options.social.party" ng-if="challenge.group.type=='party'") | {{challenge.group.name}} - li + li(ng-if='challenge.leader.profile.name') =env.t('by') + ' ' - a(ng-click='clickMember(challenge.leader._id, true)') {{challenge.leader.profile.name}} - li - =env.t('participants', {membercount: "{{challenge.memberCount}}"}) + a(ng-click='clickMember(challenge.leader._id, true)') {{::challenge.leader.profile.name}} + li(ng-if='!challenge.leader.profile.name', + popover=env.t('noChallengeOwnerPopover'), + popover-trigger='mouseenter')=env.t('noChallengeOwner') + li=env.t('participants', {membercount: "{{challenge.memberCount}}"}) li(ng-show='challenge.prize') p!=env.t('prizeValue', {gemcount: "{{challenge.prize}}", gemicon: ""}) li.bg-transparent @@ -201,7 +205,8 @@ script(type='text/ng-template', id='partials/options.social.challenges.html') a.btn.btn-sm.btn-success(ng-hide='challenge._isMember', ng-click='join(challenge)') span.glyphicon.glyphicon-ok =env.t('join') - a.accordion-toggle(id="{{challenge._id}}" ng-click='toggle(challenge._id)') {{challenge.name}} + a.accordion-toggle(id="{{challenge._id}}" ng-click='toggle(challenge._id)') + markdown(text='challenge.name') .panel-body(ng-class='{collapse: !$stateParams.cid == challenge._id}') .accordion-inner(ng-if='$stateParams.cid == challenge._id') div(ui-view) diff --git a/website/views/options/social/chat-box.jade b/website/views/options/social/chat-box.jade index 31aa3ac021..633d0d16a2 100644 --- a/website/views/options/social/chat-box.jade +++ b/website/views/options/social/chat-box.jade @@ -1,13 +1,10 @@ div.chat-form.guidelines-not-accepted(ng-if='!user.flags.communityGuidelinesAccepted') - p If you would like to post messages in the Tavern or any party or guild chat, please first read our - |  - a(target='_blank', href='/static/community-guidelines')=env.t('communityGuidelines') - | and then click the button below to indicate that you accept them. + p!=env.t('requestAcceptGuidelines', {linkStart: '', linkEnd: ''}) .chat-controls div button.btn.btn-warning(ng-click='acceptCommunityGuidelines()')=env.t('iAcceptCommunityGuidelines') .chat-buttons - button(ng-if='group.chat.length > 0 || group.memberCount > 1', type="button", ng-click='sync(group)')=env.t('toolTipMsg') + button(type="button", ng-click='sync(group)')=env.t('toolTipMsg') form.chat-form(ng-if='user.flags.communityGuidelinesAccepted' ng-submit='postChat(group,message.content)') div(ng-controller='AutocompleteCtrl') @@ -19,5 +16,5 @@ form.chat-form(ng-if='user.flags.communityGuidelinesAccepted' ng-submit='postCha .chat-controls.clearfix .chat-buttons input.btn(type='submit', value=env.t('sendChat'), ng-disabled='_sending') - button.btn(ng-if='group.chat.length > 0 || group.memberCount > 1', type="button", ng-click='sync(group)', ng-disabled='_sending')=env.t('toolTipMsg') + button.btn(type="button", ng-click='sync(group)', ng-disabled='_sending')=env.t('toolTipMsg') include ../../shared/formatting-help diff --git a/website/views/options/social/chat-message.jade b/website/views/options/social/chat-message.jade index 9404665ebe..de63f5cd98 100644 --- a/website/views/options/social/chat-message.jade +++ b/website/views/options/social/chat-message.jade @@ -1,7 +1,7 @@ mixin chatMessages(inbox) ul.list-unstyled.tavern-chat - var ngRepeat = inbox ? 'message in user.inbox.messages | toArray:true | orderBy:"sort":true' : 'message in group.chat track by message.id' - li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid}', ng-if="!message.flagCount || message.flagCount < 2 || user.contributor.admin") + li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid}') span.pull-right.text-danger(ng-if="user.contributor.admin && message.flagCount > 0") | {{message.flagCount > 1 ? "Message Hidden" : "1 flag"}} .scrollable-message(ng-class='{"transparent": message.sent || message.flags[user._id] || (user.contributor.admin && message.flagCount > 1)}') diff --git a/website/views/options/social/group.jade b/website/views/options/social/group.jade index 37f4027d25..b442f61e0c 100644 --- a/website/views/options/social/group.jade +++ b/website/views/options/social/group.jade @@ -132,14 +132,15 @@ a.pull-right.gem-wallet(ng-if='group.type!="party"', popover-trigger='mouseenter .col-md-8 div textarea.form-control(ng-show='group._editing', rows=6, placeholder=env.t('leaderMsg'), ng-model='group.leaderMessage') - table(ng-show='group.leaderMessage') - tr - td - .popover.static-popover.fade.right.in.wide-popover - .arrow - h3.popover-title {{group.leader.profile.name}} - .popover-content - markdown(text='group.leaderMessage') + .slight-vertical-padding + table(ng-show='group.leaderMessage') + tr + td + .popover.static-popover.fade.right.in.wide-popover + .arrow + h3.popover-title {{group.leader.profile.name}} + .popover-content + markdown(text='group.leaderMessage') div(ng-controller='ChatCtrl') h3=env.t('chat') include ./chat-box diff --git a/website/views/options/social/tavern.jade b/website/views/options/social/tavern.jade index baa9b6240a..c2d7aef7b9 100644 --- a/website/views/options/social/tavern.jade +++ b/website/views/options/social/tavern.jade @@ -14,10 +14,12 @@ h3.popover-title a(target='_blank', href='http://www.kickstarter.com/profile/2014640723')=env.t('daniel') .popover-content - | {{user.preferences.sleep ? env.t('innText',{name: user.profile.name}) : env.t('danielText')}} + span(ng-if='!env.worldDmg.tavern') {{user.preferences.sleep ? env.t('innText',{name: user.profile.name}) : env.t('danielText')}} + span(ng-if='env.worldDmg.tavern') {{user.preferences.sleep ? env.t('innTextBroken',{name: user.profile.name}) : env.t('danielTextBroken')}} button.btn-block.btn.btn-lg.btn-success(ng-click='User.user.ops.sleep({})') | {{user.preferences.sleep ? env.t('innCheckOut') : env.t('innCheckIn')}} - span(ng-if='!user.preferences.sleep')=env.t('danielText2') + span(ng-if='!user.preferences.sleep && !env.worldDmg.tavern')=env.t('danielText2') + span(ng-if='!user.preferences.sleep && env.worldDmg.tavern')=env.t('danielText2Broken') // Resources diff --git a/website/views/shared/avatar/index.jade b/website/views/shared/avatar/index.jade index 0a6c9d26d9..a09d678686 100644 --- a/website/views/shared/avatar/index.jade +++ b/website/views/shared/avatar/index.jade @@ -16,6 +16,8 @@ mixin herobox(opts) - var name = '{{profile.profile.name}}' - var buffs = 'profile.stats.buffs' + - var rebirthLevel = '{{profile.achievements.rebirthLevel < 100 ? profile.achievements.rebirthLevel : "100+"}}' + figure.herobox(ng-click=ngClick, data-name=name, class=klass, ng-class=ngKlass) .avatar-name(ng-class='userLevelStyle(profile)')=name @@ -27,4 +29,4 @@ mixin herobox(opts) ng-show='#{buffs}.str || #{buffs}.per || #{buffs}.con || #{buffs}.int || #{buffs}.stealth') span(tooltip=env.t('level'), tooltip-append-to-body="true") {{profile.stats.lvl}} span.glyphicon.glyphicon-plus-sign(ng-show='profile.achievements.rebirths', - tooltip=env.t('reborn', {reLevel: "{{profile.achievements.rebirthLevel}}"}), tooltip-append-to-body="true") + tooltip=env.t('reborn', {reLevel: rebirthLevel}), tooltip-append-to-body="true") diff --git a/website/views/shared/footer.jade b/website/views/shared/footer.jade index 55df4cbec5..ec67f778dc 100644 --- a/website/views/shared/footer.jade +++ b/website/views/shared/footer.jade @@ -1,4 +1,5 @@ footer.footer(ng-controller='FooterCtrl') + div(id='fb-root') .container .row .col-sm-3 @@ -7,7 +8,7 @@ footer.footer(ng-controller='FooterCtrl') li a(href='https://itunes.apple.com/us/app/habitica/id994882113?ls=1&mt=8', target='_blank')=env.t('mobileIOS') li - a(href='https://play.google.com/store/apps/details?id=com.ocdevel.habitrpg', target='_blank')=env.t('mobileAndroid') + a(href='https://play.google.com/store/apps/details?id=com.habitrpg.android.habitica', target='_blank')=env.t('mobileAndroid') if env.isStaticPage h4=env.t('language') select(ng-change='changeLang()', ng-model='selectedLanguage', ng-options='language.name for language in languages') @@ -59,20 +60,23 @@ footer.footer(ng-controller='FooterCtrl') .col-sm-3 if (env.NODE_ENV === 'production' && !env.IS_MOBILE) h4=env.t('footerSocial') - .addthis_toolbox.addthis_default_style(addthis:url='https://habitica.com', addthis:title=env.t('socialTitle')) + .addthis_toolbox.addthis_default_style(addthis:url='https://habitica.com', addthis:title=env.t('socialTitle'), ng-init='loadWidgets()') table tr td - a.addthis_button_facebook_like(fb:like:layout='button_count') + .fb-like(data-href='https://habitica.com/static/front', data-layout='button', data-action='like', data-share='true', data-show-faces='true') tr td a.twitter-share-button(href='https://twitter.com/intent/tweet?text=Improve+yourself+in+the+land+of+Habitica!&via=habitica&url=https://habitica.com/&count=none')=env.t('tweet') tr td - iframe(src='/bower_components/github-buttons/github-btn.html?user=habitrpg&repo=habitrpg&type=watch&count=true', allowtransparency='true', frameborder='0', scrolling='0', width='85px', height='20px') + a.tumblr-share-button(data-href='https://habitica.com/static/front', data-notes='none') tr td a.addthis_button_google_plusone(g:plusone:size='medium') + tr + td + iframe(src='/bower_components/github-buttons/github-btn.html?user=habitrpg&repo=habitrpg&type=watch&count=true', allowtransparency='true', frameborder='0', scrolling='0', width='85px', height='20px') else if (env.NODE_ENV==='development' || env.NODE_ENV==='test') && !env.isStaticPage h4 Debug .btn-group-vertical diff --git a/website/views/shared/header/menu.jade b/website/views/shared/header/menu.jade index d2c60dda01..5d73d51468 100644 --- a/website/views/shared/header/menu.jade +++ b/website/views/shared/header/menu.jade @@ -58,7 +58,7 @@ nav.toolbar(ng-controller='MenuCtrl') li a(target='_blank' href='https://habitica.com/static/faq/')=env.t('FAQ') li - a(target='_blank' href='http://habitica.wikia.com/wiki/')=env.t('overview') + a(target='_blank' href='https://habitica.com/static/overview')=env.t('overview') li a(target='_blank' href='https://github.com/HabitRPG/habitrpg/issues/2760')=env.t('reportBug') li @@ -157,7 +157,7 @@ nav.toolbar(ng-controller='MenuCtrl') li a(target='_blank' href='https://habitica.com/static/faq/')=env.t('FAQ') li - a(target='_blank' href='http://habitica.wikia.com/wiki/')=env.t('overview') + a(target='_blank' href='https://habitica.com/static/overview')=env.t('overview') li a(target='_blank' href='https://github.com/HabitRPG/habitrpg/issues/2760')=env.t('reportBug') li diff --git a/website/views/shared/modals/achievements.jade b/website/views/shared/modals/achievements.jade index 142415be8f..fdb7c02e1a 100644 --- a/website/views/shared/modals/achievements.jade +++ b/website/views/shared/modals/achievements.jade @@ -1,96 +1,134 @@ +include ../avatar/generated_avatar +mixin achievementFooter + - var tweet = env.t('achievementShare'); + .modal-footer(style='margin-top:0', ng-init='loadWidgets()') + .container-fluid + .row.text-center + .col-xs-4 + a.twitter-share-button(href='https://twitter.com/intent/tweet?text=#{tweet}&via=habitica&url=#{env.BASE_URL}/social/achievement&count=none')=env.t('tweet') + .col-xs-4 + .fb-share-button(data-href='#{env.BASE_URL}/social/achievement', data-layout='button') + .col-xs-4 + a.tumblr-share-button(data-href='#{env.BASE_URL}/social/achievement', data-notes='none') + +mixin achievementAvatar(badge,margin) + .container-fluid + .row + .col-xs-4(style='padding:0') + div(class='achievement-#{badge}2x' style='margin: 2em auto') + .col-xs-4(style='padding:0') + .herobox(style='padding:0; width:0; height:7em; margin:auto #{margin}em') + .character-sprites(style='width:0') + +generatedAvatar + .col-xs-4(style='padding:0') + div(class='achievement-#{badge}2x' style='margin: 2em auto') + // Streak script(id='modals/achievements/streak.html', type='text/ng-template') - .modal-header - h4=env.t('modalAchievement') - .modal-body - .achievement.achievement-thermometer - =env.t('streakerAchievement') - .modal-footer - button.btn.btn-default(ng-click='$close()')=env.t('ok') + .modal-content(style='min-width:28em') + .modal-body.text-center + h3(style='margin-bottom: 0')=env.t('streakAchievement') + +achievementAvatar('thermometer',2.5) + h4(ng-if='user.achievements.streak === 1')=env.t('firstStreakAchievement') + h4(ng-if='user.achievements.streak > 1')=env.t('streakAchievementCount', {streaks:'{{::user.achievements.streak}}'}) + p=env.t('twentyOneDays') + p=env.t('dontBreakStreak') + br + button.btn.btn-primary(ng-click='$close()')=env.t('dontStop') + .checkbox + label(style='display:inline-block')=env.t('dontShowAgain') + input(type='checkbox', ng-model='user.preferences.suppressModals.streak', ng-change='set({"preferences.suppressModals.streak": user.preferences.suppressModals.streak?true: false})') + +achievementFooter // Max Gear script(id='modals/achievements/ultimateGear.html', type='text/ng-template') - .modal-header - h4=env.t('modalAchievement') - .modal-body - .achievement.achievement-armor - p=env.t('gearAchievement') - br - table.multi-achievement - tr - td(ng-if='::user.achievements.ultimateGearSets.healer').multi-achievement - .achievement-ultimate-healer.multi-achievement - =env.t('healer') - td(ng-if='::user.achievements.ultimateGearSets.wizard').multi-achievement - .achievement-ultimate-mage.multi-achievement - =env.t('mage') - td(ng-if='::user.achievements.ultimateGearSets.rogue').multi-achievement - .achievement-ultimate-rogue.multi-achievement - =env.t('rogue') - td(ng-if='::user.achievements.ultimateGearSets.warrior').multi-achievement - .achievement-ultimate-warrior.multi-achievement - =env.t('warrior') - br - p(ng-if='!(user.achievements.ultimateGearSets.healer && user.achievements.ultimateGearSets.wizard && user.achievements.ultimateGearSets.rogue && user.achievements.ultimateGearSets.warrior)')!=env.t('moreGearAchievements') - br - .shop_armoire.pull-right - p!=env.t("armoireUnlocked") - .modal-footer - button.btn.btn-default(ng-click='$close()')=env.t('ok') + .modal-content(style='min-width:28em') + .modal-body.text-center + h3(style='margin-bottom:0')=env.t('modalAchievement') + +achievementAvatar('armor',2.5) + p=env.t('gearAchievement') + br + table.multi-achievement + tr + td(ng-if='::user.achievements.ultimateGearSets.healer').multi-achievement + .achievement-ultimate-healer2x.multi-achievement + =env.t('healer') + td(ng-if='::user.achievements.ultimateGearSets.wizard').multi-achievement + .achievement-ultimate-mage2x.multi-achievement + =env.t('mage') + td(ng-if='::user.achievements.ultimateGearSets.rogue').multi-achievement + .achievement-ultimate-rogue2x.multi-achievement + =env.t('rogue') + td(ng-if='::user.achievements.ultimateGearSets.warrior').multi-achievement + .achievement-ultimate-warrior2x.multi-achievement + =env.t('warrior') + br + div(ng-if='!(user.achievements.ultimateGearSets.healer && user.achievements.ultimateGearSets.wizard && user.achievements.ultimateGearSets.rogue && user.achievements.ultimateGearSets.warrior)') + p!=env.t('moreGearAchievements') + br + .shop_armoire.pull-right + p!=env.t("armoireUnlocked") + br + button.btn.btn-primary(ng-click='$close()')=env.t('huzzah') + +achievementFooter // Beast Master script(id='modals/achievements/beastMaster.html', type='text/ng-template') - .modal-header - h4=env.t('modalAchievement') - .modal-body - p - .achievement.achievement-rat - =env.t('beastAchievement') - .modal-footer - button.btn.btn-default(ng-click='$close()')=env.t('ok') + .modal-content(style='min-width:28em') + .modal-body.text-center + h3(style='margin-bottom:0')=env.t('modalAchievement') + +achievementAvatar('rat',0) + p=env.t('beastAchievement') + br + button.btn.btn-primary(ng-click='$close()')=env.t('huzzah') + +achievementFooter // Mount Master script(id='modals/achievements/mountMaster.html', type='text/ng-template') - .modal-header - h4=env.t('modalAchievement') - .modal-body - p - .achievement.achievement-wolf - =env.t('mountAchievement') - .modal-footer - button.btn.btn-default(ng-click='$close()')=env.t('ok') + .modal-content(style='min-width:28em') + .modal-body.text-center + h3(style='margin-bottom:0')=env.t('modalAchievement') + +achievementAvatar('wolf',0) + p=env.t('mountAchievement') + br + button.btn.btn-primary(ng-click='$close()')=env.t('huzzah') + +achievementFooter // Triad Bingo script(id='modals/achievements/triadBingo.html', type='text/ng-template') - .modal-header - h4=env.t('modalAchievement') - .modal-body - p - .achievement.achievement-triadbingo - =env.t('triadBingoAchievement') - .modal-footer - button.btn.btn-default(ng-click='$close()')=env.t('ok') + .modal-content(style='min-width:28em') + .modal-body.text-center + h3(style='margin-bottom:0')=env.t('modalAchievement') + +achievementAvatar('triadbingo',0) + p=env.t('triadBingoAchievement') + br + button.btn.btn-primary(ng-click='$close()')=env.t('huzzah') + +achievementFooter // Contributor // activated by user.flags.contributor script(id='modals/achievements/contributor.html', type='text/ng-template') - .modal-header - h4=env.t('modalContribAchievement') - .modal-body - div(class="#{env.worldDmg.guide ? 'npc_justin_broken.float-left' : 'npc_justin.float-left'}") - p + .modal-content(style='min-width:28em') + .modal-body.text-center + h3(style='margin-bottom:0')=env.t('modalContribAchievement') + +achievementAvatar('boot',0) !=env.t('contribModal', {name: "{{user.profile.name}}", level: "{{user.contributor.level}}"}) + ' ' a(href='http://habitica.wikia.com/wiki/Contributor_Rewards' target='_blank')=env.t('contribLink') - .modal-footer - button.btn.btn-default(ng-click='set({"flags.contributor":false}); $close()')=env.t('ok') + br + button.btn.btn-primary(style='margin-top:1em' ng-click='set({"flags.contributor":false}); $close()')=env.t('huzzah') + +achievementFooter //Rebirth script(id='modals/achievements/rebirth.html', type='text/ng-template') - .modal-header - h4=env.t('modalAchievement') - .modal-body - .achievement.achievement-sun - =env.t('rebirthAchievement', {number: "{{user.achievements.rebirths}}", level: "{{user.achievements.rebirthLevel}}"}) - .modal-footer - button.btn.btn-default(ng-click='$close()')=env.t('ok') + .modal-content(style='min-width:28em') + .modal-body.text-center + h3(style='margin-bottom:0')=env.t('modalAchievement') + +achievementAvatar('sun',0) + div(ng-if='user.achievements.rebirthLevel < 100') + =env.t('rebirthAchievement', {number: "{{user.achievements.rebirths}}", level: "{{user.achievements.rebirthLevel}}"}) + div(ng-if='user.achievements.rebirthLevel >= 100') + =env.t('rebirthAchievement100', {number: "{{user.achievements.rebirths}}"}) + br + button.btn.btn-primary(ng-click='$close()')=env.t('huzzah') + +achievementFooter diff --git a/website/views/shared/modals/hatch-pet.jade b/website/views/shared/modals/hatch-pet.jade new file mode 100644 index 0000000000..285eb13c95 --- /dev/null +++ b/website/views/shared/modals/hatch-pet.jade @@ -0,0 +1,33 @@ +include ../avatar/generated_avatar + +script(type='text/ng-template', id='modals/hatchPet.html') + - var tweet = env.t('hatchPetShare'); + .modal-content(style='min-width:28em') + .modal-body.text-center(style='padding-bottom:0') + h3(style='margin-bottom: 0')=env.t('hatchedPet',{egg:'{{::hatchedPet.egg}}', potion:'{{::hatchedPet.potion}}'}) + .container-fluid + .row(style='margin-bottom:1em', ng-controller='UserCtrl') + .col-xs-4(style='padding:0') + div(class='{{::hatchedPet.pet}}').pull-right + .col-xs-3 + .empty_bottles(style='margin-top:2.8em') + .col-xs-5(style='padding:0') + .herobox(style='padding:0; width:0; height:0') + .character-sprites(style='width:0; margin-top:.5em') + +generatedAvatar + p=env.t('earnedCompanion') + br + button.btn.btn-primary(ng-click='choosePet(hatchedPet.eggKey, hatchedPet.potionKey); $close()')=env.t('displayNow') + button.btn.btn-default(ng-click='$close()')=env.t('displayLater') + .checkbox + label(style='display:inline-block')=env.t('dontShowAgain') + input(type='checkbox', ng-model='user.preferences.suppressModals.hatchPet', ng-change='set({"preferences.suppressModals.hatchPet": user.preferences.suppressModals.hatchPet?true: false})') + .modal-footer(style='margin-top:0', ng-init='loadWidgets()') + .container-fluid + .row + .col-xs-3 + a.twitter-share-button(href='https://twitter.com/intent/tweet?text=#{tweet}&via=habitica&url=#{env.BASE_URL}/social/hatch-pet&count=none')=env.t('tweet') + .col-xs-4(style='margin-left:.8em') + .fb-share-button(data-href='#{env.BASE_URL}/social/hatch-pet', data-layout='button') + .col-xs-4(style='margin-left:.8em') + a.tumblr-share-button(data-href='#{env.BASE_URL}/social/hatch-pet', data-notes='none') diff --git a/website/views/shared/modals/index.jade b/website/views/shared/modals/index.jade index a70803cf49..b3973ec68b 100644 --- a/website/views/shared/modals/index.jade +++ b/website/views/shared/modals/index.jade @@ -14,6 +14,10 @@ include ./limited include ./invite-friends include ./welcome.jade include ./low-health.jade +include ./level-up.jade +include ./hatch-pet.jade +include ./raise-pet.jade +include ./won-challenge.jade //- Settings script(type='text/ng-template', id='modals/change-day-start.html') diff --git a/website/views/shared/modals/level-up.jade b/website/views/shared/modals/level-up.jade new file mode 100644 index 0000000000..6e9df29439 --- /dev/null +++ b/website/views/shared/modals/level-up.jade @@ -0,0 +1,31 @@ +include ../avatar/generated_avatar + +script(type='text/ng-template', id='modals/levelUp.html') + - var tweet = env.t('levelUpShare'); + .modal-content(style='min-width:28em') + .modal-body.text-center(style='padding-bottom:0') + h3(style='margin-bottom: 0')=env.t('gainedLevel') + .container-fluid + .row + .herobox(style='margin:auto 8.3em; width: 6em; height: 9em; padding-top: 0') + .character-sprites(style='margin: 0; width: 0') + +generatedAvatar + .row + .herobox(style='margin:auto 8.9em; width: 6em; height: 0; padding-top: 0') + .avatar-level(ng-class='userLevelStyle(user)')=env.t('level')+' {{user.stats.lvl}}' + h4(style='margin-top: 1em')!=env.t('leveledUp', {level:'{{user.stats.lvl}}'}) + p=env.t('fullyHealed') + br + button.btn.btn-primary(ng-click='$close()')=env.t('huzzah') + .checkbox + label(style='display:inline-block')=env.t('dontShowAgain') + input(type='checkbox', ng-model='user.preferences.suppressModals.levelUp', ng-change='set({"preferences.suppressModals.levelUp": user.preferences.suppressModals.levelUp?true: false})') + .modal-footer(style='margin-top:0', ng-init='loadWidgets()') + .container-fluid + .row + .col-xs-3 + a.twitter-share-button(href='https://twitter.com/intent/tweet?text=#{tweet}&via=habitica&url=#{env.BASE_URL}/social/level-up&count=none')=env.t('tweet') + .col-xs-4(style='margin-left:.8em') + .fb-share-button(data-href='#{env.BASE_URL}/social/level-up', data-layout='button') + .col-xs-4(style='margin-left:.8em') + a.tumblr-share-button(data-href='#{env.BASE_URL}/social/level-up', data-notes='none') diff --git a/website/views/shared/modals/members.jade b/website/views/shared/modals/members.jade index 930c0caccd..9d04c1286e 100644 --- a/website/views/shared/modals/members.jade +++ b/website/views/shared/modals/members.jade @@ -108,7 +108,7 @@ script(type='text/ng-template', id='modals/abuse-flag.html') markdown(text="abuseObject.text") p!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer - button.pull-left.btn.btn-danger(ng-click='clearFlagCount(abuseObject, groupId)', ng-if='user.contributor.admin && abuseObject.flagCount >= 2') + button.pull-left.btn.btn-danger(ng-click='clearFlagCount(abuseObject, groupId)', ng-if='user.contributor.admin && abuseObject.flagCount > 0') | Reset Flag Count button.btn.btn-primary(ng-click='$close()')=env.t('cancel') button.btn.btn-danger(ng-click='reportAbuse(user, abuseObject, groupId)')=env.t("abuseFlagModalButton") diff --git a/website/views/shared/modals/quests.jade b/website/views/shared/modals/quests.jade index 4b3039edb4..a9dbf6a991 100644 --- a/website/views/shared/modals/quests.jade +++ b/website/views/shared/modals/quests.jade @@ -1,5 +1,6 @@ include ./quest-rewards include ../mixins +include ../avatar/generated_avatar mixin questInfo .pull-right-sm.text-center @@ -85,19 +86,36 @@ script(type='text/ng-template', id='modals/questInvitation.html') button.btn.btn-primary(ng-click='questAccept(); $close()')=env.t('accept') script(type='text/ng-template', id='modals/questDrop.html') - .quest-icon.pull-right(class='inventory_quest_scroll_{{::selectedQuest.key}}') - .modal-header - h4=env.t('messageDropQuest') - .modal-body - h4 {{::selectedQuest.text()}} - +questInfo - hr - .npc_ian.pull-left - p=env.t('dropQuestCongrats') - .modal-footer - button.btn.btn-default(ng-click='closeQuest(); $close()')=env.t('questLater') - button.btn.btn-primary(ng-click='inviteOrStartParty(group); $close()', ng-if='!party.members')=env.t('startAParty') - button.btn.btn-primary(ng-click='questInit()', ng-if='party.members')=env.t('inviteParty') + - var tweet = env.t('questUnlockShare'); + .modal-content(style='min-width:28em') + .modal-body.text-center + h3=env.t('unlockedAQuest') + p {{::selectedQuest.text()}} + .container-fluid + .row(style='margin-bottom:1em', ng-controller='UserCtrl') + .col-xs-4(style='padding:0') + .herobox(style='padding:0; width: 0; height: 0') + .character-sprites(style='width:0') + +generatedAvatar + .col-xs-4(style='padding:0') + .herobox(style='width: 6.7em; height: 5em; position: absolute') + .avatar-level(ng-class='userLevelStyle(user)')=env.t('level')+' {{user.stats.lvl}}' + .col-xs-4(style='margin-top:1.5em') + .quest-icon(class='inventory_quest_scroll_{{::selectedQuest.key}}') + h4!=env.t('leveledUpReceivedQuest', {level:'{{user.stats.lvl}}'}) + .row(style='margin-top:2em') + button.btn.btn-primary(ng-click='inviteOrStartParty(group); $close()', ng-if='!party.members')=env.t('startAParty') + button.btn.btn-primary(ng-click='questInit(); $close()', ng-if='party.members')=env.t('inviteParty') + button.btn.btn-default(ng-click='closeQuest(); $close()')=env.t('questLater') + .modal-footer(style='margin-top:0', ng-init='loadWidgets()') + .container-fluid + .row + .col-xs-3 + a.twitter-share-button(href='https://twitter.com/intent/tweet?text=#{tweet}&via=habitica&url=#{env.BASE_URL}/social/unlock-quest&count=none')=env.t('tweet') + .col-xs-4(style='margin-left:.8em') + .fb-share-button(data-href='#{env.BASE_URL}/social/unlock-quest', data-layout='button') + .col-xs-4(style='margin-left:.8em') + a.tumblr-share-button(data-href='#{env.BASE_URL}/social/unlock-quest', data-notes='none') script(type='text/ng-template', id='modals/ownedQuests.html') .modal-header diff --git a/website/views/shared/modals/raise-pet.jade b/website/views/shared/modals/raise-pet.jade new file mode 100644 index 0000000000..2a69b12eee --- /dev/null +++ b/website/views/shared/modals/raise-pet.jade @@ -0,0 +1,33 @@ +include ../avatar/generated_avatar + +script(type='text/ng-template', id='modals/raisePet.html') + - var tweet = env.t('raisePetShare'); + .modal-content(style='min-width:28em') + .modal-body.text-center(style='padding-bottom:0') + h3(style='margin-bottom: 0')=env.t('raisedPet',{pet:'{{::raisedPet.displayName}}'}) + .container-fluid + .row(style='margin-bottom:1em', ng-controller='UserCtrl') + .col-xs-1 + .col-xs-10 + .herobox(style='margin:0; padding-top: 0') + .character-sprites(style='width:0; margin-top:.5em') + span(class='Mount_Body_{{::raisedPet.spriteName}}') + span + +generatedAvatar + span(class='Mount_Head_{{::raisedPet.spriteName}}') + p=env.t('earnedSteed') + br + button.btn.btn-primary(ng-click='chooseMount(raisedPet.egg, raisedPet.potion); $close()')=env.t('rideNow') + button.btn.btn-default(ng-click='$close()')=env.t('rideLater') + .checkbox + label(style='display:inline-block')=env.t('dontShowAgain') + input(type='checkbox', ng-model='user.preferences.suppressModals.raisePet', ng-change='set({"preferences.suppressModals.raisePet": user.preferences.suppressModals.raisePet?true: false})') + .modal-footer(style='margin-top:0', ng-init='loadWidgets()') + .container-fluid + .row + .col-xs-3 + a.twitter-share-button(href='https://twitter.com/intent/tweet?text=#{tweet}&via=habitica&url=#{env.BASE_URL}/social/raise-pet&count=none')=env.t('tweet') + .col-xs-4(style='margin-left:.8em') + .fb-share-button(data-href='#{env.BASE_URL}/social/raise-pet', data-layout='button') + .col-xs-4(style='margin-left:.8em') + a.tumblr-share-button(data-href='#{env.BASE_URL}/social/raise-pet', data-notes='none') diff --git a/website/views/shared/modals/reroll.jade b/website/views/shared/modals/reroll.jade index cd144d8252..5d05124385 100644 --- a/website/views/shared/modals/reroll.jade +++ b/website/views/shared/modals/reroll.jade @@ -9,7 +9,7 @@ script(type='text/ng-template', id='modals/reroll.html') .modal-footer button.btn.btn-default(ng-click='$close()')=env.t('neverMind') span(ng-if='user.balance < 1') - a.btn.btn-success(ng-click='openModal("buyGems",{track:{"Gems > Reroll"}})')=env.t('buyMoreGems') + a.btn.btn-success(ng-click='openModal("buyGems",{track:"Gems > Reroll"})')=env.t('buyMoreGems') span.gem-cost=env.t('notEnoughGems') span(ng-if='user.balance >= 1', ng-controller='SettingsCtrl') a.btn.btn-danger(ng-click='$close(); reroll()')=env.t('fortify') diff --git a/website/views/shared/modals/won-challenge.jade b/website/views/shared/modals/won-challenge.jade new file mode 100644 index 0000000000..b10625d7d7 --- /dev/null +++ b/website/views/shared/modals/won-challenge.jade @@ -0,0 +1,38 @@ +include ../avatar/generated_avatar + +script(type='text/ng-template', id='modals/wonChallenge.html') + - var tweet = env.t('wonChallengeShare'); + .modal-content(style='min-width:28em') + .modal-body.text-center + h3(style='margin-bottom: 0')=env.t('wonChallenge') + h4 {{::user.achievements.challenges[user.achievements.challenges.length - 1]}} + .container-fluid + .row(style='margin-bottom:1em', ng-controller='UserCtrl') + .col-xs-4(style='padding:0') + .container-fluid + .row + .col-xs-4(style='padding:0') + .col-xs-4(style='padding:0') + .achievement-karaoke-2x(style='margin-top: 2em') + .col-xs-4(style='padding:0') + .herobox(style='padding:0; width:0; height:7em') + .character-sprites(style='width:0') + +generatedAvatar + .col-xs-4(style='padding:0') + .container-fluid + .row + .col-xs-4(style='padding:0') + .col-xs-4(style='padding:0') + .achievement-karaoke-2x(style='margin-top: 2em') + p=env.t('congratulations') + br + button.btn.btn-primary(ng-click='$close()')=env.t('hurray') + .modal-footer(style='margin-top:0', ng-init='loadWidgets()') + .container-fluid + .row + .col-xs-3 + a.twitter-share-button(href='https://twitter.com/intent/tweet?text=#{tweet}&via=habitica&url=#{env.BASE_URL}/social/won-challenge&count=none')=env.t('tweet') + .col-xs-4(style='margin-left:.8em') + .fb-share-button(data-href='#{env.BASE_URL}/social/won-challenge', data-layout='button') + .col-xs-4(style='margin-left:.8em') + a.tumblr-share-button(data-href='#{env.BASE_URL}/social/won-challenge', data-notes='none') diff --git a/website/views/shared/new-stuff.jade b/website/views/shared/new-stuff.jade index 85f2008eb2..6d13d9fa06 100644 --- a/website/views/shared/new-stuff.jade +++ b/website/views/shared/new-stuff.jade @@ -1,28 +1,307 @@ -h2 10/14/2015 - JACK O'LANTERN PETS AND MOUNTS! WORLD BOSS EXHAUST STRIKE! +h2 12/10/2015 - ANDROID APP BETA IS LIVE! hr tr td - .Pet-JackOLantern-Base.pull-right - h3 Jack O'Lantern Pets and Mounts - p The Flourishing Fields are full of cute carved pumpkins - and it looks like one has followed you home! It must be frightened of Burnout and looking for an adventurer to protect it. + .promo_android.pull-right + h3 Android App Beta + p Android users, rejoice! We're releasing the beta version of our brand-new, totally rewritten native Android app. Download it here! br - p Those of you who weren't around last Fall Festival have received a pet Jack-O-Lantern, and those of you who got one last year have received a Jack-O-Lantern Mount! Happy Fall Festival. - p.small.muted by Lemoness - tr - td - .npc_ian_broken.pull-right - h3 World Boss: Burnout Uses Exhaust Strike! - p Oh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit! + p It's a beta version, which means that some features are still missing, but we are working to create additional releases for the coming weeks. You can help us make the app even better by leaving us feedback and reporting bugs under About > Report a Bug! (We are already aware of some, like Dailies sometimes moving around, and are working to address them in the coming weeks.) br - p Only defeating Burnout can break the spell and save our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again! - br - p Late to the fight? Learn about Burnout and how to defeat World Bosses here. + p Finally, if you like the direction that we're taking the app, we'd love it if you could take the time to leave us a review :) It really makes a difference for us. + p.small.muted by Viirus, Sara Olson, MagicMicky, Negue, and FranzeJR if menuItem !== 'oldNews' hr a(href='/static/old-news', target='_blank') Read older news mixin oldNews + h2 12/7/2015 - PEPPERMINT PETS AND PUSH TASK TO BOTTOM! + tr + td + .Pet-Wolf-Peppermint.pull-right + h3 Peppermint Magic Hatching Potions + p A new Magic Hatching Potion is available! + br + p Between now and December 31st, you can buy Peppermint Hatching Potions from the Market and use them to hatch any standard pet egg. (Magic Hatching Potions do not work on Quest Pet eggs.) You'll find it very easy to care for your new Peppermint Pets: they love to eat every kind of food! + br + p Peppermint Hatching Potions are a Seasonal Edition item, so they will only be available during this time each year! Be sure to get them while you can. + p.small.muted by Lemoness + tr + td + h3 Push Task to Bottom + p Now you can easily push a task to the bottom of a list! Hold the Control or Command key, and the Push Task to Top icon will switch to a Push Task to Bottom icon. Click that and down goes the task! + p.small.muted by TheHollidayInn + h2 12/1/2015 - DECEMBER ARMOIRE ITEMS, BACKGROUNDS, MYSTERY BOX, AND GAYMERX ARMOR! + tr + td + .weapon_armoire_blueLongbow.pull-right + h3 December Armoire Items + p There is new equipment in Enchanted Armoire, a 100 GP Reward in the Rewards Column which unlocks after you've attained Ultimate Gear! + br + p Click on the Enchanted Armoire for a random chance at special Equipment, including the Crystal Crescent Set and the Blue Longbow! It may also give you random XP or food items. We'll be adding new equipment to it during the first week of each month, but even when you've exhausted the current supply, you can keep clicking for a chance at food and XP. + br + p Now go spend all that accumulated Gold! May the Random Number Generator smile upon you... + p.small.muted by Lemoness and SabreCat + p.small.muted Art by starsystemic, Fandekasp, and nonight + tr + td + .background_winter_town.pull-right + h3 December Backgrounds + p There are three new avatar backgrounds in the Background Shop! Now your avatar can ski on the Alpine Slopes, gaze at the Snowy Sunrise, or bustle through a Winter Town! + p.small.muted by Karithina, Inventrix, and Midori88 + tr + td + .inventory_present_12.pull-right + h3 December Mystery Box + p Ooh... What could it be? All Habiticans who are subscribed during the month of December will receive the 2015 December Mystery Item Set! It will be revealed on the 23rd, so keep your eyes peeled. Thanks for supporting the site <3 + p.small.muted by Lemoness + tr + td + .head_special_gaymerx.pull-right + h3 GaymerX Armor + p In honor of Habitica's partnership with the GaymerX3 Conference (December 11-13, in downtown San Jose), the Rainbow Warrior set is available once again from the Rewards column! It will only be available until December 14th, so be sure to get it now. Plus, the Unconventional Armor set will be available at the conference, so don't forget to pick up a promo card if you attend! + h2 11/25/2015 - HABITICA THANKSGIVING! NOVEMBER SUBSCRIBER ITEM AND TURKEY PETS AND MOUNTS + tr + td + .npc_daniel.pull-right + h3 Happy Thanksgiving! + p It's Thanksgiving in Habitica! On this day Habiticans celebrate by spending time with loved ones, giving thanks, and riding their glorious turkeys into the magnificent sunset. Some of the NPCs are celebrating the occasion! + tr + td + .Pet-Turkey-Gilded.pull-right + h3 Turkey Pet and Mount! + p Those of you who weren't around last Thanksgiving have received an adorable Turkey Pet, and those of you who got a Turkey Pet last year have received a handsome Turkey Mount! Already got a Turkey Mount? You, my friend, have been gifted the rare and glittering Gilded Turkey Pet! + br + p Thank you for using Habitica - we really love you guys <3 + tr + td + .promo_mystery_201511.pull-right + h3 November Subscriber Items Revealed + p The November Subscriber Item Set has been revealed: the Wood Warrior Set! All November subscribers will receive the Log Crown and the Wooden Armor. You still have five days to subscribe and receive the item set! Thank you so much for your support - we really do rely on you to keep Habitica free to use and running smoothly. + p.small.muted by Lemoness + h2 11/19/2015 - SMALL iOS UPDATE AND HABITICA HIRING NEWS! + tr + td + h3 Habitica Hiring News + p Exciting news! Right now, Habitica is looking to add a senior full stack developer to our team, and what better place to look than our awesome community? + br + p If you’d like to apply, you should have experience as a lead developer, and be a JavaScript whiz who is familiar with MongoDB and Angular. Bonus points for familiarity with our tech stack! Passion for open source is, naturally, a must ;) + br + p Send your resume to jobs@habitica.com with your GitHub handle, Habitica username, and list of favorite online hangouts! Please also let us know whether or not you would be able to move to Los Angeles. We’re looking forward to hearing from you! + tr + td + h3 Small iOS App Update + p We've released a small iOS update, just to fix some bothersome bugs (including crashes), add a nice intro slide for new users, and make it more obvious how to invite your friends to your party. + br + p If you already reviewed the last version of the app, Apple has hidden it for this version, but you can automatically post the same review again by tapping “Write a review” and then just hitting "Send." Thank you very much for taking the time to share your thoughts with us! Posting and reposting reviews really helps us out. + p.small.muted by Viirus and Lemoness + h2 11/16/2015 - HABITICA STICKERS AND COSTUME CONTEST BADGES! + tr + td + .achievement-costumeContest2x.pull-right + h3 Costume Contest Badges + p We've awarded all the costume contest badges! Over the coming months, we'll be posting the costumes on our blog, so be sure to follow along. + br + p Important: if you submitted a photo but did NOT receive your badge, it probably means that we were unable to view your entry due to privacy restrictions or other issues. Email your photo to leslie@habitica.com and she will make sure that you get your badge! + br + p Thanks again to all the participants. We were very impressed by your creativity! + tr + td + .promo_habitica_sticker.pull-right + h3 Habitica Stickers + p In addition to our Habitica T-shirts, we are now also selling Habitica Stickers! Display Melior anywhere for extra motivation. + p.small.muted by Redphoenix and Sara Olson + h2 11/11/2015 - NOVEMBER PET QUEST, SHARE SUCCESS, AND HABITICA T-SHIRTS + tr + td + .Pet-Snake-Base.pull-right + h3 November Pet Quest + p There's a new pet quest in the Quest Shop! A slithering foe awaits you among the shimmering sand dunes. Can you defeat the Serpent of Distraction? If so, you'll get some slithering snake pets. + p.small.muted Art by EmeraldOx, Painter Prophet, and Lord Darkly + p.small.muted Writing by Daniel the Bard and felipena + tr + td + .achievement-triadbingo2x.pull-right + h3 Share Success + p Now you can share your success on social media when you hatch a pet, complete a quest, or more! (As always, your task details remain private.) Show off your victories to your friends and bask in some well-deserved praise. + p.small.muted by SabreCat and Lemoness + tr + td + .promo_habitica.pull-right(style='border-radius:25px;margin-left:1em') + h3 Habitica T-Shirts + p Exciting news - for the next three weeks, we are offering Habitica T-shirts via Teespring! Show your Habitica pride in purple or black. We are also offering an EU run for cheaper shipping to Europe! + br + p Whether you're getting them for yourself or as a holiday gift, we hope you enjoy these limited-run T-shirts! As always, thanks for supporting Habitica. + + h2 11/5/2015 - HUGE IOS UPDATE AND ANDROID MAILING LIST + tr + td + .promo_habitica.pull-right(style='border-radius:25px') + h3 iOS App Update! + p There's a huge new update to the iOS app! + br + p The iOS app is now out of beta with this update, which includes a complete redesign, an improved iPad version, and a host of new features such as: + br + ul + li Easy-to-read Streaks for your Dailies, helping you keep track of how many times in a row you have done a task + li The ability to manage and invite friends to your Party via the app + li Task Filtering - an easy way to filter between tasks to see whether they are due, what category you've tagged them with, and more + li A completely overhauled tutorial, including customized sample tasks for new users + li New colors that match the new Habitica logo and look + li Class icons and more information in the header + li 3D touch for iOS 9 + li Multitasking on the new iPads + li Spotlight Search on iOS 9 + li Localization - the app is now translated into Spanish, German, Danish, Czech, and Mandarin + li And more! + br + p As always, this update would not have been possible without our amazing open-source contributors. Thank you all so much! There are still many features that we plan to add in the future (including Challenges, Guilds, and task sorting), so stay tuned. + br + p If you like the app and the work that we've put into it, the best thank-you is to leave us a review. It really helps us out! That being said, we can't respond to reviews, so if you have a question or you're having trouble, the best thing to do is to email us at mobile@habitica.com, or go to Menu > Settings > Report a bug. Thanks so much for helping us improve! + p.small.muted by viirus, Sara Olson, Lemoness, Redbone, geistiona, SyntaxTerror, Caleyra, Kiwie, Mindmaster, Nightingowl, dallas.helton, veeveeraccoon, liskadvacetdva, DizqueDiego, azaroa, and theweirdgirlwithcatears + tr + td + h3 Android Mailing List + p For those of you anxious for news about the new native Android app, we've created a mailing list so that you can be notified about important updates for the Android app. You can sign up here! + br + p Our staff has been working very hard on it and testing out a new build each week, so progress is definitely advancing. When the beta is ready we will announce it on social media and on the site, but the mailing list is the easiest way to make sure you don't miss it! Thanks very much for your patience. + h2 11/3/2015 - NOVEMBER BACKGROUNDS AND ARMOIRE ITEMS, AND AUTO-EQUIP NEW GEAR + tr + td + .background_night_dunes.pull-right + h3 November Backgrounds + p There are three new avatar backgrounds in the Background Shop! Now your avatar can hop across the Floating Islands, bask in the Sunset Oasis, or walk peacefully though the Night Dunes! + p.small.muted by ghostfingers, Sooz, and Kiwibot + tr + td + .promo_enchanted_armoire_201511.pull-right + h3 New Items in the Enchanted Armoire + p There is new equipment in Enchanted Armoire, a 100 GP Reward in the Rewards Column which unlocks after you've attained Ultimate Gear! + br + p Click on the Enchanted Armoire for a random chance at special Equipment, including the Shepherd Set, Royal Set, and Blue Floppy Hat! It may also give you random XP or food items. We'll be adding new equipment to it during the first week of each month, but even when you've exhausted the current supply, you can keep clicking for a chance at food and XP. + br + p Now go spend all that accumulated Gold! May the Random Number Generator smile upon you... + p.small.muted by Lemoness and SabreCat + p.small.muted Art by Podcod and Starsystemic + tr + td + h3 Auto-Equip New Gear + p Now there's an easy way to control whether or not the new equipment that you buy is automatically equipped! Just go to the Equipment page on the website and click "auto-equip new gear." New players who are buying lots of gear may enjoy having this enabled, whereas more advanced players who have the perfect gear setup already may want to disable it. Have fun! + p.small.muted by locks + h2 10/31/2015 - BURNOUT IS DEFEATED! PLUS, LAST CHANCE FOR FALL FESTIVAL ITEMS + tr + td + .Pet-Wolf-Spooky.pull-right + h3 Last Chance for Fall Festival Items + p This is your last chance to get all Fall Festival items before they vanish! This includes Limited-Edition Outfits, Seasonal Shop purchases, Seasonal Edition Skins and Hair Colors, and yes, even Spooky Hatching Potions. Grab them all while you still can! + tr + td + span.Mount_Body_Phoenix-Base.pull-right + span.Mount_Head_Phoenix-Base.pull-right(style='margin:0') + h3 World Boss: Burnout is Defeated! + p Burnout has been defeated! All Habiticans have received rewards, including a phoenix pet and mount, assorted candies, and the Savior of the Flourishing Fields achievement. Well done! Here's how it happened: + br + p With a great, soft sigh, Burnout slowly releases the ardent energy that was fueling its fire. As the monster curls quietly into ashes, its stolen energy shimmers through the air, rejuvenating the Exhaust Spirits and returning them to their true forms. + br + p Ian, Daniel, and the Seasonal Sorceress cheer as Habiticans rush to greet them, and all the missing citizens of the Flourishing Fields embrace their friends and families. The final Exhaust Spirit transforms into the Joyful Reaper herself! + br + p "Look!" whispers @Baconsaur, as the ashes begin to glitter. Slowly, they resolve into hundreds of shining phoenixes! + br + p One of glowing birds alights on the Joyful Reaper's skeletal arm, and she grins at it. "It has been a long time since I've had the exquisite privilege to behold a phoenix in the Flourishing Fields," she says. "Although given recent occurrences, I must say, this is highly thematically appropriate!" + br + p Her tone sobers, although (naturally) her grin remains. "We're known for being hard-working here, but we are also known for our feasts and festivities. Rather ironic, I suppose, that as we strove to plan a spectacular party, we refused to permit ourselves any time for fun. We certainly won't make the same mistake twice!" + br + p She claps her hands. "Now - let's celebrate!" + p.small.muted by Lemoness, Baconsaur, Aiseant, and SabreCat + h2 10/30/2015 - HAPPY HABITOWEEN! MONSTER NPCS, AND LAST CHANCE FOR ALL FALL FESTIVAL ITEMS + tr + td + .promo_classes_fall_2015.pull-right + h3 Last Chance for Fall Festival Items + p This is your last chance to get all Fall Festival items before they vanish at the end of October 31st! This includes Limited-Edition Outfits, Seasonal Shop purchases, Seasonal Edition Skins and Hair Colors, and yes, even Spooky Hatching Potions. Grab them all while you still can! + tr + td + .promo_mystery_201510.pull-right + h3 Last Chance for Horned Goblin Set + p Reminder: this is the final day to subscribe and receive the Horned Goblin Item Set! If you want the Goblin Horns or the Goblin Tail, now's the time! + br + p Thanks so much for your supporting the site -- you're helping us keep Habitica alive. + tr + td + .npc_justin.pull-right + h3 Happy Habitoween! + p Burnout is nearly defeated, so what could be a better way to speed the celebration than to have some fun? In honor of Habitoween and defiance of the looming threat, all of the remaining NPCs have dressed up as monsters from the Flourishing Fields! Be sure to visit them on the site to admire their outfits. If only the three Exhaust Spirits could join them... + + h2 10/27/2015 - BURNOUT STRIKES AGAIN! PLUS, SPOOKY POTIONS VANISHING SOON + tr + td + .npc_daniel_broken.pull-right + h3 World Boss: Burnout Uses Exhaust Strike! + p Many Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you! + br + p This hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all! + br + p Late to the fight? Learn about Burnout and how to defeat World Bosses here. + tr + td + .Pet-Wolf-Spooky.pull-right + h3 Spooky Potions Vanishing Soon + p If you're hoping to collect all the Spooky Pets, be sure to do it soon. The Spooky Hatching Potions will disappear from the Market on November 1st! + br + p If you purchase Spooky Hatching Potions before November 1st but don't have a chance to use them, they will remain in your inventory. Be sure to stock up now, or you'll have to wait a whole year for them to return! + + h2 10/26/2015 - OCTOBER SUBSCRIBER ITEM REVEALED + tr + td + .promo_mystery_201510.pull-right + h3 October Subscriber Item: Horned Goblin! + p The October Subscriber Item has been revealed: the Horned Goblin Set! All October subscribers will receive the Goblin Horns and the Goblin Tail. You still have four days to subscribe and receive the item set! Thank you so much for your support - we really do rely on you to keep Habitica free to use and running smoothly. + p.small.muted by Lemoness + + h2 10/21/2015 - FROG PET QUEST, TO-DO SORTING FIX, AND SECOND WORLD BOSS EXHAUST STRIKE + tr + td + span.Mount_Body_Frog-Base.pull-right + span.Mount_Head_Frog-Base.pull-right(style='margin:0') + h3 Frog Pet Quest + p Deep in the Swamps of Stagnation, you find your path obstructed by debris... and an angry amphibian. Yuck! If you complete the Clutter Frog quest, you'll be rewarded with some princely Frog pets! + p.small.muted Art by starsystemic, RosemonkeyCT, Jon Arjinborn, and Breadstrings + p.small.muted Writing by Fluitare + tr + td + h3 To-Do Sorting Fix + p To-dos will now stay sorted when you drag and drop them! Often, To-Dos used to change their order unless you cleared your completed To-Dos on a regular basis. That should no longer be a problem. + p.small.muted by ikadzuchi and Alys + tr + td + .seasonalshop_broken.pull-right + h3 World Boss: Burnout Uses Exhaust Strike! + p Ahh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a sorrowful Exhaust Spirit! + br + p We have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time! + br + p Late to the fight? Learn about Burnout and how to defeat World Bosses here. + h2 10/14/2015 - JACK O'LANTERN PETS AND MOUNTS! WORLD BOSS EXHAUST STRIKE! + hr + tr + td + .Pet-JackOLantern-Base.pull-right + h3 Jack O'Lantern Pets and Mounts + p The Flourishing Fields are full of cute carved pumpkins - and it looks like one has followed you home! It must be frightened of Burnout and looking for an adventurer to protect it. + br + p Those of you who weren't around last Fall Festival have received a pet Jack-O-Lantern, and those of you who got one last year have received a Jack-O-Lantern Mount! Happy Fall Festival. + p.small.muted by Lemoness + tr + td + .npc_ian_broken.pull-right + h3 World Boss: Burnout Uses Exhaust Strike! + p Oh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit! + br + p Only defeating Burnout can break the spell and save our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again! + br + p Late to the fight? Learn about Burnout and how to defeat World Bosses here. + h2 10/8/2015 - WORLD BOSS REVEALED: BURNOUT! tr td diff --git a/website/views/shared/noscript.jade b/website/views/shared/noscript.jade new file mode 100644 index 0000000000..38319c1068 --- /dev/null +++ b/website/views/shared/noscript.jade @@ -0,0 +1,13 @@ +// For those who have JavaScript disabled +noscript + style. + div, footer { + display: none; + } + + h3=env.t('jsDisabledHeading') + img(src='/front/images/coding_by_phoneix_faerie.png', alt='Coding placeholder image') + p=env.t('jsDisabledText') + br + a.btn.btn-lg.btn-success(href='http://www.enable-javascript.com/', target='_blank') + =env.t('jsDisabledLink') diff --git a/website/views/shared/profiles/achievements.jade b/website/views/shared/profiles/achievements.jade index f302a7af06..075affc981 100644 --- a/website/views/shared/profiles/achievements.jade +++ b/website/views/shared/profiles/achievements.jade @@ -21,7 +21,7 @@ div(ng-if='::profile.backer.npc') hr div(ng-if='::profile.contributor.level || user._id == profile._id') - .achievement.achievement-firefox(ng-if='::profile.contributor.level') + .achievement.achievement-boot(ng-if='::profile.contributor.level') div(ng-class='::{muted: !profile.contributor.level}') h5 span.label.label-default(ng-if='::profile.contributor.level', class='label-contributor-{{::profile.contributor.level}}') {{::contribText(profile.contributor, profile.backer)}} @@ -120,9 +120,12 @@ div(ng-if='::profile.achievements.rebirths') h5(ng-if='::profile.achievements.rebirths == 1')=env.t('rebirthBegan') h5(ng-if='::profile.achievements.rebirths > 1') =env.t('rebirthText', {rebirths: "{{::profile.achievements.rebirths}}"}) - small + small(ng-if='::profile.achievements.rebirthLevel < 100') =env.t('rebirthOrb') | {{::profile.achievements.rebirthLevel}}. + small(ng-if='::profile.achievements.rebirthLevel >= 100') + =env.t('rebirthOrb100') + hr div(ng-if='::profile.achievements.veteran') @@ -226,11 +229,13 @@ div(ng-if='::profile.achievements.quests.burnout') =env.t('achievementBurnoutText') hr -div(ng-if='::profile.achievements.costumeContest') +div(ng-if='::profile.achievements.costumeContests') .achievement.achievement-costumeContest h5=env.t('costumeContest') - small - =env.t('costumeContestText') + small(ng-if='::profile.achievements.costumeContests === 1') + !=env.t('costumeContestText') + small(ng-if='::profile.achievements.costumeContests > 1') + !=env.t('costumeContestTextPlural', {number: "{{::profile.achievements.costumeContests}}"}) hr each card in ['greeting', 'thankyou', 'nye', 'valentine'] diff --git a/website/views/shared/tasks/edit/advanced_options.jade b/website/views/shared/tasks/edit/advanced_options.jade index 9c206c5766..d7a775fbaa 100644 --- a/website/views/shared/tasks/edit/advanced_options.jade +++ b/website/views/shared/tasks/edit/advanced_options.jade @@ -1,5 +1,6 @@ div(ng-if='::task.type!="reward"') button.advanced-options-toggle.option-title.mega(type='button', + ng-class='{active: task._advanced}', ng-click='task._advanced = !task._advanced', tooltip=env.t('expandCollapse')) =env.t('advancedOptions') diff --git a/website/views/shared/tasks/edit/tags.jade b/website/views/shared/tasks/edit/tags.jade index 697eae67c0..089aa0c408 100644 --- a/website/views/shared/tasks/edit/tags.jade +++ b/website/views/shared/tasks/edit/tags.jade @@ -1,5 +1,5 @@ fieldset.option-group(ng-if='!$state.includes("options.social.challenges")') - p.option-title.mega(ng-click='task._tags = !task._tags', tooltip=env.t('expandCollapse'))=env.t('tags') + p.option-title.mega(ng-class='{active: task._tags}', ng-click='task._tags = !task._tags', tooltip=env.t('expandCollapse'))=env.t('tags') label.checkbox(ng-repeat='tag in user.tags', ng-if='task._tags') input(type='checkbox', ng-model='task.tags[tag.id]') markdown(text='tag.name') diff --git a/website/views/shared/tasks/index.jade b/website/views/shared/tasks/index.jade index 79ab99d11b..5cc8d27f89 100644 --- a/website/views/shared/tasks/index.jade +++ b/website/views/shared/tasks/index.jade @@ -22,6 +22,9 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template") alert.alert-warning.dailiesRestingInInn(ng-if='list.type == "daily" && user.preferences.sleep && !$state.includes("options.social.challenges")') i.glyphicon.glyphicon-warning-sign   =env.t('dailiesRestingInInn') + + button.btn-block.btn.btn-lg.btn-success(ng-click='User.user.ops.sleep({})') + | {{env.t('innCheckOut')}} +taskColumnTabs('top') diff --git a/website/views/shared/tasks/meta_controls.jade b/website/views/shared/tasks/meta_controls.jade index e42210f240..733b37d23a 100644 --- a/website/views/shared/tasks/meta_controls.jade +++ b/website/views/shared/tasks/meta_controls.jade @@ -13,8 +13,9 @@ // Icons only available if you own the tasks (aka, hidden from challenge stats) span(ng-if='!obj._locked') - a(ng-click='pushTask(task,$index,"top")', tooltip=env.t('pushTaskToTop')) - span.glyphicon.glyphicon-open + a(ng-click='pushTask(task,$index,"top")', tooltip=env.t('pushTaskToTop'), ng-class="{'push-down': ctrlPressed}") + span(ng-hide="ctrlPressed").glyphicon.glyphicon-open + span(ng-show="ctrlPressed").glyphicon.glyphicon-save // a(ng-click='pushTask(task,$index,"bottom")', tooltip=env.t('pushTaskToBottom')) // span.glyphicon.glyphicon-import // // glyphicon-import or glyphicon-save or glyphicon-sort-by-attributes diff --git a/website/views/social/achievement.jade b/website/views/social/achievement.jade new file mode 100644 index 0000000000..982388c22c --- /dev/null +++ b/website/views/social/achievement.jade @@ -0,0 +1,9 @@ +extends ./layout + +block extraHead + - var socialPage = 'achievement' + - var socialTitle = 'Earned an Achievement!' + - var socialDescription = 'I earned a new Achievement on Habitica for working to improve my life!' + +block content + include ./landing-page diff --git a/website/views/social/hatch-pet.jade b/website/views/social/hatch-pet.jade new file mode 100644 index 0000000000..bf826c2af3 --- /dev/null +++ b/website/views/social/hatch-pet.jade @@ -0,0 +1,9 @@ +extends ./layout + +block extraHead + - var socialPage = 'hatch-pet' + - var socialTitle = 'New Pet!' + - var socialDescription = 'I worked hard and hatched a new pet! In Habitica, you earn cute companions as you accomplish real-world tasks.' + +block content + include ./landing-page diff --git a/website/views/social/landing-page.jade b/website/views/social/landing-page.jade new file mode 100644 index 0000000000..c2e9c935c9 --- /dev/null +++ b/website/views/social/landing-page.jade @@ -0,0 +1,29 @@ +.text-center + #intro(style='padding-bottom:3rem') + h1=env.t('imagine1') + ul.lead + li=env.t('landingCopy1') + li=env.t('landingCopy2') + li=env.t('landingCopy3', {userCount:'900,000'}) + .mobile-container + .row + .col-md-6 + .row + img.img-rendering-auto.center-block.img-responsive(src='https://d2afqr2xdmyzvu.cloudfront.net/front/images/intro.png') + .row + .avatar_variety.img-rendering-auto.center-block.img-responsive + .col-md-6 + +registrationForm + .row + a(ng-click='playButtonClick()')=env.t('alreadyHaveAccount') + .row + .presslogos + =env.t('featuredIn') + br + img(src='https://d2afqr2xdmyzvu.cloudfront.net/front/images/presslogos/lifehacker.png') + img(src='https://d2afqr2xdmyzvu.cloudfront.net/front/images/presslogos/nyt-logo.png') + img(src='https://d2afqr2xdmyzvu.cloudfront.net/front/images/presslogos/makeuseof.png') + img(src='https://d2afqr2xdmyzvu.cloudfront.net/front/images/presslogos/Forbes_logo.png') + img(src='https://d2afqr2xdmyzvu.cloudfront.net/front/images/presslogos/Cnetlogo.png') + img(src='https://d2afqr2xdmyzvu.cloudfront.net/front/images/presslogos/Fast-Company-logo.png') + img(src='https://d2afqr2xdmyzvu.cloudfront.net/front/images/presslogos/kickstarter-logo.png') diff --git a/website/views/social/layout.jade b/website/views/social/layout.jade new file mode 100644 index 0000000000..d5e2146cad --- /dev/null +++ b/website/views/social/layout.jade @@ -0,0 +1,43 @@ +include ../shared/mixins.jade + +//-Trick needed to pass 'env' to ./layout +block vars +doctype html +html(ng-app='habitrpg', ng-controller='RootCtrl') + head + block extraHead + title Welcome to Habitica! Your Life, the Role Playing Game + meta(charset='utf-8') + meta(name='viewport', content='width=device-width, maximum-scale=1') + meta(property='og:title', content=socialTitle) + meta(property='og:type', content='website') + meta(property='og:site_name', content='Habitica') + meta(property='og:image', content='https://s3.amazonaws.com/habitica-assets/assets/gryphon_logo_300x300.png') + meta(property='og:url', content='https://habitica.com/social/#{socialPage}') + meta(property='og:description', content=socialDescription) + meta(property='fb:app_id', content='128307497299777') + meta(name='twitter:title' content=socialTitle) + meta(name='twitter:card' content='summary') + meta(name='twitter:site' content='@habitica') + meta(name='twitter:image' content='https://s3.amazonaws.com/habitica-assets/assets/gryphon_logo.png') + meta(name='twitter:description' content=socialDescription) + meta(name='apple-itunes-app' content='app-id=994882113') + link(rel='canonical', href='', type='text/html') + link(rel='shortcut icon', href='/favicon.ico') + + link(href='//fonts.googleapis.com/css?family=Lato:400,700', rel='stylesheet', type='text/css') + link(rel='stylesheet', type='text/css', href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.4/css/bootstrap.min.css') + + script(type='text/javascript'). + window.env = !{JSON.stringify(env._.pick(env, env.clientVars))}; + != env.getManifestFiles("tmp_static_front") + + script(type='text/javascript', src='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.4/js/bootstrap.min.js') + script(type='text/javascript', src='https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.12.1/ui-bootstrap.min.js') + script(type='text/javascript', src='https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.12.1/ui-bootstrap-tpls.min.js') + + body(ng-controller='AuthCtrl') + include ../static/login-modal + include ../shared/mixins + .container + block content diff --git a/website/views/social/level-up.jade b/website/views/social/level-up.jade new file mode 100644 index 0000000000..a23e639e6f --- /dev/null +++ b/website/views/social/level-up.jade @@ -0,0 +1,9 @@ +extends ./layout + +block extraHead + - var socialPage = 'level-up' + - var socialTitle = 'Level Up!' + - var socialDescription = 'I earned a new level with my accomplishments! In Habitica, your avatar grows in strength as you improve your real-life habits.' + +block content + include ./landing-page diff --git a/website/views/social/raise-pet.jade b/website/views/social/raise-pet.jade new file mode 100644 index 0000000000..648475e643 --- /dev/null +++ b/website/views/social/raise-pet.jade @@ -0,0 +1,9 @@ +extends ./layout + +block extraHead + - var socialPage = 'raise-pet' + - var socialTitle = 'Raised a Pet into a Mount!' + - var socialDescription = 'I grew a pet into a trusty mount! In Habitica, collectible pets grow along with you as you advance your real-life goals.' + +block content + include ./landing-page diff --git a/website/views/social/unlock-quest.jade b/website/views/social/unlock-quest.jade new file mode 100644 index 0000000000..5dfa503e52 --- /dev/null +++ b/website/views/social/unlock-quest.jade @@ -0,0 +1,9 @@ +extends ./layout + +block extraHead + - var socialPage = 'unlock-quest' + - var socialTitle = 'Unlocked a Quest!' + - var socialDescription = 'I discovered a new Quest! In Habitica, you can battle fearsome monsters and devious villains using your real-life productivity.' + +block content + include ./landing-page diff --git a/website/views/social/won-challenge.jade b/website/views/social/won-challenge.jade new file mode 100644 index 0000000000..2239d91136 --- /dev/null +++ b/website/views/social/won-challenge.jade @@ -0,0 +1,9 @@ +extends ./layout + +block extraHead + - var socialPage = 'won-challenge' + - var socialTitle = 'Won a Challenge!' + - var socialDescription = 'I stood out from the pack and won a Challenge! In Habitica, users can challenge one another to accomplish goals in all areas of life.' + +block content + include ./landing-page diff --git a/website/views/static/apps.jade b/website/views/static/apps.jade new file mode 100644 index 0000000000..e71fef87b2 --- /dev/null +++ b/website/views/static/apps.jade @@ -0,0 +1,18 @@ +extends ./layout + +block vars + - var layoutEnv = env + +block title + title Habitica |  + =env.t('apps') + +block content + .lead + =env.t('checkOutMobileApps') + .row.text-center + .promo_habitica(style='border-radius:25px;margin:auto') + br + .row.text-center + a(href='https://play.google.com/store/apps/details?id=com.habitrpg.android.habitica&utm_source=global_co&utm_medium=prtnr&utm_content=Mar2515&utm_campaign=PartBadge&pcampaignid=MKT-AC-global-none-all-co-pr-py-PartBadges-Oct1515-1', style='display:inline-block;overflow:hidden;background:url(https://developer.android.com/images/brand/en_app_rgb_wo_45.png) no-repeat;background-size:100%;width:129px;height:45px;margin-left:20px') + a(href='https://geo.itunes.apple.com/us/app/habitica/id994882113?mt=8', style='display:inline-block;overflow:hidden;background:url(http://linkmaker.itunes.apple.com/images/badges/en-us/badge_appstore-lrg.svg#svgView) no-repeat;background-size:100%;width:152px;height:45px;margin-left:20px') diff --git a/website/views/static/front.jade b/website/views/static/front.jade index e7aa7a7242..30b2eabda4 100644 --- a/website/views/static/front.jade +++ b/website/views/static/front.jade @@ -2,9 +2,6 @@ doctype html html(ng-app='habitrpg', ng-controller='RootCtrl') head meta(charset='utf-8') - script(type='text/javascript'). - window.env = !{JSON.stringify(env._.pick(env, env.clientVars))}; - != env.getManifestFiles("tmp_static_front") link(href='//fonts.googleapis.com/css?family=Lato:400,700', rel='stylesheet', type='text/css') title Habitica | Your Life the Role Playing Game meta(name='description', content='') @@ -12,11 +9,13 @@ html(ng-app='habitrpg', ng-controller='RootCtrl') meta(name='author', content='') meta(name='geo.placename', content='') meta(name='viewport', content='width=device-width, maximum-scale=1') - meta(property='og:title', content='') - meta(property='og:description', content='') - meta(property='og:url', content='') - meta(property='og:image', content='') - meta(property='og:site_name', content='') + meta(property='og:url', content='https://habitica.com/static/front') + meta(property='og:type', content='website') + meta(property='og:title', content='Habitica: Your Life the Role Playing Game') + meta(property='og:description', content='Habitica is a free habit building and productivity app that treats your real life like a game. With in-game rewards and punishments to motivate you and a strong social network to inspire you, Habitica can help you achieve your goals to become healthy, hard-working, and happy.') + meta(property='og:site_name', content='Habitica') + meta(property='og:image', content='https://s3.amazonaws.com/habitica-assets/assets/gryphon_logo_300x300.png') + meta(property='fb:app_id', content='128307497299777') meta(name='twitter:card' content='summary') meta(name='twitter:site' content='@habitica') meta(name='twitter:title' content='Habitica: Your Life the Role Playing Game') @@ -42,6 +41,11 @@ html(ng-app='habitrpg', ng-controller='RootCtrl') include ../shared/avatar/index include ../shared/mixins include ../shared/modals/members + + noscript.banner= env.t('jsDisabledHeadingFull') + br + a(href='http://www.enable-javascript.com/', target='_blank')= env.t('jsDisabledLink') + .mobile-container div(ng-init='Analytics.track({"hitType":"pageview","eventCategory":"page","eventAction":"landing page","page":"/static/front"});') header#header @@ -76,7 +80,7 @@ html(ng-app='habitrpg', ng-controller='RootCtrl') img.img-rendering-auto.center-block.img-responsive(src='https://d2afqr2xdmyzvu.cloudfront.net/front/images/intro.png') // insert intro images .introcall.bg-success - h4= env.t('joinOthers') + h4= env.t('joinOthers', {userCount:'900,000'}) small button#play-btn.btn.btn-primary.btn-lg.gamifybutton(ng-click='playButtonClick()')= env.t('free') .presslogos.text-center @@ -586,8 +590,7 @@ html(ng-app='habitrpg', ng-controller='RootCtrl') #footercall .container-fluid .row - .col-md-10 - h3= env.t('joinOthers') + h3= env.t('joinOthers', {userCount:'900,000'}) .row .col-md-4.col-md-offset-4 button.btn.btn-primary.btn-lg.btn-block(ng-click='playButtonClick()')= env.t('free') diff --git a/website/views/static/login-modal.jade b/website/views/static/login-modal.jade index b60f1bafe5..766bfc11f4 100644 --- a/website/views/static/login-modal.jade +++ b/website/views/static/login-modal.jade @@ -1,3 +1,26 @@ +mixin registrationForm + form#registrationForm(ng-submit='register()', name='registrationForm') + .form-group + input.form-control(type='text', ng-model='registerVals.username', placeholder=env.t('username'), spellcheck='false', required) + .form-group + input.form-control(type='email', ng-model='registerVals.email', placeholder=env.t('email'), required) + .form-group + input.form-control(type='password', ng-model='registerVals.password', placeholder=env.t('password'), required) + .form-group + input.form-control(type='password', ng-model='registerVals.confirmPassword', placeholder=env.t('passConfirm'), required) + .form-group + small + =env.t('accept1Terms') + |  + a(href='/static/terms' target='_blank')=env.t('terms') + |  + =env.t('accept2Terms') + |  + a(href='/static/privacy' target='_blank')=env.t('privacy') + | . + .form-group + input.btn.btn-block.btn-lg.btn-success(type='submit', ng-disabled='registrationForm.$invalid || registrationInProgress', value=env.t('getStartedNow')) + script(id='modals/login.html', type='text/ng-template') .modal-header button.close(type='button', ng-click='$close()') × @@ -45,24 +68,4 @@ script(id='modals/login.html', type='text/ng-template') input.btn.btn-default(type='submit', value=env.t('submit')) tab(heading=env.t('register')) - form#registrationForm(ng-submit='register()', name='registrationForm') - .form-group - input.form-control(type='text', ng-model='registerVals.username', placeholder=env.t('username'), spellcheck='false', required) - .form-group - input.form-control(type='email', ng-model='registerVals.email', placeholder=env.t('email'), required) - .form-group - input.form-control(type='password', ng-model='registerVals.password', placeholder=env.t('password'), required) - .form-group - input.form-control(type='password', ng-model='registerVals.confirmPassword', placeholder=env.t('passConfirm'), required) - .form-group - small - =env.t('accept1Terms') - |  - a(href='/static/terms' target='_blank')=env.t('terms') - |  - =env.t('accept2Terms') - |  - a(href='/static/privacy' target='_blank')=env.t('privacy') - | . - .form-group - input.btn.btn-block.btn-lg.btn-primary(type='submit', ng-disabled='registrationForm.$invalid || registrationInProgress', value=env.t('register')) + +registrationForm diff --git a/website/views/static/overview.jade b/website/views/static/overview.jade new file mode 100644 index 0000000000..c66fcce3b7 --- /dev/null +++ b/website/views/static/overview.jade @@ -0,0 +1,23 @@ +extends ./layout +//-Trick needed to pass 'env' to ./layout +block vars + - var layoutEnv = env + +block title + title=env.t('overview') + +block content + .row + .col-md-12 + .page-header + h1=env.t('overview') + p + =env.t('needTips') + + - var stepsNum = ['1', '2', '3'] + - for step in stepsNum + h3=env.t('step'+step) + p + !=marked(env.t('webStep'+step+'Text')) + hr + !=marked(env.t('overviewQuestions')) diff --git a/website/views/static/press-kit.jade b/website/views/static/press-kit.jade index 1eb0ac9bf9..01c177c096 100644 --- a/website/views/static/press-kit.jade +++ b/website/views/static/press-kit.jade @@ -19,7 +19,7 @@ block content p= env.t('presskitDownload') |   a.btn.btn-success(href='/presskit/presskit.zip') presskit.zip - - var imgs = ['habitrpg_pixel', 'HabitRPGdevices', 'Market Sample Screen', 'Challenges Sample Screen', 'Equipment Sample Screen', 'Guilds Sample Screen', 'HabitRPGPromoPostCard6', 'HabitRPGPromoThin', 'Laundromancer_by_Arcosine', 'promo mobile inventorySTILL1', 'promo mobile inventorySTILL2', 'PROMOdevices2', 'SnackLessMonster_by_Arcosine', 'stag_battle_by_leephon', 'stagnant_dishes_by_kiwibot', 'vice_reborn_by_baconsaur'] + - var imgs = ['Habitica Text Logo', 'Habitica Logo Promo', 'Habitica Gryphon', 'Dread Drag\'on of Dilatory', 'Market Sample Screen', 'Challenges Sample Screen', 'Equipment Sample Screen', 'Guilds Sample Screen', 'HabiticaPromoThin', 'Laundromancer', 'Tasks Page', 'SnackLess Monster', 'Battling the Ghost Stag', 'Stagnant Dishes Boss', 'Necro-Vice'] //-#carousel.carousel.slide(data-ride='carousel') ol.carousel-indicators