TackerTacker's Recent Forum Activity

  • Containers do not work with families, and you need families if you want to make things generic in C3.

    If you work with containers you need to add a new dictionary for every single object which you then can't universally address because you need to perform actions on that particular instance of the dictionary.

    Group #1 shows how it does work, here if you click Sprite_A, dict_A loses health, but not dict_B.

    Group #2 shows how it should work but doesn't. If I click Sprite_A here, dict_A AND dict_B lose health.

    Here is the project file: container_data_test.c3p

    But this is just an example I threw together, and it's not about solving just this very specific case. Having the ability to store bigger data in variables would make dealing with it as easy as dealing with strings or numbers. I often lose track of what I was working on because I get distracted by needing to solve mini puzzles on how to deal with data.

    Maybe not everyone likes my solution to the problem, however basically everyone expressed that they do find dealing with data difficult. That was my motivation behind this suggestion, and starting a discussion.

  • I'm not suggesting this should replace JSON/Dictionary/Array, so you will still be able to use it.

    In other engines you can store all kinds of stuff in variables, it is not some crazy outlandish idea. Construct is actually very odd in that regard that you can't even store arrays in variables.

    Also at this point I'm expected to know more different coding paradigms in this "No coding required" engine with "Game Changing Visual Scripting" than I need for an actual coding required engines.

    UI = Html + CSS

    Data = XML or JSON

    And more and more often = Javascript

  • i think there is a plugin called herostats that does all this

    I don't know of such a plugin, can you provide a link please GeorgeZaharia

  • ...dealing with JSON is not as easy in C3 as working with variables

    So you mean it doesn't bother you?

    Because I don't see how the JSON workflow is any better than the workflow with Dictionaries for example. Basically all the points I made under "Things to avoid" also apply to JSON, or not? And only half of what I mention under "Requirements" is actually possible with JSON.

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • R0J0hound made a good suggestion

    ...to be really useful it should be possible to change all the values at once easily. ...Like in many programming languages you can set a vector struct with something like velocity=vec(100,100).

    So here is a mockup of how that would look.

    Here you can see that it gives hints for the expected data, just like functions.

    And this is how it would look with the complete data filled in. Again including the nested custom data. First one is with the custom data written in directly, second one is with custom data already stored in another variable.

    Here are a few ideas how a global variable containing custom data could look like on the event sheet.

  • Suggestion for a custom data feature

    Posting the suggestion here because the forum has much better formatting.

    Here is the link to the actual suggestion board please vote for it if you like it.

    https://construct23.ideas.aha.io/ideas/C23-I-266

    Mockup of the feature in action

    Mockup of setting a value in a custom data type

    These mockups show how everything could work, and I mean COULD, I'm not hell-bent on this exact implementation.

    With the custom data feature I try to address a constant annoyance I have with C3, handling of data. Specifically handling of data that is more than just a single float/string/boolean value.

    To explain my 1st mockup, the idea is that you create a Custom Data structure with a unique name as a global identifier. You create a new custom data structure -> you set the name -> add variables -> the variables get a default value. Once you created a custom data structure it shows up as option in (instance)variables with the unique name you choose (lets say it's "my_data_type"). If you set the variable to "my_data_type" it will apply the default values you've set. Double clicking it opens a window pretty much exactly like the window where you add/edit normal instance variables, where you can edit the values of "my_data_type" (but not the actual structure/ which data types are in it with what names or their default value).

    The 2nd mockup shows how to set a value in a custom data type in the event sheet. The content of the custom data type is actually not shown in the expression window because it would clutter it too much, just the name for the instance variable that is holding the custom data. Opening up the instance variable with the custom data is similar to normal instance variables but you get a 2nd drop down to specify which value from the custom data you want.

    Requirements no matter how the final implementation ends up looking like.

    • Storing of more then just a single value in (instance) variables, a collection of data.
    • Being able to handle this data collection like any other variable, it can be easily copied to different variables of the same type ( set "my_data_1" to "my_data_2" ), it can be set as parameter in functions/custom actions ( function( my_custom_data, float, string ) )
    • Ability to create the data structure in the editor
    • Easy access to the data ( variable = player.my_custom_data.value, auto complete can suggest possible variables because the structure of the collection of data is known ( In the mockup the custom data "hero_stats" has hero_type/health/strength/intelligence/immunities ) )

    Things to avoid

    • No double picking ( pick player -> pick dictionary with UID ( player.my_data_UID ) -> do something with data )
    • No conversion of data ( variable = rgb( 255, 255, 255 ) -> variable = random number -> how do I get only red out of this???, OR dictionary -> function( dictionary.AsJSON ) -> pick dictionary -> dictionary load from JSON string )
    • No need to remember names or numbers ( like dictionary keys or array indexes, dictionary.get( ??? What's my key again?), array.get(?,?,? gotta open up the data sheet again and look up the number ))
    • No AJAX to load data

    One thing that would be amazing is nested custom data, but idk how much more difficult this makes the implementation, so I rather have the feature without it than not having it at all. I did however include nested custom data in the mockup to show how that would look like.

    One last thing worth mentioning is that there would be another way of achieving all this, if it was possible to save instances themselves in variables. I imagine that would be much more difficult to implement, but maybe I'm wrong, idk. If we could stuff Sprites into variables and be able to access their bits like "player.sprite_instance.instance_variable" then that would be even better. But I imagine that's harder, would we also be able to access behaviors on it then like "player.sprite_instance.8Direction.MaxSpeed" or things like "player.sprite_instance.AnimationFrame"?!

    Okay if you read all that you must be interested, so please go over here and vote for the suggestion.

    Vote here!

    And leave a comment with your feedback below, thanks.

  • I had time now to familiarize myself with the custom actions some more, I really love them. I found some things that I think would further improve them.

    #1

    I think the extension functionality of the custom actions would be much easier to see, and follow its logic, if there was an icon here when extended.

    maybe even -> (extends) [ico] item pickup

    [edit] #2 was fixed in the latest Beta version.

    #2

    The A key should rotate the blue object A

    The B key should rotate the yellow object B

    which it doesn't, both keys rotate both objects.

    I guess it's because I rotate the object family, but since I call the custom action explicitly from object A/B, I would expect that only the one I call rotates.

    A/B object test project download:

    https://cdn.discordapp.com/attachments/637830595778445322/1097172566680023090/custom_action_suggestion_AB_demo.c3p

    I can't use this feature for this type of general purpose functionality with the way it works right now, which is unfortunate, since it could help me reduce code complexity in my projects.

    Here is a more real world example:

    A simple action to update UI text with a little color flash animation to get the players attention, alerting them that something has changed.

    The family

    and I call them like in the A/B example directly via their objects.

  • You do not have permission to view this post

  • The SteamDB engine list is unfortunately only an educated guess, it isn't a guaranty that all these games were made with Construct, same for any other engine SteamDB is listing.

    So it can be a good starting point for further investigation, but I would not blindly put up a game on here without confirming that it's accurate.

  • The screenshot was of course made in a way to easily spot the problem, but as I wrote in the description of it this is not how it would be in an actual project.

    Here is a more realistic mockup of how it might look in a real project, though they would probably not be on the same event sheet. ( the problem is the same as in the previous screen shot )

    How often, or if at all, this would become a problem probably depends on the person using it, but this is the point I was trying to make.

    I think sending Scirra your project where you make heavy use of the self function plugin is a great idea, and probably the fastest way to make progress on this.

    Understanding the needs and having something for comparison if they decide to implement something like this makes a lot of sense.

  • So I see what functionality Overboy wants with the special trigger blocks, and I agree with him that something like this would be very useful, but I also agree with what Ashley said previously in the other discussion that functions should be executed in a single place or it can become messy pretty quickly, same with actions.

    This is a little mockup to show the issue, recreating the rotate action it becomes clear that the option of creating many executions of the same action/function call can lead to undesired/unexpected outcomes (here the object would rotate 180° instead of 90°).

    You could say, well just don't do that, and it is obviously easy to spot here, but once you trigger a dozens or so actions/functions with a single call spread all over multiple event sheets it becomes hard to follow.

    None the less I think the thing Overboy is proposing should definitely be an available functionality in C3, but I think of it more like a radio station and listeners.

    The radio is broadcasting information and doesn't care if 0 are listening or 1000.

    I think the newly added signal trigger fits that roll much better, but it doesn't have parameters so the info you can broadcast with signals is very limited.

    I think the actual programming term for this is the observer pattern. https://gameprogrammingpatterns.com/observer.html

    So maybe it would be better to keep functions and custom actions more to the point and add this functionality to the signal feature instead.

    But this is only my view on the matter, could well be that I missed a crucial point or failed to address some specifics.

    independently from how this should be implemented, I would like to know if the linked observer pattern is actually what you have in mind with the special trigger blocks proposal.

  • Idk, I think it would just take up even more space that you need to scroll through.

    I'd rather like to see the windows keeping their size, so I can make them bigger and get a better overview.

    Right now they are constantly resetting to the same small default size.

TackerTacker's avatar

TackerTacker

Member since 29 Apr, 2013

Twitter
TackerTacker has 4 followers

Connect with TackerTacker

Trophy Case

  • 11-Year Club
  • Jupiter Mission Supports Gordon's mission to Jupiter
  • Forum Contributor Made 100 posts in the forums
  • Regular Visitor Visited Construct.net 7 days in a row
  • RTFM Read the fabulous manual
  • x59
    Quick Draw First 5 people to up-vote a new Construct 3 release
  • x7
    Lightning Draw First person to up-vote a new Construct 3 release
  • x19
    Great Comment One of your comments gets 3 upvotes
  • x2
    Delicious Comment One of your comments gets 10 upvotes
  • Email Verified

Progress

20/44
How to earn trophies