- Add new game feature
- Comment out new game feature
- Go to step 1

Interesting tidbit. Last quarter, Thimbleweed Park did 3x as well on Switch than Steam and overall has done better than Steam. It’s hard to tell if we did really well on Switch are just badly on Stream. Probably a little of both. Steam sales were never where I thought they should be.

The Apple number is a little misleading due to the Mac App Store and iOS being lumped together. Also, the GOG number does not include Q3 due to not receiving money from them yet.
Given that it’s a controller based console, I am pretty impressed with the Xbox number. Microsoft has been a great partner.
The Sony numbers are perplexing. Compared to the Xbox, the PS4 has a much larger installed base, especially in Europe where Thimbleweed Park sales have been overwhelmingly the strongest. I am constantly asked why we don’t do a Vita port. This is why.
These are all LTD (Life to Date) numbers, so Steam, GOG and Xbox had a lead, which makes the Switch all the more impressive.
Ten Great Adventure-Game Puzzles
P.S. I’m not linking this just because I’m mentioned three times. Really. I’m not.
It’s missing the pulley in the middle. Archie McPhee’s is only a 5 minute drive from me, so I might head down there and protest. I’ll need signs. Someone call the local TV station.

I think the game I’m looking forward to the most next year is Classic World of Warcraft. I spent a good chunk of my waking life playing WoW when it first came out. I even started a Monkey Island themed guild that sported over hundred members, most of which never got above level 12. But it was good times.
Doing testing on closures. This also makes my head hurt.
What do you think this will print?
local t = {
bar = 100
f = function() {
print(this.bar)
}
}
t2 <- {
bar = 200
}
t2.f <- t.f
local r = {
bar = 1000
function do_call(f) {
f()
}
}
r.do_call(t2.f)
Now with Answers
Well, not answers in the definitive truth of the universe way…
If you compile and run this code in Squirrel, the answer is 1000. This surprised me a little. I was expecting 200, but would have taken 100. As I build this new compiler, being some-what compatible with Squirrel is important, since I have a shit-lot of code already written in Squirrel that needs to run in the new compiler.
My new language (called Dinky, btw) is about 90% syntactically compatible with Squirrel, but subtile functionality like what ’this’ means might be more important since it can fundamentally change the nature of the game’s scripting code I’ve already written.
I don’t think I’ve ever written anything as convoluted as the last function call shown, so it might not be important to adhere to, and instead treat ’this’ more conventionally. I do wish I knew what the philosophy behind Squirrel’s notion of ’this’ is. I’m hesitant to just change it and miss some genius buried in why it works that way it does.
Currently my compiler and interrupter produces the same output as Squirrel and I’ll probably stay with that until I understand the ‘why’ a little better.
I’ve spent three weeks on the new compiler and am now ready to move it over the my new game and start using it. I figure it will take a good part of this week to get the game fully functional under the new compiler and back to where I was with Squirrel.
…in my compiler makes my head hurt.
i = 1 ? 2 : 3
Assert(i == 2)
i = !1 ? 2 : 3
Assert(i == 3)
i = !1 ? 2 : 3 ? 4 : 5
Assert(i == 4)
i = !1 ? 2 ? 3 : 4 : 5 ? 6 : 7
Assert(i == 6)
i = 1 ? 2 ? 3 : 4 : 5 ? 6 : 7
Assert(i == 3)
i = 1 ? !2 ? 3 : 4 : 5 ? 6 : 7
Assert(i == 4)
i = 1 ? 0 ? 3 : 4 : 5 ? 6 : 7
Assert(i == 4)
i = 1 ? !2 ? 3 ? 4 : 5 : 6 : 7 ? 8 : 9
Assert(i == 6)
Any others I should test?
I have a scary Halloween story to tell you…
I was running into a bug in my new compiler where large ints where loosing precision. After tracing through my compiler’s C++ code for about an hour trying to catch the spot, I came to this function:
int intConstValue() { return _type == kFloat ? _float : _int; }
It took me a bit of starring and then it hit. Something from the deep recesses of C-lore came jumping up.
Do you know the issue?
I won’t keep everyone in suspense…
The both sides of trinary operator must return the same type, and in this case I was returning an INT and a FLOAT, so it cast the INT to a FLOAT before returning the value. I didn’t notice it until one of my units tests sent large INT’s through, larger than a FLOAT can store without loosing precision. Since the function (intConstValue) is returning an INT, I guess I assumed the it would downcast the float, but you know what they say about assuming.
I seem to recall being bitten by a similar bug 20 years ago. I guess I’m good until 2038… just in time for Unix time roll over.
Much like the Vulcan Pon farr, every seven years I am compelled to write a compiler.