Trending Games | Fallout 76 | World of Warcraft | Star Wars: The Old Republic | Lord of the Rings Online

    Facebook Twitter YouTube YouTube.Gaming Discord
Quick Game Jump
Members:3,908,676 Users Online:0

Show Blog

Link to this blogs RSS feed

IfThen Software

Development log for IfThen Software. IfThen Software is a family owned and operated indie game development company.

Author: InvisibleLf

Newsletter #62 - Volund Prankster

Posted by InvisibleLf Friday February 26 2010 at 12:53PM
Login or Register to rate this blog post!


There is no news to report in this issue.

From the Testers
Written by Jay

(Click to enlarge)

A suspicious new banker in town... When did he show up?!

Using an item cloning bug found by Acaceol (and described in Newsletter #60 - "Loradon 3.0" Closed Beta), I started to clone rare items to amass a large sum of cash. Of course, doing this after the preview is released would get you banned (however, it will be fixed by then), but for now it's okay as long as we are testing it. Anyway, after buying and duping more expensive items as I went along, I ended up with 55 Talcite (the equivalent of 5,500 Gold, which is the equivalent of 550,000 Silver). That is... a huge amount of money.

From the Programmer
Written by Invisible

The update system for Volund has been in place for a while. Your client is notified if it needs to install any updates, and which exact patch to download. It then accesses the HTTP server and downloads the patch, which is an executable. Volund then runs the patch and terminates itself so that the patch can update all files. The patcher waits for Volund to close and then starts downloading the updated files from the HTTP server, saving them to the correct locations in the installation.

This works well, but unfortunately it would mean that you can download Volund without being logged into your account. To remedy this, I am creating a file transfer server for the updater (and I will most likely be able to reuse it for future projects as well). The update system will work pretty much the same, except it will now ask for your username and password before patching.

As I usually do, I am experimenting with different (and hopefully better) code designs while creating this file transfer server. One big design issue that I have ran into in the past is object lifetime. At some point in an object's update code, the object may need to be removed for various reasons (client objects need to be disconnected, character objects need to die, projectiles need to collide with something, etc). This causes a problem when later update code is executed on the removed object in the same frame. To solve this, each object has a state. When an object is in a certain state, the object's manager removes it at the end of the frame. If parts of the object must not be accessed when the object is pending removal, the code will need to check for that state and deny access if it is set.

With this new server, I am using atexit() to handle shutdown. Previously, I was using kbhit() to detect a key press, which would then execute the shutdown code. The problem with only using kbhit() to handle shutdown is that your application will not shutdown correctly if the console window is closed or your program is terminated with Ctrl+C or similar methods. Another downside with kbhit() is that if you accidentally press a key while the console window has focus, your application shuts down.

If you are using atexit() and your program is crashing on shutdown, make sure you aren't using the common language runtime. For some reason, the CLR causes atexit() to fail (at least for me) with "the string binding is invalid".

Artist's Easel
Written by GreyKnight

iScribble Sketches #20

(Click to enlarge)

(Click to enlarge)

Community Spotlight

There is no community spotlight in this issue.

Funny Quote of the Week

Background Information: GreyKnight went to sell stuff to the blacksmith, but found that the blacksmith had somehow become cloned. The game glitched when he tried to trade with the clone, causing his client to crash. When he logged back in, the clone was gone. Figuring it was just a bug, he went to the bank... To find that there was somehow a third banker.

Banker: Welcome to the bank!
Banker: Please deposit your gold here!
Message from Test to Banker: Uh... hello?
Test: That is odd...
Roarman: What?
Test: The "Banker" is talking to me
Banker: Welcome to the bank!
Turret: Sentience!
Test: Did you see that?
Turret: o:
Message from Test to Banker: Hello?
Message from Banker to Test: Welcome to the bank!
Test: Banker stole my torch 0.o
JaytheFrozen: That's not nice
Message from Test to Banker: Roarman, is that you?
Message from Banker to Test: Welcome to the bank!

Newsletter #61 - Journey to Find Karth

Posted by InvisibleLf Friday February 19 2010 at 2:34PM
Login or Register to rate this blog post!


There is no news to report this week.

From the Programmer
Written by Invisible

I spent most of the passed week setting up the servers to run as services, the idea being that I wouldn't need to worry about manually starting and stopping them. I managed to get them to run as services, but ran into a snag; I can't guarantee that the MySQL server will still be online when the game server is being shut down. To fix this problem, I will need to restructure the way the database is kept in sync with the server, which I don't have time for right now.

While learning how to run the servers as services, I discovered something which I have been curious about for a while; how to read HRESULTs (error codes from Windows). The 32-bit HRESULT is split into parts. Bits 0-15 store the result code. Bits 16-27 store the facility code, which tells where this result came from. Bit 28 is reserved. Bit 29 is set if this is a customer defined result (set for all non-Microsoft defined results). Bits 30-31 store the type of result, 00=success, 01=informational, 10=warning 11=error. For further information, read winerror.h in the PSDK.

After the services work was finished, I started fixing our Bugzilla installation. For some reason, attachments became corrupt after I reinstalled the dedicated server last week. After discussing the problem with the people in #mozwebtools on, the problem was found; apparently the attachment data became corrupt when I pasted the backup SQL into Query Browser to perform the restore. Restoring again from the original backup using the mysql command-line tool solved the problem. I would like to note that the Mozilla channel I mentioned earlier is one of the friendliest that I have ran into so far. Special thanks to mkanat for taking the time to explain the Bugzilla code to me.

Artist's Easel
Written by GreyKnight

iScribble Sketches #19

(Click to enlarge)

(Click to enlarge)

Community Spotlight

Written by Jay

AbyssalPhoenix, on the forum, created a Volund fan thread. This thread consists of an image that shows a layout similar to the Volund site; however, it shows information about the history of Volund, important information regarding the game, and predicted (by AbyssalPhoenix) release information.

From the Testers
Written by Jay and Acaceol

(Click to enlarge)

An insanely high (and probably glitched) DPS.

The journey began. As a tester, I must find bugs, glitches, and make sure that the game runs as it should; however, there was another thing I had to try to find: Karth. This secretive being was first alluded to in a conversation between Invisible and another tester, but I had to ask myself, "Where and what could Karth be?" There was no simple answer lest InvisibleMan told me the location himself. I decided then and there that I would find this so called "Karth." The map of the town's outskirts is no laughing matter, but I figured that would be the correct place to look. After a little bit of time had come to pass, I found a secret area. I was excited because I thought this had to be the place; however, that thought was soon overturned as the monstrous Blarg chased after, and killed my character. I then decided to check every single spot between every single tree and on every wall (including in town). I even tried to burst a rock in order to open a wall, but that failed. I finally, after a week's worth of ideas and failures, stumbled upon the great Karth whom had something of great value to give.

This week was spent setting up for some serious bug squashing. The server's now going strong, our bug list is being compiled, and our attention should soon be completely on bugs. We've found some bugs for Invis to work on now that he's able to focus on fixing them, and hopefully we'll blaze through these. I'm looking forward to testing these bugs out, especially the item duplication bug.

Funny Quote of the Week

Background information: HAL uses a "." instead of a "/" for commands.

Acaceol: My bank is full
Acaceol: I have seven Dextrous Linen Coifs of Brute Force
Acaceol: Six Weak Linen Gloves of Brute Force
Acaceol: And four Linen Sandals of Rock
Acaceol: :/
InvisibleMan: From duping? :P
Acaceol: ...maaaaybe
HAL_: undefined method `strip' for nil:NilClass

Newsletter #60 - "Loradon 3.0" Closed Beta

Posted by InvisibleLf Sunday February 14 2010 at 1:52AM
Login or Register to rate this blog post!


IfThen Software LLC's project which is code-named "Loradon 3.0" has finally been unveiled as Volund!

Volund Screenshots:

This marks the start of the closed beta for the Volund Preview. Closed beta will last for at least two weeks, at which point we will release the Volund Preview to the public.

We have released the Volund website, which is located at Volund also has a Facebook page located at so be sure to become a fan!

A new article titled "From the Testers" has been added to the newsletter. This article will contain information on what is happening in the Volund Preview closed beta, along with a screenshot taken while testing.

This issue also introduces a new article titled "Funny Quote of the Week" which we will include in the newsletter as quotes become available. These quotes are taken from our community, and could be from our online chat, forums, or the chat from any of our online games.

From the Programmer
Written by Invisible

I can safely say that I am not interested in working on another web site for a while. We had already created a site for Volund about 2 years ago, but it wasn't finished and needed to be redesigned. It was fun, but this isn't my main line of work and I will be happy to return to the comfort of MSVC++ and my engine.

Firefox seems to change the brightness of images automatically, which was making both of our recent websites look a little strange. If you go to about:config and set gfx.color_management.mode to 0, the problem should go away.

Unfortunately, I could not get the registration system to refill the form after returning to it from the EULA page. I tried various things, such as setting up a hidden form on the EULA page and turning the back button into a submit button, but there was always something crucial wrong with my plan. I suppose this comes from not working in the field very often, which means my bag-o-tricks is somewhat small.

I am rather proud of the way the screenshot viewer turned out. It was one of our last minute decisions, but really enhanced the website. You are shown the screenshot description at the bottom, and you are given previous and next screenshot buttons which allow you to easily scan through all of them. The page will also automatically scroll down to show as much of the screenshot as possible.

If you are getting error 500 from your web server after making a change to your htaccess file, make sure that it is using consistent line endings. I spent 15 minutes trying to figure out why a perfectly legal change to the htaccess file was bugging the web server, and finally got it to work after telling Notepad++ to convert the file to UNIX format.

Artist's Easel
Written by GreyKnight

iScribble Sketches #18

(Click to enlarge)

(Click to enlarge)

Community Spotlight
Written by InvaderKED

"Loradon 3.0"'s real name has been revealed! After about a year, the staff found and decided on giving it this name. On February 7th, 2010 InvisibleMan unveiled its name as Volund! This name means "Battle Brave" in the language of the Old Norse. Right now it is in closed beta of the Preview, in which the level cap has been set to three. The crew of beta testers consists of Acaceol, Chilincheese, Giygas, GreyKnight, InvisibleMan, Jay, KingSpore, pifreak, Rector, Roarman, and TekkenIronFist. From the screenshots at that I've seen, this game looks absolutely amazing. There has not been an official release date for this preview yet, but hopefully we get to experience it soon!

From the Testers
Written by Acaceol, Jay, and pifreak

(Click to enlarge)

Teaming up against a tough monster.

Volund so far is shaping up to be a really nice game; it's very fun to play and to work with. There are a few bugs (no, not those types of bugs, SAO fans), but most of them (if not all of them) will be fixed before the release. This is as expected, though, since it has not been intensively tested until now. Because of the loot system and the different methods of play, the game itself is very addicting even when nobody else is on. It should be really fun when everyone's playing, but even with this small amount of players it's a really great game. Testing the Volund Preview has been interesting and it is a great privilege. I'm looking forward to PKing everyone else soon too. :D

See you in the woods,
Ace, Jay and pi

Funny Quote of the Week

Acaceol was playing the game and found a bug that duplicates items. The following is Acaceol's response to the programmer's request for a detailed description of the bug.

--How to Duplicate Items on Volund--
--An Informative Guide--

Two (2) Persons
Two (2) Items of the Same Kind, one with Magikal Properties
For Example: Linen Coif and Dexterous Linen Coif of Brute Force
(these being the items that I used)
Any (?) Number of Items Which be Pleasing to Have More Of

Make thee sure that the First Person has the Aforementioned Unmagikal Item Equipped
Make thee sure that the Second Person has All Other Items

1) Start a Trade with either Persons
2) Put thee All the Items into thou Trade Window
3) Accepteth thou Trade with thou First Person, this thee must do first
4) Accepteth thou Trade with thou Second Person
5) Take Off thou Unmagikal Item from thou First Person
6) Pick Up thou Magikal Item with thou First Person
7) Thou First Person shalt be Disconnected
8) Connect thou First Person
9) Thou shalt have Two of every Items Which be Pleasing to Have More Of
10) Thou shalt be Holding the Magikal item