Overboy's Recent Forum Activity

  • 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.)

  • 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)
  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • 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 !!

    I understand the apprehension, here are some thoughts regarding some points mentionned above :

    • C3 is probably the most stable engine you can think of. You can basically open any 7-10 years old .capx from the Construct 2 era and it just still works in last beta. You couldn't say the same about Unity, Godot, Game Maker or Unreal, yet 98% of the successful games made with those engine are using 3rd party tools in production, even if it's in fact "riskier" to use addons in those engines, or to use those engines in general if backward compatibility break is such a big issue. The truth is that Construct actually lacks 3rd party tools enpowering C3 devs.
    • Ashley is incredibly careful about making sure nothing breaks backward compatibility and he does it very well (it only happenned in very very rare occasion on tiny details and the documentation was available to handle those particular cases long before it happens).
    • ProUI was by far the most complex addons ever made it was doing a huge amount of stuff related to many risky C3 features at the same time. This was a suite of interdependant addons that basically created a full Hierarchy system (among many other things) before it was a thing in the C3 engine and was using a big amount undocumented features of the addon SDK.
    • I have a more "stand-alone" and "simple yet powerful" approach in all the plugins I made so far.
    • My addons also aren't based on API of other services (ads network for example) that evolves over time and need active maintaining.
    • Most of the addons ever made in Construct aren't risky. At the beginning of Construct 3, 5 years ago, there were a few changes in how addons must be written to support the new c3runtime and the worker mode. But since then, nothing changed.
    • Keep in mind every single Action, Condition, Expression, Plugin or Behavior that are included in Construct are in fact addons. Fundamentally nothing really differs between an official addon and a third party addon. They're working on the same base.
    • IMO the most risky thing right now regarding 3rd party tools are effects as WebGPU is being deployed and there is this whole compatibility topic with WebGL1, WebGL2 and WebGPU. But this has to do only with effects and I don't plan to publish Effects, I'm only making Plugins and Behaviors.
    • I've been making games with Construct for 10 years and i'm still here. I'm working on the most ambitious project i've ever made (SECRET ROGUELIKE™) and I developped it so it could be a framework that will allow me to develop even more games on the same base. Construct 3 freelancing/consulting is the biggest part of my freelancing/consulting revenues (more than Game Design and Pixel Art). All in all, chances are high that i'll be still be working with C3 in a few years.
    • All the addons I published so far (and the many more i created for my Roguelike and that i didn't release yet) are low risk. Most of the time i'm working with last beta on my big game and never had to edit anything for them to work while upgrading. When publishing an addon, I'm even more cautious regarding every single details to make sure I won't have trouble with people using them. Most of my addons could have be written exactly the same 3 years ago and still work the same. (Minus the fact i make my best to support the last features of C3, such as TemplateNames, ImagePointZ or BBoxMidX/Y in my UIDToAnything plugin for example : I want them to be on page with last stable C3 enhancements).
    • From my experience, replacing a lot of events is sure annoying to do but isn't that impossible to achieve when needed. I have 6075 event blocks on my project and reworked everything multiple time to implement my addons when I first created them (to replace annoying tricks - non performant/ineffective ways i had to handle things before or just because Vanilla C3 didn't let me achieve what i wanted to do). Even in such big projects, it takes a few hours at most. Also when Scirra release a useful update, that's already what we're doing anyway, replacing old events with better and newest features.
    • The recent dynamic layers were one of the most requested feature for many years and even Skymen (who is a friend of mine and who helped me a lot over the past few years btw) was begging for that feature to be released. His addon was mostly a proof of concept to use with caution because it was using undocumented features and hijacking the engine to work.
    • IMO it wouldn't be in Scirra interest to copy my plugins and make them obsolete anytime soon, there are hundreds and hundreds of features and suggestions that are requested for a long time and that are very important and impossible to achieve no matter how skilled you are at Addon-Making, Eventsheets and Javascript. They probably better put focus on those impossible-to-do stuff or missing spot rather than convincing me right away that developping and publishing high-quality addons for C3 devs isn't worth my time. (even if I already made the plugin for myself, the fact to double-check, polish, publish, market and explain them takes a lot of time). It would be a strong signal to any experienced dev that they should not bother creating premium addons.
    • The top most missing thing for Scirra to be at the same level of the biggest engine out there is more people like you and me, or guys like Skymen/Federico. Community members that dedicate a lot of time and effort to create awesome tools, ressources, spend time helping fellow devs. A game engine = its community. The small (extremely talented) scirra team can't be everywhere. The best way to attract talented and dedicated devs is to make sure it's worth it and safe for them to work within the Construct ecosystem. (Selling tools, making great games, creating Youtube Content). I think the Affiliate Program they just released today (and the Asset Store they released a few month ago) are proofs they understand the power of the community and are moving toward this direction.
    • If someday i leave the community (don't see why it would happen anytime soon), i'll probably open source my tools so other devs can maintain/update them. (if they ever need to be updated which i'm not even sure)
    • I'm using all my addons extensively in my own production, that's why I made them in the first place. I want them to be perfect.

    I took the time to answer those points in details, but I would appreciate if this topic doesn't become a discussion about the history of construct or if it's safe or not to use 3rd party tools in general.

    I went an extra mile and explained a few extra things I discovered/learned/understood over the past few years, I hope it helps :)

    It's up to everyone to decide what's risky or not, what's useful for their game and I prefer that the people that buy my addons are relaxed about that. I'm mostly targeting ambitious Construct 3 dev, who are serious about gamedev/their project and who don't worry too much about spending a few dollars in tools that provide great value and that took a lot of effort and R&D to be made, especially if they know how useful it would be for their productions.

    Thank you for raising those points and for your interest in my tools, I'm very happy to see how well the whole Construct 3 community welcomed them so far.

    If those 2 tools keep doing that well, I'll probably release more of the best tools I made in a few weeks/months ! I still have a lot of exciting stuff 👀

  • 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+)

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

    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

    overboy.itch.io/construct-3-object-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

    overboy.itch.io/construct-3-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)

    overboy.itch.io/construct-3-utils

    Good Luck on your projects 💪

  • Oh yeah , i just meant that if a Spritesheet folder results in just a little 256x256 px spritesheet (because there is just a few images inside), then it shouldn't try to merge it with an other small spritesheet from outside this Spritesheet Folder.

    But yeah there could be several textures for 1 big Spritesheet Folder.

  • This would be amazing but i think it would be better if we could turn a Regular Folder into a Spritesheet Folder (so a setting per folder) instead of a global project setting turning all Regular Folders into Spritesheet Folders.

    This way we would still be able to use folder for organisation purpose as it works right now and create just a few special "Spritesheet folder" dedicated to memory optimisation whithin the same project.

    It could be an option on the right click context menu of Object Folders :

    Right Click > Turn into Spritesheet Folder (that folder would have a slightly different icon so we immediatly know this folder will force spritesheet packing for all its children)

    Right Click > Turn into Regular Folder (turn back the spritesheet folder into a regular folder)

    Regarding nested Spritesheet Folders, it should probably pack the Spritesheet subfolder into a single spritesheet and the content under the Spritesheet parent folder that isn't itself under a Spritesheet subfolder into an other spritesheet.

    Which means each Spritesheet Folder would be guaranteed to generate a different spritesheet no matter the size of its texture and their parent/child relationship.

  • EDIT : I released an addon pack including a Custom Expressions behavior and everything else i've been advocating for in this thread !

    overboy.itch.io/construct-3-object-signals-custom-expressions

    I posted a suggestion for Custom Expressions

    Vote here: construct23.ideas.aha.io/ideas/C23-I-336

    How it works :

    • It would work the same as returned Function.
    • You can use them using an ObjectType.MyExpression(MyParams) expression.
    • The special event block would be named "MyObject expression MyExpression1 -> Number" like in the mockup.

    Benefits :

    • It would support polymorphism
    • we would be able to create getter function very easily.
    • Would help to keep complex projects clean and readable.
    • No need to use Functions and passing UID parameter anymore
    • Just "MyObject.myexpression1" instead of "Functions.MyObject_myexpression1(MyObject.UID)"
    • Just "MyObject.myexpression2(Params)" instead of "Functions.MyObject_myexpression2(MyObject.UID, Params)" (look how long and unreadable it can get currently)
  • Yes I understand but at the same time, stuff like conditions and actions are SOL-based in Eventsheet while their equivalent in JS interfaces are instance-based.

    It would be better if Custom Actions scripting interface followed the same logic. SOL-based in eventsheet but instance-based in JS.

Overboy's avatar

Overboy

Member since 21 Oct, 2013

Twitter
Overboy has 7 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
  • x11
    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