docs: function(key, val, options) {
  
              if (!this.intialized){
                  return Backbone.Model.prototype.set.call(this,key,val,options);
              }
  
              //Allow for either key/value or object to be sent as setter
              if (key == null) return this;
              var attrs;
              if (typeof key === 'object') {
                  attrs = key; options = val;
              } else {
                  (attrs = {})[key] = val;
              }
  
              options = options || {};
  
              var changed = {};
              var data = this.attributes;
  
  
              this.update();
  
              //Loop through the new object and set new attributes on the player
              for (var key in attrs){
  
                  if (key === "angle"){
                      attrs[key] = attrs[key].toPrecision(1);
                  }
  
                  if (data[key] !== attrs[key]){
                      //Ignore position changes if easing boolean is passed through options
                      if (!options.easing || (key !== "posX" && key !== "posY")){
                          data[key] = changed[key] = attrs[key];
                      }
                  }
              }
  
              //If easing option passed in, ease this player towards new position values
              if (options.easing){
                  this.ease(attrs.posX, attrs.posY);
              }
  
              this.changed = changed;
  
              return this;
          }