4, // Identifier 4 => 4, // Version ID 8 => 4, // File size 12 => 4, // Checksum 16 => 4, // Active weapon 20 => 16, // Character Name 36 => 1, // Character Status 37 => 1, // Character progression 38 => 2, // Unknown 40 => 1, // Character Class 41 => 2, // Unknown 43 => 1, // Character Level 44 => 4, // Unknown 48 => 4, // Last played 52 => 4, // Unknown 56 => 64, // Assigned skills 120 => 4, // Left mouse button skill ID 124 => 4, // Right mouse button skill ID 128 => 4, // Left swap mouse button skill ID 132 => 4, // Right swap mouse button skill ID 136 => 32, // Character menu appearance 168 => 3, // Difficulty 171 => 4, // Map ID 175 => 2, // Unknown 177 => 2, // Mercenary dead 179 => 4, // Mercenary ID 183 => 2, // Mercenary Name ID 185 => 2, // Mercenary type 187 => 4, // Mercenary experience 191 => 144, // Unknown 335 => 298, // Quests 633 => 81, // Waypoints 714 => 51, // NPC Introductions ]; foreach ($offsets as $k => $v){ fseek($fp, $k); $data[$k] = fread($fp, $v); } function strtobits(string $str): string { $ret = ""; for ($i = 0; $i < strlen($str); ++ $i) { $ord = ord($str[$i]); for ($bitnum = 7; $bitnum >= 0; -- $bitnum) { if ($ord & (1 << $bitnum)) { $ret .= "1"; } else { $ret .= "0"; } } } return $ret; } $charData['Identifier'] = bin2hex($data['0']); $charData['VersionID'] = unpack('l', $data['4'])[1]; // 96 is v1.10+ - check out $charData['Filesize'] = round(unpack('l', $data['8'])[1]/1024, 2) . " KB"; // 1.41 KB (1,447 bytes) - checks out // $charData['Checksum'] = bin2hex($data['12']); // $charData['Activeweapon'] = unpack('l', $data['16']); $charData['CharacterName'] = ($data['20']); $charData['CharacterStatus'] = array_filter(str_split(strtobits($data['36']))); foreach ($charData['CharacterStatus'] as $k => $v){ $str .= ($characterStatus[$k]) . " "; } $charData['CharacterStatus'] = $str; // $charData['Characterprogression'] = bindec($data['37']); $charData['CharacterClass'] = $class[unpack('C',$data['40'])[1]]; $charData['CharacterLevel'] = unpack('C', $data['43'])[1]; $charData['Lastplayed'] = gmdate("Y-m-d\TH:i:s\Z", unpack('I', $data['48'])[0]); // $charData['Assignedskills'] = (unpack('i16', $data['56'])); $charData['LeftmousebuttonskillID'] = $skills[unpack('i', $data['120'])[1]]; $charData['RightmousebuttonskillID'] = $skills[unpack('i', $data['124'])[1]]; $charData['LeftswapmousebuttonskillID'] = $skills[unpack('i', $data['128'])[1]]; $charData['RightswapmousebuttonskillID'] = $skills[unpack('i', $data['132'])[1]]; // $charData['Charactermenuappearance'] = unpack('i', $data['136']); $charData['Difficulty'] = strtobits($data['168']); // $charData['MapID'] = $data['171']; //$charData['Mercenarydead'] = unpack('i', $data['177']); //$charData['MercenaryID'] = $data['179']; //$charData['MercenaryNameID'] = $data['183']; //$charData['Mercenarytype'] = $data['185']; //$charData['Mercenaryexperience'] = $data['187']; $charData['Quests'] = $data['335']; $charData['Waypoints'] = $data['633']; $charData['NPCIntroductions'] = $data['714']; echo "
";
print_r($charData);

// $charData['Unknown'] = $data['44'];
// $charData['Unknown'] = $data['52'];
// $charData['Unknown'] = $data['175'];
// $charData['Unknown'] = $data['191'];