Ashley's Forum Posts

  • I want to encrypt messages before sending them on websocket.

    Connect to a secure websocket (wss: - the WebSocket equivalent of https:), and this happens automatically, so you don't need to do any encryption or decryption yourself.

    If you do want to write cryptography code in JavaScript for any other reason though, you have the full browser built-in Web Crypto API at your disposal.

  • I don't think the other crashes posted here are related to the original one, as they have different messages.

    Usually it's impossible to tell what happened from just a crash message. This is why we ask that issues are filed here following all the guidelines, as we need all that information to be able to help.

    A good thing to try is also to disable any browser extensions you have installed, as sometimes those interfere with Construct and cause problems. If you find a browser extension that causes a problem with Construct, please report the issue to the browser extension author.

  • You can't change the FOV in Normalized Z axis-mode, because it's mathematically impossible.

    Normalized mode means that for a 100% zoom, the camera is at Z=100 (the "default camera Z"). To achieve this with any viewport size, it adjusts the FOV to meet these requirements. If you changed the FOV then Z=100 would no longer correspond to 100% zoom, and so you're not using normalized mode any more.

    This is why you need to set the Z axis scale to Regular in order to change the FOV - which in turn changes the default camera Z (which you can see in the 3D Camera object's properties).

    Normalized mode is designed for 2D games, so my advice is if you are using any kind of 3D view with the 3D Camera object, then you should switch to regular mode.

  • I would guess that's a security restriction of macOS that comes back automatically if the app is ever changed. I'd recommend saving data somewhere where permission is not required, such as the app data folder on Windows (not sure what the equivalent is on macOS though). The Documents folder is actually a very security sensitive folder as in theory an application could read all your personal information and upload it to the web, hence the prompt.

  • Adding such a joint was only like 10 lines of code, but it was never added to c2 despite a fair number of people asking for it.

    IIRC, this was because the situation was something like: we were using an asm.js build of Box2D physics based on an older version of Box2D that did not have support for prismatic joints. By then asm.js had fallen out of favor and WebAssembly had taken over. So upgrading the physics engine meant more or less a full migration to a whole new technology for the physics engine, including figuring out how the new toolchain works, and going through the inevitable round of bug fixes for a few months as we figure out a bunch of unexpected breaking changes that came from the technology upgrade. And as ever we're being asked for 100 different things at the same time, so it just takes time to get round to that and take on a big upgrade job like that.

    This kind of thing is why I wrote the blog post The unexpected complications of minor features, which basically argues that there is no such thing as a minor feature when you work with complex software like Construct. I think most of the time when someone thinks something is straightforward it is actually much more complicated than they think. But people still see things like this and think "Scirra are lazy" or "they just don't care". I don't really know what we could do to mitigate this, as often we don't know what the complications are until we start the work, so we can't always explain why things will take longer than expected ahead of time. All I can do is ask for people's patience and please read that blog post to understand the kind of thing we routinely deal with when implementing "minor" features.

    Basically, its seems like Scirra recognizes the need for engine tweaking to support behavior interaction, but is adamant that isn't how you should develop

    Let me explain what went wrong with tweaking the engine code:

    • Some third-party developer adds some plugin that tweaks some internal code to do some interesting feature and releases it.
    • The plugin gets wide adoption over time.
    • Eventually - perhaps even years layer - we come to upgrade that part of the engine, perhaps to add some major new feature, optimize it to be 2x faster, or some other significant improvement. We have no idea that some plugin manipulates this code, so in the process of changing everything, even though we check Construct officially remains backwards compatible, we break all projects using the plugin.
    • Users update to the latest version of Construct and see their project is broken. Who do they go to? They contact us and complain. Often they get the impression we're incompetent as in their view, we can't even update Construct without breaking everything. Cue angry customers, refund requests, claims they'll leave Construct forever for other tools, etc. Sometimes it also results in corrupt projects, and for years afterwards we end up answering occasional support requests where someone has a corrupt project, and often it's extremely difficult to help them recover their work. (And a surprising number of people don't keep backups.)
    • Meanwhile by then the original third party developer may left the community and have no idea what happened. Sometimes they even blame us anyway, claiming we're incompetent and should have kept backwards compatibility.

    There are other ways this can go equally wrong, merely by tweaking an action in an official plugin or behavior and releasing it.

    In other words it's a total disaster for us and our customers, and often the third-party developers think it's fine, or have no idea anything ever went wrong.

    The solution to this is: define and document a public API with specific methods that you promise to support indefinitely. Then we know the feature set we have to support when making changes. This is the standard and widely accepted approach in the software industry.

    Of course if the public API doesn't do quite what you want, it can be a tough situation to be in. But this is still a much better situation overall. The inability to cause compatibility disasters is a feature, not a bug.

    I am well aware that tweaking things to suit your specific needs is important. However it must be done in a way that avoids compatibility disasters, or the entire development of Construct could descend in to a development hell where it's impossible to make improvements to the product without causing chaos.

    We do have multiple ways to customize things. For example most behaviors have the ability to directly manipulate the movement vector. This is sufficient to add extra features like wall-jumping and climbing to the Platform behavior. If you need even more advanced features, perhaps you run in to some fundamental limitation of the behavior itself. But this is also why we have the custom movement behavior, which provides the kind of basic building blocks things like the Platform behavior are made from, as well as coding features so you can custom-code things like in any other engine, and also a full addon SDK so if you wanted you could even come up with an entirely new form of a Platform behavior (distributed maintained separately from the official one, so avoiding compatibility problems). So I think there are a range of options for customization already there, with a sliding scale from works-out-the-box to custom-code-everything. And none of those are responsible for major compatibility disasters. I think it's part of our job to be responsible in ensuring people can't do things that end in disaster, so even if it might be frustrating that you can't do something like tinker with a random part of the internal engine, please know that it's for a good reason, and we're trying to guide people to better alternatives.

  • The plugin SDK is mainly designed for integrating third-party services, precisely because there are so many possible services out there, and even some individual third-party services have a huge feature set, there's no way we have the resources to cover it ourselves. So we made an SDK so other developers can integrate all that stuff without having to wait for us to do it. I guess some people want to tinker with the engine internals, but that type of thing has historically caused awful, horrible, nightmarish compatibility problems, so it's something I would specifically discourage. (And often I think the things people want to do are already possible, just if designed in a different and more maintainable way.) Anyway if there's specific and feasible suggestions for the SDK, they can be posted to the suggestions platform... but the key word is "feasible" (if your suggestion is "add an editor SDK so we can customise absolutely any part of the editor from plugins", then file that along with "make a full 3D engine").

    As for an insiders program... it's actually very complicated - the release system is a fairly big and sophisticated bit of server-side software, and it would probably be a lot of work to create another release channel that only certain people can see. But I don't really see what that gains us anyway - we already release things to the beta channel as soon as there's something worth sharing, or if we want to ask the community about stuff, we do it in the forum. So everything we would do in an insiders program, we basically already do but in public, involving everyone. So we get more feedback, and avoid the political problem of some people feeling left out if we don't pick them for the insiders channel.

  • game maker ... the GML programming language

    Umm... welcome to the Construct forums!

    If you're interested in coding, Construct supports coding in JavaScript, which is a far more advanced programming language than GML and also means you're learning skills you can use elsewhere in the industry - such as getting a job, or using other frameworks like node.js. We also just recently added support for TypeScript in the latest beta releases which adds static typing - see Using TypeScript in Construct for more on that.

  • It depends on what you're doing, but merely having 1000 objects is not actually that much for Construct - it's more than capable of handling that many objects. For example this blog post demonstrates that even old mobile devices can handle around 10,000 sprites on-screen and still hit 60 FPS.

    If you're using performance-intensive features like Physics, then it may be a different story. But Physics already uses a C++ engine compiled to WebAssembly, so it's probably already about as fast as a native engine.

    Perhaps the problem is the game design, if you're doing something inefficient like nested loops. It depends on your project and it's hard to say more without seeing exactly what you're doing, but Construct is definitely capable of handling 1000 objects smoothly.

  • Yes, you can use WebAssembly - there's even an example of loading WASM.

    However it will not make your game 10x faster. Well-written JavaScript code is exceptionally fast with modern JIT compilers, and can get surprisingly close to the performance of compiled C++. The blog post Is WebAssembly magic performance pixie dust? covers this well - it depends a lot on precisely what you're doing, but the differences are often surprisingly small and WebAssembly is not necessarily even going to always be faster.

  • I think we're posting at the same time, but I'd add: one of the reasons we have weekly beta releases is to get feedback as quickly as possible and iterate on it. We do try to release features as soon as is reasonable, because we don't want to spend ages working on something that isn't quite what people want. But when it comes to feature suggestions, often everyone wants something slightly different, or different people have strong but contradictory opinions on it. Nothing is perfect and will satisfy absolutely everyone, and I don't think that means we are doing it wrong.

  • Scaling to large projects is difficult even when you fully code things. There's an art to learning how to manage it and design things so that you can take them as far as you want to go.

    The JavaScript (and now TypeScript) support in Construct is partly there so that if you are willing to code, you can use it to help scale your project further, or do advanced things beyond the capabilities of the built-in plugins and behaviors. For example you could write a custom pathfinding algorithm, running in a web worker for multithreading, and tweak it to match the specific needs of your game. You don't need to use the addon SDK either, so you can bypass all the configuration stuff you need to set up event sheet features, and just custom code something for your project. Then you can still write things nicely with modules and re-use that code across different projects, too.

    So if you want scalability, or to do more advanced stuff than the plugins/behaviors provide, that's part of the reason it's there! You can usually also use event sheets for custom logic too of course - it just takes more work. Construct has always been designed with the philosophy that the built-in stuff covers common cases, but is flexible enough to adapt to specialist needs, or if you need to do something really customized and advanced, then there's capable coding features too.

  • Another option is PWABuilder, which lets you submit a web hosted app to the Microsoft Store. We use it for Construct.

  • The File System plugin can read binary files in to a Binary Data object. Then you can use the GetURL expression of the Binary Data object to get a URL to that data, which you can then use in places like an <img> tag.

  • It's ready to use if you're happy to use a beta release. It'll make its way to a stable release in due course. The Steam for WebView2 plugin is documented here.

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • Remember we're a small team with just a handful of staff working out a single office. If you're expecting Construct to dominate the entire game development industry and cover a feature set that would require hundreds of staff to achieve, it's unlikely to happen. I don't think it's realistic to expect so much of us, just like it's unrealistic to expect a small, self-funded team of indie game developers to build a MMORPG on the scale of World of Warcraft.

    We really do care and I think we have achieved great things given the resources we have available. It is painful to read people accusing us of not caring and listing things we don't remotely have the resources to cover as their reasoning why.

    I know people get tired of hearing me keep saying "we're a small team and we have limited resources". It's because it's true and 99% of the time it's the answer to "why hasn't XYZ been done yet". Claiming everything is broken, limited, or that the team don't care, is unreasonable and also a disservice to the many people over the years who have loved using Construct. I'd also point out the Forum & Community guidelines which cover this as I think these sorts of arguments are bad faith and I don't think that kind of thing should be discussed further on the forums.