jwilkins's Forum Posts

  • This is conceptually a little complicated so here's a screenshot of the project:

    So this project uses the Platform behavior in conjunction with the Solid collision filter/tags. You can see in the screenshot above that there are 7 "lanes" of collision/depth, and the player object only collides with solids tagged with the lane theyre in.

    This works fine, but we run into edge-case issues when switching lanes. Currently the game does the following to move lanes up down:

    1. First, it calls a function that checks if the position above/below the player in the lane theyre trying to move to is free.
    2. Next, it initiates a tween that moves the player either up or down lanes, and temporarily disables the lane collision checking while the tween is active.
    3. Finally, when the tween is finished the game updates the collision filter for the player object to check for collisions in the lane the player has moved to.

    If the player is standing still, this works fine. We run into problems when the player is moving left/right during a lane change, because during the tween the player continues to move left/right, and the position they end up at when the tween ends and re-initiates collisions could include a solid the player is now stuck in.

    Up until now I've been able to slightly combat this issue by checking directly above/below the player and slightly in front of them as well, but this has only lessened the frequency of this issue, it still occurs.

    I could of course stop the players horizontal movement during the lane change tween, but this makes movement really clunky and unsatisfying, so that's not ideal.

    Any suggestions on how to accomplish this would be appreciated, if I could predict the range of locations the player could end up at during step 1, then I feel like I could eliminate this issue, but I don't know how to do that or if there is a better alternative. Thank you!

  • dop2000 Thank you so much for linking this! I was trying to find any information about this issue but didn't run into that post. Turning worker mode off does seem to help, though I'll keep poking at it to make sure.

  • I recently "finished" upgrading my project from C2 to C3. This project involves a function based control mapping system. I.E. Players select a pre-made control type (Keyboard, Gamepad1, Gamepad2, etc) and then whenever a key or gamepad input is used, the game checks if that is the currently selected input and then runs the appropriate actions.

    For instance, pressing the attack Key or pressing the attack gamepad button will eventually lead to the same set of actions nested in a function.

    This was working perfectly, until I upgraded to C3. Keyboard controls are still as responsive as ever, but the gamepad controls regularly "eat" inputs in a really unsatisfying way. Having Steam open at the same time seems to make this worse, but even closed the issue still persists.

    Basically, sometimes you press a button and the action does not occur, or rarely it seems to duplicate (though this could just be my perception). This occurs both for button press and button release events.

    I'm doubtful the issue is performance, mainly because keyboard controls are unaffected, but also the game doesn't dip below 60FPS and rarely uses more than 30% CPU according to the debugger.

    Anyone had a similar issue before? Any idea what I should be looking for?

    I don't know if it matters, but I have not replaced my C2 Functions with the C3 built-in functions.

    Tagged:

  • I wasn't even aware of the image offset properties, thank you for bring those to my attention! I think I can come up with something suitably lo-fi just using those.

  • I'm developing a game that uses multiple lanes of collision for both players and enemies (similar to a beat-em-up PoV) that I have been migrating from Construct2 to 3. The plugin I used in C2 allowed for solid collision filtering as well as jumpthru object that also were filtered.

    I incorrectly assumed that the collision filtering system for C3 would also allow for this, but if it does I haven't been able to determine a way to make it work. I'd argue this is pretty frustrating since most projects using the jumpthru behavior are going to also make use of the Solid behavior, so it would only make sense they have some parity in features.

    Is this something that is planned for the future? I otherwise really like the simplicity of the collision tags system, but it's pretty disappointing to see this not extended to other collision behaviors.

  • newt Thank for the suggestion! I can envision what your proposing giving me a similar effect, however how would I guarantee the particle object covered the space entirely in a specific amount of time? The beauty of this plugin effect is that it did that for me.

  • I'm working on an NES/GBC style game with lo-fi visuals, for the most part I don't need to use too many effects. I recently moved this project from C2 to C3, and I had been using a 3rd party dissolve effect for weather transitions:

    imgur.com/gallery/mHUQvds

    Just focus on how the storm clouds dissolve in, they basically just populate in pixel-by-pixel (the amount they dissolve in is handled by tweening the dissolve value)

    Now I'm no good with effects, and I just need a lo-fi aesthetically consistent replacement for this effect. I'd like something as similar to this C2 effect as possible, but anything that doesn't mess too much with alpha or color changes I would be open to as well.

    Either a replacement effect, or any suggestions on how I can recreate something like this with C3 effects would be appreciated!

  • Hey everyone, specifically Eren and dop2000, I'm in the process of converting a C2 project to C3 and installed the 1.7 version of Eren's C3 runtime compatible litetween. It installs fine, but every project I try to use it in freezes at a black screen. Using the inspector I have verified it is Litetween, specifically I see these errors:

    Uncaught (in promise) ReferenceError: trim is not defined

    at lunarray_LiteTweenInstance.parseCurrent (577feb3e-94ff-462a-92d8-2355a9af4552:84)

    at lunarray_LiteTweenInstance.addToTweenList (577feb3e-94ff-462a-92d8-2355a9af4552:134)

    at new lunarray_LiteTweenInstance (577feb3e-94ff-462a-92d8-2355a9af4552:29)

    at Function.New (jsutil.js:9)

    at BehaviorInstance._CreateSdkInstance (behaviorInstance.js:2)

    at Instance._CreateSdkInstance (instance.js:6)

    at C3Runtime.CreateInstanceFromData (runtime.js:47)

    at Layer.CreateInitialInstances (layer.js:6)

    at Layout._CreateInitialInstances (layout.js:17)

    at Layout._StartRunning (layout.js:13)

    I know I could update to the Scirra built tween system, but this is a large, long term project that makes good use of Litetween, any chance you can take a look at this?

    EDIT: My apologies, I failed to check for a thread before updating this one. Currently this plugin only works in Classic Script mode.

  • Quick update, I did get this to work in the C3 trial, which is both good and bad news. Good in that I now know it is possible, bad in that I now have to determine if I want to take on the massive task of moving this project to C3...

    But I do have another question that can help me determine my course of action here. For anyone who has used a lot of the collision tags/filtering in C3, how is it performance wise?

    I ask because I assume that the Platform2 plugin is more efficient than the C3 tags, mainly because rather than tags it uses binary bit flags. I won't pretend to know anything about computer science, but to me this seems more efficient.

    As an example, my project oftentimes has layouts with 200+ objects, including 50+ solids, and 20+ platformer objects. It still manages to stay at 60FPS doing 80000ish collision checks a second. Does this seem in-line with the C3 collision tags system?

  • I have a long term project I have been working on for several years with C2 that heavily relies on the Platform2 plugin made by Colludium. I've been reluctant to move the project to C3 because I believe it would be a heavy lift to convert it, but I'm also not sure that the C3 Collision tag system even can cover my needs.

    Before weighing in, please take a look at this gif to see what I am doing.

    To further explain, my game utilizes up to 8 "lanes" of collision, platformer/solid objects in lane 3 only do platformer/solid collision events with other objects in lane 3. Enemies, players, and some other objects are able to move freely between lanes which updates their collision filtering to accomdate.

    Having looked at the documentation for the collision tags in Construct3, I'm not really sure it's robust enough to handle this, as it appears that you can't have say, multiple enemies/players (Platform objects) filtering for multiple Solids, or am I misunderstanding this system?

    EDIT: Should also mention I did try to get this working in the trial version of C3 but couldn't get it to replicate what I was looking for.

    Tagged:

  • Having a lot of trouble with this. I'm building a pretty bog-standard dialog system for an RPG. It reads text from an array based on keys (I edit the array as a JSON in a separate program I've built and then export that, then I load the JSON into an array at the start of the project.)

    The dialog system appends text to the front of the spritefont object based on an index so you get that simple text filled-in-one-letter-at-a-time thing that looks nice.

    This works pretty great, until we fill up the spritefont object, because what I would like is for the system to "erase" the top line of text and the continue to append as normal, and I cannot seem to figure out how to erase just that line of text before moving forward.

    To slightly complicate matters a bit more, I am trying to build this in such a way that I don't use set values for things like character height, because I may try localizing it and using different spritefont objects for other languages. As such, it needs to accommadate any number of character heights/widths.

    Any suggestions on this issue would be appreciated!

  • As a quick note for anyone that finds this post in the future, my attempt to set a secondary speed limit check before running the direction input with a variable didn't end well.

    This works fine when the player is on the ground, but if the player is in the air, the moment they hit the secondary speed limit they cease almost all horizontal movement, and drop like a stone.

    I guess this makes sense when you think about how momentum in the platformer object is applied when jumping, the moment you let go of the directional key your horizontal movement is cut drastically, and re-pressing it before you land doesnt net you the same horizontal movement bonus.

    Cut your losses and update the Max Speed value :/ it's not elegant, but it will of course work.

  • I would use option 1. It's the safest option, because mixing Platform with other behaviors or directly changing its position may cause different issues.

    Use Timer behavior to reset maximum speed after a knockback.

    Start a Timer for 0.3 seconds, set max speed to 200, apply vector. On Timer event set max speed back to 50.

    I played with my bottom option a bit more and got it to work better, I have a "MaxWalkSpeed" variable that is checked against the platform objects speed, if the player is moving slower than the MaxWalkSpeed value, the input doesn't go off. This prevents the player from moving themselves faster than the walk speed, but lets me set the actual platform Max Speed to a much higher value.

    I haven't tested it as rigorously as I'd like though so I will keep your idea in mind in case this ends up having too many issues.

    I'm honestly a bit surprised this wasn't considered when the platform behavior was developed, SO many games hit players with forces that exceed the speeds of their characters movement, why there isn't a built in option to do that is beyond me.

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • So, firstly I need to note I am not using the built-in Platform behavior of Construct2, rather I am using the "Platform2" behavior by Colludium, which has mostly the same actions and events, but includes collision filtering. This is going to factor into why I cannot use the Bullet behavior to accomplish my goal.

    So my game is a brawler (Think River City Ransom) and I want attacks to register knockback. i.e. I smack you with a club, your horizontal speed gets updated to move you backward.

    This almost works out-of-the-box, except for one issue, the knockback is limited to the object-being-knocked-back's MaxSpeed value. I.e. I smack you for 200 knockback speed, but your maxpeed value is set for a measly walking speed of 50, thus throttling that big smack to a measly whiff.

    There are a couple of obvious ideas that come to mind that I have tried so let me explain why they won't work:

    1. Update the MaxSpeed value on hits: This is a no-go. How do we know when to reset the MaxSpeed to walking speed? We could wait until the player stops or goes slower than the walking speed, but this takes control away from the player during these moments when they'd rather "lean in" to the momentum or push back against.

    2. Throw in the Bullet Behavior and update that instead: I tried this and it worked really beautifully until we collided with the Solid2 (Platform2 solids) objects, it clips through and once the bullet behavior stops moving, it traps the character in the solid or jumps them to the top.

    My last option is to run a check before the players Platform2 Control Input fires, to see if they are exceeding a "walkspeed" local variable. This would effectively be a secondary MaxSpeed value, and then I would set the MaxSpeed to an amount above what I expect the highest knockback value to be. In practice I am not happy with the results of this, so I'd love to hear other suggestions.

  • Oh wow, I don't know how I never noticed that picking condition before! I have a lot of animations I will have to set up that image point for, but that's minor, I think this will work, thank you!