WackyToaster's Forum Posts

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

    I agree that this is indeed a very tricky issue. But I feel like this is a rather rare, specific situation where you'd actually be required to save this in detail? Maybe I'm wrong? Extending this question to the others in the thread: Does your game need this, and why?

    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.

    Interesting.

    If C3 would have some paid testers, they could be the ones to strip down the project on our behalf, the clients, in order to find bugs in C3.

    If you think stripping down a gigantic 7000 event project takes long... imagine doing that except you are entirely unfamiliar with the coding style and codebase. :D

  • Some recent stats I got from webGPU: ~5% of devices appear to be failing with "Error creating WebGPU renderer" (something along those lines). I'm not sure if this is a breaking error or if Construct falls back to WebGL if it happens. Data is from a couple thousand random players.

  • I've said that once before but I think this system would work better if it would be the other way around: save NOTHING by default until you start adding a "do save" behavior. Or maybe both, so you could pick which way is better suited for your project.

    Here's some reasons why I'd not want to use it:

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

    2. Savestates potentially save (and load) broken game states (e.g. a softlock)

    3. Savestates are extremely unwieldy and the only control I have over it is the no-save behavior.

    What I mean by unwieldy: This is what a savestate in my current game would look like:

    Mind you I ran it through a beautifier... 27000 lines of JSON? I wanted to paste all of it here for emphathis, but the forum doesn't allow this many lines of code. And sure, I could cut it down by starting to apply the nosave behavior, but still. And my game is super tiny compared to some of the behemoth projects I've seen floating around.

    Here's what I'm actually, manually saving in my game.

    	globalThis.savegame = {
     "current_level": runtime.globalVars.current_level,
     "current_world": runtime.globalVars.current_world,
     "game_finished": runtime.globalVars.game_finished,
     "collected": globalThis.savegame.collected
     };
    

    Even big games don't need to save all that much. Think for example Super Mario Odyssey. It's probably saving coins, progression, unlocks, moons, where mario should spawn and some whatever data here or there. I just cannot fathom a game that needs or benefits from this excessive type of saving system.

    I do certainly believe that a functional out-of-the-box savesystem would be very convenient and obvously should exist... but I really can't justify using it in the current state. And on the flipside, making a basic save system is really not that complicated.

  • I don't have access to grok imagine but I can still get an image from the chatbot, in which case the image is always saved as a jpg. So I wonder if the file is simply saved in the wrong format for some reason, which is why renaming it to jpg works. Construct might get confused if the expected file format doesn't match which is why it doesn't load.

  • I know you don't wanna hear it but make your own save system...

    My personal opinion on the save feature is still that it is prone to random issues and not adequate for saving a game simply because it's a savestate and not an actual save file. It's neat for a beginner to not have to think about how saving a game works but that's about it. The save feature just saves EVERYTHING and anything you don't want saved needs a specific behavior attached and that's the only control you have over it.

    It's just infinitely better to create a clean save with some json and save/load that in a proper and controlled way. There's of course some extra work involved but that work is worth every second, and in the end it is not actually that hard to do.

    Just for a good example: Let's say you publish a game on steam using the save feature and it's a success... how do you actually create an update for your game without completely bricking every single save file? It sounds like an absolute nightmare to handle this.

    Of course for a game jam it's neat to be able to use this as a quick and dirty way, but it's clear how insanely complex it is to actually create these type of savestates without bugs. It's just more headache than it's worth.

  • I vaguely remember encountering something like that a while back and it was because "Player" was some reserved thing. But iirc it only happened on export.

    Maybe try

    Player2 = runtime.objects.Player.getFirstInstance()
    

    Otherwise it's hard to say what's going on. Any errors in the console? Ideally you can post your project with everything removed that doesn't cause the bug.

  • They better not throttle to 60fps and make me angry. I have a 120hz screen and I want 120hz, at the very least when it comes to playing games. Also I thought my game runs terrible on mobile for some reason because I expected to hit 120fps as per usual but because it uses scripts the worker mode defaulted to "no". That's an easy fix but it took me a hot minute to figure out why it was happening in the first place. There should probably be some kind of opt-in from chromes side for games to get the full framerate or something...

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • Well I found the culprit after some digging. It's this flag in chrome.

  • Yeah I thought something like that might be it. A brief test showed that the issue does not appear in samsung internet. So it has to be something chrome-specific.

    If you want to check it out and add it to your infinite todo list I'll send you all the info you need.

  • I recently noticed an oddity regarding the worker mode setting and mobile performance.

    Worker on: Game runs at 120fps as it should

    Worker off: Game now runs at 60fps

    It doesn't even seem to be a hard-cap either as it sometimes spikes to 70fps. In unlimited mode the game runs at ~900fps regardless of worker mode setting.

    Is there a reason why it wouldn't run at vsync speed just because it's not in a worker? Is that a bug or some android/chrome/mobile nonsense?

    I used platformInfo tickspersecond to measure.

  • You don't need advanced random for that. You just made a small mistake and added the offsets when generating the room array so everything generated after the first room was added outside of the arrays bounds.

  • Maybe you could post a screenshot or two of your game here? Or at least a short description? It's hard to answer the questions without even knowing what the game looks like in the first place.

    Considering they say it's not unique enough it's probably not an issue of polishing. But polishing never hurts. I haven't done any app store stuff in a long time but I remember their approval process to be somewhat random, where my game was accepted, but an update with a few bugfixes was rejected for random reasons.

    Referring to their guidlines at 4.1

    developer.apple.com/app-store/review/guidelines

    1. Don't copy the latest hot app on the store

    2. Don't copy a UI/name with only minor tweaks (e.g. Flappy Birb)

    3. Don't make something that could be confused as impersonation of a different app

    4. Don't use someone elses brand/icons/etc.

  • I should preface this by saying I'm relatively inexperienced in true 3D modeling/animation

    Pretty much all modern games use bones for this, including for mechanical contraptions actually. The question is if Construct has the ability to manipulate bones at runtime. I don't think it's supported (yet?).

    Bones are exactly what the name implies. You just build a "skeleton" for your mesh which you can then move. Generally called "rigging"

    For you in the end, it will not be much different than manipulating any object in 3D space. Rotate, translate, scale. Except instead of changing the mesh directly, you will change the bone, which in turn changes the mesh based on painted weights. Weight painting is a pain btw :), generally called "skinning"

    And you can set up some clever helpers like IK (inverse kinematics) which is often used for legs/arms because it simplifies animating that in the first place and also allows for clever stuff like dynamic proper foot placement on uneven ground.

    Here's a video of the process

    youtube.com/watch

    Most games use both pre-baked animations and dynamic animations. E.g. a character walking is pre-baked, but the character looking at the player has to be dynamic, so the head-bone will rotate towards the player (with some limits). If the character dies it might turn into a ragdoll which would be physics driven. And AAA releases start to implement even more complex systems like procedural animation but I wouldn't worry about that.

  • I don't know what exactly is going on but there IS (probably) some logical issue with how the perimeter is created. Because if you disable the perimeter stuff, it works right away.

    The reason InDWrekts solution works is only because the generation is triggered twice, you can also just call the generate function twice in on start of layout and it works too.

    Here's how I'd fix it

    wackytoaster.at/parachute/roomgen_fix.c3p

  • I'd assume they were deleted by accident, and try Ctrl+Z. If that doesn't work and especially if the file has been saved... they're gone.

    Unless you did set up the automatic backup function in Construct, in which case you can check for a backup.

    If that wasn't set up, I guess you can turn this into a lesson on the importance of keeping backups.