From Light

I haven’t posted in a while, in part because I’ve been busy with a lot of things. Maybe I’ll make posts about some of those other things at one point, but right now I just want to talk about From Light.

Logo for the game.

From Light is a game that I have had the pleasure and honor to help develop. It was originally created as a class project by two other students, but when it showed promise they decided to develop it further. Our team has now grown to 10 people, all (save one) students at USC.

The game is a 2D puzzle platformer based on long-exposure photography (holy hell have I said that line a lot). Basically, you can etch out light trails onto film using the stars in the sky, then jump on those trails to navigate the levels.

I mention that I’ve said the above line a lot because the game got accepted into the PAX 10 for PAX 2015, and I went up to Seattle last weekend with 3 other teammates to show the game off at the four-day gaming convention. This, you may have gathered, is completely and mindbogglingly awesome. I get to work on a game that is recognized and validated by real-world people! And truly, the reception of PAX was way more than I ever would have expected. People frickin’ loved the game!

 PAX 10 Logo  Photo of us at the booth.

And at PAX one of the things I heard again and again was that taking a game to completion, to the point where it could be shipped and sold as an actual game (y’know, for money), is an invaluable experience. Not only do you get a sellable game and a fantastic line on your resume, you also get all the experience involved in taking a game from 80% to 100%, and all the non-development business stuff involved in getting your game out to consumers. Needless to say, this convinced me that we should take From Light to completion. Before, I had been hesitant because as students it was unlikely we could put in the time to finish it fully. However, I am now willing to work harder than I have ever worked before to finish this game.

In the meantime, if it strikes your fancy please “like” the game on Facebook, or follow us on Twitter, or just download the game from our website.

Introduction to Programming

Taking an introductory programming course this semester has been an interesting experience. Since I grasp the course material well, I’ve spent some time helping others with their work. As anyone who has taught math can attest, teaching even basic concepts requires you to understand the material far better than the student must. When it comes to programming, helping people is even more difficult because you can’t just tell them how to do it. You need to let them to figure it out on their own, otherwise they won’t have learned anything.

But leading someone along without explicitly telling them anything is really, REALLY difficult. Our professor is a master at this, and I respect him deeply because of it. A student will ask a question, and the professor will reply with an oblique statement that doesn’t seem to address the student’s question at all. Yet soon enough the student says “Oh! I get it!” and goes on their merry way. I try as hard as possible to emulate this method when I help those who are struggling, but it is nigh impossible to strike the correct balance. Help them too much, and they don’t learn. Help them too little, and they despair or begin to resent programming. And as much as I don’t like seeing it happen, many of the people in the class have come to resent programming.

This is as sad as a student resenting literature because of a bad English class experience, or resenting math because of a bad math teacher. Yet I don’t fully understand how to prevent it. If there was a good, standardized methodology for teaching difficult concepts without causing students to resent the field, I feel a lot of the problems in society today could be solved. Maybe that is just wishful thinking, though.

The second interesting observation from taking this class has come from observing a peer. The first language she learned was Python, and learning C++ this semester has caused some distress. There were many lamentations along the lines of “why is the computer so dumb?!” Of course, I found this hilarious because it mirrors a situation in the novel A Fire Upon the Deep. As the protagonists head towards the bottom of the Beyond, much of their advanced computer technology stops working, and they are forced to adopt more primitive methods. Needless to say, the characters who grew up with the advanced technology are indignant that they are forced to use such primitive technologies as a keyboard. Meanwhile, the character who grew up using primitive technology merely smiles.

In my mind, this helps clear up the argument of whether new students to the art of programming should be started on a high-level language, or a low-level language. Until such time as low-level programming is never needed except in rare circumstances, students should be started at a medium-to-low level. For example, it is easier to step up to Python from Java than it is to step down. I was originally of the mind that new students should start at a high-level as to learn common computing concepts without getting bogged down in obtuse technicalities and syntax, but getting a first-hand view of the results of such an approach has changed my mind.

Advanced Game Projects

In the USC Games program (which spans a number of majors and schools), we have annual process that falls under the moniker of Advanced Game Projects, or AGPs. This process involves a student-assembled and student-lead team building a game in a roughly 10 month development cycle. I’m excited that this process exists.

Bloom, an AGP from a previous year.

It starts with a pitch process in the Spring semester, currently consisting of three phases: a paper proposal, submission of a prototype, and finally a live pitch sessions with a board of judges. Games that pass successfully through the pitch process get slated for development the following year. A student lead (who presumably came up with the idea, assembled a small team for the pitch, and is generally the main driver behind the project) begins to recruit a large team and pound out pre-production design over the Summer.

In the Fall, most people on an AGP team register for the associated class, which gives time to meet and talk with mentors from the industry about the management problems that have cropped up. Because working on an AGP is a requirement of my major, there is always a pool of student talent for teams to pick up. This results in AGP teams that can range anywhere from 20 to 40 people. Needless to say, this is a huge undertaking and an incredible responsibility for the team lead.

However, by Demo Day in the Spring, the team will have (hopefully) created a relatively well-polished game, albeit generally small in scope. The games are displayed at Demo Day, and not only do students attend and sample the various AGPs, but industry professionals are present as well. So AGPs are a great opportunity for networking with professionals and finding mentors, as well as landing a big, fat, good-looking game in your portfolio.

I have an ambition to lead an AGP in my sophomore or junior year, but in the mean time I’ve hopped on board with an AGP that plans to pitch later this Spring. Being present from the start of the process and being able to talk with the team lead gives great insight. Even if the AGP doesn’t make it past the pitching process, I’ve learned a lot about do’s and dont’s of assembling and running a team, as well as formulating and developing an idea into a pitchable game.

The idea we are pitching is for a humorous single-player side-scrolling multi-character action-adventure role-playing hack-and-slash, or more basically, Castle Crashers meets Dawn of War 2. Or something.

A screenshot from our latest prototype.

The eternal struggle is a combination of scope and pushing the game in a direction that is likely to pass the pitch process. You see, certain types of games tend to be favored; the faculty making the decision explicitly point this out. Games that focus on pushing the boundaries of technology, implement rare or radical gameplay concepts, are socially progressive, or take risks and target uncommon platforms are generally selected over games that try to put a small spin on a well-worn concept, or aim to execute a tried-and-true concept especially well.

This difficulty is compounded by an ultimate lack of direction with our current concept (at least in my mind). The takeaway is that a game concept should be centralized around a single, appealing idea. Hearing that concept should instantly spark at vivid image in your mind, and should either inspire you to work on the project or play the game. This is why iterating on an existing idea is less appealing. In addition, if you find yourself searching for material to fill out your game with, the core concept probably isn’t strong enough. The feel or driving mechanic (whatever makes your game sound good in the first place) should spawn a myriad of possible directions. Thinking hard about what to cut out of your idea is a good position to be in; thinking hard about what would be a good thing to put in is not.

Maybe this seems counter-intuitive, or vague and unhelpful. Let me give you an example by explaining one of the concepts that I might potentially develop into a pitchable AGP.

I actually described this in a previous post. Basically, the player struggles to keep their third world country afloat, and build up. I like to describe it as Banished crossed with Civilization. The player experience goal is something along the lines of “after struggling to balance a myriad of factors based on real-life, players gain a new appreciation for the difficulties faced by distant and otherwise foreign places.”

As you can see, I would be approaching the game from a social-awareness / global education standpoint. Like KSP teaches players physics, this game would teach players the difficulties of third-world politics. Of course, the game is also a technical and design challenge. Technically, building a simulation with enough fidelity that also performs well would be hard. Creating challenging AI opponents would also be interesting. Design-wise, the game needs a fun yet realistic interplay of economics, politics, and sociology, which is a design direction I doubt many AGPs have pursued. This sort of novelty would be appealing to the pitch process, I imagine.

However, my plans continue to evolve as I watch the process unfold. If all goes according to plan, I’ll pitch next year.

Why The Next 5 Years Are Going To Be Awesome (In Space)

To close out 2014, I’d like to talk about why I’m very excited for the next 5 years in space travel.

Dawn renderingDawn being built

Early next year we’ll get to see two extremely cool missions returning pictures: the Dawn spacecraft, and New Horizons. In April 2015, Dawn will be the first spacecraft to enter orbit around body that isn’t the Earth or the Sun, then exit orbit and enter orbit around another body. We’ll get to see high-res photos of Ceres; expect a lot of articles about old theories being overturned by the data Dawn returns.

New Horizons renderingNew Horizons being built

Second, New Horizons will be performing a fly-by of Pluto in July 2015. This will be our first good look at a trans-Neptunian dwarf planet. Observations could provide a lot of insight of the Kuiper belt, as well as other structures like the (potential) inner Oort cloud. Between Dawn and New Horizons, we’ll be getting our first close-up look at dwarf planets.

Trans-Neptunian dwarf planets

There are other fascinating missions that are either already launched, or on schedule to be launched. ExoMars is a joint mission between the ESA and Roscosmos with the single purpose of searching for bio-signatures (past or present) on Mars. This is exciting because all current NASA missions very pointedly don’t have this scientific objective. The last NASA mission to search for bio-signatures was the Viking landers in the late 1970’s. I’m a little concerned that Russia will have trouble with their end of the mission; after all, the Russians don’t have the best track record when it comes to Mars.

Hayabusa 2 launchHayabusa 2 rendering

Also exciting and potentially more fruitful is Hayabusa 2, launched earlier this fall. Hayabusa 2 is interesting because they plan to shoot an asteroid with a space gun. Leave it to the Japanese to put cannons on their spaceships (technically the Russians did it first, but they didn’t actually shoot at something). After blowing a crater in asteroid 1999 JU3, Hayabusa 2 will float down and take samples from the newly exposed subsurface. The mission will finally return the samples to Earth in December 2020.

A bit closer to home is another interesting mission: the Chinese plan to launch a Moon sample return mission in 2017. The mission architecture is interesting; unlike early sample return missions, the lander will rendezvous in lunar orbit with a return craft. I might be wrong about this, but I think this will be the first automated rendezvous and docking around a body that isn’t Earth. I think it’s great that China is making leaps and bounds in its space program; earlier this year, they launched a test mission for the upcoming sample return mission and took a German payload along for a ride. The more the merrier, I say!

Speaking of which, the competition for the Google lunar X-prize is going to draw to a close in a few years. The deadline was recently extended to the end of 2016, and at least one team already has a flight reserved in 2015. There are only a few teams still seriously in the running, but if even two of them actually get off the ground, the Moon could become a very crowded place indeed.

One of teams at the forefront, Astrobotic, has booked a launch with SpaceX on a Falcon 9. And SpaceX really has come to prominence lately. Expect a lot more out of them in the next few years. For example, in 6 days they are going to attempt to land the first stage of a Falcon 9 on a barge for the first time. Although this has a pretty low chance of working (Musk estimates 50%, so who knows how low it actually is), it is a huge step towards their long-term goal of rapidly reusable rockets. In fact, if they do get a barge landing to succeed, we might even get to see a used stage re-fly as early as 2015!

Rendering of the Dragon V2

And on that front, SpaceX will be finishing up the Dragon V2 by 2016 or 2017. Besides launch abort tests and propulsive landing tests, we will also no doubt be seeing manned commercial launches in a few years. Remember the excitement when SpaceX became the first company to dock a spacecraft with the ISS? The celebration will be ten-fold when SpaceX becomes the first company to put a human in orbit.

But Spacex will also perform the maiden launch of the Falcon Heavy, and facilitate ground-breaking tests for both VASIMIR engines (if funding for that doesn’t run out) and an inflatable habitat on the ISS.

We might even see more action from Bigelow Aerospace. They’ve manifested a number of flights from SpaceX, presumably to start launching components for a commercial space station. Now that cheaper orbital crew transportation is just a few years away, Bigelow is ramping up production again; hundreds of new positions have opened open at Bigelow.

Finally, the wildcard. Will the SLS actually launch, or will it get cancelled before its first flight due to a change of presidency or loss of support in Congress? If it does launch, it will be spectacular. Unfortunately, I pretty much doubt any of the potential missions for the SLS (Europa Clipper, ATLAST, or Uranus orbiter) will get funded, so it is almost guaranteed that the SLS gets shelved even if does fly in 2018. So there’s that to look forward to.

The Falcon Heavy and SLS preparing for launch

Learning a Foreign Language

I have had the benefit of taking Japanese 1 this semester, and it is quite a humbling experience. Learning a language which has no romantic roots — a truly foreign language — lends a certain perspective that learning French or Latin does not.

However, it also seems to me that the teaching method is geared towards a very specific type of learning style. The class starts out by teaching a number of phrases which the students are to memorize, and meanwhile students also begin to learn one of the writing systems. It is not until a few weeks in that students finally learn some grammar (i.e. the thing that actually determines whether or not a communication system is a language), and even then it takes time to learn the exact mechanics behind the memorized phrases.

For instance, we learned how to ask how to say something in Japanese: (english word)wa nihongo de nanto iimasuka. Yet we are not told that nihongo means Japanese language (although it can be inferred), and we certainly aren’t told that ~go is a suffix, applied to the word nihon (Japan), which means the language of. In addition, we aren’t told that nan means what, ~wa is a topic particle (and we certainly aren’t told it’s spelled using は instead of わ, because hell, we don’t even know how to write at that point), or that to is a sort of quotation mark (if we are, it is only in passing and without context).

Insights can only be gleamed by comparing the response: (Japanese word)to iimasu. Now it becomes clear that ~ka is a question particle. So yes, nanto became (word)to, so ~to must be some sort of literal marker suffix. iimasu must be “say”, or thereabouts.

My point is that it is very hard for me to memorize phrases or words with no context. The teaching style is designed to help a certain type of learner. My learning style would benefit greatly from learning a variety of grammar and vocabulary separately, and letting my brain concoct the phrases from their base elements; when I speak, it flows logically, and my mind pronounces one morpheme at a time. Learning whole phrases with no context means I can’t break it down into morphemes, and so production of the sounds comes much harder.

Perhaps this will change after we get past the first few weeks, but I can’t help worrying that this sort of learn-specifics-then-learn-rules teaching style will continue.

Hog Derby: Duels

Back when I was part of the Halo: Custom Edition mapping community, I offered my help to a team called Hog Derby Productions. The team had produced a series of poorly made videos (called Hog Derby) which consisted of the infamous “hog duels”, in which two or more players are driving a warthog but lack a gunner. They run into each other and try to flip the opponent, thus allowing them to be crushed. I ended up befriending the guy behind the series (dariusofwest) but, although I offered my services, never did any work on the actual production. I had joined in at a slow time, when everything was coming apart at the seams after only a few episodes of the reboot, Hog Derby: Duels (which actually had story). After a while, I left the CE community. I kept in contact with the producer, though, who also composed all the music for the show.

Nonetheless, after many false starts involving terrible cameramen, voice actors, and production schedules, the series came back together after dariusofwest joined Machinima. Having just recently released Episode 4 after almost 2 years, HDP has more episodes in (speedy) production. The series has gone from terrible filming, story, and voice acting to an OK show with lots of potential. As I watched darius struggle through the months and the different changes that occured, I have to say that the show would not have survived if it wasn’t for his endless dedication. I must also say that the experience of seeing all the behind-the-scenes mechanics was extremely interesting, as was being able to hear and critique all of darius’s music before it went into the show.

Now it seems that I will soon be working as an editor of one of the episodes (actually a short, rather than a full fledged installment). After 2 years, I’m definitely ready. I’ve always liked video production, from script writing to filming to editing. I haven’t worked on a project in months, and I’m eager to get in the production loop again. To support Hog Derby: Duels, please check out the latest episode (or all of them) and give it a thumbs up!

Episode 4: Part 1

OpenGL and Geometry Generation

Today I was thinking about 3D rendering (in part because of the recent work I’ve been doing with ray tracing). I worked out all the math for drawing a polygon based on a list of vertices and a camera. I was considering coding it up, but then I realized that I was very unfamiliar in working with Windows (because I sure as hell wasn’t going to do this in Java). So I spent the greater portion of the afternoon reading a tutorial on Windows programming and using OpenGL, at which point I abandoned my original. I was just going to finally figure out how to use OpenGL.

I had worked with GLUT before when working on a Parallel Computing lab. However, I only used pixel control in that case; I was rendering subsections of a Mandelbrot set. However, that was easier because all the requisite libraries were already installed in the major lab at school (which has workstations with Gentoo installed). Working at home, I have been confounded. I just can’t get the linker to use all the requisite libraries.

The whole thing that got me thinking about 3D engines was my working on a HL2 level. Often I will import brushwork (pieces of the level) from the game’s campaign levels; it saves time and adds a nice level of detail to the environment. However, I was thinking about common elements such as stairs, doors, windows, and grates. It’s a multi-step process to cut a hole in a brush, unless you use carve (but nobody uses carve because it doesn’t give you control over how the geometry cuts). Doors are tedious to cut out and then line up with the texture. Non-solid stairs are the most painful to make, however. You have to arrange the steps and make sure the sidings match up, and for each new type of turn you have to rework the geometry. The whole idea of hand-making all the geometry in a level is ridiculous. I haven’t seen a single FPS level editor than lets you define procedures for geometry generation.

A screenshot of the Hammer UI

A screenshot of the Hammer UI

I feel like it would be relatively simple to define a generation process for buildings, for example. Each building is spaced a certain distance in from the sidewalk. There are maybe two or three justifications for things like planters and doors. Then windows are spaced evenly apart, with buffer spaces on either side of the building. You could attach balconies or planters on to every windows, awnings above doors, and even outdoor area layouts for cafes. After meticulously defining a couple of building styles, you could almost instantly generate entire blocks. Then come the nested procedures. A street, for example, would have periodic drains and manholes, distributions of building types based on the neighborhood type, and junctions to more streets. Signs, traffic lights, road markings, and crosswalks would all be placed correctly at street corners. Coul-de-sacs could fill up empty space. Interiors could be set as well for buildings. Floor plans could be modular. Rooms with distributions of room types and different layout permutations would combine into floors. A building type could have a sequence of floor types defined, such as bottom level stores and top level apartments. Central structures like stairwells would only need to be made once.

Although the procedural parameter definitions might take a while longer than making regular geometry, it would be a huge time saver. Not only could full geometries be generated, but intricate, custom-designed battle areas could be laid out faster. Common terrain pieces like walls, fortifications, stairs, railings, gates, and hedges could be created with the use of a single spline. Suddenly a task like designing the maps for my strategy game becomes less daunting. The pipeline for map production is shortened. General map layouts can be quickly sketched out and then directly generated. Beta testing would be infinitely easier, as map adjustments could be made in hours, rather than days.

%d bloggers like this: