Words
Hi Friends! 👋
I know It's early – but we just passed a major tipping-point.
In one sentence: AUTONOMY to ANARCHY. After handling tiles, cameras and Transformers previously, we're back in our habitat! Today we'll talk about the story. Not just any part of it! We'll put our eyes on detailed issues very, very soon. For now, let's tell a tale about two games and two engines.
AUTONOMY's duality, order in ANARCHY – and TRACHI's 12.000 lines of dialogue.
Constitution

I admit it: AUTONOMY's true scale eluded me. My general expectation was something between six and seven thousand lines. Turns out we're much closer to 8.000. For comparison: ANARCHY – including InvAsion – sits at roundabout four.
I'm sure you can see the implication. If our goal is to transpose AUTONOMY's words into ANARCHY, we need a solid strategy. The how and when were subject to intense speculation until around two weeks ago. Alas, one truth was always clear as day: We're not copy-pasting line-by line.
The dialogue would enter ANARCHY in a single swoop. We'd parse a whole lot of JSONs and translate the data into a format fit for Unity. One process, three construction-sites: extraction, transformation, integration.
Let's start at what we'd call the source of truth!
Ad fontes

Any RPG Maker (MV) project follows a given structure. A project holds a database. It defines actors, items, stats, tilesets and many other things. While the fact that Gotcha Gotcha Games wrote all of that in Javscr*pt is as absurd as it is impressive – our focus lies somewhere else.
The actual content is stored within the Maps. Each Map is a rectangle-shaped grid composed of two primary elements: Tiles and Events. Since we're reconstructing the tilemaps manually, we're only concerned with Events. But what's an Event anyway?
Each cell within the Grid can hold exactly one Event. We can supply a name and a note – but the real sauce is in the Pages. There's Conditions, an Image (Sprite) and a bunch of minor options. The most important part is the 'Contents' section: A list of Commands that span everything from 'Control Switch' through 'Play BGM' or 'Fadeout/Fadein Screen'.
That's great and all – but we're after one thing particular.
Content

'Show Text' holds a reference to a texture (resolved as a Portrait) and a field for the Text. Since RPGMaker MV doesn't have a dedicated name field, we also wrote the content for the name box (e.g. \n) into the Text.
Even this top-level overview should give you a good idea of what we need to do. We have to traverse the Maps, loop over every single Event Page and extract the properties of a Command code that corresponds to 'Show Text'.
We previously extracted Dialogue to extend our Dataset for training LLMs. Back then, the script only included bare-bone data – namely: Map, Event, Page, Speaker and Dialogue. To minimize the amount of manual post-processing, we'd also need the Portrait, Sprite, Conditions and several commands that affect the logic of the game.
Furthermore, AUTONOMY's event data wasn't exactly structured. Even before we transform the data into ANARCHY's lingo, we want to handle certain aspects during extraction. To understand why, we'll have to revisit some of ANARCHY's systems.
Destination

At the risk of sounding self-indulgent: I'm proud of where we are. I often voiced concerns at how much time I spent on ANARCHY's infrastructure. While it undoubtedly came at the cost of content, its also paid off tremendously.
For example: In AUTONOMY, every portrait is a hard-coded reference to a cell in a sliced texture-sheet. There is no formal connection between who's talking and which portrait we're showing. We could have a line where the Speaker is Atlas, but the Portrait points to the texture 'Icarus1', index '5'. That combination wouldn't make any sense – which is why we streamlined the entire process in ANARCHY.
What if I told you we just need a single tag? We can describe a Combatant's expression ([Eyebrows|Mouth|Eyes]) by a three-letter acronym: [N] stands for neutral, [NSC] would be Neutral, Smile, Closed – and so forth and so on. Everything else is handled programmatically. Since a Combatant has exactly one set of portraits per Variation, we can always resolve a tag through the Combatant and their active Variation.
So far the easy part. Now let's get to some of the more complex prep we had to do in ANARCHY!
Inheritance

Not all of AUTONOMY's characters made it into ANARCHY. This goes for unique characters (DeBloom, Tanner, Solka etc.), but also for a couple of missing generics (Amrynian Armed Forces, Trachian Guardsmen et al.). Before we imported the Dialogue, we manually created at least one Prefab and one Combatant per Sprite.
It's a perfect opportunity to implement a crucial piece of automation. As pointed out here, we're using Sprite Libraries to run all Combatants on a single set of animations. As of March 2025, we still built these Libraries by dragging individual subTextures into predefined slots. With our new script, we just drag in a Texture and the Library assembles itself.
That's great and all, but there's a much bigger problem! Generic characters are called generics because they share a sprite – and thus a Sprite Library. For better or worse, AUTONOMY had around 430 characters of that type. Without peeking at the next paragraph: Can you guess what my first initial thought was?
'I'm not creating these by hand!' Turns out I didn't have to. We just need a template Prefab for every Sprite Library! Like the portraits, we mapped AUTONOMY's sprite-sheets to their ANARCHY counterparts. In this case: we injected the name of the corresponding template Prefab.
We'll talk more about how we're utilizing that in a bit. For now, there's one more aspect of ANARCHY I want to show.
Timetable

A couple of paragraphs ago, I mentioned (Self-)Switches and Variables. These are conditions that enable/disable Event Pages. Here's an example from the Prologue: You could only move from the Eastern Checkpoint to the Outskirts after completing the Customs Office shenanigans.
If you played both AUTONOMY and ANARCHY, you might spot a structural resemblance. ANARCHY (for the most part) doesn't rely on Switches – it uses Quest(Task)s. While translating Switches to Quests isn't too hard, we'd still need to set up the Quests.
More concretely: Put AUTONOMY's ~300 Switches into a sequence and assign them to their Acts. We could've immediately loaded that into Unity and generate Quests (Acts) and corresponding Tasks (Switches). There was just one problem: AUTONOMY's nory was neither consistent nor descriptive in the way he named the Switches.
So I decided to replace the Switch labels with something else. You know the saying: 'There's a time and place'? AUTONOMY's main story takes part in Trachi, so that's no good for distinction. Time – on the other hand – is the perfect denotation to describe how far we are into our 3 1/2 day trip.
That being said: It could just be a placeholder. I do want to keep time and date as a property for every Quest Task, but it doesn't necessarily need to be the Task's actual name. The important thing is: when we import AUTONOMY into ANARCHY, we can directly reference Quests and Quest Tasks by an indistinguishable name.
Speaking of the import, let's talk a word or two about that as well!
Graph

In our script, we need to handle three separate sections. The most trivial would be the Dialogue Actors: We run through our list of Speakers and add them one by one. In addition, every Actor gets a 'Prefab' property that points to a 'Prefab' Template.
Secondly, the Conversations. ANARCHY distinguishes between Interaction-triggered (e.g. talking to NPCs) and scene-driven conversations (e.g. when entering a scene). The category is important, since every character has their own unique conversation tree. Thankfully, RPGMaker has a 'Trigger' property which separates 'Interact' from 'Autorun' conversations.
Then there's the Dialogue Entries. We need to assign each line to a Conversation. Furthermore, we also reference an Actor. This defines the position of the Dialogue Bubble, the name in the name box – and the portrait in combination with the portrait-tag.
If you recall, Events have Pages. Events themselves point to a conversation. Pages constitute the branches. We need to arrange the lines (nodes) like a tree and set up connections (edges) between the nodes. Lastly, the Conditions manage which branch of the conversation we're activating at a given point.
And that's – basically – it. We imported AUTONOMY's 650 conversations, created roundabout 350 actors, prefabs and just as many combatants.
Technical Debt

As we were preparing ANARCHY, we also changed a couple of things in the back-end. You probably won't notice a difference, but the way we're referencing stuff has changed. The key takeaway is: Next time we change the name of a Conversation, Quest(Task) or Scene, we won't break references anymore.
The last thing on my immediate To-Do is a rewrite of the Companion system. I like the way it works in general, but we're still manually placing things. I'll take a deeper look into how Larian and Bioware make sure that your party automatically spawns around you whenever you change scenes.
Once that's done, the real work begins! We imported around 95% of the in-conversation logic, but there's a lot of gaps. Pathfinding, Music and Sfx are better done by hand – especially since we want to rework some of it anyway. More importantly: we also need to set up the overarching scene logic for every scene.
Then there's the tilemaps for Trachi, Kenovice and all the one-off intermissions. I'd like to have it done within weeks, but months sounds more appropriate. Nevertheless, Importing the dialogue was a massive leap forward.
Big Picture
[previewyoutube][/previewyoutube]
I took two weeks off work and made it my most productive vacation – ever! In the span of fourteen days, ANARCHY's dialogue multiplied itself. We integrated AUTONOMY's Dialogue Text, the Speakers, the Portraits, the Sprites and most of the in-conversation logic.
We transformed a semi-structured mess from an obsolete engine into our own words. Thanks to our efforts in the past, ANARCHY just needed a couple of adjustments. All in all, we extended our system to incorporate a whopping 450 characters engaging in 750 conversations.
I never doubted that we'd make it. The question was: How much manual work would be left afterwards. Turns out, it's much less than I thought! As a bonus, I also learned tons about Editor scripting. If you recall, one of my main complaints in game-development was the amount of clicking around.
We'll hopefully be able to use our newfound expertise and automate workflows even beyond this little sub-project. Since I learned how to manipulate Unity Assets programmatically, it should turn ANARCHY – or rather: TRACHI – into a much more polished and coherent product.
Horizon

Whether that translates into more content remains to be seen. On the other hand, we're on the verge of turning ANARCHY into 200% of what it was. If the stars align, we might reach parity this Summer. Then we'll tackle the narrative inconsistencies and – if we're still around – extend AUTONOMY.
More on that in AUTONOMY's next announcement. As for this place here: Let's see if we can't have something cool by June.
Until then, I remain an ardent admirer – and your biggest fan! 😊
much love
nory