Archive for the 'Games' Category

02
Jun
09

Under Penalty of Death

LuaMud-Live-Logo As one discusses life in a virtual world, one must also discuss death in that same world.  Fortunately, death in a virtual world is no where near as devastating as real life.  That said, depending on how death is implemented (or not), a player may experience a range of emotions from almost comical to outright grief depending on the penalties associated with death of their character.

A virtual world has many options when it comes to handling the death of a character.

  • No Penalty
  • Repair Costs
  • Vitae Penalty
  • XP Penalty
  • Loss of Items
  • Permanent Character Death
  • No Death

Some games do not need the concept of death of a character.  The virtual world may be more socially structured and avoid combat or experiences that could lead to character death.  Such worlds solve the death problem by never introducing the circumstances by which a character can die. 

Another world may change the meaning of death to another term (morale comes to mind) so that characters automatically flee when their morale is gone.  In the spirit of this discussion, that would just be a story-telling spin on death and the players will still view it as death (or simply a loss).

By having the penalty for death be minimal, the environment encourages the players to throw caution to the wind and try things that would otherwise be impossible to near impossible.  If not carefully checked, players may also utilize this circumstance to leverage death for other game benefits (teleportation comes to mind).

With a high penalty for death in a game, players are discouraged in taking chances.  Also, there is a greater sense of loss when the character death does occur.  This can lead to players leaving the game after a perceived devastating loss.

Many of today’s popular titles utilize a minimal cost approach.  The idea being to avoid adding a game mechanic that induces frustration for the player and possibly leads to them leaving the game.  This can be seen at a deeper level as characters continue to become more overpowered compared to their non-player counterparts in the game.  This behavior has left many more hard-core players with comments like “Everyone can reach the highest level now.”

For the game designer, the choice between normalizing the game so that more players enjoy the experience versus creating a world where only great players can reach the highest levels is one that often leads to the former.  That said, the indie game designer may opt for a higher penalty to provide a higher-valued experience for their limited player base.  Especially, if the world is meant to represent something historically authentic.

Where will I go with this?  Unknown at this time, although I lean more towards the lower penalty as I cannot immediately justify a valid reason to be more severe on the penalty of death.  That said, as the world design progresses, I will have to address this question.

28
May
09

Why Tabletop Games Don’t Translate Well to the Computer

LuaMud-Live-Logo When the idea popped into my head to build an online multiuser role-playing game, my brain quickly divided the problem into two major components, the technical aspects and the world design aspects. I have significant real life experience doing both, at least in some aspects.

For the technical aspects, I have been a software developer for 30 years. I have shipped over 25 products in those years covering a wide gamut of specialties. I have had to work with low memory, low bandwidth machines and machines that really had no limitations as far as the software I was writing could push them. For me, software design and development is a series of constraint problems.  This is a deep calling for me and one that I am fortunate to love and get well paid.

For world design aspects, I have significant experience being a player in such worlds, both in pen-and-paper games and single and multiplayer computer games. I have been a world designer for my own pen-and-paper games a couple of times during those years. I’ve met both players and game masters alike that are masters of the craft, and others for whom the game should never be played again.

Thus, when it comes to creating a new world for an online game, my thoughts immediately move towards adapting a pen-and-paper role-playing game. These games have been through extensive play testing, and in some cases, millions of people play them.  There are plentiful resources both in book form and in online databases.  Perfect!

Well, not quite.  One of the key components that works for a pen-and-paper game is that the rules are interpreted by a game master and that game master can, at any moment, apply intuition, cunning or humanity to any given situation and make it work for the players.  This can manifest in making an encounter a little easier if it looks like the players might die, to customizing the treasure as to reward the player of the hour.

The ability to inject creativity in real time is what cannot be so easily replicated by ones and zeros and a stream of computer code. This is part of the soul of a world designed by a person, run by a person and played by people that person is often familiar with.

In this day and age where MMORPG’s are common place with millions and millions of players (more than pen-and-paper games) are experiencing virtual worlds, it turns out that the most successful ones are those not generated from pen-and-paper games, or even those generated from canon based on books or movies, but those game that were specifically designed originally for the computer environment.

In parallel to the initial code development, I will start the world development. There are plenty of resources out there. I will tag this differently as to permit myself and others the ability to track the progress of the World Design.

28
May
09

Building a Simple Silverlight Client

After getting the basic framework for the server going and writing a small chat application, I was able to verify that the server was working correctly by utilizing the PuTTY terminal software. My next step was to write a basic client in Silverlight 2 to replace PuTTY.

Getting Started seemed easy enough.  Just visit the Getting Started section on http://silverlight.net

Here’s a quick rundown of the required steps:

  • Make sure Visual Studio 2008 is updated to SP1
  • Install the Silverlight Tools for Visual Studio 2008 SP1
  • Download the Silverlight Toolkit

Easy enough.  Well, not exactly.  It took a bit to download and update Visual Studio.  Everything else was pretty quick.

Moving on, I started by doing a bit of research on the web with utilizing sockets in Silverlight 2.  It’s important to remember that Silverlight 2 doesn’t contain the full .Net framework and that for security reasons, many API’s are limited or not available.

Sockets proved to be no different.  While the API’s are basically the same, I couldn’t get my sample application to connect to my localhost.  I kept getting an accessed denied error.  After spending many more hours on the web doing some research, it turns out that there are a few restrictions and a special service one must be running to get this to work correctly.

I’ll save you the gory details.  Those can be found on MSDN

http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx

Quick summary:

A service must be listening on port 943 that can serve up a policy file similar to the following:

<?xml version="1.0" encoding ="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from>
        <domain uri="*" />
      </allow-from>
      <grant-to>
        <socket-resource port="4529-4534" protocol="tcp" />
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

The Silverlight 2 application is only allowed to open a connection back to the same server that launched the application.  It will then get the above policy file and use the rules to determine if it has permissions to talk to the server.

Once that hurdle was completed, the application started working like a charm.

 

22
May
09

Where to start – A simple chat system

LuaMud-Live-Logo After doing some initial investigations around infrastructure, technology, design and process, I have decided to start some coding.  I’ve decided to start by building a chat system.  This will help me work out the kinks with the development environment, establish client-server communication protocols and begin developing some of the game mechanics and feel.

For any online game, the ability to communicate is paramount.  It’s a fine balance between access and scalability.  Too many people in a chat system causes the user to perceive most communications as noise, while too few people means that communication cannot be an effective means of solving problems or social interaction.

After some thought, it feels like a chat system basically breaks down into four primary areas:

  • System Channels – These are often used by the server to communicate to the client or to all players at once.
  • Public Channels – This represents communication without moderation.  Often, these channels are predefined by the game system to help group similar types of communication (i.e. trade, guild, etc…)
  • Private Channels – This is often one-on-one communication.  This can manifest as a direct message between players or as private communications between the game and the player (think NPC chatter specific to player)
  • Created Channels – These are user-created channels to facilitate communication with friends or people with similar goals.  These can be controlled and moderated and may require passwords to join.  There is often an owner associated with the channel with moderator privileges.

Within those systems, players need a user-interface that provides good control of what they are seeing and how that information should be seen.

  • Window control – The ability to direct and control chat windows.  Identifying which channels should show up in which windows and if new private messages should show up in new window instances or in a single window.
  • Coloring – The ability to specify the color (or possibly font) of the users choice for text output.  This should be done on a channel level.
  • Formatting – Allowing the formatting of text.  This could be limited to only bold, italic, color, font or whatever is appropriate for the environment.
  • Address Book – This can take the form of a friends list in some games, but the ability to get access to a list of people, get information or status about them (online vs offline), and initiate communication.
  • Linking items – A staple of game systems is the ability to link items (or skills, abilities, etc…) into chat. Open question: Is there an opportunity here to allow users to link to other pieces of the user-interface to act as a sort of social help program?
  • Hyperlink support – The option of supporting hyperlinks in chat and launching a browser on interacting with the hyperlink.
  • Filtering – At a minimum to have a list of terms or regular-expressions to keep some forms of text from being displayed.  While this may be a form of censorship for some games, for others it may be necessary to prevent some magic phrases from triggering code or for legal or geo-political sensitivity reasons.
  • Ignoring – The ability to identify a person and ignore them.
  • Reporting – The ability to report a person for their chat for violating the terms-of-service agreement.
  • AFK (away from keyboard) – The ability to indicate to others your status and possibly set a message that is displayed when someone talks directly to you.
  • Who – The ability to find other people and get information about them before they are on a friends list.
  • Anonymous – Preventing others from getting status or other information about you.
  • Placeholders – Often used for macros, the ability to specify a generic placeholder for a defined item.  An example might be %N for the name of the target or %L for a location.

I’m sure I will continue to grow this list.  By implementing this structure, I will have the opportunity to explore options with the client and the server and to investigate scalability of the infrastructure and architecture.

19
May
09

What’s in a (domain) name

Given all the work going into this project, I feel it is important to make sure that the project has a web presence.  That destination is where people can find the latest sources, help and information regarding the project.

LuaMud – The first thing I did was go and purchase the LuaMud.com and LuaMud.net domain names for the project.  I utilize Network Solutions for managing my domain names as they have been around for quite a while.  Some of my domain names are almost 15 years old now and Network Solutions was really the only game in town when I started.

Fortunately, NetSol was having a special and I was able to book both domain names for the price of one.  Word of caution.  Network Solutions has become very commercial and it can be a bit cumbersome to register a domain name and then be asked if you want one of fifteen services.  After skipping all the propaganda, the domain names were registered.

I host my own domains on my server, so now I needed to update my DNS records to point to my server.  This was easily done from the Network Solutions web site.  I then had to configure my server to be ready to receive connections on these two domains, including setting up a dumb default page with a simple “coming soon…” string for the default page.

Hopefully, by tomorrow, the domain name and updated DNS entries will have propagated across the Internet and the site will be active.

Once the site is active, the arduous task of setting up the site structure will be next.  I suspect I’ll want some form of forums, or perhaps a wiki, or maybe I’ll just link to a 3rd party site that hosts those services.  Looks like another blog entry in the works.

19
May
09

Getting started with Lua

While I begin my framework for creating the game using Lua as the scripting language, I thought I would discuss some of the other constraints I’m working under to put things into perspective.

I would like to utilize the following technologies:

  • .Net Framework, C# preferably, C++ as a fallback for necessary components
  • Lua as the scripting language
  • Silverlight as the client platform
  • Visual Studio 2008 as the development environment

Following is the list of initial resources I’m using to put together the scripting engine:

  • www.lua.org – Primary site for all things Lua.  Great starting spot containing links to many libraries and even a live demo that can be run from the browser.
  • lua-users.org – Community site containing extensions and discussions (Lua Addons)
  • Lua Socket library – Well, I need to get network connectivity somehow.  This seems to be a pretty standard library for doing so.
  • LuaForge – Source repository for a lot of Lua projects including the Sockets library
  • Generic Game Server v2.0.1 – Great little Lua generic game server.  Looks to be what I want already written along with sources should I need to enhance it.

Well, to my surprise, after downloading the Generic Game server and playing with it for a bit, I was actually able to get a very rudimentary MUD framework in place and it loaded, allowed connections, etc…  It took a little wrangling for me to get the Lua syntax down correctly and to have it work correctly with the software communication interfaces.

Based on this, utilizing Lua is a go!  Now to go get a domain name to host all this great information and the builds, etc…

17
May
09

Lua or LPC

One of my early decisions was to utilize a scripting language for the game.  The scripting language is interpreted allowing for changes at runtime without restarting the whole game. Well, most of the time…

When I use to code for a MUD, the MUD utilized LPC as its scripting language.  LPC was developed by Lars Pensjö for scripting in LPMuds.  I took some of the original code and specialized it for my own MUD, which was never released.  This was over 10 years ago, but I still have the code, a good base library and a basic understanding of the language still.

Lua is another scripting language known for its speed and its efficient garbage collection.  The other big benefit it has is that World of Warcraft uses Lua for programming its interface and thus has generated quite a few followers in the gaming community that know how to write code in Lua.

All that said, both languages are fairly similar on many levels.  The real power for both of these languages comes from the extensions that are built and specific to their running environment.  Given that 90% of the functionality comes from these extensions, it is not immediately clear which of these languages might be best suited.  Heck, for that matter, one could throw in JavaScript (or ECMAScript for the savvy) as a viable contender.

One of the other advantages that Lua has is documentation.  There have been many websites, articles, blogs and even a book or two written about Lua.  It is also under current development.  The only downside is that I’ve already got a significant amount of LPC code written for my old MUD.  Maybe it’s time to give up and just use the old code as a framework of ideas and start fresh.  The downside to doing so means an additional month or more of coding just to get a basic library of routines built up.

Well, that settles it.  In my opinion, the scorecard comes out in favor of Lua.

Expect to see more articles on how the adoption and learning of Lua is going.  I will post my sources of information and downloads so everyone has a chance to share.  When I finally get to some minimal level of code and framework, I will post that work for others.

16
May
09

Design, design, design

Over the last few days, I’ve been spending a significant amount of my mental resources thinking about the game and the features I would like to see in it.  This alone can be a dangerous line of thinking.  In the end, I could end up with a game that I absolutely love to play, but nobody else does.  That defeats the purpose, in my mind.  On the other hand, building a game that every else would enjoy, but that I won’t, doesn’t seem appealing or inspiring.

Balance…

I’ve been thinking about all of the different MMO’s and single player adventure games I’ve played over the last twenty-five years.  What are some of the things I was most fond of?  How many of those are for really great design versus nostalgia?  I tempered my thoughts with remarks my friends had made about the games and their design.  It’s easy to state the obvious.  It’s more difficult to identify the essence that actually made a particular game worthwhile.

I would like to design a worthwhile game.

This morning, I got up early thinking about the shape of the game.  It doesn’t have a name, it doesn’t have rules, it doesn’t have definition.  I decided to grab a pen and a pad of paper and a clipboard.  I walked the couple of blocks to my local coffee shop, ordered my drink, sat down and started to explore the shape of the game.

I recalled both the positive and negative aspects of games I’ve played.  I jotted notes into broad categories so I could retrigger the thought process.  I covered a very wide gamut of ideas and concepts from the different types of quests to banking, money, characters and their development, merchants, areas, expandability, items, transportation, community, story, crafting, grouping, etc…  When I was done, I had two full pages of very high-level ideas.

Shape…

I now have a very rough shape.  The idea now is to iterate through each of these areas and define the next level of detail.  These details will be written up and I will have some peers and friends review the thoughts and ideas.  This whole project started out with the notion of doing this in a very public manner and soliciting input from everyone.  While that doesn’t mean I’ll utilize everyone’s input, it does mean I will consider everyone’s thoughts and contributions.

There’s a part of me that hesitates to start coding anything without additional shape to the game.  While it might feel like a waste of time to start so early, it turns out there are many supporting framework pieces that can be started.  This includes a basic application framework and coding design documents.  Companion applications can be started and technology assessments can be done.

So much to do… So little time…

13
May
09

And so starts the game development

After some careful thoughts over the last several days I have come to the following conclusions.  First, the game should be small enough initially that it doesn’t require months of architecture work just to get something basic going.  Second, in general, I should use as much existing technology as possible and not try to blaze a new trail here (see my first point).

It’s not enough to just write a game.  Without some planning and thought, it will be a failure from the beginning.  I’ve spent some time over the last few days reviewing the traits and qualities that I personally enjoy in various adventuring games.  This includes sources like Everquest 2, World of Warcraft, Lord of the Rings Online, Tunnels of Doom, Rogue, etc…  I’m not striking out with the ambition of building such a large scale endeavor, but there are many little qualities each of these games possess that I would like to bring to my game.

My first goal will be to come up with a document that describes these qualities and how I see them fitting into the game (or not).  As a sanity check, I will run this list past some gaming buddies and get their reaction.  While this is going on, I can also start with some general framework and utility coding to occupy my developer urges.

My next gaming post will include a project name and a general description.  I will provide a specific category (along with sub-categories) that can be utilized to pivot the topics and discussions.

I’m excited to get things going…

11
May
09

It’s all about scale

How times have changed. Here I am, sitting in my office at home at my desktop thinking about the programming project I want to work on.  It starts out simple enough.  Create a small dungeon crawl game that is lightweight fun.  I figure this would be a great opportunity to start writing a blog describing how I go about thinking, planning and coding such a project.  How hard could it be?

Twenty years ago, I would have simply started up an editor, wrote some code, stayed up way to late and ignored everyone and everything around me.  Today, I find myself in real contemplation assessing the size and scope of the project and asking a lot of questions that begin with ‘Why?’.

Part of me is disgusted by this.  Part of me is proud to show my maturity and experience in this matter. The end result is that it really doesn’t matter much if I don’t do anything.  So, I need to put a stake in the ground and start making some progress.

The thought process goes something like this.  If I’m only writing a small game or game framework to be utilized only as a learning process, then there is little reason to do anything other than jump right in and start coding.  The flip-side being that if I want to create something with great potential, then I need to have the necessary framework in place to make sure the project doesn’t implode on itself.

What’s the answer?  Well, I don’t know that yet.  Hopefully, I’ll find a happy middle-ground and get this thing started.  In the meantime, at least I have some topics that delve into my psyche.




 

May 2012
M T W T F S S
« Jun    
 123456
78910111213
14151617181920
21222324252627
28293031  

Follow

Get every new post delivered to your Inbox.