Okay, I see now. So it's really that big a problem to run several small backdrops on mobile? I make 4000x4000 levels with 15000-20000 backdrops printed, so I guess I'm screwed then. I guess I just have to hope something changes by the time I get the game done. Unless it's possible to print the scene like this without showing it on the screen?
Posts by MistaSub
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.
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.
-
-
Both layer and object visibility is accounted for with the "object is visible" condition. You can use this to check for whether a button is available or not. Also, I use a "Master Menu Object" in which I store menu state data, and then use that data to rule in, or rule out objects with particular qualifiers if visibility is unavailable as a data point (meaning the object is visible, but I want it "unclickable"). Furthermore, I use "mouse pointer is NOT over", when ruling out one particular case where I need yet another exception. In general I think, having several things visible on each other that can be clicked, but then making it so that only one of those is available at a particular time, while another circumstance could have both clickable, wreaks of sub par design. Meaning it sounds like unappealing design, even if you could make it work technically.
If the case is such that you use tiling or some sort of ordered layering that you want to remove sequentially, this must mean that you have a way of ordering the objects in the first place, and therefore would be able to print layer order data into an array; and if you are doing it in the editor as opposed to with code, you can use instance values to get this information. Then simply compare against the information to remove the top object. Also the new function "compare against minimum or maximum value" could be handy here.
**EDIT**
Just read marbenx answer, and if all you need is automatically detect the top object and delete only it on clicking, this is a really good way of doing it. I didn't even know mouse pointer is over, takes into consideration whether or not the hoverable object is actually visible at the point of hover. -
I don't understand what you've written in your code. But considering the graphics, this is definitely something you want to print and delete backdrops for, and use array data to retrieve collisions if possible. At least the graphics style would allow for it. Also, I have no idea if the application was even supposed to do what it did. I just got a bunch of "sections" of a map flash before me, until it started making an asynchronous beeping sound and crashed.
-
You can simply "delete all backdrops in a layer" by using an action in the storyboard control object.
-
If you scope for each after clicking on it, you get the opposite of what you want. Also, if you already create the objects by an ID to get them at their correct positions in the cirlce, you can just print their ID to a pool (list object) when destroying them, and then pull from that list object which position needs to be recreated and delete it in the list (thus making it a pool) when you want to respawn them.
-
Is you game turn-based or real time?
**EDIT**
it's way less taxing in a turn based game to create a minimap. What I do is offset a calculation area by player cell position, then on each turn destroy the minimap and recreate it, using the new positions. I also use an object with a distance calculation to set all values to a null value outside a circle to achieve a circular shape. -
Alright, so pop it in and see what it says. You could get a popup like this:
Please login to see this picture.
As you see it shows it was Box2D in this case.
I am sorry, thank you for the tip. I will definitely be checking out this debugging tool, just because yay to debugging. I was just explaining my experience with the random seeding. I don't actually have the crashing problem anymore with my level generation, or at least I think so. I have different biomes in my game, and one I think crashed due to sheer number of objects during generation, but I have changed it now to be less and the crash seems to have disappeared. I didn't even do it out of necessity, it ended up being a better map type, gameplay-wise. So I never had to look into it that hard. But I for sure loaded a frame that crashed previously, using the same seed. I am sorry, I didn't really understand your other explanation about memories and stuff.
-
I just wanted to add that let's say you end up having the flickering problem where two objects are at the same exact Y coordinate, meaning fusion can't decide which to put in front as long as it is running the action. If you only do this per "action" it's not a problem, but let's say you want to do it "always". What you can do is create a qualifier, for all entities, then a value for all entities with the qualifier (let's call it "tilt value"). Spread 1 in the tilt value, and then use "tilt value" * 0.00001 to create a small offset on the Y position so that no object has exactly the same position. This way you can avoid flickering.
-
That's probably not correct in terms of the random numbers generated. A crash could be from memory that's not always initialised correctly. C/C++ doesn't require the code to set the initial value of variables, so it'll inherit whatever the last program using that section of RAM left there. Freeing or creating memory without consistent initialization will make an occasional crash.
I am not entirely sure what you meant, but sounds like you meant there is some sort of memory reading difference that could cause the crash, even though the events are the same.
QuoteAs an aside, if you put latest version of DebugObject in frame, it can often tell you what extension is causing the crash.
I don't use any extensions though, except mouse object and window control object.
-
Just as thought experiment, is it possible to retrieve system time data in clickteam fusion without extensions? I mean something like (Player XPos+ ((DD*MM/YYYY^2)*ms)/min)-(xmouse/Player YPos))^ymouse, would be a pretty unbeatable randomizer, just as an example.
-
I would make an alterable value for the minimum value of the camera that updates when you enter the door. Then disallow the camera from being X amount of pixels to left from the minimum to force it to go to the middle like in the Castlevania example you provided. So make the camera follow the character yes, but only if it's position is larger than Minimum value + X, if it is less. force it right. The example assumes you are going from left to right through the door.
*EDIT*
I guess you don't need +X. I just thought it would be handy so you could input a "screen move amount value here", and always pull the minimum value from the door position or something. -
Suggestion 1:
This might not be applicable (and most likely is not if you want gaps in your list), but a piece of logic you might want to know about is you can set at start of your action a value to 0, then perform either a fastloop a particular amount of times or each through existing active objects, and add to the list 1 per detection, then you end up with the amount of positions taken. So it always initializes to 0, and adds when necessary. I use this for example to find out if the player inventory is full. This computation is pretty inexpensive, and I even do this every second, for a bunch of different stats in my game, to keep track of total available skills, and needs, etc. of a number of "crew members" in my game.
----------------------------------
So here's an example:
*Always
- set EXAMPLE THING to 0
- start each loop for "EXAMPLE MCGUFFIN"
* on each "EXAMPLE MCGUFFIN"
- add 1 to EXAMPLE THING
result:
EXAMPLE THING always corresponds to amount of MCGUFFIN's.
This is more powerful than comparing against number of objects because it allows you to scope against traits.
For example we could do this:
---------------------------------------
*Always
- set EXAMPLE THING to 0
- start each loop for "EXAMPLE MCGUFFIN"
* on each "EXAMPLE MCGUFFIN"
+ exampleString of EXAMPLE MCGUFFIN is "holy smokes this is handy"
- add 1 to EXAMPLE THING
result:
EXAMPLE THING is always the amount of EXAMPLE MCGUFFINS's whose exampleString was "holy smokes this is handy", instead of all MCGUFFINS.
---------------------------------------------
Suggestion 2:
If you want to move the line from the other list object to another, store the line number in a value and use it to insert at that line on the other list object. I am not sure I understood what you asked but, maybe this helps.
----------------------------------------------
Suggestion 3:
if you just want to order let's say inventory items in an inventory I would create inventory slots, with spread ID values, then always set position of item to inventory slot with ID value the same, and always spread value in the items as well. This is very easy to do, but it will always order the items in the order you created them when making the game. You need custom logic to prevent this. -
I can attest to a manual seed not generating the same thing every time. I generate a massive gameworld at random, and tried finding a level generation crash by inputting a manual seed instead of a random one, and thus regenerate the same world every time, to be able to analyze from a debug document what was generated. Even with a manual seed the gameworld is not generated in exactly the same way, albeit fairly similar.
So let me explain: I generated random seed in start menu, and furthermore did not affect the random seed generator once the frame was changed to the "gameplay" frame. I printed out the seed every time, and regenerated levels until I got a crash, then I manually wrote down the seed that I had displayed on the screen at the time of the crash, inputted this seed manually into fusion, instead of randomizing the seed, and most of the time the world would not crash with that seed. In my mind this must mean that the output was not the same, even though the randomizer seed was unchanged. -
I don't know if this helps, but I also noticed in my game that when I made a list of "enemy reactions", and tried to insert a global string into this list I noticed a problem with how fusion reads list objects. So let's say I wanted the enemy to say on line 1 "Hey! That's Global String With Player Name, shoot to kill!". The problem in my estimation is that, when the global string that doesn't contain any prefix, such as which object it belongs to (or this might happen even then when pulling from a list), fusion essentially pulls this from the list: Str$("Hey! That's Global String With Player Name, shoot to kill!") meaning, all it sees is text, no variables.
-
I just had this bug, first time in a long while. I noticed it has nothing to do with overwriting the behavior. Rather some bug is causing one behavior to open another one. So clicking behavior 3 might open behavior 1. Also, this affects runtime, and does act as if the behavior is doubled. I know this, because at the top line where the path is displayed, I got the name of behavior 1 when opening behavior 3, after thinking I had overwritten behavior 3.
-
**BIG EDIT**
So I noticed, that ALL of my scoping methods work when setting values to the objects, but not when printing a backdrop (it also works on initial generation, just not on load), go figure. I will probably at some point use this to make something that works, but for now I'm going to go sulk in the "I can not believe that I again came up with 8 different ways of scoping my logic, all which seemed correct but of course were not AGAIN, as it tends to go"-corner. And before you ask, yes I did meticulously go through the "Delete all", and "Delete created" in find all, several times. I am not deleting the backdrops.
**BIG EDIT**
Hello!
Do you know how to best regenerate the backdrops lost when saving frame state?
Here's my problem; I generate random levels, and they are so large that I can not use objects, but I print several layers of backgrounds on top of each other during level generation. When I use save frame state (which I have to do, due to the nature of the game, arrays are not an option, I need to save everything), I lose the backdrops. I try to recreate them, by saving a parallell array during initial generation, and pulling from that when regenerating the graphics upon loading. My problem is that I have now tried 3 or 4 different ways of regenerating the level, including eaching objects, and nesting fastloops with a tile printer object, and comparing against the array. But something is weird, I can not get this to work. Either I am misunderstanding why I can't pull the data from my graphics data array, something with the Z index I think. Basically I have tried, comparing against the array, with object position using both comparing two general values, or inside an expression of the printer object. I have tried eaching several objects, and moving a printer object, in both of these array comparison manners. Nothing seems to work. There is something I am doing wrong, where I can not read the array. I only use 2d arrays, when initially generating the level, so maybe it's something with the 3d array. I don't know, but I am misunderstanding something that is not obvious.
Does anyone know a good resource for regenerating tiled levels, when using load frame state? There must be a "correct way" to do this, am I right?
------------------------------------
This code does not paste into background anything. I am 100% the array information exists, as I have checked with a custom debugger + I previously on a separate Z index use this exact way to paste into background. The only difference here is that there are several array values to check for (altough I only posted 1), and that the Z layer is different. I must be misunderstanding something.
* Loading of Master Map = "gen gap tiling"
Master Map : Set Loading to "regenerating gap tiling"
Terrain Regenerator : Move to layer Ground Layer( "Master Map" )
Special : Start loop "gen gap tilin X" Frame Width / 32 times* On loop "gen gap tilin X"
Terrain Regenerator : Set X position to LoopIndex("gen gap tilin X") * 32
Special : Start loop "gen gap tilin Y" Frame Height / 32 times* On loop "gen gap tilin Y"
Terrain Regenerator : Set Y position to LoopIndex("gen gap tilin Y") * 32* On loop "gen gap tilin Y"
+ ValueAtXYZ( "Graphics Array", LoopIndex("gen gap tilin X"), LoopIndex("gen gap tilin Y"), 1 ) = 1
Terrain Regenerator : Change animation sequence to Stopped
Terrain Regenerator : Force animation frame to 19
Terrain Regenerator : Paste into background
-------------------------------------------
Once more, putting an "End the application" action in the * On loop "gep gap tilin Y" code, ends the application. But putting one in the array reading section does not. Meaning the conditions are supposedly not met, even though I know with 100% certainty that they are. I even removed all other code from the array except the one nested loop performed previously. The first one executes, and this is somehow never true, even though it is always true. My mind is blown.
----------------------------------------------
Update, this does not work either:
* Loading of Master Map = "gen gap tiling"
+ Run this event once
Graphics Array : Set Z dimension index to 1
Master Map : Set Loading to "regenerating gap tiling"
Terrain Regenerator : Move to layer Ground Layer( "Master Map" )
Special : Start loop "gen gap tilin X" Frame Width / 32 times* On loop "gen gap tilin X"
Graphics Array : Set X dimension index to LoopIndex("gen gap tilin X")
Terrain Regenerator : Set X position to LoopIndex("gen gap tilin X") * 32
Special : Start loop "gen gap tilin Y" Frame Height / 32 times* On loop "gen gap tilin Y"
Graphics Array : Set Y dimension index to LoopIndex("gen gap tilin Y")
Terrain Regenerator : Set Y position to LoopIndex("gen gap tilin Y") * 32* On loop "gen gap tilin Y"
+ ValueAtXYZ( "Graphics Array", index x( "Graphics Array" ), index y( "Graphics Array" ), index z( "Graphics Array" ) ) = 1
Terrain Regenerator : Change animation sequence to Stopped
Terrain Regenerator : Force animation frame to 19
Terrain Regenerator : Paste into background-----------------------------------
Here's another approach I tried:
I first generate terrain objects on each cell, instead of moving a printer, and then perform this code:
* Loading of Master Map = "gen ground tiling"
Master Map : Set Loading to "regenerating gap tiling"
Start loop for each one of Terrain, loop name "gen ground tiles"* On each one of Terrain, loop name "gen ground tiles"
+ Terrain: ValueAtXYZ( "Graphics Array", CellX( "Terrain" ), CellY( "Terrain" ), 1 ) = 1
Terrain : Change animation sequence to Stopped
Terrain : Force animation frame to 19
Terrain : Paste into background---------------------------------------------
This does not work, and I compare Value at XYZ inside a "compare expression to value" for each object here, it does not work when doing it with "compare two general" values either. I am quite frankly out of ideas. Furthermore, the weird thing is that when I first generate the levels I use all of these techniques in 2d arrays, here and there and they all work. Only after loading the frame state, and comparing against the parallell graphics array does it fail. Prompting me to think it is either something with the 3rd dimension in the array, or something entirely different like fusion disabling generated backdrops altogether after loading frame state or something along those lines. -
He means the 'forward/back' thumb buttons on the mouse (the OS usually considers them buttons #4 and #5, with #3 being the middle button). I believe they're mapped to "View>Back" and "View>Forward" by default.
I could be wrong, of course, but my guess is that the problem might lie somewhere here. MistaSub, my advice is to try and pay extra attention when you use those buttons. Because maybe there's a Fusion bug that causes back/forward to trigger the wrong behaviour editor in some situation. Or maybe there's some situation where you're accidentally moving to a different editor than the one you think you're moving to.
Yes, you are correct about what I meant. So, this has happened twice since I posted this. And it just happened the second time, and sort of on purpose. I deleted a behavior, thought of this thread, and switched back into it from another behavior with the mouse thing I talked about (switched back to it after I had deleted it). And lo and behold, one of the behaviors in the object overwritten by the deleted one. Unless, I screwed this up, there might be a bug there. Unfortunately I am not sure if the behavior that was overwritten was the one I switched to (the one I was backing into the deleted object from), but I feel like it was another one, because I tried to test it. I don't know, I hadn't really touched this object in 2 years, and it was one of the first ones I created, and all the behaviors look pretty similar to me now on the surface. Another detail, in case it matters is I deleted all events from the behavior, then deleted the behavior, this is something I end up doing when I am refactoring.
Clarification: I mean I caused this to happen clearly, hadn't happened in a long time. At first I felt like it didn't work, because the behavior I switched from remained intact, but when I booted the game, a separate behavior in that object had indeed been overwritten. I don't know, to me that feels like either I am the biggest idiot on the planet, or there is a bug there. Both of which are completely possible. -
Wow, you guys are right! I just assumed this was a thing for the longest time. But what the hell is overwriting my behaviors? The name is the same as before, but all of a sudden one behavior has been overwritten by another behavior from the same object. This happens while I am working on two different behaviors within an object so often, that I have started a habit of trying to not move the mouse while clicking the behavior edit tab. Another thing I do is use mouse 3 and 4 all the time when making my objects. I mean, to switch between behaviors in the project.
-
Hello!
Is there a way to disable the feature of dragging another behavior onto another thus replacing it? This is definitely on the top list of worst features of anything ever, and I own East West Word Builder which was designed by someone who was using all substances at once. If this is not a thing, could we just remove it in the next version, or at least get a prompt if we want to actually do this? I just wrote 200 events in a behavior and since I just did it, didn't have a backup of the file, then I accidentally dragged another behavior onto this, and tried to find a weird looking bug for an hour, until I realized I had simply overwritten my entire code with this magnificent feature.
Sorry about sounding sarcastic, but I try to find the funny in this. This feature suuuuuucks. -
I bought the 9-slice object by NaitorStudios thinking it would solve this. I've tried so long to figure out a way to just calculate the rectangle made by the background of a randomly generated text, and it still seems my best option is to make an estimation engine with a monospace font, or redesign the UI with a fixed size for messages. Am I right in saying that this seems to be a very hard problem? Such that, there just isn't really a way to do this at the moment?
Simply put:
I want to input a text of variable size into a text object that displays text, then I want to know what size the resulting background is.
**EDIT**Rather, I KNOW that this is a very hard problem, and therefore was hoping someone would have solved this problem on this platform. I never got a straight answer, I would just like to know if I'm better off redesigning the UI, and not wasting more time on trying to find some obscure blitter/text formatting whateverness that works on every platform. Like, are most games using Clickteam Fusion designed around this issue? Or just most games in general?