Silent Cacophony's Forum Posts

  • Nice. Metroid has always been at the top of my favorite videogames list, and this game looks great to me.

  • That's cool. A plugin will be very nice to have.

    I remember running across Jamis Buck's generator a few years ago when I first became interested in writing a roguelike game, but I never got around to doing it... It's probably this that gave me the idea that I used on room placement in the example that I posted recently, though I think this one was a bit different in it's implementation. I'll have to take a look at this one again.

    I've just looked back at an incomplete dungeon generator that I wrote in python a couple of months ago, and it looks extremely similar to this. I didn't implement 'smart' room placement on that, and didn't create any doors or content within it, yet.

    Good job with this, as I'm sure quite a few will find it to be useful.

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • if he only needs store the objects python index temporarily this should work fine, which I assumed was the case given his bob example

    however, if he needs to store many instances long term, you can already manipulate large arrays of objects using python with s

    True, it would work fine as long as you don't use the reference past the point that an instance may be destroyed, which could be never in some cases. This would be great for setting up initial values, as you mentioned.

    Thanks for the tip on your S plugin. I had been using python for my complicated data structure needs. That comment just opened my eyes to some new possibilities. I'll be checking S out, soon.

    Seems as though one (or both) of those two solutions pretty much covers it, hopefully.

  • The normal return value of System.Create is None, which is python's null value.

    All of my past attempts to store a direct, persistent reference to a single instance of a multi-instance Construct object have failed. Many of the python methods for Construct objects don't work properly, if they are even there, and work at all. It definitely needs some work.

    As far as the index number goes, they are practically scrambled every time an instance is destroyed, so they can't be counted on to point to the same instance under all circumstances. Here's the output of a quick test with my PyShell.cap:

    >>> ls = []
    
    

    for i in range(5):

    ls.append(System.CreateByName('Sprite',1,i*36+16,16))

    ls

    [None, None, None, None, None]

    for i, s in enumerate(Sprite):

    print i, s.uid

    0 1

    1 3

    2 4

    3 5

    4 6

    5 7

    Sprite[2].uid

    4

    Sprite[2].Destroy()

    > for i, s in enumerate(Sprite):

    print i, s.uid

    0 1

    1 3

    2 7

    3 5

    4 6

    Sprite[2].uid

    7[/code:4py0sf3d]

    I'm afraid that this affects your above plugin's function as well, Lucid, though I really like the idea.

    Not saying that there isn't a better way that I haven't found, but the only way I know of to reliably reference an instance is to store it's uid, as you might do with events. Then, you can use something like so:

    def rotateInstance(obj, uid, deg):
       for i in obj:
          if i.uid = uid:
             i.angle += deg[/code:4py0sf3d]
    
    ... which kind of sucks. I keep hoping that I stumble across a clever way to eliminate that loop. 
    
    That said, I still find Python quite useful for many things in Construct, but you may need to interface it with normal events for some things. Construct's function object can help with that.
  • Other than using the predictive aiming option with the turret behavior, there is also the Linearaim system expression. There is an example of it under New -> New template/example -> Aim AI Tutorial in Construct, as well as a link to an old thread about it in it's description on the wiki.

    They both seem to work the same, as far as I can tell.

  • Nice. It worked quite fine for me, with basic on-board Realtek AC'97 audio, though I think the sounds in general will need a bit more polish to them. I found the footstep sounds to be a bit distracting (maybe too loud or distinct), and a couple of them sounded noisy/distorted at the end of the sound.

    I really liked the graphic design of this. I think it looks great. I'm envious of that talent.

    I haven't gotten past a certain enemy with an affinity for percussion, but I think the player character will either need more martial arts ability, or weapons, if they are not already there. I envision this guy with a gun of some sort.

    Speaking of that enemy, I guess I'm getting too slow in my middle-age to dodge very well, or the things that need to be dodged could be a tad slower.

    Very nice demo. I hope the project proceeds well for you. Now to see if I can get farther...

  • I've prototyped a simple roguelike dungeon generator in Construct, and thought I'd post it for informational purposes. I'm looking into different methods, but I like this one so far.

    I'd most likely implement it as pure data, without the visual creation, if I use it, since it can be quite slow with some settings. Also, the way that I implemented differing dungeon sizes is suboptimal, and can cause problems because of object scaling. I intended it for 40 x 30, and 80 x 60 sizes, though others may work fine, too.

    It can be easily serialized into an array, since I use strict boundaries on the size.

    It uses a simple scoring system to place rooms, with a user-set number of attempts, in order to avoid overlapping rooms. If those, or speed, are desired, use 1 or another low number.

    It digs corridors between rooms to make sure that all are connected, with a chance to wander around on the way there. This can be set to get quite different results. The more wandering, the longer it takes to create, though.

    Download the .cap from the attachment at the bottom of the post. This requires Construct v0.99.92 or later.

    Here are a few results with different settings:

    <img src="http://dl.dropbox.com/u/5868916/Images/shot1.PNG">

    <img src="http://dl.dropbox.com/u/5868916/Images/shot2.PNG">

    <img src="http://dl.dropbox.com/u/5868916/Images/shot3.PNG">

    <img src="http://dl.dropbox.com/u/5868916/Images/shot4.PNG">

    <img src="http://dl.dropbox.com/u/5868916/Images/shot5.PNG">

  • Wow, dungeon generators are popular lately.

    It doesn't run for me, either. Same error as Minor, and I'm using 0.99.92.

    It had some looping that I didn't understand at the beginning of the event sheet. Such as in the very first event:

    + System: Start of layout

    -> System: Stop loop "filly"

    -> Wand: Set X to Tile.width/2

    -> Wand: Set Y to Tile.height/2

    -> System: Start loop "fillx" and run 1 times

    I'll have to look into the start and stop loop thingies there, as I've never really noticed those before.

    I've recently been using groups in a very similar way that you did, for flow control in tick-based loops and such. It works really nicely.

  • I agree on the forum width. There is a large left and right margin on my 1280x1024 display. I'd estimate that they take up about 37.5% of the width of my screen, combined. I've looked for a forum preference to change that, to no avail.

    Chat? Meh. I'm not much of a chatter. I imagine some would greatly like it, though.

    Contests, for me, seem good because of the fact that they encourage users to get something done. I think that we'd see more examples of what Construct can do, with contests. Thumbs up to that.

  • > Here's a way to do it with one global variable and two events:

    >

    + Sprite: Pick closest to: MouseX, MouseY
    > -> System: Set global variable 'notthis' to Sprite.UID
    > 
    > + Sprite: [negated] Sprite: Unique ID is global('notthis')
    > + Sprite: Pick closest to: MouseX, MouseY[/code:3ctczbur]
    > 
    
    I did that myself in the first place but it doesn't work, mostly because it still pick closest to mouse.x even with first negation event, its like however i decide to outrule the first one from picking it, it is still picked.
    

    R0J0hound's example does work to pick the second closest. The second pick closest condition cannot pick the actual closest object, if you set the events up correctly, because it has been excluded from the selected object list that the second pick condition applies to.

    I made a small example to demonstrate his method. I added a 'On left mouse button down' to activate it, just to show how you may have to group the events as sub-events somewhere in your event sheet, based upon some other condition.

    http://dl.dropbox.com/u/5868916/SecondNearest.cap

    It's made with v0.99.92

  • fps:36

    threads:1

    cores:1

    Advanced Micro Devices

    1799mhz

    and Nvidia GeForce 9500 GT 1Gb

    The steady fps was 105 for me.

  • I think that the Array, Hash Table, and INI objects would all be fine for such a thing. They all support reading/writing to disk for persistence.

    Since .ini files are quite commonly used to store options and such anyway, I made an example using that. It's hard to put it in the same context as it would be used in a game, but the principles of what you'd need to do are there.

    http://dl.dropbox.com/u/5868916/LevelStatus.cap

    Check out the event sheet to see what it does.

  • Some things that I can think of:

    • Multi-platform would be good, even if it's only the products of the application.
    • I do not know much about this part, or if the current one works this way already: A framework where the scripting support is as tight and transparent as possible. If possible, when creating plugins, the developer does not usually need to manually provide scripting access to the functionality provided by the plugin. It's generated automatically, ideally. Perhaps access to behaviors and such from python could be like player.Platform.XSpeed = 200.
    • tulamide has a good point about data types. Construct could use more support for those, in general, but user-defined would be very handy. Something similar to simple classes or structs could be very handy, even if just for the namespace organization. Arrays could use some more methods, like a simple sort, find, and a push and pop able to make easy stacks or queues.
    • The ability to store direct references to instances of objects, and manipulate multiple instances of the same object more easily. For example, let's say that you have one object that needs to keep track of two (or more) of an ever-changing bunch of instances of another object. You need to compare or manipulate both (or all) of those instances in some events.

    The only way that I know of to do this is to store their UIDs in variables, and put the object in question into two (or more) families so that you can pick and reference more than one instance of that object in an event.

    Perhaps variables could store references to instances, or a system function Object(uid) could be used as an indirect reference, or the objects could simply be indexed in a useful way, like "Sprite[index]....." I'm thinking that the index would need to be UID again, though, since objects are often spawned/destroyed a lot, making indexing problematic.

    • Conditional branching and functions need to be more powerful, IMO. ELSE and OR need to work well under all circumstances. I suppose that 'OR' could be replaced with an 'If any of the following are true:' condition if it seems easier to use.

    I like the current function object pretty well, though I dislike the whole 'add parameter' thing. I always call them as expressions. They could use some support for local variables. Not sure how I'd implement that, though.

    • Speaking of local variables, more variable scopes could be useful. Groups are a unique and interesting concept in Construct. They can be used as a sort of conditional branching solution with the ability to enable and disable them. I think that they could also use local variables. Perhaps there are some other improvements to groups that could be made to make them even more useful.

    A common want that I've seen is the ability to be able to reset a layout to it's initial state, completely. This can be problematic with global variables being used quite often and such. Perhaps having local layout variables could help with this, so that a layout can be 'reloaded' to an initial state more easily.

  • I've found two locations where Construct leaves files:

    C:\Documents and Settings\USER\Local Settings\Temp

    C:\Documents and Settings\USER\Application Data\Scirra

    ... where USER is your username in Windows. Both are hidden folders. If you're not familiar with those, they can be viewed by setting the option in Control Panel -> Folder Options -> View.

    The first one had a lot of folders with many files in each. The second has a few that are involved with previews and such.

  • Change the chicks, leave the vrrrm, I say.

    Seriously, every time I see your avatar, I wonder who that is. I seem to remember her in a movie with fast cars or motorcycles. Dunno if I'd recognize her with different hair, though.

    I like the sig style, but I guess you could do something similar...