Build 292.14 - Release version

Welcome to our brand new Clickteam Community Hub! We hope you will enjoy using the new features, which we will be further expanding in the coming months.

A few features including Passport are unavailable initially whilst we monitor stability of the new platform, we hope to bring these online very soon. Small issues will crop up following the import from our old system, including some message formatting, translation accuracy and other things.

Thank you for your patience whilst we've worked on this and we look forward to more exciting community developments soon!

Clickteam.
  • Following on @Please login to see this link.

    Imagine if you could organize and put in your own little "blue section titles" as well. Instead of dividing by type like value, string, flag it would be on your own terms in whatever categories you like.

    A character object in your game could have variables organized like:

    And clicking a value/flag/string label would also allow you to change it's description text at the bottom. Great for reminders/notes. I found those super helpful for shaders where you could add them via XML.

    Please login to see this link. Please login to see this link.
    Freelance Dev | Currently Working on Jarvis | Please login to see this link.

  • Something like what you guys are all suggesting would be awesome!

    As my project gets more complex and I implement and/or consolidate more of Spryke's functionality, I'm finding myself wading deeper and deeper out into the land of distant altVals. For example, I'm currently building an NPC movement system that will let me quickly and easily apply various preset movements to various objects with a simple command (eg. "moveToSpryke" can move any object to where Spryke is, using a sine ease-in-out movement....or "jumpHeavy" will make something move up using a "back" ease-in movement, then pause briefly, then back down using a quadratic ease-out movement, to give the impression of a bulky object jumping). To ensure I can use this system on anything (NPCs, enemies, death-camera that glides from death point to respawn point, whatever...), and to ensure that I can do all sorts of things using this system (move smoothly, move abruptly, move with overshoot, rotate, scale, switch animation, fade, reappear, etc. etc. etc.) I need to reserve a whole bunch of altVals on all my objects, starting at Alterable Value BA:

    Please login to see this picture.


    I'm infinitely grateful for :cf25+:'s altVal increase, because without it what I'm doing basically wouldn't be feasible. But I do wonder how far into 'distant altVal land' I'm going to have to go eventually. At the moment, if I create an object that I want to support this movement system, I have to click the "New" button some 75 times so I can reach the required altVals. When I add some other system in the future, that will be 90 clicks, and so on X)

    Please login to see this link.
    My Fusion Tools: Please login to see this link. | Please login to see this link. | Please login to see this link.

  • [MENTION=15682]Volnaiskra[/MENTION] What a nightmare! But... I think we can optimize it. It'll mean more objects, but less work. Here's my idea:

    When an NPC or other Active that requires this movement system is created, also create a EZMover object at its location. Set it to not be visible at start (so also turn off Save Background and Transparent to save that kilobyte of VRAM), give it an EZID alterable value equal to the fixed value of the parent object, and set its X and Y position to always be equal to the parent object's X and Y.

    Now for this EZMover object, give it all the movement values you've listed above. You'll use this to store and set the values you need to compare to, but do the actual movement on the parent object. As long as each line for movement is scoped to the child object (ie EZID("EZMover")=Fixed Value("player") or whatever), you can run movement calculations on a single EZ object and then transfer those values over to the parent object quickly and easily. This way you don't need to make 255 individual but generalized movement values per object, and can instead reserve their alterable values for stuff that is specific to that object.

    Alternately you could dynamically fill an array with these movement values for every single individual object and read from that array but hoo boy is that gonna be a pain to keep track of.

  • [MENTION=7886]dsilvers[/MENTION]: dang....that's a much better way to do it. Hmm....I'm in a dilemma. I've just about finished my system now. Now I'm not sure if I can be bothered to go back and change everything to the system you suggest. And I'm wondering whether my system might be a little more performant, as Fusion won't have to spend time syncing and moving extra objects. But your suggestion is more elegant, and would probably save some work later on - not to mention free up those altVals. I'll have to think about this. Either way, thanks for the suggestion, and I'll definitely keep it in mind the next time I do something like this!

    Please login to see this link.
    My Fusion Tools: Please login to see this link. | Please login to see this link. | Please login to see this link.

  • Believe it or not I use this system in Mondrian for one very specific purpose: particles. Since the game has to make quite a few particles, which come in multiple shapes and with animations, and I wanted to avoid making too many kinds of objects, I have one particleManager object that spawns wherever particles are called, pulls values from wherever it needs to, generates the particles over a period of 1-4 frames (depending on the type) and gets destroyed. In terms of performance it adds statistically nothing. The game still only takes 80mb of RAM to run at 1080p 60fps and since I spread the particle generation out over a few frames, no framerate hiccups either.

    Since Fusion is only generating one kind of object, it's able to scope very efficiently, and further duplicates of the object will add almost nothing to the required resources. Since they won't be drawn, they won't add anything to VRAM either. In Spryke's case, it'll take some time, but a For Each loop will do you wonders. You can generate the EZMovers right at the start of the frame, or generate one for each active object that needs it within a certain distance of the player, or whenever that object spawns in your code. Honestly, I don't think it's going to take you too long. For instance, when I first made Mondrian's level editor, I thought it would take me a year, but it only took me a weekend. It's proven to be the most valuable weekend of the project, as I was able to stop worrying about hard coding in generation for each individual level and start worrying about cranking out content.

    It's one of those situations where you have to ask yourself, is it worth spending 3-4 days on this one system to save countless hours of work down the line?

  • Feature Requests

    Is it possible to open a dedicated thread for feature requests so that they are kept separate from the bugs? When you do a search for something all these very long 292.xx threads pop-up and there's no telling if it's because of a reported bug, feature request or something mentioned in passing. Also people keep asking for the same features...

    Module 2.5+ Is it possible to alert us that a .mfa uses 2.5+ functionality if we open it and don't have 2.5+ installed?

    Pause Function

    • Would it be possible to include a setting: Exclude this group from pause - it would be helpful if you have a pop-up menu that you don't want paused but you want the rest of the game paused.
    • Additional feature - also directly linked to ability to customise a pause function - a setting to save the state of the group - so if it is deactivated and then reactivated it continues where it left off and doesn't start over.
    • Because of your "dead" pause feature it often returns a black screen, in windows and also on my cell phone which means I try to avoid Fusion's built-in pause as much as possible. Keeping one group alive, would also solve those two issues.



    Random Range: Would it be possible to make it work with decimals - so if you type 0.1 - 1.0 it will select a decimal between those two ranges.

    Casual games: Please login to see this link.

  • Quote

    dedicated thread for feature requests

    You would get the same problem, this thread would quickly become huge. Unless we clean it up and on a regular basis delete all the new posts and report the requests in the top post. Can't wait for the next bug box...

    Quote

    Module 2.5+ Is it possible to alert us that a .mfa uses 2.5+ functionality if we open it and don't have 2.5+ installed?

    When a MFA uses incompatible 2.5+ features, the normal version of 2.5 says it cannot load it "because it was saved with a newer version". Unless we forgot to detect an incompatible feature? which is possible.

    Tip: get 2.5+ during the next sale, you won't regret it. :p

    Quote

    Would it be possible to include a setting: Exclude this group from pause - it would be helpful if you have a pop-up menu that you don't want paused but you want the rest of the game paused.

    In the current version no events are executed while the game is paused. Not sure why this was done like this, there are probably good reasons. I'll check if we can change it anyway. I agree the current Pause system is very (too) basic. It's an important change, I can't say yet if it can be done in 2.5.

    Quote

    a setting to save the state of the group - so if it is deactivated and then reactivated it continues where it left off and doesn't start over.

    Do you have a simple example that shows what you mean?

    Quote

    Random Range: Would it be possible to make it work with decimals - so if you type 0.1 - 1.0 it will select a decimal between those two ranges.

    We would need another function with an additional parameter (the number of decimals). IMHO a bit over-the-top, the solution is quite simple, just do RRandom(0, 10) / 10.0.

  • Thanks for the reply - I note "they" don't give you weekends or nights off... terrible.

    You would get the same problem, this thread would quickly become huge. Unless we clean it up and on a regular basis delete all the new posts and report the requests in the top post. Can't wait for the next bug box...

    No I wouldn't - because I'd just skip that thread all together.

    Quote

    When a MFA uses incompatible 2.5+ features, the normal version of 2.5 says it cannot load it "because it was saved with a newer version". Unless we forgot to detect an incompatible feature? which is possible.


    I did have the experience where I couldn't run a .mfa because it couldn't find something and I couldn't find the particular event to disable it - so assumed it was either a child event that I couldn't see or perhaps a global event using a qualifier. If I encounter it again, I'll post a link. I've never seen that warning...


    Quote

    Do you have a simple example that shows what you mean?


    For example, if I just want a group activation event to run once, I can't put in there - run this event once.
    If you want an example - line 4 - doesn't run at all because I put in the code - run this event once - and if I take it away then it runs every time the group is activated. That's one example - there's more, but it's more a feature I had
    in other software - where if you deactivated something it was suspended and when you activated it again it resumed - much like your pause does.


    Quote

    We would need another function with an additional parameter (the number of decimals). IMHO a bit over-the-top, the solution is quite simple, just do RRandom(0, 10) / 10.0.

    Random Range - could you put that little calc in the documentation please?

    Yes, I know everything has a work-around - but there's so many of those things that I can't keep track - I keep finding errors because I forgot - that won't work here, and that won't work there... And when there's no reminder / alert and Fusion just does nothing it makes troubleshooting a little challenging.

  • While we're at it, might just throw in something I've wanted for years:

    Functions!! :D

    Yes, real functions with input and return arguments that can be executed in a sequence of events without messing with the fusion selection stack!

    They would work exactly like fastloop, they would execute when called in the event list, but would return a value or string (or array of values/string) that can be used directly as input to something else, like a counter or alt value.

    Right now I use fastloop for functions, and global values as input and return arguments, and it works ok but it's quite messy and can cause problem sometimes if the global values are already in use (nested functions for example).

    Anyways, I'm sure this has been suggested in the past, but it would really make fusion 2.5 much more powerful in my opinion. Maybe fusion 2.5++? ;)

  • There are several function objects (Advanced Function, Fast Function, etc), they already work like fast loops, they are a bit more useful but still not like true functions. True functions are already in the wish list. I can't say yet if we'll have time to implement them before F3 is ready.

  • I also have two feature requests that I think would save time for users, especially since the object limit will be raiser from 2k to 30k objects.


    1. The ability to right click on an object in the Frame and Event Editor and choose the option "Put in folder >" where hovering this option would open a sub-menu with the object folders that have been created in the Event Editor.
    This would make it much easier to actually put specific objects into your object folders.

    The reason I would like this is because dragging objects one by one in the Event Editor to the correct folder takes/wastes a lot of time that could be spent doing more producti.
    The reason I think that having the ability to right click in both the Frame and Event Editor is that it probably could be possible to put multiple selected objects at once into a certain folder from the Event Editor.


    2. The ability to right click in the object bar and choose how to sort objects from the in the Event Editor.
    Perhaps a choice to sort by name/created date/size. Name would probably be the one I would use.
    It would also be good if you could right click on an object folder and choose how to sort the objects inside that specific folder. Also a choice to sort all objects both outside and inside of object folders.

    My project: Please login to see this link.
    - vSv

  • Funny you brought up that request because I was just doing a lot of dragging and dropping objects into folders recently and thought how time consuming that is doing one object at a time. Sounds like an idea I could support!


  • And it would be uesful if frame folders are synced with event editor folders and object select dialogue box (pop-up when inserting a new condition /action).
    image if you want to program one object, you have to search every time or scroll down a long long list......
    I also wonder if it will be possible to pin several objects (Like movement controller or value container) always on the top of object list.

  • If your objects are next to each other you can just drag the folder bracket (When Folder expanded) instead of dragging them one by one.

    As for ordering objects you could use a well organised naming convention.

    I agree folder syncing across editors would be nice also Sub-folders would also be handy

    Some form of multi-select would be awesome too

  • Another feature request X)

    Currently, when you open the Expression Editor, the contents are highlighted in blue:

    Please login to see this picture.


    Then when you type something in the search box to narrow the range of objects, the contents are no longer highlighted:


    Please login to see this picture.


    Then, if you have poor working memory like I do, you frequently can't remember whether or not the contents are highlighted, so you're never sure whether choosing an item from a dropdown will replace the contents or append to it. And if you're like me, this ends up costing you a lot of mistakes, second-guessing, and lost focus throughout the work day.


    Please login to see this picture.


    It makes logical sense that the contents are no longer highlighted blue when you type in the search field, because only a field that is 'typable' should be highlighted. But perhaps there could be another way to show that the contents have lost focus, without entirely obscuring the fact that something is highlighted? Perhaps changing the highlighting to grey in such circumstances?


    Please login to see this picture.

    Please login to see this link.
    My Fusion Tools: Please login to see this link. | Please login to see this link. | Please login to see this link.

  • Feature Request:
    Would it be possible to choose the value by using a str$(valuename) rather than just a numerical expression? in my case this would be something like "Scale" +Str$(LoopIndex("PartLoop")).
    I'm currently using numerical offsets, but this would be easier.

  • Feature Request:
    Would it be possible to choose the value by using a str$(valuename) rather than just a numerical expression? in my case this would be something like "Scale" +Str$(LoopIndex("PartLoop")).
    I'm currently using numerical offsets, but this would be easier.

    I think what you’re trying to do is already possible [MENTION=10703]JohnArtbox[/MENTION]
    Do you mean choose alterable value using expression?..

  • I think what you’re trying to do is already possible [MENTION=10703]JohnArtbox[/MENTION]
    Do you mean choose alterable value using expression?..

    I think what he means is that if you have an Alterable Value A of an object "Fred" that you've renamed Scale5, and an Alterable Value B that you've renamed Scale6, you can currently reference them as Scale5("Fred") and Scale6("Fred"), and AltValN( "Fred", 0 ) and AltValN( "Fred", 1 ), but you can't reference them as "Scale"+Str$(someValue)("Fred").

    In other words, there's no way to deconstruct/reconstruct the altVal name by splitting it into parts; you can only reference the name in its entirety, or its index number.

    Whereas we can do this sort of thing, for example, with an Active name, by using the Create By Name action: Create "Fred" + "Flinstone" at (0,0) layer 1

    Please login to see this link.
    My Fusion Tools: Please login to see this link. | Please login to see this link. | Please login to see this link.

  • I think what he means is that if you have an Alterable Value A of an object "Fred" that you've renamed Scale5, and an Alterable Value B that you've renamed Scale6, you can currently reference them as Scale5("Fred") and Scale6("Fred"), and AltValN( "Fred", 0 ) and AltValN( "Fred", 1 ), but you can't reference them as "Scale"+Str$(someValue)("Fred").

    In other words, there's no way to deconstruct/reconstruct the altVal name by splitting it into parts; you can only reference the name in its entirety, or its index number.


    that's it exactly. Currently I have to have identical altVal setups for all objects so that I can reference with a formula like:
    ( Dir( "Brain" ) / 4 ) + 10.
    To make this cohesive across objects when some have one direction and others 8 means a lot of wasted values and strings. It works but it seems wasteful.

  • Quote

    For example, if I just want a group activation event to run once, I can't put in there - run this event once.
    If you want an example - line 4 - doesn't run at all because I put in the code - run this event once - and if I take it away then it runs every time the group is activated. That's one example - there's more, but it's more a feature I had
    in other software - where if you deactivated something it was suspended and when you activated it again it resumed - much like your pause does.

    Oops. You just need run this event once - the on group activation is redundant - just saw I had done that in a game. Then it works as I need it.

    Casual games: Please login to see this link.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!