The logo competition for the 2025 4chan Winter Cup is now taking submissions. | ||
The deadline is January 6th, 23:59 UTC. Logos will be placed in this gallery to facilitate discussion. This will be followed by a polling period to determine which logo will be used. Please send all submissions to Potatotron. You must supply a high-res PNG file (5000x5000 limit) and the original multi-layer source file. | ||
Cloverleaf logo: .png .svg |
|
Cloverball logo: .ai .png .svg |
Difference between revisions of "Talk:Pro Evolution Soccer 2016/Edit file"
(Contribution about the file structure.) |
(about player appearance entry) |
||
(26 intermediate revisions by 4 users not shown) | |||
Line 4: | Line 4: | ||
* 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. Each entry has 112 bytes (0x70). | * 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 14: | Line 14: | ||
* To be confirmed: Teams tactics entries start at 0x530272. There are 850 entries. Each entry has 520 bytes (0x208). | * 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. | * 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. --[[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). | |||
[[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 | |||
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 == | |||
<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.