0
\$\begingroup\$

When working on a game on a mobile platform, having read/write access to game data (assets, configuration files) stored on the dev machine at runtime would enable building of tools to quickly iterate, debug, and analyze the game at runtime.

For iOS & Android, is there any way to have access to these data files from the dev machine while the game is running on the mobile device?

Please do not recommend a tool, or a 3rd party engine that does this.

\$\endgroup\$
1
\$\begingroup\$

You generally need three things, basically, to accomplish this.

  • First, you need a system in your game that can hot-reload assets or other data in response to some notification that the asset has changed. When a texture changes, you'll want to upload the new pixels to the GPU. When a monster description changes, you'll want to swap out the monster's old stats with the new ones. Et cetera. This is usually tied in to whatever system the game is already using for resource loading/caching/management.

  • Second, you'll want to abstract the game's file IO operations so they talk through a virtual filesystem sort of API instead of directly reading files from the device storage. For the "shipping" version of the game you'd use an implementation that did just read files from the device storage, and which never sent any "file changed" notifications mentioned above (probably). For the development or iteration builds, you'd replace that with a version which talked over the network to a remote host and redirected all file IO to that host.

  • Finally, you'll need some kind of editor shell or other wrapper running on the remote (desktop) machine; this machine looks for actual file changes to its files and sends notifications remotely to your game running on the mobile device that files have changed. It also probably implements the networking protocol that the game's remote virtual file system uses to talk with it and read the content of those files.

This also works well for consoles, not just mobile platforms. Even on games developed purely for desktops, it can be a useful collaborative editing tool.

Because of network latency issues you may need to be clever in how you transfer files; you may want to do some negotiating to make sure you always send files in an access-coherent manner, you may need to pre-send some files that you are pretty sure the device might need, or you might need to send only deltas of the changes. You'd have to do some experimentation.

However, this approach is used fairly often on current shipping and in-development titles/engines to achieve the kind of iteration improvements you're alluding to in your post.

\$\endgroup\$
  • \$\begingroup\$ Hey Josh. Thanks for the reply. Once I have access, I know how to build all of these systems. The question is how to actually get r/w access to the files. Clearly a networked solution is possible, but adds a decent amount of overhead (both in developing the tools, and in actually uploading large amounts of assets). Is there no way to easily mount the mobile filesystem to the dev machine when plugged in via usb? (Or something equivalent - I'm told that iTunes doesn't actually mount the fs when syncing) \$\endgroup\$ – user78331 Feb 4 '16 at 0:14
  • \$\begingroup\$ Not that I know of. You'd probably need to jailbreak the iOS device. \$\endgroup\$ – Josh Feb 4 '16 at 0:32
  • \$\begingroup\$ Thanks. Now that I think about it, this question ultimately boils down to a question that belongs on SO or other, even if I'm interested in game-dev applications. Thanks for taking the time to respond. \$\endgroup\$ – user78331 Feb 4 '16 at 1:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy