Wednesday, February 27, 2008

Injecting money in MMO

Most MMOs are using quests to push money into the world. As already stated before, there won't be quests in the game, at least not at first and surely no "kill 10 rats" quests. Whatever if it's good or not for some reason, that's not something I want.

I also don't want a system that could be used to get a player rich without any players' interaction. So what I'm looking for is a system that would just start the economy and help new players to get started.

So far, the main idea that keeps coming back to me is the "gold buyer NPC". Have some NPCs around the world that would pay a small amount to players for gold they mined. Even if the money given to players is ridiculously low, the obvious problem is that some players will still go through the process of grinding gold.

Gold is acquired by mining rocks that respawns after a "randomish" number of minutes that can be adjusted. When a rock is mined, a roll is made against a loot table to see if something has been found and what have been found. So while gold could be made hard to get, I'm under the impression it's still prone to abuse, without saying that it would somehow miss the point of helping new players to "easily" get started.

A maximum amount of gold that can be turned per day (or week) per character could be set but since registration is free, it's pointless. Players can just create a new character, get gold, get money and then tip it back to their main character. Mechanics to prevent more than 1 character per IP or such is out of question here. Not reliable enough and problematic for players playing from the same network.

I guess that in the following days I'll be looking at other games to see how they handle such matters. My feeling though is that the most reliable way is to put the players in situations where they have to spend at least X time so that money given is limited by the time spent playing and not by some formula or system.

If anyone can point me to some originals ways to inject money into the world, let me know. I'd also be interested to hear your ideas/suggestions.

Read More......

Monday, February 25, 2008

Free to Play from the GDC

While I wasn't at the GDC, I've read a lot of blogs related to it. Among them, there's this little pearl that talks about F2P which is what I'm going for.

The current F2P demonstrations shows that it's an interesting option for indie game devs (Habbo Hotel, Club Penguin, KartRider, ...). It requires little setup and handling and can still provide more than interesting revenue.

If you're interested about Free to Play matters, I suggest you take a look at this:

Read More......

Wednesday, February 20, 2008

Smart advices I shall use carefully

Simple but quite useful for a project like mine. There's already some element from this list that made it into the current version currently in testing:

Build in the "Norm Effect" if at all possible

I think the first NPC that talked was welcoming every new characters in a given zone. Simple to do and can be extended to add more fancy stuff like "Welcome [character name]! Congratulation for your recent achievement [badge name]".

Include spectators

The "Log as guest" button is all about that. Instant access to the game without any boring account creation process (at the cost of limited interaction).

Legends must grow

Not currently implemented but planned from the start, access to characters stats from a web service (to start) and then a web interface (like the WoW one).

Facilitate relationships

There's a guild system but a friends system is probably needed as well. To know if you're friends are online or not in a single glimpse makes it a lot easier than sending random /tell to check if the character is online or not.

Include cooperation

The way crafting will operate will surely require many people to cooperate or at least do quite some trades to achieve the high end items. Ex.: To craft a large chest, you first need a small chest. You can buy it from someone or craft it yourself since it's easy to craft.

However, to craft a tavern, you need small wood modules to craft medium wood modules to craft the require number of large wood modules to craft the tavern. This means a lot of resources and probably a considerable amount of time. But if you're able to get right away the large wood modules from someone else, the task becomes easier, faster, funnier.

Facilitate special events

I think GMs' commands can be easily used to create events on-the-fly. Some tweaking might be needed and more is planned (like the ability to award custom badges for the futur badge system).

Read More......

Saturday, February 9, 2008

Demo - AI scripting in action

Click here for the demo (will open in a new window)

The video is choppy (actually flash file) but it's still only me having difficulties to produce small and smooth Flash files. The actual game is much smoother than this.

Anyway, it shows some basic AI scripts done by Maple and me:

Cross: Running around the screen and telling how many laps he did

Cows: Moving inside the pen and randomly mooing

Farmer Joe: Greeting visitors

Mr Y: Listening to messages received. If he received "Hi", he'll say "Hi" as well. If he received more than 3 "Hi", he'll lose patience

Read More......

Thursday, February 7, 2008

NPCs talking to NPCs

Again, a neat idea from Maple. NPCs can now receives message from other NPCs and from characters (well, GMs and admins at least).

What can this be used for? Well, you can simulate 2 npcs having a conversation, have a npc sending orders to another one (like "Attack that player while I run away") and much more other stuff I can't imagine at the moment.

I guess the best way to illustrate the possibilities is to show 2 sample scripts set to 2 different NPCs:

NPC 1:
sayto('comehere','110'); -- say to NPC id 110 to come to NPC 1

NPC 2:
if (newmessage.message == 'comehere') then
npcposition = getxy(newmessage.sender);
moveto(npcposition[0], npcposition[1]);

So NPC 1 ask NPC 2 to come at his position. NPC 2 check for new messages received and check the nature of the message. If "comehere" is found, it gets the position of the NPC 1 and move to it. The moveto command is not done yet but it's next on the list.

I must say that adding commands available to NPCs is quite fun. It requires little work (must be a sign that my framework is well done, hehe) and the results and possibilities are amazing.

Might not seems like much but with just the commands available right now, there's quite some stuff to do interesting AI and mini-games.

Here's the definition of those commands that can be called from LUA scripting. I'll leave the exact description for another time.

- Function getrandomdirection() As Integer

- Function move(ByVal direction As Integer, ByVal allowchangezone As Boolean) As Boolean

- Sub say(ByVal message As String)

- Sub sayto(ByVal message As String, ByVal targetNameID As String)

- Function getheard(Optional ByVal messageSender As String = "", Optional ByVal firstOrLast As Integer = 0)

- Function getrandomcharacter(ByVal distance As Integer, Optional ByVal distanceType As enumDistanceType = enumDistanceType.ChessKing) As String

- Function getrandomnpc(ByVal distance As Integer, Optional ByVal distanceType As enumDistanceType = enumDistanceType.ChessKing) As Long

- Function getnewestcharacter() As String

- Function getxy(Optional ByVal targetNameID As String = "") As ArrayList

- Function getdistance(ByVal targetNameID As String, Optional ByVal distanceType As enumDistanceType = enumDistanceType.ChessKing) As Integer

Read More......

Monday, February 4, 2008

AI scripting with LUA

This is probably the coolest feature and it's not even my idea! So far, the AI for NPCs was really primitive. All I had was some flag telling the code what can and can't be done like walk=true, changezone=false and so on.

So to add a bit of depth to it, Maple suggested to add scripting. After some research, it ended that it's quite easy to do and doesn't require much changes in the way NPC are handled.

After checking JScript/VBScript, I spent some time checking LUAInterface. Since LUA seems to be so popular these days (used in Metaplace for example), I decided to go with this.

The initial use for this will be for GMs and admin but this possibility fits perfectly with the game idea on working on while testing and finishing the framework. Players should have access to this to program their own NPCs (or just copy/paste scripts from others).

Here's an example that took me about 30 seconds to code just to test LUA with .NET:

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim objLUA As New Lua

'-- Give LUA access to the .NET function HelloWorld
objLUA.RegisterFunction("HelloWorld", Me, Me.GetType().GetMethod("HelloWorld"))

'-- Declare global LUA variable
objLUA("myTest") = ""

'-- Inject dynamic code
objLUA.DoString("myTest = HelloWorld();")

'-- Read back the LUA varialbe value (now that's cool)
Me.txtResult.Text = objLUA("myTest")
End Sub

Public Function HelloWorld() As String
Return "Hello World"
End Function
End Class

Read More......