dop2000's Forum Posts

  • Is there a way to have the health bar show the proper status before the function call five second command?

    Yes, you can call the function on start of the layout with amount=0. It will not change the variable, but will update the health bar and everything else. Or you can simply update the health bar on start of layout:

    -> Sprite_Health: Set animation frame to int(HungryScore)

  • Don't rely on the health bar, it can show 0 when the value is really 0.95

    Run the game in Debug Mode (Shift+F4 or Shift+F5) and check the variable value there.

  • It's not a bug, this is how strings are concatenated. Add round brackets:

    ... & "/" & (25*Stats.at(Hardness,1))

  • "Event eat" sheet belongs to Eat layout, so events from it will only work in Eat layout. If you want these events to be available in other layouts, you need to include "Event eat" sheet there - right-click -> Include event sheet.

    This is not required if you only want to call the function from other layouts.

    .

    When I run Eat layout directly, I can see in the debugger how HungryScore decreases by -0.05 every 5 seconds.

    .

    Also, events 10-15 are not needed. You already have "Sprite_Health: Set animation frame to int(HungryScore)" action which updates the health bar.

    Events 16-26 need to be inside the function.

  • I ran the code you gave as an example it deducts .5 and shows on the health bar but then stops subtracting and stays there.

    It should stop once the variable reaches 0. If you want to allow negative values, then remove the "Set HungryScore to clamp()" action.

    Also, you probably still have lots of other events in the project that can change the value of HungryScore variable and mess with your test.

  • Press P to add a function parameter. Or right-click

  • Also, do not use 'wait 4 seconds' before loading AJAX data, as the contents of AJAX.lastData may have changed by the time the wait ends. (if you make several AJAX calls)

  • or trying to add a new instance variable to the food family? I tried that but then when I go to add it as an action it won't appear as an option.

    Yes, these should be instance variables defined on the family. They will be accessible on the family itself and on all its members. Say, you can use Food.burpAmount, or you can use Food_Cookie.burpAmount

  • Create a function, call it only when HungryScore is changed, and put all checks inside the function. This way they will not run on every tick! And you will have a single event where all changes to the HungryScore are handled, not a hundred of events all over the project, which will make debugging a lot easier.

    This is just an example of what it may look like, don't copy it to your project:

  • This is what I'm trying to explain to you - when an event runs on every tick (the one highlighted on your screenshot), all its actions are repeated 60 or more times per second! That's why your animation is constantly restarted.

    And never use "wait" action in such events! Because all actions after the "wait" will continue repeating many-many times even after the event is no longer running, resetting the variable.

  • Yeah, many of the events could be optimized with families and functions. And you still have way too many events that run on every tick. It must be a nightmare to debug.

    Here is how you can optimize eating event - add all food sprites to a family. Move DragAndDrop behavior to the family level. Add burpAmount and fartAmount variables to the family. You can specify different values for each food type in these variables.

    Then you could have a single event for eating. Notice that the BURP and FART checks are nested under the main event and are not performed on every tick.

  • What do you mean by "replace the existing teams.txt"? You can't physically replace a project file with some other file in runtime.

    What you can do is ignore the project file and load the data from the file provided by user.

    If you want to save the data between sessions, you will need to save the list of teams (either from the project or provided by the player), say, in Local Storage. Then the logic could be something like this:

    On start of the game:
    
     If Local Storage has saved data -> Load teams from Local Storage
     Else: 
     ...Ask if the player wants to use standard teams
     ...If yes -> Load from teams.txt
     ...Else -> show FileChooser dialogue and load from selected file
    
    
    At the end of the session/level -> Save current teams in Local Storage
    
  • Could it be with an extra behavior and control the x position at all times?

    I'm not sure what you mean. Could you share your project file or a screenshot of events?

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • All your events run on every tick (repeated 60 times per second or even more). What's even worse is that you are using "Wait" action in such events. This means that the delayed actions will continue to run for 1 second even after the condition has become false, changing variables, stopping audio, changing animations. This will very likely break your game!

    All these checks can and should be performed in the same event where the hungryScore is changed - simply add sub-events. Then you won't even need that boolean.

    // Main event
    Character on collision with Food: Subtract 1 from hungryScore
    
     // Sub-events
     If hungryScore=1 : do this
     Else If hungryScore=2 : do some other thing
     Else If hungryScore=3 : do something else
    
  • FileChooser Click action only emulates a click on this object. You still need to wait for the user to pick the file they want to load.

    So you can't put AJAX Request immediately after that. You need to use "On changed" trigger and request the selected FileURL, not "teams.txt":