Weekly Roundup - Week 39 - Mostly recovered from covid

Art Packs

Sketch Packs

Hi everyone!

We’re almost over covid and already back at work. I’m doing mostly fine, I still have some brain fog and cough occasionally. Null is dealing with weird headaches in spots he never had them before and his sense of smell is almost completely gone.

Brain fog makes it a bit harder to code, but we’re plodding along, getting our momentum back a bit more every day now.

Level Design Progress

Level design wise there were a bunch of setup tasks to be done in the last week. I took Fabian’s art and turned the tile sets he made into auto-tile brushes.

Basically I had to take this:

And turn it into this.

Some of the necessary tiles didn’t exist yet, so I made them using his art as a base. But now the tileset can be used like this:

The new starting area of the jungle now has 30+ rooms and I already gave all of them a rough tile decoration treatment with these! ^w^

Some Python scripting with Null

You’ll notice that the autotile brushes do not take care of things that go over the grid, like the grass that usually covers the feet of the characters.

With the way we have things set up, those decorative tiles are in the cells surrounding the tiles the characters walk on.

In the past we manually set those tiles but since we’re redoing all the maps and the rooms are much bigger now, it would be very tedious so I wrote a little tool that takes care of this for us.

First of all, I had to figure out how GameMaker saves tile data. The room files themselves are saved in a format called JSON. The tile data isn’t saved in a raw 1:1 format, but is compressed.

I had to experiment with a blank project to figure out the format:

The compression turned out to be what’s called Run-length Encoding (RLE) which is a compression algorithm used in cases where there is a lot of repetition of the same data. For tiles this can make a lot of sense.

The format that GameMaker uses is as follows:

<[COUNT]>, <[DATA]>, <[COUNT]>, <[DATA]>, . . .

If COUNT is a negative number, that means the data chunk is compressed and the absolute value of COUNT is the number of times the tile index in DATA should be repeated.

If COUNT is a positive number, that means the next few numbers are uncompressed tile data and need to be copied as-is.

GameMaker switches to compressing tiles as soon as there are two or more of the same tile following one another. If there is a lot of variety, the data is kept in an uncompressed state since encoding it would only increase the file size in that case.

With this is what is relatively easy to write two Python functions that could de/compress tilemaps the way GameMaker expects them.

I wrote a simple script that loaded the JSON document of a room and then writes it back after it did its thing. There were some hiccups because GameMaker’s JSON files are not very clean and Python was very picky about it being standard JSON.

Another aspect I had to consider was flipped tiles. GameMaker allows you to rotate and flip tiles vertically and horizontally. This was pretty easy to figure out luckily as the value of the tile index just gets a few bits flipped that serve as flags:

The tile 5 turns into 268435461 if you flip it on the x axis. If you look at it as a binary number you can see that the only difference is bit #28 being set to 1 to mark it as flipped.

Similarly, bit #29 is used for flipping on the y axis.

Once that was out of the way it was pretty straightforward to write the script!

Now, with the push of a button we can automate decorating the edges of a whole room, saving us lots of tedious work:

It was a fun little project to work on while recovering from covid and it should save us a ton of time going forward!

Thanks for your patience with us! We should be back to normal pretty soon!

Until next time,
Cookie & Bunny

Get The Adventures of Kincaid (18+)


Log in with itch.io to leave a comment.

Don't push yourself too much ,going all out after having covid is not best thing to do. Take your time with it (but i will say the proggress is impressive). stay safe

Well, take your time to recover it, but it's good that you are feeling better