Arsonide's Recent Forum Activity

  • What kind of object are you creating?

  • I have some writing experience as a freelance reporter for ExperienceGaming.com. It was a Korean site that is dead now, but it was a great experience! I got access to a lot of things that the public didn't even know existed, and I was sent to several conventions over the course of a year or so.

    I've also been using Construct for about two or three years now - having developed several plugins in the process. I am also the sole developer of one of Construct's most ambitious projects - Void Runner: an infinite universe down to the rocks on planetary surfaces, and the wiring in spaceship interiors. Scirra even tweeted the early prototype of it! I contributed a little bit to Construct 2's early plugin efforts, but not too much. I'm very loyal to Construct Classic, and I'll be honest - it's primarily because I've invested so much time in Void Runner.

    I'd like to consider that "battle tested". I'd be interested in helping out with this. Construct really does need more documentation, and any publicity for it would be awesome. PM me with some more details if you're interested.

  • I think there's a third party program that does that. I'm not sure if it's still being maintained though.

    Ah, found it:

    Yeah I just checked - it's dead. The list of plugins is very outdated.

  • <img src="http://a7.sphotos.ak.fbcdn.net/hphotos-ak-snc6/222665_1763322758013_1087413243_31705964_2170482_n.jpg">

    I found some actual border patrol tape on something at work, so I did the next logical thing with it - put it on my head.

  • It will have both as an option. Also by "story engine" I mean the procedural chronology stuff. You still set up your story and such. For instance, you can tell Muse that every 10-15 minutes the weather changes in your game, and that these are the weather options: rain, sun, snow. (Or make it geologically based, or whatever, so it snows more in the north). Regardless. Muse will tell you what it's doing right now when you pass it this time expression.

    You can also ask Muse for a list of entities that are currently in an area at any given point in time.

    So it doesn't really generate the story for you, but it gives the player a sense that things are happening. It's procedural chronology. I can also add some prose generators in later if you guys want, but they'll look pretty silly compared to this organic event based system.

  • Quick poll. I'm implementing the time expressions for Muse (you input a time to the history generator). There are two possible options.

    The first option is UnixTime. UnixTime is my real time option - where your world continues to evolve while the game isn't running. UnixTime returns the number of seconds since midnight, January 1, 1970. It constantly, reliably, moves up by one. Moving by one is good for this purpose, because that means the changes will subtly change over time rather than sudden radical changes. The problem with Unix Time is that due to memory constraints, in 2038, it will fail. I don't know why this bothers me so much, as by then Construct 5 will be pumping out much cooler games than this, but it bothers me enough that I'm implementing my own special version of UnixTime I'm calling MuseTime. In UnixTime, midnight - January 1, 1970 is referred to as the "epoch". MuseTime will be referred to as an expression, much like UnixTime, with one exception. You will be able to set your own epoch. That way, you can set it to whenever the game first begins, or whatever, and the player has a good solid 68 years before it loops back on itself. (Which would cause a sudden change of history within your game.) If players are playing your game for 68 years - I doubt you'll be worrying about this.

    The second option is counting the number of seconds your game has been running, in which case the game will pause while you are not playing. This will come with "Punch In" and "Punch Out" actions to start and stop the clock. My question to you guys is that this is going to need to save data. Would you rather this data be serialized with Construct's native savegames, controlled via the "Save" action, or would you rather this data be saved in an external file. Personally I've never used Construct's save action and have no idea how and if it works, but, and I've always wanted to say this: modifying that external file WILL result in unexpected time travel. That's something you probably want to avoid.

    Anyway what do you think?

  • Construct Community - You're my only hope! Well...I mean not really...but you could really help out. Not to mention have custom names ready for your game right when MUSE is released. The syllable based name generator is complete for MUSE, and it loads from files called "syllable sets". I have created a toolkit to help you make these. The toolset includes a python script that will do all the dirty work for you, a couple of example scripts, and also a very early version of a MUSE application that will let you test your syllable sets. I'm going to straight up copy the readme file here. If any of you have any questions at all, please reply with them.

    [quote:3v8737bf]This should help you generate syllable sets for MUSE. I'm releasing it early so the community can contribute sets while I finish the actual plugin. MUSE will actually ship with two name generator actions. One will load from these syllable sets, and another one will generate letter by letter from a set of rules you define. Right now I only have the syllable generator, and I need your help making syllable sets for it! I've made these sets as easy for you to make and test as I possibly can.

    To use the Syllable Set Generator, simply fill the text files with your syllables - either put each one on a new line, or separate them with spaces, the generator can detect either or. Then double click Syllable Set Generator.py when you are done. The python script will automatically populate syllables.ini with your chosen syllables in a way that Muse can understand.

    A prefix and suffix are attached to the beginning and end of the name if you have any defined. First appears first in a name, last appears last. Middle can appear multiple times, between the minimum and maximum middle numbers. Then of course you can have a name generated more than once between the prefix and suffix if you like.

    For examples of first/middle/last: Bo rai cho. El yn dor. Or you can just skip the middle one: Blood letter. Lake wood. Say you wanted to turn that into a modern city district - add a suffix: Lake wood Heights. There's plenty of flexibility here. It's all up to you to flesh it out. I'd appreciate if you guys would post your sets on the MUSE forum thread when you make them so I can get a repository going for the release of the plugin. I already have a TON of sets...but this is something that can only grow larger.

    If you are still confused, I have included examples in the Examples folder. These are example syllable sets. I found most of them on the internet. You can make your own and test them with the Syllable Set Tester, or you can find them on the internet and add them. It's up to you. The Syllable Set Tester is also in this folder. It is a very early version of Muse, and it uses syllables.ini to generate names from, so rename anything you want to try out and move it to this directory under that name if you would like to try something with the tester. I have elven male loaded by default.

    Anything you make and upload to the forum thread is automatically attributed to you. When you run the python script it will ask you for your name, which is embedded into the syllable set automatically as a comment on the top line. Any syllable sets uploaded between now and the release of Muse will be included in the original release.

    Download the Syllable Set Generator!

  • The grid seed is dependent on the root seed, and the data type "fudges" it a bit, so the hash itself isn't dependent upon the root seed, but after it fudges the grid seed, the result is. Technically. The hash is generated at runtime when you poll for data.

    With Void Runner I found myself defining a bunch of constant variables simply to reference the TYPE of data I wanted from the tree. So the start of every file would look like this:

    #define PLANET_EXISTS 0
    #define PLANET_TYPE 1
    #define PLANET_DEFAULT_COLOR 2
    #define PLANET_WATER_LEVEL 3
    [/code:2ab29jsv]
    
    ...and so on. These were then used to "fudge" the grid a bit, by modifying the Mersenne Twister slightly. The data type is to prevent you from needing to do something similar to this with variables in Construct - while at the same time making your data easier to read.
  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
  • GridTree.PollGrid(Name, X, Y, Data Type, Max)

    Sorry, but I'm somewhat confused at whats going on with the expression.

    I get name, and x,y... although an x,y for every x,y is blowing my mind, but Data Type needs a bit more of an explanation.

    The Data Types "BubbleX", and "ColorR", etc, are um, I dunno...

    Are they labels you made up, or are they undocumented system expressions?

    If they're plugin specific, that's fine, but users need some sort of reference to all of them.

    Thats kind of like loumu's dungeon plug using keywords like wall, and rock without an indication of of value.

    Also, on "BubbleX", isn't that a reference to an object being created within the same action?

    Thanks

    As far as X, Y's within X, Y's goes. That's the nature of the plugin. It's hard to comprehend sometimes, even for me. Just remember that when you Poll Grid you want to make sure that you've set your current position for every grid above the current one. You don't need to set your position on the grid you are polling, because that's what X and Y are for in the expression. Of course it wouldn't hurt to set the position anyway, but for large amounts of polling that might be processor intensive for reasons that would take a while to explain. That's why you can poll along a grid without setting position.

    The data type is specific to the plugin, but it isn't explicit. There is no list of them - you can make up any data type you like. You could set it to "badjfo9a8d789dabfiausd" or " "fnord" and it would still behave the same.

    What that actually is is a numeric seed for a type of data, but to make it easier to understand I had it accept strings. The string is then hashed and the hash is used to seed the data type. So basically it is anything you want it to be, as long as you always use that specific word to reference whatever you are trying to look for. Because that word/string/hash/value is used to modify the GRID seed - which allows you to poll for multiple things within the same grid. Does that make sense? Think of each point in the grid like a set of gym lockers, and the data type is the locker you are selecting. You are not drilling down into the next grid - merely specifying that you are checking out something different on the current one.

    So notice how I poll for R, G, and B, all within the same grid - at the same locations - and with the same maximum values. Since this is persistent - technically R G and B should all be the same number. That's what data type does. You specify a unique identifier for what you are looking for - and that identifier can be anything you like - and it splits your grid up into clones with different sets of data. Pretty nifty eh?

  • Players already have IDs, Raknet uses UDP I believe, and everything in that first paragraph is already in except for the host leaving thing. If the host leaves, the server dies.

  • This is awesome. So we an use this to generate levels?

    Yep, that is one use for it. In Void Runner we use it to do pretty much everything. We didn't call it GridTree back then, but this is the same code that we used for placing all of our sectors, planets, rocks on those planets, cave interiors, buildings...everything. I figured someone else would like to have access to that power, and GridTree was born.

    In the example cap you can generate a screen of colored circles, and clicking a circle will generate a screen of squares. The squares are unique to each circle. If you click the same circle twice you will get the same field of squares. It seems kind of simple until you realize that it is only taking a few events, and that all of this is being done without storing anything anywhere. It's all coming out of the root grid's seed. One number. If you change the root grid's seed, you will get a new field of circles...also with their own square "instances". This is a VERY abstract example of a world map and areas within that world.

    Each grid is two dimensional, but in the example cap I only use one dimension of each grid to show off how flexible it can be. You'll notice that "X Position" is always 0. So the second dimension isn't being utilized.

  • download link dose not work.

    First bug fixed! Hehe. Sorry about that.

Arsonide's avatar

Arsonide

Member since 5 Dec, 2007

None one is following Arsonide yet!

Trophy Case

Arsonide has no trophies yet!

How to earn trophies