So, got a question about something I don’t expect to be diving into for about six months, but am starting to wonder if I should begin structuring my project now for iOS instead of redoing everything closer to ship.
For iOS game updates, should we expect to have the users need to re-download the entire game? Or is there a way to format our projects in a way where we push smaller update files?
For add-ons, feature additions, or say special event updates which are downloaded either on game start or via in app purchase, what’s a good way to think about project setup for this? Would these additions be sort of a dll or pak file of sorts, created as a whole new UE4 project?
Like I said, it’ll be a while yet until I need to dive into the trenches and fight this battle, but I know it’s coming. Plus, the idea of finding myself with a nearly finished game just to realize I need to restructure the entire thing, retest, etc…well, botching a first release from a new studio won’t do us any good, so it stresses me already. Maybe there are some good tips learned from the Tappy Chicken release that could be included into the documentation, or maybe if there are no plans to add documentation on iOS update/additions then maybe we can add it to the roadmap to squeeze in sometime this year?
Many iOS games download additional assets from their own servers. Mobile game publishers will often ask you how much of your game can be updated/changed without requiring a full app update, because they know that features like live events and regular content updates are vital to keep players engaged on F2P games and Apple’s approval process is way too slow and unreliable for that. This is also used to reduce the base IPA size, by having the app itself download the rest of its assets.
Anyway, the app executable cannot be updated this way, neither on the AppStore nor on Google Play. Any changes to C++ code will require a submission and app update. That said, I think it should be possible to update blueprint assets. All we need is a way to “overlay” multiple paths on the file manager, so updated files could be downloaded to the app’s Documents folder and would be loaded in place of the ones shipped with the IPA.
Yes, that’s pretty much what I’m looking for, thank you! I figure as much that the core program would require a complete update, but looking at the possibility of adding on new maps and characters as time goes on for just the reasons you’ve mentioned.
Unless we are exceptionally lucky and get featured on the app store, the ability to keep adding to the game either free or paid will be important. Each core update turns into a new marketing opportunity and each in game addon signals our customers that we intend to continue improvement and extend their entertainment investment into the game. Dealing with mobile platforms, it’d be nice to minimize the amount of download data whenever possible.
I would start looking at the how the engine loads .uasset files. You can package projects without using .pak files, so I assume it should be possible to read files from multiple locations. But be aware that this is just part of a patching system: I’ve worked with games that had to update themselves and there are lots of little details you need to care care of, like having a way to know which “version” of the files the player has and which ones need to be downloaded, dealing with download errors properly and dealing with storage issues (not having enough space to save the files and corrupt files, like incomplete downloads).
We are currently working on a system for this, in fact! We have already added support for “chunking” of content for PS4 and XboxOne (where it’s required for large games). We are extending that to have a generic downloader of chunks to the device, and then the game can update what levels/characters/etc are available for use. Each chunk is a .pak file. It’s currently programmatic (a delegate function in C++) to determine what assets go in which chunk, but we are designing a UI to help with chunk assignment (not started yet).
We are also looking at DLC and patching, using a similar system. DLC is just a chunk that the game doesn’t know about ahead of time. Patching is going to be either chunk replacement, or chunk diffing, where the engine will know to look in the patch file before the downloaded chunk.
The backend for the download server will have to be under your control, but I imagine that there will be an easy Amazon server program that can easily serve files over HTTP, and also return info about what’s available, etc.
As you can probably tell, this is a work in progress, but it is progressing as we speak
Yeah, the engine-side chunking support is cross-platform and should be usable on desktops and consoles as well as mobile. I’m not sure of the exact details, but there is a bit that can be replaced which is responsible for how to get chunks (different for each console, on PC/mobile it might be pulling from a FTP or HTTPS CDN, etc…).