Rss

Gaff and Gleam

New post within a month!

Lately I’ve been having a lot of fun doing some cross-platform development. I’ve got two libraries I’ve been working on. Gaff, which is my general purpose, stick whatever I feel like in it, library thing. It encompasses a lot of stuff, such as timers, personal implementations of standard data structures (i.e. vector, list), and other useful things that I make C++ wrappers for.

Gleam is the other library I’ve been developing. When I was on Project Mercury, I spent probably a good 4-6 months working with WebGL. While DigiPen does have a lot of graphics courses, I’ve never actually had the privilege to actually build a graphics engine from scratch and integrate everything myself. It was either barebones rush job for a project cause no one was a graphics expert (and we didn’t have the time to learn), or I was using an already pre-existing engine. So, Project Mercury and the Wildman tools I was building was me just fiddling around and seeing how everything worked and building myself a solid understanding of the fundamentals of computer graphics. So, with my piqued interest, I decided to learn me some Direct3D 11 and make a graphics engine. Originally it was just going to be a Direct3D 11 only renderer, but then I caught something while reminiscing about the Project Mercury days and decided to go full bore cross-platform, OpenGL 4.3 and Direct3D 11. Of course, along the way I also basically had to implement my own version of SDL from scratch, which is proving to be a lot of fun. I was extremely excited when I got a window popping up in Windows and Linux without any modifications to client-side code.

Anyhow, that’s what I’ve been working on lately. Gleam is nowhere near ready for actual use yet (I don’t even have anything drawing on the screen yet. Still getting the Window class to work exactly the same under Windows and Linux), but I’ve been going a while without a post and I needed some content to talk about. Until next time!

AFTER POST STORY TIME:
Talking about Project Mercury brought some memories back. So, the Wildman tools were not the only thing I built in WebGL. In fact, I had an entire demo application I was using to build my WebGL graphics engine. I had lighting, shadow maps, frustrum culling, object picking via querying a bounding volume hierarchy, and animated models! I was able to import models made in Milkshape (it was the only open file format I could find at the time) and they were completely animated. I even had a feature where you could pause the animation and turn on joint editing mode and you could modify the skeleton of the rig in real-time. I even had a system where you could capture key frames in-engine and play them back as a new animation, all without using external tools or anything. This probably doesn’t sound very impressive, but as my first serious attempt at computer graphics, I was very pleased with the results I achieved. Not to mention I also had a ton of fun!

So, by the time I was moved over to Wildman and started working on the tools, I had already done a ton of work on my WebGL graphics engine (which I made as a library that could be used in other Project Mercury applications). I think I had been working on the Wildman mod tools for about a month (or close to) and had everything you see in that video up and running minus the 3D preview window. Then the week before we shot all the footage for the video for Project Mercury, I was asked to make a 3D renderer for the mod tools. Normally I would give myself more than a week to add something like that, so I was understandably concerned at first. However, I did make the time frame with some time to spare! It took me two days to get a Wildman model imported and rendering and properly integrated with the rest of the Wildman tool suite. After that I think it was just another two days to construct the visual representation from the level data I was generating and add some lighting.

While I was implementing the lighting for the Wildman tools, I realized that my way of handling lighting was kind of expensive and not very flexible. That’s basically another way of saying, I had implemented a forward renderer. So I started working on a deferred renderer, which I never finished due to Wildman getting canceled. While I had most of a deferred renderer up and running, it was impractical for WebGL. Why? Because, in WebGL, you can only bind one color texture per framebuffer! This means, in order to get all the information I need for a deferred renderer, I’d have to render everything as many times as I have information I need generated. So, if I want the base color, position, and light contributions, I’d have to render everything in my viewport three times! Not the most efficient way of doing that. Direct3D and OpenGL allow you to bind more than one texture to a framebuffer, allowing you to render the scene once, but output different information into each texture all in one shot. I think multiple color attachments is part of OpenGL ES 3.0 (WebGL is basically a JavaScript implementation of the OpenGL ES 2.0 specification), and the next version of WebGL is targeting that spec. Or at least I think it is. I can’t remember where I might have read that.

Anyhow, my post-post stroll down memory lane is done! I hope you liked my mini-post mortem of Project Mercury/Wildman! Project Mercury was a really cool project that I was proud to be a part of. I’m a bit sad to see it go. :’(

Network Programming is Hard

I just finished up the Advanced Networking class at DigiPen, and I just gotta say it. Network programming is hard! It’s easy to screw up, and even implementing simple features cleanly and robustly can be challenging. Take enet as an example. If you read through their feature list, it looks like pretty standard fair for a networking engine. My team and I more or less implemented this in our class. It fell quite short of enet. Actually, it fell considerably short.

What I’m trying to say is, I have gained profound respect for the people who do network programming and data center management. There’s a lot of cool things that can be done with networking, such as network break points, and network programming has a lot of untapped potential (or at least if feels that way).

I know I didn’t have much to say in this post, but some update is better than no update! And don’t forget to give those networking gurus their props!

Getting Lost in the Haze

There’s this KickStarter link that I saw on Twitter … or Google+, I can’t remember which one. And it came up again on one of my co-worker’s monitors earlier today. This KickStarter got me thinking a little bit. Ignoring the whole “girl power” aspect. I don’t get “girl power” when it is applied to intellectual fields. I don’t see how gender is a hindrance to the use of your brain, but whatever.

Back to the point. There’s a couple things that this KickStarter made me think about. First is that it’s cool to get kids into game development. Before you start declaring heresy on me, hear me out. If the end goal of all this was to become a programmer, I probably wouldn’t be so fluffy and nice about it. Using RPG Maker is definitely not going to be very helpful in going down the programming path. However, I don’t see any problem if your goal is to be a designer. Designers use tools like this all the time, whether it’s Unity, Unreal Engine, Unigine, or tools for an engine that you rolled out in-house. The real issue is whether they continue to improve themselves afterwards, instead of just being a one time thing. If RPG Maker is capable of making a gaming experience and is accessible enough for a child to use it, that’s all good things. Similar to how drawing has a low barrier of entry. Pencil and paper and you’re good to go! I find no wrong in having a low barrier of entry platform for children to make games on. It may not be fully featured and do all the fancy stuff we tech heads like to ogle at, but for a kid, it’s good enough. Most definitely the first game they make isn’t going to be very good, but that’s not the point. What if there’s a second? Or a third? And they progressively get better? And if the tool is easy enough to use (like drawing) that kids can just get into and have fun, then I’m fine with that. There’s a lot of value to be said about having fun. If I have fun doing something, I’m way more likely to go back and try it again. Human being are creatures of repetition, children even more so. How many times have you seen a child watch the same movie or favorite episode of their favorite TV show over and over and over and over and over again? I believe that if we make tools that enable kids to make games AND have fun at the same time, we’ll have a winning combination for the prospective designers for the next generation of developers.

All of the above thoughts also got me thinking about how, as developers, sometimes we can lose sight of the goal. I know I sometimes get caught up in the tech and think things like, “Alright, gotta get that animation blending system in and it’s gonna be awesome!” I’m sure other developers get caught up like that too. We get caught up in all the new flashy things that we forget about just making a good game. I’m a firm believer in limitations bringing out creativity. I mean, come on, just look at the Super Nintendo era of games. By today’s standards, that machine is a piece of junk, yet it still captured our imaginations as kids (or teenager if you’re a bit older). I sometimes wonder if we’d create games with better narrative and gameplay if we applied more technological restrictions to ourselves (you know, less time building shiny tech that doesn’t necessarily contribute to gameplay or experience). Somewhere deep down, I want the 8-/16-bit era to make a comback with projects like the Uzebox, but that’s realistically never going to happen.

Anyhow, this post is kind of random and my thoughts are kind of jumbled up, but I think somewhere in there there’s some coherency that makes sense. Until next time!

EDIT: Haha, wow, that KickStarter certainly turned into something else. Regardless, that has no impact on the points I was making.

Bjarne Stroustrup’s GoingNative 2012 Keynote

I just watched Bjarne Stroustrup’s keynote from GoingNative that happened in February of last year. He had a lot of great insight on how to write better code that is easier to read, less error prone, and faster! Now, I still have concerns about the STL. It’s great to see a lot of potentially more portable code being made available via the STL, especially if you look at the concurrency domain. However, the STL is pretty well known to be slower than if you implemented it yourself. In my personal implementation of std::vector, I get a 300% speed increase on my push_back() calls (although I just call it push()). Now, I’m sure the STL version has a hell of a lot more going on than my version, considering how pretty much every STL container shares similar interfaces, iterators all share the same interface, and I’m sure there’s more edge cases and specific scenario’s the STL potentially worries about. There’s also the question everyone needs to ask themselves, do you need that speed increase? Is the STL really the part of your application that slows you down enough that you need to be concerned? I’m sure in most cases it’s not. Hell, even in my case, it probably isn’t, but it is a lot of fun implementing a lot of these data structures. Not to mention that my implementation, while probably not as robust, is a hell of a lot easier to read and compiles a lot faster.

Anyhow, not much content on this post, but I figured I’d share something that I thought was interesting.

EDIT: I guess it would also be worthwhile to mention that my implementations aren’t thread safe, while I believe the STL data structures in C++11 are thread safe, which is probably where a lot of the overhead is coming from.

The Moral of the Story

For my first content update since the blog came back online, I figured I’d share a personal story that has helped shape my future.

DigiPen has what they call Company Days, where guests who work in the video game industry visit our school and give a lecture on any topic they feel is relevant. Sometime around late October or early November of 2011, Chris Taylor came and gave a talk. I was a bit surprised as I walked into the room. Was that who I thought it was? I never thought anyone who’s name had some public meaning would actually be visiting our school. This was also, coincidentally, roughly around the same time I watched the first Matt Chat interview with Chris Taylor, so him and his company were fresh in my mind.

Anyone who has heard Chris talk will know that he’s more of a motivational speaker. Or at least he likes to give motivational speeches. A lot of guest speakers that come to DigiPen give talks about some technology aspect of their job or interests, so Chris’ talk was a bit of fresh air. Normally I’m a pretty introverted person, but something came over me that day. First thing Chris noticed when everyone settled in the room, is that no one, and I mean NO ONE, was sitting in the front row. It was totally empty. He commented on that and asked “What, no one wants to sit in the front row?” I sat there for a moment and was like, “Ah, screw it.” Grabbed a pencil and notepad and hopped a railing and grabbed a front row seat directly in front of him. Of the 150+ students in the room, I was one of two people to even bother to get up. While that wasn’t much, it was enough to stick in his mind. He even thanked me afterwards.

During his talk, I took notes and tried to formulate as many questions I could think of, given what he said and what I knew about him and his company. Now, I wasn’t the only person to approach him afterwards, but everyone else just did the obligatory “Thanks for talking at our school!” and “That was the most entertaining talk anyone has ever given here!” While the latter most definitely was true, everyone was pretty much saying that and only that to him. After the crowd had dispersed, I walked up to him, said “Hi”, and started asking questions. Well, I only asked him one question. I had overheard him talking to one of the coordinators that he had to get home because his family was expecting him for dinner. My one question was, “Hey, I know you have to go, but I had some questions I wanted to ask you and I was wondering if there was a way I could get in contact with you later so I could ask them.” Chris gave it a moment of thought and gave me his e-mail.

My mind was pretty much blown the rest of the day. This is just about the biggest thing that had ever happened to me in my life. So, after exchanging a few e-mails, he decided we should have lunch together. However, there was a decision I had to make. My parents were ecstatic, but they only had one thing on their mind. “Job, job, job.” Granted, I can’t blame them, hell, even I was worried about getting a job after school. I didn’t really want to look pretentious, so I didn’t pressure him about getting a job. In fact, we never brought it up. At lunch we pretty much just talked and had fun. I didn’t even really ask any of my questions that I had prepared!

Now, for people that know me, I am a sweatpants guy. Yup. Forget all that style and crap, give me comfort! I was in sweatpants when he gave his talk at my school and I was in sweatpants when we went to lunch. The horror! I think my mom was crying inside for a while. She wanted me to dress up “in my Sunday best”. But I figured that would be a little misleading, cause that’s not me. I’m a sweatpants toting, t-shirt wearing kind of guy any other day of the week. Not to mention I also got this vibe from Chris that he was kind of the same way (he wears jeans and a t-shirt though, a bit more presentable) and that he didn’t care much for dress.

Anyhow, lunch was fun and went great. He invited me to the company a week or so later and I got to meet a lot of the employees there and we talked more, had fun, and he showed me Project Mercury. Yes, that’s me in the video and yes, I realize now that I speak way too softly. After a second visit to the company and a bit of talking later, I landed an internship. After 3 months as an intern on Project Mercury, I was a hired employee at Gas Powered Games (now owned by Wargaming.net), where I have been happily employed for over a year now.

So, what are the lessons to take away from all this?

1) Talk to that person! People love to talk about themselves, and nothing is going to happen if you don’t say anything. Even if the only thing that comes out of it is a contact, that is a valuable contact and they may know people! (Hint, they do know people)

2) Be honest. While I can’t say how much being honest has “helped” me per se, it’s better than being a suck up and I think people will like you better for it.

3) While not stated in the story, do side projects in your spare time (aka show your passion)! Nothing shows passion more than spending your free time practicing your profession. Chris did ask me to send him code samples and I had been working on a game engine in my spare time. While Chad Queen (VP of Engineering at GPG) did briefly go over my code, the fact that I had the passion to do programming outside of school said a lot to them. You can grind your way through school and get your degree, but that doesn’t necessarily develop your skills enough. I know my skills definitely would have been inadequate if I didn’t program in my spare time. Every person I’ve ever talked to agrees that side projects done in your free time are nothing but a benefit to you. You learn a lot doing on your own projects and it conveys your love for your craft (whatever that may be).

I feel like this is advice that is given a lot, but I figured I’d add my testimonial to the list. Hope you all enjoyed my story and feel free to share your own!

Blog is Back! For Good This Time!

The blog is finally back up, after being in limbo for a long time. I’m going to avoid going into the … odd details, but the blog is no longer self hosted. I figured it’s easier to pay a small fee to have a more reliable service host it for me. Anyhow, I hope to update this with much more interesting things, now that I’m almost out of school and will be having free time!

What Does It Mean To Be An Independent Developer?

There has been a bit of rise in the popularity of indie developers recently. While the indie scene has produced a few nice things, there is this large feeling of a “stick it to ‘the man’” type mentality; the man being large developers/publishers. I definitely don’t agree with this mentality, but some feel more strongly about it than I do. I personally prefer the term independent developers to the shortened “indie” developers. It’s clearer and more concise about what it actually means.

The more I read about “indie” developers, the more I get the feeling that even they don’t really know what it means – and I feel that this article shows that. I think that this is mostly due to the huge emphasis on being “creative” and “artsy”. The mentality is synonymous (in my opinion) to how people view paintings and sculptures; sometimes there’s no explicit meaning, but we can draw from it our own conclusion. Coming from a computer science background, this sounds kind of ass backwards.

To me, the point of being an independent developer is to be, well, independent. You’re not owned by anyone but yourself and are free to experiment (if you so please) and do what you want, whether those be good decisions or incredibly terrible ones. The article goes on from the interviewees saying things like, you’re not “indie” if you are old, make too much money, or have too many employees. I find it really funny that the interviewer asks whether they think id Software was “indie” before they were purchased and they basically say maybe. Then the next question they ask “What about a studio that makes more than $10-million?” and they say they’re not “indie”. There’s an iPhone question where they bounce back and forth, but you get the idea.

Long story short, are you (or company in question) owned by someone other than yourself? If so, you are not an independent developer. That should be apparently obvious and it really is that simple. Whether you make an incredibly artistic game that makes everyone go “Ooh pretty” is another story.

That said, id Software was an independent developer until last year. It just so happens they’ve been doing what you do and doing it a hell of a lot better for 19 years! That was back when there was a LOT less money in making video games compared to today. If you want to bring the “in the spirit” excuse into play, then id Software is by far the definition of “being ‘indie’”. Hell, I’d go as far to say they are like the founding father’s of “being ‘indie’”. Some people might be thinking “Oh no! id sold out!”, but let me assure you, id Software (and John Carmack) are not stupid (somewhere in the 2009 keynote he talks about Zenimax). Being acquired by a publisher is not necessarily a bad thing. In fact, even the big daddies aren’t totally stupid. EA has some great products that they’ve published. Just look at Dice’s Mirror’s Edge and EA Redwood’s Dead Space, both amazing games and, in my opinion, exactly the kind of game that “indie” developers would want to make. In fact, id Software proves that you can make those kinds of games as an independent developer. You’ll need a larger team than the average “indie” team, but it is very doable. Problem is, who starts out with that kind of money? Usually it’s people who’ve been in the industry for a while or made a good enough living elsewhere. I can also imagine publishers shooting down a lot of good ideas because of really bad pitches. Let’s face it, if you were given a terrible pitch, would you want to put money into it?

Anyhow, I think I’ve really explained what I believe is the definition of being an independent developer. I had more to add to this post, but I just realized that it is a bit of a separate topic.

Spider-Man Noir and Kick-Ass

During my relax time over Summer break, I’ve gotten myself into reading some comics. I know I’m starting a bit late in my life, but hey, I’ve got a number of years left to see what the comic book world throws at me.

Anyhow, I’ve picked up three comic book volumes: Spider-Man Noir, Spider-Man Noir: Eyes Without A Face, and Kick-Ass. For an intro into comics, this was definitely a good start and I HIGHLY recommend all three of these volumes.

I’ll start with Spider-Man Noir. Holy freakin’ crap is it amazing. The 1930s is an excellent setting and allows for some nice costumes. One very noteworthy difference from the other Spider-Man “universes” (more on that in a bit) is that Spider-Man adorns a revolver and he’s not afraid to use it when necessary. To some that might cause alarm, but don’t worry, he’s not all bullet crazy mopping down every villain he sees. For the most part, he uses firearms as scare tactics or in last resort situations. While there are super powers and mutants in the Noir universe, they are used much more sparingly as they tend to keep themselves away from the public eye. Also, not every villain is the result of some form of mutation – and are just nicknames to specific traits that the particular villain or hero possesses.

I know the next Spider-Man movie is going to be a reboot, but seriously, how many different ways can you reboot a series without straying some distance from the source material? While I love Spider-Man and would prefer a closer to the original adaptation of it, I really, REALLY would LOVE to see a Spider-Man Noir adaptation. It has the potential to become fantastic and not just be another offshoot or reboot. Speaking of things I’d love to see, the new Spider-Man game. Noir is one of the dimensions you play in the game, but if you give me the entire game in the Noir universe, I’d be ecstatic (although Spider-Man 2099 is pretty awesome too). Anyhow, to summarize, I love Spider-Man Noir’s style (to be honest, I just love the 30s attire) and it’s gritty and more down-to-earth. I went to Noir straight from reading most of Ultimate Spider-Man – which I gotta say started out good, but got ridiculous real fast (teenage mutant drama anyone?) – and it’s a much more appreciated adaptation of the series.

The original Kick-Ass (by which I just mean the comic over the movie) is much more realistic. When I say realistic, I basically mean we don’t have the stereotypical girl next door turned girlfriend because I just so happen to be a costumed vigilante. Not to say that the way Kick-Ass’ love interest isn’t stereotypical in the comic, but let’s be honest (for those that have read it), the comic’s version of the Katie Deauxma is much more likely. Another interesting thing I’ve noted is the difference in events. While all the main events are shared between the comic and the film, a good portion of them happen for different reasons. I highly enjoyed both the comic and the film and would definitely recommend both of them. And a word to Roger Ebert: Lighten up a little. You took the movie a little to seriously.
To Wikipedia Morons: A synopsis is a brief summary, not a fucking novelized version of the ENTIRE DAMN STORY.

As I stated above, I’m going to talk about the Marvel and DC trend of having “universes” of their series. In short, every reboot and spin-off of a comic series they do, it effectively becomes an alternate universe in the Marvel/DC Universes (Seriously, we can’t call it the Marvel/DC Universe anymore now can we?). Anyhow, I simply ask, please stop. I’m fine with reboots, re-writes, spin-offs, whatever. Just stop integrating it all together. Leave it separate and standalone. All this bullshit of the universes somehow meeting each other and bullshit like that, it’s terrible writing that produces even more terrible writing. If you didn’t have the artists, the comics you produced with those storylines wouldn’t be worth the paper they were printed on. In my opinion, Marvel is the biggest offender in this category. If you want an example of what I’m talking about, read some of Marvel Zombies and you’ll see what I’m talking about (stupid multiverse crap).

To summarize, Spider-Man Noir is fantastic and I highly recommend picking up both volumes (reasonably priced at $14 each on Amazon [links in second paragraph]). Kick-Ass is also pretty good.

Star Wars RPG: Trouble on Kashyyyk

A year back my brother and a small group of friend went out and bought some Star Wars RPG books. We had a few sessions and enjoyed it greatly. Unfortunately real life got in the way and we haven’t played in a while. This is an attempt at reviving our play times and sharing some of what I’ve written with people. Aside from here I also usually post my adventures on the official Star Wars RPG forums.

This is the first adventure I wrote entitle Trouble on Kashyyyk. Taken directly from the summary written in the DOC and PDF files.

Synopsis:
A Republic cargo ship has crash landed on Kashyyyk. The party has been sent in to find the crash site and retrieve a container that Republic scientists claim holds a “precious specimen”. The scientists claim that this specimen is important to furthering military research.

This adventure was designed for level 4-6 heroes. The group I played this with were a party of three. As with everything I write, I encourage comments and criticism. If someone actually runs this with their group, I’d like to hear about it and anything they might have changed to improve the experience.

Downloads:
Trouble on Kashyyyk.doc
Trouble on Kashyyyk.pdf
Cargo Ship Layout.png

Winter Break Is Upon Us

It’s that time of year again. Finals are over and Christmas is coming up fast. It’s great having lots of free time again. I’ve been thinking of what to write for the next BFP article. Personally, I want to write about No One Lives Forever: The Operative and No One Lives Forever 2: A Spy in H.A.R.M.’s Way. Both made by my favorite developer, Monolith.

I have played through NOLF2 a few years ago and am currently playing through NOLF1. Both of these games are great and deserved much more attention than they received. Hopefully I’ll come up with something soon and post a good series review. On a side note, I have also played through Contract J.A.C.K., but it’s essentially a bit of a watered down version of NOLF1 with better graphics, so I will not be reviewing it. It’s still a passable game that fans of the series probably won’t mind playing, but it’s nothing spectacular.

I have reviewed one of Monolith’s previous works, titled Shogo: Mobile Armor Division, which is attainable through GOG.com. Click here to read the review.
Until next time.