docs: function (schema) {
  		if (!schema.key || schema.key === 'base' || !Array.isArray(schema.fields)) {
  			return null;
  			// throw exception?
  		}
  		// store it for later reference
  		Schemas[schema.key] = schema;
  		// add this schema to the NPC object so we can use it as a constructor
  		// this could overwrite is that ok?
  		const Base = NPC[schema.key] = function () {
  			// in case we add something to NPC constructor that we need to call?
  			// NPC.Base.call(this);
  		};
  		Base.prototype = new NPC.Base();
  		Base.prototype.constructor = Base;
  		Base.prototype.schema = schema.key;
  		Base.prototype.fields = [];
  		Base.prototype.helpers = {};
  		
  		// initialize schema properties...
  		schema.fields.forEach((f) => {
  			let default_ = null;
  			switch (f.type) {
  				case 'string':
  				case 'text':
  					default_ = '';
  					break;
  				case 'array':
  					default_ = [];
  					break;
  				case 'number':
  				case 'modifier':
  					default_ = 0;
  					break;
  				case undefined:
  					// ?
  					break;
  			}
  			Base.prototype.fields[f.key] = default_;
  		});
  		
  		if (!schema.helpers || typeof schema.helpers !== 'object') { return; }
  		const helpers = Object.keys(schema.helpers);
  		helpers.forEach((h) => {
  			// if (typeof schema.helpers[h] === 'function') {
  			//	Base.prototype.helpers[h] = schema.helpers[h];
  			// }
  			// create a function from the array
  			Base.prototype.helpers[h] = new Function(...schema.helpers[h]);
  		});
  	}