- Code: Select all
// Sampras => s0 f8 b2 r8
// Federer => s1 f1/16 b1/3/5 bs1/3/7 r0/4/10
// Nadal => s2/10 f3/18/19 b1 bs11/14 r7 fs3
// Nadal Fh normal=> f2
// Djokovic => s3/15 f4/17 b1/11 r3
// Roddick => s4/21 f5/27 b15 bs12
// Kafelnikov => b2
// Sharapova => s5 f6 b3
// Serena Williams=> s6 f7 b4
// Basic (ex-Fed) => s7
// Berdych => s8 f9 b5/13 bs2 r1
// Murray => s9 f10 b10 bs6 r2
// Nalbandian => s12 f11 b6 bs4
// Ferrer => s14 f15 b7
// Tsonga => s13 f14/20 b8/12 r14
// Del Potro => f12 b9 r9
// Gonzalez => s11 f13 b4 bs5 r5
// Monfils => r6
// Nishikori => r11
// Baghdatis => r12
// Kohlschreiber => r13
// Wawrinka => s17 f21/26 b6/9 bs10
// Stosur => f22
// Wozniacki => f23
// Isner => s16
// Sabatini => f24 b7 bs8
// Haas => f25 b8 bs9
// Fabio Fognini => s18
// Florian Mayer => s19
// Marin Cilic => s20
s = service, f = forehand, b = backhand (1H or 2H), bs = backhand slice, r = return stance
the number is the one used in the Outfit code after "a" ; add 1 to get the number within the "Customize Character" menu ; ie: s2 = Service 3
Gestures :
- Code: Select all
// stupid_000 => PM4
// stupid_001 => PM2
// stupid_002 => PM5
// throwracquet_federer => PM6
// cheerfist_gasquet => PM7
// stupid_gaudio => PM12
// Nadal - Ragingfist => PM4
// Nadal - VictoryGreat => PM4
// hitracket_youzhny => PM10
// Gonzalez - Ragingfist=> PM14
// Gonzalez - HitRacket => PM14
// Tsonga - VictoryGreat=> PM15
'PM4' means it's in PlayerMale04, so the value in the outfit code is 3.
Order of anims within the Outfit code :
1 - Service,
2 - Forehand,
3 - Backhand,
4 - SliceBH,
5 - SliceFH,
6 - ReturnWaiting,
7 - VolleyFH,
8 - VolleyBH,
9 - SmashFH,
10 - SmashBH,
11 - Idle,
12 - ThrowRacquet,
13 - HitRacquet,
14 - Stupid,
15 - Applause,
16 - RagingFist,
17 - CheerFist,
18 - CheerJump,
19 - Sorry,
20 - Victory,
21 - VictoryGreat,
If a code is missing, or is '.' (a dot) instead of a value, then for Service, Forehand, Backhand, SliceBH it's assumed to be 0, and for all other anims it's assumed to have the same value than the Forehand.
The code for anim in the Outfit code is "a" ; for example : "a 1-3-2-4" ; in this example, all anims after SliceBH will be associated to the Forehand 3 (which is #4 in the game menus) .
Creating New Anim :
1st read the Tutorial by Neeky McDeez here : https://www.managames.com/Forum/topic29-5445.php
And download the Modified .X Exporter for 3ds Max 8 if you still didn't get it : https://www.managames.com/Forum/download ... hp?id=6410 .
Then download https://www.managames.com/download.php?T ... trikes.rar ; it contains a bunch of strikes ; it'll help you to start and also show you where the sweet spot is on each strike.
You'll need them because in the official game, all strikes within the same family (ie: all 1H-FH, all 2H-FH, all 1H-BH, all 2H-BH) share the same sweet spot.
So if you create some new strikes, you should make their sweet spot (on the frame where the ball hit occurs) to match the one of the strike of the same family bundled in the .rar above.
I didn't put any serve, so for the serve, I give you manually the coordinates of the sweet spot on ball hit : x (width) = 1.05cm ; y (depth) = -1.5cm ; z (height) = 29.4cm
For the rally strikes, your sweet spot :
- x should be within +/- 0.5cm of the official strike (ideally, even within +/- 0.2cm)
- z is free, but should be somewhat same, as I usually used the most neutral height (ie: can work more or less with low ball & high ball)
For y:
All ball hits occur around 45cm in front of the player, so best Y for sweetspot on hit is around [-3.5, -0.5] ; some of the anims I provided don't have a sweetspot in that place, so don't copy them...

For the service, the sweet spot coordinates should all be within +/- 0.2cm, as it's very important to determine the ball trajectory on serve.
Note : everything is scaled x10 once in the game, so 0.5cm in 3ds Max will be 5cm in the game
The racket sweet spot is near where the purple arrow is pointing on the following picture, and when you put your mouse cursor there (when nothing is selected), you'll see the coordinates shown on bottom right :
Sweetspot List :
on all rally strikes : y = -3.5 / -4.5
BH-1h : x = 8.8 / 9.2 ; z = 10.5 / 10.9
BH-2h : x = 7.2 / 7.6 ; z = 9.7 / 10.1
BH-slice : x = 9.3 / 9.7 ; z = 8.6 / 9.0
FH-1h : x = -11.6 / -11.2 ; z = 12.4 / 12.8
FH-2h : x = -9.6 / -9.2 ; z = 10.8 / 11.2
FH-Slice : x = -11.6 / -11.2 ; z = 10.2 / 10.6
Serve : x = 0.85 / 1.25 ; z = 29.2 / 29.6 ; y = -1.0 / -2.0
How to create a serve to be used Online without Desync :
- Create your serve and its preparation
- Select it for your player in the Training Club
- Launch the WarmUp then exit the game
- Open "System.log" & look for a line containing : "copy the line(s) below to 'PlayerMaleXX\\Service.txt'" (XX is a number) , and copy the line(s) under to the corresponding 'PlayerMaleXX\\Service.txt
- look then for : "copy the line below to 'PlayerMaleXX\\ServiceWaiting.txt'", and copy the line under to the corresponding 'PlayerMaleXX\\ServiceWaiting.txt
- careful : if you selected the serve for both players, these lines will appear twice, but copy them only once to the .txt
Warning : once you have added these lines, the position of the hand and the racket on the 3 events (ball thrown for bouncing, ball thrown for serving, serve hit) will be fixed, and even if you change them in the anim file, the game engine will still use the values from these lines ; so if you do some changes, delete the lines, launch the game, and copy the new ones from the System.log .
Automatic Assigning of extra animations :
By default, extra animations (ie: other animations than Serve, FH, BH, Slice) will try to load their anim with the same number than the assigned Forehand. If it doesn't exist, they will then load their default anim in PlayerMale01.
You can associate an extra anim num to more than 1 Forehand, though.
To do so, add a [NameOfYourAnim].txt in the additional PlayerMaleXX you want, and put this on the 1st line :
- Code: Select all
Anim: ../PlayerMaleXX/[NameOfyOurAnim].x
Example, the file "PlayerMale03/Stupid.txt" contains :
- Code: Select all
Anim: ../PlayerMale04/Stupid.x
Don't forget to add the "Info:" line if this anim is a strike ; just copy the info from the original .txt file.
List of Entry Names for Animations in Tennis.ini :
- Code: Select all
AnimServe, AnimFH, AnimBH,
AnimSliceBH, AnimSliceFH,
AnimReturn,
AnimVolleyFH, AnimVolleyBH,
AnimSmashFH, AnimSmashBH,
AnimIdle,
AnimThrowRacquet, AnimHitRacquet, AnimStupid, AnimApplause,
AnimRagingFist, AnimCheerFist, AnimCheerJump, AnimSorry,
AnimVictory, AnimVictoryGreat
You can add/edit the above entries to manually select your anim style, under [Player1] (or 2, 3, 4).
Few tips to create a good anim :
- be careful of the toes, they often don't rotate with the feet, so you have to rotate them manually to make them point in the correct direction
- be careful that feet touch the ground when they're supposed to
- be careful that feet never go underground, or only by a couple of centimeters (ie: 0.1 or 0.2 units in 3ds)
- try to create as few keys as possible, but place them in strategic points : it's easier to do modifications afterward, and movement will be usually more smooth and natural
- avoid to put 2 keys in a row with 2 very different positions (except around hit, where things go very fast

- you can rotate the clavicle ; it's especially useful to increase the left hand reach on double-handed BH ; can be useful for the right hand as well
- try to avoid player movement ; he should not walk to the left, right, forward or backward ; the only footsteps he's doing should be to rotate around his center of gravity ; he can walk 1 step in direction of the ball, or a bit away of it to help to match the needed sweetspot, but you should avoid at maximum any left/right or right/left or back/forward or forward/back movement before the hit ; try to get your player in the base position at end of the strike with only rotation of the body, or the smallest body translation possible ; all of this is needed so when the player runs in-game, the strike animation doesn't perturb too much his positioning
- if to reach the -0.4 for the sweetspot on Y, you need to create footsteps forward before the hit then backward after the hit, then it might look better to let the sweetspot be around -0.1 or -0.2 and remove the footsteps
How to move the sweetspot of an already created anim ?
- click on Motion -> Biped -> Move All Mode, and enter the needed delta on X : the whole animation will be moved
- un-click Move All Mode
- after go to the 1st frame of anim, select the left foot & set its key to free, idem for the right foot, and then select the whole biped, move it back to the center, set all the keys
- then right-click on the frame number to copy all keys to the last frame of the animation (sometimes, you need to do separately the copy with the vertical biped key)
- after if the anim has few keys for the footsteps, then you'll have only to move, redo or delete 5 or 6 footstep keys, around the beginning and the end of the anim ; it often needs less than 20 minutes to get it done