The buttons on trackballs (and ergonomic mice in general) are commonly remappable, but you don't usually get to decide what the ball itself does.
And that's a shame - a ball is a good way to do plenty kinds of input.
So I wrote an AutoHotKey script that tracks mouse input from connected devices and briefly locks the cursor to translate motions into custom actions when needed.
This approach offers a good deal of flexibility and works with any kind of trackball (or anything that the system considers a "mouse", really).
The source code and examples can be found on GitHub.
I also wrote a blog post with further explanation of approach and a "cheat sheet" for the little API that the script exposes.
Ghost Croquet now has a demo! You can play it on your own or with friends
Also the game's currently on sale as part of Steam Remote Play Fest.
Here's a little doodle for the announcement.
A videogame! From me! Can you believe it? I can hardly believe it myself. So,
Ghost Croquet is now out of Early Access!
Ghost Croquet is a platformer game with asymmetrical versus multiplayer (both local and online) and single-player modes.
In multiplayer, one player is the hero. The hero’s goal is to get through a level alive.
The rest of the players are the ghosts. The ghosts can posses a variety of monsters and hazards, such as these:
The ghosts’ goal is to kill the hero. When that happens, a new hero is chosen (with some weighting towards the killer, if any), and the cycle continues.
While in hero form, the player can collect gems (to spend on upgrades for their next attempt) and there are a few more things to consider, but that’s the gist.
Local multiplayer mode can be played with up to 4 (or, unofficially, 6) people.
Online multiplayer mode can be played with up to 8 and features Steam-based networking, invitations, public/private lobbies, etc. - as you'd expect from my work.
There's also 2P Bomb Pong:
Apart of the levels themselves, there are also challenges (can you beat a level quicker? Without upgrades? Or while killing every monster?), an arcade mode (with a sequence of levels and a leaderboard for best times), a level editor, and a Steam workshop integration.
You can read a deeper dive into the game's history (from a Ludum Dare entry to present day) in the newsletter:
And the game's out on Steam!
(aside: Tumblr's new editor works very pretty well for this sort of post, unlike some other websites)
A videogame! From me! Can you believe it? I can hardly believe it myself. So,
Ghost Croquet is now out of Early Access!
Ghost Croquet is a platformer game with asymmetrical versus multiplayer (both local and online) and single-player modes.
In multiplayer, one player is the hero. The hero’s goal is to get through a level alive.
The rest of the players are the ghosts. The ghosts can posses a variety of monsters and hazards, such as these:
The ghosts’ goal is to kill the hero. When that happens, a new hero is chosen (with some weighting towards the killer, if any), and the cycle continues.
While in hero form, the player can collect gems (to spend on upgrades for their next attempt) and there are a few more things to consider, but that’s the gist.
Local multiplayer mode can be played with up to 4 (or, unofficially, 6) people.
Online multiplayer mode can be played with up to 8 and features Steam-based networking, invitations, public/private lobbies, etc. - as you'd expect from my work.
There's also 2P Bomb Pong:
Apart of the levels themselves, there are also challenges (can you beat a level quicker? Without upgrades? Or while killing every monster?), an arcade mode (with a sequence of levels and a leaderboard for best times), a level editor, and a Steam workshop integration.
You can read a deeper dive into the game's history (from a Ludum Dare entry to present day) in the newsletter:
And the game's out on Steam!
(aside: Tumblr's new editor works very pretty well for this sort of post, unlike some other websites)
Updated my post about experiences with the Sofle keyboard a little - the keyboard's got [laptop] legs now, the layout has seen some changes, and I updated my tool for displaying QMK-Vial layouts to support showing what rotary encoders do
It allows to pass substantially more data types between GML and C++ functions (including int64s, arrays, and even nested C++ structs), which can help a bunch with making extensions.
For a practical example, I added Steam Inventory support to my Steamworks wrapper yesterday, and thanks to this the code looks like pretty normal C++.
Hey, following recent news of Forager's multiplayer update being cancelled I wrote a small post reviewing the announcement and how it could come to this
I made a new web-based tool for Terraria! You give it your PLR file and it shows you your Journey Mode research progress - with categories-percentages and all.
Hey, I released an A+ Promises implementation for GameMaker Studio 2.3!
If you've dealt with them in JS, this is equivalent and can be extremely helpful for chaining async operations (e.g. multiple HTTP requests when logging in and pulling data from a web server or API).
I released a big GMEdit update a few days ago! It brings auto-completion and error checking to the next level by greatly expanding support for type information.
You can read more about this in my mailing list post and a full changelog (along with downloads) in the itch post.