This is my first Thaura Work/OpenCode assisted video game. The theme is running north to freedom, ala the Underground Railroad. This is a work in progress, so don’t take anything in it that seriously.
You can play the game here: North to Freedom
I did a version of this on Websim a while back, and decided to make a similar game using Work. It was a lot smoother than websim (using GPT Lite or something like that). Websim does a better job keeping things organized, and making graphics and sprites and 3d. Qwen3.6 just felt smoother to me, but this may be my programmerly bias.
Files
Here are two files. The first is a wordpress plugin version. If you don’t use WordPress, you can download this and unzip it, and upload it to a server.
This is enough documentation and context to play with the code:
The game is raw. It’s not historically accurate, and has anachronisms.
I spent time to make the interstitals, picking videos that worked for me.
It’s fun, in a “casual gaming” way.
WP Plugin to Add an HTML5 Single Page App to a WordPress site
The latest version includes a minimal WordPress plugin that creates a shortcode “north-to-freedom” that turns into a link to the game.
The technique is dead simple, it’s a really lazy way to distribute software to people running WordPress.
First, here’s an example plugin:
<?php
/**
* Plugin Name: North to Freedom
* Plugin URI: https://riceball.com/north-to-freedom
* Description: A browser game about the Underground Railroad. Link with [north-to-freedom].
* Version: 1.0.0
* Author: Thaura
* Text Domain: north-to-freedom
*/
if (!defined('ABSPATH')) {
exit;
}
// Register shortcode: [north-to-freedom]
add_shortcode('north-to-freedom', 'ntf_shortcode_handler');
function ntf_shortcode_handler($atts = []) {
$plugin_url = plugin_dir_url(__FILE__);
$game_url = esc_url($plugin_url . 'index.html');
return sprintf(
'<a href="%s" target="_blank" rel="noopener">North to Freedom</a>',
$game_url
);
}The comment at the top defines the plugin. The code below it registers a shortcode that will display a link to the program; this is necessary because you don’t always know the path to the plugin. It’s also a lot less work to use the shortcode.
Then, once you have this, you need a build script to produce the ZIP file for the plugin.
#! /bin/bash
target="north-to-freedom"
mkdir $target
cp -ar index.html js overlays css tiles fonts north-to-freedom.php $target
zip -r north-to-freedom.zip $target
rm -rf $target
echo "north-to-freedom.zip WordPress plugin created."The format for the WP Plugin zip file requires a folder with the plugin’s name, and all the plugin’s files inside that folder.
Then, to install it, you can upload the zip file, or use the CLI:
wp plugin install https://..../north-to-freedom.zipCode language: JavaScript (javascript)
Coding
This is easily the least “hands on” code I’ve had it produce. I avoided guiding it a long time, and eventually started to suggest OOP and modularization. The refactoring helped reduce the number of code editing errors.
I also learned to ask the LLM about what it thought about architectural changes I considered. It came back at me with feedback, sometimes negative.
I’m not sure what the copyright situation is with Qwen generated code, or any LLM code for that matter. Consider it non-public domain, so you cannot make money from it. If there’s a lot of code that looks plagiarized, contact me on Bsky or IG, and I’ll take it down, as per the DMCA.
Time
The only major problem was handling time, and implementing a clock. Initially, it did calculations based on an internal ticker, but this caused numerous logic errors.
The fix was to create a time module to translate between physical time and game time. The game day is 8 minutes long. So from the start time, you can calculate a game time. Actual time or clock ticks were encapsulated. All the day and night logic, and other timing logic, can use this virtual clock rather than actual ticks.
So you can say, at 9PM it’s completely dark, until 5AM the next day.
When it’s dark, you can see only the lights from the safehouses. It’s beautiful when you zoom out and can see the entire playfield.

