Update 03/12/2015

Its quite a bit of work posting to all the different sites (the main site, forums, TIGForums, IndieDB, Kickstarter, etc). Its not always just a copy and paste operation - many sites have custom text editors and require manually adding videos, links, and so forth.

So for now I am just going to link updates to the main site (voxelquest.com).

Click here to go to read the update.



Comments

  • The warping looks really smooth! It's impressive :smile:
  • edited March 2015
    Posting this here for people.


    gavanw said:




    Hello! It has been over a month since the last update. I apologize for the delay, but as I have mentioned elsewhere there really was not much to look at as the majority of my work was doing IO in a text-based console. I have been hard at work on the AI, and now have the logical portion of it mostly complete. It is capable of making deductions as I have described prior in the forums and elsewhere. This is a full "scripting" language with compiler, although for the time being it is parsed using rules from JSON which makes it somewhat unwieldy but I just wanted to get a parser working as fast as possible. It contains many features, and is both a subset and extension of the language Prolog, albeit with different syntax and grammar.
    image
    I use quotes on "scripting" language because it is not writing AI scripts like you might see in other games. Rather it is just specifying a knowledge base with various rules and relations. You can then pose queries to this knowledge base in order to make deductions and determine whether or not things are true or false. Additionally you can do more advanced proofs and solve statements for a given set of variables, finding the variables which result in a true set of facts. If you are interested in learning more about this, I recommend learning Prolog - there is a good free book I used here for reference.

    So why not just use an existing solution like Prolog? Well, first of all Prolog is relatively bloated. My language fits within under 1000 lines of code if you ignore the JSON parsing (less minus comments/whitespace). It is compiled to integer symbols so it avoids string manipulation and comparison. I only need a subset of Prolog's functionality, so it would be wasteful to include the entire thing. Moreover, Prolog is not sufficient on its own. I must carefully modify the deduction algorithms to support things like score maximization, and thus I must have a full understanding of the code involved. This would be much harder if I went in and tried to modify an existing Prolog implementation, and more error-prone due to the larger breadth Prolog has over my subset language.

    The ultimate goal of this is to build an AI that can make logical deductions and perform surprising, emergent behavior based on things that are not explicitly scripted. The term I have been throwing around, as have some other games, is a "Game of Thrones" simulator - something capable of weaving together a complex plot in which every NPC has their own

    I also added in some billboarding to show sprites in the placeholder boxes, which makes it much easier to figure out what a given object is. Also reorganized all the items and added in placeholder NPCs and monsters. Art is by 7soul and available for purchase in most game dev asset stores.
    image
    image
    Also, as a quick (dumb) experiment, I messed with voxel warping. Just 2 lines of code, could have some interesting uses for spell effects and such.

  • I think the warping effect would look REALLY good as an explosion effect, like a shockwave.
  • So, as far as I can tell, you basically implemented a Datalog engine (https://en.wikipedia.org/wiki/Datalog) from scratch? That's cool, but I don't understand why you wouldn't just use an existing implementation. Is there something your engine supports that is not representable in traditional Datalog/Prolog?
  • Talvieno said:

    I think the warping effect would look REALLY good as an explosion effect, like a shockwave.

    Or maybe casting spells could produce fireballs or energy balls that distort the area around them a little bit!
  • edited March 2015
    slaguth said:

    So, as far as I can tell, you basically implemented a Datalog engine (https://en.wikipedia.org/wiki/Datalog) from scratch? That's cool, but I don't understand why you wouldn't just use an existing implementation. Is there something your engine supports that is not representable in traditional Datalog/Prolog?

    To be honest, I had never heard of Datalog until you mentioned it, and it might be closer to what I would have needed, but here is why I decided to do a custom solution:

    1) My implementation is a *very* tight subset of Prolog - minus comments and whitespace, it is somewhere between 500-1000 lines of code.

    2) One of my general goals is to keep the Voxel Quest engine as small and as bloat-free as possible. Currently it takes about 4-5 seconds to compile, which is pretty good. GNU Prolog source (minus documentation, examples) weighs in at 4.3 MB. ALL of the VQ source weighs in at 1.36 MB.

    3) It must be small, it must be fast, it must minimize cache misses, it must minimize dynamically allocated memory, it must favor speed and simplicity over robustness. It does not include things like operators, regular expressions, and other stuff - it is purely functional. Some prolog implementations rely on string manipulation and comparison - in my case it is entirely symbolic (strings are compiled to integer values).

    4) Although what I have demoed so far is basically a subset of Prolog, what I am ulimately building contains features not in Prolog that tie deductions to score maximization and environmental properties like proximity.

    5) I had the option of building it myself vs. ripping an existing solution to shreds and rebuilding it. I hate to rewrite the proverbial wheel, but in this case what I am building is different enough that I think I benefit more with my own code, my own understanding of it, my own mental map off of which I can understand the code and add in future modifications.

    Hope that makes sense!

  • Yeah, that absolutely makes sense. Things like bddbddb have a certain gee-wiz factor, but I always find myself wondering whether they're worth the bloat or not. I've definitely had my share of "might be good but implementation is way too scary" moments, especially in these sorts of query engines which tend to be especially opaque. (SMT solvers come to mind here.) At any rate, it's really cool that the engine will have a real logic engine, so I'm excited for that.
Sign In or Register to comment.