PERK
Perk
  
    
      | Count | Subrecord | Name | Type | Info | 
  
  
    
      | + | EDID | Editor ID | cstring |  | 
    
      |  | FULL | Name | cstring |  | 
    
      | + | DESC | Description | cstring |  | 
    
      |  | ICON | Large icon filename | cstring |  | 
    
      |  | MICO | Small icon filename | cstring |  | 
    
      | -* | CTDA | Condition | struct |  | 
    
      | + | DATA | Data | struct |  | 
    
      | -* |  | Effect | collection | See below for details. | 
  
DATA (Data)
  
    
      | Name | Type | Info | 
  
  
    
      | Trait | uint8 | Enum - see below for values. | 
    
      | Min Level | uint8 |  | 
    
      | Ranks | uint8 |  | 
    
      | Playable | uint8 | Enum -see below for values. | 
    
      | Hidden | uint8 | Enum -see below for values. | 
  
Trait / Playable / Hidden Enum Values
Effect Subrecord Collection
  
    
      | Count | Subrecord | Name | Type | Info | 
  
  
    
      |  | PRKE | Header | struct |  | 
    
      | + | DATA | Effect Data | struct or formid |  | 
    
      | -* |  | Perk Conditions | collection | See below for details. | 
    
      |  | EPFT | Entry Point Function Type | uint8 | Decides the data type of the EPFD record. | 
    
      |  | EPFD | Entry Point Function Data | uint8[] or float32 or formid or null |  | 
    
      |  | EPF2 | Button Label | cstring |  | 
    
      |  | EPF3 | Script Flags | uint16 | See below for values. | 
    
      |  |  | Embedded Script | collection |  | 
    
      | + | PRKF | End Marker | null | Flag | 
  
PRKE
  
    
      | Name | Type | Info | 
  
  
    
      | Type | uint8 | Enum -see below for values. | 
    
      | Rank | uint8 |  | 
    
      | Priority | uint8 |  | 
  
Type Enum Values
  
    
      | Value | Meaning | 
  
  
    
      | 0 | Quest + Stage | 
    
      | 1 | Ability | 
    
      | 2 | Entry Point | 
  
DATA (Effect Data)
There are three possible DATA formats, based on the value of the Type field in the preceding PRKE subrecord.
Quest + Stage
  
    
      | Name | Type | Info | 
  
  
    
      | Quest | formid | FormID of a QUST record. | 
    
      | Quest Stage | int8 |  | 
    
      | Unused | byte[3] |  | 
  
Ability
  
    
      | Name | Type | Info | 
  
  
    
      | Ability | formid | FormID of a SPEL record. | 
  
Entry Point
  
    
      | Name | Type | Info | 
  
  
    
      | Entry Point | uint8 | Enum - see below for values. | 
    
      | Function | uint8 |  | 
    
      | Perk Condition Tab Count | uint8 |  | 
  
Entry Point Enum Values
  
    
      | Value | Meaning | 
  
  
    
      | 0 | Calculate Weapon Damage | 
    
      | 1 | Calculate My Critical Hit Chance | 
    
      | 2 | Calculate My Critical Hit Damage | 
    
      | 3 | Calculate Weapon Attack AP Cost | 
    
      | 4 | Calculate Mine Explode Chance | 
    
      | 5 | Adjust Range Penalty | 
    
      | 6 | Adjust Limb Damage | 
    
      | 7 | Calculate Weapon Range | 
    
      | 8 | Calculate To Hit Chance | 
    
      | 9 | Adjust Experience Points | 
    
      | 10 | Adjust Gained Skill Points | 
    
      | 11 | Adjust Book Skill Points | 
    
      | 12 | Modify Recovered Health | 
    
      | 13 | Calculate Inventory AP Cost | 
    
      | 14 | Get Disposition | 
    
      | 15 | Get Should Attack | 
    
      | 16 | Get Should Assist | 
    
      | 17 | Calculate Buy Price | 
    
      | 18 | Get Bad Karma | 
    
      | 19 | Get Good Karma | 
    
      | 20 | Ignore Locked Terminal | 
    
      | 21 | Add Leveled List On Death | 
    
      | 22 | Get Max Carry Weight | 
    
      | 23 | Modify Addiction Chance | 
    
      | 24 | Modify Addiction Duration | 
    
      | 25 | Modify Positive Chem Duration | 
    
      | 26 | Adjust Drinking Radiation | 
    
      | 27 | Activate | 
    
      | 28 | Mysterious Stranger | 
    
      | 29 | Has Paralyzing Palm | 
    
      | 30 | Hacking Science Bonus | 
    
      | 31 | Ignore Running During Detection | 
    
      | 32 | Ignore Broken Lock | 
    
      | 33 | Has Concentrated Fire | 
    
      | 34 | Calculate Gun Spread | 
    
      | 35 | Player Kill AP Reward | 
    
      | 36 | Modify Enemy Critical Hit Chance | 
  
Perk Condition Subrecord Collection
  
    
      | Count | Subrecord | Name | Type | Info | 
  
  
    
      |  | PRKC | Run On | int8 |  | 
    
      | +* | CTDA | Condition | struct |  | 
  
EPFD
The subrecord type is decided as described in the table below.
  
    
      | EPFT Value | EPFD Type | Info | 
  
  
    
      | 0 | uint8[] |  | 
    
      | 1 | float32 |  | 
    
      | 2 | struct | A struct consisting of two float32values. | 
    
      | 3 | formid | FormID of a LVLI record. | 
    
      | 4 | null |  | 
    
      | 5 | struct | A struct consisting of a uint32actor value enum followed by afloat32value. | 
  
If the EPFT value is 2 and DATA’s Function field (when DATA is an entry point) is 5, the EPFD type is chosen as if the EPFT value were 5.
EPF3 Flag Values
  
    
      | Value | Meaning | 
  
  
    
      | 0x0001 | Run Immediately |