Blog

  • excerpt

    I’ve decided to post here an excerpt from overkill. It’s the saloon scene. Now, I’m not much a fan of saloons. When it comes to alcohol, I prefer it at an agreeable price, and I avoid drinking at home.

    What I am a fan of is listening to conversations between normal people. Whether I’m rewarded by overhearing some ragged woman talking loudly about wishing to separate from her partner to get back into a casual situationship with an ex because ‘it’s just more fun’ (good luck with that), or some, well, I wouldn’t call him a man, talking loudly about how he’s waiting until the custody battle’s over to get back on the bags, I always hear something worth writing down. And to those I’ve met, like the meth-addled stripper-cum-life coach, or the deadbeat drunken dad, or the plastic salesman with tattooed hair, here’s to being a loud cunt. Thanks for allowing me into the swirling toilet flush of your lives. You’re truly an inspiration.

    Read more here: https://www.royalroad.com/fiction/195327/overkill

    He flew over the lower flat, where it seemed like things were returning to some semblance of normal. Nobody was trying to raid any more of the stores. Nobody was wailing in the Hollow. Nobody was panicking, which was good, but they were still afraid. Stationfolk were gathering in huddled groups that kept their heads down and tried not to turn them towards the sky. They kept busy. There was work to be done on the station. It was no use staring into nothing. Shopkeepers were out checking that their structures were sound, that their equipment was working, and that nothing in the landing had damaged any delicate instrument they needed to perform their duties. Panesmen were down in the work-house, coordinating future repairs.
     Many panesmen were already filtering out towards their duties at the prism interior. Overhead the Obels turned, their passage through the air making their whooshing thumps a familiar rhythm. Forces were at work to keep the stationfolk settled, and Arran was one of them.
     From the looks he was getting, many of them, in their superstition, blamed their predicament solely upon him. None said anything for fear of reprisal from the peacekeeper who’d had his hand returned. The peacekeeper who, as far as they knew, still had the full support of the Mayor’s office.
     There it is, he thought. There’s the reason.
     The Mayor needed to keep control over the stationfolk, and Arran was how he did it.
     ‘Arran you fool,’ he said, and sighed.
     He landed down on the wide lower deck around the saloon, hitting with a solid thud. A small crowd of familiar faces was already there, drinking their woes away at the senselessness of it all. By one consideration he couldn’t blame them. By another consideration he knew they would be drinking regardless. One or two who saw him land gave Arran sidelong looks. At once they finished their drinks and departed. They knew Arran wasn’t a fan of the saloon at the best of times. The smell of piss and existential disappointment was often overwhelming.
     Arran ignored them and pushed through the creaking batwing doors. What merriment existed in the room was sucked out of it by his entrance. Inside, across the panelled floor, folks were gambling to keep themselves occupied, lest their duties about the station interfere with their distraction. One gambler was about to lay down his cards. He spared a glance at Arran and drew a sharp breath, and when he lay them down the table gave no reaction. Their attention was diverted to the peacekeeper.
     Arran went to the bar. The bartender was occupied shifting a dirty mop-bucket. ‘Hello Dath,’ he said. ‘Amber mezcal, and for all that is holy make it a double.’ The less time he spent returning for drinks, the better.
     ‘Right you are,’ Dath said, a strained edge to his voice. He turned his back to grab the bottle from the rack on the wall. He kept his demeanour professional, but Arran could tell he was concerned. His movements were stiffer than usual and as he returned with the bottle his gaze carried a reproachful weight. ‘You’re not here on business, are you?’ He loosened the cap.
     Arran shook his head. ‘I didn’t come to see your pretty face,’ he said. ‘I’ve got an announcement to make.’
     Dath winced. ‘Here?’ He poured a clean double and set the bottle down.
     Arran took the glass. ‘Why not?’
     Dath reached to polish a fresh glass. ‘Bad enough day as it is.’
     ‘It’ll get better.’ Arran drank the glass down in one gulp, set it down, and faced the small crowd.
     Arran clapped his hands. ‘Alright, listen up.’
     The gambler looked over his shoulder. The rest of the crowd was already paying close attention. Some shuffled in their seats, making wooden creaks that scratched over the quiet. A female voice came spitting at him from aside. ‘Why should we listen to you? Where’s your badge?’ Arran looked over. The short, raggedy, big-haired woman stared him down, whisky fueling her sharp gaze. A woman who’d graduated from bar-maid here to mother and bar-regular, she’d kept the bottle at her side throughout it all. Arran often wondered how she, and others, continued to find the same scene entertaining. It was a small prism, he’d supposed. Not a lot of opportunities, and time dragged on. Many found their way into the trap of drink and loose conversation, even if it did have the tendency to repeat into dullness.
     ’I don’t know, Meggin, where’s your daughter?’
     She left.
     Arran watched her storm out the doors, as those around her cast their gaze at their feet. Arran assumed the school was still operating, which, by his clock, would be getting out for the day. She was muttering something to herself. Arran cared not to switch on his augmented hearing to listen. Perhaps she would go accompany her daughter home, for once. Given the crisis, he was not sure why she was here at all. Arran sighed and looked over at the rest of the crowd. ‘I’ve spoken to the flight team. They’ve confirmed my suspicions. We have been swallowed by something.’
     The gambler interrupted. ‘By what?’
     Another voice spoke up. ’By the dark beast of the shadow Equinox laid upon us by this hell-sent peacekeeper!’
     Margarey Kim’s gossip had spread here first, as he’d expected. So he’d come here to control that, if he could.
     Arran raised a hand to settle their protest. ‘Please, let me finish. It is some kind of creature, something impossibly large. It ate our sun and devoured Huon too, as we all saw. But I say to you that it is just a creature. Don’t let your imaginations run wild, we don’t need a riot. What we need is to stay calm.’ He felt the alcohol working through him and leaned his elbow back on the bar. ‘Be cool, folks.’
     It didn’t help.
     ‘Huon just… collapsed…’ someone said.
     ‘Why couldn’t we fly away?’
     ‘It ate our sun?’
     'The Gods have forsaken us!'
     ‘Please, please,’ he said, trying to settle the rabble. ‘I have a plan.’
     Someone snorted. Arran looked over. He recognised the face. His nose was swollen and purpled, his cheeks threaded with burst veins, a face that had been marinating in spirits since before Arran had arrived on the station. The man let out a burp and said, ‘You put us here, lawman. Now you plan to get us out?’
     ‘I did not put us here, Serge Herbetson. I did nothing of the sort.’
     Someone shook a fist. ‘You killed Odelford! I did work for that man. He was a good man! You invited this… this death to us! Only the Gods can rescue us!’
     Arran didn’t even know where to begin to address that accusation. He could only remember the great malevolence he’d sensed at the flight facility. His hesitation was enough to set a few back in their seats in disagreeable consideration.
     ‘We aren’t dead,’ Arran said, finally. ‘Doggett got us out of that. It was by his skill that we are alive and weren’t sucked in after the sun, or struck by it. It’s not by any God’s kindness that we’re still alive, and it won’t be by their mercy that we are saved. It’ll be us. It’ll be me.’
     The shaken fist belonged to a drunk panesman who shouldered his way out of his group. ‘How do we know? This place might as well be the last stop in the whole fucking universe! The church has shut its doors and refuses to open up! We are dead!’
     ‘We aren’t dead because I can kill this creature, and I fucking will! I’ll fucking kill it, I can kill anything!’ There was the liquor in his own voice. Arran shoved off the counter and stared down the drunk. By his approach it looked like the situation was about to spill over into violence.
     The man who had shaken his fist stood back, stunned and more than a little afraid. Arran’s aggression worked better than his attempt to reassure them. Judging by the looks he was getting they thought he was crazy. Maybe Jensen was right, and he was gone crazy like him.
     A voice piped up from the back of the room. It spoke with a tiredness to it. ‘Just don’t kill all of us while you’re at it, peacekeeper.’
     Arran said, ‘Not the first time I’ve heard that today,’ and decided now was time to leave.
     Baleful looks followed Arran towards the doors. His footsteps were the only sound in the room. He couldn’t reassure them. He could only do his best. He brushed through the doors. Dath cleared his glass. As it went clinking upside-down onto a rack Arran’s spell on the room broke and some normalcy returned. The gamblers resumed playing. A few others resumed drinking. Seats turned back to face their tables. Someone struck up a chord on the piano.
     Arran stood out on the deck and looked over at the church. A gathering of people was praying at its doors. He decided against going over there to try and reassure them. He accepted he wasn’t very good at it. Too much in him wanted to shout at their folly. Maybe he’d leave the churchgoers be.
     He was, again, doing it for the widow Graney. That was enough of a reason, he supposed.
     Arran looked around and was glad it was dark. It would be easier to sneak a skiff out, and he supposed he was almost ready to go.
     It was time to return by John’s store. He’d need to be able to breathe out there.

  • Welcome, new readers

    Hello! I see you out there, floating about in e-space. overkill might have brought you here, and if it did, great! I’m real glad you’re reading. Reading is freedom and so it should be free. That is why I’m writing today, to offer you even more free stuff.

    First off, here’s a link to download an eBook version of Well’s Rest, my second book. If you’re a keen copyeditor then maybe it isn’t the book for you. If you’re passionate about language, then maybe it is? If you’re an editor who likes it, then fam, hmu at the Contact tab.

    Secondly, here’s SLOP FIGHTER. It’s a game I made that utilises a very small LLM. Don’t have Steam? It’s also on itch.io. It’s finished, but sometimes I get bored and tinker with it. It’s not perfect, but neither are LLMs. Neither am I.

    Thirdly, because you need a third thing, here’s a short story I wrote ten-fifteen years ago. It’s called GELIGNITE. It’s a love story. I wouldn’t call it a personal story. It’s just kinda fun. I think I sent it to magazines at one point. I can see why it wasn’t published.

    That’s it! Here’s something to listen to.

    Edit: I’ve updated the sample from overkill. Check that out if you like. I’m still editing this book live over on Royal Road so you can stay updated on the progress. It’s coming along. Slow is smooth and smooth is fast.

  • the stories that go untold

    Here’s a place for them:

    With that out of the way, let’s get down to brass tacks. overkill is done. I’m going to start releasing it on Royal Road. Here’s a blurb:

    On NEWSTEAD-SIX, death isn’t the end. On humanity’s frontier there is a prism which contains the greatest achievements humanity has ever known: a station where bodies get regrown, where humans can fly, and where death from age, violence, or sickness is a distant memory. It’s a space station where grudges get older, where selfishness unfolds over decades, and where scientific curiosity turns to sin. 

    Arran, a former undercity lawman, has come out to live on an itinerant space station as their local peacekeeper. What he’s found is a nest of intrigue that’s led him to brutally avenge a vicious crime.

    Now he’s suspended, a gun-hand short, and the Mayor wants him gone as soon as the district chief arrives. The town would help him pack his bags.

    Arran’s deadly instincts are the least of their concerns. There’s a creature swimming in the void outside their small, protective prism. It’s hungry. It’s angry. It’s afraid. It’s big. Big enough to swallow them whole as it devours their system’s sun.

    overkill is a posthuman frontier western about the law at the edge of forever, and the man stubborn enough to keep it.

    ~~~~

    I’m not good at blurbs, but that is fine.

    One thing that might surprise you, from an author of westerns, is how little I enjoy my life resembling one. I don’t even think about books when I’m not writing them. Much less do I think about dancing around like a spur-booted cowboy. I enjoy getting things done. Writing is often an extension of that. My life exists to support my stories, but if I tried to think about playing at stories in my daily life I’d just find myself buried under the weight of all the reality that contradicts them all the time. Real life’s like that, messy and uncertain, and if anyone ever comes at you with a good story then they are trying to fool you. It’s somewhat ironic I’ve chosen to spend my life writing stories, having such little faith in them, but perhaps that is what happens when you’ve been working with them for so long. It’s like knowing how the sausage is made. You don’t want to know. There’s a man on YouTube who makes sausage and it is violent.

    Which brings me back to overkill. The delicious pork sausage I’ve served up for you. I’d love to know how it goes. I see it as a counterpoint to Well’s Rest. It’s more of a straight western, for one. If there is any challenge I take with my work, it is to make each new project a counterpoint to the one that came before it. Every new work needs to be a reversal of whatever efforts that made the last one, whether in setting, structure, themes, any aspect. It keeps every new project fresh and exciting for you, the reader, but more than that it keeps me interested. I’m not interested in replaying the hits. With my work you’ll see variety, imagination, and fine attention to things like tone, texture, and timing. Those are the features I try to keep. Most else is changeable. That’s what you should expect from overkill.

    For now I will only publish this new story serialised on Royal Road for the value of a closer editing pass than I am willing to do as a separate task, and then I will publish it in paperback and eBook format. I have a cover for it, but the cover is AI-generated and deliberately shit. When I can afford to pay an artist to design a better one, I will.

    Without further ado: https://www.royalroad.com/profile/786561/fictions

    This time I got names from Bing Maps.

  • Steam release

    I’ve been busy lately making the game ready for Steam and here it is: https://store.steampowered.com/app/4430050/SLOP_FIGHTER/

    With this project I have had a lot of uncertainty as to what is actually achievable from a large language model. I have constantly felt like I have been walking a fine line between contextual accuracy and complete incomprehensibility, but over time I have managed to work together some truly impressive features I only ever dreamed were possible. I go into more length on itch.io, but to sum up, I’ve managed to better contextualise the LLM’s understanding of all the words I’ve stuffed into it. This means the monsters can, and will, narrate the way they use themselves more effectively. A monster with camouflage, like a chameleon, will reference it when an attack against them misses, for example. The monsters are more aware of their environment, their opponent, and themselves. All the different information about the monsters is being passed properly all the way through. There is still some degree of “creative compliance”. I also added laser beams and other special attacks.

    Underlying the narration are extensive semantic graphs, which are simply blocks of words sorted into categories, like body parts, movement styles, and mutation vocabulary. The LoRA adapters, which attach to the LLM, are trained on sentences constructed out of these graphs. Each word, in consideration of the sentence structure around it, is given numerical weight and at runtime the LLM relies on its internal mathematics to decide which word to generate.

    Its decision-making when it comes to generating words can be influenced, kind of guided, by careful prompting, which at the end of the day is just English skills. Essentially, if you give the LLM enough of the information it needs in the right way it can start to build the required context to generate narration that reflects its character.

    It’s a problem I’m familiar with as an author. How do I get the reader to generate an image in their head based on the words I am using? How do I make this person understand? It’s kind of fun to think about how the challenges are the same for what is just a machine that generates words.

    Here’s the link again: https://store.steampowered.com/app/4430050/SLOP_FIGHTER/ Banned in China!

  • Housekeeping

    1. I’ve finally moved the website to a new server. My last webhost was pretty hopeless and my updates weren’t going through. Par for the course. ¯\_(ツ)_/¯
    2. I’ve dropped the price on Well’s Rest. I wasn’t aware I was asking for thirty-three American dollars to purchase, that’s insane. If you’ve pirated the ebook online, great! That version is of lesser quality. The only way you can obtain the best digital version of Well’s Rest is by paying me three dollars and fifty cents.
    3. SLOP FIGHTER is finalised, at least until runtime LoRAs work with Qwen3.5. I’ve made a little page for it here. If anything is updated I’ll put it on that page or in an itch devlog, not on the main blog.
    4. The new book is going well. I’ve updated the earlier chapters over on the Writing page.

  • colorless green ideas sleep furiously

    UPDATE: Did anyone see Anthropic now somehow has a Tamagotchi-style buddy system built into Claude Code that parses your input and reacts dynamically? That’s p wild

    Booyakasha

    I was having an issue with SLOP FIGHTER where the monsters weren’t talking about their mutations well enough. There was something missing. The monsters needed to talk about more than their physical abilities. They needed to talk about the forces that power them and the forces that emerged from them, also. It wasn’t too hard to work in a new category (of vital essences, if you’re interested) that give the monster linguistic context to feed its attacks. This solution didn’t require significant restructuring or cause smudged outputs. I’m pretty happy about that.

    I also managed to (ask Claude to) solve a problem with animal parts not being connected to their semantic actions, e.g. teeth biting, claws tearing, etc. It’s one of those things where, like, I obviously don’t know how to code, but I can tell when words aren’t working. The problems get harder to find as the LLM smudges its outputs and I can’t tell if it’s just the LLM dropping the ball or if my sentences aren’t put together correctly.

    Recently updated with transitive verbs that account for the new mutation vocabulary.

    I realise that the title of this post doesn’t quite describe what my video game does. My syntax machine belongs to a different branch of linguistic theory that developed both from and in opposition to Noam Chomsky. I’m no expert in syntax, though. I’m learning. I am reading textbooks. One of SLOP FIGHTER‘s original goals was to be educational. You’re not supposed to look at it and go “This sentence doesn’t work, this game is dumb”, you’re supposed to ask “Why doesn’t this sentence work? What is wrong with this word that it doesn’t match the action?” because we know that, despite this LLM’s inconsistency, a syntactically valid sentence can be parsed by the human mind even if the words themselves don’t make sense.

    SLOP FIGHTER is done now (lol), and I think it stands as an example of what LLMs, and language as a whole, can achieve. The underlying technology is also pretty interesting. LoRA adapters are interesting. Small models that can be integrated into real-world tech are interesting. Imagine you’re out in a field driving a tractor and you just ask it exactly how many litres of diesel are left. ‘Heyo Daisy, what you got in yer?’ for a simple example. There are likely all sorts of complex questions you could ask of a tractor.

    big uuup

  • SLOP FIGHTER is available now

    It’s finished! There’s a trailer and more screenshots etc at this link:

    https://quarter2.itch.io/slopfighter

    The day I release it Qwen releases new LLMs, so keep an eye out for future updates. I will be converting the adapters to work with the newer Qwen3.5 as soon as I am able. For now, here are two clips that show off the CPU battles:

    The game is free to download, but you are invited to donate a sum of three dollars and fifty cents. Not too bad for a mini-Westworld that won’t ever try to self-actualise. Or do a Blade Runner.

  • sup

    Here’re some more pics/clips from SLOP FIGHTER. Up top is a real good go at battle flow, having straightened out much of the semantic graphing, finally. There are still some weird grammatical errors, but I am sure once I dig into those I will find it is the LLM making them.

    Update: I’ve honed the systems for more contextually-aware and accurate battle narration. I really didn’t think it was possible to get responses this close to what I imagined. Now the monster should even more clearly parse what it’s doing. It’s alive!

    A PVP battle snippet

    PVP battle snippet

    The PVP screens:

    So like you see how it works yeah? Here’s it running on Raspberry Pi 5 in Gameboy mode on my dirty-ass computer desk:

    And here’s it connected to the fully compiled, basically ready-to-go game build on my computer:

    I’m getting pretty bored of LLMs, though. I have other ideas for them which I probably just won’t bother with for a while. I’ve got something else to write about tech, Australia, and handling robot overlords, but after that I’m just going to get back to writing some books.

  • what’s all this then

    It’s a narrative battle simulator. In the game, random animals from all across the animal kingdom are mutated by one of eight special types, granted powers that befit their types, and instructed to fight each other. You give the commands and your mutated lil fella carries them out for you. It’s based on text. It’s a text-based game.

    There are types ranging from elemental types (FIRE, WATER), to more unusual types (COSMIC, SHADOW), to aberrant failures (MUTANT). Each personality type is built around deep semantic graphs of animal heritage and mutation variety, and each type has its own grammatical quirks, its own manners of speech, and its own strengths and weaknesses. I have finely-tuned eight LoRA adapters for one small Qwen LLM that are each packed with useful words that help guide your monster through communicating actions, movements, and announcements that relate to their character. Birds will talk about their wings. Wolves will talk about their fangs. Snakes slither, tigers pounce, but more, they will talk about their mutation, too. An EARTH horse will kick with the weight of ages. A COSMIC gorilla will break reality with a wave of its arm. A FIRE mamba will spit flaming venom. There is a massive degree of uniqueness and variety to the responses. There is actually too much for the LLM to handle.

    These are LLM-generated moves. They don’t always ‘strike’, but I guess falcons are more inclined to fight like that.

    Your monsters will take damage and respond, they will mock the opponent, they will react to status effects, to the amount of damage taken, to victory and defeat. You can even feed them between battles (still in beta). I have developed versatile syntactic patterns (lots of sentence templates) to make all the words fit, then the LLM spins them together, adds its own flavour, and spins them back out.

    There are two modes, CPU and PVP. CPU is entirely local. PVP takes place entirely over Bluetooth. Yes, you can play with your friends!

    It’s even the most modern, up-to-date application of Bluetooth I could manage. It uses modern Bluetooth Low Energy as a primary and classic RFCOMM to make connections if BLE fails. It uses dbus-fast, a modern Bluetooth library, to improve connectivity, and I’ve implemented cryptographic handling of the messages between to prevent interference. It should even work on Windows and between Linux/Windows machines (still in development). At battle start, a VERY rough distance measurement is taken, and that sets the game environment. Your monsters have room to move around the battlefield, and you can direct their movements about it. You can MELEE attack from CLOSE, or RANGED attack from FAR. You can MELEE attack from FAR, too, and do less damage!

    There is a lot of variety to the combat. I’m talking things like type effectiveness, status effects, misses, critical hits, and animal advantages (like predator/prey weighting), that all affect how much damage is given and received. For example, SHADOW types are weak against FIRE, but relatively strong against everything else, and don’t take damage from PHYSICAL non-fire attacks. They suffer from low HP to compensate. The CUSTOM COMMAND option also incorporates calculations like creativity weighting, so use that to your advantage.

    Oh, and there are fully developed expressions for each monster type. Watch as your new pet gets hurt and fights back!

    The game engine fundamentally relies on the English language, and the vagaries of a Chinese-made large language model, to function. Not every sentence produced by SLOP FIGHTER is accurate, correct, or even complete. The LLM works hard to chop and mix words, but the Qwen model I’ve used is a quantised 1.7B version. It’s just a lil dummy. It knows not what it really does. I wanted to build this whole project on top of the smallest LLM I could conceivably use for the job. As such, SLOP FIGHTER will run on almost any Linux machine quite well. It will even run on a Raspberry Pi 5. In fact, it runs BEST on a Raspberry Pi 5, due to their suitably advanced Bluetooth chips. It is slow on the Pi 5, but that adds to the old Gameboy-style charm.

    Here’s a demo of it running on my computer:

    I’m still pruning the datasets for grammar and contextual accuracy, but it’s p much done. One factor I can’t account for is interpolation from the LLM.

    This project kind of demonstrates how I see the world. I have, in the past, visualised words sliding into place based on factors like semantics and statistical likelihood just in time for my mouth to say them, or my hands to write them. I wouldn’t at all suggest that is my whole approach, but I understand it. Also with SLOP FIGHTER are smooth, fluid animations that help the words slot into place and the game carry on. The whole thing is one careful, intricate balancing act threatening to spill over into chaos and madness. Just like the world we live in.

    This game will be released on Steam and itch.io in the coming weeks. I am bad at marketing so we’ll see how she goes tbh. I also pretty firmly believe this is the sort of thing Valve would do with Half-Life 3.

    hokai that’s it

  • Hello World

    I’ve been busy!

    I’ve made an LLM-driven web browser. I’ve named it Zenbot.  It’s just a mathematical word-generator with a set of word-tools, let loose on the internet. It’s sort of built to translate commands into actions, directly, using the Python coding language, which I’ve noticed is basically English.

    I’ve described it like this: “Synchronous communication becomes asynchronous communication in an elegant double-helix of English language-powered Python interpretation driven by you, the user.” as I noticed two types of Python functions, sync and async, could be utilised together when an LLM was involved in the mix.

    It’s sort of like if a whole restaurant shared one brain, which was passed from customer to waiter to kitchen and back again, and at the end of the chain a customer has their order. If you ask Zenbot to ‘search for pizza’, it will search for pizza.

    There are, of course, lots of advantages to doing it this way, which I focused on, like:

    • Efficiency
    • Speed
    • Capability
    • Versatility
    • Security

    As I don’t use any traditional method. I believe the LLM should be modelled on the task, not vice-versa.

    This is it: https://github.com/michaelsoftmd/zenbot-chrome

    I am of the opinion that Zenbot demonstrates how mainstream approaches to LLMs are changing. Small, tailored models are the future for operating untold new and old technologies. I still do not know if they should be writing words that mean things to humans. But it’s a brave new world!

    I’ve got lots more ideas for projects, and Zenbot is getting some improvements as we speak. likecommentsubscribe