The KoboldAI Horde: AI writing for everyone through mutual aid

Those who’ve followed my progress in developing Hypnagonia would know by now that I’ve been working on the integration of KoboldAI with Godot for the automatic generation of stories. This solution while working never quite satisfied me, as it required quite a lot of investment on behalf of a player who wanted to generate stories.

That approach left me unsatisfied. As it happened I had an idea to use the new KoboldAI API to create a distributed cluster based on consumer GPUs in people’s PCs. The concept being that one would connect their PC in some fashion to a server software and whenever someone sent a request for generation, an available PC would pick it up, generate it, and send it back to the requester.

The requester themselves would therefore not need a powerful GPU (or skill to use Google Colab) to use KoboldAI, while people who’s PC is otherwise sitting idle, would be supporting the other members of the community.

So after some discussions with members of the community, I decided this idea had legs and I wanted to build it before I continued with Hypnagonia. I’ve been working non-stop on this for the past week and I now feel it’s at a pretty good state.

Introducing the KoboldAI Horde!

This is a python server which you run on a server somewhere and it provides an interface with which people can request GPT writing generations. The second part is the bridge, which is what people who have their own KAI instances run, in order to connect the KAI server to the server. The last piece of software of course is the KoboldAI client which runs the models generating the text.

Until now, the only option for people without such powerful hardware would typically to use a service like NoveAI or AI Dungeon, where one has to pay for the service. They also provided a fancy interface and tools to help people write their individual stories. Aside from the cost however, there were also limitations. Dungeon AI recently imploded due to their own actions, and a lot of people were left without a home.

And of course, for a free software video game, such services are prohibitive, as I can’t pay out of pocket for the text generations of dozens of players (or imagine if my game ever became actually popular).

After a bit of hacking of the KoboldAI client itself, I also added functionality to allow someone to use their own KoboldAI client to talk to the Horde directly. Which means someone with a potato PC, can still use KoboldAI directly.

Now there are some obvious limitations as you might expect. First of all, the availability of the models in the horde is dependent on who is supporting it at the moment. If only people with weak GPU are in, the best you’ll find is a Nerys 2.7B. If however some of the big chonkers are in, you might be able to use KoboldAI as if you have a 20B model behind it.

The other problem is of course questions of privacy. Even though the text is encrypted during transfer, and even though the horde does not store any prompts or generations, at the end destination, the owner of the server can see all your prompts if they so wish, even if they don’t know who you are. So for those wanting the really steamy stuff, or perhaps those who write stories using real people and locations, this might be a deal breaker.

However for more normal stories, or for more generic generations such as for utilities and apps, this is hardly a concern.

Finally we’re still new, so currently everyone is playing nice. But there’s always the potential of bad actors, who might food the horde with garbage generations just to shut it down. There’s nothing I can do about someone dedicated to do that except go into a whitelist mode, and have the horde become an invite-only service, much like a private bittorrent tracker. In fact, anyone could set up their own private instance for their own community, for those situations where they want only trusted people to use it.

Eventually my plan is to follow the bittorrent approach for usage and contributions as well, where people will only be able to use the horde if they contribute somehow to the KAI community. Whether by adding their own GPU to the horde, or by writing documentation, etc.

But ultimately I want this to be a mutual aid based service. Where those who have the capacity help those who do not, and the latter find some other ways to make it up, for the uplifting of everyone in the KoboldAI community.

And before anyone suggests to tie this to some web3 token: Fuck that shit! I will work integrate with any cryptocurrencies! That is poison for our communities AND for our ecosystem.

The owner of the KAI client repo was also kind enough to redirect their domain to my KAI Horde instance, so now we have a very fancy url as well.

Official KoboldAI Horde

Already this is working amazingly well and I’m working on improvements daily. I’m excited to see what kind of doors this will open.

My first steam game

Hypnagonia now has an official steam page!

It’s not much but it’s mine 😀 It took me a while to gather everything needed to create the steam page as Steam is way way more thorough than Itch.io. The benefits over itch of course are the automatic updates you’ll be able to receive. And for me, hopefully being on steam might attract a few more eyeball than might become collaborators 🙂

Why my ADHD means I end up making an ugly video game.

Hypnagonia has copied a lot of design paradigms from Slay the Spire, primarily because I needed a baseline to start working on content, instead of getting stuck in trying to figure out all the details of the design for every aspect. But you may be wondering why almost a year since I started it, it still looks like something to manage servers. To explain that, I need to give some background.

How “battles” look in the latest version

As someone with ADHD, it’s very easy for me to be overwhelmed by the frontloaded effort needed to be able to start something as large as developing a new game, and give up. Copying the design of something else is way more conductive to jump straight into doing something I already know how to do well (in this case, coding and card game design).

I am very lucky that my “autistic comfort zone” so-to-speak is programming (and general PC use), so that counteracts my executive dysfunction to a degree that allows me to start working on something, just for the joy of having a goal to program something. I kinda think of this “autistic drive” as a car battery ignition. It allows me to kickstart myself to do something which is one of the massive blocking points of ADHD.

However it’s not a trick that can always work, and it needs the right circumstances.

I got first interested in programming when I was 10 years old. I even pestered my mother enough to voluntarily go to 2 years of programming school back then – and sit through some of the worst lessons in programming one can have. Who the hell tries to teach 10-year olds Fortran by reading from the manual? Later on, I didn’t manage to get into university – due to just wanting to play computer games instead of studying for the exams. Instead, I went to a vocational school for programming for 2 more years.

When did I finally start programming for myself? When I was in my 30s. I literally learned programming and then didn’t do anything with it until I had the right circumstances. I tried multiple times to motivate myself to actually do something I knew I liked doing, but I couldn’t because I didn’t know what to do with it that was achievable for my skills. Things like making video games were out of the question as I had nowhere the skill needed to even begin. Yes, I know everyone starts like that, but try telling that to my stupid ADHD brain who does not get the concept of not getting the happiness chemical immediately.

What I truly needed was something I could start with very little programming needed and then built up my skills little by little, but having a clear but achievable improvement I could do.

In my case, my circumstances ended up being my interest in coding old card games in OCTGN, which requires very little code to start, but allows you to go bonkers with python if you want to (even if it doesn’t make it easy). The way it worked for me, is that I kept wanting to add more features, but each feature was just simple enough that I could see myself achieving it within a day or so. It kept me motivated enough to keep going.

All that worked pretty well until my eventual burnout after 7 years or so due to juggling too many projects at once.

The good news was that I had already picked up enough gamedev knowledge to give me some confidence. Once some of my burnout started to wear off 3 years later, I wanted to get back into card game design, but I didn’t want to touch OCTGN anymore. And then I discovered the Godot Engine (the way how is a post for another day) and after a few false starts, I got the idea to start on the Card Game Framework.

The reason why work on CGF is what worked, is because I had just enough knowledge of the things I needed to build (due to my experience with OCTGN), so that my autistic kickstart gave me enough momentum to overcome my ADHD executive dysfunction and head straight to Hyperfocus.

So, back to Hypnagonia, when I initially got the first concept for it, I knew it was way bigger than what I had done until now. Especially since I have no support network (I am not in a modding scene, and none of my contacts from my OCTGN, Android: Netrunner or Doomtown days seemed interested). So I knew I had to settle in the solodev role.

I also knew that if I tried to “reinvent the wheel” too much with my game, I will never get going as I will be stuck trying to think of how everything should work together until I give up due to complexity.

So early on, I decided to mostly copy Slay the Spire, as the granddaddy of the genre, while adding the few spins I wanted to use, which I knew were manageable for me. This means I settled to clone the UI look and core gameplay loop at least. The reason is, by now, I know how to program a GUI I can see in my head, and I know how to design card games, but I have no idea how to design good looking graphical interfaces, fancy animations, shader and effects or even any sort of art.

By using the StS layout, I could bypass my annoying brain trying to trick me out of doing something cool, by not having it get existential dread about trying to do something it doesn’t yet know how to do!

The main reason then why Hypnagonia still looks like so bad, is because I have no idea how to fix it, and any time I consider that I should do it, my brain goes: “Nope, you don’t know how to do it! Procrastinate a little instead. Reddit is just a button away!”

If I were to nevertheless stubbornly pressure myself to not do anything else except trying to improve the look of the game, I would procrastinate so much, I risk loosing my motivation for developing Hypnagonia completely. I had more than one close call with this.

For example, early on, I decided not to copy StS overworld mechanic (a map with encounters) because I wanted a more storyline-based experience. However I had no idea whatsoever what to replace it with. I got so demotivated that I couldn’t think what to do about it, I started distracting myself with other things. I was stuck and losing interest worryingly fast.

Fortunately, an experienced board game designer friend of mine agreed to brainstorm a little with me, and managed to throw an idea out that broke my “designer’s block” which eventually became the dream journal I have now.

So experience has taught me to know my limits. And at the current point, my limits are game UI/UX. Staying within the StS guidelines allows me to have a usable game. My plan is to make something playable end-to-end, even if not it’s not good looking and is full of placeholders. To salvage the rest, I just hope that I can attract specialist in the areas I cannot handle.

Every day I think about working on Hypnagonia, I need to kickstart my motivation and push through my urge to procrastinate “a bit” first. The way to do this, is to stay within my comfort zone, which is programming and game design.

So in the end, my autism helps me overcome my ADHD, but it has its limits. Therefore, the game look suffers.

I made an itch.io page

I always knew I had to do CI/CD for my development, but I just hadn’t given any priority yet. As such, until now I was still manually exporting Hypnagonia when I had a stable release, then manually uploading the html to my own site through scp, ssh to the site, and copy the files to the web directory. All so that I can link people to a bland page so that they can play the game online.

And for more feature-packed releases, I would also export the versions for Linux, Windows and mac, create a new github release and upload them there.

It was an unnecessary manual procedure and it always bothered me. But I had other priorities on my end and I kept pushing back the improvement on that end.

That is, until yesterday, where I run into this video introducing DevOps practices to game development:

And that kinda shamed me into going through with it.

Unfortunately interacting with my own webhost was always hacky and felt amateurish. So I decided to onboard Hypnagonia to itch.io. This provides me some benefits. As part of the community there, I can start getting more organic discovery. It provides some interesting metrics and very imprtantly, it’s an estabilished platform which means there’s plenty of guides and products to integrate it easily into my Continuous Delivery pipeline.

Unfortunately, I realized that embedding the game into itch.io doesn’t play well with my current viewport size and the “static” way I had designed it. And that was a rabbit hole…

First I adjusted my main menu screens to adjust automatically according to the viewport size. That worked OK-ish for not ridiculously-small resolutions. It’s fine, we can look at that later

But then I discovered that even small reductions in the viewport, make the cards look massive, as they are never scaled. So I needed to shrink cards according to the viewport size somehow…

Long-story short: I spent around 6 hours yesterday just giving the Godot Card Game Framework functionality to handle smaller resolutions somewhat gracefully. It’s not perferct, but it’s good enough to allow itch.io embed.

And since I was at it, I made some quality of life improvements. And wrote about them into an itch.io devlog.

I’m going to be writing some devlogs there now and then. Not sure how I will handle the integration with this blog. Maybe just post a link to them here when I write them? What do you think?

Seeking video game writers

If you’ve been reading this blog, I’ve been posting about my efforts to create my own game, Hypnagonia. While technical and game design has seen good progress, I am still thoroughly struggling to come up with a storyline and other similar concepts such as short stories for non-combat encounters and so on.

While I’ve pinged a number of people in the past and some have expressed an initial interest, I haven’t seen anyone yet show any initiative, and I’m not the kind of person who pesters people to help me for free. I don’t even know if that would help or not, but I just can’t do it. If someone to whom I’ve talked, doesn’t show any initiative afterwards, I just drop it.

To that end, I am making yet another attempt to find writers who want to collaborate in making a free software game with a surreal theme and psychological concepts. I already have a barebones idea of how the overarching story should go, but I am incapable to fleshing that out myself.

Due to the scope of the game, I have space for both writers who want to put a lot of effort, as well as those who only want to provide something occasionally.

  • I need a lead writer who will take over the overarching campaign concept, and build upon in their own style. You will have almost full creative control of the main storyline.
  • I need writers who will contribute short stories which to be injected into the game at various points. These include
    • Non-combat encounters inside the dream, which provide multiple-choice options for the player .
    • Storylines around each Injustice objective (example: Write the storyline events through which the player character will breakthrough out of their abusive relationship).
    • Ideas for new Torments and Character Archetypes.
    • Naming for cards with existing effects.
    • Thematic ideas for cards which I (or we together) will translate into game mechanics.

The important disclaimer is that this is a voluntary position, with full ownership of the end-product. You will be contributing your work into the Commons as the game is Free/Libre Software. This means not only will you retain ownership of your stories and ideas, but you will also have ownership of the final game product to showcase your talents elsewhere.

If this sounds interesting to you, please join my discord server and let me know in the #story-design channel. I repeat, I am not one to chase people around and I have a no-pressure approach to collaborators. If you want to help, I’d love to have you, but you need to provide your own drive to create! 🙂

I really want to create a video game that will truly enrich the commons. If you want to be part of this, join me!

Finally, a name

I’ve been working on my Godot-based deckbuilder for a few months now and I still hadn’t managed to find something to call it. I’ve been calling it “Project Dreams” to signify that it’s a provisional name, but it’s been really bothering me that I couldn’t find something appropriate.

So in the past few days, I took the time to start brainstorming for names in the discord server, along with the other contributors. My requirements for a name was

  • It has to be catchy (in a poetic or mysterious sense)
  • It has to somehow refer to one of the main themes of the game (dreams, torments, psychology, surrealism, therapy), preferably more than one at the same time.
  • Bonus points if it includes alliteration or portmanteau.

After tons of back and forth, I was almost done with choosing one of the options, but one of the last things I did, was throw the word “surreal” through a thesaurus, just to see what I find, and it showed me a word I’ve never seen before: Hypnagogia.

Hypnagogia is the experience of the transitional state from wakefulness to sleep: the hypnagogic state of consciousness, during the onset of sleep. (The opposite transitional state from sleep into wakefulness is described as hypnopompic.) Mental phenomena that may occur during this “threshold consciousness” phase include hypnagogic hallucinations, lucid thought, lucid dreaming, and sleep paralysis. The latter two phenomena are themselves separate sleep conditions that are sometimes experienced during the hypnagogic state

https://en.wikipedia.org/wiki/Hypnagogia

I don’t know why it was shown as a relevant word to “surreal”, but it immediately clicked for me, because with only a single letter change, I could create an interesting portmanteau.

Hypnagonia

In case you don’t get it, this is a mix of the aforementioned Hypnagogia + Agony (or “Αγωνιά in greek) and It hits so many of my requirements at the same time:

  • It refers to sleep
  • It references agony (being tormented by your own psyche is a core theme of the game)
  • The original word is close enough to the concept of surreality that the thesaurus brings it up as a suggestion.
  • It’s a portmanteau
  • It sounds exotic. Kinda like a fantasy setting
  • It is unique. I don’t conflict with anything else out there (from what I can see)

I did try a few other variations of this, but I believe this one is the catchiest. And I’m also fed up looking for names, so I just went ahead and finally renamed everything!

In case you’re interested, here’s some other names I was considering:

  • Retrospections
  • Remedy of Reverie
  • Theraltes (Therapy + Ephialtes)
  • Lucidium (Lucid + Somnium)

Where deckbuilders and surreality meet

After Fragment Forge reached its first milestone, I decided to take a break from game development for a bit to clear my head. I started playing a lot of the new interesting deckbuilders, such as Griftland and Accross the Obelisk, I started getting ideas on how to make an infinitely expandable single-player deckbuilder, that does not dilute its card base by constantly adding new cards. Those game’s power-creeping on behalf of the player also inspired me to think of a way to make a deckbuilder which had legacy elements which were not straight up making the game easier.

I just had to think of a theme to marry these concepts into the spire-like deckbuilder formula. The only requirement was that the theme was not vanilla-fucking-fantasy 🙂

Enter Hypnagonia. My first attempt at making a deckbulder using the card game framework work on a deckbuilder formula. Not wanting to reinvent the wheel from the start, I stuck close to the Slay the Spire formula, but added a few twists of my own.

The first one is that you don’t get a preconstructed starting deck. You also don’t do a pseudo-deck construction. Rather like Monster Train, you combine many decks together to select the archetypes of your run. In typical vanilla-fantasy terms, think of it like selecting a class, race, weapon and quest. Each of these comes with their own starting cards, and each archetype selected also can modify your character in many ways, such as modifying their starting health.

Then, on top of that, each archetype selected has its own pool of cards to choose from when drafting. The pool for each archetype is large enough that when you combine them all together, you end up with approximately the card-pool for a single character in other games of this type.

This allows me to add new archetypes, (for example, new “weapons”), without diluting the consistency of card types in any single run. Therefore making for an infinitely expandable game with no downsides. In fact, each new archetype added, increases the possibilities in a run exponentially.

As I said before, I absolutely wanted to stay away from classical fantasy tropes. I also wanted to make a game which is not all about the pure-violence if possible. Not because I have something against Violent games, but because it’s just such a common trope. Griftlands made a cool approach with that, allowing you to play the game almost completely peacefully if you so wish.

But in my case, I decided to move onto the surreal. Not only because it’s not a typical theme, but also because it allows for a lot more possibilities, as well as a lot of humor. Therefore this game will be played in dreams.

Making a game about dreams, allows me to make cards that are anything from typical fantasy, to sci-fi, to absolutely ridiculous. After all, our dreams don’t follow any particular logic and it would totally make dream-like sense for a magic sword, a plasma rifle and a rubber chicken to not only exist at the same time, but be just as effective as each other! In fact, this is why the Rubber Chicken is my very first item (i.e. archetype card pool) which I designed. I want to set the theme just right, you know?

This also gives me an opportunity to move away from the typical terms of violence and death that are typical in these games. I put a lot of effort into making the terminology of the game fit well into its theme. Therefore, you don’t “damage” your enemies, you “interpret” them. In turn, they do not “damage” you, the “stress” you out, and if you get stressed enough, you don’t die, you wake-up!

And this meant that I was making a game with a Thesaurus as my buddy :D. I think it gives the game archetype a nice coat of paint, and I am pretty proud with some of the terms I’ve come up with to signify typical aspects. It also means that I need to come up with different terms on behalf of the player and the enemies, for the same things, but hopefully it’s not too much to pick up. It also allows me to use creative terms which you don’t typically get to see a lot. For example, some Torments clutter your deck with useless cards. I call these, “Perturbations”.

Finally, the dream theme, allows me to create a legacy-aspect which makes thematic sense. But I’ll talk about this another day.

Until then, you can already try out the very first pre-alpha release.

Oh and btw, I am in great need of collaborators for this project. While I can handle the coding, the design, art, sound aspects elude me and I could also use support in coming up with ideas for archetypes, cards and campaign concepts.

If you are interested in jumping in, let me know! As always, this game is Free Software under the AGPL3, so any work you contribute belong to you and the whole human commons.