brushfe's Forum Posts

  • (I'm not sure whether to post this on the Suggestion Platform or here, since it's a Timeline suggestion but Animate seems like it has its own suggestion platform here.)

    Can the timeline work in frames as well as time (or instead of time?)

    Games that have specific actions at specific sprite frames (fighting games, etc) and 8/16-bit sprite games would benefit greatly from building by frame vs 0.016 of a second. See attached for a quick example.

    Or is this is already possible and I've missed it?

    EDIT: On the topic, switching "Steps" to "Frames" would be a good idea, especially if you're getting into the animation world with the timeline.

  • Hey, congratulations to you and the team! This was a ton of fun! And a particular shout-out to how well you balanced the difficulty. Every stage felt very well crafted, the progression of skills & tests was great, and the controls were tight. When I died, it never felt like the game's fault, which is a great sign of a fair challenge.

    That last room was a killer, too! But 355 seconds and 15 deaths later, I'm certainly looking for more. The only thing I'd suggest is looking at the separation between platforms and background; the grey-on-grey was tough sometimes, especially when you're concentrating - I was surprised to hit a few walls.

    Excellent job to you all!

  • One more suggestion similar to Tarek2's idea - I find the EasyStar behaviour is phenomenal for tile work, distance, etc. If you apply the behaviour to your tileset, you can use it to find a path between the origin and target tiles, and the calculate its length using the "PathLength" property. I think it uses the a* that WackyToaster mentioned, too.

    construct.net/en/forum/construct-2/addons-29/behavior-easystar-js-96215

  • There's a property in the Tilemap called "PositionToTile". Check out the Tilemap entry in the manual, there's all kinds of important techniques you can use to go back and forth between Layout and Tilemap coordinates.

    In your screenshot, if you use:

    Tilemap.PositionToTileX(Player.X)

    Tilemap.PositionToTileY(Player.Y)

    That will use the Tilemap tile XY instead of the Player's layout XY.

  • You do not have permission to view this post

  • This looks like it has a lot of promise! I hope you continue working on it.

  • It's so great you bring this up! The typewriter plugin is exactly the kind of thing C3 should do so well. It's something so many types of 2d games use in different ways, but it is missing some essential features.

    I'd added my thoughts on what's vital in this post:

    construct3-21h2.ideas.aha.io/ideas/C321H2-I-38

  • Sure thing! The important thing to remember about Event Sheets is that they're processed over and over, from top to bottom, in a never-ending loop (and dozens of loops per second).

    In your screenshot, for example, if the user is holding "down", the event in the red box is triggered every tick. Meaning around 60 times per second, the "crouch" animation is being played - from the beginning of the animation, which is why you're seeing it stuck on the first frame.

    In the screenshot below, you can see the "Duck" animation only starts playing if it's not playing already. So the user can hold the down key as long as they want, but the "Duck" animation will only play once, and play all the way through.

    Let me know if this answers your question!

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • This is great! The concept is awesome and the levels are really cool — they feel like Super Mario World levels in a pinball game.

    I really want to spend more time with this and finish it!

  • I think you can simplify your events to have more dependencies, rather than a series of individual events.

    If you use what arrow key is being held down as the main condition, you can modify the actions a little easier.

    For example, below, you can see if the right arrow is being held down, we first check if the command key is held down, and then set the animation accordingly.

  • It looks like you're starting the animation over every tick.

    Your code says "Every tick, if down is pressed, start playing the crouch animation at frame 0."

    I think you only want to play the animation if it's not already playing. Try adding an "is not playing crouch" to your sub-event next to "is on floor".

  • That may be because pathfinding -> find path is one of the "asynchronous" actions.

    I believe these few special actions are designed a little differently. Calculating a path can take anywhere from one tick to five seconds depending on the layout, CPU speed, etc, so it needs to run in parallel or the program will hang until it's done. Each sprite looking for a path may take different times to find its path, or the same time.

    So it basically has a "for each Sprite" built into it. The timer trigger does not, like most triggers. So on a tick where multiple identical timers go off, your single timer trigger will be considered enabled, and it'll go off a single time.

    If all this is true, you should always use a "for each" condition on synchronous actions (like timer). Try putting a "for each sprites" condition on your timer trigger and see what happens.

  • There are much smarter folks on here than I, but I think conditions will pick a random instance from all possible objects that meet its criteria.

    So using For Each is a great way to ensure that every object that either triggered the condition or meets the condition are picked for the subsequent actions.

    I use the Browser log as an quick way to see what's getting triggered, especially when a function gets called. You can also put browser logs inside for/repeat loops, if you want to track what's being done within each loop. It's a really handy tool!

  • If I understand your question right, you can test this (and many situations like it) easily using the browser object.

    Try adding the browser object to your project. Then add the action Browser -> Log to your "on path found" trigger, and just log something like "path found“.

    Finally, run your project in a web browser and press F12 and view the console. You'll see it will have logged "path found" for every time that condition triggered.

    It's a quick way to test if your code is running as intended. In this case, my hunch is you'll need a "for each -> enemies" condition to your "on pathfinding path found" trigger, but this test should tell you for sure.

  • The problem is the same, looking backward or forward. Whatever time was spent, or will be spent, developing Animate could've been spent on C3.

    The expectation isn't that 10 years of features get quick action. We've all been told that Scirra's a small team, and that new features and improvements take time, and that's true. But now, any progress will take even more time—in exchange for an animation program.

    A chance for significant ROI is good for Scirra, and it's fun to experiment. But for people paying for C3 every month, excited and hoping for more C3, you have to understand why this will be problematic. We're getting less dev time on C3 and funding a gamble many won't use.

    But maybe we've got that wrong? If you can show people how this won't affect C3 in any way, as you said, I think it would go a long way.