"Warning: this topic has not been posted in for at least 120 days. Unless you're sure you want to reply, please consider starting a new topic." - Ouch!
I finally finished my TNL calculations; here's what I 've got:
TNL(Lv+1) = TNL(Lv) + D + Floor[P x Q x R]
P = (Lv - F), Q = (Lv + F + 3) & TNL(0) := 0
So it may look bad (better than before though) but it is simple when written out. All that is needed to calculate TNL is a set of 3 parameters per character:
F = Characters 1st Level (As defined in the ROM)
D = The 1st Difference (Also from ROM data, D = 2nd ROM TNL - 1st ROM TNL)
R = Readjustment Parameter (As determined via error minimization)
The parameters for Dk. Cecil are here as an example:
F=10, D=255, R = 1.853 (Note: 1.379 < R < 1.861 for all characters)
As it is programmed the TNL value for the current level is read at level-up (or join) and carried around in the RAM. My formula calculates the appropriate difference which then is added to the current TNL value to yield the next one.
This is where my expertiese ends. I've made an Excel (2003) sheet that has a table of all my calculated values, the parameters, the original values from the ROM, the error, and a calculator with a character/level select. On the calculator sheet I've written out my poor (and incorrect) attempt to "code" the formula in ASM. I included how I'd write it in C if I had to break them out into the same steps. Unfortunately it is just a little too large to post - so instead attached is a .CSV with just data. I'll update this post with a dropbox link (or similar) later on.
Have a look; let me know what you think. One problem I can imagine would be using 3-place decimals - but you need all of them for accurate calculations. (a good amount of the values are less than 50 off from the actual) The results of the example calculation shown in Excel are:
Dk. Cecil @ Lv 44 & Gains Lv up to 45
ROM / Calc. TNL 60555 / 60543
If this can be implemented it will allow a character at any level (even though I use the original 1st level as a seed value) - but with this I can imagine throwing out shadow characters all together. (eventually - need to deal with equipment, stats, etc.) The only thing needed would be code to read Cecil's current level and adjust the incoming member based on that.
It still came out long...but math is tricky. Now that my life does not consist of extended illness and constant programming/data analysis I plan to be back around more so I can do it for fun instead of as a full time job. Questions/comments as always are encouraged.

Excel Calculator:
http://filehost.flamingfiles.com/53d321dc2da2e - Let me know if this works for everyone, otherwise let me know and I'll post it elsewhere
