2.5D Dungeon Exploration in WebGL


About two months ago I created this little WebGL game (and a smaller version here) for a graphics course at school. The code can be found here on GitHub and the documentation here.

The course was mostly OpenGL, and I figured I should try making a project in WebGL, since it’s similar but more easily accessible (i.e., anyone with a capable web browser can play it). Decided it’d be cool to try a 2.5D game, and while brainstorming ideas, stumbled upon Bitworld, which seemed like the kind of environment I wanted to try making. So after looking up a bunch of tutorials on WebGL, javascript libraries, lighting methods, and billboarding, I came up with this.

Advertisement

Tumblr Sidebar Sideblog Expander

This was a while ago (I really do need to update this site more often, whoops), but back in early September, Tumblr decided to change its layout. Sideblogs, which used to be clickable links at the top of the page, are now on a right sidebar, and what’s annoying is that you have to click twice to get to a sideblog, whereas before it only took one click. Might just be a minor issue, but it kinda bothered me.

I figured that since I know a decent amount of javascript by now, I’d write a greasemonkey script to automatically expand the sideblog list on the right. So on September 8th I decided to give it a shot: here it is (or here). It will probably stop working when Tumblr changes its layout again though.

Update: Doesn’t work so well anymore.

Generate

Made this thing about two weeks ago while I was learning about SVGs and SVG animations, and haven’t actually posted about it on here. Type in a name, and the site will “randomly” generate a character from several different parts (i.e. hair, shirt, pants, etc) and have a different color for each part type. Well when I say “randomly”, I mean it’ll use the name as half of the seed to the pseudo-random number generator. The other half of the seed is the current date, which makes it so that the character changes every day.

So how does this work? SVGs are essentially XML files where each tag specifies a shape or group of shapes, and the tag attributes control the properties of the shape such as the line thickness and color. Each character part has its own SVG tag, so it’s simply a matter of combining different SVGs and overlapping them.

Colors are chosen randomly within a certain range (light colors), but sometimes a character part shares the same color as another part! For example, there’s a lot of different hair parts, but each of them has to be the same color or it’d look weird. One way to address this is to use CSS and assign a CSS class to each character part, and set a style for that class so they’ll all be the same color. I did this originally but decided I wanted the SVG to work without needing external stylesheets. I assigned each character part a class, and every time a character part was added to the SVG, the php script checks if the class already exists in the SVG. If so, it just reuses the color of the existing part. If not, it assigns a random color based on the seed.

The idea isn’t very complicated, but I thought it was a pretty cool way to learn how to use/generate SVG files on the fly. I also got to reuse the simple random name generator I wrote a long time ago.