We will be working on an aunt’s project for the next week. Because of this, there might not be many game development updates for the next few days.
“Areum” is not as Unique as we Hoped
One of the biggest changes to Areum recently has been a new name.
Choosing a name for a game is always a difficult process, and this one took us a couple of weeks. I consider us fortunate that it didn’t take longer!
First off, let me explain the reason why we renamed the 2D MMORPG project. I want to make it clear that everyone on the team loved the name. Unfortunately, it came to my attention that “Areum” is the name of a South Korean idol singer. This might not have been too bad, but when I searched both Twitter and Google, the results were flooded with information about her.
Why Change Names?
Having your brand obscured by another brand of the same name is never a good thing for a business. For one, it makes it difficult to find information about your brand. If your own pages are as deeply buried as they were for us with the name “Areum”, people are likely to just give up looking.
Another issue you run into is that your brand name has very likely already been taken on various social media websites. This was certainly the case for Areum, I am sad to say.
A related “problem” is that people who are looking for the other brand may find yours instead. From a publicity standpoint this might not be so bad: Free advertising, right? But it just increases confusion, and there is no guarantee that people will be interested in both brands.
Choosing a new Name
So, on to choosing a new name. The three of us drew up lists and lists of potential names, circling the ones we liked the best. But this was only part of the process: For every potential name, I had to check if it was already taken by another game. I also had to make sure that it was it would show up in search results.
But that wasn’t all: I also had to make sure that the name did not translate into anything offensive in another language. On that note, I also had to make sure that the name did not translate into another brand.
All of these checks needed to be “fuzzy”, which just made things more complicated. In other words, I needed to make sure that I checked variations of the name and possible misspellings. I also had to check words which were phonetically similar.
That last one actually saved us at the last minute more than once! There were several occasions where we thought we had found a good name. However, we then discovered that it sounded like another word with an unfortunate meaning.
Settling on the name Volund
After two weeks of this, we were no closer to finding a new name for Areum then when we started. That’s when someone on the team, I forget who, suggested using the name “Volund”.
For those of you who are just joining our community, I need to explain some history real quick. IfThen Software created an MMORPG named “Volund Preview 1″ and released it four years ago on April 10th, 2010. After releasing Preview 1, we moved on to other projects. The server was eventually taken down due to limited resources.
A lot of worldbuilding has already been done for the Volund universe, so this would open up a lot of new options. This sealed the deal for us: Volund would be the new name for Areum, the medieval fantasy 2D MMORPG project.
We are all very excited to revisit the Volund universe! There are a lot of cool ideas that we are itching to try out.
Temporary Website Outage
For three hours yesterday the website suddenly went offline. The only sign of life was a very unhelpful message: “500 Internal Server Error”. I’m happy to say that the problem has been fixed! I am writing this post in case anyone else has the same problem.
Twenty Fourteen 1.3 Update
Here at IfThen Software we use one of the default WordPress themes called Twenty Fourteen. It’s nice and simple, and gets the job done. We may upgrade in the future, but so far it’s working well: This is the first time we have had a problem with it.
I should note that I did not update WordPress to version 4.1 before updating the theme: I suspect this may have been part of the problem, but I do not have any proof.
500 Internal Server Error
The particular flavor of the glitch that I encountered was causing a “500 Internal Server Error” error whenever the website was accessed. Individual files unrelated to WordPress could be accessed, but not the main website itself.
This error is caused by a problem encountered by the web server when trying to serve a web page. It is displayed when a more specific error message cannot be provided. Usually Apache httpd will report a more detailed message in the error log. If the problem is a PHP error, there is a special error log for it as well.
Troubleshooting the Error
I tried accessing the website in both Google Chrome and Internet Explorer, just to make sure the problem wasn’t browser related. In hindsight, I should have also tried Firefox, which I will do next time. I also tried accessing the website without cookies, to make sure that it wasn’t a problem with the account system. These simple checks turned up negative, but at least I had a better idea of where the problem might be.
Just to be sure, I also rebooted the web server. This has caught errors in the past, so it was worth trying. Unfortunately, this also turned out negative.
Upon inspection, both the Apache httpd and PHP error logs were empty.
Karyl suggested disabling all plugins, which I did by following the phpMyAdmin section in this article: Two Ways to Manually Disable WordPress Plugins. But like all previous attempts, this did not resolve the 500 internal server error.
Finally, the Solution
Fortunately for my sanity, I suddenly realized that I had a backup of the Twenty Fourteen v1.2 theme. I did not know it at the time, but you can also download version 1.2 from the WordPress website.
Restoring the backup fixed the error, although temporarily. After updating the WordPress core to v4.1, the 1.3 theme update worked perfectly. I hope this article helps someone else with the same problem!
Twitch.tv Gamedev Livestream
I’m doing another gamedev livestream while I work on the grabbing feature for Volund (the 2D MMORPG that my brother, father, and I are developing). I plan on streaming for most of the day, so feel free to drop on by!
The grabbing feature will allow you to grab on to other characters or objects, and potentially move them around. This is important in a 2D MMORPG like Volund because it’s easy to block other players from moving through tight spaces.
I used to have a personal blog where I posted articles about technical issues I was working with at the time. Rather than just let them sit collecting dust, I’ve decided to re-publish some of them here under a special category.
I hope you find them interesting! And without further ado, here is the first:
Originally posted Friday, May 13, 2011 at 10:24pm
I finally have multiple-bone animation working! I think I can summarize the last few days as “Wow, that was a pain”. On the surface, a hierarchical animation system sounds easy: “Just go down the tree and accumulate matrices as you go”, but as is usually the case, the devil is indeed in the details.
I would love to make this blog post a full tutorial on skeletal animation, but unfortunately I still don’t completely understand it myself. I slapped in some foreign code for nasty jobs so that I could just focus on getting the bones to animate and stay attached to the skin. Also because the code was written by accumulating many tests, it could be improved quite a bit.
Here are some of what I will affectionately call “the devil’s details”. Hopefully these will help someone who is learning to write a skeletal animation system. Keep in mind that some of these might only apply to the Milkshape3D model format.
Not all Vertices will be Attached to a Bone
While this might not be the case in most animations, you should make sure that your system won’t explode when this situation is encountered. One of the animations I tested my code on was a brick hurtling towards a brick wall, bouncing off the wall and falling onto the ground. The wall was part of the animation, but was not attached to a bone.
Keyframes are Defined per-Bone, not Globally
Rather than having a list of keyframes which each have a list of the bones that they affect, each bone has a list of keyframes.
Calculating Keyframe Indices; not as Easy as You Might Think
The bones are animated by interpolating between two keyframes, keyframen-1 and keyframen, so you need to figure out which two keyframes the current animation time (abbreviated as t) is in between. You also need to gracefully handle the situation where t can be either before the joint’s first keyframe (keyframef) or after its last keyframe (keyframel).
Currently, my code finds these two keyframes as follows (given that keyframes list is a list of all the joint’s keyframes, and it is not empty):
- Step through keyframes list chronologically until a keyframe is found with a timestamp after t or the end of keyframes list is reached.
- If the end of keyframes list was reached, let keyframen equal keyframel. Otherwise, let keyframen equal the keyframe that was found.
- If keyframen is equal to keyframef, let keyframen-1 equal keyframef. Otherwise, let keyframen-1 equal the first keyframe chronologically before keyframen.
There are two cases where keyframen-1 will equal keyframen: If t is before keyframef, or if t is after keyframel. If keyframen-1 equals keyframen, interpolation is not required.
Keyframe Positions/Orientations are Relative to the Bone’s Original Position/Orientation
This was one of the big ones for me. I did not figure this out until well into development, so I had to basically rewrite the skeletal animation system. This means that in order to transform a point to where it should be for the given keyframe, the point must be in the same coordinate space as the bone.
Convert Orientations from RH to LH, not just Positions!
This was the big one. Because of the previous “detail”, things can become really out of sorts if you get rotation wrong. If a parent joint is in a certain orientation, all movement is going to depend on that orientation being correct. If the orientation is wrong, the vertices attached to the joint will be in the wrong spot. This problem gets worse and worse the further down the hierarchy you go. As far as converting the orientations goes, I’m not entirely sure how it works. What ended up working for me was to invert z-axis positions and z-axis rotations, but I have read elsewhere that only the x and y axis rotations should be inverted when z-axis positions are inverted. I’ll have to do more research into this, but it is working fine for now!
Bone Matrix, what is it?
This had me confused for a while. Basically, the bone matrix needs to transform a vertex in model space (which is attached to the bone) into the coordinate space of the bone (without any animations), apply the keyframe transformation, then transform back into model space.
The website has undergone another rollback, sorry everyone! We are experimenting with different hosting setups.
The database has been reset to combat spam. This unfortunately means that most user accounts have been deleted. Sorry for any inconvenience that this has caused.
Improved Web Server
This morning while tinkering around with the Amazon EC2 instance that we use for our website and game server, I noticed that they had a new instance type available. What shocked me was that it was better… And cheaper!
We have been using their “T1 Micro” instance for a while, which has worked well enough. It has occasionally had its performance issues though. A performance issue this morning is actually what made me ultimately discover the new instance type: “T2 Micro”.
T2 Micro has a better CPU than its T1 cousin, almost twice the amount of RAM, and a better network connection all for a slightly cheaper price! The only downside appears to be that you have to move over to their new “VPC” otherwise you get a rather ambiguous error message. I was stuck on this issue until a blog post on Sam Rueby’s Findings helped me out of it.
Edit: Due to Twitch.tv changes, most of our livestream recordings are no longer available. Sorry for any inconvenience this has caused.
My brother and I spent the rest of the day working out how long different features of the game will take to complete. We also livestreamed the process.
I’ve drastically reduced the scope of the features; they are now estimated in ideal work hours rather than ideal work days. This allows for easier scheduling since more features can be fit into one iteration (one work week), although they are smaller.
When estimating, I’m also listing out all of the tasks that would be needed to complete that feature. Each task is then given an estimate in ideal work hours no less than 1/4 of an hour, and no more than 1 hour. As before, estimates are powers of two, in order to combat increasing uncertainty as estimates become longer.
A feature’s estimate is calculated by adding up the estimates of each of its tasks. This sum is then rounded up to the nearest power of two. If a feature takes longer than 2 hours, there is a good chance that it needs to be split up unto smaller features.
First off, sorry about no project updates over the past couple days! It’s been hectic.
One interesting thing that did happen is that Areum was talked about on a Polish MMORPG news website!
It wasn’t a glowing review, but it’s still super cool that they noticed our project
On the subject of what today’s work looked like, it was something similar to the following:
- 1 – 2 hours managing Twitter
- 9 hours fixing unexpected household problems *facepalm*
Needless to say, not much progress was made on Areum >.< I’ll have to take part of my day off (Saturday) to plan the next iteration, since I have no time left now. I’ll post another project update either tomorrow or Sunday!
Areum finally has a Trello board https://trello.com/b/Zk7QjfjY/areum
Trello is a free online task management program: I highly recommend it to anyone who needs to do planning for a project.
Today I finished estimating the tasks for the first pre-production demo of the game. So tomorrow, I should be able to actually start working on them
Edit: Due to Twitch.tv changes, most of our livestream recordings are no longer available. Sorry for any inconvenience this has caused.