You’re probably wondering why you’re staring at this enormous wall of text instead of a flashy video game presentation. Well, buckle up my friends. I’ll try to explain everything in detail. I really loved this project, but I don’t think I’ll be able to return to it in the coming years. So this whole write-up exists mostly for posterity. Now sit back, relax, and let me tell you the story of one dream killed by bureaucracy.

I’ve loved games since I was little. We were poor, so my parents couldn’t afford a computer. Whenever I got the chance, I went to my mother’s workplace and used the computers there. Of course, those had almost no games on them, so I thought the easiest solution was to program my own games to play. Another passion of mine was writing stories, so whenever I wrote something, I tried to turn it into source code on paper. Later, when I finally got access to a computer, I typed it all in as fast as possible. Every second counted. There was no time for debugging. It rarely worked, but I learned how to analyze and design code in my head without relying on debuggers or fancy tools.

I made my first real, functioning computer game when I was 13. I even managed to sell two copies. I kept trying to make more games after that, but reality hit pretty fast. Because I was good at analyzing problems mentally, planning everything before writing a line of code, and producing very defensive, low-bug code right from the start, I naturally drifted into the safety and security industry. But I never stopped hoping that one day I’d make a “real” game.

Fast-forward to 2021. Everyone is losing their minds over “the cough”. Nobody pays invoices, everything is falling apart thanks to idiotic politicians, and the project I’d been working on since 2016 was suffering financially as well. At the same time, GPT-3 was getting big. It was unbelievable. I was instantly hooked. I truly believed (and I still do) this is the future of humanity. I started implementing some basic tools using its API (like controlling thermostat, reading data from sensors and classifying it). It was shockingly easy as long as you wrote the right instructions. It felt like magic at that time.

I’ve always loved open-world RPGs. I crave freedom, just wandering around, talking to NPCs, uncovering lore, role-playing my character however I want. I rarely care about the “main storyline”. The world itself is my story. I hate cutscenes and anything that steals player agency. I understand why scripted scenes exist. You can’t realistically prepare branches for every possible outcome, but that doesn’t mean I don’t hate them. I’ve abandoned many games simply because they wouldn’t let me do what I wanted (FarCry 4 for example, the only moral choice was to join Pagan Min and his forces).

But now I realized something: maybe, finally, an open-world RPG without cutscenes or hard limitations was possible. A game where the world and its NPCs reacted dynamically and unscripted. A game powered by LLMs.

The game (called Frozen By The Sun) was designed as a massive open world, practically continent-sized. The setting was classic medieval fantasy. Earlier that year, I had written a book (just for fun, never released it), and I wanted to use it as the seed for the world. I’d omit the last chapter and treat the book as a “world boot file”. It defined the rules, the initial political landscape, geography, major characters, cities, and populations. It was detailed enough to define real living world.

From that starting point, you, the player, would take control of the main character and do whatever you wanted. Instead of playing the last chapter of the book, you would have complete freedom to reach any conclusion to the story. The game engine would simulate the world according to those initial rules. Every NPC interaction, world event, long-term evolution, even emergent storylines, they would all arise naturally.

While giving player total freedom, I still needed the world to have goals, tensions, and potential crises, to make the game interesting. So each character, faction, or population would have long-term plans, beliefs, stances and motivations. This ensured conflict, drama, even potential world-ending events. Basically, there would always be something happening, something to stop, cause, or ignore.

The goal was absolute freedom. Become a hero, savior, psychopath, assassin, shadowy politician, whatever. No cutscenes stealing control.

The engine’s job was simple: ensure the player and every NPC followed the world’s rules.

Everything above was the dream. But the technical reality was harsh. Let me stress: I’m not an AI guru. I’m not smart enough to design my own LLM. At best, I’m a glorified power-user who knows how to use and abuse the tools.

To simulate such a huge world using LLMs, I needed heavy compromises. Graphics had to be scaled way back. Geometry, physics, weather simulation, crowd AI; everything needed limitations. The game could still look good, but more like 2013 good, not 2023 good. Think BioShock Infinite era. The world surface had to be mostly static. Some voxel addition/subtraction (to level ground for fields or dig a tunnel) was allowed, but major terrain changes were not. Many systems needed precalculation. The world could handle about 32 million inhabitants in total, with a starting population of ~30 million distributed across a few hundred cities.

To run all this, I used three different LLMs.

Action LLM

This was a small, specialized 1B-parameter model with a 32k context window. Today we’d label it “agentic,” but the term wasn’t common then. It worked like this:

Each NPC had a BIO containing:

  • A role or job
  • Age, health, height, strength, skin color, marital status, orientation, beliefs, personality traits
  • Ownership of specific objects (house, table, hammer…)
  • Relationships with other NPCs

The BIO was capped at 800 tokens (~3200 characters).

Algorithm for one simulation step:

  1. Choose either the player or a random NPC.
  2. Find the 20 closest NPCs to that chosen one.
  3. Build instructions telling the LLM to describe what each NPC should do and feel.
  4. Add a ~1k token description of the current environment (day/night, weather, mood, surroundings, etc.).
  5. For each of the 20 NPCs, add ~1k tokens describing their current state/action, surroundings, what they see, whether they notice the player, and their BIO.
  6. Run inference.
  7. Parse and execute actions for each NPC.

We defined around 150 possible actions. Some were trivial (sneeze, yawn, blink). Others were more complex: go <destination>, sit on <object>, pick up <item>, talk to <NPC> about <topic>, kick <something>, etc.

Objects referenced by the LLM were usually matched to nearby objects via a lightweight recognition layer.

If an instruction couldn’t be parsed, it was ignored and the NPC continued whatever it was doing.

The system could also parse compound instructions like:

“X looks at Y, takes a cup from the table, sips, puts it back, walks to the bed, lies down, sleeps.”

NPCs were simulated in a continuous cycle:

  1. Simulate 20 closest to the player.
  2. Next 20 closest.
  3. Next 20.
  4. Pick random NPC within 200m of player and simulate their 20 closest.
  5. Same as step 4 again.
  6. Pick random NPC anywhere in the world and simulate their 20 closest.
  7. Same as step 6 again.

These seven steps repeated continuously. If the player did something drastic (draw a sword, attack someone), the system immediately returned to step 1 to update local reactions.

This LLM wasn’t good for conversations, just action instructions. But it was fast. With 8-bit quantization plus context, it needed around 3 GB of VRAM.

Itinerary LLM

This was another small, specialized model (around 1B parameters) but with a huge 128k context window. Unfortunately, I had to abandon the project before finishing this part.

While the Action LLM handled local moment-to-moment behavior, it wasn’t suitable for world-scale simulation. That’s where the Itinerary LLM came in.

Its goals:

  • Generate daily/weekly itineraries for *groups* of NPCs.
  • Spread information (news, rumors, updates) throughout the world.

Most NPCs shared common “job templates”: carpenter, blacksmith, merchant, guard, etc. Each job had a default itinerary: what they normally do over 24 hours.

The Itinerary LLM could:

  • Load all job itineraries into context

  • Add info about the city, weather, current global situation, and recent “news”

  • Produce updated itineraries for entire groups at once

These new itineraries were then applied to entire populations inside a city or region.

This allowed:

  • Night/day behavior
  • Seasonal differences
  • Reactions to war, famine, peace, prosperity
  • City-wide mood shifts

It also served as a mass information propagation system. Each NPC had their own Knowledge Base: facts and beliefs about the world. When something happened (e.g., the king died), NPCs wouldn’t magically know it. Knowledge spread gradually through “talk” events and periodic Itinerary LLM updates. Imperfect propagation led to false beliefs and LLM hallucinations being treated as rumors. Honestly, pretty realistic. Sometimes whole districts started believing conspiracy theories about the king. This part was both hilarious and terrifying.

Thanks to large context, it was possible to really describe the general state of that area, from basic population information, moods, knowledge base, rumors. You can fit more than 200 pages of typical English text into 128k context and still have a plenty of space for result. So the engine just dumped everything it could, basically writing a short book describing the land for every inference.

It was slow and had very low priority. A full world cycle through all cities took about 45 minutes. If the player did something major, affected cities were updated first.

I did a lot of experiments, trying to split it into smaller parts to save VRAM and speed things up. Also trying to fit whole world into one context window to basically simulate everything at once at a basic level. The project ended while I was working intensively on this part.

Trully, this was the most important part of the whole project. Action LLM was pretty straightforward, just a lot of work implementing a lot of actions for NPCs. But getting Itinerary LLM right, building the instructions and query and then interpreting the results, that was the real challenge. Unfortunately, I didn’t have a chance to see it all through to the end.

The model, 8-bit quantized and with context, required a bit over 7 GB VRAM. Yeah, that sucks.

General LLM

The third LLM was a standard one. At the time I used standard GPT-3.5 via API. It was used exclusively for dialogues with NPCs and occasional world-state corrections. It was much more intelligent than those two small models and would fix problems created by them.

It meant that players would need some sort of monthly subscription to cover API usage. But the game wasn’t that API intensive. You don’t need a lot of tokens for conversations.

Proper large large language model made NPC conversations dynamic and contextual. The LLM received updated knowledge about the world and each NPC’s personality. This made interactions feel surprisingly alive. Nothing scripted.

I started development in 2022, while still working on my previous long-term project, so progress was slow. I had to learn Unreal Engine 4, then UE5, experiment with LLMs, and write a pile of internal tools and scripts.

My GPU at the time had only 12 GB of VRAM. Trying to run the Action LLM, Itinerary LLM, and UE5 together was impossible. I naïvely hoped that by the time the game released (maybe late 2024), everyone would have 20+ GB VRAM. Looking back from December 2025, yeah…

Still, I built a basic UE5 demo, made a video, created a detailed webpage, and prepared for a crowdfunding campaign for several million dollars, which is realistically what a game like this needs. I also had a strong team ready on standby from my old project.

A few weeks after releasing the page, a pretty large distribution company emailed me. They wanted to fund the whole project. Standard deal: they give us money, they take our souls. I said yes, and we started negotiating slowly over email.

Then disaster hit.

The EU and its proposed AI regulation.

The first draft was insane. Every LLM, even open-source ones, had to be regulated or companies would face harsh penalties. Tons of idiotic requirements. Exactly the kind of overreach the EU is famous for. It basically meant we couldn’t distribute the game in the EU at all (you know, the LLM would be able to write instructions how to kill and other worse things). Since my company was based in the EU, we could be fined even for distributing it elsewhere. Total showstopper.

It was still “just a proposal”, but everyone assumed it would eventually pass. Negotiations with the publisher ended almost immediately, as both sides realized this. What looked like a done deal evaporated overnight, thanks to EU bureaucrats.

The final regulation (The EU Artificial Intelligence Act - Regulation (EU) 2024/1689) later softened some of the worst parts, but it still made AI and the EU fundamentally incompatible forever.

Luckily, my original project revived, and we continued working on that.

The biggest nightmare for us wasn’t even the AI Act itself, but the proposed AI Liability Directive, which is thankfully stalled for now. The main issue was that we would have to ship LLMs as part of our product. LLMs that, by definition, could be used in ways lawmakers consider “high risk”. The regulation required developers to build safeguards to prevent bad actors from using AI to break the law.

In a normal productivity app, maybe that’s reasonable. But in our case, the whole point of the integrated LLMs was to simulate human behavior across millions of NPCs. And not all humans in a fictional world are saints. There are characters in the book, that are complete human trash, doing despicable things – genocide, murder, rape, even child rape. Even if we blocked players from doing certain extreme actions, the LLMs still needed to understand evil behavior in order to simulate characters who are evil. Otherwise every villain magically becomes a polite ethical citizen because “AI safety”. That completely destroys the story, the realism, and the entire point of simulating a functioning (and sometimes dysfunctional) world.

If an NPC does something horrible, even in a fictional settings and some regulator decides that the LLM “enabled illegal behavior”, the company becomes legally exposed. The directive was written so broadly that literally any studio could get crushed if a bureaucrat woke up in a bad mood. It didn’t matter that the content was fictional, contextual, or part of a narrative simulation. The risk was simply too high. And also, anyone could take our LLMs and use it in any way they pleased, even for crime, since it wouldn’t have any safeguards. I know there are a lot of open source LLMs now without safeguards, but it was different back then. Before all the QWENs and DeekSeeks.

The AI Liability Directive was the real death blow for us. It was so absurdly overbroad that it could wipe out any company of any size if regulators decided to interpret it the wrong way. We had no realistic or safe path forward. That’s why we had to pull the plug.

I still hope that one day I’ll be able to play a game where I have complete freedom to be good, evil, or something in between and the world reacts realistically. No NPC repeating the same three lines forever. Real conversations based on real knowledge and personality traits. No cutscenes stealing agency (looking at you, Mass Effect 3). And a game that lets me kill whoever I damn well please (that fucking Musa in KCD2).

It probably won’t be me who creates this game. But maybe Musk’s AI game studio will. Or some indie genius. Or maybe someday we’ll just “vibe-code” whole games using AI.

Who knows?

For now, all I have is this story. Thanks for reading and have a good day.

And to all those EU politicians and bureaucrats: I pray every day to Perun to bring the most painful and terrible death to you, idiots. I hate you.