diff --git a/Plugins/vgmstream/vgmstream/VGMContainer.m b/Plugins/vgmstream/vgmstream/VGMContainer.m index 6f5abe7a7..894ce6b9c 100755 --- a/Plugins/vgmstream/vgmstream/VGMContainer.m +++ b/Plugins/vgmstream/vgmstream/VGMContainer.m @@ -31,13 +31,22 @@ + (NSArray *)urlsForContainerURL:(NSURL *)url { - if ([url fragment]) { - // input url already has fragment defined - no need to expand further - return [NSMutableArray arrayWithObject:url]; - } - NSString * path = [[url absoluteString] stringByRemovingPercentEncoding]; + if ([url fragment]) { + // input url might be a TXTP with fragment parameters, in which case + // we need to parse that anyway + NSString * frag = [url fragment]; + NSUInteger len = [frag length]; + if (len < 5 || ![[frag substringFromIndex:len - 5] isEqualToString:@".txtp"]) { + // input url already has fragment defined - no need to expand further + return [NSMutableArray arrayWithObject:url]; + } + + path = [path stringByAppendingFormat:@"%%23%@", frag]; + url = [NSURL fileURLWithPath:[path stringByRemovingPercentEncoding]]; + } + VGMSTREAM * stream = init_vgmstream_from_cogfile([path UTF8String], 0); if (!stream) { diff --git a/Plugins/vgmstream/vgmstream/VGMInterface.m b/Plugins/vgmstream/vgmstream/VGMInterface.m index 520644b18..3d930dc5d 100644 --- a/Plugins/vgmstream/vgmstream/VGMInterface.m +++ b/Plugins/vgmstream/vgmstream/VGMInterface.m @@ -96,6 +96,16 @@ STREAMFILE *cogsf_create_from_path(const char *path) { NSString * urlString = [NSString stringWithUTF8String:path]; NSURL * url = [NSURL URLWithDataRepresentation:[urlString dataUsingEncoding:NSUTF8StringEncoding] relativeToURL:nil]; + if ([url fragment]) { + // .TXTP fragments need an override here + NSString * frag = [url fragment]; + NSUInteger len = [frag length]; + if (len > 5 && [[frag substringFromIndex:len - 5] isEqualToString:@".txtp"]) { + urlString = [urlString stringByReplacingOccurrencesOfString:@"#" withString:@"%23"]; + url = [NSURL URLWithDataRepresentation:[urlString dataUsingEncoding:NSUTF8StringEncoding] relativeToURL:nil]; + } + } + return cogsf_create_from_url(url); }