As a just-for-fun project, I did a rather complete disassembly and analysis of the original Chrono Trigger SNES rom's battle mechanics module. I got the damage equations including upper limits on random damage, I got the exact effects of defense, every detail of hitting and missing, meanings of various bits and subclasses of tech and combo data, and a big fat dump of every tech in the game.
The PC combo structures have, as their first member, a (reference to a) list of participants, which makes it really easy to figure out which combo/tech data corresponds to which tech in-game, i.e. mapping data to tech.
It has proven less easy to do the same for enemies' techs. A breakpoint-based approach is far too tedious and slightly error-prone. I know Chrono Trigger is one of the most hacked games ever made, but no matter where I look, I can't find any simple explanation of the form "here's the offset in the enemy data that identifies what techs they can use". This is my official cry for help.
What I'm looking for is some way to identify - at least - what enemy is using each entry in the table that starts at offset $C6FC9. Entries are 11 bytes long and are in the same format as the PC combo techs, so even though these all specify only a single participant, I refer to the table as the NPC combo table, and the table at $C7AC9 as the NPC tech table, whose records mirror the individual tech components of a PC combo tech in structure. The only meaningful fields are those that would normally correspond to the first character in a combo's contribution to the tech, and those that apply globally to the tech itself. In summary:
Offset (hex) | Member | Type & meaning |
0 | participantListIndex | Byte. Always $FF for NPC "combos" |
3 | elements | Top 4 bits are the elements we know & love, bottom 4 are unknown in meaning and appear to be used frequently |
5 | techDataIndex0 | Byte. Index of tech record in the NPC tech table. Multiply by 12 to get offset from start of table. |
8 | modifierIndex0 | Byte. Index of the 3 byte modifier record in table that starts $C2A05. Multiply by 3 to get offset in said table. |
If it helps, here's what some entries do:
1. Heal by rnd(9~10)*MAG
2. Fixed 50% chance to inflict lock status, no damage
3. Non-elemental magic attack with base damage (LV+MAG)*4/3, always hits, 50% chance to inflict slow
10. Fire magic attack with base damage (LV+MAG)*2, always hits
17. Fire-elemental physical attack with base damage ATK*4/3, evasion based on HIT/EVA, defense stat is DEF, wall status has no effect
Ringing any bells?! Is there a nice neat list of enemies with the indices of their techs in it somewhere? Or do I have to peel through a bunch of "Event Commands" that specify the actions taken by an enemy, and if so, where should I start looking? I will, in exchange for any useful info, dump everything I have someplace you can read it. Thanks!