Keyframe Player Segment - loldevs/leaguespec GitHub Wiki

Table of content:

Notes

  • Offsets are relative to their block.
  • Patch 4.8: this patch introduce a new item (10th).
  • Patch 4.16: this patch introduce two new rows in the player data (0x96 and 0xE6).

Player Header

  • blocktype: 0x4C or 0x4B
  • length: 0xC3
++ ++ ++ 40                 // Entity ID
!! 00 00 00                 // Player number (clientID)
40 XX XX 00
XX FF 
XX 00 00 00                 // Skin ID
  • Entity ID is incremented in the order which players are in the file
  • Entity ID is usually increased by 1 for each player, however, some IDs may be skipped for unknown reasons
  • Player number is a unique number assigned to each player, ranging from 0x00 to 0x09 for a 5v5 game
  • Ordering of player number is unknown

Summoner Name

  • offset: 0x12
  • length: 0x80
  • encoding: UTF-8

Example:

53 68 61 65  76 00 20 0F  43 00 00 00  00 00 00 00  // Shaev
00 00 00 00  00 02 00 00  00 00 00 00  00 00 00 4F  
00 78 50 08  08 00 00 00  00 00 00 00  00 64 03 3D  
08 69 43 82  84 00 00 00  00 00 00 00  00 02 00 00  
00 C0 0E 08  08 01 00 00  00 70 50 08  08 CC D0 2A
00 23 E0 1D  77 98 45 50  00 78 50 08  08 0D 00 00
00 70 50 08  08 E0 D0 2A  00 DD 14 EA  74 00 00 4F
00 00 00 00  00 78 50 08  08 F4 D0 2A  00 C2 DC B7
  • bytes after first 0x00 byte are meaningless

Champion Name

  • offset: 0x92
  • length: 0x10
4C 65 62 6C  61 6E 63 00  00 78 50 08  08 08 D1 2A  // Leblanc
  • bytes after first 0x00 byte are meaningless

Unknown data

  • offset: 0xA3
  • length: 0x21
00 XX XX XX
!! XX XX XX  XX XX XX XX        // Marker #1
XX XX XX XX  XX XX XX XX
00 XX XX XX  XX XX XX XX
XX XX XX XX  !!                 // Marker #2
  • Marker #1 can only be 0x00 or 0x01
  • Marker #2 can only be 0x00 or 0x02

Summoner Data

  • blocktype: 0x2A
  • length: 0x212
  • blockparam: Entity ID

Example

83
00
12 02 00 00 // [contentlength]
2A // [blocktype]
19 00 00 40 // Entity ID [blockparam]
[... 0x212 bytes ...]

Rune Page

  • offset: 0x0
  • length: 0x78
  • The rune page consists of 30 rune IDs
  • A rune ID is a 32-bit integer, example : 83 14 00 00 >>> 5251
  • Empty rune slots are represented by the rune ID 0
  • Sometimes the runes appear out of order (maybe because the player hasn't the required level to have all runes)

Marks

Example:

83 14 00 00
85 14 00 00
85 14 00 00
85 14 00 00
85 14 00 00
85 14 00 00
85 14 00 00
85 14 00 00
85 14 00 00

Seals

Example:

A9 14 00 00
A9 14 00 00
A9 14 00 00
A9 14 00 00
A9 14 00 00
A9 14 00 00
A9 14 00 00
A9 14 00 00
A9 14 00 00

Glyphs

Example:

C9 14 00 00
C9 14 00 00
C9 14 00 00
C9 14 00 00
C9 14 00 00
C9 14 00 00
C9 14 00 00
C9 14 00 00
C9 14 00 00

Quints

Example:

D7 14 00 00
24 15 00 00
24 15 00 00

Summoner spells

  • offset: 0x78
  • length: 0x8
  • A summoner spell is represented by a 32-bit value:
Value Spell
244f3606 Ignite
a86e4906 Flash
1caf6403 Heal
95865e06 Smite
64134f00 Teleport
e4baa808 Exhaust
82b9cf0c Barrier
21746503 Clarity
95cc4a06 Ghost
eeaf870d Garrison
65678909 Clairvoyance
94204d06 Cleanse
a5b3c805 Revive

Example

24 4F 36 06 // Ignite
A8 6E 49 06 // Flash
A8 6E 49 06 // Flash
24 4F 36 06 // Ignite

Mastery Page

  • offset: 0x80
  • length: 0x190

Mastery Entry

  • length: 0x05
!!                      // Mastery ID
!!                      // Mastery tree
03 00
!!                      // Points spent
  • Mastery ID does not correlate with talentId in AIR Client
  • Mastery ID contains the coordinates of the mastery in its tree.
    • First 4 bits contain the row (starting at 0x04)
    • Last 4 bits contain the column (starting at 0x01)
  • Mastery tree
    • 0x74 = Offense
    • 0x75 = Defense
    • 0x76 = Utility
  • Points spent refers to the number of points in specific mastery, with a maximum of 0x04

**Example: **

53 74 03 00 01
  • Offensive tree
  • Second row, third column => Mental Force (4123)
  • 1 point spent

Note: To get the talentId from this entry, one can use this formula: (4100 + (secondByte - 0x74) * 0x64 + ((firstByte >> 4) - 0x03) * 0x0A + (firstByte & 0x0F)

Padding

... 00 00 00 00 ...

Summoner level

  • offset: 0x210
1E // 30
XX // unknown

Inventory

  • blocktype: 0xFE
  • length: 0x98
  • This block is also used for towers, and maybe other entities.

Important note : items are saved only on the keyframe + 1. For example, I'm on the first minute (00:xx) of the game, so purchased items should be saved on the keyframe 2 (01:00), but they will be saved on the keyframe 3 (02:00). Be careful.

Header

Example

B3
00
98 // [contentlength]
FE // [blocktype]
00 // [blockparam]
0C 01 // container type (?)

Item Entry

Item entries are empty the two first keyframes, all items ID are set to zero

  • offset: 0x02
  • length: 0x07
  • quantity: 10
++ ++ ++ ++             // Item ID
!!                      // Index (slot)
!!                      // Quantity
!!                      // Charges
  • Index refers to the slot in which the item is placed, ranging from 0x00 to 0x09
  • 8th, 9th and 10th item entries are always the same

8th:

D1 07 00 00             
07
01
00
  • This is the recall spell in form of an item

9th:

00 00 00 00
08
00
00

10th:

00 00 00 00
09
00
00

Item cooldown

  • offset: 0x48
  • length: 0x04
  • quantity: 10

Example:

00 00 80 BF   // -1.0
00 0E 8E 40   // 4.44 Secounds
00 00 80 BF 
00 00 80 BF
00 00 80 BF
00 00 80 BF
00 00 80 BF
00 00 80 BF
00 00 80 BF
00 00 80 BF
  • Represents the cooldown timer for each item as a float in seconds.
  • -1.0 seems to mean "item ready"

Item base cooldown

  • offset: 0x70
  • length: 0x04
  • quantity: 10

Example:

00 00 70 42 // 60.0 (Gunblade)
00 00 B4 42 // 90.0 (Zhonyas)
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 F0 42 // 120.0 (Yellow Trinket)
00 00 00 00
00 00 00 00
00 00 00 00
  • Represents the base cooldown for each item that is currently on cooldown as a float in seconds.

(Item replacements)

This block sometimes follows the inventory.

  • length: 0xA

Example:

F3 00 0A 00
1C 01 // Same as inventory
D3 07 00 00 // 2003 (Item ID of Health Potion)
DA 07 00 00 // 2010 (Item ID of Total Biscuit of Rejuvenation)
  • This probably means that Health Potions should be replaced with Biscuits.

Player stats

  • blocktype: 0x46 or 0x45
  • length: 0x128 or 0x120

Header

Example:

A3 00 
28 10 00 00 // [contentlength]
46 // [blocktype]
00 // [blockparam]
Length  Reason
0x128 All data present
0x120 No jungle data
0x124 ?

The first 4 bytes are always the contentlength again:

28 01 00 00

Data

  • offset: 0x4
Offset Hexadecimal Length Type Value Description Note
0x0C 06 00 00 00 0x04 integer 6 Assists
0x10 00 00 00 00 0x04 integer 0
0x14 07 00 00 00 0x04 integer 7 Kills
0x18 0F 00 00 00 0x04 integer 15
0x1C 01 00 00 00 0x04 integer 1 Double kills
0x20 00 00 00 00 0x04 integer 0
0x24 00 00 00 00 0x04 integer 0
0x28 00 00 00 00 0x04 integer 0
0x2C 00 00 00 00 0x04 integer 0 Unreal kills view
0x30 F8 26 1C 46 0x04 float 9993.742188 Total gold earned
0x34 00 6C 02 46 0x04 float 8347 Total gold spent view
0x38 00 00 00 00 0x04 integer 0
0x3C 00 00 00 00 0x04 integer 0
0x40 00 00 00 00 0x04 integer 0
0x44 00 00 00 00 0x04 integer 0
0x48 00 00 00 00 0x04 integer 0
0x4C 00 00 00 00 0x04 integer 0
0x50 00 00 00 00 0x04 integer 0
0x54 00 00 00 00 0x04 integer 0
0x58 00 00 00 00 0x04 integer 0
0x5C 1F 00 00 00 0x04 integer 31
0x60 03 00 00 00 0x04 integer 3 Current killing spree
0x64 93 85 30 43 0x04 float 176.521774 Largest critical strike
0x68 03 00 00 00 0x04 integer 3 Largest killing spree
0x6C 02 00 00 00 0x04 integer 2 Largest multi kill
0x70 00 00 00 00 0x04 integer 0
0x74 CB 0A 26 44 0x04 float 664.168640 Longest time spent living
0x78 08 A0 6C 45 0x04 float 3786.001953 Total magic damage dealt
0x7C C4 CC 7F 43 0x04 float 255.799866 Magic damage dealt to champion
0x80 CC 13 E5 45 0x04 float 7330.474609 Magical damage taken
0x84 17 00 00 00 0x04 integer 23 Total minions killed
0x88 00 00 0x02 integer 0 Padding
0x8A 4B 00 00 00 0x04 integer 75 Total neutral minions killed
0x8E 05 00 00 00 0x04 integer 5 Neutral minnions killed in enemy jungle view
0x92 46 00 00 00 0x04 integer 70 Neutral minions killed in team jungle view
0x96 00 00 00 00 0x04 integer 0
0x9A 04 00 00 00 0x04 integer 4 Deaths
0x9E 00 00 00 00 0x04 integer 0 Penta kills
0x9E 8B AA AF 47 0x04 float 89941.085938 Total physical damage dealt
0xA2 48 23 42 46 0x04 float 12424.820312 Physical damage dealt to champions
0xA6 CF 45 0A 46 0x04 float 8849.452148 Physical damage taken
0xAA 00 00 00 00 0x04 integer 0
0xAE 00 00 00 00 0x04 integer 0 Quadra kills
0xB2 00 00 00 00 0x04 integer 0
0xB6 00 00 00 00 0x04 integer 0
0xBA 3E 00 00 00 0x04 integer 62
0xBE 00 00 00 00 0x04 integer 0
0xC2 44 00 00 00 0x04 integer 68
0xC6 09 00 00 00 0x04 integer 9
0xCA 04 00 00 00 0x04 integer 4
0xCE 13 00 00 00 0x04 integer 13
0xD2 00 00 00 00 0x04 integer 0
0xD6 64 00 00 00 0x04 integer 100 Team id view
0xDA DC C3 C4 44 0x04 float 1574.120605 Not sure
0xDE 00 00 00 00 0x04 integer 0 Not sure
0xE2 40 9F D3 41 0x04 float 26.452758 Not sure
0xE6 00 00 00 00 0x04 integer 0 Not sure
0xEA 7B 7F D4 47 0x04 float 108798.960938 Total damage dealt
0xEE CB 6F 5D 46 0x04 float 14171.948242 Total damage dealt to champions
0xF2 EA 77 86 46 0x04 float 17211.957031 Total damage taken
0xF6 B1 09 00 00 0x04 integer 2481 Total heal
0xFA CD 04 BE 43 0x04 float 380.037506 Total time crowd control dealt
0xFE 18 4B 00 43 0x04 float 128.293335 Total time spent dead
0x102 01 00 00 00 0x04 integer 1 Total unit healed
0x106 00 00 00 00 0x04 integer 0 Triple kills
0x10A 12 80 6B 46 0x04 float 15072.017578 Total true damage dealt
0x10E AD 6A BA 44 0x04 float 1491.333618 True damage dealt to champions
0x112 11 01 81 44 0x04 float 1032.033325 True damage taken
0x116 00 00 00 00 0x04 integer 0 Turrets destroyed
0x11A 00 00 00 00 0x04 integer 0 Inhibitors destroyed
0x11E 00 00 00 00 0x04 integer 0
0x122 00 00 00 00 0x04 integer 0 Wards destroyed
0x126 00 00 00 00 0x04 integer 0 Wards placed
0x12A 00 00 00 00 0x04 integer 0
0x12E 00 00 00 00 0x04 integer 0
0x132 00 00 0x02 integer 0 Padding

Notes

Unreal kills

Need more details on what is meant by "unreal"

Total gold spent

Seems to be sometimes unsynchronized, can be greater than total gold earned

Team id

Can be 100 for BLUE team or 200 for PURPLE team

Jungle data

This jungle data is not present in the keyframe on a map without jungle, like ARAM (Howling Abyss) and Dominion (The Crystal Scar) modes

Abilities

  • blocktype: 0x15
  • length: 0x3
!!  // Ability number
!!  // Ability level
00
  • Ability number refers to ability number, ranging from 0x00 to 0x03
  • Ability level refers to ability level

Example:

B3 00 03 15 00
00 00 01 // Q
F3 00 03 00
01 00 01 // W
F3 00 03 00
02 00 01 // E
F3 00 03 00
03 00 01 // R

String data

  • blocktype: 0x17

Example:

B3 00 11 17 00
2C 01
6C 75 63 69 61 6E 72 6D 69 73 73 69 6C 65 00 // "lucianrmissile"
F3 00 1E 00
32 01
63 72 65 73 74 6F 66 74 68 65 61 6E 63 69 65 6E 74 67 6F 6C 65 6D 6C 69 6E 65 73 00 // "crestoftheancientgolemlines"
F3 00 10 00
33 01
6C 75 63 69 61 6E 71 64 61 6D 61 67 65 00 // "lucianqdamage"

Example:

B3 00 06 17 00 
01 01
76 69 77 00 // "viw"
F3 00 0A 00
2F 01
76 69 72 64 75 6E 6B 00 // "virdunk"
F3 00 17 00
32 01
69 74 65 6D 70 6C 61 63 65 6D 65 6E 74 6D 69 73 73 69 6C 65 00 // "itemplacementmissile"
  • There is no known use for these strings

Unknown data

  • offset: N/A
  • length: variable

Example:

B3 00 09 84
00 40 00 FE 4C 40
00 00 80 BF  F3  00 09 00 43  C0 DD C5 41
00 00 80 BF  F3  00 09 00 05  00 DC 9D 40
00 00 80 BF  F3  00 09 00 0A  00 DA 1E 40
00 00 80 BF  F3  00 09 00 40  D0 CE B8 42
00 00 80 BF  F3  00 09 00 41  80 BB 1F 42
00 00 80 BF  B3  00 01 EF 00  01

Example:

B3 00 09 84
00 40 E0 85 2E 43
00 00 80 BF  F3  00 09 00 41  58 B1 85 43
00 00 80 BF
B3 00 01 EF 00 
01
  • Many of these seem to be floats

Footer

  • blocktype: 0xFE
  • length: 0x7
93
00
07 // [contentlength]
FE // [blocktype]
00 00 00 00 // [blockparam]
15 01 // container type (?)
19 00 00 40 // Entity ID
00
⚠️ **GitHub.com Fallback** ⚠️