Toribash
Original Post
.rpl file editing
Some have expressed interest as to how I accomplished shotputfinal.rpl and other hand-edited replays.

This is a quick overview on rpl files.

I'll use for my example the shotputfinal.rpl file, which is located in your <toribash install>\replay\ folder as of Toribash v2.2.

I suggest Notepad++ for editing, mostly for line numbers, but it also has some nice advanced search/replace functionality as well.

Line 1:
#!/usr/bin/toribash
Hashbang line. You don't need to know anything about this.

Line 2:
#made with toribash-2.1
Default comment generated by Toribash. Any line preceded with '#' is ignored by Toribash when rendering the replay.

Line 3:
VERSION 6
Version number. It's been 6 since at least 2.0. Haven't bothered mucking with it.

Line 4:
FIGHT 0; shotputfinal Skjef uke
<replay name> <tori's name> <uke's name>
Spaces are used for parsing, so make sure your <replay name> doesn't have any.
The number after FIGHT can be safely ignored.

Line 5:
AUTHOR 0; Skjef
Defines the author's name.
The number after AUTHOR can be safely ignored.

Line 6:
NEWGAME 0;550 10 0 0 0 2 1500 1 0 classic 0 0
<total replay frames> <frames per turn> <?> <?> <?> <dq> <engage distance> <self damage> <wrist/ankle dq> <mod file> <?> <dojo size> <dismemberment threshold>
<dq>: 2 = No DQ, 3 = DQ.
<wrist/ankle dq>: 0 = DQ, 1 = No DQ.
<?>: No idea.
You may notice that there is one more <*> option than there is on the example. <dismemberment threshold> was added in 2.2, so it didn't have a field when I made this replay with 2.1.
The number after the NEWGAME indicates whether it's an single- or a multi-player replay. 0 = single, 1 = multi.

Line 7:
FRAME 0; 0 0
<tori's score> <uke's score>
The number after FRAME indicates the frame that the following JOINT, POS, QAT, LINVEL, ANGVEL, GRIP and CRUSH commands apply to.

Line 8:
JOINT 0; 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 4 10 4 11 4 12 4 13 4 14 4 15 4 16 2 17 2 18 4 19 4
<joint number> <joint state> <joint number> <joint state> ... <joint number> <joint state>
The joint numbers are as follows:
0 = neck
1 = chest
2 = lumbar
3 = abs
4 = right pec
5 = right shoulder
6 = right elbow
7 = left pec
8 = left shoulder
9 = left elbow
10 = right wrist
11 = left wrist
12 = right glute
13 = left glute
14 = right hip
15 = left hip
16 = right knee
17 = left knee
18 = right ankle
19 = left ankle
The joint states are as follows:
If a joint isn't listed, it also counts as relax.
1 = extend/right rotate/right bend
2 = contract/left rotate/left bend
3 = hold
4 = relax
The number after JOINT means this command refers to either tori or uke. 0 = tori, 1 = uke.
JOINT is identical for tori and uke.

Line 9:
POS 0; 1.000000 7.400000 2.590000 1.000000 7.450000 2.140000 1.000000 7.450000 1.890000 1.000000 7.500000 1.690000 1.000000 7.550000 1.490000 0.750000 7.450000 2.090000 0.450000 7.450000 2.240000 0.050000 7.450000 2.240000 1.250000 7.450000 2.090000 1.550000 7.450000 2.240000 1.950000 7.450000 2.240000 -0.350000 7.400000 2.240000 2.350000 7.400000 2.240000 0.800000 7.550000 1.390000 1.200000 7.550000 1.390000 0.800000 7.550000 1.040000 1.200000 7.550000 1.040000 1.200000 7.550000 0.440000 0.800000 7.550000 0.440000 0.800000 7.450000 0.040000 1.200000 7.450000 0.040000
<x co-ordinate> <y co-ordinate> <z co-ordinate> <x co-ordinate> <y co-ordinate> <z co-ordinate> ... <x co-ordinate> <y co-ordinate> <z co-ordinate>
Each triplet of x,y,z co-ordinate refers to a different joint, using the same ordering scheme as the JOINT list above. So, the first triplet refers to the neck joint, the second triplet to the chest joint, etc..., and the last triplet refers to the left ankle joint.
The y axis is directly towards uke, as seen from tori. The x axis is perpendicular to the y axis, and the z axis is straight up and down.
The reason the numbers for the y co-ordinates are so high is because I used a 1500 engage distance for this replay. The regular value for y co-ordinates at an engage distance of 100 is about 0.4.
The number after the POS means this command refers to either tori or uke. 0 = tori, 1 = uke.
POS is identical for tori and uke.

Line 10:
QAT 0; 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000
<?> <x rotation> <y rotation> <z rotation> <?> <x rotation> <y rotation> <z rotation> ... <?> <x rotation> <y rotation> <z rotation>
This sets the current orientation of the joint in question. It uses the same ordering scheme as the JOINT list above.
<?>: No idea. Doesn't seem to affect anything.
The number after the QAT means this command refers to either tori or uke. 0 = tori, 1 = uke.
QAT is not the same for tori and uke.

Line 15:
QAT 1; 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000
<z rotation> <y rotation> <x rotation> <?> <z rotation> <y rotation> <x rotation> <?> ... <z rotation> <y rotation> <x rotation> <?>
Note that the implementation is backwards for uke. I have no idea why.
This sets the current orientation of the joint in question. It uses the same ordering scheme as the JOINT list above.
<?>: No idea. Doesn't seem to affect anything.
The number after the QAT means this command refers to either tori or uke. 0 = tori, 1 = uke.
QAT is not the same for tori and uke.

Line 11:
LINVEL 0; 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
<x velocity> <y velocity> <z velocity> <x velocity> <y velocity> <z velocity> ... <x velocity> <y velocity> <z velocity>
This sets the current linear (straight line) velocity for a given joint. From Tori's perspective, looking towards Uke, a negative y velocity is towards Uke, a positive is away. A negative x velocity is to the right, a positive is to the left. A positive z velocity is up, and a negative is down.
These triplets use the same ordering scheme as the JOINT list above.
The number after the LINVEL means this command refers to either tori or uke. 0 = tori, 1 = uke.
LINVEL is identical for tori and uke.

Line 12:
ANGVEL 0; 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
<x velocity> <y velocity> <z velocity> <x velocity> <y velocity> <z velocity> ... <x velocity> <y velocity> <z velocity>
This sets the current angular (rotational) velocity for a given joint. The axes for this is the same as for QAT.
These triplets use the same ordering scheme as the JOINT list above.
The number after the ANGVEL means this command refers to either tori or uke. 0 = tori, 1 = uke.
LINVEL is identical for tori and uke.

Line 30:
CRUSH 0; 0
<joint> <joint> ... <joint>
This command breaks the joint/body connection as listed below. Any number of joints may be listed in a single CRUSH command.
0 = neck/chest
1 = chest/lumbar
2 = lumbar/abs
3 = abs/glutes
4 = right pec/chest
5 = right shoulder/right pec
6 = right elbow/right bicep
7 = left pec/chest
8 = left shoulder/left pec
9 = left elbow/left bicep
10 = right wrist/right forearm
11 = left wrist/left forearm
12 = right glute/abs
13 = left glute/abs
14 = right hip/rglute
15 = left hip/lglute
16 = right knee/right calf
17 = left knee/right calf
18 = right ankle/right calf
19 = left ankle/right calf
The number after the CRUSH means this command refers to either tori or uke. 0 = tori, 1 = uke.
CRUSH is identical for tori and uke.

Additional command(s) not used in shotputfinal.rpl:
GRIP 0; 1 1
<left hand> <right hand>
<* hand>: 1 = grip, 2 = no grip.
The number after the GRIP means this command refers to either tori or uke. 0 = tori, 1 = uke.
GRIP is identical for tori and uke.

FRACT 0; 1
<joint> <joint> ... <joint>
Fractures a joint. It uses the same list as the JOINT command above, but functions more like CRUSH.
The number after the FRACT means this command refers to either tori or uke. 0 = tori, 1 = uke.
FRACT is identical for tori and uke.

EDIT: Updated JOINT as suggested by Qegola.
EDIT2: Added FRACT command.