oosyrag's Forum Posts

  • 1. Precise change over time: Use the timer behavior and lerp.

    On collision - start timer for 5 seconds

    Timer is running - Set value to lerp(0,100,Self.Timer.CurrentTime/Self.Timer.Duration)

    On Timer - Set value to 100

    2. a. You can use the "Wait" action to delay following actions

    On collision - Set Variable to 8, Wait 3, Set variable to 10

    b. Or you can use a timer behavior once again, and On Timer set value to 10

    On collision - Set Variable to 8, Start timer for 3 seconds

    On Timer - Set Variable to 10

  • Ok you'll want all your different sprites as animation frames of a single sprite object.

    For that sprite object, you want to add two instance variables: A numerical "Pair" variable, so you can determine which sprites are matches (each set of two should have a unique value greater than 0), and a "Selected" boolean, which you can toggle so you can't pick the same sprite twice.

    You'll also need a single global variable, to keep track of which "Pair" is currently of interest.

    Here are the events:

  • The simple way, assuming your head is leaving behind "waypoints" to control the path, would be to create a segment every x seconds until you don't want to create segments anymore. Each segment individually moves to every waypoint in order.

  • You'll want to use the pin behavior, as well as put the segment objects into a family, which will let you pin segments to each other in order. https://www.scirra.com/manual/99/pin

    Alternatively, you can simply give each segment the same set of movement actions/ai and have them offset by time.

  • > With two tiledbackgrounds you can make it look like it's animated, or at least moving forward.

    > https://www.dropbox.com/s/cm27xvzisnoxe ... .capx?dl=1

    >

    Hi how do I set laser length to Mouse.x mouse.y if not overlapping wall?

    I tried modifying but the result is no laser is shown

    Event 3: Change Set Width action to min(Self.Width+5,distance(cannon.X,cannon.Y,Mouse.X,Mouse.Y)), rather than Self.Width+5

  • You need to right click and edit the event group and uncheck start as active, rather than disable the events in the group.

    If your group is already starts as active and all the events within it are disabled, then activating the group will not do anything.

  • You'll need 3 parts to your laser, an origin sprite, a destination sprite, and a tiled background for the variable length of the laser. The origin and destination sprites should cover the "cut" ends of the tiled background.

    Unfortunately, tiled background cannot be animated, so you'll need to stack a separate tiled background object for each frame of your animation, and reveal/hide them in sequence.

  • Pathfinding and movement are separate systems.

    Rojos function gives you a path in the form of node uids in order. To use it for movement, you can save the list to a movement array, and have a sprite move to each node in sequence with your preferred method of movement. It may be better to write only the x and y position of the nodes to the array, as the start and end node objects may not be there for the duration of the movement.

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • I'm working on a visibility graph based pathfinding algorithm, no idea when I'll be done with it though. It trades off reduction of the number of nodes for an increase in the number of edges. In scenarios where fewer nodes are visible to each other the benefit will be more pronounced. It will not work well for large open spaces or long corridors. There is also additional work to be done putting image points at all "wall" sprite corners, since we don't have access to collision box expressions.

    ref: http://theory.stanford.edu/~amitp/GameP ... tions.html

    If you're interested in looking into it yourself rather than waiting for when I may or may not get it done.

    But definitely try the built in pathfinder first, you might be surprised. Remember, you don't actually have to run pathfinding every tick - you can update just the visual feedback for the user, which doesn't necessarily have to be instantly accurate. Basically there are methods to "hide the lag", like with netcode.

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