oosyrag's Forum Posts

  • Oh huh. How big is your tile map source file and how big are your tile maps?

    Maybe use a third party tile map software like Tiled to build your maps and import them as project files to load at run time.

    How big is your capx file total when saving?

  • Do your tilemaps change during gameplay? If you don't actually need to save them, you can add the "No save" behavior to them.

    If they do change, you can save them with a different method - Get the Tilemap.AsJSON and write it to localstorage. You can then load that as needed. Everything else can be saved as normal via the system save action (use "No save" on the tilemap).

    [quote:1g3q4y1l]AsJSON

    Save the object state to a string of data in JSON format, and return it. This can be downloaded or otherwise stored, and later the state of the object restored using the Set from JSON action.

  • Hi Everade!

    I must have overlooked this thread previously since it seemed like you already had plenty of help, but I guess it was never resolved to satisfaction. I'm trying to get caught up here, let me know if I missed/misunderstood something.

    Goal - You need objects to interact with solids conditionally in certain situations (different "floors").

    Additional requirements - Within the same layout, due to multiplayer

    Problem - Solids can only be set globally, also you cannot enable and disable them as needed in a multiplayer environmnent, as different players may be on different floors at any given time.

    Attempted Solution - Custom solids/collision behavior, with conditionals based on y axis z order (not ideal, as isometric view causes much complication, or layers, which gives you pretty good control but you have to have a good method to switch layers.

    New problem - Custom solids are hard to do correctly. Collisions and blocking movement not satisfactory, especially with high velocity/time discrepancy introduced in multiplayer, resulting in bouncing.

    So assuming you're OK up to the layer system for logic defining who should be able to collide with what at any given time, the next step would be to set up a good collision system. The first thing that comes to mind for me is using SAT to prevent anything from overlapping to begin with, rather than colliding/overlapping first and then pushing your objects away which causes undesirable bouncing.

    Ref: https://gamedevelopment.tutsplus.com/tu ... amedev-169

    Example: r0j0-039-s-experiments_t91829 (first one)

    This would need to be applied on both the host side and the peer side. If applied to both consistently, neither host nor peer should see any discrepancies outside of normal lag/desync issues.

    Basically, it comes full circle with your request to have the solid behavior allow for conditionals. If the official behavior doesn't support it, we'll need to build our own. While most of the other behaviors are pretty simple to recreate with events, solids have a lot more to take into consideration due to their interaction with a variety of different objects and behaviors. I'd be interested to see the logic behind how the official one is put together.

    Sorry I don't have a working example, this is a bit complicated and beyond my ability to put together quickly.

  • Ah that . in my post was a period. Follow what I wrote here - "Hi "&NameVariable&"! How are you?"

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • Reduce the number of tiles in the tile map.

    Although... 42mb doesn't seem like much to me, it shouldn't result in a 5 minute save, even on an older mobile device. I would try to isolate the issue in a new project to make sure.

  • Global variable: right click on your event sheet and add variable (text).

    Event condition:

    Button - On button clicked

    Event action:

    System - Set variable to TextBox.Text

  • First, to save a name you probably want to save it in a global variable. To build a string, you can use &. So set text to "Hi "&NameVariable&"! How are you?"

    To save and load, the simplest method is to use the system save and load actions. Local storage is more complex, but gives you more fine control over what to save and load.

  • https://www.scirra.com/manual/75/how-events-work

    Picking - conditions pick, or "filter" instances. When your specify on object clicked, only the one that was clicked is applicable to the actions, thus allowing you to get that one UID. If you didn't narrow down to only one instance, it wouldn't work right. Therefore watch out for situations where you might click two of the same overlapping object - you would only get the UID of one of them. To fix that, you would need an additional condition to figure out which one you wanted (pick by z order to get the one on top is one solution).

  • UID works perfectly fine for identifying specific instances, and in some cases is more reliable than using IID. But the process is similar. On clicked object, set variable to object.uid.

    IID: Best when dealing with order - first, second, third, next to last, last ect...

    UID: Best when needing to reliably identify specific instance of any object.

  • Gamepad compare axis = 0,

    Trigger once - reset animation

  • Might be an iOS limitation, bit I'm not really familiar with that.

  • More specifically, the bullet behaviour has a gravity property.

    To regenerate: on Sprite exits layout, destroy Sprite and create Sprite.

    On Sprite collide with player, destroy Sprite, add to score.

  • Thanks for the detailed response! You're my hero.

    Just some perspective the interface is already most excellent, I'm really just nitpicking at whatever I can here...

    For the color picker, maybe it is easier to explain visually.

    And here are Paint.net's and Gimp's pickers respectively:

    It really isn't anything particularly important, I understand especially as you mentioned the graphics editor is a secondary feature. But again it was something that I definitely noticed right away.

  • >

    > Please note that you will require lag compensation (rewinding time) if you try to create a real-time shooter or something similiar.

    > https://www.scirra.com/tutorials/892/mu ... pts/page-8

    >

    > Ashley covered that already in his tutorial.

    >

    >

    I had implemented this, and other user's suggestions on how to work around it using functions.

    Bullets were easy to sync; one set of instructions were synced to all players. But because each player's platform position was inconsistent on each machine, none of that mattered.

    The big problem was that the player's position was never the same. Especially when jumping. There was a discussion about this some time ago.

    Disclaimer: I've never actually completed any multiplayer projects myself, so please excuse me if I'm missing something specific to your situation or saying something that was obvious to you already. My hope is to possibly give you an approach or idea that you might not have thought of to try.

    Position will always be inconsistent/different on every peer due to the limitations of latency, there is pretty much no way around this. The only thing you can do is fudge it with lag compensation and input prediction. All multiplayer engines need to deal with this in one way or another.

    One method that looked decent for me was to have all "real" (read: host synced) sprites invisible (top down projectile shooter). Every visible sprite object (on each peer's device) was tied to the invisible master one, but by doing it this way I could set up my own rules for how the object looked and behaved (interpolation and input prediction) from each peer's point of view. Then I could make any small tweaks I needed to hide the latency factor. On the host side for lag compensation, I allowed small "burst movement" after an input is received to catch up to the peer's local input prediction position. Because the host version was invisible, it didn't look unnatural to the player. On the peer side, I also added a tiny bit of consistent, simulated input delay rather than instant local input predicted feedback, so the discrepancy between host and peer didn't get too far apart.

    Most of that is done by the built in actions in the plugin, but those don't allow for much fine tuning, which is why I ended up trying to make my own.

  • Sorry I used another example as the base for this one, I forgot to delete the array, it isn't being used.

    Let me know if you have any other questions I'll be happy to explain further.