HouraiLauncher is a cross-platform game launcher and patcher built using python.
Hourai Teahouse is a simple doujin circle with no serious business goals and financial backing. Due to restrictions regarding distribution set by ZUN, derivative projects like Fantasy Crescendo cannot be distributed on online stores like Steam, which makes it particularly difficult to update a game like it. With the rapid iteration model of development we are following, Fantasy Crescendo must be updated regularly with the latest changes. However the base binaries of the game are well over 100MB in size, a non-trivially sized package for testers and users to download just to test small changes.
This compounds with the fact that distribution channels like Github and the like all have size limitations of 1-2GB, which large 3D projects like Fantasy Crescendo will quickly outgrow. Outside of those free distribution venues, the cost of hosting large files and serving a large quantity of them is prohibitively expensive.
HouraiLauncher was created to be custom patching system to ease the development and testing process, and minimize bandwidth consumption in both testing and production environments.
Integration with HouraiDeploy
HouraiDeploy's Unity Cloud Build deployment format is compatible with HouraiLauncher out of the box.
TODO: Detail proper configuration to alter behaviour.
It is strongly suggested to use a service like CloudFlare to add the large files to a Content Delivery Network (CDN). These CDNs reduce time-to-delivery by being geographically replicated around the world, which can be a big issue when deploying the game to players around the world. With proper caching rules, they can also massively reduce the amount of bandwidth to host the large files.
However, this presents a particular issue, to maximize the usefulness of caching, long time to live (TTLs) must be set for the caching. This introduces a new issue when files are updated on the main host, the cached files will still be served. To avoid this issue, files must be cache-busted. CDNs usually cache content based on URL location, so bypassing a cache requires changing the URL in a way that avoids hitting the cache. This is usually done by appending a unique version identifier to files. All files generated by HouraiDeploy's Unity Cloud Build deployment have their SHA-256 hash appended to their filenames. The sole exception is the index file used to detail the version of each bundle used. This serves as a static point for the client to figure out what file and hash combinations are required to update to the latest version. HouraiDeploy supports forcibly invalidating the cache for the index using CloudFlare's API. If you are using an alternative CDN, you may need to update the code to properly invalidate the manifest.