Difference between revisions of "Talk:Pro Evolution Soccer 2016/Edit file"

From Rigged Wiki
Jump to navigation Jump to search
(Confirming positions are swapped)
(about player appearance entry)
 
(22 intermediate revisions by 4 users not shown)
Line 5: Line 5:
* Header - The header may vary in length. There are some patches where the logo inside this file is changed, so the header length changes.
* Header - The header may vary in length. There are some patches where the logo inside this file is changed, so the header length changes.
* Player entries start at offset 0x10AAA. There are 25000 entries. <s>Each entry has 112 bytes (0x70).</s>
* Player entries start at offset 0x10AAA. There are 25000 entries. <s>Each entry has 112 bytes (0x70).</s>
* Player extra info (appearance mainly) entries start at offset 0x2BC42A. There are 25000 entries. Each entry has 72 bytes (0x48).
* Player extra info (appearance mainly) entries start at offset 0x2BC42A. There are 25000 entries. <s>Each entry has 72 bytes (0x48).</s>
* Team entries start at offset 0x473B6A. There are 850 entries. Each entry has 456 bytes (0x1C8).
* Team entries start at offset 0x473B6A. There are 850 entries. <s>Each entry has 456 bytes (0x1C8).</s>
* Championships entries start at 0x4D257A. There are 100 entries. Each entry has 92 bytes (0x5C). Contains name and ball id.
* Championships entries start at 0x4D257A. There are 100 entries. Each entry has 92 bytes (0x5C). Contains name and ball id.
* Stadium entries start at 0x4D496A. There are 100 entries. Each entry has 128 bytes (0x80).
* Stadium entries start at 0x4D496A. There are 100 entries. Each entry has 128 bytes (0x80).
Line 21: Line 21:
[[User:Heringer]] 14:57, 23 December 2015
[[User:Heringer]] 14:57, 23 December 2015


Thank you! I will look into it and start adding things once Christmas is over. I am a bit surprised that the position enumeration is correct, because when I looked at it from in-game memory all left and right positions where swapped. Then again, I never confirmed through the save file. --[[User:ShiggyGiddy|ShiggyGiddy]] ([[User talk:ShiggyGiddy|talk]]) 08:42, 24 December 2015 (UTC)
Thank you! I will look into it and start adding things once Christmas is over. I am a bit surprised that the position enumeration is correct, because when I looked at it from in-game memory all left and right positions were swapped. Then again, I never confirmed through the save file. --[[User:ShiggyGiddy|ShiggyGiddy]] ([[User talk:ShiggyGiddy|talk]]) 08:42, 24 December 2015 (UTC)


Oh, man, you are rigth about the swapped positions. I did not notice it before, sorry. Just swap them and everything will be right. I used my enumeration from PES2015. I thought it was equal to your values, but there is really this difference (L/R swapped).
Oh, man, you are rigth about the swapped positions. I did not notice it before, sorry. Just swap them and everything will be right. I used my enumeration from PES2015. I thought it was equal to your values, but there is really this difference (L/R swapped).


Her is it:
[[User:Heringer]] 14:39, 24 December 2015
 
<s>On PES2015, the bit you called "Unknown B (0x17:7)" was a flag to indicate if the player was edited or not.</s> Confirmed! --[[User:ShiggyGiddy|ShiggyGiddy]] ([[User talk:ShiggyGiddy|talk]]) 13:30, 13 January 2016 (UTC)
 
[[User:Heringer]] 15:24, 24 December 2015


    public enum Position
The playable position seems to be:
    {
        GK = 0,
        CB = 1,
        LB = 2,
        RB = 3,
        DMF = 4,
        CMF = 5,
        LMF = 6,
        RMF = 7,
        AMF = 8,
        LWF = 9,
        RWF = 10,
        SS = 11,
        CF = 12
    }


[[User:Heringer]] 14:39, 24 December 2015
Bits 0-1: Centre Forward,
Bits 2-3: Second Striker,
Bits 4-5: Left Wing Forward,
Bits 6-7: Right Wing Forward,
Bits 8-9: Attacking Midfielder,
Bits 10-11: Defensive Midfielder,
Bits 12-13: Centre Midfielder,
Bits 14-15: Left Midfielder,
Bits 16-17: Right Midfielder,
Bits 18-19: Right Back,
Bits 20-21: Left Back,
Bits 22-23: Centre Back,
Bits 24-25: Goalkeeper
 
Everything else in player entry seems to be ok as you defined.
 
In the team entry, i can tell you:
 
const uint OFFSET_COACH_NATION = 0xC;
const uint LENGTH_COACH_NATION = 0x2;
const uint OFFSET_TEAM_NATION = 0x8;
const uint LENGTH_TEAM_NATION = 0x2;
 
== Some stuff from Tony ==
<s>Player appearance data
 
* 0x04-0x06 Boots
** When the decimal boot ID is converted to binary/bits, you will get 4 parts. The bits used for the boot ID are the letters in the binary string below:
** dddd 0000 bbbb cccc 0000 00aa
** An example boot ID is 7011, in big-endian hex: 13 C5 and in binary: 0001 0011 1100 0101. The boot ID limits make sure that the last the 2 bits (first 2 on the left) are always 00, thus you actually get the following:
** 01 0011 1100 0101
** Now the first 2 bits on the left are ''aa'' in the string with letters. The next 4 are ''bbbb'', then ''cccc'' and last ''dddd''. So the final string becomes: 0101 0000 0011 1100 0000 0001
** If you have lower boot ID, for example 234, it's EA in hex. But fill up from the left with 0 until you have 4 character byte string, so 00EA.
 
 
* 0x06-0x07 GK Gloves
** The decimal boot ID is converted to little-endian hex and everything is bitshifted 2 bits to the left.
** So for example decimal ID 801 is 21 03 in LE hex and in binary: 0010 0001 0000 0011, and then bitshifted: 1000 01xx 0000 1100
** The x bits are used for the boot ID
 
 
* 0x14 Spectacles
** 6-7 sleeve season style
** 3-5 style of glasses (000 = none)
** 0-2 glasses frame color
 
* 0x2D Skin (and other things)
** 3-4 cheek data
** 0-2 skin ID (full range, where 0 and 7 are transparent skin textures (in the Gamma DLC) and thus allow custom skin texture)</s>
 
==Player Appearance Entry==
 
I am not sure if it will help, because probably you already have something similar and some stuff has changed...
But here is my player appearance entry "map" from last version (PES 2015) regarding the present "unknown" offsets in the article.
The known offset in the article are almost the samething in both versions (2015, 2016).
 
Please note that the bits are indexed from 1 to 8 instead of 0 to 7.
 
16 [5-8] face/facialbuild/jawwidth
17 [1-4] face/facialbuild/jawheight
17 [5-8] face/facialbuild/jawdepth
18 [1-4] face/facialbuild/checkbonewidth
18 [5-8] face/facialbuild/checkboneheight
19 [1-4] face/facialbuild/checkbonedepth
19 [5-8] ?
1A [1-4] ?
1A [5-8] face/eyebrowshape/glabellawidth
1B [1-4] face/eyebrowshape/angleinner
1B [5-8] face/eyebrowshape/glabellaheight
1C [1-4] face/eyebrowshape/eyebrowlength
1C [5-8] face/eyebrowshape/angleouter
1D [1-4] face/eyebrowshape/eyebrowdepth
1D [5-8] face/eyeshape/pupilsize
1E [1-4] face/eyeshape/eyedepth
1E [5-8] face/eyeshape/innereyepos
1F [1-4] face/eyeshape/innereyecornerht
1F [5-8] face/eyeshape/outereyepos
20 [1-4] face/eyeshape/eyecornerht
20 [5-8] face/eyeshape/uppereyelidposinner
21 [1-4] face/eyeshape/uppereyelidhtinner
21 [5-8] face/eyeshape/uppereyelidposouter
22 [1-4] face/eyeshape/uppereyelidhtouter
22 [5-8] face/eyeshape/bottomeyelidpos
23 [1-4] face/eyeshape/bottomeyelidht
23 [5-8] face/eyeshape/horizontaleyepos
24 [1-4] face/eyeshape/eyeheight
24 [5-8] face/noseshape/height
25 [1-4] face/noseshape/lenght
25 [5-8] face/noseshape/size
26 [1-4] face/noseshape/nasalbridgeposition
26 [5-8] face/noseshape/bridge
27 [1-4] face/noseshape/width
27 [5-8] face/noseshape/nasalrootheight
28 [1-4] face/mouthshape/attribute3
28 [5-8] face/mouthshape/attribute5
29 [1-4] face/mouthshape/attribute6
29 [5-8] ?
2A [1-4] face/mouthshape/attribute7
2A [5-8] face/mouthshape/shape
2B [1-4] face/mouthshape/attribute8
2B [5-8] face/facialbuild/chinwidth
2C [1-4] face/facialbuild/chinheight
2C [5-8] face/facialbuild/chindepth
2D [1-3] face/skincolor
2D [4-8] face/skin/type
2E [1-3] face/skin/forehead
2E [4-8] face/facialhair/type
2F [1-3] face/skin/wrinkles
2F [4-8] face/eyeshape/uppereyelidtype
30 [1-4] face/eyeshape/bottomeyelidtype
30 [5-8] face/ear/lenght
31 [1-4] face/ear/width
31 [5-8] face/ear/angle
32 [1-5] face/eyebrowshape/eyebrowstyle
32 [6-8] face/facialbuild/necklinetype
33 [1-4] head/facesize/facesize
33 [5-8] head/facesize/faceposition
34 [1-6] face/noseshape/type, angle: type = 1 + valor / 3; dif = valor - type; angle = 0, se dif = 0; -1, se dif = 1; +1, se dif = 2
34 [7-8] ?
35 [1-3] face/mouthshape/type1
35 [4-6] face/mouthshape/type2
35 [7-8] hairstyle/color/red = 35[8-7]  + 36[4-1]
36 [1-4] hairstyle/color/red = 35[8-7]  + 36[4-1]
36 [5-8] hairstyle/color/green = 36[8-5]  + 37[2-1]
37 [1-2] hairstyle/color/green = 36[8-5]  + 37[2-1]
37 [1-6] hairstyle/color/blue
38 [1-8] hairstyle/variation
39 [1-6] face/eyebrowshape/color/red
39 [7-8] face/eyebrowshape/type
3A [1-6] face/eyebrowshape/color/green
3A [7-8] face/eyebrowshape/density
3B [1-6] face/eyebrowshape/color/blue
3B [7-8] face/eyebrowshape/eyebrowthickness
3C [1-3] hairstyle/hairstyles (1=skinhead, 2=veryshort, 3=short, 4=medium, 5=long, 6=special)
3C [4-6] hairstyle/hairtype (0=undefined, 1=straight, 2=wavy, 3=permed, 4=dreadlocks)
3C [7-8] ?
3D [1-1] hairstyle/acessory
3D [2-4] hairstyle/acessorycolor (flag and color index)
3D [5-8] face/facialhair/color/red = 0x3D[8-5]  + 0x3E[2-1]
3E [1-2] face/facialhair/color/red = 0x3D[8-5]  + 0x3E[2-1]
3E [3-8] face/facialhair/color/green
3F [1-6] face/facialhair/color/blue
3F [7-8] face/facialhair/thickness
40 [1-4] face/eyeshape/iriscolor
40 [5-8] ? (0 or 7)
41 [1-4] ? (0 or 7)
41 [5-8] hairstyle/color/preset  (weird: 0=custom(preset9); 1=preset4; 2=preset6; 3=preset5; 4=preset8; 5=preset1; 6=preset2; 7=preset3; 8=preset7)
 
==Team-Player Entry==
 
The last 32 bytes used to be the shirt numbers. Each byte is a shirt number.
 
In PES 2015, the last shirt number was repeated for the empty players, i do not know why. But i do not think this is relevant, i think it is just ignored.
 
Example: a team with 23 players numbered sequentially would have the last 32 bytes:
01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 17 17 17 17 17 17 17 17 17
 
[[User:Heringer|Heringer]] ([[User talk:Heringer|talk]]) 23:49, 28 December 2015 (UTC)
 
 
Ah that makes perfect sense, thanks! I'll update the table - [[User:NBD|NBD]] ([[User talk:NBD|talk]]) 23:54, 28 December 2015 (UTC)
 
==Team Tactics==
 
In the original option file, it starts at offset 0x530272.
 
It is compound by 850 entries. Each entry is 520 (0x208) bytes long.
 
Please note that there is no player id in this entry. The data references the player index inside the team roster.
 
Example:
The Barcelona teams roster: C. Bravo, G. Piqué, M. Bartra, D. Alves, J. Alba, J. Mascherano, J. Rakitic, S. Busquets, Sandro, Neymar, and so on.
The first player has index 0.
The captain is 7. It means: the 8th player in the team roster is the captain. So, S. Busquets is the captain.
 
0x000 4 bytes - team id - the value 0x03FFFF is used when it is an empty entry
0x004 offensive tactics
each tactics contains 11 3-bytes entries: player position, x-coordinate, y-coordinate
the first 3-bytes are about the player that is referenced in offset 0x178 (see below), the second 3-bytes are about the player that is referenced in  offset 0x179 (see below) and so on until the 11th player
(sorry is a little confusing)
0x025 defensive tactics - same structure as offensive tactics
0x046 custom tactics - same structure as offensive tactics
0x067 23 bytes - unknown data
0x07E same structure from 0x04 to 0x7D - seems it is not used in the game
0x0F8 same structure from 0x04 to 0x7D - seems it is not used in the game
0x172 6 bytes - unknown
0x178 128 bytes - 32 player references, 4 bytes each - all values occurrences are between 0 and 31, even if it is an empty slot
0x1F8 1 byte - long fk taker
0x1F9 1 byte - short fk taker 1
0x1FA 1 byte - short fk taker 2
0x1FB 1 byte - left ck taker
0x1FC 1 byte - right ck taker
0x1FD 1 byte - pk taker
0x1FE 1 byte - captain
0x1FF 1 byte - join attack 1 - 0xFF means empty
0x200 1 byte - join attack 2 - 0xFF means empty
0x201 1 byte - join attack 3 - 0xFF means empty
0x202 zeros
 
TODO: the order needs confirmation (offensive, defensive, custom)
 
[[User:Heringer|Heringer]] ([[User talk:Heringer|talk]]) 19:31, 29 December 2015 (UTC)
 
In the tactics, there are two weird entries. There are ten player references (2th to 11th) with value 0xFF. The teams are:
* ID 61 - Japan (there are three Japan's in the game, i don't know why, the others have ID 52 and 58)
* ID 4971 - The Old Boys (warning: it is not the "Newells Old Boys" - Argentina)
 
[[User:Heringer|Heringer]] ([[User talk:Heringer|talk]]) 14:00, 30 December 2015 (UTC)
 
<s>I could not confirm this flag in team entry:
 
0x013:7 1 bit Game Plan Edited Flag
 
I used the original edit file and found 300 flags on and 279 flags off. I was expecting to find all them off.
 
EDIT: the other flags are all off as expected.</s>
 
[[User:Heringer|Heringer]] ([[User talk:Heringer|talk]]) 15:14, 21 January 2016 (UTC)
 
I think i got it now. Regarding the bytes 0x12 and 0x13 in ''team entry'', do you think the bit order may be inverted? According to my tests, the ''team names edited flag'' would be 0x12:0 instead of 0x12:7, for example. Maybe i'm confused about the byte endian, but maybe it could be checked.
 
With this "inverted approach", i used the original edit file and all those flags are off, as expected.
 
I am considering that the bit 0x12:0 is the least significant bit. But i confess i may be confused about the byte endian.
 
[[User:Heringer|Heringer]] ([[User talk:Heringer|talk]]) 10:00, 22 January 2016 (UTC)
 
==Player Appearance Entry==
 
Here is what i found out about the player appearance. Maybe you are interested on include it in the article.
 
Please, note i use a different notation. But i think there is no need to explain since you already know how is the file. The terms refers to the terms used in 2015 version, but the corresponding new term in 2016 is shown when it is not straightforward.
 
<pre>
bytes bits(operation){values}
00-03 player id
04-04 [1] edited face
04-04 [2] edited hairstyle
04-04 [3] edited physique
04-04 [4] edited uniform
04-04 [5-8] boot slot index?
05-06 boot slot index, player gloves?
08-0B base copy player id
0C-0C [1-4](-7){-7,7} PhysiqueNeckLength
0C-0C [5-8](-7){-7,7} PhysiqueNeckWidth (PhysiqueNeckSize)
0D-0D [1-4](-7){-7,7} PhysiqueShoulderHeight
0D-0D [5-8](-7){-7,7} PhysiqueShoulderWidth
0E-0E [1-4](-7){-7,7} PhysiqueChestMeasurement
0E-0E [5-8](-7){-7,7} PhysiqueWaistCircumference
0F-0F [1-4](-7){-7,7} PhysiqueArmCircumference
0F-0F [5-8](-7){-7,7} PhysiqueArmLength
10-10 [1-4](-7){-7,7} PhysiqueThigCircumference
10-10 [5-8](-7){-7,7} PhysiqueCalfCircumference
11-11 [1-4](-7){-7,7} PhysiqueLegLength
11-11 [5-8](-7){-7,7} FaceHeadLength
12-12 [1-4](-7){-7,7} FaceHeadWidth
12-12 [5-8](-7){-7,7} FaceHeadDepth
13-13 [1-3] TODO (not checked) UniformTapeColorIndex
13-13 [4-6] TODO (not checked) UniformTapeRightColorIndex
13-13 [7-8] TODO (not checked) UniformTapeWristTaping
14-14 [1-3] TODO (not checked) Spectacles frame color
14-14 [4-6] TODO (not checked) Spectacles
14-14 [7-8] TODO (not checked) UniformSleeves
15-15 [1-2] TODO (not checked) UniformLongSleeveUndershirt
15-15 [3-4] TODO (not checked) UniformSockLength
15-15 [5-6] TODO (not checked) UniformUndershorts
15-15 [7] TODO (not checked) UniformShirtTailUntucked
15-15 [8] TODO (not checked) UniformTapeAnkleTapeOn
16-16 [1] TODO (not checked) UniformPlayerGlovesWornInWinter
16-16 [2-4]
16-16 [5-8](-7){-7,7} FaceFacialBuildJawWidth //jawline - looks like is redundant
17-17 [1-4](-7){-7,7} FaceFacialBuildJawHeight
17-17 [5-8](-7){-7,7} FaceFacialBuildJawDepth //jawline - see FaceFacialBuildJawWidth
18-18 [1-4](-7){-7,7} FaceFacialBuildCheekBoneWidth //cheekbones
18-18 [5-8] seems is not used anymore, used to be FaceFacialBuildCheekBoneHeight
19-19 [1-4] seems is not used anymore, used to be FaceFacialBuildCheekBoneDepth
19-19 [5-8]
1A-1A [1-4]
1A-1A [5-8](-7){-7,7} FaceEyebrowGlabellaWidth (brow width)
1B-1B [1-4](-7){-7,7} FaceEyebrowAngleInner (inner eybrow height)
1B-1B [5-8] seems is not used anymore, used to be FaceEyebrowGlabellaHeight
1C-1C [1-4](-7){-7,7} FaceEyebrowLength (temple width)
1C-1C [5-8](-7){-7,7} FaceEyebrowAngleOuter (outer eybrow height)
1D-1D [1-4](-7){-7,7} FaceEyebrowDepth
1D-1D [5-8](-7){-7,7} FaceEyePupilSize
1E-1E [1-4](-7){-7,7} FaceEyeDepth
1E-1E [5-8](-7){-7,7} FaceEyeInnerEyePosition
1F-1F [1-4](-7){-7,7} FaceEyeInnerEyeHeight
1F-1F [5-8](-7){-7,7} FaceEyeOuterEyePosition
20-20 [1-4](-7){-7,7} FaceEyeCornerHeight
20-20 [5-8](-7){-7,7} FaceEyeUpperEyelidPositionInner (upper eyelid width inner)
21-21 [1-4](-7){-7,7} FaceEyeUpperEyelidHeightInner
21-21 [5-8](-7){-7,7} FaceEyeUpperEyelidPositionOuter (upper eyelid width outer)
22-22 [1-4](-7){-7,7} FaceEyeUpperEyelidHeightOuter
22-22 [5-8] seems is not used anymore, used to be FaceEyeBottomEyelidPosition
23-23 [1-4](-7){-7,7} FaceEyeBottomEyelidHeight
23-23 [5-8](-7){-7,7} FaceEyeHorizontalPosition
24-24 [1-4](-7){-7,7} FaceEyeHeight
24-24 [5-8](-7){-7,7} FaceNoseHeight
25-25 [1-4](-7){-7,7} FaceNoseLength //nose tip depth
25-25 [5-8](-7){-7,7} FaceNoseSize //nostril height
26-26 [1-4] seems is not used anymore, used to be FaceNoseNasalBridgePosition
26-26 [5-8](-7){-7,7} FaceNoseBridge //nose depth
27-27 [1-4](-7){-7,7} FaceNoseWidth
27-27 [5-8] seems is not used anymore, used to be FaceNoseNasalRootHeight
28-28 [1-4](-7){-7,7} FaceMouthPosition (mouth height)
28-28 [5-8](-7){-7,7} FaceMouthDepth
29-29 [1-4](-7){-7,7} FaceMouthLipSize
29-29 [5-8]
2A-2A [1-4](-7){-7,7} FaceMouthShape //mouth corner height
2A-2A [5-8](-7){-7,7} FaceMouthWidth
2B-2B [1-4] seems is not used anymore, used to be FaceMouthPositionOfMouthEdges
2B-2B [5-8](-7){-7,7} FaceFacialBuildChinWidth
2C-2C [1-4](-7){-7,7} FaceFacialBuildChinHeight
2C-2C [5-8](-7){-7,7} FaceFacialBuildChinDepth
2D-2D [1-3]{1,6} FaceSkinColorIndex
2D-2D [4-5](+1){1,4} FaceFacialBuildCheekBoneType
2D-2D [5-8] seems is not used anymore, used to be FaceSkinType
2E-2E [1-3]{1,6} FaceSkinForeHead (forehead)
2E-2E [4-8]{0,12} FaceFacialHairType
2F-2F [1-3]{1,5} FaceSkinWrinkles (laugher lines)
2F-2F [4-8]{1,7} FaceEyeUpperEyelidType
30-30 [1-4]{1,3} FaceEyeBottomEyelidType
30-30 [5-8](-7){-7,7} FaceEarLength
31-31 [1-4](-7){-7,7} FaceEarWidth
31-31 [5-8](-7){-7,7} FaceEarAngle
32-32 [1-5]{1,6} FaceEyebrowType
32-32 [6-8]{1,3} FaceFacialBuildNeckLineType
33-33 [1-4](-7){-7,7} FaceHeadFaceSize
33-33 [5-8](-7){-7,7} FaceHeadFacePosition
34-34 [1-6](+1){1,7} FaceNoseType
34-34 [7-8]
35-35 [1-3]{1,4} FaceMouthUpperLipType
35-35 [4-6]{1,3} FaceMouthLowerLipType
35-35 [7-8] HairstyleColorRedChannel 0x36[4-1] + 0x35[8-7]
36-36 [1-4] HairstyleColorRedChannel 0x36[4-1] + 0x35[8-7]
36-36 [5-8] HairstyleColorGreenChannel 0x37[2-1] + 0x36[8-5]
37-37 [1-2] HairstyleColorGreenChannel 0x37[2-1] + 0x36[8-5]
37-37 [3-8] HairstyleColorBlueChannel 0x37[8-3]
38-38 [1-3]{0,7} HairStyleHairStyles: hairstyle/overall/style (default=0, normal=1, dry=2, mohican, afro, dreadlocks, braided, special=7)
38-38 [4]
38-38 [5-7]{1,6} HairStyleSideBackCropped: hairstyle/sideback/cropped
38-38 [8]
39-39 [1-6]{0,63} FaceEyebrowColorRedChannel
39-39 [7-8]{0,2} FaceEyebrowStyle
3A-3A [1-6]{0,63} FaceEyebrowColorGreenChannel
3A-3A [7-8]{0,3} FaceEyebrowDensity
3B-3B [1-6]{0,63} FaceEyebrowColorBlueChannel
3B-3B [7-8]{0,2} FaceEyebrowThickness
3C-3C [1-3]{0,5} HairStyleLength: hairstyle/overall/length (shaven=1, very short=2, short=3, medium=4, long=5)
3C-3C [4-6]{0,7} HairStyleWaveLevel
3C-3C [7-8]
3D-3D [1] HairStyleAcessoryOn²
3D-3D [2-4]{0,7} HairStyleAcessoryColorIndex
3D-3D [5-8]{0,63} FaceFacialHairColorRedChannel 0x3E[2-1] + 0x3D[8-5]
3E-3E [1-2]{0,63} FaceFacialHairColorRedChannel 0x3E[2-1] + 0x3D[8-5]
3E-3E [3-8]{0,63} FaceFacialHairColorGreenChannel
3F-3F [1-6]{0,63} FaceFacialHairColorBlueChannel
3F-3F [7-8]{0,3} FaceFacialHairThickness
40-40 [1-4]{0,10} FaceEyeIrisColorIndex
40-40 [5-8]{0,29} HairStyleVariation 0x41[1] + 0x40[5-8]
41-41 [1] HairStyleVariation 0x41[1] + 0x40[5-8]
41-41 [2-4]
41-41 [5-8] HairStyleColorPreset (0=custom(preset9); 1=preset4; 2=preset6; 3=preset5; 4=preset8; 5=preset1; 6=preset2; 7=preset3; 8=preset7)
42-42 [1-2]{1,4} hairstyle/front/style (up=1, down=2, combed back=3)
42-42 [3]
42-42 [4-6]{1,6} HairStyleFrontParted: hairstyle/front/parted (off=1 left2=2 left1=3 center=4 right1=5 right2=6)
42-42 [7-8]{1,4} HairStyleSideBackStyle: hairstyle/sideback/style 0x43[1] + 0x42[8-7] (normal=1, reduce body=2, shorter sides=3, cropped=4)
43-43 [1]{1,4} HairStyleSideBackStyle: hairstyle/sideback/style 0x43[1] + 0x42[8-7]
43-43 [2-3]{1,3} HairStyleFrontHairLine: hairstyle/front/hairline
43-43 [5-6]{1,3} HairStyleFrontForehead: hairstyle/front/forehead (narrow=1, normal=2, wide=3)
43-43 [7-8]
 
² HairStyleAcessoryOn
In the game, this property is enabled when length is medium or long.
For hair/overall/style = special, there is accessory for variations 8, 10, 11, 16, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29,
but it does not mean the property is true in the file. Actually, in the unit tests, the accessory is off (0) for all these cases,
except for variations 24, 26.
</pre>

Latest revision as of 01:31, 19 February 2016

Here is some contribution:

Structure of EDIT00000000

  • Header - The header may vary in length. There are some patches where the logo inside this file is changed, so the header length changes.
  • Player entries start at offset 0x10AAA. There are 25000 entries. Each entry has 112 bytes (0x70).
  • Player extra info (appearance mainly) entries start at offset 0x2BC42A. There are 25000 entries. Each entry has 72 bytes (0x48).
  • Team entries start at offset 0x473B6A. There are 850 entries. Each entry has 456 bytes (0x1C8).
  • Championships entries start at 0x4D257A. There are 100 entries. Each entry has 92 bytes (0x5C). Contains name and ball id.
  • Stadium entries start at 0x4D496A. There are 100 entries. Each entry has 128 bytes (0x80).
  • To be confirmed: Uniform entries start at 0x4D7B6A. There are 2500 entries. Each entry has 88 bytes (0x58).
  • Teams roster entries start at 0x50D6CA. There are 850 entries. Each entry has 164 bytes (0xA4).
  • Leagues roster entries start at 0x52F752. There are 712 entries, each entry has 4 bytes and is a team id. The league slots are fixed. It is a mess. I will post about it later.
  • To be confirmed: Teams tactics entries start at 0x530272. There are 850 entries. Each entry has 520 bytes (0x208).
  • To be confirmed: From 0x59C102 to the end there is nothing.

User:Heringer 08:17, 23 December 2015

I confirmed via unit testing that the position enumeration is correct and all players has values from 0 to 12. Though, the rule about the player offset 0x1F:7 does not seem to be correct.

User:Heringer 14:57, 23 December 2015

Thank you! I will look into it and start adding things once Christmas is over. I am a bit surprised that the position enumeration is correct, because when I looked at it from in-game memory all left and right positions were swapped. Then again, I never confirmed through the save file. --ShiggyGiddy (talk) 08:42, 24 December 2015 (UTC)

Oh, man, you are rigth about the swapped positions. I did not notice it before, sorry. Just swap them and everything will be right. I used my enumeration from PES2015. I thought it was equal to your values, but there is really this difference (L/R swapped).

User:Heringer 14:39, 24 December 2015

On PES2015, the bit you called "Unknown B (0x17:7)" was a flag to indicate if the player was edited or not. Confirmed! --ShiggyGiddy (talk) 13:30, 13 January 2016 (UTC)

User:Heringer 15:24, 24 December 2015

The playable position seems to be:

Bits 0-1: Centre Forward,
Bits 2-3: Second Striker,
Bits 4-5: Left Wing Forward,
Bits 6-7: Right Wing Forward,
Bits 8-9: Attacking Midfielder,
Bits 10-11: Defensive Midfielder,
Bits 12-13: Centre Midfielder,
Bits 14-15: Left Midfielder,
Bits 16-17: Right Midfielder,
Bits 18-19: Right Back,
Bits 20-21: Left Back,
Bits 22-23: Centre Back,
Bits 24-25: Goalkeeper

Everything else in player entry seems to be ok as you defined.

In the team entry, i can tell you:

const uint OFFSET_COACH_NATION = 0xC;
const uint LENGTH_COACH_NATION = 0x2;
const uint OFFSET_TEAM_NATION = 0x8;
const uint LENGTH_TEAM_NATION = 0x2;

Some stuff from Tony

Player appearance data

  • 0x04-0x06 Boots
    • When the decimal boot ID is converted to binary/bits, you will get 4 parts. The bits used for the boot ID are the letters in the binary string below:
    • dddd 0000 bbbb cccc 0000 00aa
    • An example boot ID is 7011, in big-endian hex: 13 C5 and in binary: 0001 0011 1100 0101. The boot ID limits make sure that the last the 2 bits (first 2 on the left) are always 00, thus you actually get the following:
    • 01 0011 1100 0101
    • Now the first 2 bits on the left are aa in the string with letters. The next 4 are bbbb, then cccc and last dddd. So the final string becomes: 0101 0000 0011 1100 0000 0001
    • If you have lower boot ID, for example 234, it's EA in hex. But fill up from the left with 0 until you have 4 character byte string, so 00EA.


  • 0x06-0x07 GK Gloves
    • The decimal boot ID is converted to little-endian hex and everything is bitshifted 2 bits to the left.
    • So for example decimal ID 801 is 21 03 in LE hex and in binary: 0010 0001 0000 0011, and then bitshifted: 1000 01xx 0000 1100
    • The x bits are used for the boot ID


  • 0x14 Spectacles
    • 6-7 sleeve season style
    • 3-5 style of glasses (000 = none)
    • 0-2 glasses frame color


  • 0x2D Skin (and other things)
    • 3-4 cheek data
    • 0-2 skin ID (full range, where 0 and 7 are transparent skin textures (in the Gamma DLC) and thus allow custom skin texture)

Player Appearance Entry

I am not sure if it will help, because probably you already have something similar and some stuff has changed... But here is my player appearance entry "map" from last version (PES 2015) regarding the present "unknown" offsets in the article. The known offset in the article are almost the samething in both versions (2015, 2016).

Please note that the bits are indexed from 1 to 8 instead of 0 to 7.

16 [5-8]	face/facialbuild/jawwidth
17 [1-4]	face/facialbuild/jawheight
17 [5-8]	face/facialbuild/jawdepth
18 [1-4]	face/facialbuild/checkbonewidth
18 [5-8]	face/facialbuild/checkboneheight
19 [1-4]	face/facialbuild/checkbonedepth
19 [5-8]	?
1A [1-4]	?
1A [5-8]	face/eyebrowshape/glabellawidth
1B [1-4]	face/eyebrowshape/angleinner
1B [5-8]	face/eyebrowshape/glabellaheight
1C [1-4]	face/eyebrowshape/eyebrowlength
1C [5-8]	face/eyebrowshape/angleouter
1D [1-4]	face/eyebrowshape/eyebrowdepth
1D [5-8]	face/eyeshape/pupilsize
1E [1-4]	face/eyeshape/eyedepth
1E [5-8]	face/eyeshape/innereyepos
1F [1-4]	face/eyeshape/innereyecornerht
1F [5-8]	face/eyeshape/outereyepos
20 [1-4]	face/eyeshape/eyecornerht
20 [5-8]	face/eyeshape/uppereyelidposinner
21 [1-4]	face/eyeshape/uppereyelidhtinner
21 [5-8]	face/eyeshape/uppereyelidposouter
22 [1-4]	face/eyeshape/uppereyelidhtouter
22 [5-8]	face/eyeshape/bottomeyelidpos
23 [1-4]	face/eyeshape/bottomeyelidht
23 [5-8]	face/eyeshape/horizontaleyepos
24 [1-4]	face/eyeshape/eyeheight
24 [5-8]	face/noseshape/height
25 [1-4]	face/noseshape/lenght
25 [5-8]	face/noseshape/size
26 [1-4]	face/noseshape/nasalbridgeposition
26 [5-8]	face/noseshape/bridge
27 [1-4]	face/noseshape/width
27 [5-8]	face/noseshape/nasalrootheight
28 [1-4]	face/mouthshape/attribute3
28 [5-8]	face/mouthshape/attribute5
29 [1-4]	face/mouthshape/attribute6
29 [5-8]	?
2A [1-4]	face/mouthshape/attribute7
2A [5-8]	face/mouthshape/shape
2B [1-4]	face/mouthshape/attribute8
2B [5-8]	face/facialbuild/chinwidth
2C [1-4]	face/facialbuild/chinheight
2C [5-8]	face/facialbuild/chindepth
2D [1-3] face/skincolor
2D [4-8] face/skin/type
2E [1-3] face/skin/forehead
2E [4-8] face/facialhair/type
2F [1-3] face/skin/wrinkles
2F [4-8] face/eyeshape/uppereyelidtype
30 [1-4] face/eyeshape/bottomeyelidtype
30 [5-8] face/ear/lenght
31 [1-4] face/ear/width
31 [5-8] face/ear/angle
32 [1-5] face/eyebrowshape/eyebrowstyle
32 [6-8] face/facialbuild/necklinetype
33 [1-4] head/facesize/facesize
33 [5-8] head/facesize/faceposition
34 [1-6] face/noseshape/type, angle: type = 1 + valor / 3; dif = valor - type; angle = 0, se dif = 0; -1, se dif = 1; +1, se dif = 2
34 [7-8] ?
35 [1-3] face/mouthshape/type1
35 [4-6] face/mouthshape/type2
35 [7-8] hairstyle/color/red = 35[8-7]  + 36[4-1] 
36 [1-4] hairstyle/color/red = 35[8-7]  + 36[4-1] 
36 [5-8] hairstyle/color/green = 36[8-5]  + 37[2-1] 
37 [1-2] hairstyle/color/green = 36[8-5]  + 37[2-1] 
37 [1-6] hairstyle/color/blue
38 [1-8] hairstyle/variation
39 [1-6] face/eyebrowshape/color/red
39 [7-8] face/eyebrowshape/type
3A [1-6] face/eyebrowshape/color/green
3A [7-8] face/eyebrowshape/density
3B [1-6] face/eyebrowshape/color/blue
3B [7-8] face/eyebrowshape/eyebrowthickness
3C [1-3] hairstyle/hairstyles (1=skinhead, 2=veryshort, 3=short, 4=medium, 5=long, 6=special)
3C [4-6] hairstyle/hairtype (0=undefined, 1=straight, 2=wavy, 3=permed, 4=dreadlocks)
3C [7-8] ?
3D [1-1] hairstyle/acessory
3D [2-4] hairstyle/acessorycolor (flag and color index)
3D [5-8] face/facialhair/color/red = 0x3D[8-5]  + 0x3E[2-1] 
3E [1-2] face/facialhair/color/red = 0x3D[8-5]  + 0x3E[2-1] 
3E [3-8] face/facialhair/color/green
3F [1-6] face/facialhair/color/blue
3F [7-8] face/facialhair/thickness
40 [1-4] face/eyeshape/iriscolor
40 [5-8] ? (0 or 7)
41 [1-4] ? (0 or 7)
41 [5-8] hairstyle/color/preset  (weird: 0=custom(preset9); 1=preset4; 2=preset6; 3=preset5; 4=preset8; 5=preset1; 6=preset2; 7=preset3; 8=preset7)

Team-Player Entry

The last 32 bytes used to be the shirt numbers. Each byte is a shirt number.

In PES 2015, the last shirt number was repeated for the empty players, i do not know why. But i do not think this is relevant, i think it is just ignored.

Example: a team with 23 players numbered sequentially would have the last 32 bytes:
01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 17 17 17 17 17 17 17 17 17

Heringer (talk) 23:49, 28 December 2015 (UTC)


Ah that makes perfect sense, thanks! I'll update the table - NBD (talk) 23:54, 28 December 2015 (UTC)

Team Tactics

In the original option file, it starts at offset 0x530272.

It is compound by 850 entries. Each entry is 520 (0x208) bytes long.

Please note that there is no player id in this entry. The data references the player index inside the team roster.

Example: 
	The Barcelona teams roster: C. Bravo, G. Piqué, M. Bartra, D. Alves, J. Alba, J. Mascherano, J. Rakitic, S. Busquets, Sandro, Neymar, and so on.
	The first player has index 0.
	The captain is 7. It means: the 8th player in the team roster is the captain. So, S. Busquets is the captain.
0x000 4 bytes - team id - the value 0x03FFFF is used when it is an empty entry
0x004 offensive tactics
	each tactics contains 11 3-bytes entries: player position, x-coordinate, y-coordinate
	the first 3-bytes are about the player that is referenced in offset 0x178 (see below), the second 3-bytes are about the player that is referenced in  offset 0x179 (see below) and so on until the 11th player
	(sorry is a little confusing)
0x025 defensive tactics - same structure as offensive tactics
0x046 custom tactics - same structure as offensive tactics
0x067 23 bytes - unknown data
0x07E same structure from 0x04 to 0x7D - seems it is not used in the game
0x0F8 same structure from 0x04 to 0x7D - seems it is not used in the game
0x172 6 bytes - unknown
0x178 128 bytes - 32 player references, 4 bytes each - all values occurrences are between 0 and 31, even if it is an empty slot
0x1F8 1 byte - long fk taker
0x1F9 1 byte - short fk taker 1
0x1FA 1 byte - short fk taker 2
0x1FB 1 byte - left ck taker
0x1FC 1 byte - right ck taker
0x1FD 1 byte - pk taker
0x1FE 1 byte - captain
0x1FF 1 byte - join attack 1 - 0xFF means empty
0x200 1 byte - join attack 2 - 0xFF means empty
0x201 1 byte - join attack 3 - 0xFF means empty
0x202 zeros

TODO: the order needs confirmation (offensive, defensive, custom)

Heringer (talk) 19:31, 29 December 2015 (UTC)

In the tactics, there are two weird entries. There are ten player references (2th to 11th) with value 0xFF. The teams are:

  • ID 61 - Japan (there are three Japan's in the game, i don't know why, the others have ID 52 and 58)
  • ID 4971 - The Old Boys (warning: it is not the "Newells Old Boys" - Argentina)

Heringer (talk) 14:00, 30 December 2015 (UTC)

I could not confirm this flag in team entry:

0x013:7	1 bit	Game Plan Edited Flag

I used the original edit file and found 300 flags on and 279 flags off. I was expecting to find all them off.

EDIT: the other flags are all off as expected.

Heringer (talk) 15:14, 21 January 2016 (UTC)

I think i got it now. Regarding the bytes 0x12 and 0x13 in team entry, do you think the bit order may be inverted? According to my tests, the team names edited flag would be 0x12:0 instead of 0x12:7, for example. Maybe i'm confused about the byte endian, but maybe it could be checked.

With this "inverted approach", i used the original edit file and all those flags are off, as expected.

I am considering that the bit 0x12:0 is the least significant bit. But i confess i may be confused about the byte endian.

Heringer (talk) 10:00, 22 January 2016 (UTC)

Player Appearance Entry

Here is what i found out about the player appearance. Maybe you are interested on include it in the article.

Please, note i use a different notation. But i think there is no need to explain since you already know how is the file. The terms refers to the terms used in 2015 version, but the corresponding new term in 2016 is shown when it is not straightforward.

bytes bits(operation){values}
00-03			player id
04-04 [1]		edited face
04-04 [2]		edited hairstyle
04-04 [3]		edited physique
04-04 [4]		edited uniform
04-04 [5-8]		boot slot index?
05-06			boot slot index, player gloves?
08-0B			base copy player id
0C-0C [1-4](-7){-7,7}	PhysiqueNeckLength
0C-0C [5-8](-7){-7,7}	PhysiqueNeckWidth (PhysiqueNeckSize)
0D-0D [1-4](-7){-7,7}	PhysiqueShoulderHeight
0D-0D [5-8](-7){-7,7}	PhysiqueShoulderWidth
0E-0E [1-4](-7){-7,7}	PhysiqueChestMeasurement
0E-0E [5-8](-7){-7,7}	PhysiqueWaistCircumference
0F-0F [1-4](-7){-7,7}	PhysiqueArmCircumference
0F-0F [5-8](-7){-7,7}	PhysiqueArmLength
10-10 [1-4](-7){-7,7}	PhysiqueThigCircumference
10-10 [5-8](-7){-7,7}	PhysiqueCalfCircumference
11-11 [1-4](-7){-7,7}	PhysiqueLegLength
11-11 [5-8](-7){-7,7}	FaceHeadLength
12-12 [1-4](-7){-7,7}	FaceHeadWidth
12-12 [5-8](-7){-7,7}	FaceHeadDepth
13-13 [1-3]		TODO (not checked) UniformTapeColorIndex
13-13 [4-6]		TODO (not checked) UniformTapeRightColorIndex
13-13 [7-8]		TODO (not checked) UniformTapeWristTaping
14-14 [1-3]		TODO (not checked) Spectacles frame color
14-14 [4-6]		TODO (not checked) Spectacles
14-14 [7-8]		TODO (not checked) UniformSleeves
15-15 [1-2]		TODO (not checked) UniformLongSleeveUndershirt
15-15 [3-4]		TODO (not checked) UniformSockLength
15-15 [5-6]		TODO (not checked) UniformUndershorts
15-15 [7]		TODO (not checked) UniformShirtTailUntucked
15-15 [8]		TODO (not checked) UniformTapeAnkleTapeOn
16-16 [1]		TODO (not checked) UniformPlayerGlovesWornInWinter
16-16 [2-4]
16-16 [5-8](-7){-7,7}	FaceFacialBuildJawWidth //jawline - looks like is redundant
17-17 [1-4](-7){-7,7}	FaceFacialBuildJawHeight
17-17 [5-8](-7){-7,7}	FaceFacialBuildJawDepth //jawline - see FaceFacialBuildJawWidth
18-18 [1-4](-7){-7,7}	FaceFacialBuildCheekBoneWidth //cheekbones
18-18 [5-8]		seems is not used anymore, used to be FaceFacialBuildCheekBoneHeight
19-19 [1-4]		seems is not used anymore, used to be FaceFacialBuildCheekBoneDepth
19-19 [5-8]	
1A-1A [1-4]
1A-1A [5-8](-7){-7,7}	FaceEyebrowGlabellaWidth (brow width)
1B-1B [1-4](-7){-7,7}	FaceEyebrowAngleInner (inner eybrow height)
1B-1B [5-8]		seems is not used anymore, used to be FaceEyebrowGlabellaHeight
1C-1C [1-4](-7){-7,7}	FaceEyebrowLength (temple width)
1C-1C [5-8](-7){-7,7}	FaceEyebrowAngleOuter (outer eybrow height)
1D-1D [1-4](-7){-7,7}	FaceEyebrowDepth
1D-1D [5-8](-7){-7,7}	FaceEyePupilSize
1E-1E [1-4](-7){-7,7}	FaceEyeDepth
1E-1E [5-8](-7){-7,7}	FaceEyeInnerEyePosition
1F-1F [1-4](-7){-7,7}	FaceEyeInnerEyeHeight
1F-1F [5-8](-7){-7,7}	FaceEyeOuterEyePosition
20-20 [1-4](-7){-7,7}	FaceEyeCornerHeight
20-20 [5-8](-7){-7,7}	FaceEyeUpperEyelidPositionInner (upper eyelid width inner)
21-21 [1-4](-7){-7,7}	FaceEyeUpperEyelidHeightInner
21-21 [5-8](-7){-7,7}	FaceEyeUpperEyelidPositionOuter (upper eyelid width outer)
22-22 [1-4](-7){-7,7}	FaceEyeUpperEyelidHeightOuter
22-22 [5-8]		seems is not used anymore, used to be FaceEyeBottomEyelidPosition
23-23 [1-4](-7){-7,7}	FaceEyeBottomEyelidHeight
23-23 [5-8](-7){-7,7}	FaceEyeHorizontalPosition
24-24 [1-4](-7){-7,7}	FaceEyeHeight
24-24 [5-8](-7){-7,7}	FaceNoseHeight
25-25 [1-4](-7){-7,7}	FaceNoseLength //nose tip depth
25-25 [5-8](-7){-7,7}	FaceNoseSize //nostril height
26-26 [1-4]		seems is not used anymore, used to be FaceNoseNasalBridgePosition
26-26 [5-8](-7){-7,7}	FaceNoseBridge //nose depth
27-27 [1-4](-7){-7,7}	FaceNoseWidth
27-27 [5-8]		seems is not used anymore, used to be FaceNoseNasalRootHeight
28-28 [1-4](-7){-7,7}	FaceMouthPosition (mouth height)
28-28 [5-8](-7){-7,7}	FaceMouthDepth
29-29 [1-4](-7){-7,7}	FaceMouthLipSize
29-29 [5-8]
2A-2A [1-4](-7){-7,7}	FaceMouthShape //mouth corner height
2A-2A [5-8](-7){-7,7}	FaceMouthWidth
2B-2B [1-4]		seems is not used anymore, used to be FaceMouthPositionOfMouthEdges
2B-2B [5-8](-7){-7,7}	FaceFacialBuildChinWidth
2C-2C [1-4](-7){-7,7}	FaceFacialBuildChinHeight
2C-2C [5-8](-7){-7,7}	FaceFacialBuildChinDepth
2D-2D [1-3]{1,6}	FaceSkinColorIndex 
2D-2D [4-5](+1){1,4}	FaceFacialBuildCheekBoneType
2D-2D [5-8]		seems is not used anymore, used to be FaceSkinType
2E-2E [1-3]{1,6}	FaceSkinForeHead (forehead)
2E-2E [4-8]{0,12}	FaceFacialHairType
2F-2F [1-3]{1,5}	FaceSkinWrinkles (laugher lines)
2F-2F [4-8]{1,7}	FaceEyeUpperEyelidType
30-30 [1-4]{1,3}	FaceEyeBottomEyelidType
30-30 [5-8](-7){-7,7}	FaceEarLength
31-31 [1-4](-7){-7,7}	FaceEarWidth
31-31 [5-8](-7){-7,7}	FaceEarAngle
32-32 [1-5]{1,6}	FaceEyebrowType
32-32 [6-8]{1,3}	FaceFacialBuildNeckLineType
33-33 [1-4](-7){-7,7}	FaceHeadFaceSize
33-33 [5-8](-7){-7,7}	FaceHeadFacePosition
34-34 [1-6](+1){1,7}	FaceNoseType
34-34 [7-8]	
35-35 [1-3]{1,4}	FaceMouthUpperLipType
35-35 [4-6]{1,3}	FaceMouthLowerLipType
35-35 [7-8]		HairstyleColorRedChannel 0x36[4-1] + 0x35[8-7]
36-36 [1-4]		HairstyleColorRedChannel 0x36[4-1] + 0x35[8-7]
36-36 [5-8]		HairstyleColorGreenChannel 0x37[2-1] + 0x36[8-5]
37-37 [1-2]		HairstyleColorGreenChannel 0x37[2-1] + 0x36[8-5]
37-37 [3-8]		HairstyleColorBlueChannel 0x37[8-3]
38-38 [1-3]{0,7}	HairStyleHairStyles: hairstyle/overall/style (default=0, normal=1, dry=2, mohican, afro, dreadlocks, braided, special=7)
38-38 [4]
38-38 [5-7]{1,6}	HairStyleSideBackCropped: hairstyle/sideback/cropped
38-38 [8]
39-39 [1-6]{0,63}	FaceEyebrowColorRedChannel
39-39 [7-8]{0,2}	FaceEyebrowStyle
3A-3A [1-6]{0,63}	FaceEyebrowColorGreenChannel
3A-3A [7-8]{0,3}	FaceEyebrowDensity
3B-3B [1-6]{0,63}	FaceEyebrowColorBlueChannel
3B-3B [7-8]{0,2}	FaceEyebrowThickness
3C-3C [1-3]{0,5}	HairStyleLength: hairstyle/overall/length (shaven=1, very short=2, short=3, medium=4, long=5)
3C-3C [4-6]{0,7}	HairStyleWaveLevel
3C-3C [7-8]
3D-3D [1]		HairStyleAcessoryOn²
3D-3D [2-4]{0,7}	HairStyleAcessoryColorIndex
3D-3D [5-8]{0,63}	FaceFacialHairColorRedChannel 0x3E[2-1] + 0x3D[8-5]
3E-3E [1-2]{0,63}	FaceFacialHairColorRedChannel 0x3E[2-1] + 0x3D[8-5]
3E-3E [3-8]{0,63}	FaceFacialHairColorGreenChannel
3F-3F [1-6]{0,63}	FaceFacialHairColorBlueChannel
3F-3F [7-8]{0,3}	FaceFacialHairThickness
40-40 [1-4]{0,10}	FaceEyeIrisColorIndex
40-40 [5-8]{0,29}	HairStyleVariation 0x41[1] + 0x40[5-8]
41-41 [1]		HairStyleVariation 0x41[1] + 0x40[5-8]
41-41 [2-4]
41-41 [5-8]		HairStyleColorPreset (0=custom(preset9); 1=preset4; 2=preset6; 3=preset5; 4=preset8; 5=preset1; 6=preset2; 7=preset3; 8=preset7)
42-42 [1-2]{1,4}	hairstyle/front/style (up=1, down=2, combed back=3)
42-42 [3]
42-42 [4-6]{1,6}	HairStyleFrontParted: hairstyle/front/parted (off=1 left2=2 left1=3 center=4 right1=5 right2=6)
42-42 [7-8]{1,4}	HairStyleSideBackStyle: hairstyle/sideback/style 0x43[1] + 0x42[8-7] (normal=1, reduce body=2, shorter sides=3, cropped=4)
43-43 [1]{1,4}		HairStyleSideBackStyle: hairstyle/sideback/style 0x43[1] + 0x42[8-7]
43-43 [2-3]{1,3}	HairStyleFrontHairLine: hairstyle/front/hairline
43-43 [5-6]{1,3}	HairStyleFrontForehead: hairstyle/front/forehead (narrow=1, normal=2, wide=3)
43-43 [7-8]

² HairStyleAcessoryOn
In the game, this property is enabled when length is medium or long.
For hair/overall/style = special, there is accessory for variations 8, 10, 11, 16, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29,
but it does not mean the property is true in the file. Actually, in the unit tests, the accessory is off (0) for all these cases,
except for variations 24, 26.