Talk:Pro Evolution Soccer 2016/Edit file

From Rigged Wiki
< Talk:Pro Evolution Soccer 2016
Revision as of 15:13, 21 January 2016 by Heringer (talk | contribs) (I could not confirm game plan flag at team entry)
Jump to navigation Jump to search

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.