IS480 Team wiki: 2010T2 CrusNitor MidTerm
- 1 Project Progress Summary
- 1.1 Project Highlights
- 1.2 Project Management
- 1.2.1 Project Status
- 1.2.2 Project Schedule (Planned Vs Actual)
- 1.2.3 Project Metrics
- 1.2.4 Project Risks
- 1.2.5 Technical Complexity
- 1.3 Quality of Product
- 1.4 Reflection
Project Progress Summary
The following chronicles our IS481 journey up till the mid terms.
Steep Learning Curve
We underestimated the initial time we needed to learn and get fully accustomed with the programming language of Objective C. Initially we had estimated that we will need about 2 weeks to be proficient the language. However, we took about a month to grasp the basics and concepts of Objective C. The difficulty arises from stark difference between the syntax of Objective C and Java, the language we are most familiar with.
Initially, we sought to do the game in OpenGL, but later decided that it was too difficult for us to create a game engine on top of. We thus chose to use the Cocos2D graphic engine, which has allowed us to work on other aspects of the game.
Freelance Designers for Game Art
One of the most major concerns of our project was not having any graphic designers in the team. This was a critical because the aesthetics are an important aspect of successful games. We have been fortunate to find group of freelance artists and animators, who would design and develop the animation for our game characters for free, on the condition that they are credited. All game art assets will belong to the artists/animators.
Increased risk in terms of schedule and project control
While the collaboration with the freelance design team was a boon for us, it also presented us with increased risks. We had to re-factor our timeline and produce a more agile development schedule. This is because the game art and asset production would take longer and we would have no control over it. This risk meant that we could expect some downtime waiting for the assets to be produced. Subletting the asset development out to the design team also means that we have increased the risk of not having full control over one of the main aspects of game development. As such, we will have to take this new risk into account and come out with mitigation strategies.
We have restructured our scheduling and development plans to increase flexibility so as to allow us to continue developing the game concurrently while the designers are developing the game arts assets. With our rescheduled tasking, we can work on other aspects of the game when art asset production falls behind, ensuring continuos progress. Being more agile allows us to analyze our game system and conceptualize development areas that we have overlooked during our preliminary planning sessions in the Inception and Elaboration phases.
Values in below table are qualitative.
|Wireless connectivity||Fully deployed and tested||1||May develop heartbeat mechanism to check for dropped connections|
|Directional-Pad||Fully deployed and tested||1|
|Primary attack||In progress 30%||0.9||Attack data should be data-driven|
|Special ability||In progress 5%||0||Will be cut as the art team are not confident of delivering|
|Artificial Intelligence||In progress 25%||0.7||Implemented using finite state machines|
|Game score||Not yet started||0|
|Combat system||Started 15%||0.4||Difficulty in designing a fun combat system|
|User interface (client & server)||In progress 10%||0.8||Waiting on art for more defined specs|
Project Schedule (Planned Vs Actual)
We realized that developing the game's artificial intelligence (AI) and combat system will have to be done incrementally throughout project duration. This was very different from our initial expectation where we could develop these two components as a single deliverable. These components will be continually built upon and revisited at the start of other iterations so as to ensure that the development is in line with our vision for the final game product.
The 14 March deadline takes into account of our Alpha game version milestone and gives us some time allowance to factor in feedbacks from our UAT before the code freeze.
|Iteration||Feature||Planned Date||Actual Date||Comments|
|Construction Iteration 2||Milestone First Playable Version||11 Feb 2011||25 Feb 2011||Delays in game asset production|
|Construction Iteration 2||Game AI Development||28 Jan 2011||14 Mar 2011||Development will be ongoing instead of one-time off task. Will be revisited at the start of each iteration.|
|Construction Iteration 2||Game Combat/Physics Development||8 Feb 2011||14 Mar 2011||Development will be ongoing instead of one-time off task. Will be revisited at the start of each iteration.|
We had set aside a buffer time of about 10 days within the project schedule. This buffer time acts as a safeguard to give us some allowance in the event that we fall behind time. This buffer time can also act as the spare time for us to work on extra features that we would like to develop in the future or introduce features that we have overlooked during our preliminary planning. We designed a schedule metric that takes into account the number of buffer days left.
Optimally, we would want to leave the amount of buffer time we have untouched for rainy days. However, realistically we may experience delays throughout the project. The highest risk of this situation occurring is getting the game art asset production to keep pace with the speed of development.
Thus whenever we go beyond schedule, we will deduct the number of days that we have gone beyond the schedule from the buffer day bank. We have color coded the status of the balance to reflect the gravity of the situation as follows:
Green – 8 days or more left
Yellow – 4-7 days left
Orange – 0 – 3 days left
Red – less than zero days left
We would want our schedule status to remain at least in the yellow zone. Should we ever hit the orange or red zone, we would then know that we have to take drastic measures to overcome the predicament. This portion will be covered within the risk assessment and mitigation strategies section.
We have designed a metric that helps us to track and trace the bugs encountered. The main units of measurement for the metric are the total number of bugs raised, resolved and closed.
- Bugs raised – Refers to the bugs that are found by the tester and referred to the developer team for resolution.
- Bugs resolved – Refers to the bugs that have been solved by the developer team.
- Bugs closed – Refers to the authentication that the resolved bugs have ceased to produce the failed test case outcome and the bug report closed. This acts as a 2nd layer of check.
Bugs found will be prioritized by the tester in the test case documentation. Bugs that have higher priority will be put in front of the queue so that it can be resolved first. The priority level are assigned by the following guideline:
- Priority 1 bug - Bugs that affects core functionalities of the application critically and in need of urgent resolution
- Priority 2 bug - Bugs that affect the game play of the application but not in a critical way.
- Priority 3 bug - Bugs that are minor in nature and does not cause major disruption to the game play
The statistics we can derived from the number of bugs raised, resolved and closed will allow us to forecast on any possible delays that we may encounter during the course of the project. For instance, having numerous unresolved Priority 1 or 2 bugs would signify possible bottlenecks in the development work, as these bugs would not allow nor facilitate the later development works to function properly.
The following are the revised risk assessments we have made since our Inception Phase.
|Risk ID||Risk||Likelihood||Risk Impact||Comments|
|1||Slow progress due to steep learning curve of Objective C||Medium||High||Likelihood raised to 'medium' from previously 'low'. We had underestimated the complexity of learning the language and relevant frameworks needed for the game development. Even at this stage, we are still learning many new things with regards to the Objective C language.|
|2||Lack of experience in game development||Medium||High||Likelihood lowered to 'medium' from 'high'. We have coped well with the development work. Our main developers Jaryl and Clement had been spearheading the direction and coached the team with the mechanisms of game development. Referring to books and online forums has helped to mediate this risk.|
|3||Fall behind schedule||High||Medium||This risk came about as the game art assets production will take time and not keep pace with the development work.|
|4||Lack of control over game art asset production||Low||Medium||This risk comes about as we have let out the design portion of the project to the design team.|
Risk Mitigation Strategy
|Risk ID||Mitigation Strategy||Mitigation Type||Risk Impact after Mitigation|
The technical complexity of our project can be categorized based on the following areas:
- Programming Language
- Graphics and game art
- Game concept
The programming language utilized for our project is Objective C, which is required to develop on iOS devices. The structure and syntax of this language is extremely new for us, even for those with C/C++ background, upon which Objective C is based on. Unlike programming language such as Java, Objective C is based on message passing and does not have a garbage collector (on iOS).
It was extremely challenging for us to pick up Objective C in the relatively short time that we have before we started our development work. While we are only aiming to get the basic proficiency needed for us to work on the project, we still learn new things about the language every day.
The usual methodology of object-oriented programming that we learn is usually based on an inheritance hierarchy. For the purposes of our game however, we adopted a component-based architecture. A component-based architecture allows us to introduce the element of reusability without committing to statically defined relationships at compile time. Using a component-based architecture, reusable components are dynamically loaded at run-time when the game is loaded.
For instance, within our game, there are multiple assets that share the same components of health. The component-based architecture allows us to create a generic health component. The health component can be shared by different entities, with each entity owning its own copy of state data.
In addition, we made sure to make our game data-driven, as component and entity data are stored in a local SQLite database, which is loaded unto the device. This makes it easy for us to make changes to the game when we are tweaking it for testing purposes as we need not change codes, or recompile them (there is however, a time factor for packaging the application that increases as the game gets larger).
To reduce memory usage (which is a scarce resource on mobile platforms), we also developed a system of storing shared data using the flyweight design pattern. For example, all enemy swordsmen share the same spritesheet (image) and thus we have a swordsman flyweight that stores a single copy of this image in memory. This allows us to generate greater numbers of enemies, each with its own state data, without bogging down the game.
To manage the complexities of the game mechanics, we developed a message queuing system that enables entities to talk with one another, but not directly. This reduces coupling between entities and allows us to define and apply business rules over message passing (pausing the game will be a matter of not processing game messages). Each entity also implements a finite state machine (FSM) that allows them to react realistically to different game messages based on their current state.
Graphics and game art
We are also exposed to the different stages of game art and assets development, courtesy of the design team that is collaborating with us for this project. The art is first drawn and sketched by our artist and is put forward for amendments and approval. Once approved, the artwork is then digitized and modified to fit to our game context. Animation is then added to induce movements and actions on the assets. The design team is also responsible for the design and production of the game UIs. We are appreciative to have been exposed to this aspect of game development, as no one within our FYP team has any prior knowledge nor experience with art and animation design.
The game concept is relatively new and not yet prevalent in the gaming scene. Using the iPad as a console and iPhones as game controllers as a concept is still in its infancy stage and there is very little games within the iTunes AppStore that adopts this methodology. Hoping to be a trendsetter, we have almost no points of references to model our project after, further adding to the complexity of the project.
We have utilized multiple software during the course of our project. Given the nature of our project, we are exposed to many new software which we had not have the opportunity to do so during the course of our education in SIS. The software that we use include:
- XCode - IDE required for iOS development
- Tower/Git - a tool we use for versioning and sharing our codes
- Zwoptext - creation of sprite sheet for Cocos2D platforms
- Navicat - GUI for SQLite database
- Unfuddle - web application for bug tracking (also hosts our git repository)
Quality of Product
Game art Sketches
Learning iOS development was something that I wanted to do but was put off until now. IS481 has been a great opportunity for me to pick up what I think is a valuable skillset. Having been a C/C++developer, it was a surprise to me how different Objective C was but thankfully we found Cocos2D which helped remove some of the project's complexity, especially when dealing with graphics.
I was in charge of the game's component-based architecture, and am glad to find that our early efforts are now paying off since the team is able make changes to the game easily once they understand how the architecture works. It was a fairly easy task of developing additional functionality into the game by encapsulating them as an additional component.
Also, working with the artists and animators has provided us with first-hand insight into how art teams work and also made us some new friends.
My passion was develop games on any platform as a career and thus, I've taken up IS481 to spearhead my first game development project on iOS platform. Though I have some knowledge in C/C++, Objective C is totally different level of programming that I have ever encounter. The learning curve was steep, but the technical skills obtained was worth it. I was in-charged of mainly working with getting the graphics into the game and making the animations work well with player controls and AI behaviors. I had to use Zwoptex to create sprite sheets of animations with each individual sprite's coordinates optimized for use with the cocos2d framework. It was hard learning the concepts, but I picked it up fast, and end up having lots of fun implementing the game art and bringing them to life in the game.
The past few weeks of working on the project has been difficult yet fulfilling. Not only I get to learn one of the most popular programming language from scratch but also able to work with a group of enthusiastic peers. Game designing and programming have also gave me a different exposure.
I was in charge of programming some component modules and to implement database connectivity into all modules, ensuring that we can add/remove/update values and configuration easily.
It's halfway down the road and this product is going to be an exciting one.