Skip to content

Instantly share code, notes, and snippets.

@SocraticBliss
Last active March 27, 2022 02:01
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save SocraticBliss/094077a377b67a3947c3b46da808fcaa to your computer and use it in GitHub Desktop.
Save SocraticBliss/094077a377b67a3947c3b46da808fcaa to your computer and use it in GitHub Desktop.
PS4 PKG Template for 010 Editor
//------------------------------------------------
//--- 010 Editor v9.0 Binary Template
//
// File: PS4_PKG.bt
// Authors: SocraticBliss
// Version: 1.0.0
// Purpose: 1) Decode the PKG format for the PS4 (64 bit)
//
// Category: Game
// File Mask: *
// ID Bytes: 7F 43 4E 54
// History:
// 1.0 SocraticBliss: Initial release.
//------------------------------------------------
local int warnings = 0;
local string temp_warning;
// A hack to get warning messages to both "Warn" (show in status) and output to the "output"
void PrintWarning(string message) {
Warning(temp_warning);
// Ensure new-line, "Warning" statuses should not have them
SPrintf(temp_warning, "%s\n", message);
Printf(temp_warning);
// Hack to trigger a more generic "look at warnings in output"
warnings++;
}
// **************************************** PKG Header ********************************************
typedef enum <uint64> {
NESTED_IMAGE = 0x8000000000000000
} PFS_IMAGE_FLAG;
typedef enum <uint32> {
INVALID = 0x0,
FULL = 0x1,
UPGRADABLE = 0x2,
DEMO = 0x3,
FREEMIUM = 0x4
} APPLICATION_TYPE;
typedef enum <uint32> {
FIRST_PATCH = 0x100000,
PATCHGO = 0x200000,
REMASTER = 0x400000,
PS_CLOUD = 0x800000,
GD_AC = 0x2000000,
NON_GAME = 0x4000000,
UNKNOWN_0x8000000 = 0x8000000,
UNKNOWN_0xE000000 = 0xE000000,
SUBSEQUENT_PATCH = 0x40000000,
DELTA_PATCH = 0x41000000,
CUMULATIVE_PATCH = 0x60000000
} CONTENT_FLAG;
typedef enum <uint32> {
PS4GD = 0x1A,
PS4AC = 0x1B,
PS4AL = 0x1C,
PS4DP = 0x1E,
PS4MD = 0x1F /* ? */
} CONTENT_TYPE;
typedef enum <uint32> {
NONE = 0x0,
PS4 = 0xF
} DRM_TYPE;
typedef enum <uint32> {
SHARE_FACTORY_THEME = 0x1,
SYSTEM_SOFTWARE_THEME = 0x2
} IRO_TAG;
typedef enum <uint32> {
VER_1 = 0x1000000,
VER_2 = 0x2000000,
INTERNAL = 0x40000000,
FINALIZED = 0x1, /* 0x80000000 */
PROTOTYPE = 0xC0000000 /* ? */
} TYPE;
typedef string CONTENT_ID <read=ContentID>;
string ContentID(CONTENT_ID &cid) {
local string s;
SPrintf(s, "%s", cid);
return s;
}
typedef struct {
ubyte pkg_magic[4] <format=hex>;
if (Strcmp(pkg_magic, "\x7F\x43\x4E\x54")) {
PrintWarning("Invalid PKG file");
return -1;
}
TYPE pkg_type <format=hex>;
uint32 pkg_0x8;
uint32 pkg_file_count;
uint32 pkg_table_entry_count;
uint16 pkg_sc_entry_count;
uint16 pkg_table_entry_count_2;
uint32 pkg_table_entry_offset <format=hex>;
uint32 pkg_sc_entry_data_size <format=hex>;
uint64 pkg_body_offset <format=hex>;
uint64 pkg_body_size <format=hex>;
uint64 pkg_content_offset <format=hex>;
uint64 pkg_content_size <format=hex>;
CONTENT_ID pkg_content_id;
ubyte pkg_padding[0xB];
DRM_TYPE pkg_drm_type <format=hex>;
CONTENT_TYPE pkg_content_type <format=hex>;
uint32 pkg_content_flags <format=hex>;
uint32 pkg_promote_size <format=hex>;
uint32 pkg_version_date <format=hex>;
uint32 pkg_version_hash <format=hex>;
uint32 pkg_0x88 <format=hex>;
uint32 pkg_0x8C <format=hex>;
uint32 pkg_0x90 <format=hex>;
uint32 pkg_0x94 <format=hex>;
IRO_TAG pkg_iro_tag;
uint32 pkg_drm_type_version;
ubyte pkg_zeroes_1[0x60];
ubyte pkg_sc_entries_1_digest[0x20] <format=hex>;
ubyte pkg_sc_entries_2_digest[0x20] <format=hex>;
ubyte pkg_table_digest[0x20] <format=hex>;
ubyte pkg_body_digest[0x20] <format=hex>;
ubyte pkg_zeroes_2[0x280];
uint32 pkg_0x400;
uint32 pkg_pfs_image_count;
uint64 pkg_pfs_image_flags <format=hex>;
uint64 pkg_pfs_image_offset <format=hex>;
uint64 pkg_pfs_image_size <format=hex>;
uint64 pkg_mount_image_offset <format=hex>;
uint64 pkg_mount_image_size <format=hex>;
uint64 pkg_size;
uint32 pkg_pfs_image_signed_size <format=hex>;
uint32 pkg_pfs_image_cache_size <format=hex>;
ubyte pkg_pfs_image_digest[0x20] <format=hex>;
ubyte pkg_pfs_image_signed_digest[0x20] <format=hex>;
uint64 pkg_pfs_image_split_size_nth_0 <format=hex>;
uint64 pkg_pfs_image_split_size_nth_1 <format=hex>;
ubyte pkg_zeroes_3[0xB50];
ubyte pkg_digest[0x20];
} pkg_header <open=true>;
// *************************************** PKG Table Entries ************************************************
typedef enum <uint32> {
DIGESTS = 0x1,
ENTRY_KEYS = 0x10,
IMAGE_KEY = 0x20,
GENERAL_DIGESTS = 0x80,
METAS = 0x100,
ENTRY_NAMES = 0x200,
LICENSE_DAT = 0x400,
LICENSE_INFO = 0x401,
NPTITLE_DAT = 0x402,
NPBIND_DAT = 0x403,
SELFINFO_DAT = 0x404,
IMAGEINFO_DAT = 0x406,
TARGET_DELTAINFO_DAT = 0x407,
ORIGIN_DELTAINFO_DAT = 0x408,
PSRESERVED_DAT = 0x409,
PARAM_SFO = 0x1000,
PLAYGO_CHUNK_DAT = 0x1001,
PLAYGO_CHUNK_SHA = 0x1002,
PLAYGO_MANIFEST_XML = 0x1003,
PRONUNCIATION_XML = 0x1004,
PRONUNCIATION_SIG = 0x1005,
PIC1_PNG = 0x1006,
PUBTOOLINFO_DAT = 0x1007,
APP__PLAYGO_CHUNK_DAT = 0x1008,
APP__PLAYGO_CHUNK_SHA = 0x1009,
APP__PLAYGO_MANIFEST_XML = 0x100A,
SHAREPARAM_JSON = 0x100B,
SHAREOVERLAYIMAGE_PNG = 0x100C,
SAVE_DATA_PNG = 0x100D,
SHAREPRIVACYGUARDIMAGE_PNG = 0x100E,
ICON0_PNG = 0x1200,
ICON0_00_PNG = 0x1201,
ICON0_01_PNG = 0x1202,
ICON0_02_PNG = 0x1203,
ICON0_03_PNG = 0x1204,
ICON0_04_PNG = 0x1205,
ICON0_05_PNG = 0x1206,
ICON0_06_PNG = 0x1207,
ICON0_07_PNG = 0x1208,
ICON0_08_PNG = 0x1209,
ICON0_09_PNG = 0x120A,
ICON0_10_PNG = 0x120B,
ICON0_11_PNG = 0x120C,
ICON0_12_PNG = 0x120D,
ICON0_13_PNG = 0x120E,
ICON0_14_PNG = 0x120F,
ICON0_15_PNG = 0x1210,
ICON0_16_PNG = 0x1211,
ICON0_17_PNG = 0x1212,
ICON0_18_PNG = 0x1213,
ICON0_19_PNG = 0x1214,
ICON0_20_PNG = 0x1215,
ICON0_21_PNG = 0x1216,
ICON0_22_PNG = 0x1217,
ICON0_23_PNG = 0x1218,
ICON0_24_PNG = 0x1219,
ICON0_25_PNG = 0x121A,
ICON0_26_PNG = 0x121B,
ICON0_27_PNG = 0x121C,
ICON0_28_PNG = 0x121D,
ICON0_29_PNG = 0x121E,
ICON0_30_PNG = 0x121F,
PIC0_PNG = 0x1220,
SND0_AT9 = 0x1240,
PIC1_00_PNG = 0x1241,
PIC1_01_PNG = 0x1242,
PIC1_02_PNG = 0x1243,
PIC1_03_PNG = 0x1244,
PIC1_04_PNG = 0x1245,
PIC1_05_PNG = 0x1246,
PIC1_06_PNG = 0x1247,
PIC1_07_PNG = 0x1248,
PIC1_08_PNG = 0x1249,
PIC1_09_PNG = 0x124A,
PIC1_10_PNG = 0x124B,
PIC1_11_PNG = 0x124C,
PIC1_12_PNG = 0x124D,
PIC1_13_PNG = 0x124E,
PIC1_14_PNG = 0x124F,
PIC1_15_PNG = 0x1250,
PIC1_16_PNG = 0x1251,
PIC1_17_PNG = 0x1252,
PIC1_18_PNG = 0x1253,
PIC1_19_PNG = 0x1254,
PIC1_20_PNG = 0x1255,
PIC1_21_PNG = 0x1256,
PIC1_22_PNG = 0x1257,
PIC1_23_PNG = 0x1258,
PIC1_24_PNG = 0x1259,
PIC1_25_PNG = 0x125A,
PIC1_26_PNG = 0x125B,
PIC1_27_PNG = 0x125C,
PIC1_28_PNG = 0x125D,
PIC1_29_PNG = 0x125E,
PIC1_30_PNG = 0x125F,
CHANGEINFO__CHANGEINFO_XML = 0x1260,
CHANGEINFO__CHANGEINFO_00_XML = 0x1261,
CHANGEINFO__CHANGEINFO_01_XML = 0x1262,
CHANGEINFO__CHANGEINFO_02_XML = 0x1263,
CHANGEINFO__CHANGEINFO_03_XML = 0x1264,
CHANGEINFO__CHANGEINFO_04_XML = 0x1265,
CHANGEINFO__CHANGEINFO_05_XML = 0x1266,
CHANGEINFO__CHANGEINFO_06_XML = 0x1267,
CHANGEINFO__CHANGEINFO_07_XML = 0x1268,
CHANGEINFO__CHANGEINFO_08_XML = 0x1269,
CHANGEINFO__CHANGEINFO_09_XML = 0x126A,
CHANGEINFO__CHANGEINFO_10_XML = 0x126B,
CHANGEINFO__CHANGEINFO_11_XML = 0x126C,
CHANGEINFO__CHANGEINFO_12_XML = 0x126D,
CHANGEINFO__CHANGEINFO_13_XML = 0x126E,
CHANGEINFO__CHANGEINFO_14_XML = 0x126F,
CHANGEINFO__CHANGEINFO_15_XML = 0x1270,
CHANGEINFO__CHANGEINFO_16_XML = 0x1271,
CHANGEINFO__CHANGEINFO_17_XML = 0x1272,
CHANGEINFO__CHANGEINFO_18_XML = 0x1273,
CHANGEINFO__CHANGEINFO_19_XML = 0x1274,
CHANGEINFO__CHANGEINFO_20_XML = 0x1275,
CHANGEINFO__CHANGEINFO_21_XML = 0x1276,
CHANGEINFO__CHANGEINFO_22_XML = 0x1277,
CHANGEINFO__CHANGEINFO_23_XML = 0x1278,
CHANGEINFO__CHANGEINFO_24_XML = 0x1279,
CHANGEINFO__CHANGEINFO_25_XML = 0x127A,
CHANGEINFO__CHANGEINFO_26_XML = 0x127B,
CHANGEINFO__CHANGEINFO_27_XML = 0x127C,
CHANGEINFO__CHANGEINFO_28_XML = 0x127D,
CHANGEINFO__CHANGEINFO_29_XML = 0x127E,
CHANGEINFO__CHANGEINFO_30_XML = 0x127F,
ICON0_DDS = 0x1280,
ICON0_00_DDS = 0x1281,
ICON0_01_DDS = 0x1282,
ICON0_02_DDS = 0x1283,
ICON0_03_DDS = 0x1284,
ICON0_04_DDS = 0x1285,
ICON0_05_DDS = 0x1286,
ICON0_06_DDS = 0x1287,
ICON0_07_DDS = 0x1288,
ICON0_08_DDS = 0x1289,
ICON0_09_DDS = 0x128A,
ICON0_10_DDS = 0x128B,
ICON0_11_DDS = 0x128C,
ICON0_12_DDS = 0x128D,
ICON0_13_DDS = 0x128E,
ICON0_14_DDS = 0x128F,
ICON0_15_DDS = 0x1290,
ICON0_16_DDS = 0x1291,
ICON0_17_DDS = 0x1292,
ICON0_18_DDS = 0x1293,
ICON0_19_DDS = 0x1294,
ICON0_20_DDS = 0x1295,
ICON0_21_DDS = 0x1296,
ICON0_22_DDS = 0x1297,
ICON0_23_DDS = 0x1298,
ICON0_24_DDS = 0x1299,
ICON0_25_DDS = 0x129A,
ICON0_26_DDS = 0x129B,
ICON0_27_DDS = 0x129C,
ICON0_28_DDS = 0x129D,
ICON0_29_DDS = 0x129E,
ICON0_30_DDS = 0x129F,
PIC0_DDS = 0x12A0,
PIC1_DDS = 0x12C0,
PIC1_00_DDS = 0x12C1,
PIC1_01_DDS = 0x12C2,
PIC1_02_DDS = 0x12C3,
PIC1_03_DDS = 0x12C4,
PIC1_04_DDS = 0x12C5,
PIC1_05_DDS = 0x12C6,
PIC1_06_DDS = 0x12C7,
PIC1_07_DDS = 0x12C8,
PIC1_08_DDS = 0x12C9,
PIC1_09_DDS = 0x12CA,
PIC1_10_DDS = 0x12CB,
PIC1_11_DDS = 0x12CC,
PIC1_12_DDS = 0x12CD,
PIC1_13_DDS = 0x12CE,
PIC1_14_DDS = 0x12CF,
PIC1_15_DDS = 0x12D0,
PIC1_16_DDS = 0x12D1,
PIC1_17_DDS = 0x12D2,
PIC1_18_DDS = 0x12D3,
PIC1_19_DDS = 0x12D4,
PIC1_20_DDS = 0x12D5,
PIC1_21_DDS = 0x12D6,
PIC1_22_DDS = 0x12D7,
PIC1_23_DDS = 0x12D8,
PIC1_24_DDS = 0x12D9,
PIC1_25_DDS = 0x12DA,
PIC1_26_DDS = 0x12DB,
PIC1_27_DDS = 0x12DC,
PIC1_28_DDS = 0x12DD,
PIC1_29_DDS = 0x12DE,
PIC1_30_DDS = 0x12DF,
TROPHY__TROPHY00_TRP = 0x1400,
TROPHY__TROPHY01_TRP = 0x1401,
TROPHY__TROPHY02_TRP = 0x1402,
TROPHY__TROPHY03_TRP = 0x1403,
TROPHY__TROPHY04_TRP = 0x1404,
TROPHY__TROPHY05_TRP = 0x1405,
TROPHY__TROPHY06_TRP = 0x1406,
TROPHY__TROPHY07_TRP = 0x1407,
TROPHY__TROPHY08_TRP = 0x1408,
TROPHY__TROPHY09_TRP = 0x1409,
TROPHY__TROPHY10_TRP = 0x140A,
TROPHY__TROPHY11_TRP = 0x140B,
TROPHY__TROPHY12_TRP = 0x140C,
TROPHY__TROPHY13_TRP = 0x140D,
TROPHY__TROPHY14_TRP = 0x140E,
TROPHY__TROPHY15_TRP = 0x140F,
TROPHY__TROPHY16_TRP = 0x1410,
TROPHY__TROPHY17_TRP = 0x1411,
TROPHY__TROPHY18_TRP = 0x1412,
TROPHY__TROPHY19_TRP = 0x1413,
TROPHY__TROPHY20_TRP = 0x1414,
TROPHY__TROPHY21_TRP = 0x1415,
TROPHY__TROPHY22_TRP = 0x1416,
TROPHY__TROPHY23_TRP = 0x1417,
TROPHY__TROPHY24_TRP = 0x1418,
TROPHY__TROPHY25_TRP = 0x1419,
TROPHY__TROPHY26_TRP = 0x141A,
TROPHY__TROPHY27_TRP = 0x141B,
TROPHY__TROPHY28_TRP = 0x141C,
TROPHY__TROPHY29_TRP = 0x141D,
TROPHY__TROPHY30_TRP = 0x141E,
TROPHY__TROPHY31_TRP = 0x141F,
TROPHY__TROPHY32_TRP = 0x1420,
TROPHY__TROPHY33_TRP = 0x1421,
TROPHY__TROPHY34_TRP = 0x1422,
TROPHY__TROPHY35_TRP = 0x1423,
TROPHY__TROPHY36_TRP = 0x1424,
TROPHY__TROPHY37_TRP = 0x1425,
TROPHY__TROPHY38_TRP = 0x1426,
TROPHY__TROPHY39_TRP = 0x1427,
TROPHY__TROPHY40_TRP = 0x1428,
TROPHY__TROPHY41_TRP = 0x1429,
TROPHY__TROPHY42_TRP = 0x142A,
TROPHY__TROPHY43_TRP = 0x142B,
TROPHY__TROPHY44_TRP = 0x142C,
TROPHY__TROPHY45_TRP = 0x142D,
TROPHY__TROPHY46_TRP = 0x142E,
TROPHY__TROPHY47_TRP = 0x142F,
TROPHY__TROPHY48_TRP = 0x1430,
TROPHY__TROPHY49_TRP = 0x1431,
TROPHY__TROPHY50_TRP = 0x1432,
TROPHY__TROPHY51_TRP = 0x1433,
TROPHY__TROPHY52_TRP = 0x1434,
TROPHY__TROPHY53_TRP = 0x1435,
TROPHY__TROPHY54_TRP = 0x1436,
TROPHY__TROPHY55_TRP = 0x1437,
TROPHY__TROPHY56_TRP = 0x1438,
TROPHY__TROPHY57_TRP = 0x1439,
TROPHY__TROPHY58_TRP = 0x143A,
TROPHY__TROPHY59_TRP = 0x143B,
TROPHY__TROPHY60_TRP = 0x143C,
TROPHY__TROPHY61_TRP = 0x143D,
TROPHY__TROPHY62_TRP = 0x143E,
TROPHY__TROPHY63_TRP = 0x143F,
TROPHY__TROPHY64_TRP = 0x1440,
TROPHY__TROPHY65_TRP = 0x1441,
TROPHY__TROPHY66_TRP = 0x1442,
TROPHY__TROPHY67_TRP = 0x1443,
TROPHY__TROPHY68_TRP = 0x1444,
TROPHY__TROPHY69_TRP = 0x1445,
TROPHY__TROPHY70_TRP = 0x1446,
TROPHY__TROPHY71_TRP = 0x1447,
TROPHY__TROPHY72_TRP = 0x1448,
TROPHY__TROPHY73_TRP = 0x1449,
TROPHY__TROPHY74_TRP = 0x144A,
TROPHY__TROPHY75_TRP = 0x144B,
TROPHY__TROPHY76_TRP = 0x144C,
TROPHY__TROPHY77_TRP = 0x144D,
TROPHY__TROPHY78_TRP = 0x144E,
TROPHY__TROPHY79_TRP = 0x144F,
TROPHY__TROPHY80_TRP = 0x1450,
TROPHY__TROPHY81_TRP = 0x1451,
TROPHY__TROPHY82_TRP = 0x1452,
TROPHY__TROPHY83_TRP = 0x1453,
TROPHY__TROPHY84_TRP = 0x1454,
TROPHY__TROPHY85_TRP = 0x1455,
TROPHY__TROPHY86_TRP = 0x1456,
TROPHY__TROPHY87_TRP = 0x1457,
TROPHY__TROPHY88_TRP = 0x1458,
TROPHY__TROPHY89_TRP = 0x1459,
TROPHY__TROPHY90_TRP = 0x145A,
TROPHY__TROPHY91_TRP = 0x145B,
TROPHY__TROPHY92_TRP = 0x145C,
TROPHY__TROPHY93_TRP = 0x145D,
TROPHY__TROPHY94_TRP = 0x145E,
TROPHY__TROPHY95_TRP = 0x145F,
TROPHY__TROPHY96_TRP = 0x1460,
TROPHY__TROPHY97_TRP = 0x1461,
TROPHY__TROPHY98_TRP = 0x1462,
TROPHY__TROPHY99_TRP = 0x1463,
KEYMAP_RP__001_PNG = 0x1600,
KEYMAP_RP__002_PNG = 0x1601,
KEYMAP_RP__003_PNG = 0x1602,
KEYMAP_RP__004_PNG = 0x1603,
KEYMAP_RP__005_PNG = 0x1604,
KEYMAP_RP__006_PNG = 0x1605,
KEYMAP_RP__007_PNG = 0x1606,
KEYMAP_RP__008_PNG = 0x1607,
KEYMAP_RP__009_PNG = 0x1608,
KEYMAP_RP__010_PNG = 0x1609,
KEYMAP_RP__00__001_PNG = 0x1610,
KEYMAP_RP__00__002_PNG = 0x1611,
KEYMAP_RP__00__003_PNG = 0x1612,
KEYMAP_RP__00__004_PNG = 0x1613,
KEYMAP_RP__00__005_PNG = 0x1614,
KEYMAP_RP__00__006_PNG = 0x1615,
KEYMAP_RP__00__007_PNG = 0x1616,
KEYMAP_RP__00__008_PNG = 0x1617,
KEYMAP_RP__00__009_PNG = 0x1618,
KEYMAP_RP__00__010_PNG = 0x1619,
KEYMAP_RP__01__001_PNG = 0x1620,
KEYMAP_RP__01__002_PNG = 0x1621,
KEYMAP_RP__01__003_PNG = 0x1622,
KEYMAP_RP__01__004_PNG = 0x1623,
KEYMAP_RP__01__005_PNG = 0x1624,
KEYMAP_RP__01__006_PNG = 0x1625,
KEYMAP_RP__01__007_PNG = 0x1626,
KEYMAP_RP__01__008_PNG = 0x1627,
KEYMAP_RP__01__009_PNG = 0x1628,
KEYMAP_RP__01__010_PNG = 0x1629,
KEYMAP_RP__02__001_PNG = 0x1630,
KEYMAP_RP__02__002_PNG = 0x1631,
KEYMAP_RP__02__003_PNG = 0x1632,
KEYMAP_RP__02__004_PNG = 0x1633,
KEYMAP_RP__02__005_PNG = 0x1634,
KEYMAP_RP__02__006_PNG = 0x1635,
KEYMAP_RP__02__007_PNG = 0x1636,
KEYMAP_RP__02__008_PNG = 0x1637,
KEYMAP_RP__02__009_PNG = 0x1638,
KEYMAP_RP__02__010_PNG = 0x1639,
KEYMAP_RP__03__001_PNG = 0x1640,
KEYMAP_RP__03__002_PNG = 0x1641,
KEYMAP_RP__03__003_PNG = 0x1642,
KEYMAP_RP__03__004_PNG = 0x1643,
KEYMAP_RP__03__005_PNG = 0x1644,
KEYMAP_RP__03__006_PNG = 0x1645,
KEYMAP_RP__03__007_PNG = 0x1646,
KEYMAP_RP__03__008_PNG = 0x1647,
KEYMAP_RP__03__009_PNG = 0x1648,
KEYMAP_RP__03__010_PNG = 0x1649,
KEYMAP_RP__04__001_PNG = 0x1650,
KEYMAP_RP__04__002_PNG = 0x1651,
KEYMAP_RP__04__003_PNG = 0x1652,
KEYMAP_RP__04__004_PNG = 0x1653,
KEYMAP_RP__04__005_PNG = 0x1654,
KEYMAP_RP__04__006_PNG = 0x1655,
KEYMAP_RP__04__007_PNG = 0x1656,
KEYMAP_RP__04__008_PNG = 0x1657,
KEYMAP_RP__04__009_PNG = 0x1658,
KEYMAP_RP__04__010_PNG = 0x1659,
KEYMAP_RP__05__001_PNG = 0x1660,
KEYMAP_RP__05__002_PNG = 0x1661,
KEYMAP_RP__05__003_PNG = 0x1662,
KEYMAP_RP__05__004_PNG = 0x1663,
KEYMAP_RP__05__005_PNG = 0x1664,
KEYMAP_RP__05__006_PNG = 0x1665,
KEYMAP_RP__05__007_PNG = 0x1666,
KEYMAP_RP__05__008_PNG = 0x1667,
KEYMAP_RP__05__009_PNG = 0x1668,
KEYMAP_RP__05__010_PNG = 0x1669,
KEYMAP_RP__06__001_PNG = 0x1670,
KEYMAP_RP__06__002_PNG = 0x1671,
KEYMAP_RP__06__003_PNG = 0x1672,
KEYMAP_RP__06__004_PNG = 0x1673,
KEYMAP_RP__06__005_PNG = 0x1674,
KEYMAP_RP__06__006_PNG = 0x1675,
KEYMAP_RP__06__007_PNG = 0x1676,
KEYMAP_RP__06__008_PNG = 0x1677,
KEYMAP_RP__06__009_PNG = 0x1678,
KEYMAP_RP__06__010_PNG = 0x1679,
KEYMAP_RP__07__001_PNG = 0x1680,
KEYMAP_RP__07__002_PNG = 0x1681,
KEYMAP_RP__07__003_PNG = 0x1682,
KEYMAP_RP__07__004_PNG = 0x1683,
KEYMAP_RP__07__005_PNG = 0x1684,
KEYMAP_RP__07__006_PNG = 0x1685,
KEYMAP_RP__07__007_PNG = 0x1686,
KEYMAP_RP__07__008_PNG = 0x1687,
KEYMAP_RP__07__009_PNG = 0x1688,
KEYMAP_RP__07__010_PNG = 0x1689,
KEYMAP_RP__08__001_PNG = 0x1690,
KEYMAP_RP__08__002_PNG = 0x1691,
KEYMAP_RP__08__003_PNG = 0x1692,
KEYMAP_RP__08__004_PNG = 0x1693,
KEYMAP_RP__08__005_PNG = 0x1694,
KEYMAP_RP__08__006_PNG = 0x1695,
KEYMAP_RP__08__007_PNG = 0x1696,
KEYMAP_RP__08__008_PNG = 0x1697,
KEYMAP_RP__08__009_PNG = 0x1698,
KEYMAP_RP__08__010_PNG = 0x1699,
KEYMAP_RP__09__001_PNG = 0x16A0,
KEYMAP_RP__09__002_PNG = 0x16A1,
KEYMAP_RP__09__003_PNG = 0x16A2,
KEYMAP_RP__09__004_PNG = 0x16A3,
KEYMAP_RP__09__005_PNG = 0x16A4,
KEYMAP_RP__09__006_PNG = 0x16A5,
KEYMAP_RP__09__007_PNG = 0x16A6,
KEYMAP_RP__09__008_PNG = 0x16A7,
KEYMAP_RP__09__009_PNG = 0x16A8,
KEYMAP_RP__09__010_PNG = 0x16A9,
KEYMAP_RP__10__001_PNG = 0x16B0,
KEYMAP_RP__10__002_PNG = 0x16B1,
KEYMAP_RP__10__003_PNG = 0x16B2,
KEYMAP_RP__10__004_PNG = 0x16B3,
KEYMAP_RP__10__005_PNG = 0x16B4,
KEYMAP_RP__10__006_PNG = 0x16B5,
KEYMAP_RP__10__007_PNG = 0x16B6,
KEYMAP_RP__10__008_PNG = 0x16B7,
KEYMAP_RP__10__009_PNG = 0x16B8,
KEYMAP_RP__10__010_PNG = 0x16B9,
KEYMAP_RP__11__001_PNG = 0x16C0,
KEYMAP_RP__11__002_PNG = 0x16C1,
KEYMAP_RP__11__003_PNG = 0x16C2,
KEYMAP_RP__11__004_PNG = 0x16C3,
KEYMAP_RP__11__005_PNG = 0x16C4,
KEYMAP_RP__11__006_PNG = 0x16C5,
KEYMAP_RP__11__007_PNG = 0x16C6,
KEYMAP_RP__11__008_PNG = 0x16C7,
KEYMAP_RP__11__009_PNG = 0x16C8,
KEYMAP_RP__11__010_PNG = 0x16C9,
KEYMAP_RP__12__001_PNG = 0x16D0,
KEYMAP_RP__12__002_PNG = 0x16D1,
KEYMAP_RP__12__003_PNG = 0x16D2,
KEYMAP_RP__12__004_PNG = 0x16D3,
KEYMAP_RP__12__005_PNG = 0x16D4,
KEYMAP_RP__12__006_PNG = 0x16D5,
KEYMAP_RP__12__007_PNG = 0x16D6,
KEYMAP_RP__12__008_PNG = 0x16D7,
KEYMAP_RP__12__009_PNG = 0x16D8,
KEYMAP_RP__12__010_PNG = 0x16D9,
KEYMAP_RP__13__001_PNG = 0x16E0,
KEYMAP_RP__13__002_PNG = 0x16E1,
KEYMAP_RP__13__003_PNG = 0x16E2,
KEYMAP_RP__13__004_PNG = 0x16E3,
KEYMAP_RP__13__005_PNG = 0x16E4,
KEYMAP_RP__13__006_PNG = 0x16E5,
KEYMAP_RP__13__007_PNG = 0x16E6,
KEYMAP_RP__13__008_PNG = 0x16E7,
KEYMAP_RP__13__009_PNG = 0x16E8,
KEYMAP_RP__13__010_PNG = 0x16E9,
KEYMAP_RP__14__001_PNG = 0x16F0,
KEYMAP_RP__14__002_PNG = 0x16F1,
KEYMAP_RP__14__003_PNG = 0x16F2,
KEYMAP_RP__14__004_PNG = 0x16F3,
KEYMAP_RP__14__005_PNG = 0x16F4,
KEYMAP_RP__14__006_PNG = 0x16F5,
KEYMAP_RP__14__007_PNG = 0x16F6,
KEYMAP_RP__14__008_PNG = 0x16F7,
KEYMAP_RP__14__009_PNG = 0x16F8,
KEYMAP_RP__14__010_PNG = 0x16F9,
KEYMAP_RP__15__001_PNG = 0x1700,
KEYMAP_RP__15__002_PNG = 0x1701,
KEYMAP_RP__15__003_PNG = 0x1702,
KEYMAP_RP__15__004_PNG = 0x1703,
KEYMAP_RP__15__005_PNG = 0x1704,
KEYMAP_RP__15__006_PNG = 0x1705,
KEYMAP_RP__15__007_PNG = 0x1706,
KEYMAP_RP__15__008_PNG = 0x1707,
KEYMAP_RP__15__009_PNG = 0x1708,
KEYMAP_RP__15__010_PNG = 0x1709,
KEYMAP_RP__16__001_PNG = 0x1710,
KEYMAP_RP__16__002_PNG = 0x1711,
KEYMAP_RP__16__003_PNG = 0x1712,
KEYMAP_RP__16__004_PNG = 0x1713,
KEYMAP_RP__16__005_PNG = 0x1714,
KEYMAP_RP__16__006_PNG = 0x1715,
KEYMAP_RP__16__007_PNG = 0x1716,
KEYMAP_RP__16__008_PNG = 0x1717,
KEYMAP_RP__16__009_PNG = 0x1718,
KEYMAP_RP__16__010_PNG = 0x1719,
KEYMAP_RP__17__001_PNG = 0x1720,
KEYMAP_RP__17__002_PNG = 0x1721,
KEYMAP_RP__17__003_PNG = 0x1722,
KEYMAP_RP__17__004_PNG = 0x1723,
KEYMAP_RP__17__005_PNG = 0x1724,
KEYMAP_RP__17__006_PNG = 0x1725,
KEYMAP_RP__17__007_PNG = 0x1726,
KEYMAP_RP__17__008_PNG = 0x1727,
KEYMAP_RP__17__009_PNG = 0x1728,
KEYMAP_RP__17__010_PNG = 0x1729,
KEYMAP_RP__18__001_PNG = 0x1730,
KEYMAP_RP__18__002_PNG = 0x1731,
KEYMAP_RP__18__003_PNG = 0x1732,
KEYMAP_RP__18__004_PNG = 0x1733,
KEYMAP_RP__18__005_PNG = 0x1734,
KEYMAP_RP__18__006_PNG = 0x1735,
KEYMAP_RP__18__007_PNG = 0x1736,
KEYMAP_RP__18__008_PNG = 0x1737,
KEYMAP_RP__18__009_PNG = 0x1738,
KEYMAP_RP__18__010_PNG = 0x1739,
KEYMAP_RP__19__001_PNG = 0x1740,
KEYMAP_RP__19__002_PNG = 0x1741,
KEYMAP_RP__19__003_PNG = 0x1742,
KEYMAP_RP__19__004_PNG = 0x1743,
KEYMAP_RP__19__005_PNG = 0x1744,
KEYMAP_RP__19__006_PNG = 0x1745,
KEYMAP_RP__19__007_PNG = 0x1746,
KEYMAP_RP__19__008_PNG = 0x1747,
KEYMAP_RP__19__009_PNG = 0x1748,
KEYMAP_RP__19__010_PNG = 0x1749,
KEYMAP_RP__20__001_PNG = 0x1750,
KEYMAP_RP__20__002_PNG = 0x1751,
KEYMAP_RP__20__003_PNG = 0x1752,
KEYMAP_RP__20__004_PNG = 0x1753,
KEYMAP_RP__20__005_PNG = 0x1754,
KEYMAP_RP__20__006_PNG = 0x1755,
KEYMAP_RP__20__007_PNG = 0x1756,
KEYMAP_RP__20__008_PNG = 0x1757,
KEYMAP_RP__20__009_PNG = 0x1758,
KEYMAP_RP__20__010_PNG = 0x1759,
KEYMAP_RP__21__001_PNG = 0x1760,
KEYMAP_RP__21__002_PNG = 0x1761,
KEYMAP_RP__21__003_PNG = 0x1762,
KEYMAP_RP__21__004_PNG = 0x1763,
KEYMAP_RP__21__005_PNG = 0x1764,
KEYMAP_RP__21__006_PNG = 0x1765,
KEYMAP_RP__21__007_PNG = 0x1766,
KEYMAP_RP__21__008_PNG = 0x1767,
KEYMAP_RP__21__009_PNG = 0x1768,
KEYMAP_RP__21__010_PNG = 0x1769,
KEYMAP_RP__22__001_PNG = 0x1770,
KEYMAP_RP__22__002_PNG = 0x1771,
KEYMAP_RP__22__003_PNG = 0x1772,
KEYMAP_RP__22__004_PNG = 0x1773,
KEYMAP_RP__22__005_PNG = 0x1774,
KEYMAP_RP__22__006_PNG = 0x1775,
KEYMAP_RP__22__007_PNG = 0x1776,
KEYMAP_RP__22__008_PNG = 0x1777,
KEYMAP_RP__22__009_PNG = 0x1778,
KEYMAP_RP__22__010_PNG = 0x1779,
KEYMAP_RP__23__001_PNG = 0x1780,
KEYMAP_RP__23__002_PNG = 0x1781,
KEYMAP_RP__23__003_PNG = 0x1782,
KEYMAP_RP__23__004_PNG = 0x1783,
KEYMAP_RP__23__005_PNG = 0x1784,
KEYMAP_RP__23__006_PNG = 0x1785,
KEYMAP_RP__23__007_PNG = 0x1786,
KEYMAP_RP__23__008_PNG = 0x1787,
KEYMAP_RP__23__009_PNG = 0x1788,
KEYMAP_RP__23__010_PNG = 0x1789,
KEYMAP_RP__24__001_PNG = 0x1790,
KEYMAP_RP__24__002_PNG = 0x1791,
KEYMAP_RP__24__003_PNG = 0x1792,
KEYMAP_RP__24__004_PNG = 0x1793,
KEYMAP_RP__24__005_PNG = 0x1794,
KEYMAP_RP__24__006_PNG = 0x1795,
KEYMAP_RP__24__007_PNG = 0x1796,
KEYMAP_RP__24__008_PNG = 0x1797,
KEYMAP_RP__24__009_PNG = 0x1798,
KEYMAP_RP__24__010_PNG = 0x1799,
KEYMAP_RP__25__001_PNG = 0x17A0,
KEYMAP_RP__25__002_PNG = 0x17A1,
KEYMAP_RP__25__003_PNG = 0x17A2,
KEYMAP_RP__25__004_PNG = 0x17A3,
KEYMAP_RP__25__005_PNG = 0x17A4,
KEYMAP_RP__25__006_PNG = 0x17A5,
KEYMAP_RP__25__007_PNG = 0x17A6,
KEYMAP_RP__25__008_PNG = 0x17A7,
KEYMAP_RP__25__009_PNG = 0x17A8,
KEYMAP_RP__25__010_PNG = 0x17A9,
KEYMAP_RP__26__001_PNG = 0x17B0,
KEYMAP_RP__26__002_PNG = 0x17B1,
KEYMAP_RP__26__003_PNG = 0x17B2,
KEYMAP_RP__26__004_PNG = 0x17B3,
KEYMAP_RP__26__005_PNG = 0x17B4,
KEYMAP_RP__26__006_PNG = 0x17B5,
KEYMAP_RP__26__007_PNG = 0x17B6,
KEYMAP_RP__26__008_PNG = 0x17B7,
KEYMAP_RP__26__009_PNG = 0x17B8,
KEYMAP_RP__26__010_PNG = 0x17B9,
KEYMAP_RP__27__001_PNG = 0x17C0,
KEYMAP_RP__27__002_PNG = 0x17C1,
KEYMAP_RP__27__003_PNG = 0x17C2,
KEYMAP_RP__27__004_PNG = 0x17C3,
KEYMAP_RP__27__005_PNG = 0x17C4,
KEYMAP_RP__27__006_PNG = 0x17C5,
KEYMAP_RP__27__007_PNG = 0x17C6,
KEYMAP_RP__27__008_PNG = 0x17C7,
KEYMAP_RP__27__009_PNG = 0x17C8,
KEYMAP_RP__27__010_PNG = 0x17C9,
KEYMAP_RP__28__001_PNG = 0x17D0,
KEYMAP_RP__28__002_PNG = 0x17D1,
KEYMAP_RP__28__003_PNG = 0x17D2,
KEYMAP_RP__28__004_PNG = 0x17D3,
KEYMAP_RP__28__005_PNG = 0x17D4,
KEYMAP_RP__28__006_PNG = 0x17D5,
KEYMAP_RP__28__007_PNG = 0x17D6,
KEYMAP_RP__28__008_PNG = 0x17D7,
KEYMAP_RP__28__009_PNG = 0x17D8,
KEYMAP_RP__28__010_PNG = 0x17D9,
KEYMAP_RP__29__001_PNG = 0x17E0,
KEYMAP_RP__29__002_PNG = 0x17E1,
KEYMAP_RP__29__003_PNG = 0x17E2,
KEYMAP_RP__29__004_PNG = 0x17E3,
KEYMAP_RP__29__005_PNG = 0x17E4,
KEYMAP_RP__29__006_PNG = 0x17E5,
KEYMAP_RP__29__007_PNG = 0x17E6,
KEYMAP_RP__29__008_PNG = 0x17E7,
KEYMAP_RP__29__009_PNG = 0x17E8,
KEYMAP_RP__29__010_PNG = 0x17E9,
KEYMAP_RP__30__001_PNG = 0x17F0,
KEYMAP_RP__30__002_PNG = 0x17F1,
KEYMAP_RP__30__003_PNG = 0x17F2,
KEYMAP_RP__30__004_PNG = 0x17F3,
KEYMAP_RP__30__005_PNG = 0x17F4,
KEYMAP_RP__30__006_PNG = 0x17F5,
KEYMAP_RP__30__007_PNG = 0x17F6,
KEYMAP_RP__30__008_PNG = 0x17F7,
KEYMAP_RP__30__009_PNG = 0x17F8,
KEYMAP_RP__30__010_PNG = 0x17F9
} ENTRY_ID;
typedef struct {
ENTRY_ID pkg_entry_id <format=hex>;
uint32 pkg_entry_0x4;
uint32 pkg_entry_flags_1 <format=hex>;
uint32 pkg_entry_flags_2 <format=hex>;
uint32 pkg_entry_offset <format=hex>;
uint32 pkg_entry_size <format=hex>;
uint64 pkg_entry_padding;
} pkg_table_entry;
// ****************************************** PKG **************************************************
BigEndian();
pkg_header header;
FSeek(header.pkg_table_entry_offset);
local int e;
for (e = 0; e < header.pkg_table_entry_count; e++) {
pkg_table_entry entry;
}
// *************************************** Warnings ***********************************************
// It's not really useful to see just the last warning,
// so inform us how many warnings we should see in output.
if (warnings > 1) {
Warning("%d warnings have occured and logged to the output box!", warnings);
}
// This will make the template show "Template executed successfully."
if (warnings != 0) {
SPrintf(temp_warning, "%d warnings found, template may not have run successfully!", warnings);
return temp_warning;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment