It has been ages since I have updated this blog, and I realize that my promises to post regularly are unfulfilled. I will not bother making any more promises about the frequency of updates. It may happen regularly, but more likely updates will be sporadic. Hopefully it will be more often than this long gap, though.
I have been busy with many different things in the interim. School has kicked off, but that isn’t exciting except to state that summer has come and gone. With summer’s passing, the time for relaxation has vanished as well. This year, my summer felt especially short, but it was one of the most enjoyable. From June 27th to August 7th I was at Carnegie Mellon University in Pittsburgh, Pennsylvania. I participated in a Pre-College program called the National High School Game Academy. NHSGA was just one subprogram in Pre-College. There were other programs: architecture, art, design, drama, music, and a program in which students chose two college classes and went through them at an accelerated rate.
The National High School Game Academy is a program that focuses heavily on the skills required to make a video game and how to be a member of the video game industry. When a student applies, he or she chooses a focus, either programming or art. The sections of the program are divided into art, design, and programming. Every student takes courses in all of the sections, however depending on what focus you select, you will learn more about either programming or art. Each student has the same design courses.
Students are then split up into beginner, intermediate, and advanced groups based on their skills in their focuses. The placement determines what level of expertise the student will start out at and how far they will progress in the section. There are a skills, tools, and concepts that students are exposed to during the program. I learned about conventional drawing, Photoshop (image editing), 3ds Max (3D modeling), level design, character concept design, story development, Python and Panda3D (a programming language and its corresponding 3D graphics engine extension), and 3D programming.
I learned a lot from the course. I am decent at art for an amateur, so I didn’t learn anything new in the drawing or Photoshop classes, but it gave me an opportunity to practice. I knew nothing of 3ds Max and I came out with a basic understanding of 3D modeling, which is very interesting. I plan to dabble a bit more in Blender, which is open source 3D modeling software. The video game design topics were the least interesting. We never got into very technical discussions of level design, story, art, music, and genre and how they all relate to one another. Instead, the purpose of the design classes were to teach students how to use a game editor. We used the Neverwinter Nights 2 Aurora Toolset. Neverwinter Nights 2 (NWN2) is a roleplaying game, and its toolset is very robust. We learned how to make interior environments, exterior environments, and how to script or code in the engine. While learning how to use a toolset was educational, and I did enjoy it, I would have rather focused more on the technical and theoretical design concepts. It is difficult to strike a balance between pragmatism and theory.
I enjoyed learning about Python and Panda3D the most. Python is a multi-paradigm language. It is used for scripting and full blown applications. Python runs on top of the C language. It compiles at runtime, and this allows the user to code interactively and see results right away. For very large programs, the code is still generally all written and then run, but I am emphasizing this point to demonstrate some of the capabilities of Python. Python can run interactively because it has an interpreter that executes code right as it is entered. The interpreter is written in the C language. Because it runs through the interpreter, Python is slower than C, so in a real develop scenario involving the Panda3D engine (which is compatible with C++ and Python), more intensive parts would be written in C++. Still, knowledge of Python and Panda3D is a valuable skill.
The NHSGA taught us many different things about 3D programming. We learned about how a 3D environment is represented on the 2D computer screen and the basics of the Panda3D engine–the knowledge is applicable to other 3D engines. We wrote a Whack-a-Mole® program, a Bejeweled® program, a submarine program, and a tank program. The first and third projects were introductions to new concepts, and the other projects furthered the exploration of the concept. Whack-a-Mole introduced us to the 3D engine and the 3D environment. Bejeweled forced the students to focus much more heavily on sorting and relationship inspecting algorithms while still allowing experimentation with environment features such as lighting. The submarine game taught me how to move an object in a 3D environment, and the tank game focused on 3D collision.
After four weeks at the program, the teachers finished instructing us and we were assigned two main projects: a quest made in the Neverwinter Nights 2 engine and a game we had to make from scratch. Students were organized into separate teams for each of the programs. The Neverwinter Nights 2 assignment only required a little more knowledge of the editor–instead, it was an opportunity to get really involved with the toolset and to try to make an entertaining game module.
The final game project was much more entertaining. The project was modeled after how the video game industry operates. Teams were set up with artists, programmers, and a producer and the group was given some design specifications to work with. The team had to come up with the rest. My group had to design a much more advanced tank game which utilized the Wii controller and a three-screen display. Contaminants fell from the sky and the user had to travel through the environment to collect ammo and then shoot the contaminants.
The most surprising knowledge I gleaned from the program was about teamwork and leadership. I was a producer for the tank game project. Being a producer involved a lot of management, scheduling, and collaboration. Talking about the importance of learning teamwork always sounds clichéd, but looking back, it was a very important thing to learn. Developing a schedule and making sure that everyone is sticking to the schedule is a very hard thing to do. Unfortunately, we did not have a finished version of the game. All of the fundamental mechanics were implemented separately, but we could not put them together in time. Our game was also not very user friendly. Our team was still proud of what we produced; we were given a complex project and we accomplished a lot with it.
While many would loathe the idea of learning during the summer, I found it to be a great experience. Not only was the educational program entertaining, the people at CMU were fantastic. Being around such enthused and diverse peers is wonderful, as was the temporary freedom we experienced on college campus.
Now I am back in the normal teenage world. I am still programming, but I am not working on 3D games for a while. I need a break from that. School and sports are in full swing, and I am trying to enjoy my last year with my high school companions. If I motivate myself to write more I will probably get into more in depth discussions on what I learned at the NHSGA. Maybe a little article on the basics of 3D games? I’ll try to write sooner rather than later.