lionz's Recent Forum Activity

  • Sure I can break down a few more of the ideas i was trying to put across.

    Firstly, 0 will be present in the array always unless you change 0,0 and pushing 'adds' to the array, so you do not need to push an empty item, 0,0 is just 0.

    floor(random(1,array.width)) is to choose an item.

    When you push those items to a 1,1 array you will notice that the first item is at 1, because 0 is populated by 0, that's why I choose to start from 1, however the 0 still counts towards the width.

    array.width is indeed the number of X or items in the array however random does not include the second number, it is up to but not including the high range value (see manual). So if you pushed 3 items to the array, the width is 4 but the items are at 1,2,3. Because it would now pick from 1-4 not including 4 then random(1, array.width) works fine for any number of items. random(1,4) picks from 1 - 3.9. floor rounds whole numbers down hence 1-3. This is an explanation of why I used this however you can just assume floor(random(1,array.width)) will always work if you want.

    As for grabbing the item since it's important i'll have to explain it more in depth. When you choose an item you are setting an int variable, lets call it 'int' to floor(random(1,array.width)). Let's say the result is 2.

    Now you set a TEXT variable, lets call it 'pickedItem' to array.at(int,0).

    This means according to your example. TEXT would now be (assuming you have removed redundant NO_ITEM as mentioned above) "Rock_Helmet". Now you have this text variable to play with.

    You now say delete array.at(int,0) which will remove "Rock_Helmet" i.e. it cannot be picked again, resolving that you wanted to remove an item from being picked again.

    Remember the array is only for storing what items are to be picked, anything else for the item can be on the event sheet. So you could now say if pickedItem=Rock_Helmet then equip it. Or set currentItem to pickedItem. Whatever you want to do. If it was to appear in the level as a pick up you could say set pick up type to pickedItem. If it was to set an anim you could say set animation to pickedItem and it would appear as a Rock_Helmet. To summarise, all this is doing is replacing your ITEM_NUMBER with a text variable called pickedItem which = the name of the item, but has also allowed for picking a random item.

    Edit: I just saw that you wanted NO_ITEM to be a default weapon, well it won't be picked right so i'm not sure why it would be in the array, but if you want to pick it then set 0,0 to NO_ITEM, do not push.

  • This looks very convoluted now and I'm not sure item_found global variable can apply to a specific item. This is the time to move onto the array, but i'll guide you through it.

    Set the array size to 1,1,1.

    At start of game push to the back of X all items in your game, so it will look like this :

    push back "helmet" on x axis

    push back "sword" on x axis

    push back "shield" on x axis

    Now you have a list of items where helmet is 1,0. Sword is 2,0. Shield is 3,0. Do not think of arrays as scary, look in debug mode and you will see it as simply a list of items.

    To pick at random you run the action to set a variable to floor(random(1,array.width)), this will pick a number from 1 to 3 including 3.

    The number that is returned you can then grab the data by setting a text variable to array at (variable,0). So if it is 2,0 you can now reference the "sword" at variable,0 of the array.

    Delete x,y (variable,0) from the array. This deletes the item at 2,0.

    Now next time you come to pick a random item, sword is not there. Helmet is at 1,0. Shield is at 2,0. When you run the random command it will pick either 1 or 2. This is all visible in debug mode, you can see the items as they are removed.

    I would play around with that. Obviously as well as removing you can reference the item so 'variable' from the random command is "sword". You can use this to compare, i.e. if variable=sword then create sword in the level or equip sword.

    Let me know if you have any problems.

  • Give it a much higher 'deceleration'

  • Run it in debug mode to see what is happening with the global variable, should be able to tell you what's going on with the values. If you could make the video again with it in debug mode and global var visible and also show where you've put the image point on the player then we might be able to work something out. The waiting for 2 second action is not the best way but it could still work with that so there might be another problem.

  • You can add a variable to food items that are placed, like a boolean set to true if it is placed. Then on the arrow keys for changing animation you add a condition, placed=false. The arrows then only affect the one next to the arrow.

  • Hey, I would do this by using system 'Pick overlapping point' with water and the player imagepoint. You can put an image point on the player's head and say if water (object) is overlapping player.imagepointx, player.imagepointy then run the drowning mechanic else set breath to full. Instead of an else you could also use the same event and invert it, if water(object) is not overlapping player at imagepoint on the head. So if he is overlapping the water but has jumped out (his head is not overlapping) then he should breathe again.

  • You do not have permission to view this post

  • In my game when you unlock a rare item that can now randomly appear in game, it is added to the array of items. Just realised from the way you've set it up you may need variables for each item, so item1=0 or 1, item2=0 or 1. That way you can save the variables. You may have a long list of variables though if there are lots of items, that's why an array is useful.

    Saving, you can use system save action that saves the 'state' of the game kind of like a restore of the game at that exact point. Or you can use local storage which stores data and variables, seen here construct.net/make-games/manuals/construct-3/plugin-reference/local-storage

  • My initial approach to this wouldn't be to plan a route using pathfinding behaviour, although I understand the agent's general movement from place to place could be pathfinding. I would do it by using the floor I am on to locate an elevator that goes to the floor I want, and if one isn't found then to the closest floor I want. Using your image as an example, this is what my approach would be :

    Elevators are objects that have variable attached to determine what floors they go to, it could be a set of booleans, floor1=true, floor2=true etc or simply a variable for the highest floor it goes to i.e. floorMax=5 it goes to 5th floor. I will use the first example for now as the second could pose problems for going in reverse, or I guess you could add a floorMin var.

    Anyway, so I am on floor 1, I look for an elevator that is floor1=true as a priority (it goes to floor 1), and also goes to floor 5 destination (floor5=true). In your image that elevator does not exist, so it then looks for the next floors down. I need an elevator that is floor1=true and floor4=true, not found. Floor1=true and floor3=true. Ok i found it, it's the elevator on the left.

    Then I get to floor 3, I look for an elevator that is floor3=true and also floor5=true. Yes that exists it's the elevator on the right, I path to this elevator and take it to 5th floor.

  • It's true you will need save logic to remember after the game has closed but what you're talking about is simply remembering items unlocked on restarting the game after dying, right? I'm making a rogue at the moment and can help you, although I did use arrays oops..

    All you need is a global variable in condition to toggle whether the item can be found. So all items in the game that exist at the start are variable=1. Any legendary items not yet seen are variable=0. When you see it in the game you set this variable to 1 for that item. You will obviously need to adjust this to how you have set it up with the groups.

    Anything to do with closing the entire game and remembering is related to save slots which will save the global variable and remember what it was set to.

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • Yep that looks fine, are you saying that it's working now or do you need some help?

  • I can't see an image but I guess what you need is to check If wallet money < product value * quantity.

lionz's avatar

lionz

Member since 5 Aug, 2013

Twitter
lionz has 75 followers

Trophy Case

  • 11-Year Club
  • Jupiter Mission Supports Gordon's mission to Jupiter
  • Forum Contributor Made 100 posts in the forums
  • Forum Patron Made 500 posts in the forums
  • Forum Hero Made 1,000 posts in the forums
  • Forum Wizard Made 5,000 posts in the forums
  • Regular Visitor Visited Construct.net 7 days in a row
  • Steady Visitor Visited Construct.net 30 days in a row
  • Enduring Visitor Visited Construct.net 90 days in a row
  • Unrelenting Visitor Visited Construct.net 180 days in a row
  • Continuous Visitor Visited Construct.net 365 days in a row
  • RTFM Read the fabulous manual
  • Great Comment One of your comments gets 3 upvotes
  • Email Verified

Progress

24/44
How to earn trophies