<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>House of Nettles: #dark souls 3</title>
  <id>https://nex-3.com/tag/dark+souls+3/</id>
  <link href="https://nex-3.com/tag/dark+souls+3/feed.xml" rel="self"/>
  <link href="https://nex-3.com/tag/dark+souls+3/" />
  <updated>2026-03-04T11:52:46Z</updated>
    <entry>
      <title>Becoming a Video Game Scientist Part 1: Archipelago</title>
      <link href="https://nex-3.com/blog/becoming-a-video-game-scientist-part-1/" rel="alternate"/>
      <id>https://nex-3.com/blog/becoming-a-video-game-scientist-part-1/</id>
      <published>2026-03-04T11:52:46Z</published>
      <updated>2026-03-04T15:37:39Z</updated>
      <author><name>Natalie Weizenbaum</name>
          <uri>https://nex-3.com/</uri></author><category term="article" label="article"/><category term="dark souls 3" label="dark souls 3"/><category term="modding" label="modding"/><content type="html">&lt;p&gt;The bulk of my hobby time for the past six months or so has been spent not
playing video games, nor yet creating them, but autopsying them. Layer by layer
I peel them apart, examining every cartilaginous connection and noting down how
each muscle pulls on the bone structure beneath. I am building on the work of
those who came before me, a great berth of knowledge at my back and many fine
tools at my hands without which my task would be too overwhelming to
contemplate. I give back to this world by crystallizing the knowledge I find
into forms that may be re-used and built upon long into the future.&lt;/p&gt;
&lt;p&gt;In plainer terms, I&#39;ve been spending a lot of time reverse-engineering From
Software games.&lt;/p&gt;
&lt;h2 id=&#34;2023-dipping-my-toes&#34;&gt;2023: Dipping my Toes&lt;/h2&gt;
&lt;p&gt;A couple years ago, my friends and I learned about &lt;a href=&#34;https://archipelago.gg/&#34;&gt;Archipelago&lt;/a&gt;, a system of
interconnected game mods and related tooling which supports what they call a
&amp;quot;multiworld randomizer&amp;quot;. You may already be familiar with the concept of
randomizer mods, in which the items within a game are shuffled about at random
while still tracking enough game logic to ensure that the game can be completed.
They&#39;re popular as ways to bring fresh life to games one has already played many
times over, and can be particularly fun to play in a racing context where the
strategy around figuring out how to proceed can be more complex than even the
game mechanics themselves.&lt;/p&gt;
&lt;p&gt;A multiworld randomizer takes this concept and expands it beyond the boundaries
of a single game. Archipelago is able to randomize items across many games and
connect them all through the internet, so that a &lt;em&gt;Hollow Knight&lt;/em&gt; player in
Minneapolis can find bombs for a &lt;em&gt;Link to the Past&lt;/em&gt; player in Seattle, which
lets them blast through a wall and find a &lt;em&gt;Super Mario World&lt;/em&gt; player&#39;s ability
to run. The possibilities are limited only by the imaginations and hacking
abilities of a community of volunteer developers.&lt;/p&gt;
&lt;p&gt;My little group quickly decided we wanted to give this a try. Looking through
the list of available games, much shorter then than it is now, the one that
appealed to me most was &lt;em&gt;Dark Souls III&lt;/em&gt;. I consider the From Software oeuvre to
be largely masterpieces, and while DS3 isn&#39;t my favorite&lt;sup class=&#34;footnote-ref&#34;&gt;&lt;a href=&#34;https://nex-3.com/blog/becoming-a-video-game-scientist-part-1/#fn1&#34; id=&#34;fnref1&#34;&gt;[1]&lt;/a&gt;&lt;/sup&gt;, it was the one
that was available at the time.&lt;/p&gt;
&lt;h3 id=&#34;the-old-mod&#34;&gt;The Old Mod&lt;/h3&gt;
&lt;p&gt;Unfortunately, the implementation of the game was not very good. No shade on the
dev—modding with these games is difficult, as I was soon to discover. They use a
totally idiosyncratic game engine that was originally built for &lt;em&gt;Demon&#39;s Souls&lt;/em&gt;
and has haphazardly accrued new features ever since; the whole thing is a mass
of many different custom file formats all held together with
difficult-to-decompile (and in some cases intentionally obscured) C++ code. But
the player experience was not so great.&lt;/p&gt;
&lt;p&gt;The core problem was this: because it was so difficult to figure out how to do
anything at runtime in these games, the only thing the mod was really able to
influence was the moment the player received an item. They could see which items
the player was getting and replace them with something else. What&#39;s more, this
didn&#39;t work with items purchased from a shop.&lt;/p&gt;
&lt;p&gt;The core principle of a randomizer is the separation of &amp;quot;items&amp;quot; from
&amp;quot;locations&amp;quot;. A location is a place or situation in a game that gives the player
something; the item is the thing the player gets. Archipelago works by knowing
all the items and locations in each game, and assigning new items to each
location. This poses a problem when all you know is which item you received:
unless that item is unique across the entire game, you have no idea which
location it came from. The &lt;em&gt;Dark Souls III&lt;/em&gt; mod&#39;s solution to this was simple:
only unique items could be randomized.&lt;sup class=&#34;footnote-ref&#34;&gt;&lt;a href=&#34;https://nex-3.com/blog/becoming-a-video-game-scientist-part-1/#fn2&#34; id=&#34;fnref2&#34;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The other critical problem was that the mod had no way of telling the player
what item they were receiving for another player&#39;s game. Foreign items, as
they&#39;re known, were simply replaced with Prism Stones in the local player&#39;s
game. Many was the time I&#39;d hear a player say &amp;quot;wow Natalie, thanks for that!&amp;quot;
only to have to ask them what I&#39;d even given them.&lt;/p&gt;
&lt;h3 id=&#34;the-new-mod&#34;&gt;The New Mod&lt;/h3&gt;
&lt;p&gt;It didn&#39;t take much of this before my mental wheels began to turn. Thanks to my
previous work &lt;a href=&#34;https://web.archive.org/web/20241111053456/https://cohost.org/nex3/tagged/AI%20Deep%20Dive&#34;&gt;dissecting enemy AI&lt;/a&gt; for Elden Ring, I was familiar with the
basics of how From Software games were assembled. I had also done a fair amount
of &lt;em&gt;Sekiro&lt;/em&gt; randomizer playthroughs using &lt;a href=&#34;https://www.nexusmods.com/sekiro/mods/543&#34;&gt;thefifthmatt&#39;s randomizer&lt;/a&gt;, which
operated entirely statically: rather than injecting a mod into the game which
messed with items during play, it created new variations of the game&#39;s files
which stored which items existed where.&lt;/p&gt;
&lt;p&gt;Imagine all the data in the game laid out in a giant spreadsheet&lt;sup class=&#34;footnote-ref&#34;&gt;&lt;a href=&#34;https://nex-3.com/blog/becoming-a-video-game-scientist-part-1/#fn3&#34; id=&#34;fnref3&#34;&gt;[3]&lt;/a&gt;&lt;/sup&gt;. Each
item has its own row with all the information about it, each enemy type has its
own row with all of its stats, and so on. The static randomizer works by
rearranging cells in this spreadsheet and using a small off-the-shelf mod to
inject the new data into the game. The result is that any item can be moved to
any location, including shops and locations that originally held non-unique
items, without any extra reverse-engineering required.&lt;/p&gt;
&lt;p&gt;I put the pieces together and realized that you could do the same thing for
Archipelago. It couldn&#39;t all be done by statically modifying data files, since
at the very least you&#39;d need to tell the Archipelago server which locations you
found and receive items from other players. But you could statically add new
items which included in their metadata which Archipelago locations they appeared
at, and for foreign items you could even give them proper names like &amp;quot;Michelle&#39;s
Amulet Jewel&amp;quot; so the player could see what they were and who they were for. Then
the existing item-handling function would be able to distinguish any location in
the game&lt;sup class=&#34;footnote-ref&#34;&gt;&lt;a href=&#34;https://nex-3.com/blog/becoming-a-video-game-scientist-part-1/#fn4&#34; id=&#34;fnref4&#34;&gt;[4]&lt;/a&gt;&lt;/sup&gt; and swap in the correct item.&lt;/p&gt;
&lt;p&gt;Once I&#39;d had this idea, I knew I couldn&#39;t just let it sit stagnant in the back
of my mind. I forked the DS3 Archipelago mod and thefifthmatt&#39;s randomizer and I
set to work. It wasn&#39;t long before I had a proof of concept up and running: a
DS3 Archipelgo mod that used a variant of thefifthmatt&#39;s static randomizer to
load all the Archipelago metadata into the game items themselves. It worked
as-is with existing DS3 Archipelago worlds, and as an added bonus it could
randomize enemies as well (a feature we got for free from the existing static
randomizer).&lt;/p&gt;
&lt;p&gt;I could have left it there, submitted a pull request, and let the existing
maintainer do with it what he wanted. But by this point he was largely inactive,
and I&#39;ve always found it difficult to let progress go unmade when I can clearly
see how to do it. So rather than the end of my story, this is just the
beginning.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;To be continued in Part 2: Ghidra&lt;/em&gt;&lt;/p&gt;
&lt;hr class=&#34;footnotes-sep&#34;&gt;
&lt;section class=&#34;footnotes&#34;&gt;
&lt;ol class=&#34;footnotes-list&#34;&gt;
&lt;li id=&#34;fn1&#34; class=&#34;footnote-item&#34;&gt;&lt;p&gt;That honor belongs to &lt;em&gt;Sekiro: Shadows Die Twice&lt;/em&gt;. This was also the first
one I played, but after replaying most of them numerous times I still have
no hesitation putting this in my top slot. &lt;a href=&#34;https://nex-3.com/blog/becoming-a-video-game-scientist-part-1/#fnref1&#34; class=&#34;footnote-backref&#34;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn2&#34; class=&#34;footnote-item&#34;&gt;&lt;p&gt;There actually was another workaround that could optionally be
used. For certain classes of items, like upgrade items, the randomizer would
&lt;em&gt;count&lt;/em&gt; how many the player received over the course of their run, and with
each successive item give the player a different item. It would keep track
of how many Titanite Shards were guaranteed to be available before a certain
point in the game to know where it was safe to put items that unlocked
progression. This technique didn&#39;t play very well, but it was certainly
clever. &lt;a href=&#34;https://nex-3.com/blog/becoming-a-video-game-scientist-part-1/#fnref2&#34; class=&#34;footnote-backref&#34;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn3&#34; class=&#34;footnote-item&#34;&gt;&lt;p&gt;I haven&#39;t ever heard this explicitly verified by an employee, but
rumor has it that From Software literally does just use a big Excel
spreadsheet for all this data internally before it gets serialized into a
more efficient format for including in the game. &lt;a href=&#34;https://nex-3.com/blog/becoming-a-video-game-scientist-part-1/#fnref3&#34; class=&#34;footnote-backref&#34;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn4&#34; class=&#34;footnote-item&#34;&gt;&lt;p&gt;...except for locations in shops. Those still didn&#39;t work. &lt;a href=&#34;https://nex-3.com/blog/becoming-a-video-game-scientist-part-1/#fnref4&#34; class=&#34;footnote-backref&#34;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
    </entry>
  
</feed>

