├── LICENSE ├── README.md ├── export_mesh.py ├── extract_audio.bat ├── imhex ├── compressed_mesh.hexpat ├── level.hexpat └── mesh.hexpat ├── ratings ├── 60fps_device_table.py ├── extract_device_ratings.py └── generated.txt └── trid ├── bin-tgc-level.trid.xml ├── bin-tgc-prefab.trid.xml ├── mesh-tgc.trid.xml └── meshes-tgc.trid.xml /LICENSE: -------------------------------------------------------------------------------- 1 | ISC License 2 | 3 | Copyright (c) 2020 oldmud0 (https://github.com/oldmud0) 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted, provided that the above 7 | copyright notice and this permission notice appear in all copies. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SkyEngineTools 2 | Tools for importing and exporting assets for the engine used in Sky: Children of the Light. 3 | 4 | Based on Sky version 0.10.0 (151406). 5 | 6 | **Stop trying to cheat in an arthouse game.** I won't help you with getting 10000 candles so you can buy your silly blue cape. 7 | -------------------------------------------------------------------------------- /export_mesh.py: -------------------------------------------------------------------------------- 1 | import ctypes 2 | import struct 3 | import io 4 | from ctypes import * 5 | 6 | filename = '/tmp/AncestorStatueDawn_01.mesh' 7 | f = open(filename, 'rb') 8 | 9 | lz4 = CDLL('liblz4.so.1') 10 | 11 | # read uncompressed size 12 | f.seek(0x52) 13 | uncompressed_size = struct.unpack('i', f.read(4))[0] 14 | 15 | # read compressed size 16 | f.seek(0x4e) 17 | compressed_size = struct.unpack('i', f.read(4))[0] 18 | 19 | # read num lods 20 | f.seek(0x44) 21 | num_lods = struct.unpack('i', f.read(4))[0] 22 | 23 | print('compressed_size', compressed_size) 24 | print('uncompressed_size', uncompressed_size) 25 | print('num_lods', num_lods) 26 | 27 | # get compressed content 28 | f.seek(0x56) 29 | src = f.read(compressed_size) 30 | 31 | # get decompressed content 32 | dest = ctypes.create_string_buffer(uncompressed_size) 33 | ret = lz4.LZ4_decompress_safe(src, dest, compressed_size, uncompressed_size) 34 | if ret <= 0: 35 | raise IOError('error decompressing mesh - file may not be valid') 36 | 37 | o = open(f'{filename}.bin', 'wb') 38 | o.write(dest.raw) 39 | o.close() 40 | 41 | buf = io.BytesIO(dest.raw) 42 | buf.seek(0x74) 43 | shared_vertex_count = struct.unpack('i', buf.read1(4))[0] 44 | buf.seek(0x78) 45 | total_vertex_count = struct.unpack('i', buf.read1(4))[0] 46 | buf.seek(0x80) 47 | point_count = struct.unpack('i', buf.read1(4))[0] 48 | buf.seek(0x74) 49 | uv_count = struct.unpack('i', buf.read1(4))[0] 50 | 51 | print('shared_vertex_count', shared_vertex_count) 52 | print('total_vertex_count', total_vertex_count) 53 | print('point_count', point_count) 54 | print('uv_count', uv_count) 55 | 56 | # build vertex buffer 57 | vertex_buffer = [] 58 | vertex_buffer_start = 0xb3 59 | buf.seek(vertex_buffer_start) 60 | 61 | for i in range(shared_vertex_count): 62 | # 3 floats 63 | x, y, z = struct.unpack(' { 42 | T idx[3]; 43 | }; 44 | 45 | struct MeshLod { 46 | // Assumes mesh header was lost as part of the 47 | // decompression process. 48 | 49 | // Sometimes set to inf. This is fine - this is 50 | // supposed to be an override for an unknown value 51 | float; 52 | 53 | // Axis-aligned bounding box 54 | Vec3 aabbA; 55 | Vec3 aabbB; 56 | 57 | // Usually a copy of the AABB 58 | if (MESH_VERSION >= 0x1c) { 59 | Vec3 aabbA_2; 60 | Vec3 aabbB_2; 61 | } 62 | 63 | if (MESH_VERSION > 0x1c) { 64 | padding[0x20]; 65 | padding[0x20]; 66 | } 67 | 68 | u32 sharedVertices; 69 | u32 totalVertices; 70 | 71 | if (MESH_VERSION >= 0x1e) { 72 | u32 isIdx32; 73 | } else { 74 | u32 isIdx32 = false; 75 | } 76 | 77 | u32 numPoints; 78 | u32 prop11; 79 | u32 prop12; 80 | u32 prop13; 81 | u32 prop14; 82 | 83 | if (MESH_VERSION >= 0x1d) { 84 | u8 loadMeshNorms; // if set, load mesh normals 85 | u8 loadInfo2; 86 | u8 loadInfo3; 87 | u32 skipMeshPos; // if zero, load mesh positions 88 | u32 skipUvs; // if zero, load UV coords 89 | u32 flag3; 90 | } else { 91 | u8 loadMeshNorms = false; 92 | u8 loadInfo2 = false; 93 | u8 loadInfo3 = false; 94 | u32 skipMeshPos = false; 95 | u32 skipUvs = false; 96 | u32 flag3 = false; 97 | } 98 | 99 | u8 unk[0x10]; 100 | if (MESH_VERSION < 0x1d || skipMeshPos == 0) { 101 | Vertex vtxBuffer[sharedVertices]; 102 | } 103 | if (loadMeshNorms) { 104 | float normals[sharedVertices]; 105 | } 106 | if (MESH_VERSION < 0x1d || skipUvs == 0) { // or mesh version < 0x1d 107 | Uv uvBuffer[sharedVertices]; 108 | } 109 | 110 | if (false) { // if animated 111 | BoneWeight animWeights[sharedVertices]; 112 | } 113 | 114 | if (!isIdx32) { 115 | Face idxBuffer[totalVertices / 3]; 116 | } else { 117 | Face idxBuffer[totalVertices / 3]; 118 | } 119 | 120 | if (loadInfo2) { 121 | if (!isIdx32) { 122 | // Likely densities 123 | u8 miscData1[totalVertices * 2]; 124 | } else { 125 | u8 miscData1[totalVertices * 4]; 126 | } 127 | } 128 | 129 | if (numPoints > 0) { 130 | if (!isIdx32) { 131 | u8 miscData2[sharedVertices * 2]; 132 | } else { 133 | u8 miscData2[sharedVertices * 4]; 134 | } 135 | } 136 | 137 | if (prop11 > 0) { 138 | if (!isIdx32) { 139 | u8 miscData3[sharedVertices * 2]; 140 | } else { 141 | u8 miscData3[sharedVertices * 4]; 142 | } 143 | } 144 | 145 | if (prop12 > 0) { 146 | if (!isIdx32) { 147 | u8 miscData4[prop12 * 2]; 148 | } else { 149 | u8 miscData4[prop12 * 4]; 150 | } 151 | } 152 | 153 | if (prop13 > 0) { 154 | u8 miscData5[prop13 * 4]; 155 | } 156 | 157 | if (prop14 > 0) { 158 | if (!isIdx32) { 159 | u8 miscData6[prop14 * 4]; 160 | } else { 161 | u8 miscData6[prop14 * 8]; 162 | } 163 | } 164 | 165 | u8 miscData7[(totalVertices / 3) * 4]; 166 | 167 | if (skipMeshPos) { 168 | u8 altPosData1[sharedVertices * 4]; 169 | u8 altPosData2[sharedVertices]; 170 | } 171 | 172 | if (skipUvs) { 173 | u8 altUvData[sharedVertices * 4]; 174 | } 175 | 176 | if (flag3) { 177 | u8 altFlag3Data[sharedVtxCnt * 4]; 178 | } 179 | }; 180 | 181 | struct OcclusionData { 182 | u32 f1; 183 | u32 f2; 184 | u8 arr1[f1 * 3 * 4]; 185 | u8 arr2[f2 * 4]; 186 | }; 187 | 188 | struct Mesh { 189 | MeshLod lods[]; 190 | OcclusionData; 191 | }; 192 | 193 | MeshLod mesh @ 0x0; 194 | -------------------------------------------------------------------------------- /ratings/60fps_device_table.py: -------------------------------------------------------------------------------- 1 | """ 2 | Generates a table of devices supporting 60 fps in Sky, given: 3 | 4 | - A CSV with columns `(name, rating)` 5 | - A CSV with columns `(brand, marketing name, device, model)`, which you can 6 | find at https://storage.googleapis.com/play_public/supported_devices.csv 7 | 8 | The output table is sorted by name, with the internal model in parentheses. 9 | Unrecognized devices appear at the bottom. 10 | 11 | Devices supporting 60 fps are assumed to be those with a device rating of 12 | >=10,000. 13 | """ 14 | 15 | import argparse 16 | import csv 17 | import sqlite3 18 | import codecs 19 | 20 | parser = argparse.ArgumentParser( 21 | description='Generates a table of devices supporting 60 fps in Sky.' 22 | ) 23 | 24 | parser.add_argument('rating_table', default='rating_table.csv', 25 | help='file containing device ratings') 26 | parser.add_argument('device_table', default='devices.csv', 27 | help='file that maps device models to marketing names') 28 | 29 | args = parser.parse_args() 30 | 31 | con = sqlite3.connect(':memory:') 32 | cur = con.cursor() 33 | 34 | cur.execute('CREATE TABLE ratings (brand, model, rating REAL)') 35 | with open(args.rating_table) as csvfile: 36 | rows = [] 37 | for row in csv.DictReader(csvfile): 38 | name, rating = row['name'], row['rating'] 39 | try: 40 | delim = name.index(' ') 41 | brand, model = name[:delim], name[delim + 1:] 42 | except ValueError: 43 | brand, model = name, None 44 | rows.append((brand, model, rating)) 45 | cur.executemany('INSERT INTO ratings (brand, model, rating) VALUES (?, ?, ?)', 46 | rows) 47 | 48 | cur.execute('CREATE TABLE devices (brand, mkt_name, device, model)') 49 | with codecs.open(args.device_table, 'rb', 'utf-16') as csvfile: 50 | rows = [(row['Retail Branding'], 51 | ' '.join(row['Marketing Name'].split()), 52 | row['Device'], 53 | row['Model']) 54 | for row in csv.DictReader(csvfile)] 55 | cur.executemany('INSERT INTO devices (brand, mkt_name, device, model) VALUES (?, ?, ?, ?)', 56 | rows) 57 | 58 | cur.execute(''' 59 | SELECT 60 | ratings.brand, ratings.model, ratings.rating, 61 | devices.brand, devices.model, devices.mkt_name, 62 | devices.device 63 | FROM ratings 64 | LEFT OUTER JOIN devices ON 65 | ratings.brand LIKE devices.brand 66 | AND ratings.model LIKE devices.model 67 | WHERE rating >= 10000 68 | ORDER BY mkt_name IS NULL, devices.brand, mkt_name; 69 | ''') 70 | for row in cur.fetchall(): 71 | brand_orig, model_orig, rating, brand, model, mkt_name, internal_name = row 72 | if brand is None: 73 | if model_orig is None: 74 | # Model may be None if it's a GPU 75 | name = brand_orig 76 | elif brand_orig in model_orig: 77 | name = model_orig 78 | else: 79 | name = f'{brand_orig} {model_orig}' 80 | print(f'{name}') 81 | else: 82 | if brand.lower() in mkt_name.lower(): 83 | name = mkt_name 84 | else: 85 | name = f'{brand} {mkt_name}' 86 | 87 | if model.lower() in name.lower(): 88 | model = internal_name 89 | print(f'{name:<30} ({model})') 90 | -------------------------------------------------------------------------------- /ratings/extract_device_ratings.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | """ 4 | Extracts a device rating table that is used to determine what graphics quality 5 | settings are available to the user. There are six possible quality settings: 6 | 7 | system_quality_default Default Mode (30fps) 8 | system_quality_highquality High Performance Mode (60fps) 9 | system_quality_highquality_alt Boosted Def Mode (30fps) 10 | system_quality_lowpower Energy Saving Mode (Low Resolution) 11 | system_quality_presentation High Def Mode (Native Resolution 30fps) 12 | system_quality_presentation_alt High Def Mode (30fps) 13 | 14 | Presumably, if your device sucks, you will get the `_alt` settings instead of 15 | the non-alt settings. It's also theoretically possible to modify your device's 16 | rating if you think your device can run better than what the benchmark thinks. 17 | 18 | It's not clear what the source of these benchmark scores are - my guess is that 19 | they were imported from some public benchmarking database. 20 | 21 | To get this script to work, you'll need to extract two parts of 22 | libBootloader.so: 23 | 24 | - A string table of device names (hint: first device is "10.or d") 25 | - Array of pointers to those device names plus ratings 26 | 27 | Because the game looks through the list with a binary search, it's pretty fast. 28 | As of 0.10.0 (151406), the device table contained 2,652 devices. 29 | 30 | In C++, the data structures look like this: 31 | 32 | struct DeviceEntry { 33 | char *device_name; 34 | int64_t device_rating; 35 | }; 36 | 37 | char *device_names[]; 38 | DeviceEntry device_entries[]; 39 | """ 40 | 41 | import argparse 42 | import struct 43 | 44 | parser = argparse.ArgumentParser( 45 | description='Extract device names and ratings from the device table to a CSV.' 46 | ) 47 | 48 | parser.add_argument('device_table', default='device_table.bin', 49 | help='file containing array of device strings') 50 | parser.add_argument('rating_table', default='rating_table.bin', 51 | help='file containing array of pointers and ratings') 52 | 53 | args = parser.parse_args() 54 | 55 | with open(args.device_table, 'rb') as f: 56 | devices = f.read() 57 | with open(args.rating_table, 'rb') as f: 58 | ratings = list(struct.iter_unpack('Qq', f.read())) 59 | 60 | base = ratings[0][0] 61 | print('name,rating') 62 | for device in ratings: 63 | name_begin = device[0] - base 64 | name_end = devices.index(b'\0', name_begin) 65 | name = devices[name_begin : name_end].decode('utf-8') 66 | rating = device[1] 67 | print(f'"{name}","{rating}"') 68 | -------------------------------------------------------------------------------- /ratings/generated.txt: -------------------------------------------------------------------------------- 1 | Asus ROG Phone (ASUS_Z01QD ) 15082.0 2 | Asus ROG Phone (ZS600KL ) 15082.0 3 | Google Pixel 2 XL (taimen ) 10784.0 4 | Google Pixel 3 (blueline ) 10717.0 5 | Google Pixel 3 XL (crosshatch ) 12713.0 6 | Google Pixel 4 (flame ) 18185.0 7 | Google Pixel 4 XL (coral ) 15994.0 8 | HTC U11 (HTC 2PZC100 ) 10017.0 9 | HTC U11+ (HTC 2Q4D200 ) 10234.0 10 | HTC U11+ (HTC U11 plus ) 10234.0 11 | HTC U11+ (HTC_2Q4D100 ) 10234.0 12 | HTC U11 (2PZC5 ) 10017.0 13 | HTC U11 (601HT ) 10017.0 14 | HTC U11 (HTC 2PZC100 ) 10017.0 15 | HTC U11 (HTC U-3w ) 10017.0 16 | HTC U11 (htc_ocndugl ) 10017.0 17 | HTC U11 (htc_ocnuhl ) 10017.0 18 | HTC U11 (htc_ocnuhljapan) 10017.0 19 | HTC U11 (htc_ocnwhl ) 10017.0 20 | HTC U11 (HTC_U-3u ) 10017.0 21 | HTC U11 (HTV33 ) 10017.0 22 | HTC U12 + (HTC 2Q55300 ) 12706.0 23 | HTC U12+ (HTC 2Q551 ) 12706.0 24 | HTC U12+ (HTC 2Q551+ ) 12706.0 25 | HTC U12+ (HTC 2Q55100 ) 12706.0 26 | HTC U12+ (HTC 2Q552 ) 12706.0 27 | HTC U12+ (htc_imedugl ) 12706.0 28 | HTC U12+ (htc_imeuhl ) 12706.0 29 | HTC U12+ (htc_imeuhljp ) 12706.0 30 | Huawei Honor Magic 2 (TNY-AL00 ) 11424.0 31 | Huawei Honor Magic 2 (TNY-TL00 ) 11424.0 32 | LGE G8X ThinQ (901LG ) 19595.0 33 | LGE G8X ThinQ (LM-G850 ) 19595.0 34 | LGE LG G7 One (LM-Q910 ) 10864.0 35 | LGE LG G7 ThinQ (LG-G710 ) 14733.0 36 | LGE LG G7 ThinQ (LM-G710 ) 14733.0 37 | LGE LG G7 ThinQ (LM-G710N ) 14733.0 38 | LGE LG G7 ThinQ (LM-G710VM ) 14733.0 39 | LGE LG V35 ThinQ (LM-V350 ) 11038.0 40 | LGE LG V35 ThinQ (LM-V350N ) 11038.0 41 | LGE V30+ (LGV35 ) 11038.0 42 | LGE V40 ThinQ (LM-V405 ) 11603.0 43 | LGE V40 ThinQ (LM-V409N ) 11603.0 44 | Meizu 16 (16 ) 16038.0 45 | Meizu 16s (16s ) 19659.0 46 | Meizu 16s pro (meizu16sPro ) 22335.0 47 | Motorola Moto Z (2) Force (nash ) 10671.0 48 | Motorola Moto Z(3) (Moto Z (2) ) 10671.0 49 | Motorola Moto Z(3) (moto z3 ) 10671.0 50 | Motorola Moto Z(3) (XT1929-15 ) 10671.0 51 | Nokia 8 (TA-1004 ) 11313.0 52 | Nokia 8 (TA-1012 ) 11313.0 53 | Nokia 8 (TA-1052 ) 11313.0 54 | Nokia 8 Sirocco (A1N ) 11215.0 55 | Nokia 8 Sirocco (A1N_sprout ) 11215.0 56 | OnePlus 6 (ONEPLUS A6000 ) 16273.0 57 | OnePlus 6 (ONEPLUS A6003 ) 16273.0 58 | OnePlus 7 (GM1905 ) 20835.0 59 | OnePlus 7 Pro (GM1915 ) 20462.0 60 | OnePlus 7 Pro (GM1917 ) 20462.0 61 | OnePlus 7 Pro (GM1925 ) 20462.0 62 | OnePlus 7T (HD1905 ) 23393.0 63 | OnePlus 7T (HD1907 ) 23393.0 64 | OnePlus 7T Pro (HD1913 ) 22812.0 65 | OnePlus5 (ONEPLUS A5000 ) 10000.0 66 | OnePlus5T (ONEPLUS A5010 ) 11185.0 67 | Oppo Reno 10x Zoom (CPH1919 ) 19633.0 68 | Oppo Reno 10x Zoom (CPH1919 ) 19633.0 69 | Oppo Reno 10x Zoom (CPH1919RU ) 19633.0 70 | Oppo Reno A (CPH1983 ) 20226.0 71 | Oppo Reno Ace (PCLM10 ) 20226.0 72 | Razer Phone 2 (aura ) 10000.0 73 | Razer Phone 2 (bolt ) 10000.0 74 | Razer Phone 2 (linus ) 10000.0 75 | Razer Phone (cheryl ) 10000.0 76 | Razer phone (cheryl_ckh ) 10000.0 77 | Samsung Galaxy Fold (SCV44 ) 20980.0 78 | Samsung Galaxy Fold (SM-F9000 ) 20980.0 79 | Samsung Galaxy Fold (SM-F900F ) 20980.0 80 | Samsung Galaxy Fold (SM-F900U ) 20980.0 81 | Samsung Galaxy Fold (SM-F900U1 ) 20980.0 82 | Samsung Galaxy Fold (SM-F900W ) 20980.0 83 | Samsung Galaxy S10 (SC-03L ) 10000.0 84 | Samsung Galaxy S10 (SCV41 ) 10000.0 85 | Samsung Galaxy S10 (SM-G9730 ) 10000.0 86 | Samsung Galaxy S10 (SM-G9738 ) 10000.0 87 | Samsung Galaxy S10 (SM-G973C ) 10000.0 88 | Samsung Galaxy S10 (SM-G973F ) 10000.0 89 | Samsung Galaxy S10 (SM-G973N ) 10000.0 90 | Samsung Galaxy S10 (SM-G973U ) 10000.0 91 | Samsung Galaxy S10 (SM-G973U1 ) 10000.0 92 | Samsung Galaxy S10 (SM-G973W ) 10000.0 93 | Samsung Galaxy S10 5G (SM-G977B ) 10000.0 94 | Samsung Galaxy S10 5G (SM-G977N ) 10000.0 95 | Samsung Galaxy S10 5G (SM-G977P ) 10000.0 96 | Samsung Galaxy S10 5G (SM-G977T ) 10000.0 97 | Samsung Galaxy S10 5G (SM-G977U ) 10000.0 98 | Samsung Galaxy S10 Lite (SM-G770F ) 10000.0 99 | Samsung Galaxy S10+ (SC-04L ) 10000.0 100 | Samsung Galaxy S10+ (SCV42 ) 10000.0 101 | Samsung Galaxy S10+ (SM-G9750 ) 10000.0 102 | Samsung Galaxy S10+ (SM-G9758 ) 10000.0 103 | Samsung Galaxy S10+ (SM-G975F ) 10000.0 104 | Samsung Galaxy S10+ (SM-G975N ) 10000.0 105 | Samsung Galaxy S10+ (SM-G975U ) 10000.0 106 | Samsung Galaxy S10+ (SM-G975U1 ) 10000.0 107 | Samsung Galaxy S10+ (SM-G975W ) 10000.0 108 | Samsung Galaxy S10+ Olympic Games Edition (SC-05L ) 10000.0 109 | Samsung Galaxy S10e (SM-G9700 ) 10000.0 110 | Samsung Galaxy S10e (SM-G9708 ) 10000.0 111 | Samsung Galaxy S10e (SM-G970F ) 10000.0 112 | Samsung Galaxy S10e (SM-G970N ) 10000.0 113 | Samsung Galaxy S10e (SM-G970U ) 10000.0 114 | Samsung Galaxy S10e (SM-G970U1 ) 10000.0 115 | Samsung Galaxy S10e (SM-G970W ) 10000.0 116 | Samsung Galaxy S8 Active (SM-G892A ) 10000.0 117 | Samsung Galaxy S8 Active (SM-G892U ) 10000.0 118 | Samsung Galaxy S9 (SC-02K ) 10000.0 119 | Samsung Galaxy S9 (SCV38 ) 10000.0 120 | Samsung Galaxy S9 (SM-G9600 ) 10000.0 121 | Samsung Galaxy S9 (SM-G9608 ) 10000.0 122 | Samsung Galaxy S9 (SM-G960F ) 10000.0 123 | Samsung Galaxy S9 (SM-G960N ) 10000.0 124 | Samsung Galaxy S9 (SM-G960U ) 10000.0 125 | Samsung Galaxy S9 (SM-G960U1 ) 10000.0 126 | Samsung Galaxy S9 (SM-G960W ) 10000.0 127 | Samsung Galaxy S9+ (SC-03K ) 10000.0 128 | Samsung Galaxy S9+ (SCV39 ) 10000.0 129 | Samsung Galaxy S9+ (SM-G9650 ) 10000.0 130 | Samsung Galaxy S9+ (SM-G965F ) 10000.0 131 | Samsung Galaxy S9+ (SM-G965N ) 10000.0 132 | Samsung Galaxy S9+ (SM-G965U ) 10000.0 133 | Samsung Galaxy S9+ (SM-G965U1 ) 10000.0 134 | Samsung Galaxy S9+ (SM-G965W ) 10000.0 135 | Samsung Galaxy Tab S6 (SM-T860 ) 19844.0 136 | Samsung Galaxy Tab S6 (SM-T865 ) 19844.0 137 | Samsung Galaxy Tab S6 (SM-T867 ) 19844.0 138 | Samsung Galaxy Tab S6 (SM-T867R4 ) 19844.0 139 | Samsung Galaxy Tab S6 (SM-T867U ) 19844.0 140 | Samsung Galaxy Tab S6 (SM-T867V ) 19844.0 141 | Sharp AQUOS R2 (706SH ) 12393.0 142 | Sharp AQUOS zero (801SH ) 12184.0 143 | Sharp AQUOS zero (SH-Z10 ) 12184.0 144 | Sharp AQUOS zero (SH-Z10A ) 12184.0 145 | Sony Xperia 1 (802SO ) 17719.0 146 | Sony Xperia 1 (J8110 ) 17719.0 147 | Sony Xperia 1 (J8170 ) 17719.0 148 | Sony Xperia 1 (J9110 ) 17719.0 149 | Sony Xperia 1 (J9180 ) 17719.0 150 | Sony Xperia 1 (SO-03L ) 17719.0 151 | Sony Xperia 1 (SOV40 ) 17719.0 152 | Sony Xperia 5 (901SO ) 18382.0 153 | Sony Xperia 5 (J8210 ) 18382.0 154 | Sony Xperia 5 (J8270 ) 18382.0 155 | Sony Xperia 5 (J9210 ) 18382.0 156 | Sony Xperia 5 (SO-01M ) 18382.0 157 | Sony Xperia 5 (SOV41 ) 18382.0 158 | Sony Xperia XZ1 (701SO ) 10687.0 159 | Sony Xperia XZ1 (G8341 ) 10687.0 160 | Sony Xperia XZ1 (G8342 ) 10687.0 161 | Sony Xperia XZ1 (G8343 ) 10687.0 162 | Sony Xperia XZ1 (SO-01K ) 10687.0 163 | Sony Xperia XZ1 (SOV36 ) 10687.0 164 | Sony Xperia XZ1 Compact (G8441 ) 11823.0 165 | Sony Xperia XZ1 Compact (SO-02K ) 11823.0 166 | Sony Xperia XZ2 (702SO ) 10003.0 167 | Sony Xperia XZ2 (H8216 ) 10003.0 168 | Sony Xperia XZ2 (H8266 ) 10003.0 169 | Sony Xperia XZ2 (H8276 ) 10003.0 170 | Sony Xperia XZ2 (H8296 ) 10003.0 171 | Sony Xperia XZ2 (SO-03K ) 10003.0 172 | Sony Xperia XZ2 (SOV37 ) 10003.0 173 | Sony Xperia XZ2 Compact (H8314 ) 14836.0 174 | Sony Xperia XZ2 Compact (H8324 ) 14836.0 175 | Sony Xperia XZ2 Compact (SO-05K ) 14836.0 176 | Sony Xperia XZ2 Premium (H8116 ) 15810.0 177 | Sony Xperia XZ2 Premium (H8166 ) 15810.0 178 | Sony Xperia XZ2 Premium (SO-04K ) 15810.0 179 | Sony Xperia XZ2 Premium (SOV38 ) 15810.0 180 | Sony Xperia XZ3 (801SO ) 12160.0 181 | Sony Xperia XZ3 (H8416 ) 12160.0 182 | Sony Xperia XZ3 (H9436 ) 12160.0 183 | Sony Xperia XZ3 (H9493 ) 12160.0 184 | Sony Xperia XZ3 (SO-01L ) 12160.0 185 | Sony Xperia XZ3 (SOV39 ) 12160.0 186 | vivo NEX S (PD1805 ) 16266.0 187 | Xiaomi MI 8 (dipper ) 11491.0 188 | Xiaomi MI 8 Explorer Edition (ursa ) 10256.0 189 | Xiaomi MI 8 Pro (equuleus ) 11688.0 190 | Xiaomi MI 8 Pro (MI 8 UD ) 11688.0 191 | Xiaomi MI 8 UD (equuleus ) 11688.0 192 | Xiaomi MI 8 UD (MI 8 Pro ) 11688.0 193 | Xiaomi MI 8 UD (equuleus ) 11688.0 194 | Xiaomi MI 9 (cepheus ) 19523.0 195 | Xiaomi Mi 9T Pro (raphael ) 18393.0 196 | Xiaomi POCO F1 (POCOPHONE F1 ) 10000.0 197 | ZTE A2020N2 Pro (ZTE A2020N3 Pro) 20946.0 198 | ZTE Axon 10 Pro (ZTE A2020 Pro ) 20946.0 199 | ZTE Axon 10 Pro (ZTE A2020G Pro ) 20946.0 200 | ZTE Axon 10 Pro (ZTE A2020N3 Pro) 20946.0 201 | ZTE Axon 10 Pro (ZTE A2020RU Pro) 20946.0 202 | ZTE Axon 10 Pro (ZTE A2020U Pro ) 20946.0 203 | ZTE Axon 10 Pro (P855A03 ) 20946.0 204 | appletv ( ) 15000.0 205 | appletv6,2 ( ) 20000.0 206 | apple ipad ( ) 20000.0 207 | apple ipad11,1 ( ) 49000.0 208 | apple ipad11,2 ( ) 49000.0 209 | apple ipad11,3 ( ) 49000.0 210 | apple ipad11,4 ( ) 49000.0 211 | apple ipad6,11 ( ) 20000.0 212 | apple ipad6,12 ( ) 20000.0 213 | apple ipad6,3 ( ) 13000.0 214 | apple ipad6,4 ( ) 13000.0 215 | apple ipad6,7 ( ) 13000.0 216 | apple ipad6,8 ( ) 13000.0 217 | apple ipad7,1 ( ) 26000.0 218 | apple ipad7,11 ( ) 13000.0 219 | apple ipad7,12 ( ) 13000.0 220 | apple ipad7,2 ( ) 26000.0 221 | apple ipad7,3 ( ) 26000.0 222 | apple ipad7,4 ( ) 26000.0 223 | apple ipad7,5 ( ) 13000.0 224 | apple ipad7,6 ( ) 13000.0 225 | apple ipad8,1 ( ) 52000.0 226 | apple ipad8,10 ( ) 52000.0 227 | apple ipad8,11 ( ) 52000.0 228 | apple ipad8,12 ( ) 52000.0 229 | apple ipad8,2 ( ) 52000.0 230 | apple ipad8,3 ( ) 52000.0 231 | apple ipad8,4 ( ) 52000.0 232 | apple ipad8,5 ( ) 52000.0 233 | apple ipad8,6 ( ) 52000.0 234 | apple ipad8,7 ( ) 52000.0 235 | apple ipad8,8 ( ) 52000.0 236 | apple ipad8,9 ( ) 52000.0 237 | apple iphone ( ) 50000.0 238 | apple iphone10,1 ( ) 13000.0 239 | apple iphone10,2 ( ) 13000.0 240 | apple iphone10,3 ( ) 13000.0 241 | apple iphone10,4 ( ) 13000.0 242 | apple iphone10,5 ( ) 13000.0 243 | apple iphone10,6 ( ) 13000.0 244 | apple iphone11,2 ( ) 49000.0 245 | apple iphone11,4 ( ) 49000.0 246 | apple iphone11,6 ( ) 49000.0 247 | apple iphone11,8 ( ) 50000.0 248 | apple iphone12,1 ( ) 60000.0 249 | apple iphone12,3 ( ) 60000.0 250 | apple iphone12,5 ( ) 60000.0 251 | oneplus a6010 ( ) 16571.0 252 | xiaomi poco f1 ( ) 10003.0 253 | xiaomi redmi k20 pro ( ) 18048.0 254 | xiaomi redmi k20 pro premium edition ( ) 18048.0 255 | Adreno (TM) 540 ( ) 10003.0 256 | Adreno (TM) 620 ( ) 10003.0 257 | Adreno (TM) 630 ( ) 10003.0 258 | Adreno (TM) 640 ( ) 10003.0 259 | Adreno (TM) 650 ( ) 10003.0 260 | Adreno (TM) 675 ( ) 10003.0 261 | Adreno (TM) 680 ( ) 10003.0 262 | Adreno (TM) 685 ( ) 10003.0 263 | Mali-G76 ( ) 10003.0 264 | Mali-G76 MP5 ( ) 10003.0 265 | Mali-G76 MP10 ( ) 10003.0 266 | Mali-G76 MP12 ( ) 10003.0 267 | Mali-G76 MP16 ( ) 10003.0 268 | Mali-G77 ( ) 10003.0 269 | Mali-G77 MP11 ( ) 10003.0 270 | -------------------------------------------------------------------------------- /trid/bin-tgc-level.trid.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Sky: Children of the Light level data (objects) 4 | BIN 5 | application/octet-stream 6 | 7 | 8 | https://en.wikipedia.org/wiki/Sky_(video_game) 9 | 10 | 11 | 12 | 13 | 14 | 15 | 23 16 | True 17 | 18 | 2020 19 | 7 20 | 14 21 | 22 | 27 | TrIDScan/Py v2.02 28 | 29 | 30 | 31 | 5447434C01000000 32 | T G C L 33 | 0 34 | 35 | 36 | 000000 37 | 9 38 | 39 | 40 | 0000 41 | 14 42 | 43 | 44 | 0000 45 | 18 46 | 47 | 48 | 00002C000000 49 | . . , 50 | 22 51 | 52 | 53 | 0000 54 | 30 55 | 56 | 57 | 0000 58 | 34 59 | 60 | 61 | 0000 62 | 38 63 | 64 | 65 | 00 66 | 43 67 | 68 | 69 | 000000000000 70 | 46 71 | 72 | 73 | 000000 74 | 53 75 | 76 | 77 | 0000 78 | 58 79 | 80 | 81 | 000000 82 | 61 83 | 84 | 85 | 000000 86 | 65 87 | 88 | 89 | 0000 90 | 70 91 | 92 | 93 | 000000 94 | 73 95 | 96 | 97 | 000000 98 | 77 99 | 100 | 101 | 0000 102 | 82 103 | 104 | 105 | 000000 106 | 85 107 | 108 | 109 | 000000 110 | 89 111 | 112 | 113 | 0000 114 | 94 115 | 116 | 117 | 000000 118 | 97 119 | 120 | 121 | 000000 122 | 101 123 | 124 | 125 | 0000 126 | 106 127 | 128 | 129 | 000000 130 | 109 131 | 132 | 133 | 000000 134 | 113 135 | 136 | 137 | 0000 138 | 118 139 | 140 | 141 | 000000 142 | 121 143 | 144 | 145 | 000000 146 | 125 147 | 148 | 149 | 0000 150 | 130 151 | 152 | 153 | 000000 154 | 133 155 | 156 | 157 | 000000 158 | 137 159 | 160 | 161 | 0000 162 | 142 163 | 164 | 165 | 000000 166 | 145 167 | 168 | 169 | 000000 170 | 149 171 | 172 | 173 | 0000 174 | 154 175 | 176 | 177 | 000000 178 | 157 179 | 180 | 181 | 000000 182 | 161 183 | 184 | 185 | 0000 186 | 166 187 | 188 | 189 | 000000 190 | 169 191 | 192 | 193 | 000000 194 | 173 195 | 196 | 197 | 0000 198 | 178 199 | 200 | 201 | 000000 202 | 181 203 | 204 | 205 | 000000 206 | 185 207 | 208 | 209 | 0000 210 | 190 211 | 212 | 213 | 000000 214 | 193 215 | 216 | 217 | 000000 218 | 197 219 | 220 | 221 | 0000 222 | 202 223 | 224 | 225 | 000000 226 | 205 227 | 228 | 229 | 000000 230 | 209 231 | 232 | 233 | 0000 234 | 214 235 | 236 | 237 | 000000 238 | 217 239 | 240 | 241 | 000000 242 | 221 243 | 244 | 245 | 00 246 | 238 247 | 248 | 249 | 00 250 | 257 251 | 252 | 253 | 00 254 | 281 255 | 256 | 257 | 00 258 | 303 259 | 260 | 261 | 00 262 | 323 263 | 264 | 265 | 00 266 | 335 267 | 268 | 269 | 0000 270 | 374 271 | 272 | 273 | 0000 274 | 377 275 | 276 | 277 | 000000 278 | 389 279 | 280 | 281 | 00 282 | 403 283 | 284 | 285 | 0000 286 | 406 287 | 288 | 289 | 0000 290 | 410 291 | 292 | 293 | 000000 294 | 413 295 | 296 | 297 | 0000 298 | 422 299 | 300 | 301 | 0000 302 | 425 303 | 304 | 305 | 306 | PREVIEWGRIDRESOLUTION 307 | DEFAULTCLOUDDENSITY 308 | DEFAULTLANDDENSITY 309 | LEVELPARAMETERS 310 | BOUNCECOUNT 311 | BLURPASSES 312 | WORLDEMPTY 313 | BSTNODE_7 314 | WORLDNAME 315 | GRIDSIZE 316 | TAPCOUNT 317 | ISWORLD 318 | CLUMP 319 | DATA 320 | TGCL 321 | 322 | 323 | -------------------------------------------------------------------------------- /trid/bin-tgc-prefab.trid.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Sky: Children of the Light level data (blob prefabs) 4 | BIN 5 | application/octet-stream 6 | 7 | 8 | https://en.wikipedia.org/wiki/Sky_(video_game) 9 | 10 | 11 | 12 | 13 | 14 | 15 | 46 16 | True 17 | 18 | 2020 19 | 7 20 | 15 21 | 22 | 27 | TrIDScan/Py v2.02 28 | 29 | 30 | 31 | 5447434C01000000020000002D000000 32 | T G C L . . . . . . . . - 33 | 0 34 | 35 | 36 | 000000 37 | 17 38 | 39 | 40 | 0000002C0000004400000014030000F3050000 41 | . . . , . . . D 42 | 21 43 | 44 | 45 | 0000DC000000000000002C0000003001 46 | . . . . . . . . . . , . . . 0 . 47 | 42 48 | 49 | 50 | 00 51 | 1615 52 | 53 | 54 | 0000 55 | 1618 56 | 57 | 58 | 00 59 | 1639 60 | 61 | 62 | 00000000000000 63 | 1642 64 | 65 | 66 | 0000 67 | 1651 68 | 69 | 70 | 00 71 | 1655 72 | 73 | 74 | 0000 75 | 1658 76 | 77 | 78 | 00 79 | 1662 80 | 81 | 82 | 0000 83 | 1667 84 | 85 | 86 | 0000 87 | 1674 88 | 89 | 90 | 0000000000 91 | 1678 92 | 93 | 94 | 00 95 | 1687 96 | 97 | 98 | 000000 99 | 1702 100 | 101 | 102 | 000000 103 | 1706 104 | 105 | 106 | 000000 107 | 1710 108 | 109 | 110 | 00 111 | 1715 112 | 113 | 114 | 00 115 | 1722 116 | 117 | 118 | 00 119 | 1728 120 | 121 | 122 | 00 123 | 1732 124 | 125 | 126 | 00 127 | 1735 128 | 129 | 130 | 0000 131 | 1740 132 | 133 | 134 | 00 135 | 1747 136 | 137 | 138 | 00 139 | 1751 140 | 141 | 142 | 00 143 | 1768 144 | 145 | 146 | 0000000000 147 | 1770 148 | 149 | 150 | 0000 151 | 1777 152 | 153 | 154 | 00 155 | 1781 156 | 157 | 158 | 0000 159 | 1784 160 | 161 | 162 | 00000000000000000000000000000000 163 | 1788 164 | 165 | 166 | 00 167 | 1833 168 | 169 | 170 | 0000000000 171 | 1839 172 | 173 | 174 | 00 175 | 1847 176 | 177 | 178 | 0000 179 | 1850 180 | 181 | 182 | 00 183 | 1857 184 | 185 | 186 | 0000 187 | 1861 188 | 189 | 190 | 00 191 | 1865 192 | 193 | 194 | 0000000000 195 | 1867 196 | 197 | 198 | 00 199 | 1874 200 | 201 | 202 | 00 203 | 1878 204 | 205 | 206 | 00 207 | 1891 208 | 209 | 210 | 00 211 | 2013 212 | 213 | 214 | 000000 215 | 2029 216 | 217 | 218 | 00 219 | 2035 220 | 221 | 222 | 0000 223 | 2039 224 | 225 | 226 | 000000 227 | 2042 228 | 229 | 230 | 231 | A'MATERIALBOTTOM'GROUNDSECONDARYNOISETYPE'SIDENOISEOFFSETXYZ'PREVIEWDETAIL'GROUNDNOISESCALE'SPIRALANGLEBEGIN_END'BSTGUID'SHAPE'CORNERRADIUS'SIDENOISEDEPTH'TYPE'SIDENOISESCALEXZ_Y'SIDENOISETYPE'GROUNDNOISEOFFSETX_Z'DENSITY'MATERIALANGLEGRADIENT'SIDEANGLE'SI 232 | B''''BSTNODE_ 233 | TGCL 234 | 235 | 236 | -------------------------------------------------------------------------------- /trid/mesh-tgc.trid.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Sky: Children of the Light compiled mesh 4 | MESH 5 | application/octet-stream 6 | 7 | 8 | https://en.wikipedia.org/wiki/Sky_(video_game) 9 | 10 | 11 | 12 | 13 | 14 | 15 | 265 16 | 17 | 2020 18 | 7 19 | 14 20 | 21 | 26 | TrIDScan/Py v2.02 27 | 28 | 29 | 30 | 1E000000 31 | 0 32 | 33 | 34 | 00000000000000000000000000000000 35 | 44 36 | 37 | 38 | FE7F000001000000 39 | 64 40 | 41 | 42 | 0001000000 43 | 73 44 | 45 | 46 | 00 47 | 81 48 | 49 | 50 | 00 51 | 85 52 | 53 | 54 | 00 55 | 88 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /trid/meshes-tgc.trid.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Sky: Children of the Light level data (baked meshes) 4 | MESHES 5 | application/octet-stream 6 | 7 | 8 | https://en.wikipedia.org/wiki/Sky_(video_game) 9 | 10 | 11 | 12 | 13 | 14 | 15 | 23 16 | True 17 | 18 | 2020 19 | 7 20 | 14 21 | 22 | 27 | TrIDScan/Py v2.02 28 | 29 | 30 | 31 | 4C564C30 32 | L V L 0 33 | 0 34 | 35 | 36 | 00000001 37 | 5 38 | 39 | 40 | 4C4F4430 41 | L O D 0 42 | 12 43 | 44 | 45 | 000000 46 | 17 47 | 48 | 49 | 00 50 | 23 51 | 52 | 53 | 000000 54 | 29 55 | 56 | 57 | 00000000 58 | 33 59 | 60 | 61 | 0000 62 | 42 63 | 64 | 65 | 0000000000 66 | 47 67 | 68 | 69 | 0000 70 | 58 71 | 72 | 73 | 000000000000 74 | 62 75 | 76 | 77 | 0000000000 78 | 71 79 | 80 | 81 | 0000 82 | 82 83 | 84 | 85 | 0000 86 | 90 87 | 88 | 89 | 00000000000000000000 90 | 98 91 | 92 | 93 | 00 94 | 141 95 | 96 | 97 | 0000 98 | 144 99 | 100 | 101 | 102 | LOD0 103 | LVL0 104 | 105 | 106 | --------------------------------------------------------------------------------