Pages

Friday, December 30, 2011

On Graphical User Interface

The Graphical User Interface, known as a GUI or UI is one of the most important aspects in a game. It is what allows your player to understand the chaos of the game world. The UI gives the player information that if the game were real, the 'player' would already know, eg. Your health. The human doesn't have some meter attached to them telling them how healthy they are, no. A person knows when they are sick, or if they get a cut.

My current project has been key bindings in a GUI. Anyone who has played World of Warcraft or many other games with a multitude of abilities or spells (Dragon Age: Origins, another example) knows that you don't always have room for every ability or spell on your GUI and it ruins the game experience to have to open the spell book to cast a spell every time. This type of GUI mechanism is called a QuickBar. Each slot on the bar is bound to a key. At anytime one can either change to binding of the slot, or the spell in the slot.

First i wanted key bound spells. So i sat down and attempted a flat out c# solution. No success. Now, either i'm missing knowledge, (which is very likely) or it just isn't possible in a language like C#. To fix this i used the Lua wrapper, LuaInterface. It wraps Lua into a dll (for windows) and gives the programmer access to a Lua Virtual Machine. You can feed to VM scripts, which it compiles during run time and executes. I wrote a simple script that takes in a C# method and a key, links them together in a table, and when given a key, calls the linked function. Problem solved.

Now for the GUI implementation of this.... which is a WIP. I've currently coded the QuickBar and am researching live Combat Systems to get a better view on spell effects and such.

Until next time,
TNariksan.

Thursday, December 15, 2011

On Scripting

One of the more useful features i have come across is a scripting language. From may WoW days, i picked up a little of the language known as Lua. Its is a dynamically typed object oriented language. Meaning you don't define variables, and variables can even be methods. That's right, METHODS!

While trying to conquor the problem of key binding, custom user key binding (Aka, the user can set any key to do whatever they want), i came upon a problem. How to do this? I can't just assign the key 'K' to execute, WalkForward(). But with Lua, you actually can, in a way. You can use a table(with a key and a value) to use 'K' as the key and WalkForward() as the value. Now that i sit here and type this, i am most positive (not 100%) that C# probably as a similar data structure, possibly. Though i will still stick with the Lua fix because writing in a scripting language will much improve my game in the long run.

Ask yourself: Why is WoW so popular? It's because you can nearly do WHAT EVER THE HELL YOU WANT.
Custom GUI, here you go.
No Gui? Got your keys memorized? Sure. Macros, hell yeah.
GIANT ASS WORLD?! Got that too.

This is what i aim to replicate. The sheer depth of the game. Players will customize the game, i only provide the means to do so. This means custom armor (yes, you will be able to make your own armor, no not in the traditional, 'smithing i need 5 copper and 10 bronze to make a chest plate' No, you'll be able to mix and match metals to make alloys of various strength, the mix will determine what colors you can have your armor appear, its resistance to damage types... and so on.) custom building, custom enchantments, i've even thought about a language that would allow you to write words down in books, then if you click on the books, it would cast a custom spell.

All this would not be possible without a scripting language. Scripting means compiling while the game is running. You don't compile it until it is needed, that is the beauty of it, along with other things.

To Sum It Up: Scripting is beautiful, use it to take those leaps you couldn't with your core language. Learn a scripting language. Use one, it can make your life easier.

TNariskan.

Wednesday, December 7, 2011

On Positioning

While coding the element that would allow the player to select a target I ran into the problem of assuming the reference point of my sprites (2D pictures) was in the upper left hand corner, as was the default. For the animation of my sprites, i use code written by Microsoft in their Platformer XNA Demo. The reference is changed to the middle of the bottom of the sprite (for collision detection reasons). After a good fifteen minutes of staring at the normal rectangle bounding intersection statement, i came to realize this and corrected the problem. Only now it works, but only if the mouse if anywhere off to the upper left, yet not inside the actual sprite. Just one of the many bugs a programmer may run into.

TNariksan.

PS. I will attempt to answer any bug questions posted if you may be having similar problems. Also, i apologize for not posting more. More on my latest game system to be implemented. I'm working on a system that would allow the players to learn words (in some lore related language) that would be able to be combined with any other words to create effects, being a totally dynamic system, it has to be nearly bug free.