Ashley's Forum Posts

  • In general, if you run in to a problem, please file an issue following all the guidelines. If you are able to provide all that information, frequently issues can be resolved within minutes. Otherwise it is significantly harder and can take weeks or months to establish the problem.

    It is also particularly helpful if you can test every beta release from the previous stable release to the latest stable release, and determine which specific release something stopped working in. That usually narrows down the scope of potential changes from months of work to just a week's work.

  • Due to a known outstanding issue with WebView2, we've implemented a workaround for the time being using GameInput to read gamepad input with Steam exports. See the section on gamepad support in the Steamworks plugin documentation - the tl;dr is you need to run the GameInput installer as part of the game install process. Once you do that it should have broad support for all kinds of gamepads, as GameInput is a superset of all prior APIs (XInput, DirectInput, Raw Input, HID and WinRT) and can read gamepads supporting any of those technologies.

  • The ideal outcome is that my mouse pointer sprite is positioned exactly where the cursor physically is

    I don't believe this is actually possible with any technology. IIRC, the system mouse cursor is rendered with a special low-latency hardware overlay that bypasses much of the existing rendering system to allow things like continuing to respond when the app/system is busy/hung. On the other hand any app on the system itself will go through the usual GPU rendering pipeline, which usually includes something like double-buffering to ensure a smooth display, but at the cost of some extra latency. This is basically a consequence of how modern operating systems are designed - it's nothing specific to Construct or web technology.

    The only way to display something truly at the mouse cursor position with no delay is to set the cursor image as R0J0hound suggested. Anything else at all on the system will be subject to latency.

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • Construct has a time-unlimited free edition you can use as much as you like. You can do small scale experiments and learning projects within the free edition limits. The pricing is around the same as a Netflix standard plan, which I think is reasonable.

  • It would probably still put us out of business. On the whole if people don't have to pay then they won't. If you give people a free option they can use instead of paying, then naturally a lot of people will just choose that and then we potentially lose out on a whole load of sales and then we might not be able to sustain the company.

  • In particular, I’ve noticed that when I double-click on the desired spot in the code, the view in the editor always jumps all the way to the top, to the first line of the script.

    It shouldn't be doing that - perhaps it's a bug. If Construct isn't doing something right, please file an issue.

  • Are you sure it's the mouse polling rate and not just frame latency, which would add the kind of delay you describe? The lower the framerate the higher the latency from input to rendering, and the higher the framerate the lower the latency. Construct uses high-frequency polling specifically to reduce the input latency (via pointerrawupdate) and I just checked that on my system, even though the display is refreshing at 60 Hz, mouse input is being received at ~125 Hz.

  • That would most likely put us out of business.

    I think we're unique in the industry as being one of the only independent, self-funded game development tools. We're not backed by a billion-dollar company or investors. It gives us the freedom to avoid being obliged to do things like ram unnecessary AI features into the software, but we do need to make a living and pay our bills.

  • Press F12 and check the browser console for a more detailed error message - that might help identify the problem.

    Also try disabling any browser extensions you have installed, clear your cache, and try again. Often problems are caused by buggy browser extensions interfering with Construct and breaking it.

  • All software, commercial and otherwise, has bugs. Even software with extremely rigorous testing procedures and thousands of professional testers still have bugs, and still need to accept bug reports from users to make sure every problem gets sorted. Just look at Windows, Chrome, Safari, etc. Accepting issue reports from users is industry standard practice - in fact not accepting issue reports from the public is a negative signal for software quality in my experience (see: graphics drivers).

    The problem we have with Construct is you can make very large and complex projects with it that are particularly time-consuming to investigate, and we're a small company with limited resources. In exceptional circumstances we will try and investigate user's full projects, but it is usually infeasible: there is just so much going on that there is no way to identify how a bug could possibly have happened. Reducing the project ourselves is possible, but extremely time consuming, and usually takes far more time consuming than the original developer doing it. I don't think people appreciate just how difficult it is to be handed a vast project that you didn't make yourself. You start not even knowing how to play the game in question. It is even worse if the issue only occurs on level 25 which takes an hour to reach and involves difficult gameplay challenges before the issue occurs. You can try and cheat, but often making changes to a project you didn't make just breaks it because you don't understand it; then sometimes the issue doesn't reproduce after you made a cheat anyway. You can try and strip it down but it can take hours of examining the project to even know where to start. Then like I say often the end result is that you ultimately discover a mistake in event 4520 action 15 that actually caused the problem. If it took a week to reach that point, it will have meant missing an entire beta release of other improvements that could have been made in that time. We could hire professional testers to take this on, but in my view that would prove a very expensive and time consuming thing to do that produces minimal results, making it hard to justify. So I'm afraid the status quo is probably the best we can do for now.

    FWIW, we are often in the same boat when we report bugs to other developers ourselves. For example if I report a bug in Chrome, they rarely accept a reproduction using the entire Construct engine for the same reasons - it's too time-consuming to investigate and too frequently does not actually come down to being an actual bug. It can take significant time to strip things down and that can be frustrating when you're busy, so I totally appreciate that. However it's basically how things get done in the software industry. A good bug report with a minimal repro can sometimes literally be fixed in 5 minutes. A whole project with a vague report of an occasional issue can take weeks of work and still come to no resolution, so it's not generally something that is done in the industry - although if anyone does it, it's trillion-dollar multinational corporations with tens of thousands of staff who can afford to have a member of staff work on a possibly fruitless investigation for a few weeks. So yeah, sorry, I know it's hard reporting bugs, but it's basically the only way to realistically get things done.

  • What export option are you using? What project and export settings have you chosen? What device are you running it on? What are you comparing it to?

  • I made heavy use of the No Save behavior to keep things simple, but I kept running into issues. A lot of them were fixed, but I keep finding more, either bugs, edge cases, or weird quirks.

    With a large and complex project, I have to ask - how do you know these are not logic issues with your project? It is difficult to rule that out, and I do think it's sometimes unfair to blame Construct for things you can't prove are definitely it's fault - especially when we frequently deal with bugs along the lines of "Construct is not handling XYZ properly!" which then turn out to be a problem with the user project or some other kind of misunderstanding instead. From my point of view the savegame feature is a heavily used feature that's been used by thousands of projects over many years, and there are currently very few known issues with it, which is usually good evidence it's actually pretty robust. One of the reasons we have our bug report guidelines is you need to follow that to prove it really is a problem with Construct, and not yet another case of a misunderstanding or project logic issue. I know that can be a pain, but it's generally the only way things ultimately get sorted out. And if you can't narrow it down, that can be a sign it's not actually a bug in Construct.

    If you make your own save system, it's also likely to run in to all sorts of bugs and issues that Construct's save system has already sorted. For example saving and loading the relationships between objects is particularly tricky. Take two instances A and B, with B being a child of A. If you load A and B doesn't exist yet, you can't set up the hierarchy; if you load B and A doesn't exist yet, you can't set up the hierarchy. You have to have a phased approach where you load A excluding hierarchy, load B excluding hierarchy, then afterwards when both exist, restore the hierarchy relationships. There are dozens of awkward cases like this through the savegame system. It's entirely possible that if you try to take this on yourself and re-do all the same logic Construct already handles in the savegame feature, you'll actually end up with a more buggy and inconsistent system - another reason it's better to focus on the built-in feature.

    Also, just to confirm: is the Drawing Canvas object not saved by the system?

    Drawing Canvases are saved, just not the pixel data inside them - so just the number of instances, their positions, sizes etc. Saving the pixel data inside them is actually quite a tricky feature to design. Should it save a smaller lossy image format, or store it uncompressed? If lossy, then savegames degrade the quality of images, which may end up looking bad. If uncompressed, a HD image is about 8 MB, which could be solely responsible for making a savegame go from say 10KB to 8 MB; if you have cloud saves suddenly that's a big, slow save using lots of storage quota. It'll get worse very quickly if you have more Drawing Canvases. Then in some cases if you do something like procedurally generate the pixel data, it may be entirely unnecessary anyway. Drawing Canvas has other features to save the pixel data, so the idea is if you want to do that, you can opt-in and save additional data alongside the savegame.

    Updating the game and loading a savestate from an old version sounds extremely iffy, especially if the loaded objects have changed for whatever reason

    Construct's savegame feature is actually specifically designed to handle this gracefully. Everything internally relies on fixed IDs (called SIDs - serialization IDs) that are robust even in the face of renaming or moving things. You can rename all your object types, layouts, families, instance variables, behaviors, etc. and savegame data will be restored exactly the same. Data for deleted objects is just ignored, and newly added objects since the last savegame are not restored as there isn't any data for them. So it should in general just work. I don't recall anyone having issues with updating a project using savegames in the past few years, so from my point of view that seems to all be working. It's also another thing you have to think about if you invent your own savegame system. Will it be robust if you rename an object or a variable? Are you tracking things with fixed IDs to make it robust? It seems to me another non-obvious thing that you might get wrong if you try to make your own savegame system, and then you've invented a worse system that you are more likely to break.

  • Construct should fall back to creating a WebGL renderer if there is an error creating a WebGPU renderer.

  • That sounds like the known issue mentioned in the OP:

    Note however due to a Safari bug WebGPU rendering is glitchy from v26.0-26.3. It should however work correctly from v26.4+.

  • By default Construct layout co-ordinates line up with CSS co-ordinates. So unless you apply some sort of scaling to the layout/layer yourself, I think the safe area size should just be used as-is.