Thursday, May 9, 2013

Banning and Kicking

I implemented banning and kicking. This was a must-have feature.

I cut some corners here by making offline banning an operation which blocks until the database has finished doing it. That means that the map the admin is on hangs until the database did the change, but considering that banning isn't something which happens every minute (at least I hope it won't)  this shouldn't be a problem.

Saturday, April 13, 2013

Tutorial

I started with the tutorial. The tutorial is the first thing the user sees of a game, so it's very important to do it well. It has to get the player hyped for the game while still conveying all information the user needs.

It is also a baptism of fire for the scripting engine, because tutorials are always heavily scripted. And bugs will not be forgiven, because a buggy tutorial will alienate many players before they even took a look at the real game.

I created the NPC Firyafoni as a framing device for the tutorial . Her name is an anagram for "Info Fairy" which is a pretty accurate description of her. I plan to use this character whenever I need to give some meta-gaming information to the player.

Fairies are creatures which are capable of existing in many places at the same time by creating clones of them self in remote places. When the fairy doesn't concentrate on a clone, it disappears, but most fairies are capable of handling dozens of clones at the same time. All clones of them form a hive-mind - everything one clone of them sees or feels is also noticed by all others. The individual clones are capable of interacting with other creatures normally. It is, however, impossible for the clones to interact with each other. When two clones of a fairy perceive each other, it's a very unsettling experience for the fairy, which leads to one of the clones disappearing. For that reason, fairies are also afraid of mirrors.



Monday, April 8, 2013

Equip defense

I haven't done any development for a while (curse you, Kerbal Space Program), but today I again did something: I implemented equipment defense. Each piece of equipment can now have a defense value. Optionally, it can also have a different defense value against specific elements. When it hasn't got a specific value against an attack, the general defense value is used.

When an attack hits a player, each piece of equipment removes a random amount of damage which is between 0 and the applicable defense value.

Friday, February 8, 2013

Healing works again

Today I fixed lot of minor problems on both client and server. But I also did something major: I re-implemented healing as procedurally generated spells.

Monday, February 4, 2013

Equipment revamp

While creating the buyable equipment for Wenibe, I noticed that there isn't much equipment can do. It can modify the players stats, but I would expect it to have more fundamental properties. Clothes should reduce damage and wands increase it. They should also be geared for specific situations.

Clothes

Clothes always have a general defense value, and can have special defense values for specific elements which are higher or lower. When the equipment has a special value for the element which is used by the attacker, that value is used, otherwise the general defense value is used.

When an attack hits the character, for each piece of equipment a random number is generated between 0 and the applicable defense value. Each of these numbers is subtracted from the attack. No total immunity is possible that way - even weak attacks have a low chance to break through high-end equipment. But considering that a player character usually wears 4 defense items (hat, robe, belt, shoes), the resistance is still pretty reliable when all of them give about equal defense.

Weapons

Weapons could have these effects:
  • Increase damage
  • Increase range
  • Decrease casting time
Staff Rod Wand Stave Scepter Cane
Damage X X X
Range X X X
Cast Time X X X

I think I should make these percentile boni.

Just like with clothes, a weapon has a general value and specific different values for specific elements.

Each of these effects could only apply to a specific element. That way you have to choose between a general-purpose weapon which boosts all elements or a specialized weapon which only boosts your favorite one while giving a malus to the opposite element.

I could also imagine rare weapons which give all spells a special property, like making all spells vampiric.

Sunday, February 3, 2013

The town of Wenibe

I started building a small town map as a test-bed for NPC scripting and to force myself to start doing some tiles. It already showed me some features which were missing on the server to allow effective script-writing.


Some new spell icons

I created the thunder family of spell icons:

Wednesday, January 30, 2013

How EVE Online deals with 3000 player battles

I read an interesting article about how Eve Online handles the server load caused by an unusual high number of players in the same area.

Their main trick is to slow down the gameplay when the server is overloaded (likely by reducing the number of ticks per second on the server). I could easily do the same, I just have to modify a few places where I assume that the tick rate is globally identical and I would have to inform the client that everything now moves slower. But I wonder if this would really reduce the load much in my case, because I assume that a player which has more time to do things will also try to do more things, and they will still send move- and action commands with the same real-time frequency.

Another thing they mentioned is the ability to temporarily move areas from a weak cluster machine to a dedicated server with much stronger hardware, but unfortunately this has a critical implementation flaw: It disconnects everybody on the server. It also doesn't happen automatically and needs to be triggered by an admin.

Currently my game is not cluster-ready, but in the long term I plan to make it possible to put each map instance on a different server, preferably fully-automatic to keep the administrative overhead low (I keep this in mind, but I won't do anything in this regard until I have a player base with a size which actually justifies the effort). When I do that, I should look into making it possible to also transfer the running instance together with its players to a different server, preferably without them noticing and fully-automatic.

Saturday, January 26, 2013

Procedurally generated shop content


Item shops can now have procedurally generated stock. I also improved the user interface by adding scrollbars to shops, showing the rarity as the item name color and adding tooltips. Shopping now works adequately.

Friday, January 25, 2013

Selling implemented


I added the selling gui. Now all that is missing for the item milestone is stack splitting/merging and tooltips in the buy- and sell GUIs.

By the way: I need to fix the price calculation of spells. The high-level ones should be a lot more expensive. But in order to do that I need to come up with a wealth-per-level formula to make up good prices.