I’ve been working a lot on Tessera. I presented a paper at the most recent PCG Workshop of FDG, where I explain how Tessera makes WaveFunctionCollapse somewhat less daunting, and go into some of the details of its features.
That may not be news for users of the software, but here I explain how things work, and what parts work well / I’m especially proud of.
TextGenerator.verts is meant to give the position information of every character in a given string. This is useful in Unity if you need to align something with exactly where some particular text is occuring, if for some reason you are not already using TextMeshPro.
Older Unity versions created 4 verts for every character, which made life easy. But now many non-rendering characters don’t have verts generated for them, and the relationship between verts and characters is undocumented. I’ve reverse engineered it, as best as I can tell:
int? GetVertForPosition(int position, string text, TextGenerator textGenerator)
var c = 0;
var vert = 0;
for (var i = 0; i < position; i++)
if (textGenerator.characters.Count <= c)
if (!char.IsWhiteSpace(text[i]) && textGenerator.characters[c].charWidth > 0)
vert += 4;
if (text[i] != '\n')
Let’s face it, running your own WordPress blog is a sign you are woefully out of date. I can see plenty of readers, but never hear from them.
So I’ve created a Discord server. Feel free to log on and ask me support questions about my projects, suggest new article ideas, or just to hang out.
Don’t worry, the blog isn’t going anwhere. I think the jump might kill me if I leaped fully into the 21st century.
I recently made a game in 48 hours, Lucky Fluke. Though technically I’ve done game jams before, I’ve not done one in a decade, and not ever as successfully. So I thought I’d write up what I learnt.
Quick follow up to my previous post, I found the same technique is pretty good at generating organic looking random paths. You simply start with an empty room, and keep randomly filling points until it is no longer possible to add any more without disconnecting the room. What’s left is a nicely wiggly pathway.
I’ve been playing around with procedural generation recently, and one question has repeatedly been nagging at me.
How can you randomly spice up a level while making sure you don’t accidentally block off the exit?
Jump to the code, the live demo.
Ok, so AS3 has its fair share of problems. It is slow, it has next to no support for templates/generics and somewhat sparse standard library. And yet still I love using it.
Why? It has managed to pull together some of the rarer features that I think every language should have. Language designers, take note of the following.
I’m releasing an alpha version of Box2D Flash 2.1. It’s got a shiny new website, too. It has may features that were lacking before, but you’ll have to discover most of them for yourself.
This move is prompted mainly by the announcement of Erin that Box2D 2.1 itself is going to be delayed for more features. Also, the wiki got wiped out, so documentation is at an all time low (frankly, I’m glad the wiki’s gone. I sunk much work into it, but it was still a useless reference source).
Code is still alpha quality, which means a) bugs, b) no guarantees for changes in syntax. The big stuff is out of the way though. If you find a bug, or have a complaint, please post it to the forum as a new thread starting, or the sourceforge issue tracker. Do not post it as a comment here. A comment amongst other comments is too easily lost.Bear in mind that I will almost certainly ask for a testbed demonstrating the bug.
BTW, I’m going away for a couple of days for TIGJam:UK, so don’t expect issues to be treated immediately.
Announcement on forums
Yeah, so I finally caught up with Erin’s changes to the C++ version. It’s still not quite usable though – a few bugs remain to be found, not to mention the fact patches of functionality are missing or broken. I’ll be putting up a preview version soonish, though.
I also spent 10 minutes cutting out one of the more flagrant ways the engine creates too many objects (instead of re-using objects internally).
I measure the average benchmark time (using the newly created benchmark program) has decreased from 1537ms to 1378ms. That’s 10% faster (as a rough estimate). Not too shabby for just one quick change. I’ve attached the benchmark reports.
Performance of the engine doesn’t really excite me though (this is FLASH we’re talking about). But it seems the done thing in dev blogs, which this is rapidly turning into.
Ok, the first revision (r52) of Box2DAS3 for the next version is available now on SVN. Phew, that was a lot of work.
Lots of stuff doesn’t work, but the reduced testbed ought to compile and run.
The old SAP broadphase works, as well as Dynamic Tree.
It’s 3-4x slower than the old version! It’s because I replaced some of the old optimizations with newer more naive code. It’ll improve over time as we re-inline stuff and so on.
What should you (the casual Box2D user) do now:
- Still nothing. It’ll still be some time for the port to catch up with C++, and get cleaned up. And there’s the performance issue. I wouldn’t recommend moving unless you have an essential reason, or have a project that you are keeping continuously up to date.
- I’ll be accepting patches now to lighten the work load, if anyone at all is keen. Post them on the forum, preferably declaring your intentions in advance. All patches must be under submitted under the same zlib license. They must be actual patch (diff) files. Updating the testbed examples would be a good excercise for someone keen to try out the new API.
Please comment on the forums