Posts by ChrisBurrows

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.

    To be honest, once you start doing anything remotely advanced in Fusion, the workspace gets reaaaaally ugly, and worse, exponentially unreadable. I simply had no idea how truly beautiful code could be until I began learning real languages. I mean I just had no idea. Their structural perfection is matched only by their potentiality, and the collaborative forethought and innovation truly moves me. Dawn stings these bloodshot eyes, yet in awe, they stare into my terminal, marvelling at the literally unobtainable body of knowledge within it. I commit this post to the void with a glad heart. For within each seed, there is a promise of a flower, and within each death, there is a new life.

    LB, Tigerworks, Sketchy, Nifflas, they're all dead. I should reach the frontier in about six weeks. With a little luck, the network will pick me up.
    This is Christopher Burrows, nomad, thief, programmer, and wild organism, signing off.

    Sure. First up, if you're unaware, Fusion reads events from top to bottom, and executes actions within each event, from top to bottom.
    Double click any action to view it a list of actions for that event. I changed the icon of the Area Pool list object to red for readability.

    Please login to see this picture.

    Please login to see this picture. : Set RandomNumber to Random(2)
    Random(x) is function which generates a random number between 0 and x-1. So this assigns a global variable called RandomNumber to 0 or 1.

    Please login to see this picture. : Set AreaName to List Line Text$("Please login to see this picture."), Random Number)
    Retrieves the line from the Area Pool list object corresponding to the value of RandomNumber, and stores in a global string called AreaName. It's worth noting I changed the base index (the first line) to have an index of 0 rather than 1, the reason being Fast Loops have a base index of 0 and it makes comparisons easier. You change it in the List Object properties.

    Please login to see this picture. : Delete line RandomNumber
    Deletes the line corresponding to the value of RandomNumber

    Please login to see this picture. : Add Line AreaName
    Reinserts the deleted line, whose contents was stored in AreaName, back into the list object, at the end.

    Please login to see this picture. : Create Please login to see this picture. at (0,0)
    A weird bug I discovered while making this example is that if you load multiple external files into a List object within a single fast loop, only the first file is loaded!!! Until after the loop, when Fusion loads the most recent file you asked for. So, if you create and destroy a new List Object each time you need to load data into it, it solves the problem.

    Please login to see this picture.: Load list file Apppath$ + "\Data\" + AreaName + ".txt"
    Loads the external file AreaName.txt into the newly created List Object, this is the Area Contents list.

    Please login to see this picture. : Start Loop "Blit" List NB Lines ("Please login to see this picture.") times
    Starts a nested fast loop called "Blit", and runs it as many times as there are lines in the Area Contents list. Blit simply means to draw to the screen from a source, which is exactly what the Blit loop does, creates and pastes Active objects all about the place.

    Please login to see this picture.: Destroy
    Clean up. Destroys the current Area Contents list, ready to create the next one. It is very important to understand that this action isn't executed until the entire Blit loop (started above) has been executed.

    So, that's it. This entire list of actions is contained within a single fast loop called MapGen, which is run 20 times at Start of Frame to create the map. If you change it to always, then on every single frame (60 times per second) you are creating 20 more Areas, a total of 1200 areas each second, and that's explains the framedrop. You may as well create the entire level at start up. And correct, the extra width is to accommodate for the gaps between areas.

    If none of that made any sense, you should read Please login to see this link. article on fast loops. Good luck man.

    This is a little more complicated, I'll run you through it.

    Please login to see this picture. Please login to see this picture.

    "Areas" are stored in external text files. For each "Tile" within an area, 3 lines of text are required, one for it's name, and two for it's x,y position relative to the beginning of the area. At the end of the file, the command "#WIDTH" indicates the next line will define the width of the entire area, deciding at what x position to create the following area.

    All the possible area names are stored internally in a list object called "Area Pool". The loop "MapGen" randomly selects one of the two first areas in the pool, creates it, and then moves that area name to the end of the pool. This prevents the same area being created twice in a row, while still producing areas at random.

    Gahsp. Only a fool discerns a post by its title.

    There are a gajillion and 1 ways to achieve your goal. Here's one.

    It store's the "tiles" in a single active and generates the map and startup, by randomly selecting an animation frame, pasting it into the backgroud, and repositioning the active at the right edge of itself ready to paste the next. You'll notice it can pick the same frame twice in a row which looks ugly, you'll need to add a check to prevent this. If this method digusts you, tell me it does and I'll come back at you with something else.

    It's probably something simple. If you set an object to a floating point position, it is rounded to the nearest whole number, creating precision errors in future calculations. The work around is to store the actual floating point position in an alterable value and update it every frame. Or perhaps your events are misordered, but really it's impossible to pinpoint the culprit without seeing your code. Upload an mfa demonstrating the problem and you'll get help.

    In my opinion, all forms of DRM are intrusive and disgusting. It discredits your support for a free internet and merely establishes you as a capitalist douche. In reality, any attempt to limit the usage of digital media only harms the legitimate consumers who simply want to play your game. Haxorz can hax n3thing. And realistically, if somebody donated you $$$ for a secret reward, then the chance is low they would torrent their version out. AND if your game DOES reach torrent status, then CONGRATULATIONS people care about your art, now go make some more before the fire dies.

    Loop through the entire map, screen grabbing each sub region with the surface object. Then basically paste it together and export it in your desired format. Correct, objects off screen aren't rendered so the exact approach will depend on your game mechanics. I'm too busy to do it for you but PM me if your budget permits outsourcing and time can be made. <3

    Does Starcraft look odd? No. It is flawless. lol. Nobody even knew the underlying code was calculated on a square grid until the programmer who actually wrote it spilled the beans on his blog recently.

    The advantage of doing it iso is obviously your movement trajectories natively match the visible angles in your art, eg paths, buildings etc. But whether this is even a concern depends entirely on how overpowering these are in the first place. Personally, I feel it breaks environmental immersion and prefer when the grid itself is hidden with clever artwork.

    Are you writing your own pathfinding?

    Not a worry Chrille. Have you seen it done in other games? I can't remember. After experimenting with a few ideas I quickly came to the defeating realisation that no matter how you work it, it feels bad. Yep I'd say your only two options are fade out to black, or restricting access to a rectangle. Hell the Starcraft grid is square and they simply faked the iso with the artwork. What do you have to gain by coding it iso?

    Please login to see this picture.

    Here you go, but I wouldn't bother. Navigating the weird map pockets is confusing and it feels awful.
    Perhaps it's not so bad with a mini-map, who knows. I'd restrict the camera like below, to a rectangle. Sooooo simple.

    Please login to see this picture.

    If you are curious, the two different axis's shown in this picture represent different methods of storing map data within an 2D array.