Jump to content
  • Advertisement
  • Remove ads and support GameDev.net for only $3. Learn more: The New GDNet+: No Ads!

  • 07/16/99 05:58 PM
    Sign in to follow this  

    Game Intelligence Design

    Game Design and Theory

    GameDev.net
     Game Intelligence Design
    
     [Up] [Map] [Prior] [Robot Wisdom home page]
    
     IF, AI, and the confabulating-arranger model of interactive fiction
    
     by Jorn Barger (jorn@mcs.com)
    
     September 26, 1994
    
          Abstract: One plausible design-paradigm for interactive fiction
          might be to supply IF authors with an extensive library of
          intelligent objects that 'know' how to interact realistically,
          including a rich model of human behavior. Doug Lenat's Cyc
          project is already attacking this task from a traditional AI
          perspective, but for IF this knowledge may be more simply
          collected in the form of stories-- in fact, a new mailinglist on
          the Internet is devoted to compiling such a story-library. If
          this library also tags all the most interesting possible
          plot-lines, the computer's task might be extended to
          "confabulating" the player's reality, on the fly, simultaneously
          arranging both past and future so as to open as many interesting
          plot-directions as possible.
    
     A couple of issues ago (IED 7.4), Chris Crawford discussed the basic known
     'topologies' for interactive fiction (IF)-- each of which he showed to
     contain intractable fatal flaws. Basically, interactivity implies that the
     user is making choices, which implies that the story is branching into a
     tree-like topology. But Chris showed that storytrees must either be folded
     back on themselves in a very limiting way, or have most of their branches
     trimmed to (violent) dead-ends. If they don't, they'll necessarily expand
     exponentially... so consequently, within these design paradigms, even
     high-budget efforts are doomed to produce only simplistic and uninvolving
     games....
    
     The fantasy for the distant future, of course, is that the computer should
     offer an infinitely-various Virtual Reality, full of objects and characters
     whose behavior mimics 'real life' in great detail. In the ideal future, one
     should be able to step into the pages of a Dickens or Tolstoy novel and
     interact with its characters as freely as in 'real' life....
    
     But how do we get there from here What sorts of design strategies might
     make these new forms of IF possible?
    
     Certainly, one step in the right direction will be to teach computers the
     basic laws by which real objects interact, which is one of the traditional
     challenges of artificial intelligence (AI). In this article, I'll first
     explore the AI-world's leading contender for a truly intelligent program--
     the Cyc project. Then I'll look at how Cyc's models overlap with those of
     traditional text-adventure games. I'll discuss a potentially-simpler
     strategy for compiling a 'Cyc' for IF, using a text format called a
     "meta-story", and offer some examples of how these can capture knowledge in
     an intuitive way. And finally I'll explore a new paradigm for IF-- the
     confabulating-arranger model.
    
     The Cyc project as a universal knowledgebase
    
     The last thirty years of academic AI research have produced very little
     that computer-game designers would find useful. The problems they've chosen
     to research have been too limited, and the programming structures they seem
     to favor are impossibly slow for realtime gameplay. So the world of gaming
     has pretty much had to invent its own styles of AI, as it's needed them.
    
     But for the last ten years, a highly ambitious (and surprisingly
     low-profile!) effort has been underway in Austin, Texas, to spell out the
     entire range of human commonsense knowledge. The goal of this Cyc (for
     enCYClopedia) project is a program that can read a newspaper, and
     'understand' what it has read, well enough to detect violations of common
     sense, just as human readers can. But to the extent that it succeeds at
     this, it should be equally useful, at least in theory, for maintaining
     internal consistency in a virtual world....
    
     The Cyc team, led by Doug Lenat, has been trying to break down human
     understanding into thousands of subdomains that they call "micro-theories",
     like ailments, food-preparation, communication, and corporate behavior, and
     then trying to translate the basic 'rules' of each such domain into the
     language of symbolic logic. When they need to say, "If someone is
     asphyxiating, they cannot breathe," for example, they write:
    
     (LogImplication
       (LogAnd
          (allInstancesOf $AIL Asphyxiation)
          (bodilyInvolved $AIL $AGT))
       (holdsIn $AIL
         (LogNot (behaviorCapable $AGT Breathing bodilyInvolved))))
    
     where $AIL and $AGT are the variables for ailment and agent,
           LogAnd, LogNot, and LogImplication are simple logical connectives
     and "holdsIn" defines the context within which this 'axiom' holds.
    
     According to the Cyc model, if an adventure game needed to know
     what-happens-next at any particular point-- say, when a person drops a
     delicate vase-- it would send a query to Cyc and in a matter of seconds,
     Cyc should return with the news that vases dropped on hard surfaces usually
     shatter...
    
     Unfortunately, if you multiply that plausible retrieval-time times the
     thousands or hundreds of thousands of deductions that would be needed to
     keep an interactive fiction realistic from moment to moment, you're forced
     to the conclusion that Cyc just isn't going to be fast enough to support
     IF, anytime soon.
    
     Probably the worst problem here is that Cyc-- unlike any other largescale
     project in history-- didn't evolve by starting with a simpler version of
     the whole, and gradually filling in the less-important details. Rather, Cyc
     is being built by the much riskier strategy of accumulating detailed
     subsections, one by one, with no known overall pattern... and later
     streamlining it down to a "core knowledge base". To make that streamlined
     enough for IF may turn out to be the hardest challenge of all!
    
     So Cyc offers a good startingpoint for IF-theory, with regard to the
     knowledge it hopes to embody, but perhaps not so good a model with regard
     to the performance constraints of realtime IF. But we know for certain that
     some level of realtime IF is possible-- Zork and Hitchhiker's Guide (etc)
     have proven that! But is there a way to build an "IF engine" that includes
     something more like Cyc?
    
     Text-adventure development languages
    
     The enduring popularity of text adventures, especially the Infocom games of
     the early 1980s, has led a number of talented enthusiasts to create
     programming languages especially for text-adventure development. Many of
     these are available free on the Internet, where the newsgroup
     rec.arts.int-fiction supports a thriving subculture of text-adventure
     designers working in these formats. (The newsgroup has its archives at
     ftp.gmd.de in /if-archive/.)
    
     TADS (The Text-Adventure Development System) by Michael J. Roberts is
     probably the most popular environment, because games created in TADS can be
     run on almost every major hardware platform. TADS offers a modest range of
     predefined object-types that have at least a minimal level of intelligence
     about their own behavior. Containers and vehicles, for example, understand
     that objects placed within them will move with them, and will be invisible
     unless the container or vehicle is transparent. Characters automatically
     grow hungry if they don't eat, and even eventually die.
    
     TADS is object-oriented, with the objects themselves containing most of the
     code embodying such "story elements":
    
     class openable: container
         contentsReachable = { return( self.isopen ); }
         contentsVisible = { return( self.isopen ); }
         isopenable = true
         ldesc =
          { caps(); self.thedesc;
            if ( self.isopen )
            { " is open. ";
              pass ldesc;}
            else " is closed. "; }
     [etc]
    
     The TADS object-hierarchy is firmly grounded in story-telling pragmatics:
    
     Thing
       Item: vehicle, surface, lightsource, key, food, container, clothing
       FixedItem: switch, dial, button, decoration, actor, chair
       Room
    
     Cyc, by contrast, offers at the highest level the following, rather less
     pragmatic, partial object hierarchy:
    
     Thing
       Intangible
       IndividualObject
         Event
         Stuff
           Process
             SomethingExisting
               TangibleObject
    
     The Wisdom-FAQ mailinglist
    
     If a knowledgebase like TADS's could be gradually extended, ultimately even
     to the full extent targeted by Cyc, this would surely be a major step
     towards better IF. So with this in mind, a group of us from
     rec.arts.int-fiction (and elsewhere) have spun off a new mailinglist to
     investigate the possibility of building a sort of public-domain 'Cyc' for
     IF.
    
     The name for the mailinglist-- Wisdom FAQ-- is derived from the Internet
     tradition of Frequently-Asked-Questions files (FAQs), which try to
     condense, into the most accessible format possible, all the most useful
     information on any given topic. The "Wisdom FAQ" can be seen as a (rather
     grandiose!) image of a FAQ that tries to contain all the wisdom of the
     world, on every topic... starting, of course, with those truths most useful
     for interactive fiction. (To subscribe to the list, send me a request at
     wisdom-request@mcs.com. The accumulated archives can be ftp'd from
     ftp.mcs.com in mcsnet.users/jorn/wisdom/. If you need me to email them to
     you, let me know how many kilobytes your emailbox can handle at once.)
    
     The mailinglist is grappling simultaneously with the task of simply
     accumulating 'story elements' or axioms, and the more difficult task of
     agreeing on a standardized way of expressing them. Because the latter task
     is more technical and less interesting to many people, it will likely be
     spun off into a second list of its own sometime soon.
    
     The task of enumerating story-elements, though, is not so much a question
     of technical as of storytelling expertise. For this reason, the Wisdom-list
     eagerly welcomes non-technical contributors who nevertheless have a knack
     for spinning out plotlines, or a gift for clever plot twists...
    
     Every object tells a story... don't it?
    
     The obvious way to keep these collections of story-elements organized is
     according to which objects in the object-hierarchy they require. It's not
     that hard, for any object in a game (or in the world), to rattle off the
     basic rules of its behavior. One strategy for 'priming your pump' might be
     to ask:
    
        * Where does this object come from?
        * How does a person come into relationship with it?
        * How might the person use the object?
        * How might they change it?
        * How might they be changed by it?
        * How might their relationship with it end?
        * How might it cease to exist?
    
     One convenient format for compiling the answers to these questions might be
     called a "meta-story":
    
     The food meta-story: A person tended a garden or farm raising plants or
     animals to eat or sell. They harvested the food when the time was right and
     sold it or preserved it or prepared it and ate it or fed it to friends or
     family. If it was well-prepared, their hunger was satisfied and they were
     happy. The food travelled thru their intestines and had to be excreted. If
     they didn't get enough good food, they got thin and died. Maybe the person
     preparing the food put poison in it to injure the person who ate it. They
     might have to disguise the flavor of the poison. Maybe they prepared it
     poorly and it tasted bad.
    
     The bottle meta-story: A person heated up some sand in an oven and blew air
     into it with a straw until it became a bottle. When it cooled, they could
     pour liquids into it and put a cork or cap on it to keep the liquids from
     spilling or evaporating. They could also fill it by dipping it into a
     larger body of liquid. When they took the cork out they could pour out the
     liquids, or drink from the bottle. Two or more people could pass the bottle
     around and share the drink. If they dropped the bottle on something hard,
     it probably broke, and any liquid in it spilled out. The broken glass could
     cut a person when they touched it, if they weren't careful. It could make a
     car tire flat. If a barefoot person stepped on it they would get cut. The
     broken base might act like a lens to focus light and start a fire, or
     magnify something tiny. (The bottle with clear liquid in it might also be a
     lens.) The person could knock someone unconscious by breaking the bottle
     over their head. They could use the bottleneck to make their guitar play
     better. They could roll dough flat by using the bottle like a rollingpin.
     (etc)
    
     So one approach the Wisdom-list may use could be to accumulate a sort of
     'children's encyclopedia' of these meta-stories, elaborating each of them
     to whatever level of detail our creativity allows.
    
     But simply enriching the supply of intelligent objects won't necessarily
     make the IF-author's job easier. For one thing, the more pre-existing
     behavior that's been supplied for the game's objects, the harder it will
     become for the author to anticipate every possible solution to the game's
     puzzles. In fact, the farther we move in this direction, the less
     attractive the whole idea of puzzle-oriented IF begins to seem...
    
     IF and 'psychology objects'
    
     Cyc has been circling closer and closer to the task of representing human
     dramas, and claims already to have a working model of emotions and
     motivations, but the Wisdom-list won't stand a chance if it doesn't
     directly confront the problem of encoding literary plots.
    
     The classic analysis of literary plots is George Polti's "Thirty-Six
     Dramatic Situations". Polti analysed a huge range of classic plotlines in
     literature, and declared these to be the basic ones: Supplication,
     Deliverance, Revenge, Vengeance by Family upon Family, Pursuit, Victim of
     Cruelty or Misfortune, Disaster, Revolt, Daring Enterprise, Abduction,
     Enigma, Obtaining, Familial Hatred, Familial Rivalry, Murderous Adultery,
     Madness, Fatal Imprudence, Involuntary Crimes of Love, Kinsman Kills
     Unrecognised Kinsman, Self Sacrifice for an Ideal, Self Sacrifice for
     Kindred, All Sacrificed for Passion, Sacrifice of Loved Ones, Rivalry
     Between Superior and Inferior, Adultery, Crimes of Love, Discovery of
     Dishonor of a Loved One, Obstacles to Love, An Enemy Loved, Ambition,
     Conflict with a God, Mistaken Jealousy, Faulty Judgement, Remorse, Recovery
     of a Lost One, Loss of Loved Ones
    
     Only a few of these will normally turn up in the course of applying the
     meta-story approach to story objects, because the most important 'objects'
     in literary plots tend to be psychological ones, like emotions and
     motivations.
    
     The meta-story approach can still work fine as a way of accumulating
     story-elements, though, even if you choose a totally arbitrary
     startingpoint (for example, hypnosis), so long as you're comfortable with
     the storytelling aspect of things:
    
     The 'hypnosis' meta-story: Once a person learned they could control others
     by hynosis. So they hynotized others into giving away their money and power
     and their health and their self-respect. And these people didn't even
     realize what had happened to them. Eventually things got so bad they were
     desperate to discover the source of their situation. Then one person got a
     glimpse of the truth, and then lost it, and then saw it again, and tried to
     tell others, and got dismissed as crazy, and attacked, but finally figured
     out how to lead others to see the truth, and they rose up together and
     overthrew their oppressors.
    
     The intuitive familiarity of the story-format allows almost any topic to be
     productively explored...
    
     Reverse-engineering emergent-behavior
    
     While the artificial-life theorists have been hoping to discover a few
     simple laws that will result in a vast payoff of interesting stories, via
     the principle of 'emergent behavior', the meta-story approach might be
     thought of as an attempt to outdo them by 'cheating'-- first you spell out
     the stories you want to see 'emerge', and only then do you analyse them and
     try to 'reverse engineer' the set of simpler laws that will produce them.
    
     So even something as simple as Maslow's hierarchy of needs (physiological,
     safety, belongingness and love, esteem, cognitive, aesthetic, and
     self-actualization needs), which might seem like a plausible startingpoint
     for a simple set of a-life laws, leading to emergent behavior, reveals some
     extremely inobvious patterns (at least from a mathematical point of view),
     when analysed for meta-stories:
    
     The physiological-needs meta-story: Every so often, a person gets a craving
     to consume food and drink. They usually arrange to have a source of these
     nearby, that they can rely on for purity. They may prepare the food and
     drink, cooking things, cutting them up, mixing them together, adding
     flavorings to make the experience pleasant. Or maybe they expect another
     person to do that for them. Usually, a group of people who live together
     will sit down together to eat, at a table with plates and silverware and
     glasses. Afterwards, someone must clean up. Sometimes they may eat at
     restaurants, or in a vehicle as they travel. They may carry a container of
     water to drink (perhaps flavored or mixed with nutrients or stimulants or
     intoxicants), or stop at a vending machine or drinking fountain or coffee
     machine. If a person's daily calories consumed don't equal their calories
     burned, they lose weight. If they consume more, they gain weight. If they
     lose too much weight, or fail to drink enough, they can die.
     Water-plus-wastes is excreted by urination, food-after-nutrient-absorption
     by defecation.
    
     The safety-needs meta-story: A person felt unsafe, and they didn't like it.
     Maybe there were other people or animals around, untrustworthy ones, and
     their home wasn't secure. Maybe they had to leave the safety of their home
     during the day, and risked being attacked. Maybe it was nature that
     threatened them, in the form of high cliffs, deep holes, quicksand,
     dangerous bodies of water, weather that's too cold, hot, or violent, etc.
     Maybe it was poorly maintained technology that was the danger. The person
     changed the environment or changed their behavior so that the danger was
     lessened and they felt safer.
    
     The belongingness-and-love-needs meta-story: A person felt lonely. They
     sought out others' company and acted charming so they would be welcome. Or
     they acted domineering so that others would be afraid to reject them. Or
     they acted hurt so that others pitied them.
    
     The esteem-needs meta-story: A person felt that no one respected or
     appreciated them. So they tried to do something admirable, and then made
     sure that others knew about it. Or maybe they lied about doing something
     admirable.
    
     The cognitive-needs meta-story: A person needed to know something, or was
     just curious. They sought out a book and read it, or a teacher and took a
     class or asked them questions. Or they just observed the thing they didn't
     understand, and thought deeply about it, maybe doing experiments. If they
     discovered something new they probably published their findings.
    
     The esthetic-needs meta-story: A person was oppressed by a boring or ugly
     environment, so they made or acquired or sought out objects that were
     pleasing to their senses. Maybe they recorded the process of creation, so
     that it could be reexperienced later, by others. Maybe they positioned
     these creations within their environment so they could experience them
     often. Maybe they grew bored with them after a time.
    
     The self-actualization-needs meta-story: A person had everything they
     needed, but didn't feel fulfilled. So they looked within themselves to
     discover what their heart wanted most, and followed their bliss...
    
     "SimNormal"
    
     Given the ambitious scope of the Wisdom list, there's a serious risk of
     getting bogged down in such a mass of story-content, that one loses any
     sense of a startingpoint, and so also any chance of actually building a
     working IF program!
    
     One way to keep these meta-stories somewhat 'grounded in reality' is to
     visualize them as being acted out on a computer screen, using even the
     fairly primitive existing standard for graphics adventures like King's
     Quest and its ilk. If your stories are too abstract for this technology,
     you probably haven't thought them through in enough detail!
    
     I like to imagine a sort of SimCity-like environment where a community of
     little NPC's go through their daily routines of life, in a completely rote
     fashion, with no emergent behavior expected or desired. (In honor of
     Normal, Illinois, I call this world "SimNormal".)
    
     Looking again at the belongingness-needs meta-story above, it's clear that
     before you can visualize it as a SimNormal animation, you have to break it
     down further, according to certain typical patterns of how these needs are
     satisfied:
    
     The casual-acquaintance meta-story: A person gets to know another by being
     introduced, or by introducing themselves, or by crossing paths
     occasionally. When they meet they exchange mild greetings and smalltalk
     about weather, news, gossip, entertainment they've seen. If nothing
     divisive turns up, they may gradually open up and trust each other more.
    
     The simplest way to encode this might be to give each person an
     intimacy-level toward each other one. Zero would mean total strangers, but
     each time they noticed a given person it might increase by one. When it
     reached five, say, they'd shift to casual-acquaintance mode, and greet each
     other. If they're introduced, on the other hand, they might reach five
     right away. As this number continues to grow, their greetings should become
     more extended in time, stopping to chat if they're not in a hurry. (There
     could be a chatting animation that's designed to be cycled continually, for
     whatever duration they've reached.) Discovering common interests may cause
     the intimacy-level to skyrocket. Discovering incompatibilities, or failing
     to see each other for a long time, can cause the intimacy-level to drop.
    
     The best-friend meta-story: A person gradually gets to know someone else,
     and enjoys spending time with them. (Or maybe it's a sudden strong
     connection.) They arrange to spend time together, do things together, maybe
     talk on the phone. They tell each other their private worries, and try to
     help each other. These exchanges make them feel better. Sometimes they
     fight, and reconcile or not. Maybe one of them gets an S.O. and that causes
     them to break apart. Maybe it just stops being so fun, and they drift
     apart.
    
     A person may maintain a 'short list' of those with the highest intimacy
     rating, and when they're bored or upset they'll look to these for support.
     A person-soothes-person2 story could be very simple-- time is consumed and
     person2 feels better. (Person1 may or may not feel worse-- if they do, it
     bodes ill for the friendship!) There may be a certain potential for
     conflict at each point, which should depend on the sorts of personalities
     they are, and whether they're in competition for scarce resources.
    
     The pals meta-story: A person has one or more best friends, and that group
     grows larger as others are allowed to join their get-togethers. Maybe
     they're invited or maybe they just show up and tag along. If someone
     doesn't like them they may be driven off. Several times a week, at least,
     they arrange to meet together. Maybe there's a power struggle between two
     who both want to lead. Maybe one by one they drop out; maybe others take
     their places.
    
     The planning-logistics of getting a group of free-thinking individuals
     together are a lot more complex than for just two. Maybe any of them can
     invite the others-- there'll need to be be a 'get-together meta-story' to
     handle this.
    
     The housemates meta-story: A person moves into a living-place with one or
     more housemates, sharing common areas. Usually, the housemates play the
     role of friends to some degree, listening to each others' daily stories.
     Some housemates are neater than others, and this will lead to conflicts.
     When bills arrive, they sometimes have to be split up unevenly and this may
     cause tensions. One person is probably the most responsible, signing the
     checks, etc. Each probably has one or more annoying traits that try the
     patience of the others. Maybe one by one they move away, and are replaced
     by others, or maybe they all leave at once.
    
     The co-workers meta-story: A person gets a job at a workplace, with others.
     Some of these become friends, others maybe casual acquaintances. Some
     become enemies. Even when they fight, they still have to work together, or
     quit, or ask for a transfer. Their enemies may try to make them look bad to
     their bosses.
    
     The confabulating-arranger model of IF
    
     So if we continue to pursue these directions of research, what sorts of IF
     might become possible? How do you give the player an infinite world, and
     still keep enough control to involve them in especially interesting
     stories?
    
     If the computer 'knows' all the most interesting sorts of dramas in
     literature, one strategy could have it be continually, unobtrusively
     revising the virtual world behind the scenes, so as to open up as many
     interesting plotlines as possible.
    
     So the game might open with a person in their apartment, waking up in the
     morning, and if they go outdoors they may be presented with a series of
     neighbors whose dramas they can become involved in... but none of these
     dramas needs to have been worked out in detail beforehand. Rather, the
     computer will continually improvise new possibilities based on the player's
     choices, and the view of reality they've been allowed thus far. If the
     player chooses not to follow up any given opening, that's no problem...
     there will be many other options to explore.
    
     This way, the past is as undetermined as the future, and can be molded to
     any extent, limited only by what the player has already been shown and
     told. So the computer is actively arranging that new developments will be
     as interesting as possible-- "confabulating" reality, to use a psychiatric
     term.
    
     And in this, the "confabulating-arranger" model perhaps most closely
     resembles the activity of the brain, during dreams...!
     ---------------------------------------------------------------------------
    
     Bibliography
    
        * Chris Crawford, "Flawed Methods for Interactive Storytelling" IED 7.4,
          April 1994.
        * Douglas B. Lenat and R.V. Guha, "Building Large Knowledge-Based
          Systems" Addison-Wesley 1991.
        * Michael J. Roberts, "TADS: The Text-Adventure Development System" Palo
          Alto, High-Energy Software, 1992.
        * George Polti, "The Thirty-Six Dramatic Situations" Boston, The Writer,
          1977 (originally published 1900).
    
     Some journal references for more on Cyc:
    
        * "CYC" AI Magazine 7(1), 1986
        * "When will machines learn?" Machine Learning, Dec 1989
        * "Cyc: Toward Programs With Common Sense" CACM, Aug 1990
        * "Knowledge and Natural Language Processing" CACM, Aug 1990
        * "Common Sense and the Computer" Discover magazine, Aug 1990
        * "Cyc: A Mid-Term Report" AI Magazine, Fall 1990
        * "The commonsense reviews" Artificial Intelligence, 61(1), 1993
        * "CYC-O" Wired magazine, Apr 1994
        * "Enabling agents to work together" CACM, 37(7), 1994
    
     [Up] [Map] [Next] [Robot Wisdom home page]
    
     [BACK] Back
    


      Report Article
    Sign in to follow this  


    User Feedback


    There are no comments to display.



    Create an account or sign in to comment

    You need to be a member in order to leave a comment

    Create an account

    Sign up for a new account in our community. It's easy!

    Register a new account

    Sign in

    Already have an account? Sign in here.

    Sign In Now

  • Advertisement
  • Advertisement
  • Latest Featured Articles

  • Featured Blogs

  • Popular Now

  • Similar Content

    • By william.equal
      Hey, I just finished a new episode of "Game Audio Lookout"! This time it's about musical sound effects in the Super Mario series. Here's the link to the video on YouTube:
      --
      Musical Sound Effects in the Super Mario Series | Game Audio Lookout
      https://www.youtube.com/watch?v=6hHbTVloizU
      We’ll have a deeper look at musical sound effects in the Super Mario series in this episode of "Game Audio Lookout".
      I guess everybody has heard the sounds of the Super Mario series before. But I believe most of us don’t exactly know how these were constructed and what efforts were taken in later instalments of the series to produce sound effects that even harmonise with the game’s music.
      --
      Feel free to let me know what you think
      Alex
    • By OConquestGame
      Hello there!
      I’m the creator and producer of an upcoming visual novel / video game. 
      My team and I are looking for artists (character and background), writers (experienced in writing relatable characters and witty dialogue), and programmers (familiar with unity and creating mini games). 
      Our team is a group of close friends looking to break the mold of the traditional visual novel and create something new and positive. This game will be highly promoted and be a great portfolio piece. Rates are negotiable!
      If you are interested please contact/message us today! OConQuestGame@gmail.com
    • By Gas Lantern Games
      Hello!

      I have spent the last year and a half developing a game in my spare time in Unity! I am releasing it soon on Steam. Ant Empire is a strategic remake of some older games. It is influenced by games such as Ant Empire and Civilization.

      I am currently doing a kickstarter to help fund an AI before launch.

      I have attached some images (tried some gifs but they were too large) to show the current stage of Ant Empire, which is nearly completed.







    • By MarkNefedov
      So, initially I was planning to create a base class, and some inherited classes like weapon/armour/etc, and each class will have an enum that specifies its type, and everything was going ok until I hit "usable items".
      I ended up with creating UsableItem class, and tons of inherited classes, like Drink/Apple/SuperApple/MagickPotato/Potion/Landmine/(whatever that player can use) each with unique behaviour. I planned to store items in the SQLite database, but I discovered that there are not many ways of creating variables(pointers) with type determined at runtime (that preferably get their stats/model/icon/etc from DB). So, I think that I need to use some variation of the Factory pattern, but I have no idea how I should implement it for this particular case (giant switch/case 😂 ).
      It would be really nice if you guys can give me some advice on how I should manage this kind of problem or maybe how I should redesign the inventory.
      Inventory storage is an array of pointers. I'm working with CryEngine V, so RTTI can't be used.
      Example code:
      namespace Inventory { enum ItemType { Static, Building, Usable, Weapon, Armour }; class InventoryItem { public: virtual ~InventoryItem() = default; virtual ItemType GetType() = 0; virtual string GetName() = 0; virtual string GetIcon() = 0; virtual void Destroy() { //TODO: Notify inventory storage delete this; } }; class UsableItem : public InventoryItem { public: struct Usage { int Index; string Use_Name; }; virtual CryMT::vector<Usage> GetUsages() = 0; virtual void UseItem(int usage) = 0; }; class TestItem : public UsableItem { int Counter =0; ItemType GetType() override { return ItemType::Usable; } string GetName() override { return "TestItem"; } string GetIcon() override { return "NULL"; } CryMT::vector<Usage> GetUsages() override { CryMT::vector<Usage> Usages; Usages.push_back(Usage{1, "Dec"}); Usages.push_back(Usage{2,"Inc"}); Usages.push_back(Usage{3,"Show"}); return Usages; } void UseItem(int usage) override { CryMT::vector<Usage> uses = GetUsages(); switch (usage) { case 0: for (int i =0; i<uses.size(); i++) { CryLog(uses[i].Use_Name); } break; case 1: Counter--; CryLog("Dec"); CryLog("%d", Counter); break; case 2: Counter++; CryLog("Inc"); CryLog("%d", Counter); break; case 3: CryLog("%d", Counter); break; default: CryLog("WRONG INDEX"); break; } } }; }  
    • By Effekseer
      Effekseer Project develops "Effekseer," which is visual software for creating open source games; on September 13,
      I released "Effekseer 1.4," which is the latest major version release. 
      Effekseer is a tool to create various visual effects used in games and others.
      With Effekseer, you can easily create various visual effects such as explosion, light emission, and particle simply by specifying different parameters.
      Effekseer's effect creation tool works on Windows and macOS.
      The created visual effects can be viewed on Windows, macOS, Linux, iOS, Android and other environments with DirectX, OpenGL and so on.
      In addition, there are plugins / libraries for game engines such as Unity and UnrealEngine4 to view visual effects.
      Effekseer 1.4 is an updated version of Effekseer 1.3 released in November 2017.
      This update contains the following changes:
      The renewal of UI. Support the tool for macOS. Addition of a function to read FBX with animation. Addition of parameters to protect collied effects and objects. Addition of parameters for easier control of the effects. In addtion I improve plugins/libraries for Unity, UnrealEngine4 and Cocos2d-x.
      Besides that, more than 40 new sample effects have been added and many bugs have been fixed.
      Effekseer 1.4 is available on the project website.
      The license for the software is the MIT license.
      Effekseer 
      http://effekseer.github.io/

      Github
      https://github.com/effekseer/Effekseer
      
      Sample Effects.
      Tool Demo
       

      View full story
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!