@@ -12,12 +12,21 @@ public static class FileTypeDetector
1212 private static readonly byte [ ] WEBP_SIGNATURE = { 0x52 , 0x49 , 0x46 , 0x46 } ; // RIFF
1313 private static readonly byte [ ] WEBP_VP8X_SIGNATURE = { 0x57 , 0x45 , 0x42 , 0x50 } ; // WEBP
1414 private static readonly byte [ ] OGG_SIGNATURE = { 0x4F , 0x67 , 0x67 , 0x53 } ; // "OggS"
15+ private static readonly byte [ ] WEBM_SIGNATURE = { 0x1A , 0x45 , 0xDF , 0xA3 } ; // EBML header
1516 private static readonly byte [ ] WEM_SIGNATURE = { 0x52 , 0x49 , 0x46 , 0x46 } ; // RIFF
1617 private static readonly byte [ ] WEM_WAVE_SIGNATURE = { 0x57 , 0x41 , 0x56 , 0x45 } ; // WAVE
1718 private static readonly byte [ ] BNK_SIGNATURE = { 0x42 , 0x4B , 0x48 , 0x44 } ; // "BKHD"
18- private static readonly byte [ ] SKL_SIGNATURE = { 0x53 , 0x4B , 0x4C , 0x5F } ; // "SKL_ "
19+ private static readonly byte [ ] SKL_SIGNATURE = { 0x72 , 0x33 , 0x64 , 0x32 , 0x73 , 0x6B , 0x6C , 0x74 } ; // "r3d2sklt "
1920 private static readonly byte [ ] SKN_SIGNATURE = { 0x33 , 0x22 , 0x11 , 0x00 } ;
20- private static readonly byte [ ] ANM_SIGNATURE = { 0x72 , 0x41 , 0x6E , 0x6D } ; // "rAnm"
21+ private static readonly byte [ ] R3D2MESH_SIGNATURE = { 0x72 , 0x33 , 0x64 , 0x32 , 0x4D , 0x65 , 0x73 , 0x68 } ; // "r3d2Mesh"
22+ private static readonly byte [ ] ANM_R3D2ANMD_SIGNATURE = { 0x72 , 0x33 , 0x64 , 0x32 , 0x61 , 0x6E , 0x6D , 0x64 } ; // "r3d2anmd"
23+ private static readonly byte [ ] ANM_R3D2CANM_SIGNATURE = { 0x72 , 0x33 , 0x64 , 0x32 , 0x63 , 0x61 , 0x6E , 0x6D } ; // "r3d2canm"
24+ private static readonly byte [ ] MAPGEO_SIGNATURE = { 0x4F , 0x45 , 0x47 , 0x4D } ; // "OEGM"
25+
26+ private static readonly byte [ ] SCO_SIGNATURE = { 0x5B , 0x4F , 0x62 , 0x6A } ; // "[Obj"
27+ private static readonly byte [ ] LUAQ_SIGNATURE = { 0x4C , 0x75 , 0x61 , 0x51 } ; // "LuaQ"
28+ private static readonly byte [ ] PRELOAD_SIGNATURE = { 0x50 , 0x72 , 0x65 , 0x4C , 0x6F , 0x61 , 0x64 } ; // "PreLoad"
29+ private static readonly byte [ ] RST_SIGNATURE = { 0x52 , 0x53 , 0x54 } ; // "RST"
2130 private static readonly byte [ ] BIN_PROP_SIGNATURE = { 0x50 , 0x52 , 0x4F , 0x50 } ; // "PROP"
2231 private static readonly byte [ ] BIN_PTCH_SIGNATURE = { 0x50 , 0x54 , 0x43 , 0x48 } ; // "PTCH"
2332 private static readonly byte [ ] ICO_SIGNATURE = { 0x00 , 0x00 , 0x01 , 0x00 } ;
@@ -33,10 +42,18 @@ public static string GuessExtension(Span<byte> data)
3342 if ( StartsWith ( data , PNG_SIGNATURE ) ) return "png" ;
3443 if ( StartsWith ( data , JPG_SIGNATURE ) ) return "jpg" ;
3544 if ( StartsWith ( data , OGG_SIGNATURE ) ) return "ogg" ;
45+ if ( StartsWith ( data , WEBM_SIGNATURE ) ) return "webm" ;
3646 if ( StartsWith ( data , BNK_SIGNATURE ) ) return "bnk" ;
3747 if ( StartsWith ( data , SKL_SIGNATURE ) ) return "skl" ;
3848 if ( StartsWith ( data , SKN_SIGNATURE ) ) return "skn" ;
39- if ( StartsWith ( data , ANM_SIGNATURE ) ) return "anm" ;
49+ if ( StartsWith ( data , R3D2MESH_SIGNATURE ) ) return "scb" ;
50+ if ( StartsWith ( data , ANM_R3D2ANMD_SIGNATURE ) || StartsWith ( data , ANM_R3D2CANM_SIGNATURE ) ) return "anm" ;
51+ if ( StartsWith ( data , MAPGEO_SIGNATURE ) ) return "mapgeo" ;
52+ if ( StartsWith ( data , SCO_SIGNATURE ) ) return "sco" ;
53+ if ( Contains ( data , LUAQ_SIGNATURE , 1 ) ) return "luaobj" ;
54+ if ( StartsWith ( data , PRELOAD_SIGNATURE ) ) return "preload" ;
55+ if ( StartsWith ( data , RST_SIGNATURE ) ) return "stringtable" ;
56+
4057 if ( StartsWith ( data , BIN_PROP_SIGNATURE ) || StartsWith ( data , BIN_PTCH_SIGNATURE ) ) return "bin" ;
4158 if ( StartsWith ( data , ICO_SIGNATURE ) ) return "ico" ;
4259
0 commit comments