I was rereading the pages..."Power of techs"...I'm VERY certain we are able to do that. I remember messing with that along time ago...UGH! I hope I still have the location for that stuff X_x..
Edit: I was scrolling through stuff I think Jlukas or Geiger posted. Tears apart Gato's Singing attack
There are like 4 different sets of techs which I believe to be player techs enemy techs, player attacks and in-battle items.
2 useful RAM Addresses
7E9877 Attack index is held here for the 4 different attack types
7E9878 - 7E9879 Pointer for current attack is held here for all attack types
The following 4 sections of code load the pointers for the 4 different kinds of techs.
$C1/46EF BF F0 61 CD LDA $CD61F0,x[$CD:6210] A:0020 X:0020 Y:0006 P:envmxdizc // Load the 2 byte pointer (Singing Attack is the 20th Tech)
$C1/46F3 8D 78 98 STA $9878 [$7E:9878] A:9EDA X:0020 Y:0006 P:eNvmxdizc // Store the pointer in RAM at 7E9878
$C1/46F6 AA TAX A:9EDA X:0020 Y:0006 P:eNvmxdizc // Transfer the pointer to X
$C1/46F7 A8 TAY A:9EDA X:9EDA Y:0006 P:eNvmxdizc // Transfer the pointer to Y
$C1/46F8 7B TDC A:9EDA X:9EDA Y:9EDA P:eNvmxdizc
$C1/46F9 E2 20 SEP #$20 A:0000 X:9EDA Y:9EDA P:envmxdiZc
$C1/46FB BF 00 00 CD LDA $CD0000,x[$CD:9EDA] A:0000 X:9EDA Y:9EDA P:envMxdiZc // Load CD0000 with X (CD9EDA)
$C1/46FF 85 81 STA $81 [$00:0081] A:0098 X:9EDA Y:9EDA P:eNvMxdizc
$C1/4701 BF 01 00 CD LDA $CD0001,x[$CD:9EDB] A:0098 X:9EDA Y:9EDA P:eNvMxdizc
$C1/4705 85 80 STA $80 [$00:0080] A:00F8 X:9EDA Y:9EDA P:eNvMxdizc
$C1/4707 BF 02 00 CD LDA $CD0002,x[$CD:9EDC] A:00F8 X:9EDA Y:9EDA P:eNvMxdizc
$C1/470B 85 83 STA $83 [$00:0083] A:0080 X:9EDA Y:9EDA P:eNvMxdizc
$C1/470D BF 03 00 CD LDA $CD0003,x[$CD:9EDD] A:0080 X:9EDA Y:9EDA P:eNvMxdizc
$C1/4617 BF F0 5E CD LDA $CD5EF0,x[$CD:5EF2] A:0002 X:0002 Y:0002 P:envmxdizc // Load the 2 byte pointer (Cyclone is the 2nd script)
$C1/461B 8D 78 98 STA $9878 [$7E:9878] A:0909 X:0002 Y:0002 P:envmxdizc // Store the pointer in RAM at 7E9878
$C1/461E AA TAX A:0909 X:0002 Y:0002 P:envmxdizc // Transfer the pointer to X
$C1/461F A8 TAY A:0909 X:0909 Y:0002 P:envmxdizc // Transfer the pointer to Y
$C1/4620 7B TDC A:0909 X:0909 Y:0909 P:envmxdizc
$C1/4621 E2 20 SEP #$20 A:0000 X:0909 Y:0909 P:envmxdiZc
$C1/4623 BF 00 00 CE LDA $CE0000,x[$CE:0909] A:0000 X:0909 Y:0909 P:envMxdiZc // Load CE0000 with X (CE0909)
$C1/4627 85 81 STA $81 [$00:0081] A:0098 X:0909 Y:0909 P:eNvMxdizc
$C1/4629 BF 01 00 CE LDA $CE0001,x[$CE:090A] A:0098 X:0909 Y:0909 P:eNvMxdizc
$C1/462D 85 80 STA $80 [$00:0080] A:0080 X:0909 Y:0909 P:eNvMxdizc
$C1/462F BF 02 00 CE LDA $CE0002,x[$CE:090B] A:0080 X:0909 Y:0909 P:eNvMxdizc
$C1/4633 85 83 STA $83 [$00:0083] A:0080 X:0909 Y:0909 P:eNvMxdizc
$C1/4635 BF 03 00 CE LDA $CE0003,x[$CE:090C] A:0080 X:0909 Y:0909 P:eNvMxdizc
$C1/47CB BF F0 63 CD LDA $CD63F0,x[$CD:63F2] A:0002 X:0002 Y:0002 P:envmxdizc // Load the 2 byte pointer (Tonic is the 2nd script)
$C1/47CF 8D 78 98 STA $9878 [$7E:9878] A:829C X:0002 Y:0002 P:eNvmxdizc // Store the pointer in RAM at 7E9878
$C1/47D2 AA TAX A:829C X:0002 Y:0002 P:eNvmxdizc // Transfer the pointer to X
$C1/47D3 A8 TAY A:829C X:829C Y:0002 P:eNvmxdizc // Transfer the pointer to Y
$C1/47D4 7B TDC A:829C X:829C Y:829C P:eNvmxdizc
$C1/47D5 E2 20 SEP #$20 A:0000 X:829C Y:829C P:envmxdiZc
$C1/47D7 BF 00 00 CE LDA $CE0000,x[$CE:829C] A:0000 X:829C Y:829C P:envMxdiZc // Load CE0000 with X (CE829C)
$C1/47DB 85 81 STA $81 [$00:0081] A:0090 X:829C Y:829C P:eNvMxdizc
$C1/47DD BF 01 00 CE LDA $CE0001,x[$CE:829D] A:0090 X:829C Y:829C P:eNvMxdizc
$C1/47E1 85 80 STA $80 [$00:0080] A:00C0 X:829C Y:829C P:eNvMxdizc
$C1/47E3 BF 02 00 CE LDA $CE0002,x[$CE:829E] A:00C0 X:829C Y:829C P:eNvMxdizc
$C1/47E7 85 83 STA $83 [$00:0083] A:0080 X:829C Y:829C P:eNvMxdizc
$C1/47E9 BF 03 00 CE LDA $CE0003,x[$CE:829F] A:0080 X:829C Y:829C P:eNvMxdizc
$C1/442C BF C6 5E CD LDA $CD5EC6,x[$CD:5EC6] A:0000 X:0000 Y:0098 P:envmxdiZc // Load the 2 byte pointer (Crono's attack is the first script)
$C1/4430 8D 78 98 STA $9878 [$7E:9878] A:0380 X:0000 Y:0098 P:envmxdizc // Store the pointer in RAM at 7E9878
$C1/4433 AA TAX A:0380 X:0000 Y:0098 P:envmxdizc // Transfer the pointer to X
$C1/4434 A8 TAY A:0380 X:0380 Y:0098 P:envmxdizc // Transfer the pointer to Y
$C1/4435 7B TDC A:0380 X:0380 Y:0380 P:envmxdizc
$C1/4436 E2 20 SEP #$20 A:0000 X:0380 Y:0380 P:envmxdiZc
$C1/4438 BF 00 00 CE LDA $CE0000,x[$CE:0380] A:0000 X:0380 Y:0380 P:envMxdiZc // Load CE0000 with X (CE0380)
$C1/443C 85 81 STA $81 [$00:0081] A:0090 X:0380 Y:0380 P:eNvMxdizc
$C1/443E BF 01 00 CE LDA $CE0001,x[$CE:0381] A:0090 X:0380 Y:0380 P:eNvMxdizc
$C1/4442 85 80 STA $80 [$00:0080] A:0080 X:0380 Y:0380 P:eNvMxdizc
$C1/4444 BF 02 00 CE LDA $CE0002,x[$CE:0382] A:0080 X:0380 Y:0380 P:eNvMxdizc
$C1/4448 85 83 STA $83 [$00:0083] A:0090 X:0380 Y:0380 P:eNvMxdizc
$C1/444A BF 03 00 CE LDA $CE0003,x[$CE:0383] A:0090 X:0380 Y:0380 P:eNvMxdizc
Using the decoded byte lengths, I attempted to decode Gato's Singing attack to some degree...
The first part of the techs is a header containing pointers to different sections of the tech. Directly following the headers are the scripts themselves.
98 F8 80 00 F0 9E 0A 9F 18 9F 21 9F 3B 9F 4F 9F 62 9F 76 9F 8B 9F - Header for Gato's Singing Attack
CD9EF0 24 05
3D 00 // Set Target (Puts the Spotlight on Gato, setting to 3D 80 puts the spotlight on Crono)
30 1B 01 // Assumed to darken the screen
32 0A
72 0D // Set Facing (Gato faces forward for singing animation)
02 06 // Play Animation (Gato does his singing animation)
24 0C
30 1A 01 // Assumed to lighten screen back up
20 20 // Timer
06 03 // Play Animation Frame?
50 // Damage Related
2E // Damage Related
01 // Damage Related
00 // End Section
CD9F0A 24 0A
02 09 // Play Animation
78 AA // Play Sound (Plays Gato's Singing diddly)
24 0B
20 0F // Timer
36 // Return
06 03 // Play Animation Frame?
00 // End Section
CE9F18 24 0A
02 09 // Play Animation
24 0C
06 03 // Play Animation Frame?
00 // End Section
CD9F21 60 00 // Set Palette (Sets palette for Musical Note Graphics)
73 00
33 00 // Another Set Target (Starts the Musical Notes off from Gato, changing to 33 80 sets them off from Crono)
3A 1E 09 // Assumed to affect the starting position of the notes from the target sprite they originate from
3A 1F D7 // Assumed to affect the starting position of the notes from the target sprite they originate from
1A // Set X,Y coords
36 // Return
24 0A
70 // Show Sprite
02 00 // Play Animation
09 // Set Speed - Medium (sets the speed of the Musical Note)
85 00 // Set Direction (Sets Direction of Musical Note #1)
A8 30 // Slide Sprite (Move Musical Note #1 graphic to the right)
71 // Hide Sprite
00 // End Section
CD9F3B 73 00
24 01
1A // Set X,Y coords
36 // Return
24 0A
20 1E // Timer
70 // Show Sprite
02 00 // Play Animation
09 // Set Speed - Medium (sets the speed of the Musical Note)
85 E0 // Set Direction (Sets Direction of Musical Note #2)
A8 30 // Slide Sprite (Move Musical Note #2 graphic)
71 // Hide Sprite
00 // End Section
CD9F4F 73 00
24 02
1A // Set X,Y coords
36 // Return
20 3C // Timer
70 // Show Sprite
02 00 // Play Animation
09 // Set Speed - Medium (sets the speed of the Musical Note)
85 20 // Set Direction (Sets Direction of Musical Note #3)
A8 30 // Slide Sprite (Move Musical Note #3 graphic)
71 // Hide Sprite
36 // Return
00 // End Section
CD9F62 73 00
24 03
1A // Set X,Y coords
36 // Return
24 0A
20 0F // Timer
70 // Show Sprite
02 00 // Play Animation
09 // Set Speed - Medium (sets the speed of the Musical Note)
85 10 // Set Direction (Sets Direction of Musical Note #4)
A8 30 // Slide Sprite (Move Musical Note #4 graphic)
71 // Hide Sprite
00 // End Section
CD9F76 73 00
24 04
1A // Set X,Y coords
36 // Return
24 0A
20 3C // Timer
70 // Show Sprite
02 00 // Play Animation
09 // Set Speed - Medium (sets the speed of the Musical Note)
85 F0 // Set Direction (Sets Direction of Musical Note #5)
A8 30 // Slide Sprite (Move Musical Note #5 graphic)
71 // Hide Sprite
36 // Return
00 // End Section
CD9F8B 02 06 // Play Animation
20 1E // Timer
06 05
20 0F // Timer
06 03
20 0F // Timer
50 // Damage related?
2E // Damage related?
01 // Damage related?
00 // End Section
Command 1E has it's own pointer table for it's arguments.
Pointer Table for Tech Command 1E's variables
Pointer Table is located at CE0000 and ends at CE009B
78 pointers total (00 - 4E)
28 D4
39 D4
4A D4
5B D4
6C D4
7D D4
8B D4
99 D4
A7 D4
B5 D4
C3 D4
CB D4
DF D4
E6 D4
EE D4
F6 D4
0B D5
11 D5
19 D5
28 D5
3A D5
49 D5
58 D5
6B D5
7E D5
88 D5
A3 D5
B1 D5
C1 D5
12 D6
17 D6
1C D6
62 D6
73 D6
85 D6
C0 D6
C7 D6
CD D6
E5 D6
0C D7
30 D7
54 D7
76 D7
95 D7
9E D7
B9 D7
D8 D7
F7 D7
20 D8
60 D8
67 D8
76 D8
C6 D8
16 D9
2E D9
62 D9
67 D9
70 D9
97 D9
BE D9
CF D9
E1 D9
32 DA
42 DA
53 DA
67 DA
BB DA
E0 DA
10 DB
1C DB
5D DB
65 DB
6D DB
6E DB
75 DB
8D DB
BC DB
E9 DB
And here are the decoded byte lengths. I just realized I'm missing a few entries, I'll add them when I have more time, and some of the descriptions of the commands may be a little off or just plain wrong.
![Smile :)](https://www.chronocompendium.com/Forums/Smileys/default/icon_smile.gif)
Command Decodes Notes
00 - 1 byte
01 - 1 byte
02 - 2 bytes // Play Animation?
03 - 2 bytes // Play Animation?
04 - 2 bytes
05 - 2 bytes
06 - 2 bytes (same code as 05)
07 - 1 byte
08 - 1 byte
09 - 1 byte // Set Speed - Slow
0A - 1 byte // Set Speed - Medium
0B - 1 byte // Set Speed - Fast
0C - 1 byte (same code as 08)
0D - 2 bytes
0E - 1 byte
0F - 1 byte (same code as 08)
10 - 3 bytes // Slide Sprite to XX YY
11 - 1 byte
12 - 2 bytes
13 - 4 bytes
14 - 2 bytes
15 - 3 bytes
19 - 3 bytes // Sprite Teleport
1A - 1 byte
1B - 2 bytes
1C - 2 bytes
1E - 2 bytes // Sprite Effect/Action
1F - 1 byte
20 - 2 bytes // Time To Wait
21 - 1 byte
22 - 2 bytes
23 - 2 bytes
24 - 2 bytes
25 - 2 bytes
26 - 3 bytes
27 - 1 byte
28 - 1 byte
29 - 1 byte
2A - 1 byte
2B - 1 byte
2C - 1 byte
2D - 1 byte
2E - 1 byte
2F - 1 byte (same code as 01)
30 - 3 bytes
31 - 2 bytes
32 - 2 bytes
33 - 2 bytes // Set Target?
34 - 2 bytes
35 - 1 byte
36 - 1 byte
37 - 2 bytes
38 - 1 byte
39 - 1 byte
3A - 3 bytes
3B - 2 bytes
3C - 2 bytes
3D - 2 bytes
3E - 2 bytes (same code as 3D)
3F - 2 bytes (same code as 3D)
40 - 2 bytes (same code as 3D)
41 - 3 bytes
42 - 2 bytes
43 - 4 bytes
44 - 1 byte
45 - 2 bytes (same code as 3D)
46 - 2 bytes (same code as 3D)
47 - 2 bytes
48 - 2 bytes (same code as 47)
49 - 3 bytes
4A - 1 byte
4B - 1 byte (same code as 01)
4C - 1 byte (same code as 01)
4D - 1 byte (same code as 4A)
4E - 1 byte
4F - 1 byte
50 - 1 byte
51 - 1 byte (same code as 50)
52 - 1 byte (same code as 50)
53 - 1 byte (same code as 50)
54 - 1 byte (same code as 50)
55 - 1 byte (same code as 50)
56 - 1 byte (same code as 01)
57 - 1 byte (same code as 01)
58 - 1 byte (same code as 01)
59 - 1 byte (same code as 01)
5A - 1 byte (same code as 01)
5B - 1 byte (same code as 01)
5C - 1 byte (same code as 01)
5D - 1 byte
5E - 1 byte
5F - 1 byte
60 - 2 bytes // Get and Apply Palette?
61 - 4 bytes
62 - 4 bytes (same code as 61)
63 - 4 bytes (same code as 61)
64 - 4 bytes (same code as 61)
65 - 1 byte
66 - 1 byte (same code as 65)
67 - 1 byte (same code as 65)
68 - 1 byte (same code as 65)
69 - 2 bytes
6A - 1 byte
6B - 2 bytes
6C - 3 bytes
6D - 1 byte
6E - 1 byte
6F - 1 byte
70 - 1 byte
71 - 1 byte
72 - 2 bytes // Set Facing?
73 - 2 bytes
74 - 2 bytes
76 - 3 bytes
77 - 2 bytes
78 - 2 bytes // Play Sound
79 - 2 bytes (same code as 78)
7A - 3 bytes
7B - 3 bytes (same code as 7A)
7C - 1 byte // Play Sound Based on Weapon Equipped
7D - 1 byte
7E - 1 byte (same code as 01)
7F - 1 byte (same code as 01)
80 - 3 bytes // Screen Color Flash
81 - 2 bytes (same code as 47)
82 - 2 bytes (same code as 47)
83 - 2 bytes (same code as 47)
84 - 2 bytes (same code as 47)
85 - 2 bytes // Set Direction
86 - 1 byte (same code as 01)
87 - 1 byte (same code as 01)
88 - 1 byte (same code as 01)
89 - 1 byte (same code as 01)
8A - 1 byte (same code as 01)
8B - 1 byte (same code as 01)
8C - 1 byte (same code as 01)
8D - 1 byte (same code as 01)
8E - 1 byte (same code as 01)
8F - 1 byte (same code as 01)
90 - 1 byte (same code as 01)
91 - 1 byte (same code as 01)
92 - 1 byte (same code as 01)
93 - 1 byte (same code as 01)
94 - 1 byte (same code as 01)
95 - 1 byte (same code as 01)
96 - 1 byte (same code as 01)
97 - 1 byte (same code as 01)
98 - 3 bytes
99 - 1 byte
9A - 3 bytes
9B - 1 byte
9C - 3 bytes (same code as 98)
9D - 1 byte (same code as 99)
9E - 1 byte (same code as 01)
9F - 1 byte (same code as 01)
A0 - 1 byte (same code as 01)
A1 - 1 byte (same code as 01)
A2 - 1 byte
A3 - 1 byte (same code as 01)
A4 - 3 bytes
A5 - 1 byte
A6 - 1 byte
A7 - 1 byte (same code as 01)
A8 - 2 bytes // Slide Sprite?
A9 - 2 bytes
AA - 1 byte (same code as 01)
AB - 1 byte (same code as 01)
AC - 1 byte (same code as 01)
AD - 1 byte (same code as 01)
AE - 1 byte (same code as 01)
AF - 1 byte (same code as 01)
B0 - 1 byte (same code as 01)
B1 - 1 byte (same code as 01)
B2 - 1 byte (same code as 01)
B3 - 1 byte (same code as 01)
B4 - 1 byte (same code as 01)
B5 - 1 byte (same code as 01)
B6 - 1 byte (same code as 01)
B7 - 1 byte (same code as 01)
B8 - 1 byte (same code as 01)
B9 - 1 byte (same code as 01)
BA - 1 byte (same code as 01)
BB - 1 byte (same code as 01)
BC - 1 byte (same code as 01)
BD - 1 byte (same code as 01)
BE - 1 byte (same code as 01)
BF - 1 byte (same code as 01)
C0 - 5 bytes // Circular Sprite Movement
C1 - 4 bytes // Circular Sprite Movement
C2 - 5 bytes // Circular Sprite Movement
C3 - 4 bytes // Circular Sprite Movement
C4 - 3 bytes // Moves sprite downward?
C5 - 2 bytes
C6 - 1 byte (same code as 01)
C7 - 1 byte (same code as 01)
C8 - 1 byte (same code as 01)
C9 - 1 byte (same code as 01)
CA - 1 byte (same code as 01)
CB - 1 byte (same code as 01)
CC - 1 byte (same code as 01)
CD - 1 byte (same code as 01)
CE - 1 byte (same code as 01)
CF - 1 byte (same code as 01)
D0 - 1 byte
D1 - 1 byte
D2 - 2 bytes
D3 - 1 byte
D4 - 1 byte
D5 - 1 byte
D6 - 1 byte
D7 - 3 bytes
D8 - 4 bytes
D9 - 2 bytes
DA - 2 bytes
DB - 1 byte