oosyrag's Forum Posts

  • There is.

    You can't even add the multiplayer object to a project if you are a free user.

    If you are editing a multiplayer example, there is a big yellow banner on top telling you the project exceeds free edition limits.

  • I don't profess to know if it's a good idea or not, but here are some considerations, assuming you mean for the Steam version to be a paid game...

    Steam's advantage as a platform is that it has huge reach. Steam's disadvantage is that they take a large cut of your revenue. It would make more sense to me to have the free version on Steam to leverage the reach and the paid version outside to collect the cash.

    Developing two versions of a game is additional work and possible bugs/maintenance. Especially when it might not be necessary to have two different versions at all. Why not use the same business model for both?

    People can react extremely negatively to pay up front games that act like freemium games in disguise (SW: Battlefront 2). They can also react badly to freemium games that hit users with a huge wall to progress locked behind IAP, essentially becoming pay to win. It sounds to me like your approach is to do both. There can be a good balance in the middle somewhere, but then you would only need that one balanced system and not two separate versions.

    All my personal opinion - I have no experience publishing games.

  • Use a pin behavior onto your center object, and rotate the center object. You can use an invisible helper sprite as the center object if you want.

  • Here is a quick implementation of the first link I referenced above.

    https://www.dropbox.com/s/q4fcmtza4uqvyn8/prng.c3p?dl=0

    Each time the function is called it will return the next pseudo random integer between 1 to 2147483646 inclusive in series.

    To get a float between 0 and 1, use function.call("prng")-1/2147483646.

    To set a maximum value, modulo the result by whatever you want the maximum to be, OR multiply the float as above by the maximum.'

    Note that this is reliable across platforms as long as you stick with integers only. Once you use floats, rounding errors may occur.

    I tried to make a clean version in event 3 utilizing function.returnvalue, but it didn't work as expected. Can anyone else fix it? I ended up resorting to global variables to store the last returned value.

    With some minor modification, you should be able to pick out a specific number from the series by index by looping through the function x number of times from the seed value.

    The incrementing numbers represent the distribution of results.

  • [quote:1aqk1me5]When the enemy sprite gets hit by the player, set the enemy bullet speed and angle to the desired values.

    This is where you have the start timer actions. Set the bullet speed and angle. You want to leave the start timer as it is, but you can get rid of the tag if you want - all the timers can be the same.

    [quote:1aqk1me5]on timer complete set the enemy bullet speed back to 0.

    You only need one of these events. On Timer, set enemy bullet speed to 0.

  • It is not currently available. I made a suggestion here: https://construct3.ideas.aha.io/ideas/C3-I-351

    My workaround is to have a Global constant variable set to refer to, but it must be updated manually if the tilemap size changes.

    Although changing the tilemap size honestly pretty much never happens, since the image is set as well.

  • Select all, right click, wrap selection

    OR

    Select all, press Enter on keyboard

  • A figure 8 would be simple enough with 2 sine behaviors only, no events necessary.

    Unfortunately your link got truncated, so I can't check it out.

    While it isn't the simplest thing, I can imagine making a path editor with Construct by "drawing" with the mouse and recording the x/y values into an array, which can be saved as json and subsequently imported as a project file for future use. If it can be done with events, I'm sure a plugin is possible. Relative coordinates could be utilized so the resulting movement templates are more flexible and can be used in many situations.

    Another quick idea I can think of is to create a movement template object with a series of imagepoints detailing where you want a sprite to move, and have the sprite move towards each imagepoint in succession.

    Generally speaking though, invisible helper objects positioned strategically can allow for pretty much any complex movement you can think of.

  • https://www.dropbox.com/s/vf9ub4hq4r5cv ... .capx?dl=0

    I have an old example here, maybe not exactly what you need but see if it helps.

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • You used a "Move at angle action". This will complete instantly. Instead, use the bullet behavior actions "Set angle of motion" and "set speed", with a timer for duration.

    Since you're already using the bullet behavior for the enemies normal movement, you can either add a second bullet behavior to control the knockback, or disable the normal movement events while the enemy is getting knocked back. Again, the timer behavior will be useful here.

    [quote:9d7aj68z]When the enemy sprite gets hit by the player, set the enemy bullet speed and angle to the desired values.

    You can also utilize the timer behavior to determine when to end the movement. On hit, trigger the timer for the desired duration, and on timer complete set the enemy bullet speed back to 0.

  • In the animations editor, you can save animation frames to disk, and then import them again to your new project, if you don't have the original files anymore. If you have the original files, just import them like you did the first time.

  • Use 2 bullet behaviors. Make sure set angle is not selected for either.

    -> Sprite: Set angle toward (Center.X, Center.Y)

    -> Sprite: Set Bullet angle of motion to Self.Angle degrees

    -> Sprite: Set Bullet speed to distance(Self.X,Self.Y,Center.X,Center.Y)÷2

    -> Sprite: Set Bullet2 angle of motion to Self.Angle+90 degrees

    -> Sprite: Set Bullet2 speed to distance(Self.X,Self.Y,Center.X,Center.Y)×4

    Not sure how you would use physics for it, sorry.

  • Compact version:

    + Bullet: On collision with Block

    -> Block: Set animation frame to Self.AnimationFrame=2?0:Self.AnimationFrame+1

    This is a conditional operator, and basically means "Is self.animationframe currently 2? If yes, set to 0, if no, add 1."

    So every time a bullet collides with a block, the blocks animation frame will go from 0 to 1, 1 to 2, or 2 to 0.

  • Is it possible to clear the storage of a game saved by the System object (-> System: Save game to slot "x")?

    There is no direct way to delete data from a save slot.

    The most straightforward way is to overwrite the slot with a new or fresh game state.

    Normally what you would delete is the reference to that save slot, so users can't pick it anymore. In other words rather than deleting the save slot, you can delete the ability for a user to load a particular save. You do this simply by setting a new slot to save to and load from, and you can overwrite the old one at a later time if you want to save space.

    Or is it possible to save and load the entire game in a LocalStorage as simple as "System: Save game?"

    It is possible, but not simple at all. You'll need to manually determine everything to save and load. Depending on the type of game and how much data needs to be saved, this may not be feasible.

  • All a peer does is send its inputs, the host determines what to do with the inputs.

    The peer doesn't even need to know if it is touching anything. The host will see if there is an object at the location the peer's input specifies. Messages should not be used in this case.