Ok so this answers 90% of my questions as now I can give XP via the DMG formulas for basically anything.
The final peice of this which is still on topic, just shifts it a tiny bit, is the following code - which I am sure based on this discussion there is a better way to do it, yes I have overwritten some things but keep in mind this is nothing more then a proof of concept.
This all coincides with me trying to do a FFT or a fire emblem type of xp thing where actions in battle give you XP, so consider the following for a split second:
Game_Actor.prototype.expForLevel = function(level) {
return 100;
};
Game_Actor.prototype.currentLevelExp = function() {
return 0;
};
Game_Actor.prototype.changeExp = function(exp, show) {
this._exp[this._classId] = Math.max(exp, 0);
var lastLevel = this._level;
var lastSkills = this.skills();
while (!this.isMaxLevel() && this.currentExp() >= this.nextLevelExp()) {
this.levelUp();
this.changeExp(this.currentExp() - 100);
}
while (this.currentExp() < this.currentLevelExp()) {
this.levelDown();
}
if (show && this._level > lastLevel) {
this.displayLevelUp(this.findNewSkills(lastSkills));
}
this.refresh();
};
What I am trying to do here is say you need 100 xp for each level regardless of level and at the gain of each level we subtract your current exp from 100, so imagine you are rewarded 875 exp, well with this logic you gain 8 levels and have 75 exp towards your ninth level gain. (the goal is that if you are rewarded 100 exp then your current level exp goes back to 0 instead of staying 100)
I wonder, if this is even required or if there is a simpler way to go about this, as it stands should you gain -800 exp you don't loose any levels, which im not sure if thats a good thing or a bad thing given that your currentLevelExp is 0 and you next level exp is 100 (always 100, you could be level 80 and you still only need from 100 xp to gain a level)
Now this would break any existing exp based scripts and disables the use of the exp charts in game.
The question is, is this even required, is there a way to set this up in the database or some other way?