Project Title: iPhony
Development: ActionScript 3.0
My Role: Lead Programmer / Content Writer
Lead Designer: Sam Roberts
Designer / Producer: Josh Kleber
Lead Artist: Lisa Barber
Artist: Kristin Darling
Lead Programmer: Evan Schipellite
Programmer: Nikolai Alexander-Himlan
iPhony represents the production of our previous concept, SimPhony. For 2-3 months we worked further on defining the game's progression, implementing additional Micro-Apps, and acquiring QA feedback to improve and polish the games. iPhony is essentially a collection of rapid-fire Micro-Games, in which the player earns in-game currency through Achievements. By playing through their current selection of Micro-Apps, the player eventually can earn enough iBucks to browse through the in-game App Store and unlock new Micro-Apps and challenges. The main screen allows players to enjoy these games as one-offs, or they can play through the unlock mode to randomly cycle through their currently owned Apps.
During the concept phase for SimPhony, I primarily created the foundation for tools that would allow for new Micro-Games to easily be built, tested, and implemented within the framework. During the production cycle, I focused on setting down the actual systems required for progression, as well as the creation of even more Micro-Games. With regards to systems, the primary architecture would require achievements, currency, and unlock functionality. This meant that I would ultimately need to adjust the previous Micro-Game structure, as well as continue to add additional features.
Before programming any of the progression content, I needed a method for ensuring that data could be readily saved / loaded into the system. ActionScript already offers a method within SharedObjects to basically parse classes, allowing for classes to readily have public variables saved and re-loaded. To govern this process, I designed a Statistics System to manage the location of the various types of saved information we may have needed. A Statistics Handler owns a Dictionary of Statistics instances, and readily knows to cycle through them upon saving / loading. From the base Statistics class, a Micro-Game Statistics class allows for general information regarding total wins / losses. From there, each individual Micro-Game can sub-class the Statistics in order to properly save its own unique data.
At this point, the acquisition of data from the Statistics classes could be readily applied to the process of unlocking achievements. Achievements could be scripted through an XML file, where its general information regarding title, state, currency value, and description could be altered by designers when needed. Beyond these access points, each Achievement can also have any number of unlock requirements. Each unlock requirement specifies a Statistics class, a getter function call, and a test value. This means that all data could be opened up within the Statistics classes, and then Achievements could simply specify which function to check and test against a test value. By default, test values of 1 are treated as a Boolean, and no visual bar is shown on the achievement. However, test values above 1 can be seen as a progress bar, allowing players to see their proximity to unlock the achievement.
If applicable, achievements are readily checked throughout the game progression. This primarily involves cycling through potential unlock requirements and checking for validity. When an achievement is unlocked, it is sent to the Achievement Revealer, which owns a queue utilized to drop the achievement down from the top of the screen briefly to provide the user with general feedback. Each achievement unlocked provides the player with currency, which can then be utilized in the App Store.
At the start of the game, the player is given a limited number of introductory Micro-Apps to play. These are determined by an Unlock XML file, which provides information regarding the initial unlock state and purchase value for the Apps. Once the player begins earning iBucks, the player can then visit the App Store and search through all of the available Apps. Purchasing an App will submit the selected App instance to be unlocked. All Systems track two lists for Apps, which represent the overall and unlocked Micro-Games. At the start, most of the Micro-Games will be included in the overall list, but as the player progresses through the game, these are gradually transferred to the unlocked / active list. This means that unlocking new content is as simple as ensuring that all systems merely include the selected Micro-Game in the active list that is updated.
Building these systems occupied most of my time early on during production, but once complete I was able to turn my attention to rapidly creating more Micro-Game content. Each week, I was able to fully implement and test 2-3 Micro-Games, allowing for content to quickly be added for testing and art implementation. This would be dependent on the complexity and scope of the Micro-Games, as some Micro-Games required additional time to implement new features. For example, during the production phase I also included gyroscope functionality, as well as a landscape toggle. The landscape toggle calls the native OS to flip the orientation, but this also require additional refactor and feature development to ensure that all pause, achievement, and menu screens would respond properly to the alteration of perspective. Once these features were created, it was able to open up a lot of potential opportunity to explore motion-based Micro-Games and research even more App experiences to replicate.
iPhony was a fun experience that allowed for a lot of creative and innovative designs with the mobile environment. Specifically with regards to the programming, it offered a chance to delve into systems implementation by researching efficient methods for managing unlocks, currency, and achievements within the game. By creating a flexible system, this enabled ease of access to Achievement information and testing values, purchase amounts, and fine tuning of the feedback components within the game's structure. This project also offered a chance to utilize creative writing to generate character biographies for some of the games, as well as to contribute to brainstorming sessions and technical design of mechanics before implementation.