Overboy's Recent Forum Activity

  • I agree scaling a game in C3 can be very hard, but to give credits to Scirra, i think there was tremendous progress made regarding that aspect during the past few years.

    (Templates, Dynamic Layers, Performance improvements, Sublayers, Find Results, Hierarchy improvements just to name a few game-changers stuff that were released)

    I've been working on my biggest project yet for a bit more than a year with C3, and in my experience, using both JS scripting and Addon SDK was unavoidable for a bunch of different reasons due to current Eventsheet limitations. I would advise anyone wanting to make full Steam games to learn using JS in C3 at some point.

    Still, I feel like the community is in right to ask for missing features as C3 is a sub-based evolving software (which is awesome btw!), and we're the actual users of the engine who know the shortcomings based on years of experience we accumulated trying every workaround (including weird eventsheet tricks, behavior hacks, JS scripting, HTML/CSS, and Addon SDK).

    However we need to provide actionnable feedback and fill detailed suggestion on the dedicated platform. And what we ask should make sense in the context of C3 and its own paradigms

    The annoying thing is that sometimes it feels like features suggestions represent a tiny part of the features that are released, but at the same time sometimes i'm glad when Scirra takes cool initiative pushing great stuff no one directly asked. I still hope the balance would continue to grow towards something like >50% of community requested features in the changelogs instead of approx 10%.

    Here are the things i've been missing the most while working and especially scaling my big project with their associated detailed feature request (some were written by me, some by other C3 users) :

    Hierarchy View

    Project View Search QOL : Ability to expand searched Folders/Families to find their content too

    Better Property View (worst part of C3 UX IMO)

    Right Click > Find all References of Variables directly from Property View

    Option to automatically select the layer of the selected instance

    Find : Option to hide/show ambiguous Results

    Reloading addons without restarting the editor (so Addon SDK is finally pleasant to use)

    (^ Scirra just released this in r363!)

    Custom Expressions

    Debugger : per Behavior/Plugin CPU usage

    Scripting interfaces for Custom Actions

    MeshPointX/Y/Z expressions

    Terminate actions for functions/Custom Actions

  • Fib Thanks for those kind words !

    In fact, this is quite the opposite, I always advise to get the UID values of any object at runtime only (whether they were created at runtime or not), using the MyInstance.UID expression to get them directly or to store them in variables to access them later. I never "hardcode" UID numbers.

    There are a bunch of reasons for which UIDToAnything is useful, i'll probably add additional screenshots on the itch page someday so it's easier to understand.

    Indeed if you don't hardcode your UIDs, you need to pick the instance to be able to use UIDToAnything, but ONLY ONCE. For example, let's say you have a Entity family (which contain Player and NPC Objects) with a TargetUID number variable. At some point you could set the TargetUID of your Player Object to the UID of a specific NPC.

    Then you could retrieve any info of this target and act on that NPC instance at any time, without picking them anymore, only thanks to the Player.TargetUID variable. For example you could use the UIDTo.DistanceTo(Player.UID, Player.TargetUID) expression that is packed with the Plugin to get the distance between the Player and that NPC without needing to pick the NPC Object.

    Even better than that, you could then set the TargetUID of your Player to an instance of a barrel Object (Barrel.UID) and your game logic would still work even if Barrel isn't part of the Entity Family. This is an other great aspect of the UIDToAnything Plugin, you can have common logic for different Objects Types and even different Object Classes (Sprite and Text for example) without putting them in the same Family.

    (also C3 don't let put Objects from different Object Classes like Text and Sprite in the same Family, so UIDToAnything allows you to workaround this big limitation of the C3 engine, which is very useful when creating a UI System for your game, as you can share the same logic for your 9-Patch/TiledBG/Sprites/Texts etc)

  • bankthink

    Whether you're using "instance variables" or any "data+ behavior", I would advise against using the Persist Behavior.

    There would be 2 main ways to retrieve your data once you switch your layout :

    You could make the object itself global as oosyrag suggested in their answer to your thread, if this make sense to your game.

    Or create a simple save/load system by storing the data on an other Global Object (putting relevant data in instance variables of this Global Object for example), or just using Global Variable. You could just save/load your Array/Dictionaries behavior data as JSON with single actions (you can store the whole JSON string you'll get into a single String Variable to retrieve it later easily). Same for the JSON+ behavior which would even allow you to have even more control on what you're saving/loading thanks to nested paths.

    All in all, Data+ can definitely help you to create a better save/load system or even simplify stuff a lot if you just go with the Global Object technique but in any case I would advise you to first try to learn how to store and load a instance variable of your object from one layout into an other using Vanilla feature :) Try what oosyrag suggested !

  • Hello RafaelMatos !

    I fixed the Array Behavior Debugger issue and pushed a 2.1 version of the Data+ Pack including those fixes.

    EDIT : I also fixed the o() and snap() expressions issues for the Util addon and pushed a 2.4 version including those fixes. (as we discussed on Discord the remap() expression was already working fine)

    Thanks a lot for reporting those issues :)

    And thank you for your kind words on itch, i'm glad you find those addons useful ! 🙏

  • BUT THERE IS MORE.

    Last week i was amazed by all the positive comments and messages I got from dozen of C3 devs on various channels (by mail, DM, on Discord and here). It's amazing to know those tools are already used by some devs for whom I have big respect and admiration, on some exciting games made currently made with this engine.

    So I decided to release my new addon for free :

    UTILS (Free Plugin)

    overboy.itch.io/construct-3-utils

    UTILS is an addon adding a bunch of utilities to Construct 3.

    It aims to be that one Plugin that can be useful in any project :

    • by adding a bunch of powerful and flexible Actions, Conditions and Expressions
    • enhancing the capabilities of Vanilla C3 features (Picking system, Hierarchy, Colors, Layers, Math expressions etc)
    • (all features are detailed on the addon page)

    Also, thanks to this tool :

    • no need to copy paste and edit manually all our "utilities" functions in every single project we make
    • no need for each of us to figure out and repeat the same tedious event tricks / complex math shenanigans, on our own, again and again

    UTILS 2.0 100% Funded in 12 hours via C3 Open Collective

    Shortly after publishing this Addon, Skymen suggested that UTILS and its future development (V2.0) could become the first project funded thanks to the brand new "Construct 3 Open Collective" he just created with Armaldio !

    It's a crowdfunding platform for awesome projects and tools released for free for the whole C3 community !

    So yesterday, we went ahead and launched the crowdfunding campaign for UTILS 2.0, and we were just amazed :

    THE UTILS 2.0 PROJECT WAS FUNDED IN LESS THAN 12 HOURS 🎉🎉🎉!!

    Thanks to all the sponsors and backers for their incredible donations to this Plugin !!!

    🏆 GOLD SPONSORS (100€+)

    • Samuel Bromley (500€ !!!) samuelbromley.itch.io

    • Blumgi (200€ !!!) blumgi.com

    • Kind Eye - Mikal (110€ !!!) kindeyegames.itch.io

    SPONSORS (20-100€) :

    • Bilge Kaan (50€)

    • fredriksthlm (20€)

    🙏 BACKERS (5-20€) :

    • Salman Shurie (10€)

    I already started working on UTILS 2.0 and it should be released pretty soon !

    We didn't expect to reach our 2 stretch goals so fast, so we added a 3rd stretch goal if anyone wants to contribute to the future development of this Plugin ! (V3)

    THE PLUGIN : overboy.itch.io/construct-3-free-plugin-addon-utils

    THE CAMPAIGN PAGE : opencollective.com/utils

  • DATA+ 2.0 MAJOR RELEASE

    THERE IT IS ! I'm thrilled to announce the new 2.0 MAJOR UPDATE to my Data Management Addon Pack made for Construct 3

    To thank everyone who already bought this pack, and after thinking a lot about how i could improve it as the best Data Management solution for any C3 project, here is what I came up with :

    • JSON+ V2 is here and it is now called DATA+
    • New Addon : Array as a Behavior
    • New Addon : Dictionary as a Behavior
    • JSON+ enhancements : improved a few details on the 2 JSON+ addons (Behavior and Plugin) based on user feedbacks.

    DATA+ 2.0 (Previously JSON+)

    overboy.itch.io/construct-3-json-plus

    In my Roguelike, i've been using JSON+ Behaviors everywhere and keep improving their features to solve all the issues I've ever had regarding Data Management and to have the full power and flexibility that I needed in such a modular Game Project.

    However DATA+ is meant to be a solution adapted to any project (from the most simple to the most complex) and to any C3 dev (from beginners to veterans), and I realized that JSON+ can be a bit overkill for some usecases. Indeed, in some situations Array and Dictionary are good enough. This is why I decided to release those 2 new Addon Behaviors : Array as Behavior, and Dictionary as Behavior.

    This way you can attach as many Arrays and Dictionaries as you want directly as behavior on your Objects and Families ! No need to create a bunch of seperate Objects and painfully picking them !

    (I also added a lot of screenshots on the addon pack page.)

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • Does it have autocomplete for existing keys?

    RafaelMatos

    As the Dictionnaries and Arrays Objects you're using, it doesn't have autocomplete for existing keys by default. (This would be impossible to achieve in Construct 3 for any kind of Data Plugin/Behaviors)

    However, I have included my favorite tips and tricks in the example .c3p provided in the Addon Pack.

    One of them is to use Constant Global String Variable as your Keys, especially the keys that you know that you'll use a lot :

    • This way you'll get autocompletion
    • If you want to reorganize or rename your Data/Properties later, it will auto-update everywhere, you won't have to manually edit everything one by one .
    • Also you can Right-Click > Find all references of that global variable easily to find every single place in Eventsheets where you used that Key
    • (Of course, you can also use Local String Variables if you only need that key in a specific scope, for example if all my Inventory Logic is under the same "Inventory" Group in my Eventsheet, i would use local variable instead)
  • RafaelMatos

    Yes JSON+ would definitely help for that purpose, not only because it would be far easier and efficient to pick and to use, but also thanks to all the enhancements that are provided in JSON+ and listed in the addon page.

    As I explained 2 messages above, it allow you to nest any amount of data under the same behavior. You could replace most if not all your Arrays and Dictionarries with a single JSON+ Object or Behavior if it makes sense in your Project.

    You can create/nest JSON arrays at any Path and JSON+ comes with handy Quality of Life enhancements and ACES for Arrays.

  • RafaelMatos

    In Construct 3, UID are the unique identifiers of your instances. It means that this number is guaranteed to be associated to only one instance in your game. Even Objects from different Families / Object Classes are guaranteed to never share the same UID. Even just created instances can't have the same UID as old instances that were destroyed long before. (instances of Text1, SpriteObject1, SpriteObject2 and FamilyX can't have the same UID.)

    It has always been a really handy feature of Construct for multiple reasons, i probably used them in 90% of my event blocks even before I created UID To Anything that makes them even more powerful.

    The main usecase is that they can act as "Instance Reference".

    You can "store an instance reference" in a number variable "MyUID", and then easily pick that specific instance thanks to the action "Pick by UID".

    To store the UID you want to retrieve later, you need to pick the right instance only once (and set it in a Global/Local/Instance variable for example). "Set MyUID to MyInstance.UID"

    UID TO ANYTHING allow you to do much much more thanks to the UID of your instances, as explained on the page. With this tool, you can do a bunch of actions and conditions but also retrieve expressions or instance variables of your instances only thanks to their UID. (even if you didn't pick those instance in your eventblock, as long as you stored the UID). It also solves a bunch of annoying limitations of the Family features and the Eventsheet in general.

    The UID feature (and, by extension, UID To Anything) can be useful in almost any system you could imagine in Construct.

    For example, let's say you have the "People" Family in your TopDown game, one of this Family feature is that People can target other People (their target). A "People" instance (Instance A) can store a reference of their targeted "People" instance (Instance B) thanks to a number variable called TargetUID.

    If you want to know the distance between Instance A and its target Instance B, you could just use the expressions UIDTo.DistanceTo(People.UID, People.TargetUID). Here People.UID and People.TargetUID are 2 expressions of the Instance A, but they return respectivelly the unique identifier of Instance A and Instance B. Which means you were able to get the data of Instance B without even needing to pick it ! UIDTo.DistanceTo is one of the many expression of the plugin, it allows you to get the distance between 2 objects only thanks to their UID.

    An other interesting thing is with UIDToAnything is that your Target could be an instance from any ObjectType/Family and even any Object Category.

    You could set the TargetUID to an instance of a Props Object (such as a barrel) by setting People.TargetUID to Barrel.UID and it would still work, even if it isn't part of the People Family !

    You could even set People.TargetUID to a Text instance (Text.UID) and your code that get the distance between your people and its target would still work ! Imagine how useful it is for a UI System to be able to share logic between Sprite, 9Patch, TiledBackground, Text and SpriteFonts for example.

    The goal of this plugin isn't to replace everything you were doing in C3 before, but it's an powerful additional toolbox to enhance the capabilities of eventsheet, that can be handy in many common situations and that allow you to work around annoying limitations of the engine.

  • Jase00

    UID is one of the safest feature you could imagine in the whole C3 engine. The UID shuffle option didn't break UID TO ANYTHING in any way.

    The example c3p included in the addon explains the best practices and tips and tricks about using UID in general by the way.

    You can add several JSON+ behaviors onto 1 Object Type but i'm not sure why I would do that in my games. JSON+ allow you to nest as many level of data as you want under the same JSON+ Plugin/Behavior. Let's say you want a JSON+ behavior to handle both the Inventory and the Relationships/Factions of a same object : you would just nest everything related to Inventory under a dedicated "Inventory" Key, like Inventory.EquippedHelmet = "Legendary Helmet", and same for relationship, for example : Relationship.Faction3.Admiration = 0.75. Everything could be under the same JSON+ behavior.

    The main usecase where i would have several JSON+ behaviors on the same Object is if those JSON+ behaviors were inherited from different Families allowing me to make common logic between different sets of Objects.

    For example : if I have an "Entities" Family (with data like Health, Damage Resistances) + a "Characters" Family (with data like Inventory or Relationship), both would have JSON+ behaviors, so an objet that is part of both Families would have 2 JSON+ behaviors

  • Thanks for your comments everyone, i'm glad you find those addons useful !!

  • OVERBOY'S TOOLS FOR CONSTRUCT 3

    Helloooo !

    • I've been making games for 10 years using various engines including Construct.
    • They were played by millions of people and showcased by the biggest gaming youtubers of the world. (Markiplier 35M subs, Jacksepticeye 30M subs, DanTDM 27M subs, just to name a few).
    • I'm also a big game jam lover and won the Ludum Dare 3 times.
    • I'm doing consulting/freelancing on Construct 3 projects.

    My Games, Tools and Asset Packs : overboy.itch.io

    I'm currently working on SECRET ROGUELIKE™, for which I created a bunch of tools to extend the features of Construct 3.

    Recently I decided to release some of them and was overwhelmed by the positive response it got, so I'm also sharing this here :D

    • Each tool is detailed on their own page listed below.
    • I'll update this list when i'll release new plugins (You can follow this topic if you want to get notified about major updates and new addon releases)
    • I hope it will help other ambitious C3 devs to achieve their games.

    Enjoy !

    DATA+ 2.0 (Previously JSON+)

    The Best Data Management solution for Construct 3 (1 Plugin & 3 Behaviors) :

    • JSON+ allows you to create all kind of variables, arrays and data structures (even at runtime !) for your game objects and comes with a lot of additional ACEs, Utilities and QOL enhancements, to make the whole process as fast and enjoyable as possible
    • It comes both with a JSON+ Plugin and a JSON+ Behavior
    • Example/documentation Construct Project (.c3p), which also includes a few tips and tricks I found
    • (2.0 Bonus) Array as a Behavior !
    • (2.0 Bonus) Dictionary as a Behavior !
    • Everything is detailed on the page.

    ADVANCED SIGNALS & CUSTOM EXPRESSIONS

    Create your own Behaviors using Events : Custom Expressions, Signals and Triggers (3 Behaviors) :

    • ADVANCED SIGNALS Behavior (Per-Instance Functions on steroid, supporting parameters, multiple trigger eventblocks and polymorphism)
    • CUSTOM EXPRESSIONS Behavior, create your own expressions and getter functions for your Objects and Families. You can even execute logic each time you use those expression and thanks to the polymorphism feature, the same expression could work differently for each Object member of the same Family.
    • SIMPLE TRIGGER Behavior
    • It basically allows you to create your own behaviors only using eventsheet. (In fact it's even more powerful than Behaviors on some aspect thanks to the polymorphism feature)
    • All those behaviors also support polymorphism, making the Family feature way more powerful.
    • Everything is detailed on the page.

    UID TO ANYTHING

    • Act on your instance and get/set their properties, expressions and variables without needing to pick them first, only thanks to their UID ! (Unique Identifiers)
    • Share logic between objects even if they're not from the same Family and even if they are from different Object Category for example (that's right you can share the same code for Text, Sprite, 9Patch and TiledBackground for example !!)
    • Act differently on 2 or more instances from the same Family or ObjectType within the same event block without doing weird tricks
    • Also allows you to work around a lot of Family and Eventsheet limitations, as detailed further on the page

    UTILS (Free Plugin)

    Good Luck on your projects 💪

Overboy's avatar

Overboy

Member since 21 Oct, 2013

Twitter
Overboy has 9 followers

Connect with Overboy

Trophy Case

  • 11-Year Club
  • Entrepreneur Sold something in the asset store
  • 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
  • Steady Visitor Visited Construct.net 30 days in a row
  • Enduring Visitor Visited Construct.net 90 days in a row
  • RTFM Read the fabulous manual
  • x18
    Quick Draw First 5 people to up-vote a new Construct 3 release
  • x15
    Lightning Draw First person to up-vote a new Construct 3 release
  • x25
    Great Comment One of your comments gets 3 upvotes
  • Delicious Comment One of your comments gets 10 upvotes
  • Email Verified

Progress

23/44
How to earn trophies