Difference between revisions of "Game Mechanics"

From Chrono Compendium
Jump to: navigation, search
 
(2 intermediate revisions by one user not shown)
Line 79: Line 79:
 
'''Base element damage:'''
 
'''Base element damage:'''
  
<pre>Name   Level   +/-  Targets   Base Damage
+
<pre>Formatted the Base Damage table a little better.
AquaBeam   1   7   Single Foe  12
+
 
IceLance   2   6   Single Foe  15
+
 
AquaBall   3   5   Single Foe  20
+
Name           Level +/-  Targets     Base Damage
IceBlast   4   4   Single Foe  28
+
AquaBeam       1     7   Single Foe  12
Deluge   5   3   All Foes   30
+
IceLance       2     6   Single Foe  15
Iceberg   6   2   All Foes   38
+
AquaBall       3     5   Single Foe  20
           
+
IceBlast       4     4   Single Foe  28
Name   Level   +/-  Targets   Base Damage
+
Deluge         5     3   All Foes     30
Fireball   1   7   Single Foe  12
+
Iceberg       6     2   All Foes     38
MagmaBomb   2   6   All Foes   10
+
         
FirePillar   3   5   Single Foe  20
+
Name           Level +/-  Targets     Base Damage
MagmaBurst   4   4   Single Foe  28
+
Fireball       1     7   Single Foe  12
Inferno   5   3   All Foes   30
+
MagmaBomb     2     6   All Foes     10
Volcano   6   2   All Foes   40
+
FirePillar     3     5   Single Foe  20
           
+
MagmaBurst     4     4   Single Foe  28
Name   Level   +/-  Targets   Base Damage
+
Inferno       5     3   All Foes     30
Bushwhacker   1   7   Single Foe  12
+
Volcano       6     2   All Foes     40
Aerosaucer   2   6   Single Foe  15
+
         
Bushbasher   3   5   Single Foe  20
+
Name           Level +/-  Targets     Base Damage
Aeroblaster   4   4   Single Foe  28
+
Bushwhacker   1     7   Single Foe  12
Carnivore   5   3   All Foes   30
+
Aerosaucer     2     6   Single Foe  15
Tornado   6   2   All Foes   38
+
Bushbasher     3     5   Single Foe  20
           
+
Aeroblaster   4     4   Single Foe  28
Name   Level   +/-  Targets   Base Damage
+
Carnivore     5     3   All Foes     30
Uplift   1   7   Single Foe  12
+
Tornado       6     2   All Foes     38
ElectroJolt   2   6   Single Foe  15
+
         
Upheaval   3   5   Single Foe  20
+
Name           Level +/-  Targets     Base Damage
ElectroBolt   4   4   Single Foe  28
+
Uplift         1     7   Single Foe  12
Earthquake   5   3   All Foes   30
+
ElectroJolt   2     6   Single Foe  15
ThundaStorm   6   2   All Foes   40
+
Upheaval       3     5   Single Foe  20
           
+
ElectroBolt   4     4   Single Foe  28
Name   Level   +/-  Targets   Base Damage
+
Earthquake     5     3   All Foes     30
PhotonRay   1   7   Single Foe  13
+
ThundaStorm   6     2   All Foes     40
Meteorite   2   6   Single Foe  16
+
         
PhotonBeam   3   5   Single Foe  22
+
Name           Level +/-  Targets     Base Damage
MeteorShower  4   4   All Foes   25
+
PhotonRay     1     7   Single Foe  13
HolyLight   5   3   All Foes   32
+
Meteorite     2     6   Single Foe  16
UltraNova   6   2   All Foes   42
+
PhotonBeam     3     5   Single Foe  22
           
+
MeteorShower  4     4   All Foes     25
Name   Level   +/-  Targets   Base Damage
+
HolyLight     5     3   All Foes     32
GravityBlow   1   7   Single Foe  13
+
UltraNova     6     2   All Foes     42
HellSoul   2      Single Foe   
+
         
Gravitonne   3   5   All Foes   16
+
Name           Level +/-  Targets     Base Damage
HellBound   4      Single Foe   
+
GravityBlow   1     7   Single Foe  13
FreeFall   5   3   Single Foe  36
+
HellSoul       2      -    Single Foe  --
BlackHole   6   2   All Foes   44</pre>
+
Gravitonne     3     5   All Foes     16
 +
HellBound     4      -    Single Foe  --
 +
FreeFall       5     3   Single Foe  36
 +
BlackHole     6     2   All Foes     44
 +
</pre>
  
 
'''Variable F'''
 
'''Variable F'''
 +
 +
The 'f' variable is a placeholder for a random value returned in the range of 0 to the value set in byte 0x0C of the element block. It corresponds to 0x0C in the element's data block. Take a look at the following chunk of data for aquabeam, you'll see that 0x0C is set to 0x14 or 20.  So 'f' would be a random value between 0-20:
 +
 +
<pre>AquaBeam
 +
xx  00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
 +
  -------------------------------------------------
 +
00| 01 01 00 00 80 80 01 00 0C 00 00 00 14 00 00 00
 +
10| 20 00 77 00 FF FF FF FF 00 00 00 00 20 00 00 20
 +
20| 00 00 00 00 00 00 00 00 00 00 00 00</pre>
 +
 +
The value 20, means that in a damage calculation the elements power (specified in addr 0x08) has random variance between 80-100% effectiveness, since 'f' has a potential range of 0-20.  If you set 0x0C to 0, you will get no variance.
 +
 +
For all standard attack elements in the game (any elements with addr:0x07 set to 0; mode 0), that value is 20 (except UltraNova, which is 0).  Fun fact, SexyWink is the only non-standard element that uses mode 0 that also sets that byte (0x0A or 10). 
 +
 +
* UltraNova, BlackHole: f = 0
 +
* SexWink: f = 10
 +
* Otherwise, attack elements: f = 20
  
 
If we look at Aquabeam:
 
If we look at Aquabeam:
Line 154: Line 175:
 
00 00 00 00 00 00 00 00 00 00 00 00</pre>
 
00 00 00 00 00 00 00 00 00 00 00 00</pre>
  
 +
'''Black Hole'''
  
also I think Blackhole as a chance to 1 hit Kill any regular mobs (no boss or mini boss I think). maybe its only white color foes but I think it apply to all of them!
+
also I think Blackhole as a chance to 1 hit Kill any regular mobs (no boss or mini boss I think). maybe its only white color foes but I think it apply to all of them! ''glennxserge:'' Blackhole for instance, uses mode 0x0F, and it's the only element that uses it.  On the surface it just looks like an element that does damage and sometimes kills (based on the stat Death, being set), which could also be done with the default mode 0x00.  So why add an entirely new element mode?  What it actually does is only apply damage if a status effect didn't land.  So for instance, if you change the stat block for blackhole to apply poison instead of death, then you'll either damage your enemy or poison them, but not both.  My guess is that the developers realized that it would be confusing to show the numerical damage simultaneously to death (it would be ambiguous at least), so they needed this mode to make it clear that non-damage killed the enemy.
  
 
Have you noticed that the Element data are spread on 2 Blocks? The first block is the Data that will be show in the in-game menu, like when you allocate your element to your characters. The Second block is the Data use in Battle, so you have to change Both if you want a clean hack!  Both Blocks will be identical! Make sure you keep it that way when editing.
 
Have you noticed that the Element data are spread on 2 Blocks? The first block is the Data that will be show in the in-game menu, like when you allocate your element to your characters. The Second block is the Data use in Battle, so you have to change Both if you want a clean hack!  Both Blocks will be identical! Make sure you keep it that way when editing.
 +
 +
Blackhole (which is kind of UltraNova's complement), also has an 0x0C value of 0, but because it uses it's own special element mode, I haven't tested whether that byte functions the same.  It probably does though.  I'll check now... EDIT: Yes, mode 0x0F for Blackhole does make use of byte 0x0C.  I think it's functionally the same as in mode 0 behavior.  So I think we can put Blackhole in the same category as UltraNova.
  
 
First Block start at
 
First Block start at

Latest revision as of 07:55, 26 November 2021

General Information

Chrono Cross

Battle Mechanics

Thanks to Grobycftw, glennxserge

Player weapon damage to enemy

weak=((str+2)*(100-f)*wp - (def+2)*400)*10/20000*c/1000
medium=((str+2)*(100-f)*wp - (def+2)*400)*25/20000*c/1000
heavy=((str+2)*(100-f)*wp - (def+2)*400)*40/20000*c/1000


This formula shows raw damage; it doesn't consider abnormal status and innate colors.

Each step should return an integer value; for example 2.7 should be 2.

  • str: Attacker's strength
  • f: It is a semi-random value, differs among weapons, explain later.
  • wp: Weapon damage, include bonus from accessories like Dragoon Gauntlet
  • def: Target's defense
  • c: Color multiplier, it has a base value of 1125 and follows a rule shown in the table below
c value  	665 	750 	875 	1000 	1125 	1250 	1375 	1500 	1500 	1500
points  	-3	-2	-1	0	1	2	3	4	5	6

Points rules:

  1. A field color cirlce has same color as attacker, +1
  2. A field color circle has opposite color as attacker, -1
  3. Target and attacker have same color, -1
  4. Target and attacker have opposite color, 0, but total damage will be multiplied by 1.5
  5. Field color circle, target and attacker have same color, color circle will have no effect. For example, if target and attacker are both red, red color circle will have no effect, but rule 2-4 still work.

f is a value determine the percentage between max damage and min damage. You can find it in this thread: here. For example, Serge's weapons have a value of 20%, then f will be a value between 0 and 20.

However, f is not completely random; it cycles in a pre-generated random array. (str+2)*(100-f)*wp is a loop, the result is increased by (100*wp - f*wp) in every step, totally (str+2) times. So a weapon can NEVER deal its max damage.

The part before *c/1000 has a minimum value (wp-4)/2, which means even if the enemy has high defense and you have poor strength, the damage is at least (wp-4)*5/8.

Weapon based tech damage

damage=((str+2)*(100-f)*wp - (def+2)*400)*atk/20000*c/1000

It's almost the same as a normal weapon attack.

  • atk: tech damage multiplier, it is not shown in stats window, however. For example, Serge's Dash & Slash has a value of 60.
  • c: Color multiplier, it has a base value of 1000 and follows a rule shown in the table below
value  	665 	750 	875 	1000 	1125 	1250 	1375 	1500 	1500 	1500
points  	-3	-2	-1	0	1	2	3	4	5	6

Points rules:

  1. Caster and element have same color: +1
  2. Caster and element have opposite color: -1
  3. A field color circle has same color as the element: +1
  4. A field color circle has opposite color as the element: -1
  5. Element color is same as the target: -1
  6. Element color is opposite as the target: 0, but total damage will be multiplied by 1.5
  7. Field color doesn't affect points if it is same as the target and the element, but rule 1, 2, 4, 5, 6 still work

For example, if the target and element are both red, red color circles will have no effect.

Element damage

damage=((mag+3)*(100-f)*e-(mdef+2)*500)*(1000+v*125)/400000*c/1000*(100+r)/100
  • mag: Caster's magic power, plus equipment bonus.
  • f: Like weapon based damage, f is a semi-random value. It is 20 for most elements.
  • e: Element's damage (AtkSpread)
  • mdef: Target's magic defense
  • v: grid level - element level, for example, liftup +7, photonbeam -2...
  • r: a random value between 0 and 5
  • c: Color multiplier, same rules as above

Base element damage:

Formatted the Base Damage table a little better.


Name           Level +/-   Targets      Base Damage
AquaBeam       1      7    Single Foe   12
IceLance       2      6    Single Foe   15
AquaBall       3      5    Single Foe   20
IceBlast       4      4    Single Foe   28
Deluge         5      3    All Foes     30
Iceberg        6      2    All Foes     38
           
Name           Level +/-   Targets      Base Damage
Fireball       1      7    Single Foe   12
MagmaBomb      2      6    All Foes     10
FirePillar     3      5    Single Foe   20
MagmaBurst     4      4    Single Foe   28
Inferno        5      3    All Foes     30
Volcano        6      2    All Foes     40
           
Name           Level +/-   Targets      Base Damage
Bushwhacker    1      7    Single Foe   12
Aerosaucer     2      6    Single Foe   15
Bushbasher     3      5    Single Foe   20
Aeroblaster    4      4    Single Foe   28
Carnivore      5      3    All Foes     30
Tornado        6      2    All Foes     38
           
Name           Level +/-   Targets      Base Damage
Uplift         1      7    Single Foe   12
ElectroJolt    2      6    Single Foe   15
Upheaval       3      5    Single Foe   20
ElectroBolt    4      4    Single Foe   28
Earthquake     5      3    All Foes     30
ThundaStorm    6      2    All Foes     40
           
Name           Level +/-   Targets      Base Damage
PhotonRay      1      7    Single Foe   13
Meteorite      2      6    Single Foe   16
PhotonBeam     3      5    Single Foe   22
MeteorShower   4      4    All Foes     25
HolyLight      5      3    All Foes     32
UltraNova      6      2    All Foes     42
           
Name           Level +/-   Targets      Base Damage
GravityBlow    1      7    Single Foe   13
HellSoul       2      -    Single Foe   --
Gravitonne     3      5    All Foes     16
HellBound      4      -    Single Foe   --
FreeFall       5      3    Single Foe   36
BlackHole      6      2    All Foes     44

Variable F

The 'f' variable is a placeholder for a random value returned in the range of 0 to the value set in byte 0x0C of the element block. It corresponds to 0x0C in the element's data block. Take a look at the following chunk of data for aquabeam, you'll see that 0x0C is set to 0x14 or 20. So 'f' would be a random value between 0-20:

AquaBeam
xx  00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
  -------------------------------------------------
00| 01 01 00 00 80 80 01 00 0C 00 00 00 14 00 00 00
10| 20 00 77 00 FF FF FF FF 00 00 00 00 20 00 00 20
20| 00 00 00 00 00 00 00 00 00 00 00 00

The value 20, means that in a damage calculation the elements power (specified in addr 0x08) has random variance between 80-100% effectiveness, since 'f' has a potential range of 0-20. If you set 0x0C to 0, you will get no variance.

For all standard attack elements in the game (any elements with addr:0x07 set to 0; mode 0), that value is 20 (except UltraNova, which is 0). Fun fact, SexyWink is the only non-standard element that uses mode 0 that also sets that byte (0x0A or 10).

  • UltraNova, BlackHole: f = 0
  • SexWink: f = 10
  • Otherwise, attack elements: f = 20

If we look at Aquabeam:

                       "f"
01 01 00 00 80 80 01 00 0C 00 00 00 14 00 00 00
20 00 77 00 FF FF FF FF 00 00 00 00 20 00 00 20
00 00 00 00 00 00 00 00 00 00 00 00

The 6th Byte in element corresponds to its color using this Table

Table 2:

80 = Blue
20 = Red
40 = Yellow
04 = Green
10 = Black
08 = White

And it works just looking at Iceberg for ex:

                      "f"
01 01 00 80 90 80 06 00 26 00 00 00 14 00 00 00
25 00 22 00 FF FF FF FF 00 00 00 00 00 00 00 80
00 00 00 00 00 00 00 00 00 00 00 00

Black Hole

also I think Blackhole as a chance to 1 hit Kill any regular mobs (no boss or mini boss I think). maybe its only white color foes but I think it apply to all of them! glennxserge: Blackhole for instance, uses mode 0x0F, and it's the only element that uses it. On the surface it just looks like an element that does damage and sometimes kills (based on the stat Death, being set), which could also be done with the default mode 0x00. So why add an entirely new element mode? What it actually does is only apply damage if a status effect didn't land. So for instance, if you change the stat block for blackhole to apply poison instead of death, then you'll either damage your enemy or poison them, but not both. My guess is that the developers realized that it would be confusing to show the numerical damage simultaneously to death (it would be ambiguous at least), so they needed this mode to make it clear that non-damage killed the enemy.

Have you noticed that the Element data are spread on 2 Blocks? The first block is the Data that will be show in the in-game menu, like when you allocate your element to your characters. The Second block is the Data use in Battle, so you have to change Both if you want a clean hack! Both Blocks will be identical! Make sure you keep it that way when editing.

Blackhole (which is kind of UltraNova's complement), also has an 0x0C value of 0, but because it uses it's own special element mode, I haven't tested whether that byte functions the same. It probably does though. I'll check now... EDIT: Yes, mode 0x0F for Blackhole does make use of byte 0x0C. I think it's functionally the same as in mode 0 behavior. So I think we can put Blackhole in the same category as UltraNova.

First Block start at

002694D4 (Aquabeam)  -Formart 2352-
or
~00‬21983B  (00219C7C not sure why its a tiny bit offset from my calcul)‬

(Aquabeam) -Formart 2048- (Please correct me If im wrong, I usually use 2352 format to work mainly,

the Second block starts at

13BA00F4 (Aquabeam) -Formart 2352-

or

~112D483B (112D4C7C) (Aquabeam) -Formart 2048-

Further Discussion

The high bit of byte 0x18 of the element block is the 'instant death' effect. And byte 0x0A is expressed as a percentage chance to hit. You can see a couple examples linked below of Hellbound and Blackhole. You can also test this yourself if you set the value of blackhole's 0x0A to 0x64 (100 decimal), it will always kill standard enemies, regardless of innate type.

Code: [Select]

HellBound
    00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
  -------------------------------------------------
00| 01 01 00 00 80 10 04 02 00 00 28 00 00 00 00 00
10| 1A 00 00 00 FF FF FF FF 80 00 00 00 00 00 00 40
20| 00 00 00 00 00 00 00 00 00 00 00 00

BlackHole
00| 01 01 00 80 90 10 06 0F 2C 00 14 00 00 00 00 00
10| 09 00 22 00 FF FF FF FF 80 00 00 00 00 00 00 80
20| 00 00 00 00 00 00 00 00 00 00 00 00

The above indicates that HellBound has a whopping 40% chance to kill whereas BlackHole has 20% (which make sense since it hits all enemies). I'm getting in the weeds here, but wanted to demystify the instant death behavior.

Debuffs

------------------------------------------------
Stats Boost Element
------------------------------------------------
FF FF FF FF XX XX XX XX 00 01 00 00
List of Stats

40 00 00 00 = Att.
80 00 00 00 = Hit%
00 01 00 00 = Def
00 02 00 00 = Evd.
00 04 00 00 = M.Att.
00 08 00 00 = M.Def

ex : C0 00 00 00 = Att. + Hit%

------------------------------------------------
Debuff Status Element
------------------------------------------------
MagmaBurst
01 01 00 00(80 20 04 00)1C 00 32 00 14 00 00 00
2B 00 44 00 FF FF FF FF 00 00 10 00 00 00 00 40
00 00 00 00 00 00 00 00 00 00 00 00

If
80 20 04 00 => 00 calls a list for status
32 = 50% of 00 00 10 00 = Confused
01 00 00 00 = Poison
08 00 00 00 = Burns
10 00 00 00 = Sprain
20 00 00 00 = Flu

00 01 00 00 = Afraid
00 20 00 00 = Fatigued
00 40 00 00 = Asleep
00 00 02 00 = Darkness
00 00 10 00 = Confused
00 00 20 00 = Frozen
00 00 00 04 = Cursed
00 00 00 02 = Dizzy

If
80 20 04 02 => 02 calls another list of status?
32 = 50% of
80 00 00 00 = Curse+Darkness+1hit kill?
20 00 00 00 = Curse or Darkness?
01 00 00 00 = Poison or Darkness?

I've been trying to unravel the element block design 100%, but there are quite a few different modes and depending on the mode, some bytes either don't function or do something completely different. Case in point: when byte 0x07 is 3 (healing type), the byte 0x0C acts as a percentage to recover used elements in caster's grid. In most modes it is the random variance for damage. There are a bunch of these little cases that make it hard to get a complete picture.

Healing

HP=(rawmag+2)*(100-f)*e/400*(1000+v*125)/1000
  • rawmag: Caster's magic but NOT including bonus from equipment

There may be more behind the formula, but as far as I know field color doesn't affect it.

Dual/Triple Techs

Weapon based:

Each character performs the attack separately, and then the game adds the results.

Element attack:

Same as normal elements, but the tech only uses the magic power of the one who chooses the command.

Weapon Hit%

In battle:
weak = acc/3 + wpacc*2/3 - evd
medium = 50/3 + wpacc*2/3 - evd
heavy = 20/3 + wpacc*2/3 - evd
  • acc: ACC showed in character stats and equipment menu.
  • wpacc: Weapon accuracy, it is not listed in the encyclopedia directly, but better weapons usually have better values.
  • evd: Target evade rate.

After a weak attack, all 3 values are increased, the increment is:

weak = (102-currentweak)*30/100
medium = (102-currentmedium)*25/100
heavy = (103-currentheavy)*20/100
1 medium attack = 3 weak attacks
1 heavy attack = 7 weak attacks

I've no idea about the Hit% value shown in equipment menu. It is different from all three above and is not used in battle at all.

From the formula we can see heavy and medium have nothing to do with character ACC value, so a heavy attack usually misses if you start with it.

Status effect lasting time

time=c*s - 1
  • c: It is usually 3, depends on which status it is.
  • s: Character based value. For example, Guile has a greater value than most characters.
  • Resistance Ring: It will reduce s[/b by 1.
  • Resistance Belt: It will reduce s[/b by 2.
Level Up and Stat Bonuses

by utunnels

I found some people ask about how to max all statistics at 99th star, such as "why is my Serge's strength 87 instead of 88; it was 88 in my last run", or "why is Riddel's magic attack not 60". I searched via Google, some say it is all random (and it is almost true since I myself saw Guile had very poor magic attack, at least before Serge became Lynx). And someone says the bonus can't be changed by the save/load trick; I tested before a boss battle, and it is true. Later I found bonus values for next star are determined after a boss battle which gives you a star and will be carried in the save file until you receive next star.

Level star bonus values are random and follow a formula like:

HP bonus = ((Lv99HP - MaxHP) / (101 - Stars)) x random(0, 2) + 2  
Other bonus = ((Lv99Points - Points) / (101 - Stars)) x random(0, 2)

random(0, 2) is a random decimal value between 0 and 2, doesn't include 0 and 2. The result will be rounded to get an integer value (for example, 2.4 will be 2 but 3.6 will become 4).

Minor bonus values after regular fight

I'm still not sure how exactly the formula works, but here's what I've figured out:

1. Your team receives some kind of "exp" after a regular fight, based on what star level you are currently at, until it reaches a certain value (ThresholdPoint). It will be zeroed if you gain a new star level. For example, at level 1, you will receive 1 point per fight. But after 8 fights, it just stops increasing. But at level 50, you receives 3757 points per fight, but stop receiving any after 3 fights.

2. The "exp" interacts with your stats growth, but not by adding up. It is still unknown. However, it seems the rule is fixed instead of random. That means the save and load trick doesn't work here.

3. Total bonus will not get past about 66%-69% of next star bonus. For example, if Serge will gain 12 HP at the next star level, he can receive at most 8 HP during those regular fights.

4. After each fight, points growth is based on "exp" and other factors. It differs among star levels. For example, at star level 0, Serge gains HP in an order of 12%, 13%, 12%, 10%, 7%, 4%, 3%, ... in the first fight, he will gain 12% x next star level hp bonus, and so on. But at level 50, the order is almost 20%, 20%, 14%, 7%, 4%, 2%, 1%,... percentage drops sharply after the ThresholdPoint, which will make it almost impossible to gain any points sooner or later.

5. Small values can be added to next fight, somehow. Though the formula is unknown, but I've noticed, if next star bonus is only 1 point( for example, strength bonus), the character can still receive the point after several fights, in my test case, it should be before the ThresholdPoint.

6. Add a new member to your 3-person team after the ThresholdPoint? Well, he/she will still receive a bonus, and quite a lot in the first fight, but tgus will drop sharply later, and total bonus still can't get past 66-69% of next star bonus.

Most used character gain stats like the red curve in the picture, and those you never use are like the blue one.

Lvup.png

From: Main Page
From: Modification