Final Report

A. In the project review document, start by addressing these main questions:

1.  Game concept: How and why did your game concept change from initial concept to what you implemented?

In the very beginning of this class, some of our team members want to design a RTS Three Kingdom background games. However, when we plan in that, we found there are too many problems we cannot solve within only ten weeks. Firstly, a RTS game needs a stable network environment to supply thousands of objects, a large scene and a huge number of  real time computing for muti-player controlling their army to fight together. Furthermore, as we know, a RTS game needs a large numbers of models and animations to identify different arms, weapon and buildings is our first problem to build a RTS game. That’s a lots of works, we cannot finish them in only 10 weeks long. Then we decide to make an easy simple and funny first person shooting game. The reasons are a FPS game can supply more players but it doesn’t give networking too much pressure, and the game scene might not need too large and our artist can have more time to learning how to build 3D modelling and animations(we don’t have any people know how to build a 3D modelling and animations before). In addition, some of our team members like Minion very much and we come up and all agree with the idea “Minion shoot bananas” with a cartoon style FPS game. This is our initial concept when we try to make our first game.

2.  Design: How does your final project design compare to the initial design, and what are the reasons for the differences, if any?

For our initial design, we only have some simple ideas and the theme is “Minion shoot bananas”. We don’t have a specific plan on how to make the game. However, in the final project, we have a whole complete game engine include a smooth network engine, a perfect graph engine, a physics Engine, cartoon style modelings,UIs, funny sounds, and a perfect MD2 modelling with animations. In the graphic part, we use single source light, complete phong shading, shadow mapping and environment mapping. In the Physics part, we have a perfect physics world include all movement, gravity, collision detection for every bounding box. In the game logic design, our artist comes up with a perfect idea for game scene which let Minion fight in desk table in bedroom. Also our game designers use many cartoon style modelling, UIs and sound which match our theme and make the game funny. In addition, in the final design, we have a complete team and score system and our game can support up to 16 players in two teams.  Also, we have a cartoon style weapon and purchase store. The reason why there is a huge difference is that this is our first time designing our own game.  All of our team members have no idea when we start.  As the goal is getting clear,  we come up with more ideas to make the game funny.

3.  Schedule: How does your final schedule compare with your projected schedule, and what are the reasons for the differences, if any? (You should be able to glean this from your status reports.)

Basically, our game design were almost done in the schedule.

In week 3,set up networking and camera with the object.

In the end of week 6, release alphas version.

In the end of week 8, release beta 1.0 version.

week 10, final version.


B. Then address these more general questions:

1.  What software methodology and group mechanics decisions worked out well, and which ones did not? Why?

Answer: Worked together and communicated frequently worked out pretty well. Each group member knew their own job, others’ job, the process of whole group, and the goal of our group, so everybody kept working hard every week. In addition, since everybody was responsible for their work, they don’t need to know other’s code; they only need to know which group member was responsible for that part and contacted with that person to solve problems, which was very efficient. Also, since we finished our base code before week4, we just added new features to it after week4. Therefore, we can easily remove any feature if it breaks the whole program.

2.  Which aspects of the implementation were more difficult than you expected, and which were easier? Why?

Answer:  When we did this project, we found that there were lots of problems which were more difficult than we expected. For example, we could use game engine to load animation very easily. However, without game engine, we spent two to three weeks to load animations and only can load md2 animation without texture finally. In addition, all people in our graphic group learned the concept of particle effect, and we found the library for particle effect, but we spent lots of time but still couldn’t use that library to add particle effect. On the contrary, we expected that we might spend a lot of time to add UI, but Yangshuoshen just used a simple way to do it — banded texture in the near plane of the camera volume, and it looks pretty well. The only thing we did was using Photoshop to draw UI texture, and this is doable for every group member no matter whether he learned graphic or not.

3.  Which aspects of the project are you particularly proud of? Why?

Answer: We are proud of our smooth and interesting game play because when we coupled a relaxed cartoon theme with all kinds of optimization, we just got a nice game run at 60FPS without glitching. Also, our game supports 16 players and wireless connection.

4.  What was the most difficult software problem you faced, and how did you overcome it (if you did)?

Answer: The most difficult problem is how to send a data structure between client and server. We decided to use a scene graph in the server to handle the position and orientation of all objects, and sent this scene graph back to client for culling. However, we found that the scene graph is connected by pointer, but the memory address is different in two computers, so we couldn’t send the whole scene graph back to the client. Finally, we found that what client needs is just the position of each object but not their relationship, so we decided to just send back the position of each object.

5.  If you used an implementation language other than C++, describe the environments, libraries, and tools you used to support development in that language. What issues did you run into when developing in that language? Would you recommend groups use the language in the future? If so, how would you recommend groups best proceed to make it as straightforward as possible to use the language? And what should groups avoid?

Answer: We didn’t use any language other than C++

6.  How many lines of code did you write for your project? (Do not include code you did not write, such as library source.) Use any convenient mechanism for counting, but state how you counted.

We just record the last line line number of each file and sum them together

client:  5648 lines

Server:  2468 lines

7.  In developing the media content for your project, you relied upon a number of tools ranging from the DirectX/OpenGL libraries to modeling software. And you likely did some troubleshooting to make it all work. So that students next year can benefit from what you learned, please detail your tool chain for modeling, exporting, and loading meshes, textures, and animations. Be specific about the tools and versions, any non-obvious steps you had to take to make it work (e.g., exporting from the tool in a specific manner), and any features or operations you specifically had to avoid — in other words, imagine that you were tutoring someone on how to use the toolchain you used to make it all work. Also, for the tools you did use, what is your opinion of them? Would you use them again, or look elsewhere?

Answer:  We used 3ds max for modeling and assimp to load 3D model and texture. To load animation, we found a md2 loader from Google, and here is the link This md2 loader has a very simple interface, which only contains three functions, load, setframe, and draw. Load function is used to load animation, draw function is used to render a specific frame, and setframe is used to set that frame. However, the problem of md2 file format is that it doesn’t contain the normal of each vertex, which means we have to use the normal of the triangle instead. However, this md2 loader doesn’t support texture.  Although we used this md2 loader finally, we also found some other helpful libraries for animation loading  This md2 loader can support texture and Vertex buffer. This tutorial teaches how to load a md5 (skeleton animation) animation by using assimp.

8.  Would you have rather started with a game engine or would you still prefer to work from scratch?

Answer: I rather started with a game engine because of several reasons. First of all, using a modern game engine can be a huge boost when we make the game. For example, we spent weeks to implement a animation structure which can only loads a simple animation, but in game engine, this can be done instantly. Also, using game engine can make the graphics better up to many levels. More importantly, some of us have experiences of using a game engine and we could make our game advance to the next level if we used a game engine(possibly put on the market). However, this is just our case because we had experiences of using game engine before the quarter started. If a group does not have any experience with game engine. i would suggest them to work from scratch because they would learn more basic without game engine.

9.  For those who used a networking library (e.g., RakNet or Boost) or physics library (e.g., Bullet), would you use it again if you were starting over knowing what you know now? Describe any lessons you learned using it (problems that you had to troubleshoot and how you addressed them) for future groups who may use it. If you did not use a library, judging from the experiences of the groups that did, would you have used it in retrospect?

Answer: We used Bullet for our physics system. I would use it again if I were starting over knowing what I know now. Because using a library can be time efficient when making a large scene. For example, we made about more than 100 bounding boxes using 3d Max and we load them all at once using bullet. Without Bullet, I would have to calculate them by hand which could be a nightmare when building such a large scene. The down side of using it is that you need to compile this library first which can be really tedious.

10.  What lessons about group dynamics did you learn about working in such a large group over an extended period of time on a challenging project?

Answer: Cooperate and compromise are the keys when working in a large group.

11.  Looking back over the past 10 weeks, how would you do things differently, and what would you do again in the same situation?


What we would do differently:

  1. Design our networking code more flexible.  In our code, all packets have the same size. However, it waste a lot of space since what client need to know about bullet is much less than what client need to know about character, but their packets have the same size.
  2. Write code more OO. We found that some features were hard to add since some part of our program was hard coded. For example, we tried to let the character drop or pick weapon in our game, but we found that weapons were just a member of character class, we can not have a weapon without an owner.
  3. Spend less time on animation. We spent a lot time on drawing animation and loading animation. However, it was hard to see the animation in our game in the final demo.  Whether loading animation is depend on what kind of game implemented and what kind of model used.

What we would do again:

  1. start early
  2. make the graphic part and networking part work and combine these two part early
  3. separate the client code and server code early
  4. Build the project step by step.

12.  Which courses at UCSD do you think best prepared you for CSE 125?

Answer: CSE167 (graphics), CSE169 (animation), CSE165 (Game Engine, Physics library), CSE123 (Computer Networks), CSE110 (Software Engineering), CSE15L(Software Tools and Techniques Laboratory)

13.  What was the most important thing that you learned in the class?

Answer: Rome wasn’t built in a day, and so wasn’t our project.  We have learned a great deal in this course.  The most important thing we have learned is to work efficiently in a large group.  We know we can count on the people who work on a certain part of our projects. We also learn how to find resources from internet and use real-word  tools instead of doing everything from scratch.

14.  Please post four final screenshots of your game on your group pages for posterity. I will also display them on the group web page.

1 2 3 4 5 6 7 8 9 10


C. Finally, if you wish, I would appreciate any feedback on the course (entirely optional):

1.  What books did you find helpful that were not on the recommended list but should be? What books were on the recommended list but were not useful and should be removed?

Answer: We found a website is very helpful for opengl, and here is the link:

2.  I will be teaching this course next Spring. What advice/tips/suggestions would you give students who will take the course next year?


  1. start early
  2. A good artist can improve the game a lot
  3. Make sure that there is no problem in networking at first since it will be very painful if you find networking problem after you add a lot of features
  4. Focus on the basic functionalities in the first several weeks and then keep adding features to it.
  5. A lot of things will be added to the game in the last two weeks, and these features make a huge difference.
  6. Don’t ignore any small bug or warning since these small bugs or warning may cause a big problem finally.
  7. Hard-coded can let you see the result quickly, but it will make your code hard to change in the last week.
  8. A good architecture is very helpful.
  9. Animation is very cool, but drawing animation and loading animation are hard, and the result may not be as good as you expect.

3.  How can the course be improved for next year?

Answer:  It might be a good idea that let every groups see the final reports of previous year so that they may not spend too much time on search tutorial online. However, how to find resource from internet is also a very important course we learned from this course.

4.  Any other comments or feedback?

Answer: The most amazing CSE course in UCSD! We learned a lot from this course, and we realized how important the knowledge some previous courses taught(CSE110, CSE15L).