Introducing: hxpico8

Have you heard of PICO-8? It's a "fantasy console" with little built-in sprite/code/level/sound/music editors and a carefully crafted spec. And (slightly changed) Lua scripting. And a web player export (example). A rather interesting option if you like working with restrictions and/or tiny pixelart.

Long story short, I've made a little Haxe compiler target that generates compact Lua code that runs on PICO-8. This post covers reasoning, some technical details, and tricks used to accomplish this.

Continue reading

Love2d: Haxe: Ray-circle intersection test

HaxeNME version. Love2d version works equally to this.
Click and drag different parts for interaction.

By user request on Love2d IRC channel, yesterday I've made this nice function to do intersection/collision check between a ray (for clearance, here, a ray is a infinite line with starting point but no end point) and a circle.
Underlying code is fairly simple, though it does not even require understanding to use the function.
Love2d version takes advantage of multi-return values.
Haxe version has slightly longer code due for more optimal implementation of interface.

Download Haxe .hx
Download Love2d .love

Love2d: Semi-turn-based platformer

A very rushed Haxe version to demonstrate how it looks in motion.
Does not necessarily represent features of love2d version in this post.

This was originally going to be a short reply-fix for a topic on love2d forum, but it seems that author did get somewhere with figuring that out on ones own, and I've quite overdone it in terms of a simple answer, so I formatted the code nicely, added several more features, and made this example.

Just in case above demonstration does not work, this example demonstrates a specific approach to game dynamic, where game logic occurs once per interval, while things are drawn and receive input at higher rate. I do not recall any actual platformer games that would use this principle, but a good example of such game is Snake (original grid-based version).
Example includes grid-to-point collision checking, actual specific platformer behaviour (with adjustable values), and value tweening (to make player movement nice & smooth).

Download (2KB .love)

Lua: Serializer

Actually text has limited relation to that thing on right side

Today I wrote a serializer function for Lua. A brief research has shown that not too many people know what this should do in first place. So, to theory:
For example, you have this table definition:
local o = {
	1, 2, 3,
	one = 1,
	['Lua is'] = 'cool',
	[true] = true,
	{ 'this', 'is', 'a', 'table' }
At the time of 'compilation' (translation to VM bytecode) it is translated into non-textual representation that you can't tell a lot about, and probably should not worry about.
However, what if you want to get your modified table back, as text? That's where a bit of puzzle appears, since there isn't a standard routine to do that. And also where scope of using this function starts.
Continue reading

Love2d: A game in 8 minutes

A video.

Yesterday I've made a game in Love2d. In a bit over 8 minutes.
Originally I planned to get everything done in 5 minutes (similar to previous GameMaker-related post), however I somewhat overrated my ability to type 3-segment function names that I'm not that similar with.