WackyToaster's Forum Posts

  • Whenever I see negative comments about C3 (mostly from users of it), it dumbfounds me.

    The biggest fans are often the harshest critics. And there's just valid criticism to be had. I don't think most people make these comments from a place of negativity, even if it sounds like it.

    However, I don't see an issue with cloning an official plugin for example, renaming it, adding it to your project and messing with its code that way, and from what you guys are saying, that's not possible?

    Yes, that's not possible. It used to be possible in C2, but it seems that exactly that lead to some people playing the blame game and finding Scirra at fault when, in fact, they are at fault themselves. It's just human nature to attempt to find blame everywhere else except one self, anyone who played any amount of League of Legends or Overwatch can probably write a book about it. Teams losing? Must be (the game's bugged) and/or (lag) and/or (unbalanced character) and/or (anyone but me). It's never just "Oops, I screwed that up. I'm the problem."

    Scirra also makes an easy target by nature since they are the company and they are getting paid. What are they supposed to do if a customer waddles in with their corrupted project due to a hacky plugin, blames them for it and expects it to be restored? Sure, as an individual you could easily say: "Lmao you didn't make backups? AND you messed around with a hacky, unsupported plugin? Unlucky buddy, learn from the experience, you messed that one up yourself." but as a company, in the end, you rely on people giving you money and ideally they are also happy doing so. Even if they give you a headache.

  • You can always email support directly.

    construct.net/en/contact

  • Is the object on the correct layer? If you put it onto the HUD layer at parallax 0,0 it should stick to the mouse cursor just fine.

    The mouse also has a "set cursor from sprite" action, you can try that.

    construct.net/en/make-games/manuals/construct-3/plugin-reference/mouse

  • I'd say obviously if you pay for a month and then cancel, the month you paid for stays active. It would be wild if not, I can't imagine it working any other way. That's the purpose of the monthly plans afterall, for people who only use it for a month here and there.

  • Taps are defined gestures and also have single and double-taps. Basically, after the first tap, the engine cannot know yet if you want to perform just a single tap, or a double-tap. So it has to wait for a brief moment to see if you perform a second tap. That brief waiting period can make it feel a little bit laggy and wonky, which can be totally fine depending on the usecase.

    "Is touching object" fires instantly, because It doesn't have to wait for anything. You probably need to add a "Trigger once" though.

    Most likely that solves your issue, but we don't know for sure. There could still be an issue with your eventlogic.

  • I very much understand the problem, but sometimes having access to the code could just be helpful.

    If I encounter some edgecase in my project, right now my only option is to file a bugreport. And then maybe I get a fix. It could also get hit with a "difficult" which usually means I can expect this bug to be in limbo for the next couple of months. Or it gets shot down as wontfix because it's just an accepted quirk and fixing it would break every other project. A last resort would be to somehow work around it with event logic or game design, but that could easily just be impossible. And if that's the case, I'm just screwed.

    Meanwhile, I could theoretically just tear open the code and put the fix where I'd need it myself. Obviously with the full understanding that if I break something here, I don't get (official) support.

    Put it behind developer mode, make a big box that says "If you touch this, no support!". Make it a per-project basis so if I actually break it, I can just revert to the original plugin/behavior script. I'd argue anyone bold enough to tinker around with the code is smart enough to understand the ramifications.

  • Seems like that plugin has no javascript interface (yet?)

    At least the binary data object has though. construct.net/en/make-games/manuals/construct-3/scripting/scripting-reference/plugin-interfaces/binary-data

    So what you'd have to do in the meantime is create a little (async) helper function in the eventsheet that you call just for encrypting.

    runtime.callFunction("encrypt", [params]).then(() => {
    	// send via websocket
    }
  • I don't think there is.

    You can probably do it like so with events:

    1. Set global var "gettingLayouts" true

    2. Access the current layout name with the LayoutName expression and write it into the array

    3. Use the "go to next layout" action

    4. repeat until you run out of layouts, set "gettingLayouts" false, then go back to the first layout

    Quite convoluted and ugly, I'd not do it this way. Simpler would be to not dynamically create that array I suppose, but that means you have to update it by hand every time you add/remove a layout.

  • 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.

    The type of game usually boils down to requiring a ton of collision checks.

    • all enemies with player
    • all enemies with all enemies
    • all enemies with all player projectiles
    • (optional) all enemy projectiles with player

    Doing this every tick, for 1k enemies is heavy. That's another thing that could be done... limiting the tickrate of the collision detection. Instead of doing it every tick, doing it, say, every 0.033 seconds which is equivalent of doing it at 30 fps. 30fps may be perfectly sufficient for this, but you'll have to interpolate the movement otherwise it will also move at 30 fps.

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • I haven't played that game, but just from taking a brief look at it... are you sure there are "several thousand enemies" at once? The game states that it has thousands of different enemy types, but that doesn't mean there's a thousand of them running around on the screen at a time. It looks very much to be in the same ballpark as vampire survivors of having maybe a few hundret or so.

    I think some things that can help you are possibly:

    1. web workers for multi-threading construct.net/en/make-games/manuals/construct-3/scripting/guides/creating-workers

    2. Object pooling

    I'd say you could try and split the enemy logic up into batches of ~200 and put them in individual workers. Though admittedly I have no idea if that is a nonsense idea or a good idea, I have no experience in that regard. It just seems like one of the things I'd try and see if it works or not. :V

    And object pooling to avoid having to create hundrets if not thousands of instances every second.

  • Yes, it's pretty much dead. The original creator vanished, so...

    It seems that the plugin technically still works, if you can get your hands on it.

  • 1000 moving objects are quite a lot. Even vampire survivors has "only" about 250 enemies visible at once with very simple logic/sprites, and that game starts chugging hard still if a lot is going on even on reasonably strong machines. It's quite the CPU bottleneck. But I'm curious how your testing goes and if you can achieve better performance like that.

  • Quite easily so. HTML Element -> Insert content

  • Hah, I knew it!

    It's just something that happens, especially if you're not used to it working this way. In usual programming no reference get deleted, it just starts throwing errors. Construct prevents throwing errors by also removing the reference. If I think about it this way, I'd probably prefer the latter, but I can see why the first one also makes sense.

    Either way, before deleting something that has events attached, just do a "find all references" to check where you used the object in your events.

  • Yes exactly.