I've given a good amount of thought about an iOS port and there are a number considerations that arise. A few have already been mentioned, but one of the most important for me is to be true to both the platform and the game. Some examples:
Toolbars, d-pads, and keyboards should be used judiciously. I've played games that used these (including some roguelikes) and a lot of times, they end up being less than ideal. They take up screen space and may not be placed on the screen in a convenient way, given how I prefer to hold the device. Gestures are much nicer; if implemented correctly, you can reserve the entire screen for content and let the user perform the gesture wherever is most comfortable. Even with gestures, it may make sense to display some of these UI elements: displaying a d-pad when Angband asks which direction to fire something or a small toolbar of buttons for things that are macro-like (m1a or the like). Of course, it's difficult to know what the optimal arrangement would be without having a working game.
The game internals that interact with ports need significant modernizing. The shortest answer is that there needs to be an API that allows querying and modification of the game world/game state. takkaria's event system for input is a first step for that. However, there is no analog for game output, other than z-term. z-term is quite the dictator; it demands that you draw these characters at this location, right now. Ideally, the port itself would ask the game "hey, I need the tiles from (20, 20) to (30, 30)" (due to something like the game window being obscured for a moment). While this isn't too much of a problem on a desktop machine, on a mobile device this leads to a lot of waste, likely affecting battery performance. Also, based on the OS X port, Angband likes to commandeer the native application run loop. A normal OS X application will just sit in the native run loop, waiting for a key press, and reacting to it only when one actually shows up. Angband, however, is aggressively polling the event loop for new events. This will likely confuse iOS into thinking that the app is doing real work and kill the battery even more. A general API also makes it much easier to transition to "gridless" version of the game.
Some gameplay elements just won't make sense. fizzix mentions a few, but the one that stands out to me the most is walking/running. I don't want to sit there swiping or tapping each time I want to move (except for combat and other tight situations). Running adds penalties that would just lead to more tapping or swiping. Instead, you just have pathfinding movement or you trace a path for @ to follow. Movement would be disturbed as it currently is so that you don't have stupid deaths. Fortunately, pathfinding movement is already implemented and path tracing wouldn't be too hard to implement. Both would need to be tuned, however.
These are are just a few things I've thought about. My general conclusion was that I'd probably treat an iOS port as a variant first, since a lot would need to change.
Toolbars, d-pads, and keyboards should be used judiciously. I've played games that used these (including some roguelikes) and a lot of times, they end up being less than ideal. They take up screen space and may not be placed on the screen in a convenient way, given how I prefer to hold the device. Gestures are much nicer; if implemented correctly, you can reserve the entire screen for content and let the user perform the gesture wherever is most comfortable. Even with gestures, it may make sense to display some of these UI elements: displaying a d-pad when Angband asks which direction to fire something or a small toolbar of buttons for things that are macro-like (m1a or the like). Of course, it's difficult to know what the optimal arrangement would be without having a working game.
The game internals that interact with ports need significant modernizing. The shortest answer is that there needs to be an API that allows querying and modification of the game world/game state. takkaria's event system for input is a first step for that. However, there is no analog for game output, other than z-term. z-term is quite the dictator; it demands that you draw these characters at this location, right now. Ideally, the port itself would ask the game "hey, I need the tiles from (20, 20) to (30, 30)" (due to something like the game window being obscured for a moment). While this isn't too much of a problem on a desktop machine, on a mobile device this leads to a lot of waste, likely affecting battery performance. Also, based on the OS X port, Angband likes to commandeer the native application run loop. A normal OS X application will just sit in the native run loop, waiting for a key press, and reacting to it only when one actually shows up. Angband, however, is aggressively polling the event loop for new events. This will likely confuse iOS into thinking that the app is doing real work and kill the battery even more. A general API also makes it much easier to transition to "gridless" version of the game.
Some gameplay elements just won't make sense. fizzix mentions a few, but the one that stands out to me the most is walking/running. I don't want to sit there swiping or tapping each time I want to move (except for combat and other tight situations). Running adds penalties that would just lead to more tapping or swiping. Instead, you just have pathfinding movement or you trace a path for @ to follow. Movement would be disturbed as it currently is so that you don't have stupid deaths. Fortunately, pathfinding movement is already implemented and path tracing wouldn't be too hard to implement. Both would need to be tuned, however.
These are are just a few things I've thought about. My general conclusion was that I'd probably treat an iOS port as a variant first, since a lot would need to change.
Comment