News: 11 March 2016 - Forum Rules
Current Moderators - DarkSol, KingMike, MathOnNapkins, Azkadellia, Danke

Author Topic: Chrono Trigger (SNES, headered ROM) Level Up stats  (Read 6169 times)

Edea

  • Jr. Member
  • **
  • Posts: 55
    • View Profile
Chrono Trigger (SNES, headered ROM) Level Up stats
« on: May 27, 2012, 07:15:23 pm »
I...think I found them (non-HP and MP, those are different).  I noticed this wasn't in Geiger's docs, so I was hoping I could get someone to verify these for me.

Location Start:  $CC/25FA is Crono's Power mod, I think (For my headered NA ROM in a Hex Editor, it's $c27fa)

Values:

Code: [Select]
        Power  Stamina Speed Hit% Evade Magic M.Def
Crono:   140     165     0    30    38    42   160
Marle:    30      70     0    30    36    90   172
Lucca:    28      80     0    42    32   100   168
Robo:    160     178     0    42    30    52   130
Frog:    130     160     0    32    42    52   163
Ayla:    150     172     0    72    80    30   152
Magus:   120     100     0    78    66   113   175

HEX VERSION
-------------------------------------------------------------
Crono:  8C A5 00 1E 26 2A A0
Marle:  1E 46 00 1E 24 5A AC
Lucca:  1C 50 00 2A 20 64 A8
Robo:   A0 B2 00 2A 1E 34 82
Frog:   82 A0 00 20 2A 34 A3
Ayla:   96 AC 00 48 50 1E 98
Magus:  78 64 00 4E 42 71 AF

As for how they work, I believe that for every 100 actual points to a stat, you see a 1 point increase to the stat in the Main menu (so the statistically relevant stat gain is 100 points, and anything on that table that accrues at a rate faster than 100 is guaranteed to go up at least 1 point every level, if not more).  Looking at this, it's now a lot easier to explain certain strange level-up behaviors, like Crono's Magic Defense:

Total bonus at level 2: 160 (+1 to Base)
Total bonus at level 3: 320 (+3 to Base)
Total bonus at level 4: 480 (+4 to Base)
Total bonus at level 5: 640 (+6 to Base)
Total bonus at level 6: 800 (+8 to Base)
Total bonus at level 7: 960 (+9 to Base)

To the player this looks like increases of +1/+2/+1/+2/+2/+1, which doesn't look like it follows much of a pattern.  Also, these totals are added to a 'Base' stat (Geiger documented these; go to the 'Character Stats' location in the notes and look for the values immediately proceeding the long chains of $FF.  Those are the Base stats for each character).

HP and MP are incremented with more routine, point-for-point amounts; Crono's level 2 HP increase is at $CC/258B, and his level 2 MP increase is at $CC/25C3.  However, I'm not sure yet exactly how all of those are stored (I couldn't tell you where Marle's HP or MP increases were, for example); if someone else wants to look into that please post the results of your search here.

Apologies if this is already common knowledge; I just couldn't find this information anywhere, so I went rooting around for it myself.  Hopefully someone else finds this useful (assuming it's correct; I -believe- it is, given what I traced).  Also, it does indeed seem like you can make Speed go up with level (though I haven't looked anywhere for that stat cap of 16).

Vehek

  • Full Member
  • ***
  • Posts: 178
    • View Profile
Re: Chrono Trigger (SNES, headered ROM) Level Up stats
« Reply #1 on: May 27, 2012, 07:36:18 pm »
What you have is mostly correct.

Quote
However, I'm not sure yet exactly how all of those are stored (I couldn't tell you where Marle's HP or MP increases were, for example)
They actually start at $CC/258A and $CC25C2. The way they work is "Max level for this increase, amount to increase by". There are four of these per character, so each PC's HP growth data takes up 8 bytes.

Quote
Also, it does indeed seem like you can make Speed go up with level (though I haven't looked anywhere for that stat cap of 16).
When I investigated these stats a few years ago, there was no sign of anything that would load the "speed" part of the stat growth data.

Edea

  • Jr. Member
  • **
  • Posts: 55
    • View Profile
Re: Chrono Trigger (SNES, headered ROM) Level Up stats
« Reply #2 on: May 27, 2012, 08:11:24 pm »
Ah!  Thanks for the HP and MP info.  Is there a place where this is documented online?  Couldn't find this anywhere, even though significantly more intricate code/data like event sequences and map tiles have already been thoroughly investigated (I mean Temporal Flux is something that precious few other games will -ever- get).  It really did surprise me :/.

KingMike

  • Forum Moderator
  • Hero Member
  • *****
  • Posts: 6928
  • *sigh* A changed avatar. Big deal.
    • View Profile
Re: Chrono Trigger (SNES, headered ROM) Level Up stats
« Reply #3 on: May 27, 2012, 09:16:41 pm »
It's been some time since I played Chrono Trigger, but I recall Speed being a constant stat per character (so the only way to permanently raise it is by using Speed Tabs. Well, aside from one cutscene where Robo gets a +3 boost).
Seems reasonable, since I thought the Speed stat controls the ATB gauge, so giving the player too much opportunity to raise it could un-balance the game.

Or maybe I'm thinking of Mario RPG, I'm pretty sure Speed was also essentially constant in that game as well.
"My watch says 30 chickens" Google, 2018

Mauron

  • Submission Reviewer
  • Hero Member
  • *****
  • Posts: 540
    • View Profile
Re: Chrono Trigger (SNES, headered ROM) Level Up stats
« Reply #4 on: May 27, 2012, 09:38:31 pm »
I last looked at this earlier this year, and the blank value that would relate to speed is never loaded. An ASM hack would be possible, but the byte is skipped currently.
Mauron wuz here.

Edea

  • Jr. Member
  • **
  • Posts: 55
    • View Profile
Re: Chrono Trigger (SNES, headered ROM) Level Up stats
« Reply #5 on: May 27, 2012, 10:05:26 pm »
It's been some time since I played Chrono Trigger, but I recall Speed being a constant stat per character (so the only way to permanently raise it is by using Speed Tabs. Well, aside from one cutscene where Robo gets a +3 boost).
Seems reasonable, since I thought the Speed stat controls the ATB gauge, so giving the player too much opportunity to raise it could un-balance the game.

Or maybe I'm thinking of Mario RPG, I'm pretty sure Speed was also essentially constant in that game as well.

Yep, it's constant in Chrono Trigger as well.  I think a Tab item actually adds 100 of those 'invisible' points to your current 'stat total,' for whatever that item ID is scripted to edit (Power, Magic, or Speed), but it's essentially the same since the results on the player's end are identical.  On top of that, Speed only goes up to 16 in default Chrono Trigger; it's painfully easy to get everyone's Speed maxed out in only a couple of playthroughs through the Tab items/Atropos's Ribbon.

Also...ahhh, so there's no code to load the Speed stat increase even though the byte's present, guess that's not as easy as it looks.

I was mainly doing this because I wanted to make Lucca's and Marle's Hit% actually sizable compared to the other chars without frontloading them at early levels, since the latter makes their gun/bow attacks ridiculously powerful due to the formula they use (I guess I could also find out where in the code the game basically says 'If you're Lucca or Marle, branch' and get rid of it so everyone uses the Power formula, but I like the girls using Hit%).

May 31, 2012, 06:33:06 pm - (Auto Merged - Double Posts are not allowed before 7 days.)
I hope it's been long enough to post again, sorry if it hasn't :/

Going to go ahead and put up the code for Robo's (and I presume Crono/Magus/Frog's) weapon attack formula.  This was another 'Unknown' section in Geiger's docs, so I had to stumble on it alone.  I'd really appreciate verification for this (and, if possible, links to other docs that have some of the data Geiger's is missing, I dunno if/where those exist since Geiger's offset list is quite extensive).

Code: [Select]
-----------------------------------------------------------------------------------------------------------------------------------------------------
$C2/91EB A9 05       LDA #$05                A:0006 X:0006 Y:0000  ***Loads 5 into the accumulator.***
-----------------------------------------------------------------------------------------------------------------------------------------------------
$C2/91ED 8F 02 42 00 STA $004202[$00:4202]   A:0005 X:0006 Y:0000  This stores 5 as a multiplicand. 
$C2/91F1 AD B5 0D    LDA $0DB5  [$7E:0DB5]   A:0005 X:0006 Y:0000  Loads the Terra Arm's Weapon Power ($96, or 150) into the accumulator.
$C2/91F4 8F 03 42 00 STA $004203[$00:4203]   A:0096 X:0006 Y:0000  This stores the Terra Arm's Weapon Power as a multiplier.
$C2/91F8 EB          XBA                     A:0096 X:0006 Y:0000  (Byte swap, 0096 becomes 9600)
$C2/91F9 EA          NOP                     A:9600 X:0006 Y:0000  Don't do anything.
$C2/91FA C2 20       REP #$20                A:9600 X:0006 Y:0000  (Reset the accumulator register size to 16 bit)
$C2/91FC AF 16 42 00 LDA $004216[$00:4216]   A:9600 X:0006 Y:0000  Loads the result of 5 * Terra Arm's Weapon Power. 
$C2/9200 85 00       STA $00    [$00:0000]   A:02EE X:0006 Y:0000  Stores $2EE from the accumulator to temporary placeholder ($00:0000)
$C2/9202 E2 20       SEP #$20                A:02EE X:0006 Y:0000  (Sets the accumulator register size to 8 bit)
-----------------------------------------------------------------------------------------------------------------------------------------------------
$C2/9204 A9 0C       LDA #$0C                A:02EE X:0006 Y:0000  ***Loads 12 into the accumulator.***
-----------------------------------------------------------------------------------------------------------------------------------------------------
$C2/9206 8F 02 42 00 STA $004202[$00:4202]   A:020C X:0006 Y:0000  This stores 12 as a multiplicand.
$C2/920A AD 1C 9B    LDA $9B1C  [$7E:9B1C]   A:020C X:0006 Y:0000  Loads Robo's current Power score (= RawPower/100, truncated; All that was done
elsewhere in the code.  In this case, Robo's Power is 99).
$C2/920D 8F 03 42 00 STA $004203[$00:4203]   A:0263 X:0006 Y:0000  This stores Robo's current Power as a multiplier.
$C2/9211 EA          NOP                     A:0263 X:0006 Y:0000  Don't do anything.
$C2/9212 C2 21       REP #$21                A:0263 X:0006 Y:0000  (Reset accumulator register size to 16 bit and resets the carry flag)
$C2/9214 A5 00       LDA $00    [$00:0000]   A:0263 X:0006 Y:0000  Loads what's been sitting at $00:0000, which is $2EE (5*Weapon Power)
$C2/9216 6F 16 42 00 ADC $004216[$00:4216]   A:02EE X:0006 Y:0000  Adds the result of (12*Robo's Power) to what's currently sitting in
        the accumulator, which is (5*Weapon Power).
$C2/921A 8F 04 42 00 STA $004204[$00:4204]   A:0792 X:0006 Y:0000  Stores the result, $0792, as a dividend. 
$C2/921E E2 20       SEP #$20                A:0792 X:0006 Y:0000  (Sets the accumulator register size to 8 bit)
-----------------------------------------------------------------------------------------------------------------------------------------------------
$C2/9220 A9 09       LDA #$09                A:0792 X:0006 Y:0000  ***Loads 9 into the accumulator***
-----------------------------------------------------------------------------------------------------------------------------------------------------
$C2/9222 60          RTS                     A:0709 X:0006 Y:0000  Leaves the multiplication subroutine.

$C2/91B7 8F 06 42 00 STA $004206[$00:4206]   A:0709 X:0006 Y:0000  This stores 9 as a divisor, but I thought that was ($00:4205)?
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
$C2/91BB AD 1D 9B    LDA $9B1D  [$7E:9B1D]   A:0709 X:0006 Y:0000  (Loads 7E:9B1D into the accumulator)
$C2/91BE 18          CLC                     A:0763 X:0006 Y:0000  (clears the carry flag)
$C2/91BF 6D B6 0D    ADC $0DB6  [$7E:0DB6]   A:0763 X:0006 Y:0000  Adds $75 (or whatever's in $7E:0DB6) to the accumulator.
$C2/91C2 90 02       BCC $02    [$91C6]      A:07D8 X:0006 Y:0000  Branch if carry is clear (it is, D8 is still an 8-bit result) to $C2/91C6.
$C2/91C6 8D 24 9B    STA $9B24  [$7E:9B24]   A:07D8 X:0006 Y:0000  Store $D8 to $7E:9B24
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
$C2/91C9 AF 14 42 00 LDA $004214[$00:4214]   A:07D8 X:0006 Y:0000  Loads the result of $0792/$09 to the accumulator ($D7, or 215, the expected
attack output).
$C2/91CD AA          TAX                     A:07D7 X:0006 Y:0000  Transfers this result to X.


12/9 = 4/3

4/3*Power + 5/9*Weapon Level, checks out.

Location in Geiger's Docs:
028C75 0299C9 CODE N Unknown routines 2004.06.17

I'll edit this post once I've gotten a hold of Lucca/Marle's and Ayla's routines.  Still haven't found where the code checks to see if you're the correct character for the given routine yet (I'm positive someone else around here has that info already, CT's been gutted so thoroughly; would be much obliged.)
« Last Edit: May 31, 2012, 06:33:06 pm by Edea »

Edea

  • Jr. Member
  • **
  • Posts: 55
    • View Profile
Re: Chrono Trigger (SNES, headered ROM) Level Up stats
« Reply #6 on: June 06, 2012, 03:27:04 pm »
Alright, here's the other basic attack routines, along with Ayla's substitute weapon values (this is how she gains AtkPwr upon levelling up).


Code: [Select]
---------------------------------------------------------------------------------------------------------------------------
ROUTINE TWO: THE SHOOTERS (Marle, Lucca)
FORMULA: (2*(Weapon Power + Hit))/3
CODE:
---------------------------------------------------------------------------------------------------------------------------
$C2/91AD AD 90 9A    LDA $9A90  [$7E:9A90]   A:0014 X:00FF Y:0000 D:0000 DB:7E S:0A74 P:eNvMXdizc HC:0344 VC:253 FC:15 I:00
$C2/91B0 29 07       AND #$07                A:0002 X:00FF Y:0000 D:0000 DB:7E S:0A74 P:envMXdizc HC:0376 VC:253 FC:15 I:00
$C2/91B2 0A          ASL A                   A:0002 X:00FF Y:0000 D:0000 DB:7E S:0A74 P:envMXdizc HC:0394 VC:253 FC:15 I:00
$C2/91B3 AA          TAX                     A:0004 X:00FF Y:0000 D:0000 DB:7E S:0A74 P:envMXdizc HC:0412 VC:253 FC:15 I:00
$C2/91B4 FC DB 91    JSR ($91DB,x)[$C2:9223] A:0004 X:0004 Y:0000 D:0000 DB:7E S:0A74 P:envMXdizc HC:0430 VC:253 FC:15 I:00
(*This JSR goes to an array located at C2/91DB, 2 byte pointers for each character.  If the result of the LDA instruction
  at the top is 1 or 2, you'll get the pointer pair "23 92," leading to the code for Routine 2.)

$C2/9223 64 01       STZ $01    [$00:0001]   A:0004 X:0004 Y:0000 D:0000 DB:7E S:0A72 P:envMXdizc HC:0482 VC:253 FC:15 I:00
$C2/9225 AD B5 0D    LDA $0DB5  [$7E:0DB5]   A:0004 X:0004 Y:0000 D:0000 DB:7E S:0A72 P:envMXdizc HC:0508 VC:253 FC:15 I:00
$C2/9228 85 00       STA $00    [$00:0000]   A:00FA X:0004 Y:0000 D:0000 DB:7E S:0A72 P:eNvMXdizc HC:0540 VC:253 FC:15 I:00
$C2/922A 7B          TDC                     A:00FA X:0004 Y:0000 D:0000 DB:7E S:0A72 P:eNvMXdizc HC:0606 VC:253 FC:15 I:00
$C2/922B AD 20 9B    LDA $9B20  [$7E:9B20]   A:0000 X:0004 Y:0000 D:0000 DB:7E S:0A72 P:envMXdiZc HC:0624 VC:253 FC:15 I:00
$C2/922E C2 21       REP #$21                A:0063 X:0004 Y:0000 D:0000 DB:7E S:0A72 P:envMXdizc HC:0656 VC:253 FC:15 I:00
$C2/9230 65 00       ADC $00    [$00:0000]   A:0063 X:0004 Y:0000 D:0000 DB:7E S:0A72 P:envmXdizc HC:0680 VC:253 FC:15 I:00
$C2/9232 0A          ASL A                   A:015D X:0004 Y:0000 D:0000 DB:7E S:0A72 P:envmXdizc HC:0714 VC:253 FC:15 I:00
$C2/9233 8F 04 42 00 STA $004204[$00:4204]   A:02BA X:0004 Y:0000 D:0000 DB:7E S:0A72 P:envmXdizc HC:0732 VC:253 FC:15 I:00
$C2/9237 E2 20       SEP #$20                A:02BA X:0004 Y:0000 D:0000 DB:7E S:0A72 P:envmXdizc HC:0774 VC:253 FC:15 I:00
$C2/9239 A9 03       LDA #$03                A:02BA X:0004 Y:0000 D:0000 DB:7E S:0A72 P:envMXdizc HC:0798 VC:253 FC:15 I:00
$C2/923B 60          RTS                     A:0203 X:0004 Y:0000 D:0000 DB:7E S:0A72 P:envMXdizc HC:0816 VC:253 FC:15 I:00
(**This is the core function of Routine 2.  After loading Weapon Power and the character's Hit score, it performs an
 ASL instruction (doubling the result), storing this, and loading 3 into the accumulator.  25 bytes.)

$C2/91B7 8F 06 42 00 STA $004206[$00:4206]   A:0203 X:0004 Y:0000 D:0000 DB:7E S:0A74 P:envMXdizc HC:0862 VC:253 FC:15 I:00
$C2/91BB AD 1D 9B    LDA $9B1D  [$7E:9B1D]   A:0203 X:0004 Y:0000 D:0000 DB:7E S:0A74 P:envMXdizc HC:0898 VC:253 FC:15 I:00
$C2/91BE 18          CLC                     A:0250 X:0004 Y:0000 D:0000 DB:7E S:0A74 P:envMXdizc HC:0930 VC:253 FC:15 I:00
$C2/91BF 6D B6 0D    ADC $0DB6  [$7E:0DB6]   A:0250 X:0004 Y:0000 D:0000 DB:7E S:0A74 P:envMXdizc HC:0948 VC:253 FC:15 I:00
$C2/91C2 90 02       BCC $02    [$91C6]      A:02C3 X:0004 Y:0000 D:0000 DB:7E S:0A74 P:eNVMXdizc HC:0980 VC:253 FC:15 I:00
$C2/91C6 8D 24 9B    STA $9B24  [$7E:9B24]   A:02C3 X:0004 Y:0000 D:0000 DB:7E S:0A74 P:eNVMXdizc HC:1004 VC:253 FC:15 I:00
$C2/91C9 AF 14 42 00 LDA $004214[$00:4214]   A:02C3 X:0004 Y:0000 D:0000 DB:7E S:0A74 P:eNVMXdizc HC:1036 VC:253 FC:15 I:00
$C2/91CD AA          TAX                     A:02E8 X:0004 Y:0000 D:0000 DB:7E S:0A74 P:eNVMXdizc HC:1072 VC:253 FC:15 I:00
(*Here, 3 is assigned as a divisor.  After a small check to make sure there's no overflow, the final result of the
  calculation is put into the accumulator and transferred to X for future storage/reference.)

Code: [Select]
---------------------------------------------------------------------------------------------------------------------------
ROUTINE THREE: CRAZY LADY (Ayla)
FORMULA: ((16*Power)+(a 2-byte reference value based on Level))/9
CODE:
---------------------------------------------------------------------------------------------------------------------------
$C2/91AD AD 90 9A    LDA $9A90  [$7E:9A90]   A:0014 X:00FF Y:0000 D:0000 DB:7E S:0A74 P:eNvMXdizc HC:0344 VC:253 FC:15 I:00
$C2/91B0 29 07       AND #$07                A:0005 X:00FF Y:0000 D:0000 DB:7E S:0A74 P:envMXdizc HC:0376 VC:253 FC:15 I:00
$C2/91B2 0A          ASL A                   A:0005 X:00FF Y:0000 D:0000 DB:7E S:0A74 P:envMXdizc HC:0394 VC:253 FC:15 I:00
$C2/91B3 AA          TAX                     A:000A X:00FF Y:0000 D:0000 DB:7E S:0A74 P:envMXdizc HC:0412 VC:253 FC:15 I:00
$C2/91B4 FC DB 91    JSR ($91DB,x)[$C2:923C] A:000A X:000A Y:0000 D:0000 DB:7E S:0A74 P:envMXdizc HC:0430 VC:253 FC:15 I:00
(*This JSR goes to an array located at C2/91DB, 2 byte pointers for each character.  If the result of the LDA instruction
  at the top is 5, you'll get the pointer pair "3C 92," leading to the code for Routine 3.  Not easy to see normally, since
  Ayla cannot weapon switch for obvious reasons.)

$C2/923C A9 10       LDA #$10                A:000A X:000A Y:0000 D:0000 DB:7E S:0A72 P:envMXdizc HC:0424 VC:253 FC:25 I:00
$C2/923E 8F 02 42 00 STA $004202[$00:4202]   A:0010 X:000A Y:0000 D:0000 DB:7E S:0A72 P:envMXdizc HC:0442 VC:253 FC:25 I:00
$C2/9242 AD 1C 9B    LDA $9B1C  [$7E:9B1C]   A:0010 X:000A Y:0000 D:0000 DB:7E S:0A72 P:envMXdizc HC:0478 VC:253 FC:25 I:00
$C2/9245 8F 03 42 00 STA $004203[$00:4203]   A:0063 X:000A Y:0000 D:0000 DB:7E S:0A72 P:envMXdizc HC:0510 VC:253 FC:25 I:00
$C2/9249 AD A2 9A    LDA $9AA2  [$7E:9AA2]   A:0063 X:000A Y:0000 D:0000 DB:7E S:0A72 P:envMXdizc HC:0586 VC:253 FC:25 I:00
$C2/924C 0A          ASL A                   A:0038 X:000A Y:0000 D:0000 DB:7E S:0A72 P:envMXdizc HC:0618 VC:253 FC:25 I:00
$C2/924D AA          TAX                     A:0070 X:000A Y:0000 D:0000 DB:7E S:0A72 P:envMXdizc HC:0636 VC:253 FC:25 I:00
$C2/924E C2 21       REP #$21                A:0070 X:0070 Y:0000 D:0000 DB:7E S:0A72 P:envMXdizc HC:0654 VC:253 FC:25 I:00
$C2/9250 BF 69 2D CC LDA $CC2D69,x[$CC:2DD9] A:0070 X:0070 Y:0000 D:0000 DB:7E S:0A72 P:envmXdizc HC:0678 VC:253 FC:25 I:00
$C2/9254 6F 16 42 00 ADC $004216[$00:4216]   A:0273 X:0070 Y:0000 D:0000 DB:7E S:0A72 P:envmXdizc HC:0720 VC:253 FC:25 I:00
$C2/9258 8F 04 42 00 STA $004204[$00:4204]   A:08A3 X:0070 Y:0000 D:0000 DB:7E S:0A72 P:envmXdizc HC:0762 VC:253 FC:25 I:00
$C2/925C E2 20       SEP #$20                A:08A3 X:0070 Y:0000 D:0000 DB:7E S:0A72 P:envmXdizc HC:0804 VC:253 FC:25 I:00
$C2/925E A9 09       LDA #$09                A:08A3 X:0070 Y:0000 D:0000 DB:7E S:0A72 P:envMXdizc HC:0828 VC:253 FC:25 I:00
$C2/9260 60          RTS                     A:0809 X:0070 Y:0000 D:0000 DB:7E S:0A72 P:envMXdizc HC:0846 VC:253 FC:25 I:00
(*This is the core function of Routine 3.  It takes 16 as a multiplicand and Ayla's Power as a multiplier. Then things
  get interesting!  This routine takes Ayla's level, doubles it, and then transfers this to X for use as pointer for
  a load routine.  Each of these pointers describes two bytes, which are then loaded and added to the product of
  (16*Ayla's Power).  THAT is stored, and then the rest of this is similar to Routine 1.  37 bytes.)

$C2/91B7 8F 06 42 00 STA $004206[$00:4206]   A:0809 X:0070 Y:0000 D:0000 DB:7E S:0A74 P:envMXdizc HC:0892 VC:253 FC:25 I:00
$C2/91BB AD 1D 9B    LDA $9B1D  [$7E:9B1D]   A:0809 X:0070 Y:0000 D:0000 DB:7E S:0A74 P:envMXdizc HC:0928 VC:253 FC:25 I:00
$C2/91BE 18          CLC                     A:0863 X:0070 Y:0000 D:0000 DB:7E S:0A74 P:envMXdizc HC:0960 VC:253 FC:25 I:00
$C2/91BF 6D B6 0D    ADC $0DB6  [$7E:0DB6]   A:0863 X:0070 Y:0000 D:0000 DB:7E S:0A74 P:envMXdizc HC:0978 VC:253 FC:25 I:00
$C2/91C2 90 02       BCC $02    [$91C6]      A:08D6 X:0070 Y:0000 D:0000 DB:7E S:0A74 P:eNVMXdizc HC:1010 VC:253 FC:25 I:00
$C2/91C6 8D 24 9B    STA $9B24  [$7E:9B24]   A:08D6 X:0070 Y:0000 D:0000 DB:7E S:0A74 P:eNVMXdizc HC:1034 VC:253 FC:25 I:00
$C2/91C9 AF 14 42 00 LDA $004214[$00:4214]   A:08D6 X:0070 Y:0000 D:0000 DB:7E S:0A74 P:eNVMXdizc HC:1066 VC:253 FC:25 I:00
$C2/91CD AA          TAX                     A:08F5 X:0070 Y:0000 D:0000 DB:7E S:0A74 P:eNVMXdizc HC:1102 VC:253 FC:25 I:00
(*Here, 9 is assigned as a divisor.  After a small check to make sure there's no overflow, the final result of the
  calculation is put into the accumulator and transferred to X for future storage/reference.)

Ayla's table is a bit long, so I have it spoilered...

Spoiler:
Code: [Select]
Ayla's Level Up Load Values (used for LDA $CC2D69,x)
---------------------------------------------------------------------------------------------------------------------------
Level LwrBt   UprBt Decimal
1 00 00 0
2 00 00 0
3 01 00 1
4 03 00 3
5 05 00 5
6 07 00 7
7 09 00 9
8 0C 00 12
9 10 00 16
10 14 00 20
11 18 00 24
12 1C 00 28
13 21 00 33
14 27 00 39
15 2D 00 45
16 33 00 51
17 39 00 57
18 40 00 64
19 48 00 72
20 50 00 80
21 58 00 88
22 60 00 96
23 69 00 105
24 73 00 115
25 7D 00 125
26 87 00 135
27 91 00 145
28 9C 00 156
29 A8 00 168
30 B4 00 180
31 C0 00 192
32 CC 00 204
33 D9 00 217
34 E7 00 231
35 F5 00 245
36 03 01 259
37 11 01 273
38 20 01 288
39 30 01 304
40 40 01 320
41 50 01 336
42 60 01 352
43 71 01 369
44 83 01 387
45 95 01 405
46 A7 01 423
47 B9 01 441
48 CC 01 460
49 E0 01 480
50 F4 01 500
51 08 02 520
52 1C 02 540
53 31 02 561
54 47 02 583
55 5D 02 605
56 73 02 627
57 89 02 649
58 A0 02 672
59 B8 02 696
60 D0 02 720
61 E8 02 744
62 00 03 768
63 19 03 793
64 33 03 819
65 4D 03 845
66 67 03 871
67 81 03 897
68 9C 03 924
69 B8 03 952
70 D4 03 980
71 F0 03 1008
72 0C 04 1036
73 29 04 1065
74 47 04 1095
75 65 04 1125
76 83 04 1155
77 A1 04 1185
78 C0 04 1216
79 E0 04 1248
80 00 05 1280
81 20 05 1312
82 40 05 1344
83 61 05 1377
84 83 05 1411
85 A5 05 1445
86 C7 05 1479
87 E9 05 1513
88 0C 06 1548
89 30 06 1584
90 54 06 1620
91 78 06 1656
92 9C 06 1692
93 C1 06 1729
94 E7 06 1767
95 0D 07 1805
96 33 07 1843
97 59 07 1881
98 80 07 1920
99 A8 07 1960

Geiger

  • Jr. Member
  • **
  • Posts: 39
    • View Profile
    • Geiger's Crypt
Re: Chrono Trigger (SNES, headered ROM) Level Up stats
« Reply #7 on: June 13, 2012, 03:51:54 pm »
Is there a place where this is documented online?  Couldn't find this anywhere, even though significantly more intricate code/data like event sequences and map tiles have already been thoroughly investigated (I mean Temporal Flux is something that precious few other games will -ever- get).  It really did surprise me :/.

My team focused on things no other editor could do, and major subsystems.  A lot of common stuff has not been added until more recent versions, if at all.  For example, Treasure editing was only added after a poll listed it as the most wanted feature.

If something is not documented in my offsets guide, it likely does not exist in any formal documentation.

As for Flux being a rare item, one of my goals with the WIP version rewrite is to provide a base code layer that other people can use for other games.  A backbone that does the heavy lifting.  But only time will tell if it accomplishes that goal and I still have to finish the bloody thing first.

This is some fine cryptanalysis you have here.  Keep at it.
This is the patent age of new inventions -/- For killing bodies, and for saving souls, -/- All propagated with the best intentions. --Lord Byron

Edea

  • Jr. Member
  • **
  • Posts: 55
    • View Profile
Re: Chrono Trigger (SNES, headered ROM) Level Up stats
« Reply #8 on: June 14, 2012, 03:07:08 am »
Thank you!  ^____^  I did suspect that any of the 'unknowns' would remain as such without just going in there and digging around ourselves.  And I just so happened to have edited some of the treasures in my ROM copy, put a couple new ones in (also I found it interesting that the 'sealed' chests actually operate in a similar manner to NPC objects, though I understand it).

Also yeah, one of the other things was altering Techs; Mauron's been working on a plugin for it (can't wait for that to be finished), but it's definitely not as easy as just reassigning a byte here or there, so I've been hesitant to do much with it (ended up turning Lucca's Protect spell into Haste, but the sprites loaded were still for Protect, and the spell would glitch -unless- Marle used her Haste tech first, so there's some sort of routine that preloads the animation data which isn't accounted for yet).

Jorpho

  • Hero Member
  • *****
  • Posts: 4194
  • The cat screams with the voice of a man.
    • View Profile
Re: Chrono Trigger (SNES, headered ROM) Level Up stats
« Reply #9 on: June 14, 2012, 09:23:00 am »
Were these values different in the Japanese version?

I read once long ago that the numbers were subtly tweaked in the US version to make it easier, but considering no one else seems to have reported this, I've been thinking that article I read was spurious.
This signature is an illusion and is a trap devised by Satan. Go ahead dauntlessly! Make rapid progres!

Shinrin

  • Jr. Member
  • **
  • Posts: 66
    • View Profile
Re: Chrono Trigger (SNES, headered ROM) Level Up stats
« Reply #10 on: June 22, 2012, 12:04:21 pm »
I have dabbed with messing with stats in Chrono Trigger using TF, (i gave them different starting level stats, but when the character leveled (Crono for example) he would go back to the normal Level 2 stats, instead of having the level 2 stats applied to the new stats i gave them. (i don't know if it was because I changed the stats though memory events or not)
I  support Pandora's Box!
Released Hacks: FF6 Hard Challenge and Chrono Trigger Ingame loading
Coming Soon: Matsumi - Saga 1

Vehek

  • Full Member
  • ***
  • Posts: 178
    • View Profile
Re: Chrono Trigger (SNES, headered ROM) Level Up stats
« Reply #11 on: June 22, 2012, 03:15:34 pm »
That was because you didn't know about the 'base stats'. Those are what the stat tabs modify (except, I believe, for speed). The game basically ignores the current visible values for the characters' non-HP/MP stats, completely recalculating them each time.