A crazy MMO idea! (for AI creators)

Started by
5 comments, last by dontstopdreaming 13 years, 11 months ago
I have now updated this post at the bottom! I'm feeling a bit spaced-out, having over-eaten so-called "healthy" chocolate snacks yesterday. It didn't achieve the desired effect of stimulating my creativity, but at least I can express some ideas and discuss things here. Trying to be productive today feels pretty hopeless... I have had the idea of creating a MMO where AI developers can practise their skills by setting up their AI's in a game interface (made in C++). I will create the worlds greatest game development team later (hehe), and this platform will be a good tool to create optimal challenges for the AI developers. And the continuation of development of the game and AI interface itself is a nice programming challenge. So, at first I thought about creating a simple MORPG (like the old Runescape) as the platform. But the bots your can create for such a game are very limited, and you would surely see a lot of simplistic bots doing a single task, like mining. I had such a game pretty much set up, with an AI interface made in C++, but my AI ideas were limited at the time, so development halted. And all I did was to transfer a function from another program I made, where you could ask the AI for the definition of a certain word (by using googles "define:" search engine). And the general idea that spawned that is still very good! (to create an AI that can search for information on the web). But I think that dedicated AI developers need more features to play around with. So now I'm thinking along the lines of a space MMO, where each AI have a spaceship that can be micro-modified (meaning that you can combine building-blocks to create certain weapons or tools, and not just add certain weapons, tools and shields to your ship). And with this ship you can also add other objects to the world, like turrets to defend certain resources. Resources like metal-ores, and other pure resources, like pure energy sources that can be tapped into. The point is that the game consist of a huge world with resources that the AI have to use wisely (meaning the need for domination, and expansion in some cases (the fun part for us humans, hehe)). The game world will be 2D, and ships are made of 2D points and bonds between them (so they can look really weird in some cases, not like spaceships at all), and metal ores are just points (circles), that may stick to each other when colliding. Additions to the spaceship is made by first gathering enough materials and energy, and then the central module of the ship can manufacture a new part. And this same module can create new objects in the world, that may be programmed to be like mines sitting around until colliding with a spaceship, or seeking a spaceship to attach itself to. You may think of this as an evolution simulator, where creatures fight for food. And just like a good evolution simulator, the "creatures" are just composites of resources when they die (so that the world is an isolated energy system). Where the energy is not translated into matter, and can only be used for a while, and energy sources may be depleted and new ones may pop up. So a good AI would constantly search for resources, and build systems to defend energy sources. Problems: *There would of course be a problem with some bots gathering too much territory and power, so that new bots have no chance of surviving. But it would still be very interesting to see what systems develop in the micro and macro world! There may be servers for less skilled AI developers to solve this problem though. *And each computer (previously I just said "IP address" here) should only be able to have a single AI running, at least if we are speaking about an MMO system, where anyone can create a bot. *There should be a limit to how many additions you can make on your spaceship, or it may grow out into a completely different entity encompassing all of the world! :D *Developers may extend the AI interface to create a graphical user interface, allowing them to play themselves. And there may be a lot of "centaur" players (http://en.wikipedia.org/wiki/Advanced_Chess). The server of this game will record all the events and pack them into files, so that one day when there is a real graphical interface for this game: people can watch the whole history of the game, and see new stars/bots pop into existence. So what do you think? Do you want to create AI's for such a game? Have any suggestions? Update: First I begin with an advice: make your own simple snacks if you desire any good boosting effects (or just increase intake of caffeine)! Yesterday was like a detoxification day for all this so-called healthy snacks, and my mind chased the ghosts of slippery ideas. Just frustrating -- being a human, lol! I have thought a bit more, and I will specify the modules of this "game" here: Though I cannot specify everything, just to clarify things for myself and people checking in here. The graphical window: Yes, there must be at least a simple representation of the objects in the worlds, so that the programmers can get direct feedback, thus qualifying it more as an optimal challenge. This is quite a lot better than having a console, where you just see "Your control unit has been destroyed!". -Why!? And then you have to go through an event-log with a lot of numbers, to see what really happened. And seeing your little creature or spaceship in action will be very interesting. The spaceship: It consists of only a central unit (the controller) at first, and before entering the world, the programmer may add certain joints and other tools to it (just a few cheap parts). The spaceship can only be controlled with C++ code (though you may implement a simple scripting language), so once the server sends the request that you should specify what initial parts your spaceship needs, you will have a pre-programmed sequence of packets to send (or you will quickly be disconnected (duh :))). The central unit: This controls everything, so you better protect it with lots of points and bonds, like a shield, making it like a spaceship. Or you may rely on moving joints and be more offensive. This unit have a position, a radius, and a direction, so that joints can be attached at certain angles, and propulsive units can cause it to turn or move back or forward depending on what angle it is applying force from. So programmers will probably be tempted to use a specialized agent for controlling the propulsion of the ship. As you can't just apply force to the central unit, that would make things too simple. And once in game: if you have the right materials and enough energy: you can add a new joint or tool to your ship from the central unit or from any of its joints. And you can control any joint by a simple joint[x].move(torque_to_apply); or a moveJoint(x, torque). There may also be joints that can be extended by command, but currently I see no unique benefits of that. And I'm going for a minimalistic design. And I haven't designed the system for designing propulsion systems, weapons, explosives and all the fun stuff. But all these things should be created by micro-parts so that you can create anything you desire! I have thought about this, but the ideas are just slippery in my mind. The mobile units: These can be manufactured by the central unit, like anything else. And they consists of only a single "cell", which can not replicate, but can grow a limited number of tools and joints. I have also considered that the spaceship should be able to communicate through a general medium to it's mobile units. So that you have to send unique messages back and forth, and avoid other robots to send commands to your units. But that would just be an interesting experiment, and it would add too much complexity perhaps. So in the beginning you can only send messages directly to units, and not to a medium. The World: I'm considering having all of space exert friction on joints (lines), so that programmers will have to stream-line their designs. And change the angle of joints when moving in certain directions, as to minimize friction. But there is no question that there must be a general friction on particles, or things will just continue to accelerate! Metals: there will just be few different kinds of metals, all with a unique purpose. Some might be useful for creating propulsion systems, and some may be better for joints. I'm considering having a few rare metals that are generally superior too. The first demo: I like to become a fast "prototyper" (I'm too much of a philosopher!), so I will just create the physics engine, and then make a small evolution simulator. Where you only simulate a single creature at a time that is trying to reach a simple goal like travelling from point A to B. This is just to motivate me to get into development quickly. These creatures will be exactly like the spaceships will be of the finished version, but much simpler (no mobile units are necessary). The tools available to them will be few, but I will test a few micro-part systems for designing the different tools. And the creatures are controlled by a sequence of simple operators and conditions, a simple GP set-up. So if I start now and just keep focused, I can get the first physics engine done by tomorrow. I have all the theoretical understanding I need. And the first micro-part system may be finished the next day, if I just can keep focused! And then the controlling system, if I can just keep in the flow! This will be the perfect exercise for me, if I can just keep focused... Hehe.. At least I have my own reusable 2D graphics engine, so I will be able to test this really easily. And I have also created a reusable GA engine, that I will just have to refine. But the thing is, I will probably at most finish the physics engine tomorrow, and then I will have other things I must do, and then development can be continued only after three days. So the most I can do is to continue to develop the ideas in my mind. Hmm... Can I, or should I even document this much here? Perhaps I should just create a blog for this project, what do you say? [Edited by - dontstopdreaming on April 28, 2010 6:28:55 AM]
Advertisement
IP addresses do not map 1:1 to machines.
A machine may have more than one IP address.
An IP address may be the public endpoint for a NAT/PAT.
Not to mention all the fun tunnels and proxies out there, as well as IPv6.

To make it is hell. To fail is divine.

Quote:Original post by dontstopdreaming
So what do you think? Do you want to create AI's for such a game? Have any suggestions?

There have been a few similar AI-based games proposed here in the past, and as I'm sure you are aware there are a few "bot building" games which have actually been developed and enjoyed some limited success.

It seems like your idea suffers from the same major problem of how to attract and retain players, but the specifics of your idea are, to me, unusually appealing (maybe because I'm developing 2D space shooter AI for my own game project).

I have a couple of specific comments and bits of (mostly ill-informed) advice:

  • You mention the potential for a player to develop a GUI for the game, but I propose that it will be prohibitively difficult to attract players if you don't have some kind of graphical monitoring interface available from the outset (even just a labelled overview map). Also "centaur" play isn't necessarily a bad thing, even if it is the optimal strategy

  • Regarding limiting spaceship size - an energy consumption proportional to the number of modules (and properly balanced) will force some kind of efficiency consideration which should naturally limit ships to sustainable sizes

  • You talk about a ship deploying turrets etc. - is it viable for a ship to replicate itself and create several ships controlled centrally but effectively acting as independent agents?

  • You talk about the AI interface in somewhat vague terms - in how much depth have you considered the "sensors" and "actuators" available to the programmer? (i.e. what data about the world and the ship itself is available to the player and what possible actions must they take? Must they manipulate thrusters to steer? Query sensors for data about nearby entities? How do they "program" a turret produced by the main ship to act independently?)

  • I think the most important thing for the success of a game like this is building a strong (though not necessarily large) community with a great deal of competitive spirit - in a way this is as much a social exercise as a technical one
  • Thank you for your posts both of you!

    To Zao: Sorry, I know... I was just typing away, and felt no need to go into such details. Sure the best way may be to take the MAC address to identify each computer.

    To WavyVirus:
    Just to make it clear: this is a "game" or challenge for programmers. And it would be too much of a hassle to make it usable by non-programmers.
    And I'm sure that someone would develop a GUI for non-programmers as well, you see I really don't care :D
    What I'm interested in is to see how this world will develop.

    Quote:Regarding limiting spaceship size - an energy consumption proportional to the number of modules (and properly balanced) will force some kind of efficiency consideration which should naturally limit ships to sustainable sizes

    Good idea! And it's easy to implement to boot!

    Quote:You talk about a ship deploying turrets etc. - is it viable for a ship to replicate itself and create several ships controlled centrally but effectively acting as independent agents?

    I just planned to make the AI be able to create simple objects consisting of a single point (which may have sensors, and weapons), and being able to program this in an in-game scripting language (you just place blocks of code, or connect nodes in certain ways).
    So yes, you could perhaps create simple agents, who for instance may locate resources for the ship, and even attach itself to them and return to base.

    Quote:You talk about the AI interface in somewhat vague terms - in how much depth have you considered the "sensors" and "actuators" available to the programmer? (i.e. what data about the world and the ship itself is available to the player and what possible actions must they take? Must they manipulate thrusters to steer? Query sensors for data about nearby entities? How do they "program" a turret produced by the main ship to act independently?)

    At first there won't be any limited sensors, you will just receive everything within your square of spatial existence.
    And you may do as you wish with this; like directing an "arm" towards a nearby ship, and then fire an attached gun.
    Of course the control of the ship must be extremely limited, you can't just snap a joint into position and fire a million bullets! lol!
    But you may control any joint and any module that your ship possesses.

    Quote:I think the most important thing for the success of a game like this is building a strong (though not necessarily large) community with a great deal of competitive spirit - in a way this is as much a social exercise as a technical one

    I see you actually want this to succeed as well :)
    Thank you!
    And once it does, I will fire out a forum right away!
    And later there might be a lobby system containing all the servers, and where you can chat and share resources.
    My brain quickly becomes a mess if I don't focus at something.
    It doesn't have to be the most interesting project ever, just something interesting and challenging enough.
    And then all I really have to do is to outline, specify and just get to work.

    Am I lazy? I may be, but mostly I'm just having too many things that I want to achieve.
    No, most of all I'm an incurable perfectionist. Even when I tell myself that I will just start a simple project without fancy features, I start to think about inessential things. I am in an improductive circle right now, and perhaps the only way to break it is to start a team, so that I can focus on the parts that interests me (design mostly).

    And now I'm using this place as a blog?
    I have to find a good blog-host for this project, because it surely is worthwhile.
    I could just get a web-host and make my blog as a website too.

    Once I find a way, I will update my first post with it, and then you can see how this project develops.

    Hmm, should I do this? But what is there to lose? So here I go:
    I hereby declare this project as my main project, and henceforth I will dedicate most of my time and energy into completing this project as quickly as possible. And I will adhere to the standard of one main-feature in a day.

    And in order to stay focused, I will at least need a general plan, so that my mind isn't straying and going crazy in my imagination. My creativity has been increasing a lot in the past month, which can also over-shadow my focused and structured thinking.

    My general plan:
    -Create the physics engine.

    -Make the evolution simulator demo. Hopefully by this time, I'm completely focused at this project.

    By now I have things to show you guys, so I may take a day off for contemplating different paths I might take, and for just resting my brain.

    -Complete the design of the micro-part system (by which weapons and all kinds of tools may be constructed).

    -Make a new evolution simulator, where creatures can be constructed from these micro-parts, and where creatures compete for energy sources and matter. I should also expand the instruction-set for their brains for this challenge.

    By this time I have already been extremely productive, and I may take a days rest with lateral thinking.

    -Now it is time to start the development of the actual game, and I start by creating a server application that will host the evolution simulator.
    And then I create the AI interface that receives events and stores the state of the evolution simulator in memory.

    And once I have a server and a listening client with a window that displays the events of the world, I can invite you guys to watch my creation in real-time!
    That should be motivating and fun enough.
    And soon I will have the first prototype of the game where you can log-in with an AI that you have created, and perhaps fight some evolved creatures!

    Yes! This is really a good project for me!
    Awesome idea. I'm not a programmer myself, but I thought of a few ideas while reading that you might be able to use.

    1. Have limited space for code. This could be another manageable resource in the game. While building your ship, if you want it to have more complicated AI, you need to buy modules which give you more space to code. It just gives the player another choice (another laser or more advanced AI?), and promotes efficient coding (educational gaming!).

    2. In the same vein, you could allow your ship to produce other AI-driven entities, but increase the cost of code exponentially for every entity besides your first one. Each module gives you 10 lines for your first ship, 4.14 lines for the next, 2.6 for the next, etc. (formula is 10(Xth root 2)-10).

    3. Change the universe significantly and often, to prevent "optimal" cookie-cutter AI scripts from taking over.
    You misunderstood how this game will work GiantGames, I explicitly specified that you can only make your AI's in C++ code, and send commands, and receive data through an interface that is like a C++ library that you can use (or a DLL, or pure code, doesn't matter).

    But your advice is very much appreciated! I would like to have more "pure" game designers think about my idea.

    1. This idea can still be implemented by having a limit at how many commands you can send each second.
    And the reason I don't even plan to implement a scripting language in the future is because this is a game for dedicated AI programmers, and also most algorithms would be slowed down a lot by being scripts.
    So this idea will probably be implemented right in the first version.
    And everyone that gives such useful ideas will all be given some mention in the credits.

    2. The mobile units are the only things that will use a scripting language, and I don't plan to implement them right a way. So my ideas about them might change a lot.
    But currently I'm planning to just let each unit have a limited amount of tools and code. And the code will require energy to be executed, this is a pretty standard idea, and it will achieve the thing you worried about.

    3. Yes, the universe... Who knows what I might do with it. As for now I'm planning a universe for my evolution simulator, where matter and energy-sources are distributed like a galaxy, where a lot of matter is in the middle.
    Crazy new idea: Perhaps matter and energy-sources can chase each other in this spiral, just like in our world. But this is an MMO, and sending changes in the world at all times like this will be too heavy.
    But perhaps there is a technological solution to this, I don't know.

    Now I'm getting to work on the first evolution simulator, so that I can have something concrete to show you all! The physics engine is pretty much ready and working.

    This topic is closed to new replies.

    Advertisement