oosyrag's Forum Posts

  • You might not need an array, but it could be useful if you want to run any heavy simulations.

    For the game itself, it would probably be enough to have each tile store it's own value as an instance variable, and pick tiles by overlapping at offset to run your logic.

    In summary, you can build the game with or without arrays, it is up to you. Are you comfortable using arrays? Or are you more comfortable with objects and picking logic?

  • I'm sorry to hear it is not a simple implementation. I always feel guilty about "feature suggestions" as they basically amount to asking someone to do extra work, but I really appreciate that you read and respond!

    I did notice the debugger doesn't update every tick as I assumed it did after I went and looked more closely.

    Regarding the perception of a single tick, I'd like to disagree. The eye is quite good at noticing differences and changes of state. Quick example - https://www.dropbox.com/s/49cxynn9onjhs ... .capx?dl=0

    In this case it would be a simple yes or no, if the event ran or not. It would show if an event is running when it wasn't supposed to, or vice versa. In a chain of events/conditions, you would be able to see how far down they get activated until. This would let you pinpoint where to start looking for mistakes in conditions.

    I understand I can (and do) manually add in debugging stystems, but it is clunky and a bit specific - sometimes you want to check a large if/then subevent chain or function, and it can be useful to see multiple events at once. Also as r0j0 mentioned, such techniques are generally beyond beginners.

    I brought this up because I saw something similar in the UI of another scripting program (energy management software), and thought that it was great. The use case is a bit different of course, in that software it is running as you edit the script and you only need to look at the script to begin with. But it shows quickly at a glance what is and isn't running, and I thought something like that applied to C2 could be very useful.

    Being able to see and confirm picked objects would be also have amazing utility, but I wouldn't even know where to begin regarding how to represent that in a scalable manner. And you definitely wouldn't be able to process that information in the instant that the event is called.

    Anyways if it isn't feasible, that's too bad. Thanks for the discussion though!

  • Just had a thought that it would be fantastic to be able to see which events run or not in the debugger.

    Even if it was just a list of numbers corresponding to the event numbers that get highlighted if they run each tick, that would allow quick confirmation of any conditions mistakes by seeing if an event runs or doesn't run when it is supposed to.

    I have no idea regarding the feasibility or difficulty of implementing such a feature though.

  • It is fair, just make sure you are not on the default main debug page, as that can use a noticeable amount of CPU.

  • Else in C2 is definitely one of the special cases and different than other programming. Not sure if you found this page - https://www.scirra.com/tutorials/292/gu ... t-features

    Additional tips and tricks - Looking in the debug to see if things are expected is always a good idea - in your case you're creating way more sprites than expected, probably because a lot of them were overlapping.

    A related trick is to set sprites to 50% opacity when working. I do this for almost all my projects, as it makes it very easy to spot mistakes as opposed to digging through the debug.

  • I thought of a way for you to continue with multiple objects - you'll use on touch start or on tap gesture as your trigger, so there is only one event that triggers on touch, like so -

  • That's a creative solution! Here is how I was thinking just FYI.

    I wouldn't use atan, as you have an extremely slim chance to divide by 0 and I'm not sure how C2 would handle that. Maybe there are safeguards built in and it would be ok, but I'm not sure. Use the angle() expression instead.

    I was thinking would be to set angle , then use the action move forward based on distance, or just move at angle.

    (I'm assuming axis 0 is x and 1 is y, swap them if I'm wrong)

    Angle = angle(0,0,gamepadaxis(0,0),gamepadaxis(0,1)

    Distance = distance (0,0,gamepadaxis(0,0),gamepadaxis(0,1)

    Optional - Multiply distance by a speed multiplier.

  • First your random problem:

    Else is a little bit tricky. The event sheet is read and each event executed in order from top to bottom, as long as the conditions match. Else means only run this if the event previously did NOT run (unless you have a series of elses, but that works as an extended if-else chain). So the way it is now, lets say your random picked 3, which would be dirt. The dirt event runs. The grass event does not run. The tree event DOES run because the grass event didn't, so it immediately covers your dirt with a tree.

    To solve -

    Explicitly define 4<=rng10<=6 in event 7

    Or Add Else to event 6 as well, to make it a proper if-else chain.

    Your terrain manipulation problem is similar. When you touch grass, event 12 runs and creates a tree. Then event 13 runs because a tree is now there where you touched, and then turns the tree to dirt. This is another bit of learning curve for the event sheet system because Triggers (the green arrow) don't follow the normal flow of top to bottom, and will run whenever the trigger happens. Thus you can't use Else with a trigger.

    This is a little troubling because when you turn one object into another, triggers will run on the new object and I can't think of a solution off the top of my head. The solution would be to use another system/approach, which I hate to bring up because you would have to mostly start over, but here goes. This is how I would normally approach a project of this type. Instead of using a unique object per tile type...

    1. (Better) Put all your tiles into one object called "Tile", and control look and properties by animation frame and instance variables. For example On Clicked Tile, with subevents If animation frame=1, do something, else if animation frame=2, do something ect. On generation, usually you want to save the tile x/y position as instance variables, and any other properties/identification you like. The type of tile is determined by the animation frame number.

    2. (Best) Learn/use the tilemap object and build a tilemap system. They are made for tile based games. https://www.scirra.com/manual/172/tilemap

  • You'll need 4 variables - lowestValue, Xindex, Yindex, and Zindex.

    For each XYZ

    Array.CurValue<lowestValue

    Set lowestValue to Array.CurValue

    Set Xindex to Array.CurX

    Set Yindex to Array.CurY

    Set Zindex to Array.CurZ

    So it will go through the whole array, and whenever it finds a lower value than the last lowest value, it will record that new value and also the XYZ position.

    With that first XYZ index, you can check the neighboring cells by adding or subtracting one from the appropriate index, with similar logic as before.

    If you don't need the index/location of the lowest value, you can do a simple event as follows:

    For each XYZ - Set lowestValue to min(Array.CurValue,lowestValue)

    This might be useful if the value of interest is your first X axis - you can then use Array.IndexOf(lowestValue) to get the position. But that only works on the X axis.

  • You can mark each sprite block with an instance variable. When an object is created, it is "picked" automatically for the duration of that (sub)event. So if you create an object, and set an instance variable, it will only set it for the instance that was just created.

    You can use conditions such as Pick sprite by instance variable to pick "trees", then use pick nearest sprite to get the nearest tree.

  • To get the best restults, I would recommend using a custom system for movement with an analog stick rather than using the 8-direction behavior. You'll be using angle() and the axis 0 and 1 values to get the angle of the stick, and distance() for the amount with 0,0 as your first two values.

    The 8-direction plugin, after all, is meant 8 directions only.

  • It is possible.

    The most straightforward way would be to push the x/y coordinates of the input every tick into an array. To replay, just go through the array and draw from each saved coordinate instead of the mouse/touch input.

    I don't know if there would be performance issues without trying. You can trade resolution/accuracy for performance by adjusting how often you save a set of coordinates.

  • Check out the first example here -

    +1 "not easy".

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • You will use the min() expression. This will give you the smallest number out of the numbers you provide.

    So when you reload, you will subtract min(ammovariable,15) from ammovariable. If ammovariable is more than 15, it will subtract 15, if it is less, it will subtract ammovariable, leaving you with 0.