Jump to content

Stop Killing Games FAQ & Guide for Developers

Recommended Posts

Colorized and formatted SMI. Uploading verbatim will colorize Olive and Matt.

<SAMI>
<HEAD>
<TITLE>SKG-dev</TITLE>
<SAMIParam>
  Metrics {time:ms;}
  Spec {MSFT:1.0;}
</SAMIParam>
<STYLE TYPE="text/css">
<!--
  P { font-family: Arial; font-weight: normal; color: white; background-color: black; text-align: center; }
  .ENUSCC { name: English; lang: en-US ; SAMIType: CC ; }
-->
</STYLE>
</HEAD>
<BODY>
<-- Open play menu, choose Captions and Subtitles, On if available -->
<-- Open tools menu, Security, Show local captions when present -->
<SYNC Start=320><P Class=ENUSCC><font color="#ffffff">Hey, this is a video<br>I was hoping to help make</font>
<SYNC Start=3120><P Class=ENUSCC><font color="#ffffff">that ended up mutating<br>into its own thing.</font>
<SYNC Start=6080><P Class=ENUSCC><font color="#ffffff">On the Stop Killing Games campaign,</font>
<SYNC Start=7901><P Class=ENUSCC><font color="#ffffff">I think most supporters<br>just need to hear</font>
<SYNC Start=9680><P Class=ENUSCC><font color="#ffffff">that we're trying to stop<br>games from being destroyed,</font>
<SYNC Start=12441><P Class=ENUSCC><font color="#ffffff">it's not impossible to do this,</font>
<SYNC Start=14480><P Class=ENUSCC><font color="#ffffff">and it won't ruin the<br>industry by doing so.</font>
<SYNC Start=17360><P Class=ENUSCC><font color="#ffffff">Now, I try to dive into the details<br>when people want me to,</font>
<SYNC Start=20400><P Class=ENUSCC><font color="#ffffff">but my answers don't<br>always satisfy developers.</font>
<SYNC Start=23600><P Class=ENUSCC><font color="#ffffff">I take more of a<br>bird's-eye view approach,</font>
<SYNC Start=26080><P Class=ENUSCC><font color="#ffffff">where I think if end-of-life plans<br>for games became a requirement,</font>
<SYNC Start=30000><P Class=ENUSCC><font color="#ffffff">I think developers might be amazed<br>at how many solutions would emerge.</font>
<SYNC Start=34480><P Class=ENUSCC><font color="#ffffff">But that's not good enough for some.</font>
<SYNC Start=36640><P Class=ENUSCC><font color="#ffffff">Some people, developers especially,<br>really want more technical details.</font>
<SYNC Start=41600><P Class=ENUSCC><font color="#ffffff">So, what I originally wanted to do<br>was interview a couple developers</font>
<SYNC Start=45120><P Class=ENUSCC><font color="#ffffff">who could speak on this topic<br>much better than I ever could.</font>
<SYNC Start=48640><P Class=ENUSCC><font color="#ffffff">But what ended up happening<br>was we had some scope creep,</font>
<SYNC Start=51840><P Class=ENUSCC><font color="#ffffff">and now we have a<br>full-fledged presentation</font>
<SYNC Start=55040><P Class=ENUSCC><font color="#ffffff">from two experienced developers,</font>
<SYNC Start=57360><P Class=ENUSCC><font color="#ffffff">Olive Badger,</font>
<SYNC Start=58480><P Class=ENUSCC><font color="#ffffff">and Matthew Cassells<br>from Alderon Games.</font>
<SYNC Start=61840><P Class=ENUSCC><font color="#ffffff">I think my introductions of them<br>won't even do them justice,</font>
<SYNC Start=65040><P Class=ENUSCC><font color="#ffffff">but between the two of them,</font>
<SYNC Start=66560><P Class=ENUSCC><font color="#ffffff">I think they have a lot of<br>perspective and practical information</font>
<SYNC Start=70000><P Class=ENUSCC><font color="#ffffff">on how games in the future<br>and even some in the present</font>
<SYNC Start=73120><P Class=ENUSCC><font color="#ffffff">can start having end-of-life plans.</font>
<SYNC Start=75440><P Class=ENUSCC><font color="#ffffff">So this is by and large<br>a presentation they put together,</font>
<SYNC Start=78880><P Class=ENUSCC><font color="#ffffff">covering how end-of-life<br>plans could work,</font>
<SYNC Start=81040><P Class=ENUSCC><font color="#ffffff">and covering some common<br>questions developers have.</font>
<SYNC Start=84400><P Class=ENUSCC><font color="#ffffff">It's going to get technical,</font>
<SYNC Start=86080><P Class=ENUSCC><font color="#ffffff">so if you're here for some of<br>my goofier videos, this one isn't for you.</font>
<SYNC Start=90160><P Class=ENUSCC><font color="#ffffff">I'm just hosting it to get<br>more information out there.</font>
<SYNC Start=92880><P Class=ENUSCC><font color="#ffffff">But if you're a programmer</font>
<SYNC Start=93920><P Class=ENUSCC><font color="#ffffff">who's been wanting more details<br>about <i>how</i> we will save games,</font>
<SYNC Start=97440><P Class=ENUSCC><font color="#ffffff">then this one's for you.</font>
<SYNC Start=99360><P Class=ENUSCC><font color="#ffffff">All right, I'll let<br>them take it away.</font>
<SYNC Start=102560><P Class=ENUSCC><font color="#ffff00">Hi, I'm Olive Badger,</font>
<SYNC Start=104880><P Class=ENUSCC><font color="#ffff00">and I have been asked to help<br>with the Stop Killing Games initiative</font>
<SYNC Start=109600><P Class=ENUSCC><font color="#ffff00">and talk a little bit about<br>some of the common questions</font>
<SYNC Start=113440><P Class=ENUSCC><font color="#ffff00">that we're seeing from developers.</font>
<SYNC Start=115627><P Class=ENUSCC><font color="#ffff00">Little bit of background on me:</font>
<SYNC Start=118400><P Class=ENUSCC><font color="#ffff00">So, upfront, I'm not<br>a game developer.</font>
<SYNC Start=121520><P Class=ENUSCC><font color="#ffff00">I have five years of IT experience</font>
<SYNC Start=124800><P Class=ENUSCC><font color="#ffff00">working in various different<br>parts of the industry</font>
<SYNC Start=127600><P Class=ENUSCC><font color="#ffff00">doing data center to internal IT<br>and IT management.</font>
<SYNC Start=132160><P Class=ENUSCC><font color="#ffff00">After that, I transitioned<br>over to software development</font>
<SYNC Start=136160><P Class=ENUSCC><font color="#ffff00">where I've done a decent amount of<br>embedded software development for drones</font>
<SYNC Start=140840><P Class=ENUSCC>&nbsp;
<SYNC Start=140841><P Class=ENUSCC><font color="#ffff00">and then moved into<br>fullstack development.</font>
<SYNC Start=144160><P Class=ENUSCC><font color="#ffff00">I've even done a little bit of DevOps</font>
<SYNC Start=147200><P Class=ENUSCC><font color="#ffff00">and project management<br>for a small startup.</font>
<SYNC Start=150880><P Class=ENUSCC><font color="#ffff00">Um, I do have a YouTube<br>channel that just kind of, uh,</font>
<SYNC Start=154960><P Class=ENUSCC><font color="#ffff00">popped off with this whole thing.</font>
<SYNC Start=156320><P Class=ENUSCC><font color="#ffff00">It's just "OliveBadger".</font>
<SYNC Start=157680><P Class=ENUSCC><font color="#ffff00">Now, that said, this presentation<br>was put together not just by me,</font>
<SYNC Start=162320><P Class=ENUSCC><font color="#ffff00">but also Matthew from Alderon Games,<br>who is a game developer.</font>
<SYNC Start=166880><P Class=ENUSCC><font color="#ffff00">I'll let him introduce himself.</font>
<SYNC Start=168720><P Class=ENUSCC><font color="#00ffff">Hey everybody, how's it going?</font>
<SYNC Start=170160><P Class=ENUSCC><font color="#00ffff">My name is Matthew Cassells.</font>
<SYNC Start=171520><P Class=ENUSCC><font color="#00ffff">I'm the founder of Alderon Games.</font>
<SYNC Start=172960><P Class=ENUSCC><font color="#00ffff">I've been making and modding<br>games for the last 15 years.</font>
<SYNC Start=176320><P Class=ENUSCC><font color="#00ffff">In 2016, I made my own game studio,<br>which is completely independent.</font>
<SYNC Start=179680><P Class=ENUSCC><font color="#00ffff">We also made our own<br>platform replacement to Steam.</font>
<SYNC Start=182240><P Class=ENUSCC><font color="#00ffff">And in 2019, we launched a dinosaur<br>survival game called <i>Path of Titans</i>.</font>
<SYNC Start=185761><P Class=ENUSCC><font color="#00ffff">So, I'm going to use<br>this game as an example</font>
<SYNC Start=187600><P Class=ENUSCC><font color="#00ffff">on how we're going to<br>do an end-of-life plan</font>
<SYNC Start=189366><P Class=ENUSCC><font color="#00ffff">and some issues we'll need to fix<br>when end-of-life-ing the game.</font>
<SYNC Start=192080><P Class=ENUSCC><font color="#00ffff">I'll talk more about<br>that towards the end.</font>
<SYNC Start=194160><P Class=ENUSCC><font color="#ffff00">Thank you, Matt.</font>
<SYNC Start=195120><P Class=ENUSCC><font color="#ffff00">So, let's get into this<br>PowerPoint presentation</font>
<SYNC Start=198000><P Class=ENUSCC><font color="#ffff00">where we'll talk about<br>the different ways</font>
<SYNC Start=200160><P Class=ENUSCC><font color="#ffff00">you can stop killing games<br>as a game developer.</font>
<SYNC Start=203920><P Class=ENUSCC><font color="#ffff00">This will start off talking<br>about the broad concepts,</font>
<SYNC Start=207680><P Class=ENUSCC><font color="#ffff00">then get more into<br>specifics as we move on.</font>
<SYNC Start=211200><P Class=ENUSCC><font color="#ffff00">First up, what are some possible<br>methods for end-of-life-ing your game?</font>
<SYNC Start=216320><P Class=ENUSCC><font color="#ffff00">Before we dive into<br>the technical details,</font>
<SYNC Start=218960><P Class=ENUSCC><font color="#ffff00">let's establish the<br>three primary approaches</font>
<SYNC Start=222080><P Class=ENUSCC><font color="#ffff00">for ending the life of<br>your game responsibly.</font>
<SYNC Start=225600><P Class=ENUSCC><font color="#ffff00">The method you choose will depend heavily<br>on your game's architecture,</font>
<SYNC Start=229680><P Class=ENUSCC><font color="#ffff00">technical constraints,<br>and business considerations.</font>
<SYNC Start=233120><P Class=ENUSCC><font color="#ffff00">So, first up, we have option one,</font>
<SYNC Start=236320><P Class=ENUSCC><font color="#ffff00">which is to release private server files<br>or support peer-to-peer sessions.</font>
<SYNC Start=241680><P Class=ENUSCC><font color="#ffff00">This is often considered to be the<br>gold standard for game preservation.</font>
<SYNC Start=246480><P Class=ENUSCC><font color="#ffff00">When you release<br>private server files,</font>
<SYNC Start=248960><P Class=ENUSCC><font color="#ffff00">you're essentially giving the<br>community the tools they need</font>
<SYNC Start=252320><P Class=ENUSCC><font color="#ffff00">to host their own<br>multiplayer servers.</font>
<SYNC Start=256240><P Class=ENUSCC><font color="#ffff00">The key here is that you can strip<br>out code that's no longer needed.</font>
<SYNC Start=261280><P Class=ENUSCC><font color="#ffff00">Things like payment processing,<br>analytics, and proprietary algorithms,</font>
<SYNC Start=266720><P Class=ENUSCC><font color="#ffff00">all while keeping the core<br>gameplay functionality intact.</font>
<SYNC Start=271120><P Class=ENUSCC><font color="#ffff00">Make sure your game includes<br>a direct IP connect option,</font>
<SYNC Start=275040><P Class=ENUSCC><font color="#ffff00">as this would become crucial</font>
<SYNC Start=276800><P Class=ENUSCC><font color="#ffff00">when centralized matchmaking<br>is no longer available.</font>
<SYNC Start=280320><P Class=ENUSCC><font color="#ffff00">All right, next up at option two<br>would be to release the source code.</font>
<SYNC Start=284720><P Class=ENUSCC><font color="#ffff00">Uh, this approach provides maximum<br>flexibility for the community,</font>
<SYNC Start=288800><P Class=ENUSCC><font color="#ffff00">but does require careful consideration<br>of what you're releasing.</font>
<SYNC Start=293120><P Class=ENUSCC><font color="#ffff00">You can release both game and server<br>source code under a limited license</font>
<SYNC Start=298080><P Class=ENUSCC><font color="#ffff00">where players can only use the code<br>to keep the game functional</font>
<SYNC Start=302480><P Class=ENUSCC><font color="#ffff00">and not for commercial use purposes.</font>
<SYNC Start=305520><P Class=ENUSCC><font color="#ffff00">This allows the community to fix bugs</font>
<SYNC Start=308240><P Class=ENUSCC><font color="#ffff00">and maintain missing<br>features after end of life.</font>
<SYNC Start=311840><P Class=ENUSCC><font color="#ffff00">However, other options<br>are generally preferred</font>
<SYNC Start=315760><P Class=ENUSCC><font color="#ffff00">because they keep the game functional</font>
<SYNC Start=318000><P Class=ENUSCC><font color="#ffff00">without requiring additional<br>work from players.</font>
<SYNC Start=321440><P Class=ENUSCC><font color="#ffff00">And for option three,</font>
<SYNC Start=323680><P Class=ENUSCC><font color="#ffff00">you can release feature-complete<br>games with save transfers.</font>
<SYNC Start=328480><P Class=ENUSCC><font color="#ffff00">This approach works particularly well</font>
<SYNC Start=330960><P Class=ENUSCC><font color="#ffff00">for games with significant<br>online components</font>
<SYNC Start=333680><P Class=ENUSCC><font color="#ffff00">that can be converted<br>to offline experiences.</font>
<SYNC Start=337680><P Class=ENUSCC><font color="#ffff00">For example,</font>
<SYNC Start=338560><P Class=ENUSCC><font color="#ffff00">you release a standalone version that's<br>free for owners of the original game.</font>
<SYNC Start=343920><P Class=ENUSCC><font color="#ffff00">And importantly,</font>
<SYNC Start=345280><P Class=ENUSCC><font color="#ffff00">you would allow save transfers from the<br>online version to the standalone version.</font>
<SYNC Start=350480><P Class=ENUSCC><font color="#ffff00">This would ensure that players<br>don't lose their progress</font>
<SYNC Start=353600><P Class=ENUSCC><font color="#ffff00">when the transition happens.</font>
<SYNC Start=355760><P Class=ENUSCC><font color="#ffff00">And so, let's take a look at a real-world<br>example of how option one worked.</font>
<SYNC Start=362800><P Class=ENUSCC><font color="#ffff00"><i>Spellbreak</i>, developed by Proletariat,<br>was a multiplayer battle royale game</font>
<SYNC Start=368080><P Class=ENUSCC><font color="#ffff00">available on PC, PS4,<br>Xbox One, and Nintendo Switch.</font>
<SYNC Start=373360><P Class=ENUSCC><font color="#ffff00">When they ended support<br>in January of 2023,</font>
<SYNC Start=377120><P Class=ENUSCC><font color="#ffff00">they took the responsible approach<br>of releasing a private server version</font>
<SYNC Start=380960><P Class=ENUSCC><font color="#ffff00">for PC (Windows) users<br>available for free.</font>
<SYNC Start=384800><P Class=ENUSCC><font color="#ffff00">This is exactly what we mean by<br>"preserving the core gameplay experience."</font>
<SYNC Start=390000><P Class=ENUSCC><font color="#ffff00">Even though the official<br>servers went dark,</font>
<SYNC Start=392640><P Class=ENUSCC><font color="#ffff00">players could continue to enjoy the game<br>that they had purchased,</font>
<SYNC Start=396560><P Class=ENUSCC><font color="#ffff00">the private server maintained<br>the essential multiplayer functionality</font>
<SYNC Start=401120><P Class=ENUSCC><font color="#ffff00">while removing the infrastructure<br>burden from the developers.</font>
<SYNC Start=405520><P Class=ENUSCC><font color="#ffff00">All right, so here's an<br>example of option two:</font>
<SYNC Start=408560><P Class=ENUSCC><font color="#ffff00"><i>Duelyst</i>, which was published<br>by Warner Bros. Games,</font>
<SYNC Start=411360><P Class=ENUSCC><font color="#ffff00">and available on PC,<br>iOS, and Android,</font>
<SYNC Start=415280><P Class=ENUSCC><font color="#ffff00">which ended support on<br>February 27th of 2020.</font>
<SYNC Start=419360><P Class=ENUSCC><font color="#ffff00">The developers made<br>the remarkable decision</font>
<SYNC Start=422000><P Class=ENUSCC><font color="#ffff00">to release the source code to<br>GitHub under a CC0 license,</font>
<SYNC Start=426480><P Class=ENUSCC><font color="#ffff00">which is essentially public domain.</font>
<SYNC Start=428640><P Class=ENUSCC><font color="#ffff00">This approach gave the community<br>complete freedom to maintain, modify,</font>
<SYNC Start=433120><P Class=ENUSCC><font color="#ffff00">and improve the game.</font>
<SYNC Start=434640><P Class=ENUSCC><font color="#ffff00">While it requires more technical<br>knowledge from the community,</font>
<SYNC Start=438000><P Class=ENUSCC><font color="#ffff00">it does ensure the longest<br>possible lifespan for the game</font>
<SYNC Start=441920><P Class=ENUSCC><font color="#ffff00">since dedicated fans can<br>fix issues, add features,</font>
<SYNC Start=445600><P Class=ENUSCC><font color="#ffff00">and port the game to<br>new platforms as needed.</font>
<SYNC Start=449040><P Class=ENUSCC><font color="#ffff00">And here's another strong<br>example of open-sourcing.</font>
<SYNC Start=452560><P Class=ENUSCC><font color="#ffff00">It's called <i>Caller's Bane</i>,<br>formerly known as <i>Scrolls</i>,</font>
<SYNC Start=455920><P Class=ENUSCC><font color="#ffff00">developed by Mojang.</font>
<SYNC Start=457440><P Class=ENUSCC><font color="#ffff00">Available on PC, Mac OS, and Android,<br>it ended support on February 13th, 2018,</font>
<SYNC Start=463920><P Class=ENUSCC><font color="#ffff00">but was officially resurrected as<br><i>Caller's Bane</i> and made open-source.</font>
<SYNC Start=468640><P Class=ENUSCC><font color="#ffff00">What makes this case<br>particularly interesting</font>
<SYNC Start=471520><P Class=ENUSCC><font color="#ffff00">is that they released both the game client<br>and server files for download.</font>
<SYNC Start=476400><P Class=ENUSCC><font color="#ffff00">The free client can join community servers<br>and anybody can host a server.</font>
<SYNC Start=481440><P Class=ENUSCC><font color="#ffff00">This creates a distributed ecosystem</font>
<SYNC Start=484240><P Class=ENUSCC><font color="#ffff00">where the game's survival<br>doesn't depend on any single entity.</font>
<SYNC Start=488720><P Class=ENUSCC><font color="#ffff00">If one server goes down, for example,<br>others can continue serving the community.</font>
<SYNC Start=493600><P Class=ENUSCC><font color="#ffff00">Pretty cool, right?</font>
<SYNC Start=494880><P Class=ENUSCC><font color="#ffff00">Nintendo's <i>Animal<br>Crossing: Pocket Camp</i></font>
<SYNC Start=497440><P Class=ENUSCC><font color="#ffff00">provides an excellent<br>example of option three.</font>
<SYNC Start=500800><P Class=ENUSCC><font color="#ffff00">This mobile game ended support<br>on November 28th, 2024,</font>
<SYNC Start=504800><P Class=ENUSCC><font color="#ffff00">but Nintendo released <i>Animal Crossing:<br>Pocket Camp Complete</i> as a replacement.</font>
<SYNC Start=510800><P Class=ENUSCC><font color="#ffff00">This is a masterclass in<br>player-friendly transitions.</font>
<SYNC Start=514320><P Class=ENUSCC><font color="#ffff00">They replace the free-to-play<br>microtransaction-heavy online version</font>
<SYNC Start=518720><P Class=ENUSCC><font color="#ffff00">with a paid offline version that<br>removes microtransactions entirely.</font>
<SYNC Start=523200><P Class=ENUSCC><font color="#ffff00">For a flat $20 purchase,</font>
<SYNC Start=524960><P Class=ENUSCC><font color="#ffff00">players get access to all content<br>that was previously behind the paywalls.</font>
<SYNC Start=530400><P Class=ENUSCC><font color="#ffff00">Most importantly, they allowed<br>users to transfer their save data,</font>
<SYNC Start=533920><P Class=ENUSCC><font color="#ffff00">ensuring that years<br>of progress weren't lost.</font>
<SYNC Start=537200><P Class=ENUSCC><font color="#ffff00">This approach respects both<br>players' time investment</font>
<SYNC Start=541600><P Class=ENUSCC><font color="#ffff00">and their financial<br>investment in the game.</font>
<SYNC Start=544480><P Class=ENUSCC><font color="#ffff00">All right, now that we've seen<br>some successful examples,</font>
<SYNC Start=547760><P Class=ENUSCC><font color="#ffff00">let's step back and<br>look at the broader context</font>
<SYNC Start=550880><P Class=ENUSCC><font color="#ffff00">of what we're trying to achieve here.</font>
<SYNC Start=553440><P Class=ENUSCC><font color="#ffff00">Game preservation isn't just about<br>keeping old games running.</font>
<SYNC Start=557520><P Class=ENUSCC><font color="#ffff00">It's about respecting the culture</font>
<SYNC Start=559760><P Class=ENUSCC><font color="#ffff00">and artistic value of<br>interactive entertainment,</font>
<SYNC Start=563040><P Class=ENUSCC><font color="#ffff00">honoring player's investments<br>of time and money,</font>
<SYNC Start=566080><P Class=ENUSCC><font color="#ffff00">and ensuring that future generations</font>
<SYNC Start=568240><P Class=ENUSCC><font color="#ffff00">can experience and learn<br>from the games we create today.</font>
<SYNC Start=571840><P Class=ENUSCC><font color="#ffff00">Creating an effective<br>end-of-life plan</font>
<SYNC Start=573920><P Class=ENUSCC><font color="#ffff00">requires thorough documentation<br>and clear communication.</font>
<SYNC Start=577440><P Class=ENUSCC><font color="#ffff00">Let me walk you through<br>the essential components here.</font>
<SYNC Start=580160><P Class=ENUSCC><font color="#ffff00">So, first, communicate to players<br>that the game has an end-of-life plan.</font>
<SYNC Start=584320><P Class=ENUSCC><font color="#ffff00">This should be done early and often.</font>
<SYNC Start=586800><P Class=ENUSCC><font color="#ffff00">Ideally, players should know<br>from the time of purchase</font>
<SYNC Start=589520><P Class=ENUSCC><font color="#ffff00">that you've thought<br>about preservation.</font>
<SYNC Start=591840><P Class=ENUSCC><font color="#ffff00">Contact players and let them know<br>how long the end-of-life patch</font>
<SYNC Start=595280><P Class=ENUSCC><font color="#ffff00">will be available for download.</font>
<SYNC Start=597120><P Class=ENUSCC><font color="#ffff00">Give them a realistic timeline.</font>
<SYNC Start=599040><P Class=ENUSCC><font color="#ffff00">For example, will it be<br>available for 6 months, 2 years?</font>
<SYNC Start=602160><P Class=ENUSCC><font color="#ffff00">I mean, players need time to prepare.</font>
<SYNC Start=604880><P Class=ENUSCC><font color="#ffff00">And then list out supported features<br>that would continue working,</font>
<SYNC Start=608400><P Class=ENUSCC><font color="#ffff00">such as singleplayer modes,<br>direct connect options, and LAN play.</font>
<SYNC Start=613200><P Class=ENUSCC><font color="#ffff00">Be very specific about<br>what will still function.</font>
<SYNC Start=617280><P Class=ENUSCC><font color="#ffff00">List out features<br>that would be removed,</font>
<SYNC Start=619840><P Class=ENUSCC><font color="#ffff00">such as matchmaking,<br>leaderboards, or cloud services.</font>
<SYNC Start=623840><P Class=ENUSCC><font color="#ffff00">Transparency here<br>prevents player frustration.</font>
<SYNC Start=627760><P Class=ENUSCC><font color="#ffff00">Include documentation on installing,<br>running, or playing the game,</font>
<SYNC Start=631920><P Class=ENUSCC><font color="#ffff00">especially if setup becomes more<br>complex once official support ends.</font>
<SYNC Start=637360><P Class=ENUSCC><font color="#ffff00">Consider that players may be<br>setting this up years later</font>
<SYNC Start=640880><P Class=ENUSCC><font color="#ffff00">on completely different hardware.</font>
<SYNC Start=643040><P Class=ENUSCC><font color="#ffff00">Do your best to document any<br>known bugs or workarounds</font>
<SYNC Start=646320><P Class=ENUSCC><font color="#ffff00">that the community<br>should be aware of.</font>
<SYNC Start=648560><P Class=ENUSCC><font color="#ffff00">This saves everyone<br>time and frustration.</font>
<SYNC Start=652000><P Class=ENUSCC><font color="#ffff00">And if you own the IP,</font>
<SYNC Start=653600><P Class=ENUSCC><font color="#ffff00">provide a clear written statement<br>allowing for non-commercial use</font>
<SYNC Start=657520><P Class=ENUSCC><font color="#ffff00">such as community servers or mods.</font>
<SYNC Start=660320><P Class=ENUSCC><font color="#ffff00">This legal clarity is crucial for<br>community preservation efforts.</font>
<SYNC Start=665040><P Class=ENUSCC><font color="#ffff00">If a game can be modded,</font>
<SYNC Start=666800><P Class=ENUSCC><font color="#ffff00">consider releasing tools or documentation<br>for modders to extend its life.</font>
<SYNC Start=671280><P Class=ENUSCC><font color="#ffff00">The modding community is often<br>your best ally in long-term preservation.</font>
<SYNC Start=676160><P Class=ENUSCC><font color="#ffff00">And finally, communicate what<br>hardware or OS might be needed</font>
<SYNC Start=680720><P Class=ENUSCC><font color="#ffff00">for the end-of-life version.</font>
<SYNC Start=682720><P Class=ENUSCC><font color="#ffff00">If your server software runs on<br>a different platform than the client,</font>
<SYNC Start=686720><P Class=ENUSCC><font color="#ffff00">make this as clear as possible.</font>
<SYNC Start=689200><P Class=ENUSCC><font color="#ffff00">All right, so, what suggestions would<br>we be able to give for existing games</font>
<SYNC Start=694400><P Class=ENUSCC><font color="#ffff00">to move over to support their<br>game at end of life? Hm.</font>
<SYNC Start=698480><P Class=ENUSCC><font color="#ffff00">Now, please keep in mind<br>these are just suggestions</font>
<SYNC Start=701520><P Class=ENUSCC><font color="#ffff00">and won't be possible for all existing<br>games due to existing constraints.</font>
<SYNC Start=706880><P Class=ENUSCC><font color="#ffff00">Stop Killing Games is mostly<br>focused on future game designs.</font>
<SYNC Start=711680><P Class=ENUSCC><font color="#ffff00">Well, for games that are already released<br>but haven't planned for end of life,</font>
<SYNC Start=716960><P Class=ENUSCC><font color="#ffff00">here are the most<br>effective strategies.</font>
<SYNC Start=720000><P Class=ENUSCC><font color="#ffff00">Release server software or tools that<br>allow players to host their own servers.</font>
<SYNC Start=725520><P Class=ENUSCC><font color="#ffff00">Again, this is the gold standard<br>for game preservation.</font>
<SYNC Start=728960><P Class=ENUSCC><font color="#ffff00">You can provide server binaries</font>
<SYNC Start=730720><P Class=ENUSCC><font color="#ffff00">that allow dedicated community<br>members to host their own servers.</font>
<SYNC Start=734400><P Class=ENUSCC><font color="#ffff00">And this requires careful preparation</font>
<SYNC Start=736880><P Class=ENUSCC><font color="#ffff00">to remove all the<br>proprietary code and secrets</font>
<SYNC Start=739760><P Class=ENUSCC><font color="#ffff00">while maintaining core functionality.</font>
<SYNC Start=742400><P Class=ENUSCC><font color="#ffff00">Focus on creating packages<br>that work "out of the box"</font>
<SYNC Start=746080><P Class=ENUSCC><font color="#ffff00">with minimal technical<br>knowledge required.</font>
<SYNC Start=748720><P Class=ENUSCC><font color="#ffff00">Open-source key components</font>
<SYNC Start=750240><P Class=ENUSCC><font color="#ffff00">so the community can maintain<br>the game independently,</font>
<SYNC Start=753280><P Class=ENUSCC><font color="#ffff00">and consider open-sourcing non-proprietary<br>game logic, networking, code, and tools.</font>
<SYNC Start=759520><P Class=ENUSCC><font color="#ffff00">This allows the community to maintain<br>and improve the game independently.</font>
<SYNC Start=764320><P Class=ENUSCC><font color="#ffff00">So start with less sensitive components<br>like UI systems, utility libraries,</font>
<SYNC Start=770000><P Class=ENUSCC><font color="#ffff00">or game balance configurations.</font>
<SYNC Start=772800><P Class=ENUSCC><font color="#ffff00">Try to avoid releasing anything<br>containing trade secrets,</font>
<SYNC Start=776880><P Class=ENUSCC><font color="#ffff00">licensed third-party code,<br>or proprietary algorithms.</font>
<SYNC Start=780400><P Class=ENUSCC><font color="#ffff00">Do your best to provide<br>documentation and assets</font>
<SYNC Start=783520><P Class=ENUSCC><font color="#ffff00">to help fan projects<br>continue the experience.</font>
<SYNC Start=786560><P Class=ENUSCC><font color="#ffff00">You can also create<br>comprehensive guides</font>
<SYNC Start=788560><P Class=ENUSCC><font color="#ffff00">for server setup, configuration,<br>and troubleshooting.</font>
<SYNC Start=791680><P Class=ENUSCC><font color="#ffff00">Include game assets that players might<br>need for custom content creation—</font>
<SYNC Start=795840><P Class=ENUSCC><font color="#ffff00">textures, models,<br>sound effects, and level editors.</font>
<SYNC Start=798880><P Class=ENUSCC><font color="#ffff00">This documentation becomes invaluable<br>when your official support ends,</font>
<SYNC Start=802880><P Class=ENUSCC><font color="#ffff00">and helps ensure knowledge transfer<br>to community maintainers.</font>
<SYNC Start=806720><P Class=ENUSCC><font color="#ffff00">Create official mod support<br>or expansion tools before shutdown.</font>
<SYNC Start=810960><P Class=ENUSCC><font color="#ffff00">Implement robust modding tools and APIs<br>before shutdown announcement.</font>
<SYNC Start=815440><P Class=ENUSCC><font color="#ffff00">This gives the community tools<br>to extend the game's lifespan</font>
<SYNC Start=818560><P Class=ENUSCC><font color="#ffff00">through custom content<br>and modifications.</font>
<SYNC Start=821440><P Class=ENUSCC><font color="#ffff00">Simple scripting APIs, level editors,</font>
<SYNC Start=823760><P Class=ENUSCC><font color="#ffff00">and asset replacement tools</font>
<SYNC Start=825440><P Class=ENUSCC><font color="#ffff00">can dramatically extend<br>a game's community lifespan.</font>
<SYNC Start=829360><P Class=ENUSCC><font color="#ffff00">Release a singleplayer or offline version<br>that can preserve core gameplay.</font>
<SYNC Start=834320><P Class=ENUSCC><font color="#ffff00">Create offline versions that<br>preserve core gameplay mechanics</font>
<SYNC Start=837760><P Class=ENUSCC><font color="#ffff00">without requiring<br>server connectivity.</font>
<SYNC Start=840000><P Class=ENUSCC><font color="#ffff00">You can strip out<br>multiplayer dependencies</font>
<SYNC Start=842400><P Class=ENUSCC><font color="#ffff00">and convert online features<br>to local alternatives where possible.</font>
<SYNC Start=846880><P Class=ENUSCC><font color="#ffff00">Note that this only really applies</font>
<SYNC Start=848720><P Class=ENUSCC><font color="#ffff00">to games that were already<br>singleplayer to start with.</font>
<SYNC Start=852240><P Class=ENUSCC><font color="#ffff00">If your game has multiplayer support,</font>
<SYNC Start=854880><P Class=ENUSCC><font color="#ffff00">you should do your best to keep<br>this functionality working at end of life.</font>
<SYNC Start=858960><P Class=ENUSCC><font color="#ffff00">We're not asking to convert multiplayer<br>into a singleplayer experience.</font>
<SYNC Start=863840><P Class=ENUSCC><font color="#ffff00">The key to successful game<br>preservation is planning ahead.</font>
<SYNC Start=867440><P Class=ENUSCC><font color="#ffff00">When you design preservation<br>into your game from the beginning,</font>
<SYNC Start=870480><P Class=ENUSCC><font color="#ffff00">rather than trying<br>to retrofit it later,</font>
<SYNC Start=872560><P Class=ENUSCC><font color="#ffff00">you save significant time,<br>money, and technical complexity.</font>
<SYNC Start=876640><P Class=ENUSCC><font color="#ffff00">So, let's discuss how to build<br>these systems from the ground up.</font>
<SYNC Start=880720><P Class=ENUSCC><font color="#ffff00">All right, so, how do developers<br>reduce costs for an end-of-life plan?</font>
<SYNC Start=886334><P Class=ENUSCC><font color="#ffff00">That's a…<br>That's a great question.</font>
<SYNC Start=888480><P Class=ENUSCC><font color="#ffff00">So, cost reduction starts with<br>smart decisions during development.</font>
<SYNC Start=892960><P Class=ENUSCC><font color="#ffff00">Option one would be to avoid<br>bad licensing agreements.</font>
<SYNC Start=897280><P Class=ENUSCC><font color="#ffff00">Prefer agreements<br>which don't have restrictions</font>
<SYNC Start=899760><P Class=ENUSCC><font color="#ffff00">on giving binary versions<br>of code out to players</font>
<SYNC Start=902480><P Class=ENUSCC><font color="#ffff00">and don't have time limits.</font>
<SYNC Start=904720><P Class=ENUSCC><font color="#ffff00">When you're negotiating<br>middleware licenses,</font>
<SYNC Start=907280><P Class=ENUSCC><font color="#ffff00">think about the end-of-life scenario.</font>
<SYNC Start=909760><P Class=ENUSCC><font color="#ffff00">Some licenses explicitly<br>prohibit redistribution</font>
<SYNC Start=913440><P Class=ENUSCC><font color="#ffff00">or have clauses that make<br>preservation expensive or impossible.</font>
<SYNC Start=917920><P Class=ENUSCC><font color="#ffff00">Option two would be to use<br>open standards and open-source solutions</font>
<SYNC Start=922000><P Class=ENUSCC><font color="#ffff00">that don't have these<br>types of restrictions.</font>
<SYNC Start=924000><P Class=ENUSCC><font color="#ffff00">Instead of using Amazon<br>Aurora Serverless database,</font>
<SYNC Start=927520><P Class=ENUSCC><font color="#ffff00">you may prefer more<br>open options like MySQL</font>
<SYNC Start=931280><P Class=ENUSCC><font color="#ffff00">or create a transition plan where MySQL<br>can be used for community servers</font>
<SYNC Start=936640><P Class=ENUSCC><font color="#ffff00">while Aurora is used at scale<br>during active development.</font>
<SYNC Start=941280><P Class=ENUSCC><font color="#ffff00">This gives you flexibility to<br>scale during active development</font>
<SYNC Start=944880><P Class=ENUSCC><font color="#ffff00">while ensuring community servers<br>can run on accessible technology.</font>
<SYNC Start=949520><P Class=ENUSCC><font color="#ffff00">Option three would be to code the game<br>assuming services can fail or be removed.</font>
<SYNC Start=955680><P Class=ENUSCC><font color="#ffff00">Make sure the game can handle<br>service failures gracefully</font>
<SYNC Start=958800><P Class=ENUSCC><font color="#ffff00">instead of crashing or showing<br>cryptic error messages.</font>
<SYNC Start=962240><P Class=ENUSCC><font color="#ffff00">This defensive programming approach<br>not only helps with preservation</font>
<SYNC Start=966560><P Class=ENUSCC><font color="#ffff00">but also makes your game more<br>robust during active development.</font>
<SYNC Start=970880><P Class=ENUSCC><font color="#ffff00">All right, so what is the<br>minimum viable build or setup</font>
<SYNC Start=974160><P Class=ENUSCC><font color="#ffff00">that should be preserved?</font>
<SYNC Start=975840><P Class=ENUSCC><font color="#ffff00">The minimum viable build is going<br>to depend on your specific game,</font>
<SYNC Start=980000><P Class=ENUSCC><font color="#ffff00">but there are some general<br>principles to follow.</font>
<SYNC Start=983520><P Class=ENUSCC><font color="#ffff00">All core features and functionality<br>should still be present</font>
<SYNC Start=987120><P Class=ENUSCC><font color="#ffff00">if these features were being used.</font>
<SYNC Start=989440><P Class=ENUSCC><font color="#ffff00">This includes singleplayer modes,<br>multiplayer functionality,</font>
<SYNC Start=992880><P Class=ENUSCC><font color="#ffff00">and local play or co-op features.</font>
<SYNC Start=995520><P Class=ENUSCC><font color="#ffff00">The key word here is "core".</font>
<SYNC Start=998160><P Class=ENUSCC><font color="#ffff00">If a feature was central<br>to the game experience,</font>
<SYNC Start=1000960><P Class=ENUSCC><font color="#ffff00">it needs to work in<br>the preserved version.</font>
<SYNC Start=1003920><P Class=ENUSCC><font color="#ffff00">Some extra features and functionality<br>can be removed depending on the game,</font>
<SYNC Start=1008960><P Class=ENUSCC><font color="#ffff00">particularly those not needed<br>for that core gameplay.</font>
<SYNC Start=1012960><P Class=ENUSCC><font color="#ffff00">Examples include leaderboards,<br>online ranking systems,</font>
<SYNC Start=1016480><P Class=ENUSCC><font color="#ffff00">and other microservices not needed<br>for the core gameplay loop,</font>
<SYNC Start=1020160><P Class=ENUSCC><font color="#ffff00">like payments, account moderation,<br>or anti-cheat systems.</font>
<SYNC Start=1023600><P Class=ENUSCC><font color="#ffff00">These are nice-to-have features<br>that enhance the experience,</font>
<SYNC Start=1026880><P Class=ENUSCC><font color="#ffff00">but aren't essential<br>for the game to function.</font>
<SYNC Start=1030000><P Class=ENUSCC><font color="#ffff00">The goal is to preserve the essence<br>of what made your game enjoyable</font>
<SYNC Start=1034080><P Class=ENUSCC><font color="#ffff00">while removing the<br>infrastructure burden</font>
<SYNC Start=1036480><P Class=ENUSCC><font color="#ffff00">that makes long-term<br>support unsustainable.</font>
<SYNC Start=1039080><P Class=ENUSCC><font color="#ffff00">All right, so, what does it take</font>
<SYNC Start=1041840><P Class=ENUSCC><font color="#ffff00">to replicate your server environment<br>locally for preservation?</font>
<SYNC Start=1046480><P Class=ENUSCC><font color="#ffff00">That's a great question.</font>
<SYNC Start=1048080><P Class=ENUSCC><font color="#ffff00">Replicating your server environment<br>locally involves three main steps.</font>
<SYNC Start=1052647><P Class=ENUSCC><font color="#ffff00">Step one would be<br>environment standardization.</font>
<SYNC Start=1056320><P Class=ENUSCC><font color="#ffff00">This includes containerization strategy,<br>dependency documentation,</font>
<SYNC Start=1060160><P Class=ENUSCC><font color="#ffff00">configurement management,<br>and resource requirements.</font>
<SYNC Start=1063120><P Class=ENUSCC><font color="#ffff00">You need to document exactly<br>what your server needs to run,</font>
<SYNC Start=1066320><P Class=ENUSCC><font color="#ffff00">including operating system requirements,<br>memory usage, CPU requirements,</font>
<SYNC Start=1070480><P Class=ENUSCC><font color="#ffff00">and any special dependencies.</font>
<SYNC Start=1072880><P Class=ENUSCC><font color="#ffff00">Step two is technical<br>infrastructure replication.</font>
<SYNC Start=1076720><P Class=ENUSCC><font color="#ffff00">This covers database setup<br>and migration, service coordination,</font>
<SYNC Start=1081280><P Class=ENUSCC><font color="#ffff00">network configuration,<br>and monitoring and logging.</font>
<SYNC Start=1084400><P Class=ENUSCC><font color="#ffff00">The goal is to take your complex<br>distributed production environment</font>
<SYNC Start=1089280><P Class=ENUSCC><font color="#ffff00">and create a simplified version<br>that can run on community hardware.</font>
<SYNC Start=1094720><P Class=ENUSCC><font color="#ffff00">Step three would be<br>community support tools.</font>
<SYNC Start=1097600><P Class=ENUSCC><font color="#ffff00">This includes automated<br>setup scripts,</font>
<SYNC Start=1100080><P Class=ENUSCC><font color="#ffff00">development and testing tools,</font>
<SYNC Start=1102320><P Class=ENUSCC><font color="#ffff00">backup and recovery procedures,<br>and performance optimization guidance.</font>
<SYNC Start=1106480><P Class=ENUSCC><font color="#ffff00">Now remember, community members may not<br>have your level of technical expertise,</font>
<SYNC Start=1111440><P Class=ENUSCC><font color="#ffff00">so the easier you make this process,</font>
<SYNC Start=1113520><P Class=ENUSCC><font color="#ffff00">the more likely your game<br>is to survive long term.</font>
<SYNC Start=1117360><P Class=ENUSCC><font color="#ffff00">All right, so,</font>
<SYNC Start=1118800><P Class=ENUSCC><font color="#ffff00">next up we're going to talk about<br>virtual machines and Docker.</font>
<SYNC Start=1122080><P Class=ENUSCC><font color="#ffff00">So what are virtual<br>machines and Docker,</font>
<SYNC Start=1124400><P Class=ENUSCC><font color="#ffff00">and how do they help developers<br>end their games easier?</font>
<SYNC Start=1128880><P Class=ENUSCC><font color="#ffff00">Virtualization and containerization<br>technologies significantly simplify</font>
<SYNC Start=1133680><P Class=ENUSCC><font color="#ffff00">game server distribution and<br>management for community hosting.</font>
<SYNC Start=1137840><P Class=ENUSCC><font color="#ffff00">Virtual machines provide<br>complete isolated environments</font>
<SYNC Start=1141360><P Class=ENUSCC><font color="#ffff00">that include everything<br>needed to run game servers.</font>
<SYNC Start=1145040><P Class=ENUSCC><font color="#ffff00">You can package the operating system,<br>game server software, database,</font>
<SYNC Start=1149680><P Class=ENUSCC><font color="#ffff00">and configurations into a single<br>VM image that works identically</font>
<SYNC Start=1154880><P Class=ENUSCC><font color="#ffff00">regardless of the host hardware.</font>
<SYNC Start=1157360><P Class=ENUSCC><font color="#ffff00">This solves the "it works<br>on my machine" problem</font>
<SYNC Start=1160880><P Class=ENUSCC><font color="#ffff00">by giving the community an exact replica<br>of your development environment.</font>
<SYNC Start=1166000><P Class=ENUSCC><font color="#ffff00">Docker containers<br>solve the same problem,</font>
<SYNC Start=1168160><P Class=ENUSCC><font color="#ffff00">but with less overhead.</font>
<SYNC Start=1170320><P Class=ENUSCC><font color="#ffff00">Docker containers include<br>all necessary libraries,</font>
<SYNC Start=1173360><P Class=ENUSCC><font color="#ffff00">configurations, and dependencies.</font>
<SYNC Start=1175360><P Class=ENUSCC><font color="#ffff00">A containerized game<br>server will run identically</font>
<SYNC Start=1178240><P Class=ENUSCC><font color="#ffff00">on any system that supports Docker,</font>
<SYNC Start=1180560><P Class=ENUSCC><font color="#ffff00">eliminating compatibility issues.</font>
<SYNC Start=1182800><P Class=ENUSCC><font color="#ffff00">Docker is generally more efficient<br>than full virtual machines</font>
<SYNC Start=1185920><P Class=ENUSCC><font color="#ffff00">and easy for communities to manage.</font>
<SYNC Start=1189120><P Class=ENUSCC><font color="#ffff00">All right, so,</font>
<SYNC Start=1190160><P Class=ENUSCC><font color="#ffff00">are there reusable patterns<br>like modular designs,</font>
<SYNC Start=1193840><P Class=ENUSCC><font color="#ffff00">toggleable off or offline<br>fallbacks that could be integrated</font>
<SYNC Start=1198240><P Class=ENUSCC><font color="#ffff00">now or in the future?</font>
<SYNC Start=1200080><P Class=ENUSCC><font color="#ffff00">Well, yes, I'm glad you asked.</font>
<SYNC Start=1201840><P Class=ENUSCC><font color="#ffff00">There are several<br>architectural patterns</font>
<SYNC Start=1204640><P Class=ENUSCC><font color="#ffff00">that make end-of-life<br>transitions much smoother.</font>
<SYNC Start=1208387><P Class=ENUSCC><font color="#ffff00">For example, server abstraction<br>pattern would create interface layers</font>
<SYNC Start=1212160><P Class=ENUSCC><font color="#ffff00">for swapping cloud services<br>with local implementations.</font>
<SYNC Start=1215440><P Class=ENUSCC><font color="#ffff00">This would allow you to use sophisticated<br>cloud services during active development,</font>
<SYNC Start=1220240><P Class=ENUSCC><font color="#ffff00">but switch to simpler local<br>alternatives for preservation.</font>
<SYNC Start=1224000><P Class=ENUSCC><font color="#ffff00">You could use feature<br>toggle architecture</font>
<SYNC Start=1226240><P Class=ENUSCC><font color="#ffff00">to implement a comprehensive flagging<br>system for all cloud dependencies.</font>
<SYNC Start=1230880><P Class=ENUSCC><font color="#ffff00">This would let you selectively<br>disable features that can't be preserved</font>
<SYNC Start=1234640><P Class=ENUSCC><font color="#ffff00">while keeping core<br>functionality intact.</font>
<SYNC Start=1237520><P Class=ENUSCC><font color="#ffff00">Another option available to you<br>would be dependency injection</font>
<SYNC Start=1240320><P Class=ENUSCC><font color="#ffff00">using automatic service swapping<br>based on environment.</font>
<SYNC Start=1243440><P Class=ENUSCC><font color="#ffff00">So your game can automatically detect</font>
<SYNC Start=1245280><P Class=ENUSCC><font color="#ffff00">whether it's running in<br>production or preservation mode</font>
<SYNC Start=1248000><P Class=ENUSCC><font color="#ffff00">and then adjust accordingly.</font>
<SYNC Start=1250000><P Class=ENUSCC><font color="#ffff00">You can use plugin-based architecture</font>
<SYNC Start=1252640><P Class=ENUSCC><font color="#ffff00">and design your game<br>with modular components</font>
<SYNC Start=1255520><P Class=ENUSCC><font color="#ffff00">where complex features<br>can be completely removed</font>
<SYNC Start=1258640><P Class=ENUSCC><font color="#ffff00">without breaking core functionality.</font>
<SYNC Start=1260960><P Class=ENUSCC><font color="#ffff00">There's also offline-first data flow</font>
<SYNC Start=1263840><P Class=ENUSCC><font color="#ffff00">to always save locally first<br>and sync to the cloud as an enhancement.</font>
<SYNC Start=1268400><P Class=ENUSCC><font color="#ffff00">This ensures the game continues to work,<br>even when cloud services are unavailable.</font>
<SYNC Start=1273840><P Class=ENUSCC><font color="#ffff00">You could use<br>progressive enhancement,</font>
<SYNC Start=1275840><P Class=ENUSCC><font color="#ffff00">which is a design<br>feature to work offline,</font>
<SYNC Start=1278560><P Class=ENUSCC><font color="#ffff00">but enhance when online.</font>
<SYNC Start=1280720><P Class=ENUSCC><font color="#ffff00">Think of online features as bonuses<br>rather than requirements.</font>
<SYNC Start=1284480><P Class=ENUSCC><font color="#ffff00">Queues online actions<br>for when connectivity returns.</font>
<SYNC Start=1287440><P Class=ENUSCC><font color="#ffff00">This allows the game</font>
<SYNC Start=1288720><P Class=ENUSCC><font color="#ffff00">to continue functioning<br>during network outages</font>
<SYNC Start=1291280><P Class=ENUSCC><font color="#ffff00">and makes the transition to<br>offline mode pretty seamless.</font>
<SYNC Start=1295360><P Class=ENUSCC><font color="#ffff00">So what should we do<br>when the game fails?</font>
<SYNC Start=1297040><P Class=ENUSCC><font color="#ffff00">Should it fail gracefully?</font>
<SYNC Start=1298880><P Class=ENUSCC><font color="#ffff00">I mean, absolutely, yes.</font>
<SYNC Start=1300400><P Class=ENUSCC><font color="#ffff00">Your game should never crash<br>and show stuck loading screens</font>
<SYNC Start=1303600><P Class=ENUSCC><font color="#ffff00">or display cryptic error messages<br>when servers go down.</font>
<SYNC Start=1307360><P Class=ENUSCC><font color="#ffff00">This is just fundamental<br>to good user experience</font>
<SYNC Start=1310240><P Class=ENUSCC><font color="#ffff00">and essential for<br>game preservation as well.</font>
<SYNC Start=1313200><P Class=ENUSCC><font color="#ffff00">The game needs its end-of-life build<br>tested to ensure graceful error handling.</font>
<SYNC Start=1318160><P Class=ENUSCC><font color="#ffff00">So, this means implementing<br>proper time-out mechanisms,</font>
<SYNC Start=1320880><P Class=ENUSCC><font color="#ffff00">clear error messages<br>that explain what's happening,</font>
<SYNC Start=1323840><P Class=ENUSCC><font color="#ffff00">and fallback modes that let<br>players continue enjoying the game</font>
<SYNC Start=1327440><P Class=ENUSCC><font color="#ffff00">even when online services<br>aren't available.</font>
<SYNC Start=1330400><P Class=ENUSCC><font color="#ffff00">Think of server unavailability<br>not as a failure state,</font>
<SYNC Start=1334400><P Class=ENUSCC><font color="#ffff00">but as an expected<br>operating condition</font>
<SYNC Start=1336720><P Class=ENUSCC><font color="#ffff00">that your game should<br>handle professionally.</font>
<SYNC Start=1339520><P Class=ENUSCC><font color="#ffff00">All right, so let's look<br>at some of the best practices</font>
<SYNC Start=1342320><P Class=ENUSCC><font color="#ffff00">for removing credentials, API keys,<br>telemetry code, etc., etc.,</font>
<SYNC Start=1347280><P Class=ENUSCC><font color="#ffff00">from your end-of-life builds.</font>
<SYNC Start=1349680><P Class=ENUSCC><font color="#ffff00">Security is crucial when<br>releasing community builds.</font>
<SYNC Start=1353840><P Class=ENUSCC><font color="#ffff00">And here are three approaches.</font>
<SYNC Start=1356240><P Class=ENUSCC><font color="#ffff00">Option one would be<br>automated detection and removal.</font>
<SYNC Start=1359120><P Class=ENUSCC><font color="#ffff00">You can use tools like GitGuardian,<br>TruffleHog, or SecretScanner</font>
<SYNC Start=1362800><P Class=ENUSCC><font color="#ffff00">to identify credentials<br>in your codebase.</font>
<SYNC Start=1365680><P Class=ENUSCC><font color="#ffff00">Add build processes</font>
<SYNC Start=1367040><P Class=ENUSCC><font color="#ffff00">that automatically remove or<br>replace secrets during compilation.</font>
<SYNC Start=1373200><P Class=ENUSCC><font color="#ffff00">Create build processes</font>
<SYNC Start=1375040><P Class=ENUSCC><font color="#ffff00">that automatically generate configuration<br>templates with placeholder values</font>
<SYNC Start=1379360><P Class=ENUSCC><font color="#ffff00">instead of real credentials.</font>
<SYNC Start=1380960><P Class=ENUSCC><font color="#ffff00">But be aware that some libraries include<br>default API keys or demo credentials</font>
<SYNC Start=1386560><P Class=ENUSCC><font color="#ffff00">that should be removed and replaced.</font>
<SYNC Start=1389600><P Class=ENUSCC><font color="#ffff00">Option two would be manual review.</font>
<SYNC Start=1391440><P Class=ENUSCC><font color="#ffff00">Implement code review processes<br>focused on credential identification.</font>
<SYNC Start=1395760><P Class=ENUSCC><font color="#ffff00">Tools like strings or<br>hexdump can identify text</font>
<SYNC Start=1398720><P Class=ENUSCC><font color="#ffff00">that shouldn't be present<br>in community builds.</font>
<SYNC Start=1401600><P Class=ENUSCC><font color="#ffff00">Test community builds<br>in isolated environments</font>
<SYNC Start=1404240><P Class=ENUSCC><font color="#ffff00">to verify they don't use<br>production credentials.</font>
<SYNC Start=1407200><P Class=ENUSCC><font color="#ffff00">Review all documentation and comments<br>for references to sensitive information</font>
<SYNC Start=1411920><P Class=ENUSCC><font color="#ffff00">that should ultimately be removed.</font>
<SYNC Start=1413840><P Class=ENUSCC><font color="#ffff00">Option three would be<br>replacement and abstraction.</font>
<SYNC Start=1417120><P Class=ENUSCC><font color="#ffff00">So you can convert hard-coded<br>credentials to environment variables.</font>
<SYNC Start=1420640><P Class=ENUSCC><font color="#ffff00">Abstract credential usage<br>behind configuration interfaces</font>
<SYNC Start=1423920><P Class=ENUSCC><font color="#ffff00">and replace services<br>that require credentials</font>
<SYNC Start=1426880><P Class=ENUSCC><font color="#ffff00">with mock implementations.</font>
<SYNC Start=1429040><P Class=ENUSCC><font color="#ffff00">Assure that your default credentials</font>
<SYNC Start=1430960><P Class=ENUSCC><font color="#ffff00">are documented as insecure<br>examples that must be changed.</font>
<SYNC Start=1435040><P Class=ENUSCC><font color="#ffff00">The goal is to ensure that<br>your community release</font>
<SYNC Start=1437840><P Class=ENUSCC><font color="#ffff00">can't accidentally connect<br>to production services</font>
<SYNC Start=1441120><P Class=ENUSCC><font color="#ffff00">or expose sensitive information.</font>
<SYNC Start=1443760><P Class=ENUSCC><font color="#ffff00">And so, how can<br>conditional compilation</font>
<SYNC Start=1446800><P Class=ENUSCC><font color="#ffff00">or environment specific code<br>such as #ifdefs or build flags</font>
<SYNC Start=1451440><P Class=ENUSCC><font color="#ffff00">help prepare for shutdown?</font>
<SYNC Start=1453360><P Class=ENUSCC><font color="#ffff00">Well, conditional compilation</font>
<SYNC Start=1455440><P Class=ENUSCC><font color="#ffff00">is one of your most powerful<br>tools for preservation planning.</font>
<SYNC Start=1459280><P Class=ENUSCC><font color="#ffff00">So, option one would be<br>graceful degradation planning</font>
<SYNC Start=1463600><P Class=ENUSCC><font color="#ffff00">using conditional compilation<br>to prepare fallback modes</font>
<SYNC Start=1467440><P Class=ENUSCC><font color="#ffff00">that can be activated<br>when services shut down.</font>
<SYNC Start=1470320><P Class=ENUSCC><font color="#ffff00">You might have #ifdef OFFLINE_MODE<br>blocks that enable local leaderboards,</font>
<SYNC Start=1474640><P Class=ENUSCC><font color="#ffff00">bot opponents, or singleplayer<br>alternatives to multiplayer functions.</font>
<SYNC Start=1478640><P Class=ENUSCC><font color="#ffff00">This allows the game to continue<br>functioning even after servers go offline.</font>
<SYNC Start=1483440><P Class=ENUSCC><font color="#ffff00">Option two would be with a<br>DRM and authentication bypass.</font>
<SYNC Start=1487520><P Class=ENUSCC><font color="#ffff00">When preparing for preservation,</font>
<SYNC Start=1489600><P Class=ENUSCC><font color="#ffff00">you can use conditional compilation</font>
<SYNC Start=1492080><P Class=ENUSCC><font color="#ffff00">to create builds with authentication<br>checks disabled or DRM removed.</font>
<SYNC Start=1497200><P Class=ENUSCC><font color="#ffff00">Flags like #ifdef PRESERVATION_BUILD<br>can activate code paths</font>
<SYNC Start=1501200><P Class=ENUSCC><font color="#ffff00">that bypass server<br>dependent authentication</font>
<SYNC Start=1503920><P Class=ENUSCC><font color="#ffff00">while maintaining the<br>original gameplay experience.</font>
<SYNC Start=1506640><P Class=ENUSCC><font color="#ffff00">And the beauty of this approach</font>
<SYNC Start=1508080><P Class=ENUSCC><font color="#ffff00">is that you can develop and<br>test these preservation modes</font>
<SYNC Start=1511600><P Class=ENUSCC><font color="#ffff00">throughout your development cycle,</font>
<SYNC Start=1513520><P Class=ENUSCC><font color="#ffff00">ensuring that they work correctly<br>when the time comes to use them.</font>
<SYNC Start=1517520><P Class=ENUSCC><font color="#ffff00">How do you document<br>your game's server stack</font>
<SYNC Start=1520400><P Class=ENUSCC><font color="#ffff00">so players can replicate it later?</font>
<SYNC Start=1523280><P Class=ENUSCC><font color="#ffff00">We all hate documentation,<br>but it's a necessary evil,</font>
<SYNC Start=1527120><P Class=ENUSCC><font color="#ffff00">even in game preservation.</font>
<SYNC Start=1529040><P Class=ENUSCC><font color="#ffff00">Comprehensive documentation is essential<br>for successful community preservation.</font>
<SYNC Start=1534400><P Class=ENUSCC><font color="#ffff00">So, what are some things<br>that we'd recommend that you do?</font>
<SYNC Start=1537360><P Class=ENUSCC><font color="#ffff00">Well, you can create simple architecture<br>diagrams with clear arrows and labels</font>
<SYNC Start=1541840><P Class=ENUSCC><font color="#ffff00">that show how different components<br>connect and communicate.</font>
<SYNC Start=1545440><P Class=ENUSCC><font color="#ffff00">You can provide a one-page<br>setup, a flowchart,</font>
<SYNC Start=1548800><P Class=ENUSCC><font color="#ffff00">showing the design flow<br>from initial installation</font>
<SYNC Start=1551760><P Class=ENUSCC><font color="#ffff00">to a running server.</font>
<SYNC Start=1553440><P Class=ENUSCC><font color="#ffff00">Include folder structure visuals<br>that are easy to display</font>
<SYNC Start=1556640><P Class=ENUSCC><font color="#ffff00">so community members understand<br>how to organize these files.</font>
<SYNC Start=1560720><P Class=ENUSCC><font color="#ffff00">Write step-by-step numbered processes</font>
<SYNC Start=1563280><P Class=ENUSCC><font color="#ffff00">for installation, configuration,<br>and troubleshooting common issues.</font>
<SYNC Start=1567280><P Class=ENUSCC><font color="#ffff00">Document your API<br>endpoints and their usage</font>
<SYNC Start=1570080><P Class=ENUSCC><font color="#ffff00">if your game uses internal APIs<br>for communication between components.</font>
<SYNC Start=1574560><P Class=ENUSCC><font color="#ffff00">You can also provide<br>Docker setup instructions</font>
<SYNC Start=1576880><P Class=ENUSCC><font color="#ffff00">if you're using containerization<br>for distribution.</font>
<SYNC Start=1580080><P Class=ENUSCC><font color="#ffff00">You're also going to want to list<br>system and hardware specifications,</font>
<SYNC Start=1583520><P Class=ENUSCC><font color="#ffff00">including minimum requirements,<br>recommended specifications,</font>
<SYNC Start=1586800><P Class=ENUSCC><font color="#ffff00">and any special<br>hardware considerations.</font>
<SYNC Start=1589280><P Class=ENUSCC><font color="#ffff00">Remember the people setting<br>up these servers in the future</font>
<SYNC Start=1592800><P Class=ENUSCC><font color="#ffff00">may not be professional developers.</font>
<SYNC Start=1595120><P Class=ENUSCC><font color="#ffff00">So clarity and completeness</font>
<SYNC Start=1597280><P Class=ENUSCC><font color="#ffff00">are much more important than<br>technical sophistication.</font>
<SYNC Start=1600720><P Class=ENUSCC><font color="#ffff00">All right, so now, let's move into<br>the practical implementation details.</font>
<SYNC Start=1605520><P Class=ENUSCC><font color="#ffff00">We've covered the<br>theory and planning.</font>
<SYNC Start=1608000><P Class=ENUSCC><font color="#ffff00">So now let's talk about how to<br>actually build these systems</font>
<SYNC Start=1611120><P Class=ENUSCC><font color="#ffff00">and handle the technical challenges<br>that you might encounter.</font>
<SYNC Start=1614607><P Class=ENUSCC><font color="#ffff00">Really common question is<br>how would players host servers</font>
<SYNC Start=1617840><P Class=ENUSCC><font color="#ffff00">when your code and setup<br>is really complicated?</font>
<SYNC Start=1621360><P Class=ENUSCC><font color="#ffff00">Well, when your server<br>architecture is complex,</font>
<SYNC Start=1624800><P Class=ENUSCC><font color="#ffff00">you have two main options<br>for simplifying community hosting.</font>
<SYNC Start=1628560><P Class=ENUSCC><font color="#ffff00">Option one would be virtual machines.</font>
<SYNC Start=1630720><P Class=ENUSCC><font color="#ffff00">Virtual machines can be set up in software<br>like VirtualBox, Parallels or Hyper-V.</font>
<SYNC Start=1636800><P Class=ENUSCC><font color="#ffff00">This can remove complexity<br>around server environments</font>
<SYNC Start=1639920><P Class=ENUSCC><font color="#ffff00">by providing a complete<br>ready-to-run environment.</font>
<SYNC Start=1643200><P Class=ENUSCC><font color="#ffff00">Option two would be Docker.</font>
<SYNC Start=1645760><P Class=ENUSCC><font color="#ffff00">A Dockerfile can be used by Docker</font>
<SYNC Start=1648560><P Class=ENUSCC><font color="#ffff00">to easily set up services<br>on almost any PC.</font>
<SYNC Start=1652240><P Class=ENUSCC><font color="#ffff00">Docker containers are generally<br>more efficient than full virtual machines</font>
<SYNC Start=1656320><P Class=ENUSCC><font color="#ffff00">and easier for communities to manage.</font>
<SYNC Start=1658800><P Class=ENUSCC><font color="#ffff00">You can define your entire server<br>stack in a Docker Compose file</font>
<SYNC Start=1662800><P Class=ENUSCC><font color="#ffff00">that automatically sets up all the<br>necessary services with a single command.</font>
<SYNC Start=1667760><P Class=ENUSCC><font color="#ffff00">Both approaches hide the complexity<br>of your server architecture</font>
<SYNC Start=1671360><P Class=ENUSCC><font color="#ffff00">behind a simple interface</font>
<SYNC Start=1672800><P Class=ENUSCC><font color="#ffff00">that community members can use<br>without a deep technical knowledge.</font>
<SYNC Start=1677040><P Class=ENUSCC><font color="#ffff00">All right, so what happens if your game<br>is tied to a platform ecosystem</font>
<SYNC Start=1681920><P Class=ENUSCC><font color="#ffff00">like Steam or PSN or Xbox Live?</font>
<SYNC Start=1685600><P Class=ENUSCC><font color="#ffff00">Well, platform integration doesn't<br>have to be a barrier to preservation.</font>
<SYNC Start=1691280><P Class=ENUSCC><font color="#ffff00">For example, you could retain existing<br>Steam, PSN, Xbox Live services,</font>
<SYNC Start=1696720><P Class=ENUSCC><font color="#ffff00">which, most of these services</font>
<SYNC Start=1698080><P Class=ENUSCC><font color="#ffff00">will still require multiplayer<br>games to use their features.</font>
<SYNC Start=1701680><P Class=ENUSCC><font color="#ffff00">And since those will remain online,<br>you could still use them.</font>
<SYNC Start=1705520><P Class=ENUSCC><font color="#ffff00">Just remove any dependencies on<br>publisher-owned or required services</font>
<SYNC Start=1709840><P Class=ENUSCC><font color="#ffff00">that won't be available<br>after end of life.</font>
<SYNC Start=1712720><P Class=ENUSCC><font color="#ffff00">Option two would be direct connect options<br>and providing options in-game</font>
<SYNC Start=1717360><P Class=ENUSCC><font color="#ffff00">such as using a direct connect IP option<br>or LAN server functionality.</font>
<SYNC Start=1721520><P Class=ENUSCC><font color="#ffff00">This gives players an alternative</font>
<SYNC Start=1723200><P Class=ENUSCC><font color="#ffff00">when platform-specific matchmaking<br>isn't available or becomes unreliable.</font>
<SYNC Start=1728080><P Class=ENUSCC><font color="#ffff00">Option three, you could handle<br>legacy platform cases.</font>
<SYNC Start=1731360><P Class=ENUSCC><font color="#ffff00">For example, with Xbox 360 games,</font>
<SYNC Start=1733600><P Class=ENUSCC><font color="#ffff00">where Xbox Live no longer<br>exists in its original form,</font>
<SYNC Start=1737120><P Class=ENUSCC><font color="#ffff00">LAN and system link<br>options work great.</font>
<SYNC Start=1739760><P Class=ENUSCC><font color="#ffff00">Players can use VPNs to<br>still play over the internet</font>
<SYNC Start=1742640><P Class=ENUSCC><font color="#ffff00">even though the original Xbox Live<br>infrastructure is no longer available.</font>
<SYNC Start=1746800><P Class=ENUSCC><font color="#ffff00">The key here is providing<br>multiple connection methods</font>
<SYNC Start=1750400><P Class=ENUSCC><font color="#ffff00">so that your game isn't<br>dependent on any single service.</font>
<SYNC Start=1754160><P Class=ENUSCC><font color="#ffff00">All right, so, locked time events.</font>
<SYNC Start=1756960><P Class=ENUSCC><font color="#ffff00">What if your core gameplay<br>depends on locked time events?</font>
<SYNC Start=1760960><P Class=ENUSCC><font color="#ffff00">Time locked events<br>present special challenges,</font>
<SYNC Start=1763760><P Class=ENUSCC><font color="#ffff00">but there are practical solutions.</font>
<SYNC Start=1766080><P Class=ENUSCC><font color="#ffff00">Option one would be using local time.</font>
<SYNC Start=1768320><P Class=ENUSCC><font color="#ffff00">You can use a driver coding pattern</font>
<SYNC Start=1770400><P Class=ENUSCC><font color="#ffff00">and have a fallback path where<br>events could be simulated locally</font>
<SYNC Start=1775120><P Class=ENUSCC><font color="#ffff00">or run on a rotation at specific times<br>based on the user's system clock.</font>
<SYNC Start=1779600><P Class=ENUSCC><font color="#ffff00">This allows events to continue happening<br>even without server coordination.</font>
<SYNC Start=1784320><P Class=ENUSCC><font color="#ffff00">Next up would be<br>community server setting.</font>
<SYNC Start=1786720><P Class=ENUSCC><font color="#ffff00">Server settings could be<br>provided for community servers</font>
<SYNC Start=1789680><P Class=ENUSCC><font color="#ffff00">to define events, their<br>timing, and duration.</font>
<SYNC Start=1792800><P Class=ENUSCC><font color="#ffff00">This gives community server administrators<br>control over the event schedule</font>
<SYNC Start=1797200><P Class=ENUSCC><font color="#ffff00">and allows them to adapt<br>it to their playerbase.</font>
<SYNC Start=1801040><P Class=ENUSCC><font color="#ffff00">The goal is to preserve the gameplay<br>experience that events provide</font>
<SYNC Start=1805760><P Class=ENUSCC><font color="#ffff00">even if the exact timing and coordination<br>mechanisms need to change a little bit.</font>
<SYNC Start=1810800><P Class=ENUSCC><font color="#ffff00">All right, I hear you, I hear you.</font>
<SYNC Start=1812720><P Class=ENUSCC><font color="#ffff00">Can matchmaking be replaced<br>with LAN or peer-to-peer solutions?</font>
<SYNC Start=1818334><P Class=ENUSCC><font color="#ffff00">Yes.</font>
<SYNC Start=1819114><P Class=ENUSCC><font color="#ffff00">But you have two approaches that are going<br>to be dependent on technical constraints.</font>
<SYNC Start=1824960><P Class=ENUSCC><font color="#ffff00">Option one would be to<br>continue to support matchmaking</font>
<SYNC Start=1828400><P Class=ENUSCC><font color="#ffff00">by giving out a server binary<br>which lets players host a master server</font>
<SYNC Start=1832960><P Class=ENUSCC><font color="#ffff00">that holds a list of<br>IPs for matchmaking</font>
<SYNC Start=1835520><P Class=ENUSCC><font color="#ffff00">or spins up local server processes<br>with something like Docker.</font>
<SYNC Start=1839360><P Class=ENUSCC><font color="#ffff00">This maintains the familiar<br>matchmaking experience</font>
<SYNC Start=1842160><P Class=ENUSCC><font color="#ffff00">while removing<br>infrastructure dependency.</font>
<SYNC Start=1845040><P Class=ENUSCC><font color="#ffff00">Option two would be remove<br>matchmaking entirely.</font>
<SYNC Start=1848400><P Class=ENUSCC><font color="#ffff00">You can support direct IP<br>or LAN connects instead.</font>
<SYNC Start=1852320><P Class=ENUSCC><font color="#ffff00">While this requires more<br>technical knowledge from players,</font>
<SYNC Start=1855280><P Class=ENUSCC><font color="#ffff00">it's simpler to<br>implement and maintain.</font>
<SYNC Start=1858240><P Class=ENUSCC><font color="#ffff00">Many classic games worked this<br>way successfully for years.</font>
<SYNC Start=1861680><P Class=ENUSCC><font color="#ffff00">So consider your player's base—</font>
<SYNC Start=1864160><P Class=ENUSCC><font color="#ffff00">Consider your playerbase's<br>technical sophistication</font>
<SYNC Start=1866800><P Class=ENUSCC><font color="#ffff00">when choosing between<br>these approaches.</font>
<SYNC Start=1868800><P Class=ENUSCC><font color="#ffff00">All right, so what if game—</font>
<SYNC Start=1870720><P Class=ENUSCC><font color="#ffff00">What if the game server requires<br>authoritative logic for fairness?</font>
<SYNC Start=1876000><P Class=ENUSCC><font color="#ffff00">That's a good question.</font>
<SYNC Start=1877360><P Class=ENUSCC><font color="#ffff00">Authoritative servers are important<br>for competitive integrity,</font>
<SYNC Start=1881200><P Class=ENUSCC><font color="#ffff00">and guess what?</font>
<SYNC Start=1882480><P Class=ENUSCC><font color="#ffff00">You can maintain<br>this in preservation.</font>
<SYNC Start=1885520><P Class=ENUSCC><font color="#ffff00">Option one would be community server<br>with authoritative logic.</font>
<SYNC Start=1889840><P Class=ENUSCC><font color="#ffff00">So you could release a server binary<br>where community servers can be instanced</font>
<SYNC Start=1893920><P Class=ENUSCC><font color="#ffff00">and be authoritative for<br>their instance or realm.</font>
<SYNC Start=1897120><P Class=ENUSCC><font color="#ffff00">You could let players<br>direct connect via IP or LAN</font>
<SYNC Start=1900320><P Class=ENUSCC><font color="#ffff00">and each community server would maintain<br>fair play within its own ecosystem.</font>
<SYNC Start=1905440><P Class=ENUSCC><font color="#ffff00">The other option would be<br>peer-to-peer authority.</font>
<SYNC Start=1908320><P Class=ENUSCC><font color="#ffff00">Have a player picked to be the host<br>to access the authoritative server</font>
<SYNC Start=1912160><P Class=ENUSCC><font color="#ffff00">and can spectate the game while it's<br>playing to avoid host advantage bias.</font>
<SYNC Start=1917040><P Class=ENUSCC><font color="#ffff00">This approach works well for<br>smaller-scale multiplayer games</font>
<SYNC Start=1921360><P Class=ENUSCC><font color="#ffff00">where community servers<br>might be overkill.</font>
<SYNC Start=1923840><P Class=ENUSCC><font color="#ffff00">The key here is maintaining<br>competitive integrity</font>
<SYNC Start=1926560><P Class=ENUSCC><font color="#ffff00">within whatever hosting<br>model you choose,</font>
<SYNC Start=1928880><P Class=ENUSCC><font color="#ffff00">even if the scale is smaller<br>than your original centralized approach.</font>
<SYNC Start=1932800><P Class=ENUSCC><font color="#ffff00">So, can you automate<br>having an end-of-life build</font>
<SYNC Start=1937120><P Class=ENUSCC><font color="#ffff00">and have a normal build while<br>developing your game with CI/CD?</font>
<SYNC Start=1941280><P Class=ENUSCC><font color="#ffff00">Well, absolutely.</font>
<SYNC Start=1942720><P Class=ENUSCC><font color="#ffff00">And this is highly recommended.</font>
<SYNC Start=1945200><P Class=ENUSCC><font color="#ffff00">Build flags are your friend here.</font>
<SYNC Start=1948000><P Class=ENUSCC><font color="#ffff00">As mentioned in previous slides,</font>
<SYNC Start=1950320><P Class=ENUSCC><font color="#ffff00">build flags such as<br>-SunsetPatch can be used</font>
<SYNC Start=1954480><P Class=ENUSCC><font color="#ffff00">which strip out sections of code.</font>
<SYNC Start=1957600><P Class=ENUSCC><font color="#ffff00">This will let you ship a sunset<br>version of your server executable</font>
<SYNC Start=1961600><P Class=ENUSCC><font color="#ffff00">to QA for local testing<br>and running test plans.</font>
<SYNC Start=1965440><P Class=ENUSCC><font color="#ffff00">By integrating this into<br>your CI/CD pipeline,</font>
<SYNC Start=1968560><P Class=ENUSCC><font color="#ffff00">you can automatically test<br>both your production build</font>
<SYNC Start=1972080><P Class=ENUSCC><font color="#ffff00">and your preservation build<br>with every code change.</font>
<SYNC Start=1975440><P Class=ENUSCC><font color="#ffff00">This ensures that when the time comes<br>to release the preservation build,</font>
<SYNC Start=1979040><P Class=ENUSCC><font color="#ffff00">you know it works correctly,</font>
<SYNC Start=1980640><P Class=ENUSCC><font color="#ffff00">because it's been tested<br>throughout the development process.</font>
<SYNC Start=1984160><P Class=ENUSCC><font color="#ffff00">This approach also lets your QA team</font>
<SYNC Start=1986640><P Class=ENUSCC><font color="#ffff00">test preservation scenarios<br>during development,</font>
<SYNC Start=1989360><P Class=ENUSCC><font color="#ffff00">catching issues early when they're<br>easier and much cheaper to fix.</font>
<SYNC Start=1993840><P Class=ENUSCC><font color="#ffff00">And what tooling can you<br>provide to the community</font>
<SYNC Start=1996960><P Class=ENUSCC><font color="#ffff00">to set up servers like scripts,<br>Dockerfiles, and config generators?</font>
<SYNC Start=2001440><P Class=ENUSCC><font color="#ffff00">The more tooling you provide,</font>
<SYNC Start=2003760><P Class=ENUSCC><font color="#ffff00">the more likely your game<br>is to survive in the community.</font>
<SYNC Start=2008320><P Class=ENUSCC><font color="#ffff00">So, one option would be to release<br>a self-contained server package</font>
<SYNC Start=2012800><P Class=ENUSCC><font color="#ffff00">where you could include simplified<br>versions of your services:</font>
<SYNC Start=2016400><P Class=ENUSCC><font color="#ffff00">a lightweight database like SQLite,</font>
<SYNC Start=2020160><P Class=ENUSCC><font color="#ffff00">simple web server<br>for admin interfaces,</font>
<SYNC Start=2023040><P Class=ENUSCC><font color="#ffff00">and all game logic in<br>one downloadable package.</font>
<SYNC Start=2026800><P Class=ENUSCC><font color="#ffff00">Aim for "download, extract,<br>and run" type of simplicity.</font>
<SYNC Start=2031120><P Class=ENUSCC><font color="#ffff00">Another option would be to<br>provide Kubernetes manifests</font>
<SYNC Start=2034080><P Class=ENUSCC><font color="#ffff00">or Docker Compose files<br>for easier deployment.</font>
<SYNC Start=2037120><P Class=ENUSCC><font color="#ffff00">For technically sophisticated<br>community members,</font>
<SYNC Start=2040000><P Class=ENUSCC><font color="#ffff00">you could provide orchestration files<br>that automate complex deployments.</font>
<SYNC Start=2043680><P Class=ENUSCC><font color="#ffff00">Docker Compose files can<br>define multi-container setups</font>
<SYNC Start=2047600><P Class=ENUSCC><font color="#ffff00">that replicate your<br>architecture at a smaller scale.</font>
<SYNC Start=2050720><P Class=ENUSCC><font color="#ffff00">Another option would be to<br>create installation scripts.</font>
<SYNC Start=2054000><P Class=ENUSCC><font color="#ffff00">You could provide automated<br>installation scripts</font>
<SYNC Start=2056480><P Class=ENUSCC><font color="#ffff00">that handle service setup,<br>database initialization,</font>
<SYNC Start=2059840><P Class=ENUSCC><font color="#ffff00">and configuration file generation<br>with dependency installation.</font>
<SYNC Start=2064000><P Class=ENUSCC><font color="#ffff00">You could make these scripts<br>work on common platforms</font>
<SYNC Start=2066560><P Class=ENUSCC><font color="#ffff00">like Ubuntu, Windows Server,<br>Mac OS, etc., etc.</font>
<SYNC Start=2071040><P Class=ENUSCC><font color="#ffff00">You could also offer<br>a cloud agnostic version.</font>
<SYNC Start=2074320><P Class=ENUSCC><font color="#ffff00">You could design community versions<br>to work on any hosting platform,</font>
<SYNC Start=2077440><P Class=ENUSCC><font color="#ffff00">from Raspberry Pi servers<br>in someone's home,</font>
<SYNC Start=2080160><P Class=ENUSCC><font color="#ffff00">to small VPS instances<br>on any cloud provider.</font>
<SYNC Start=2083680><P Class=ENUSCC><font color="#ffff00">You'll want to avoid dependencies<br>on specific cloud features though,</font>
<SYNC Start=2087200><P Class=ENUSCC><font color="#ffff00">which will kind of lead<br>us into this next slide,</font>
<SYNC Start=2091360><P Class=ENUSCC><font color="#ffff00">which is what are the major differences<br>between hosting a game server on Amazon</font>
<SYNC Start=2096320><P Class=ENUSCC><font color="#ffff00">compared to locally at home?</font>
<SYNC Start=2098720><P Class=ENUSCC><font color="#ffff00">Well, understanding these differences</font>
<SYNC Start=2100640><P Class=ENUSCC><font color="#ffff00">helps you design the servers<br>that work in both environments.</font>
<SYNC Start=2104640><P Class=ENUSCC><font color="#ffff00">So, we're going to go<br>ahead and look into that.</font>
<SYNC Start=2107280><P Class=ENUSCC><font color="#ffff00">First off is distance<br>and infrastructure.</font>
<SYNC Start=2109760><P Class=ENUSCC><font color="#ffff00">So, cloud servers are<br>hosted in data centers</font>
<SYNC Start=2112400><P Class=ENUSCC><font color="#ffff00">with uninterruptible<br>power supplies, backups,</font>
<SYNC Start=2115200><P Class=ENUSCC><font color="#ffff00">and staff on standby to provide remote<br>hands support if something goes wrong.</font>
<SYNC Start=2119840><P Class=ENUSCC><font color="#ffff00">Home servers deal with<br>residential internet, power outages,</font>
<SYNC Start=2123280><P Class=ENUSCC><font color="#ffff00">and limited technical support.</font>
<SYNC Start=2125200><P Class=ENUSCC><font color="#ffff00">Next up would be bandwidth.</font>
<SYNC Start=2126480><P Class=ENUSCC><font color="#ffff00">Enterprise servers have<br>much more bandwidth,</font>
<SYNC Start=2128960><P Class=ENUSCC><font color="#ffff00">such as 10 gigabit connections,<br>which won't be needed at end of life.</font>
<SYNC Start=2133600><P Class=ENUSCC><font color="#ffff00">Community servers typically run<br>on residential internet connections</font>
<SYNC Start=2137280><P Class=ENUSCC><font color="#ffff00">with much lower upload speeds.</font>
<SYNC Start=2139440><P Class=ENUSCC><font color="#ffff00">You also have 99% uptime and scaling.</font>
<SYNC Start=2142400><P Class=ENUSCC><font color="#ffff00">Cloud deployments use extra services<br>for failover, load balancing,</font>
<SYNC Start=2146560><P Class=ENUSCC><font color="#ffff00">and complex scaling to<br>handle millions of users.</font>
<SYNC Start=2149840><P Class=ENUSCC><font color="#ffff00">Community servers are designed<br>for smaller local communities,</font>
<SYNC Start=2153120><P Class=ENUSCC><font color="#ffff00">and they really<br>don't need this complexity.</font>
<SYNC Start=2156160><P Class=ENUSCC><font color="#ffff00">So, design your community servers to<br>work well within these constraints</font>
<SYNC Start=2160160><P Class=ENUSCC><font color="#ffff00">rather than trying to replicate<br>your production environment exactly.</font>
<SYNC Start=2164640><P Class=ENUSCC><font color="#ffff00">But let's say your game uses<br>a lot of complicated services,</font>
<SYNC Start=2168800><P Class=ENUSCC><font color="#ffff00">such as AWS, Google Cloud,<br>and other microservices.</font>
<SYNC Start=2172640><P Class=ENUSCC><font color="#ffff00">What do you do then?</font>
<SYNC Start=2174080><P Class=ENUSCC><font color="#ffff00">Well, these complex<br>service infrastructures</font>
<SYNC Start=2176560><P Class=ENUSCC><font color="#ffff00">can be simplified for<br>community hosting.</font>
<SYNC Start=2179360><P Class=ENUSCC><font color="#ffff00">So, first you could remove the<br>microservices that are not needed.</font>
<SYNC Start=2183120><P Class=ENUSCC><font color="#ffff00">This will help reduce the<br>surface area of work needed</font>
<SYNC Start=2186400><P Class=ENUSCC><font color="#ffff00">for the game to be functional.</font>
<SYNC Start=2188560><P Class=ENUSCC><font color="#ffff00">Most microservices are really<br>not needed at end of life.</font>
<SYNC Start=2191840><P Class=ENUSCC><font color="#ffff00">Things, again, like payment processing,<br>analytics, and account management</font>
<SYNC Start=2195760><P Class=ENUSCC><font color="#ffff00">really become unnecessary.</font>
<SYNC Start=2198320><P Class=ENUSCC><font color="#ffff00">You could also use best practices<br>such as infrastructure as code.</font>
<SYNC Start=2203360><P Class=ENUSCC><font color="#ffff00">Use a descriptive model of what<br>services need to be deployed</font>
<SYNC Start=2207280><P Class=ENUSCC><font color="#ffff00">so they are easily recreated at<br>end of life by the community.</font>
<SYNC Start=2211440><P Class=ENUSCC><font color="#ffff00">Tools like Terraform or Kubernetes<br>manifest can help with this.</font>
<SYNC Start=2215840><P Class=ENUSCC><font color="#ffff00">Again, to bring it back to Docker,<br>you can use that technology like Docker.</font>
<SYNC Start=2220080><P Class=ENUSCC><font color="#ffff00">Docker can easily spin up a bunch of<br>containers to host services for players.</font>
<SYNC Start=2225200><P Class=ENUSCC><font color="#ffff00">It also removes dependencies<br>on the operating system</font>
<SYNC Start=2228320><P Class=ENUSCC><font color="#ffff00">and environmental complexity.</font>
<SYNC Start=2230560><P Class=ENUSCC><font color="#ffff00">And finally, you could provide<br>players documentation and files,</font>
<SYNC Start=2234480><P Class=ENUSCC><font color="#ffff00">allowing them to set up their<br>own cloud account like AWS</font>
<SYNC Start=2237920><P Class=ENUSCC><font color="#ffff00">and set up servers that way.</font>
<SYNC Start=2239920><P Class=ENUSCC><font color="#ffff00">Some community members may prefer to<br>run servers on cloud infrastructure</font>
<SYNC Start=2244080><P Class=ENUSCC><font color="#ffff00">rather than home hardware.</font>
<SYNC Start=2246240><P Class=ENUSCC><font color="#ffff00">All right, so here's a<br>practical list of services</font>
<SYNC Start=2250960><P Class=ENUSCC><font color="#ffff00">you can typically remove<br>for end-of-life builds.</font>
<SYNC Start=2254240><P Class=ENUSCC><font color="#ffff00">I'm not going to read this whole thing,<br>so go ahead and pause the screen.</font>
<SYNC Start=2258160><P Class=ENUSCC><font color="#ffff00">I encourage you to take a look through<br>all of these, because this is a lot.</font>
<SYNC Start=2262480><P Class=ENUSCC><font color="#ffff00">This is a lot that can be removed</font>
<SYNC Start=2265360><P Class=ENUSCC><font color="#ffff00">out of your current system and<br>your current code and current setup</font>
<SYNC Start=2269440><P Class=ENUSCC><font color="#ffff00">to make an end-of-life build work.</font>
<SYNC Start=2272160><P Class=ENUSCC><font color="#ffff00">All right, so, what if you use<br>PlayFab or GameSparks?</font>
<SYNC Start=2276400><P Class=ENUSCC><font color="#ffff00">How do you end-of-life your game if you<br>are using these types of managed backends?</font>
<SYNC Start=2280880><P Class=ENUSCC><font color="#ffff00">Well, managed backends require special<br>consideration for end-of-life planning.</font>
<SYNC Start=2286800><P Class=ENUSCC><font color="#ffff00">So, here are some<br>key strategies to consider.</font>
<SYNC Start=2289920><P Class=ENUSCC><font color="#ffff00">You could use feature<br>mapping and prioritization.</font>
<SYNC Start=2292960><P Class=ENUSCC><font color="#ffff00">You'll want to document every<br>BaaS feature your game uses</font>
<SYNC Start=2297040><P Class=ENUSCC><font color="#ffff00">and categorize them by importance.</font>
<SYNC Start=2299200><P Class=ENUSCC><font color="#ffff00">Essential features like player<br>authentication and game saves</font>
<SYNC Start=2302640><P Class=ENUSCC><font color="#ffff00">will need a replacement,</font>
<SYNC Start=2303840><P Class=ENUSCC><font color="#ffff00">while nice-to-have features like detailed<br>analytics can be removed entirely.</font>
<SYNC Start=2308480><P Class=ENUSCC><font color="#ffff00">You want to create a comprehensive list<br>mapping each BaaS feature</font>
<SYNC Start=2311920><P Class=ENUSCC><font color="#ffff00">to either a local replacement<br>or a removal plan.</font>
<SYNC Start=2316240><P Class=ENUSCC><font color="#ffff00">Data export and migration.</font>
<SYNC Start=2317920><P Class=ENUSCC><font color="#ffff00">Well, you can export all critical data<br>before service termination.</font>
<SYNC Start=2321920><P Class=ENUSCC><font color="#ffff00">This includes player profiles,<br>game progress, leaderboards,</font>
<SYNC Start=2325440><P Class=ENUSCC><font color="#ffff00">user-generated content,<br>and configuration data.</font>
<SYNC Start=2328800><P Class=ENUSCC><font color="#ffff00">Most BaaS providers<br>offer data export tools,</font>
<SYNC Start=2331760><P Class=ENUSCC><font color="#ffff00">but you may need custom scripts</font>
<SYNC Start=2333600><P Class=ENUSCC><font color="#ffff00">to extract everything in usable<br>formats for community servers.</font>
<SYNC Start=2338240><P Class=ENUSCC><font color="#ffff00">Could also use<br>progressive decoupling.</font>
<SYNC Start=2340800><P Class=ENUSCC><font color="#ffff00">Start by reducing BaaS dependencies in<br>updates leading up to the shutdown.</font>
<SYNC Start=2346000><P Class=ENUSCC><font color="#ffff00">You'll replace complex BaaS features<br>with simpler local alternatives,</font>
<SYNC Start=2349920><P Class=ENUSCC><font color="#ffff00">gradually allowing you to test each<br>change and get community feedback</font>
<SYNC Start=2353840><P Class=ENUSCC><font color="#ffff00">before final shutdown.</font>
<SYNC Start=2355840><P Class=ENUSCC><font color="#ffff00">You want to also try to<br>utilize local API development.</font>
<SYNC Start=2359440><P Class=ENUSCC><font color="#ffff00">Create local APIs that replicate<br>essential BaaS functions</font>
<SYNC Start=2362960><P Class=ENUSCC><font color="#ffff00">with simplified implementations.</font>
<SYNC Start=2365280><P Class=ENUSCC><font color="#ffff00">A local player data API might use<br>SQLite instead of cloud databases</font>
<SYNC Start=2371120><P Class=ENUSCC><font color="#ffff00">and local leaderboards might be<br>server-specific rather than global.</font>
<SYNC Start=2375520><P Class=ENUSCC><font color="#ffff00">All right, so can dependency injection<br>or other modular architecture</font>
<SYNC Start=2380160><P Class=ENUSCC><font color="#ffff00">help isolate what needs to be<br>removed or replaced at end of life?</font>
<SYNC Start=2384640><P Class=ENUSCC><font color="#ffff00">Yes, absolutely.</font>
<SYNC Start=2386480><P Class=ENUSCC><font color="#ffff00">Good architectural patterns make<br>end-of-life transitions so much smoother.</font>
<SYNC Start=2392640><P Class=ENUSCC><font color="#ffff00">Service abstraction and swapping,</font>
<SYNC Start=2395120><P Class=ENUSCC><font color="#ffff00">as an example,</font>
<SYNC Start=2396240><P Class=ENUSCC><font color="#ffff00">would mean dependency injection allows<br>you to abstract external services</font>
<SYNC Start=2400800><P Class=ENUSCC><font color="#ffff00">behind interfaces that can be easily<br>swapped during end-of-life preparation.</font>
<SYNC Start=2405680><P Class=ENUSCC><font color="#ffff00">Authentication services,<br>analytics—analytics platforms,</font>
<SYNC Start=2410480><P Class=ENUSCC><font color="#ffff00">and cloud storage can be replaced<br>with local implementations</font>
<SYNC Start=2414400><P Class=ENUSCC><font color="#ffff00">without changing core game logic.</font>
<SYNC Start=2417040><P Class=ENUSCC><font color="#ffff00">Configuration-driven component selection,<br>with proper dependency injection,</font>
<SYNC Start=2421600><P Class=ENUSCC><font color="#ffff00">you can easily select<br>implementations to use</font>
<SYNC Start=2424640><P Class=ENUSCC><font color="#ffff00">based on configuration<br>files or build settings.</font>
<SYNC Start=2428000><P Class=ENUSCC><font color="#ffff00">Production builds might<br>use cloud services</font>
<SYNC Start=2430800><P Class=ENUSCC><font color="#ffff00">while community builds<br>could use local alternatives.</font>
<SYNC Start=2434000><P Class=ENUSCC><font color="#ffff00">Testing and isolation.</font>
<SYNC Start=2435440><P Class=ENUSCC><font color="#ffff00">So dependency injection makes it<br>easier to test community builds</font>
<SYNC Start=2439280><P Class=ENUSCC><font color="#ffff00">by allowing you to inject<br>mock implementations</font>
<SYNC Start=2442480><P Class=ENUSCC><font color="#ffff00">during development<br>and testing phases.</font>
<SYNC Start=2444640><P Class=ENUSCC><font color="#ffff00">This helps identify issues<br>before final release.</font>
<SYNC Start=2448080><P Class=ENUSCC><font color="#ffff00">Cleaner code organization.</font>
<SYNC Start=2450000><P Class=ENUSCC><font color="#ffff00">Well-designed dependency injection<br>leads to cleaner separation of concerns,</font>
<SYNC Start=2453600><P Class=ENUSCC><font color="#ffff00">making it easier to identify what<br>components are safe to remove</font>
<SYNC Start=2457120><P Class=ENUSCC><font color="#ffff00">and what dependencies<br>each feature requires.</font>
<SYNC Start=2460320><P Class=ENUSCC><font color="#ffff00">All right, so, how do you test the final<br>state of your game in a post-server world</font>
<SYNC Start=2465600><P Class=ENUSCC><font color="#ffff00">to confirm that it<br>behaves as expected?</font>
<SYNC Start=2468960><P Class=ENUSCC><font color="#ffff00">Well, testing your end-of-life build<br>is crucial for a smooth transition.</font>
<SYNC Start=2474400><P Class=ENUSCC><font color="#ffff00">You can use feature flags<br>to test community builds</font>
<SYNC Start=2477920><P Class=ENUSCC><font color="#ffff00">while production services<br>are still available.</font>
<SYNC Start=2480640><P Class=ENUSCC><font color="#ffff00">You can gradually enable<br>community compatible features</font>
<SYNC Start=2484240><P Class=ENUSCC><font color="#ffff00">and disable problematic ones<br>during transition periods.</font>
<SYNC Start=2487920><P Class=ENUSCC><font color="#ffff00">This allows you to test preservation mode<br>while your game is still live.</font>
<SYNC Start=2492080><P Class=ENUSCC><font color="#ffff00">Build defines can be used</font>
<SYNC Start=2493360><P Class=ENUSCC><font color="#ffff00">to build a special version<br>of your game for end of life</font>
<SYNC Start=2496560><P Class=ENUSCC><font color="#ffff00">that has authentication checks disabled<br>and cloud dependency removed.</font>
<SYNC Start=2500960><P Class=ENUSCC><font color="#ffff00">This gives you a clean<br>testing environment</font>
<SYNC Start=2503200><P Class=ENUSCC><font color="#ffff00">that matches what the<br>community will actually use.</font>
<SYNC Start=2506320><P Class=ENUSCC><font color="#ffff00">With test plans, your<br>quality assurance team</font>
<SYNC Start=2508880><P Class=ENUSCC><font color="#ffff00">can run through an<br>end-of-life test plan</font>
<SYNC Start=2511280><P Class=ENUSCC><font color="#ffff00">to make sure your game functions<br>throughout the development process.</font>
<SYNC Start=2515520><P Class=ENUSCC><font color="#ffff00">Create specific test cases<br>for server failure scenarios,</font>
<SYNC Start=2518880><P Class=ENUSCC><font color="#ffff00">offline-mode functionality,<br>and community server connections.</font>
<SYNC Start=2523120><P Class=ENUSCC><font color="#ffff00">Regular testing ensures that when the time<br>comes to release your preservation build,</font>
<SYNC Start=2528000><P Class=ENUSCC><font color="#ffff00">you know it works correctly because it's<br>been validated throughout development.</font>
<SYNC Start=2532880><P Class=ENUSCC><font color="#ffff00">And so, can you create a<br>community server binary</font>
<SYNC Start=2537200><P Class=ENUSCC><font color="#ffff00">with stripped down version<br>for player hosting at end of life?</font>
<SYNC Start=2542240><P Class=ENUSCC><font color="#ffff00">Well, absolutely.</font>
<SYNC Start=2543840><P Class=ENUSCC><font color="#ffff00">And this is often the most<br>practical approach for preservation.</font>
<SYNC Start=2548160><P Class=ENUSCC><font color="#ffff00">Feature reduction and optimization</font>
<SYNC Start=2550720><P Class=ENUSCC><font color="#ffff00">strip out features that aren't<br>essential for core gameplay</font>
<SYNC Start=2553840><P Class=ENUSCC><font color="#ffff00">or that require proprietary services.</font>
<SYNC Start=2556160><P Class=ENUSCC><font color="#ffff00">You'll want to remove analytic systems,<br>complex monetization features,</font>
<SYNC Start=2560000><P Class=ENUSCC><font color="#ffff00">advanced anti-cheat integration,</font>
<SYNC Start=2561760><P Class=ENUSCC><font color="#ffff00">and features that depend on<br>unavailable third-party services.</font>
<SYNC Start=2565520><P Class=ENUSCC><font color="#ffff00">Dependency building:</font>
<SYNC Start=2566720><P Class=ENUSCC><font color="#ffff00">You'll want to include all necessary<br>libraries, runtime dependencies,</font>
<SYNC Start=2570560><P Class=ENUSCC><font color="#ffff00">and configuration files to<br>minimize external requirements.</font>
<SYNC Start=2574640><P Class=ENUSCC><font color="#ffff00">Use static linking where possible</font>
<SYNC Start=2576480><P Class=ENUSCC><font color="#ffff00">to reduce dependency conflicts<br>and simplify deployment.</font>
<SYNC Start=2580480><P Class=ENUSCC><font color="#ffff00">Configuration externalization:</font>
<SYNC Start=2582320><P Class=ENUSCC><font color="#ffff00">You'll want to move all customizable<br>settings to external configuration files</font>
<SYNC Start=2587120><P Class=ENUSCC><font color="#ffff00">rather than hard-coded values.</font>
<SYNC Start=2589280><P Class=ENUSCC><font color="#ffff00">This would allow administrators<br>to customize servers</font>
<SYNC Start=2591920><P Class=ENUSCC><font color="#ffff00">without needing source code<br>access or recompilation.</font>
<SYNC Start=2595520><P Class=ENUSCC><font color="#ffff00">Resource optimization:</font>
<SYNC Start=2597280><P Class=ENUSCC><font color="#ffff00">You'll want to optimize binaries for<br>typical community hosting scenarios</font>
<SYNC Start=2600960><P Class=ENUSCC><font color="#ffff00">which often have limited resources.</font>
<SYNC Start=2603680><P Class=ENUSCC><font color="#ffff00">Use efficient algorithms,<br>reduce memory usage,</font>
<SYNC Start=2606480><P Class=ENUSCC><font color="#ffff00">and optimize for single server rather<br>than distributed deployment scenarios.</font>
<SYNC Start=2611440><P Class=ENUSCC><font color="#ffff00">How do you remove login or DRM from games<br>that prevent you from running offline?</font>
<SYNC Start=2618000><P Class=ENUSCC><font color="#ffff00">Well, removing<br>authentication barriers</font>
<SYNC Start=2620560><P Class=ENUSCC><font color="#ffff00">is obviously pretty<br>essential for preservation.</font>
<SYNC Start=2624720><P Class=ENUSCC><font color="#ffff00">So, you'll want to replace authentication<br>with always-success functions.</font>
<SYNC Start=2629280><P Class=ENUSCC><font color="#ffff00">Modify login systems to automatically<br>succeed without server verification,</font>
<SYNC Start=2634480><P Class=ENUSCC><font color="#ffff00">remove DRM license checks,</font>
<SYNC Start=2636560><P Class=ENUSCC><font color="#ffff00">and strip out periodic<br>license verification</font>
<SYNC Start=2639040><P Class=ENUSCC><font color="#ffff00">and online validation requirements.</font>
<SYNC Start=2641920><P Class=ENUSCC><font color="#ffff00">You'll also want to eliminate<br>periodic online verification</font>
<SYNC Start=2645680><P Class=ENUSCC><font color="#ffff00">by removing any systems</font>
<SYNC Start=2647200><P Class=ENUSCC><font color="#ffff00">that require regular check-ins<br>with authentication servers.</font>
<SYNC Start=2650720><P Class=ENUSCC><font color="#ffff00">You can enable local user management</font>
<SYNC Start=2652960><P Class=ENUSCC><font color="#ffff00">and store profiles in local files or<br>use a local storage implementation</font>
<SYNC Start=2658720><P Class=ENUSCC><font color="#ffff00">with simple username-only<br>login systems</font>
<SYNC Start=2661040><P Class=ENUSCC><font color="#ffff00">that don't require<br>server verification.</font>
<SYNC Start=2663840><P Class=ENUSCC><font color="#ffff00">You'll also want to use build flags<br>for clean separation.</font>
<SYNC Start=2667040><P Class=ENUSCC><font color="#ffff00">Implement conditional compilation</font>
<SYNC Start=2669120><P Class=ENUSCC><font color="#ffff00">so you can cleanly separate<br>authentication code from core game logic.</font>
<SYNC Start=2673520><P Class=ENUSCC><font color="#ffff00">You'll also want to test<br>offline functionality</font>
<SYNC Start=2676240><P Class=ENUSCC><font color="#ffff00">to ensure the game starts without<br>internet, shows no license errors,</font>
<SYNC Start=2680560><P Class=ENUSCC><font color="#ffff00">and local saves work properly.</font>
<SYNC Start=2683440><P Class=ENUSCC><font color="#ffff00">Then you'll want to<br>communicate changes clearly.</font>
<SYNC Start=2686000><P Class=ENUSCC><font color="#ffff00">Label builds as something like<br>"Community Edition - No account required,"</font>
<SYNC Start=2689920><P Class=ENUSCC><font color="#ffff00">or "all DRM removed for preservation,"<br>and update license agreements accordingly.</font>
<SYNC Start=2695440><P Class=ENUSCC><font color="#ffff00">All right, so now let's address one of the<br>most complex aspects of game preservation,</font>
<SYNC Start=2700720><P Class=ENUSCC><font color="#ffff00">which is handling player data<br>and security considerations</font>
<SYNC Start=2703840><P Class=ENUSCC><font color="#ffff00">when transitioning to<br>community-hosted infrastructure.</font>
<SYNC Start=2707440><P Class=ENUSCC><font color="#ffff00">One question we see fairly often</font>
<SYNC Start=2709360><P Class=ENUSCC><font color="#ffff00">is how do you handle<br>removing anti-cheat</font>
<SYNC Start=2711840><P Class=ENUSCC><font color="#ffff00">and other services like<br>BattlEye for end of life?</font>
<SYNC Start=2715120><P Class=ENUSCC><font color="#ffff00">Well, anti-cheat services<br>require special consideration,</font>
<SYNC Start=2718560><P Class=ENUSCC><font color="#ffff00">because they often have licensing<br>and technical dependencies.</font>
<SYNC Start=2722960><P Class=ENUSCC><font color="#ffff00">For example, BattlEye.</font>
<SYNC Start=2724560><P Class=ENUSCC><font color="#ffff00">BattlEye has options to<br>run the game without it</font>
<SYNC Start=2727920><P Class=ENUSCC><font color="#ffff00">by using the game<br>executable directly.</font>
<SYNC Start=2730160><P Class=ENUSCC><font color="#ffff00">So you can patch out BattlEye<br>code in your game executable</font>
<SYNC Start=2733600><P Class=ENUSCC><font color="#ffff00">with a define such as<br>#if WITH_BATTLEYE_CLIENT.</font>
<SYNC Start=2738640><P Class=ENUSCC><font color="#ffff00">You can also provide a command line<br>argument players can use</font>
<SYNC Start=2741920><P Class=ENUSCC><font color="#ffff00">such as -nobe to disable it entirely.</font>
<SYNC Start=2746080><P Class=ENUSCC><font color="#ffff00">There are some cost considerations.</font>
<SYNC Start=2747920><P Class=ENUSCC><font color="#ffff00">BattlEye charges a monthly fee<br>per user playing the game.</font>
<SYNC Start=2751840><P Class=ENUSCC><font color="#ffff00">Since it's removed in the preservation<br>build, there will be no ongoing cost,</font>
<SYNC Start=2756000><P Class=ENUSCC><font color="#ffff00">which is important for<br>community sustainability.</font>
<SYNC Start=2759120><P Class=ENUSCC><font color="#ffff00">Community anti-cheat alternatives<br>like community servers</font>
<SYNC Start=2762560><P Class=ENUSCC><font color="#ffff00">can take cheating into their own<br>hands by using IP whitelists,</font>
<SYNC Start=2767120><P Class=ENUSCC><font color="#ffff00">firewall rules, and<br>community moderation.</font>
<SYNC Start=2769920><P Class=ENUSCC><font color="#ffff00">While not as sophisticated<br>as commercial anti-cheat,</font>
<SYNC Start=2772800><P Class=ENUSCC><font color="#ffff00">these methods can be very effective<br>for small community servers.</font>
<SYNC Start=2777040><P Class=ENUSCC><font color="#ffff00">The key is ensuring the game<br>remains playable and enjoyable,</font>
<SYNC Start=2781680><P Class=ENUSCC><font color="#ffff00">even without enterprise-level<br>anti-cheat protection.</font>
<SYNC Start=2784520><P Class=ENUSCC><font color="#ffff00">All right, so how do you handle data at<br>end of life, and protect user privacy,</font>
<SYNC Start=2790400><P Class=ENUSCC><font color="#ffff00">since, you know, you<br>can't give out players</font>
<SYNC Start=2792480><P Class=ENUSCC><font color="#ffff00">copies of databases or<br>private information?</font>
<SYNC Start=2796320><P Class=ENUSCC><font color="#ffff00">Well, player data privacy is crucial,</font>
<SYNC Start=2799520><P Class=ENUSCC><font color="#ffff00">and there are two main approaches<br>that you could use here.</font>
<SYNC Start=2803280><P Class=ENUSCC><font color="#ffff00">The first option would be to alter<br>the game to pull from local databases.</font>
<SYNC Start=2807440><P Class=ENUSCC><font color="#ffff00">You could convert player<br>and account saved data</font>
<SYNC Start=2809840><P Class=ENUSCC><font color="#ffff00">to be stored locally on<br>each player's machine.</font>
<SYNC Start=2812960><P Class=ENUSCC><font color="#ffff00">Set up in-game purchases to<br>always return as "owned,"</font>
<SYNC Start=2816720><P Class=ENUSCC><font color="#ffff00">eliminating the need<br>for server verification.</font>
<SYNC Start=2819280><P Class=ENUSCC><font color="#ffff00">This approach gives players<br>control over their own data</font>
<SYNC Start=2822160><P Class=ENUSCC><font color="#ffff00">while protecting everyone's privacy.</font>
<SYNC Start=2824400><P Class=ENUSCC><font color="#ffff00">The other option you could try</font>
<SYNC Start=2825600><P Class=ENUSCC><font color="#ffff00">is to allow users to<br>change database endpoints.</font>
<SYNC Start=2829120><P Class=ENUSCC><font color="#ffff00">Expose configuration options to allow for<br>a community to manage a shared database.</font>
<SYNC Start=2833840><P Class=ENUSCC><font color="#ffff00">This maintains the social aspects of<br>shared progression and leaderboards</font>
<SYNC Start=2838160><P Class=ENUSCC><font color="#ffff00">while keeping the infrastructure<br>community-controlled.</font>
<SYNC Start=2840960><P Class=ENUSCC><font color="#ffff00">Both approaches<br>respect player privacy</font>
<SYNC Start=2843520><P Class=ENUSCC><font color="#ffff00">while ensuring the game<br>remains functional.</font>
<SYNC Start=2846000><P Class=ENUSCC><font color="#ffff00">The choice between them depends<br>on whether your game benefits more</font>
<SYNC Start=2850000><P Class=ENUSCC><font color="#ffff00">from individual data ownership<br>or shared community progression.</font>
<SYNC Start=2854560><P Class=ENUSCC><font color="#ffff00">That's all great, but how do we<br>patch out authentication servers</font>
<SYNC Start=2857760><P Class=ENUSCC><font color="#ffff00">or have players still connect, even if<br>the game is designed to be online only?</font>
<SYNC Start=2863040><P Class=ENUSCC><font color="#ffff00">Well, converting online-only<br>games to work offline</font>
<SYNC Start=2866080><P Class=ENUSCC><font color="#ffff00">does require very careful planning.</font>
<SYNC Start=2868800><P Class=ENUSCC><font color="#ffff00">There are a couple of options though.</font>
<SYNC Start=2870480><P Class=ENUSCC><font color="#ffff00">So, option one would be<br>to utilize a local save file.</font>
<SYNC Start=2874160><P Class=ENUSCC><font color="#ffff00">You can use locally-generated<br>unique identifiers and names</font>
<SYNC Start=2878240><P Class=ENUSCC><font color="#ffff00">which can be used in a LAN context<br>or VPN context for identifying players</font>
<SYNC Start=2883040><P Class=ENUSCC><font color="#ffff00">while removing the need for accounts.</font>
<SYNC Start=2885200><P Class=ENUSCC><font color="#ffff00">This works well for games where player<br>identity is primarily about game state</font>
<SYNC Start=2890080><P Class=ENUSCC><font color="#ffff00">rather than social interaction.</font>
<SYNC Start=2892880><P Class=ENUSCC><font color="#ffff00">Option two would be account database.</font>
<SYNC Start=2896160><P Class=ENUSCC><font color="#ffff00">Provide an empty schema<br>file for your database</font>
<SYNC Start=2899040><P Class=ENUSCC><font color="#ffff00">so it can be hosted by the<br>community or on community servers.</font>
<SYNC Start=2902960><P Class=ENUSCC><font color="#ffff00">You could provide a setting in the game<br>which controls which IP it connects to,</font>
<SYNC Start=2906960><P Class=ENUSCC><font color="#ffff00">such as in a config file.</font>
<SYNC Start=2909760><P Class=ENUSCC><font color="#ffff00">This maintains the social<br>aspects of the game</font>
<SYNC Start=2912240><P Class=ENUSCC><font color="#ffff00">while making the infrastructure<br>community-controlled.</font>
<SYNC Start=2915200><P Class=ENUSCC><font color="#ffff00">Ultimately, the goal is to<br>preserve the gameplay experience</font>
<SYNC Start=2918800><P Class=ENUSCC><font color="#ffff00">while removing dependencies<br>on your proprietary infrastructure.</font>
<SYNC Start=2922880><P Class=ENUSCC><font color="#ffff00">All right, so, what if you're using<br>a programming language for your game</font>
<SYNC Start=2927760><P Class=ENUSCC><font color="#ffff00">that doesn't compile into a binary<br>like JavaScript or Python?</font>
<SYNC Start=2932720><P Class=ENUSCC><font color="#ffff00">Interpreted languages do<br>present special challenges,</font>
<SYNC Start=2935760><P Class=ENUSCC><font color="#ffff00">but they do have several solutions.</font>
<SYNC Start=2938640><P Class=ENUSCC><font color="#ffff00">The first option would<br>be code obfuscation.</font>
<SYNC Start=2941520><P Class=ENUSCC><font color="#ffff00">You can use obfuscation tools<br>to make source code difficult to read</font>
<SYNC Start=2945040><P Class=ENUSCC><font color="#ffff00">while maintaining functionality.</font>
<SYNC Start=2947040><P Class=ENUSCC><font color="#ffff00">Tools like UglifyJS for<br>JavaScript or PyArmor for Python</font>
<SYNC Start=2951840><P Class=ENUSCC><font color="#ffff00">can scramble variable names,<br>remove comments,</font>
<SYNC Start=2954560><P Class=ENUSCC><font color="#ffff00">and restructure code<br>to make it less readable.</font>
<SYNC Start=2957840><P Class=ENUSCC><font color="#ffff00">Another option would be<br>selective code release.</font>
<SYNC Start=2960640><P Class=ENUSCC><font color="#ffff00">Release only the minimum necessary<br>code for server functionality.</font>
<SYNC Start=2964400><P Class=ENUSCC><font color="#ffff00">Keep complex game logic,<br>proprietary algorithms, and business logic</font>
<SYNC Start=2968160><P Class=ENUSCC><font color="#ffff00">in separate modules that aren't<br>included in community releases.</font>
<SYNC Start=2972000><P Class=ENUSCC><font color="#ffff00">You want to focus on releasing networking,<br>basic game state management,</font>
<SYNC Start=2975760><P Class=ENUSCC><font color="#ffff00">and configuration handling.</font>
<SYNC Start=2977600><P Class=ENUSCC><font color="#ffff00">Option three would be<br>binary compilation options.</font>
<SYNC Start=2981200><P Class=ENUSCC><font color="#ffff00">Use tools that compile interpreted<br>languages to binary executables</font>
<SYNC Start=2985120><P Class=ENUSCC><font color="#ffff00">like PyInstaller for Python, pkg<br>for Node.js, or Electron for JavaScript</font>
<SYNC Start=2990080><P Class=ENUSCC><font color="#ffff00">to create distributable binaries</font>
<SYNC Start=2992480><P Class=ENUSCC><font color="#ffff00">that hide source code<br>and maintain functionality.</font>
<SYNC Start=2995840><P Class=ENUSCC><font color="#ffff00">Last up would be licensing<br>and legal protection.</font>
<SYNC Start=2998240><P Class=ENUSCC><font color="#ffff00">You could release source code</font>
<SYNC Start=2999520><P Class=ENUSCC><font color="#ffff00">under restrictive licenses<br>that allow community use,</font>
<SYNC Start=3002560><P Class=ENUSCC><font color="#ffff00">but prevent commercial exploitation.</font>
<SYNC Start=3004880><P Class=ENUSCC><font color="#ffff00">Creative Common licenses or custom<br>licenses can provide legal protection</font>
<SYNC Start=3009360><P Class=ENUSCC><font color="#ffff00">even when source code is visible.</font>
<SYNC Start=3011280><P Class=ENUSCC><font color="#ffff00">So what are some alternative<br>distribution methods that you could use</font>
<SYNC Start=3016400><P Class=ENUSCC><font color="#ffff00">if you don't want to give out your<br>source code or your server files?</font>
<SYNC Start=3020800><P Class=ENUSCC><font color="#ffff00">So if you need to<br>protect your source code,</font>
<SYNC Start=3023200><P Class=ENUSCC><font color="#ffff00">there are several<br>different approaches.</font>
<SYNC Start=3025760><P Class=ENUSCC><font color="#ffff00">Option one would be<br>container-based distribution.</font>
<SYNC Start=3029200><P Class=ENUSCC><font color="#ffff00">We've talked about Docker a lot,</font>
<SYNC Start=3030720><P Class=ENUSCC><font color="#ffff00">but you can distribute complete Docker<br>containers that include the source code,</font>
<SYNC Start=3034480><P Class=ENUSCC><font color="#ffff00">but make extraction more difficult.</font>
<SYNC Start=3036720><P Class=ENUSCC><font color="#ffff00">While technically<br>possible to extract,</font>
<SYNC Start=3038960><P Class=ENUSCC><font color="#ffff00">it requires additional<br>technical knowledge and effort.</font>
<SYNC Start=3042560><P Class=ENUSCC><font color="#ffff00">Option two would be using<br>modular architecture.</font>
<SYNC Start=3045440><P Class=ENUSCC><font color="#ffff00">Design your server architecture<br>with clear separation</font>
<SYNC Start=3048240><P Class=ENUSCC><font color="#ffff00">between core game logic<br>and infrastructure code.</font>
<SYNC Start=3051200><P Class=ENUSCC><font color="#ffff00">You can open source<br>infrastructure components</font>
<SYNC Start=3053600><P Class=ENUSCC><font color="#ffff00">while keeping game logic proprietary.</font>
<SYNC Start=3055680><P Class=ENUSCC><font color="#ffff00">Option three would be<br>configuration-driven logic.</font>
<SYNC Start=3058320><P Class=ENUSCC><font color="#ffff00">So you'll move as much game logic<br>as possible into configuration files</font>
<SYNC Start=3062160><P Class=ENUSCC><font color="#ffff00">rather than source code.</font>
<SYNC Start=3063600><P Class=ENUSCC><font color="#ffff00">This allows community customization<br>without exposing implementation details.</font>
<SYNC Start=3069040><P Class=ENUSCC><font color="#ffff00">You could also use option four,<br>which is API-based architecture.</font>
<SYNC Start=3072800><P Class=ENUSCC><font color="#ffff00">You'd create an<br>API-based architecture</font>
<SYNC Start=3075040><P Class=ENUSCC><font color="#ffff00">where game logic runs in<br>separate protected services</font>
<SYNC Start=3078480><P Class=ENUSCC><font color="#ffff00">while community-hosted<br>components handle networking</font>
<SYNC Start=3081120><P Class=ENUSCC><font color="#ffff00">and basic server management.</font>
<SYNC Start=3083040><P Class=ENUSCC><font color="#ffff00">Option five would be<br>documentation and support.</font>
<SYNC Start=3086160><P Class=ENUSCC><font color="#ffff00">Provide excellent<br>documentation and support</font>
<SYNC Start=3088400><P Class=ENUSCC><font color="#ffff00">to encourage proper use of your<br>code rather than modification.</font>
<SYNC Start=3092454><P Class=ENUSCC><font color="#ffff00">Well-documented, easy-to-use code</font>
<SYNC Start=3095040><P Class=ENUSCC><font color="#ffff00">reduces the incentive for communities<br>to modify or reverse engineer it.</font>
<SYNC Start=3099840><P Class=ENUSCC><font color="#ffff00">All right, so what if I have secrets<br>or private keys in my server binaries</font>
<SYNC Start=3105600><P Class=ENUSCC><font color="#ffff00">when releasing them?</font>
<SYNC Start=3106507><P Class=ENUSCC><font color="#ffff00">Like, how would you handle this?</font>
<SYNC Start=3108320><P Class=ENUSCC><font color="#ffff00">So you could use<br>compiler flags or build flags.</font>
<SYNC Start=3111007><P Class=ENUSCC><font color="#ffff00">This would be your primary tool here.</font>
<SYNC Start=3113267><P Class=ENUSCC><font color="#ffff00">You can use these tools to remove<br>features or secrets from your code base.</font>
<SYNC Start=3118240><P Class=ENUSCC><font color="#ffff00">You might provide an argument</font>
<SYNC Start=3120080><P Class=ENUSCC><font color="#ffff00">like -SunsetPatch which will<br>define SUNSET_PATCH variable</font>
<SYNC Start=3124080><P Class=ENUSCC><font color="#ffff00">which you can then use via #ifdefs</font>
<SYNC Start=3126560><P Class=ENUSCC><font color="#ffff00">to run a section of code or<br>otherwise back to the standard code.</font>
<SYNC Start=3130800><P Class=ENUSCC><font color="#ffff00">This approach lets you<br>maintain one codebase</font>
<SYNC Start=3133600><P Class=ENUSCC><font color="#ffff00">with different build configurations<br>for production and community releases.</font>
<SYNC Start=3137520><P Class=ENUSCC><font color="#ffff00">The community build can use<br>placeholder credentials,</font>
<SYNC Start=3140560><P Class=ENUSCC><font color="#ffff00">disable features<br>that require secrets,</font>
<SYNC Start=3142640><P Class=ENUSCC><font color="#ffff00">or use entirely different code paths<br>that don't need sensitive information.</font>
<SYNC Start=3147040><P Class=ENUSCC><font color="#ffff00">The key here is planning this<br>architecture from the beginning</font>
<SYNC Start=3150080><P Class=ENUSCC><font color="#ffff00">rather than trying to strip secrets</font>
<SYNC Start=3152080><P Class=ENUSCC><font color="#ffff00">out of an existing codebase<br>at the end of development.</font>
<SYNC Start=3155480><P Class=ENUSCC><font color="#ffff00">All right, so what would be the<br>safest way to release server binaries</font>
<SYNC Start=3161280><P Class=ENUSCC><font color="#ffff00">if you can't share<br>the whole source code?</font>
<SYNC Start=3163520><P Class=ENUSCC><font color="#ffff00">This will be in a<br>couple different parts.</font>
<SYNC Start=3166001><P Class=ENUSCC><font color="#ffff00">So, first part would be<br>security preparation.</font>
<SYNC Start=3169120><P Class=ENUSCC><font color="#ffff00">You'll want comprehensive<br>security auditing.</font>
<SYNC Start=3171680><P Class=ENUSCC><font color="#ffff00">Use static analysis tools to<br>identify potential vulnerabilities,</font>
<SYNC Start=3175360><P Class=ENUSCC><font color="#ffff00">dependency scanners to check<br>for known security issues,</font>
<SYNC Start=3178480><P Class=ENUSCC><font color="#ffff00">and penetration testing to<br>validate security measures.</font>
<SYNC Start=3182000><P Class=ENUSCC><font color="#ffff00">Dependency security management:</font>
<SYNC Start=3184240><P Class=ENUSCC><font color="#ffff00">You'll want to use tools like<br>OWASP Dependency Check, Snyk,</font>
<SYNC Start=3188400><P Class=ENUSCC><font color="#ffff00">or similar security scanning platforms<br>to identify and address security issues.</font>
<SYNC Start=3194560><P Class=ENUSCC><font color="#ffff00">You'll also want to use<br>attack service minimization.</font>
<SYNC Start=3197600><P Class=ENUSCC><font color="#ffff00">You'll want to reduce attack surface<br>by removing unnecessary features,</font>
<SYNC Start=3201440><P Class=ENUSCC><font color="#ffff00">disabling unused services,</font>
<SYNC Start=3203040><P Class=ENUSCC><font color="#ffff00">implementing input<br>validation and sanitization,</font>
<SYNC Start=3206000><P Class=ENUSCC><font color="#ffff00">and using minimal privilege<br>principles for all operations.</font>
<SYNC Start=3210080><P Class=ENUSCC><font color="#ffff00">You'll also want a<br>secure build environment.</font>
<SYNC Start=3212720><P Class=ENUSCC><font color="#ffff00">Ensure binaries are built in<br>secure, controlled environments</font>
<SYNC Start=3215840><P Class=ENUSCC><font color="#ffff00">using verified source code,<br>signed build tools,</font>
<SYNC Start=3218880><P Class=ENUSCC><font color="#ffff00">and isolated build systems that<br>prevent tampering during compilation.</font>
<SYNC Start=3223600><P Class=ENUSCC><font color="#ffff00">What's the safest way to<br>release server binaries</font>
<SYNC Start=3226720><P Class=ENUSCC><font color="#ffff00">if you can't share the whole source?</font>
<SYNC Start=3229200><P Class=ENUSCC><font color="#ffff00">Part two.</font>
<SYNC Start=3230080><P Class=ENUSCC><font color="#ffff00">All right, so you'll want to keep in mind<br>the legal and compliance framework.</font>
<SYNC Start=3235120><P Class=ENUSCC><font color="#ffff00">You want to conduct comprehensive<br>audits of all included components</font>
<SYNC Start=3238160><P Class=ENUSCC><font color="#ffff00">to verify license compatibility<br>with community distribution.</font>
<SYNC Start=3241840><P Class=ENUSCC><font color="#ffff00">Remove any components<br>with restrictive licenses</font>
<SYNC Start=3244400><P Class=ENUSCC><font color="#ffff00">that prohibit redistribution<br>or require ongoing payments.</font>
<SYNC Start=3248880><P Class=ENUSCC><font color="#ffff00">You'll want to do an<br>intellectual property review</font>
<SYNC Start=3251280><P Class=ENUSCC><font color="#ffff00">to review binaries for proprietary<br>algorithms, trade secrets,</font>
<SYNC Start=3254800><P Class=ENUSCC><font color="#ffff00">and confidential information<br>that shouldn't be distributed.</font>
<SYNC Start=3258400><P Class=ENUSCC><font color="#ffff00">With liability management,</font>
<SYNC Start=3259920><P Class=ENUSCC><font color="#ffff00">you'll want to consider the terms</font>
<SYNC Start=3261760><P Class=ENUSCC><font color="#ffff00">that limit your responsibility<br>for community-hosted servers</font>
<SYNC Start=3265120><P Class=ENUSCC><font color="#ffff00">while protecting your<br>intellectual property.</font>
<SYNC Start=3267600><P Class=ENUSCC><font color="#ffff00">You'll want to use export<br>control compliance.</font>
<SYNC Start=3269840><P Class=ENUSCC><font color="#ffff00">Consider export control regulations<br>if redistributing internationally,</font>
<SYNC Start=3274000><P Class=ENUSCC><font color="#ffff00">especially for games with encryption<br>or other controlled technologies.</font>
<SYNC Start=3277760><P Class=ENUSCC><font color="#ffff00">All right, so part three would<br>be distribution and security.</font>
<SYNC Start=3283280><P Class=ENUSCC><font color="#ffff00">So digital signing<br>and authentication:</font>
<SYNC Start=3285760><P Class=ENUSCC><font color="#ffff00">Sign all binaries with valid<br>code signing certificates</font>
<SYNC Start=3288960><P Class=ENUSCC><font color="#ffff00">to ensure authenticity<br>and prevent tampering.</font>
<SYNC Start=3292960><P Class=ENUSCC><font color="#ffff00">Use secure reputable distribution channels<br>with proper access controls.</font>
<SYNC Start=3297200><P Class=ENUSCC><font color="#ffff00">Consider multiple distribution<br>methods to ensure availability</font>
<SYNC Start=3300880><P Class=ENUSCC><font color="#ffff00">while maintaining security.</font>
<SYNC Start=3302640><P Class=ENUSCC><font color="#ffff00">Version control and tracking:</font>
<SYNC Start=3304240><P Class=ENUSCC><font color="#ffff00">Maintain clear version control</font>
<SYNC Start=3305760><P Class=ENUSCC><font color="#ffff00">with detailed changelogs<br>and security advisories.</font>
<SYNC Start=3308640><P Class=ENUSCC><font color="#ffff00">Implement mechanisms<br>to revoke or update binaries</font>
<SYNC Start=3311440><P Class=ENUSCC><font color="#ffff00">if security issues are discovered.</font>
<SYNC Start=3313520><P Class=ENUSCC><font color="#ffff00">And community communication:</font>
<SYNC Start=3315280><P Class=ENUSCC><font color="#ffff00">Establish clear communication<br>channels for security issues</font>
<SYNC Start=3318480><P Class=ENUSCC><font color="#ffff00">and provide procedures for<br>reporting and addressing</font>
<SYNC Start=3321520><P Class=ENUSCC><font color="#ffff00">security vulnerabilities<br>discovered by community members.</font>
<SYNC Start=3324880><P Class=ENUSCC><font color="#ffff00">All right, now let's discuss<br>the practical aspects</font>
<SYNC Start=3327440><P Class=ENUSCC><font color="#ffff00">of actually executing<br>your end-of-life plan.</font>
<SYNC Start=3330560><P Class=ENUSCC><font color="#ffff00">This is where all your<br>preparation pays off,</font>
<SYNC Start=3333360><P Class=ENUSCC><font color="#ffff00">but there are still important<br>considerations for the transition period.</font>
<SYNC Start=3338080><P Class=ENUSCC><font color="#ffff00">So, how do you communicate<br>to your players</font>
<SYNC Start=3340480><P Class=ENUSCC><font color="#ffff00">that the final build is unsupported<br>or community-maintained?</font>
<SYNC Start=3344640><P Class=ENUSCC><font color="#ffff00">Well, first off, clear communication is<br>essential for a successful transition.</font>
<SYNC Start=3350720><P Class=ENUSCC><font color="#ffff00">In-game messaging:</font>
<SYNC Start=3352000><P Class=ENUSCC><font color="#ffff00">You can add prominent but non-intrusive<br>notifications within the game itself.</font>
<SYNC Start=3356320><P Class=ENUSCC><font color="#ffff00">A banner or popup on<br>the main menu stating,</font>
<SYNC Start=3359360><P Class=ENUSCC><font color="#ffff00">"This is the final official release -<br>future updates will be community-driven"</font>
<SYNC Start=3364080><P Class=ENUSCC><font color="#ffff00">ensures players<br>understand the transition.</font>
<SYNC Start=3366880><P Class=ENUSCC><font color="#ffff00">Could use version<br>naming and branding.</font>
<SYNC Start=3369200><P Class=ENUSCC><font color="#ffff00">Use clear version identifiers<br>that signal the transition.</font>
<SYNC Start=3372560><P Class=ENUSCC><font color="#ffff00">The final official build might<br>be labeled something like</font>
<SYNC Start=3375600><P Class=ENUSCC><font color="#ffff00">"Final Edition" or "Legacy Version,"</font>
<SYNC Start=3378000><P Class=ENUSCC><font color="#ffff00">while community builds<br>could use naming like</font>
<SYNC Start=3380240><P Class=ENUSCC><font color="#ffff00">"Community Edition" or<br>"Preservation Build."</font>
<SYNC Start=3383360><P Class=ENUSCC><font color="#ffff00">Documentation and README files:</font>
<SYNC Start=3385680><P Class=ENUSCC><font color="#ffff00">Include comprehensive<br>documentation with the final build</font>
<SYNC Start=3388960><P Class=ENUSCC><font color="#ffff00">explaining the game's status,</font>
<SYNC Start=3390640><P Class=ENUSCC><font color="#ffff00">what features may no longer work,</font>
<SYNC Start=3392240><P Class=ENUSCC><font color="#ffff00">and where players can<br>find community support.</font>
<SYNC Start=3395040><P Class=ENUSCC><font color="#ffff00">Community handoff messaging:</font>
<SYNC Start=3396720><P Class=ENUSCC><font color="#ffff00">Frame the transition positively<br>rather than as an abandonment.</font>
<SYNC Start=3401280><P Class=ENUSCC><font color="#ffff00">Emphasize how this ensures<br>the game's long-term survival.</font>
<SYNC Start=3405120><P Class=ENUSCC><font color="#ffff00">Technical disclaimers:</font>
<SYNC Start=3406400><P Class=ENUSCC><font color="#ffff00">Be upfront about limitations:</font>
<SYNC Start=3408640><P Class=ENUSCC><font color="#ffff00">"Online features may<br>stop working at any time,"</font>
<SYNC Start=3411600><P Class=ENUSCC><font color="#ffff00">or "No official technical<br>support is available,"</font>
<SYNC Start=3414240><P Class=ENUSCC><font color="#ffff00">or even "Compatibility with future<br>operating systems is not guaranteed."</font>
<SYNC Start=3419280><P Class=ENUSCC><font color="#ffff00">Resource signposting:</font>
<SYNC Start=3420640><P Class=ENUSCC><font color="#ffff00">Provide clear directions<br>to community resources—</font>
<SYNC Start=3423520><P Class=ENUSCC><font color="#ffff00">forums, Discord servers,<br>fan sites, or GitHub repositories</font>
<SYNC Start=3427120><P Class=ENUSCC><font color="#ffff00">where players can find help,<br>mods, or continue development.</font>
<SYNC Start=3431280><P Class=ENUSCC><font color="#ffff00">Make these resources easily<br>discoverable within the game itself.</font>
<SYNC Start=3435440><P Class=ENUSCC><font color="#ffff00">Farewell content:</font>
<SYNC Start=3436640><P Class=ENUSCC><font color="#ffff00">Consider adding special content that<br>acknowledges the game's journey—</font>
<SYNC Start=3440400><P Class=ENUSCC><font color="#ffff00">perhaps as a credit sequence<br>thanking the community,</font>
<SYNC Start=3443360><P Class=ENUSCC><font color="#ffff00">or a message from<br>the development team.</font>
<SYNC Start=3446080><P Class=ENUSCC><font color="#ffff00">This creates a sense of closure while<br>celebrating your game's legacy.</font>
<SYNC Start=3452320><P Class=ENUSCC><font color="#ffff00">And legal clarity:</font>
<SYNC Start=3454080><P Class=ENUSCC><font color="#ffff00">Include clear statements about<br>what players can and cannot do</font>
<SYNC Start=3458080><P Class=ENUSCC><font color="#ffff00">with the final build.</font>
<SYNC Start=3460080><P Class=ENUSCC><font color="#ffff00">This is important.</font>
<SYNC Start=3461600><P Class=ENUSCC><font color="#ffff00">All right, so, can you<br>delist your game from a store</font>
<SYNC Start=3466000><P Class=ENUSCC><font color="#ffff00">but still let owners redownload it?</font>
<SYNC Start=3468060><P Class=ENUSCC>&nbsp;
<SYNC Start=3469060><P Class=ENUSCC><font color="#ffff00">Yes.</font>
<SYNC Start=3469760><P Class=ENUSCC><font color="#ffff00">Most platforms support this approach.</font>
<SYNC Start=3472400><P Class=ENUSCC><font color="#ffff00">So, with Steam, for example,</font>
<SYNC Start=3474480><P Class=ENUSCC><font color="#ffff00">Steam will let you still have existing<br>offline files that players can back up</font>
<SYNC Start=3479040><P Class=ENUSCC><font color="#ffff00">if you opt out of DRM.</font>
<SYNC Start=3481120><P Class=ENUSCC><font color="#ffff00">Players who already own the game<br>can continue to download and play it,</font>
<SYNC Start=3484960><P Class=ENUSCC><font color="#ffff00">even if it's no longer<br>available for purchase.</font>
<SYNC Start=3487760><P Class=ENUSCC><font color="#ffff00">With consoles,</font>
<SYNC Start=3488800><P Class=ENUSCC><font color="#ffff00">most consoles will still let you<br>re-download an existing game you own,</font>
<SYNC Start=3493120><P Class=ENUSCC><font color="#ffff00">even if the store<br>page is unavailable,</font>
<SYNC Start=3495120><P Class=ENUSCC><font color="#ffff00">and the game is not being<br>sold to new customers.</font>
<SYNC Start=3497760><P Class=ENUSCC><font color="#ffff00">This approach protects<br>existing players</font>
<SYNC Start=3500080><P Class=ENUSCC><font color="#ffff00">while preventing new sales that<br>might create support obligations</font>
<SYNC Start=3503760><P Class=ENUSCC><font color="#ffff00">that you can't fulfill.</font>
<SYNC Start=3505240><P Class=ENUSCC><font color="#ffff00">All right, so, how do you handle games<br>that are part of a larger ecosystem,</font>
<SYNC Start=3510480><P Class=ENUSCC><font color="#ffff00">such as shared accounts<br>across multiple games?</font>
<SYNC Start=3514240><P Class=ENUSCC><font color="#ffff00">Shared ecosystems require<br>some special consideration.</font>
<SYNC Start=3518800><P Class=ENUSCC><font color="#ffff00">Data export and import tools<br>for one-time migration:</font>
<SYNC Start=3523040><P Class=ENUSCC><font color="#ffff00">For example, if you're<br>using a MySQL database,</font>
<SYNC Start=3526480><P Class=ENUSCC><font color="#ffff00">you may export the tables and schema,</font>
<SYNC Start=3528800><P Class=ENUSCC><font color="#ffff00">but not provide any of the<br>user data that's private,</font>
<SYNC Start=3531760><P Class=ENUSCC><font color="#ffff00">so it can be used on<br>community servers.</font>
<SYNC Start=3534400><P Class=ENUSCC><font color="#ffff00">Converting shared currencies<br>to local alternatives:</font>
<SYNC Start=3537360><P Class=ENUSCC><font color="#ffff00">You can take a copy of the data</font>
<SYNC Start=3538960><P Class=ENUSCC><font color="#ffff00">and convert it to work<br>with one game at shutdown.</font>
<SYNC Start=3542160><P Class=ENUSCC><font color="#ffff00">Other games still in support can keep<br>using the shared account structure.</font>
<SYNC Start=3546480><P Class=ENUSCC><font color="#ffff00">"Legacy bundles" that give everyone<br>previously cross-game content:</font>
<SYNC Start=3550560><P Class=ENUSCC><font color="#ffff00">This would remove all the need to<br>do ownership checks with a server,</font>
<SYNC Start=3554960><P Class=ENUSCC><font color="#ffff00">simplifying the preservation<br>build significantly.</font>
<SYNC Start=3558240><P Class=ENUSCC><font color="#ffff00">And optional community-run<br>federation models:</font>
<SYNC Start=3561760><P Class=ENUSCC><font color="#ffff00">Let the community host their own<br>database server with accounts</font>
<SYNC Start=3565280><P Class=ENUSCC><font color="#ffff00">so the game is still playable<br>with social features intact.</font>
<SYNC Start=3568640><P Class=ENUSCC><font color="#ffff00">All right, so, how long should<br>the final end-of-life game patch</font>
<SYNC Start=3573120><P Class=ENUSCC><font color="#ffff00">be available to download?</font>
<SYNC Start=3575440><P Class=ENUSCC><font color="#ffff00">Distribution availability does<br>require long-term planning.</font>
<SYNC Start=3579680><P Class=ENUSCC><font color="#ffff00">Some practical solutions would be multiple<br>distribution channels from day one,</font>
<SYNC Start=3584800><P Class=ENUSCC><font color="#ffff00">official checksums and digital<br>signatures for authenticity,</font>
<SYNC Start=3589280><P Class=ENUSCC><font color="#ffff00">clear licensing that<br>allows community mirroring,</font>
<SYNC Start=3592720><P Class=ENUSCC><font color="#ffff00">and specific platform recommendations,<br>like GitHub, Archive.org, etc.,</font>
<SYNC Start=3598400><P Class=ENUSCC><font color="#ffff00">with protection for legacy players<br>who haven't updated yet.</font>
<SYNC Start=3602480><P Class=ENUSCC><font color="#ffff00">You'll want to keep in mind<br>a timeline approach.</font>
<SYNC Start=3605600><P Class=ENUSCC><font color="#ffff00">Six months for official<br>plus community mirrors,</font>
<SYNC Start=3608640><P Class=ENUSCC><font color="#ffff00">two years for transition<br>to community-only,</font>
<SYNC Start=3611600><P Class=ENUSCC><font color="#ffff00">and five plus years for<br>archive services as primary.</font>
<SYNC Start=3615520><P Class=ENUSCC><font color="#ffff00">The goal is ensuring the<br>preservation build remains available</font>
<SYNC Start=3618960><P Class=ENUSCC><font color="#ffff00">after you stop<br>actively supporting it.</font>
<SYNC Start=3621600><P Class=ENUSCC><font color="#ffff00">Now, how do you provide<br>a fallback experience</font>
<SYNC Start=3623920><P Class=ENUSCC><font color="#ffff00">for players who still launch<br>the game post-shutdown?</font>
<SYNC Start=3627680><P Class=ENUSCC><font color="#ffff00">Graceful connection failure<br>handling can replace error messages</font>
<SYNC Start=3631760><P Class=ENUSCC><font color="#ffff00">with helpful guidance about how<br>to connect to community servers</font>
<SYNC Start=3635280><P Class=ENUSCC><font color="#ffff00">or access offline modes.</font>
<SYNC Start=3637360><P Class=ENUSCC><font color="#ffff00">You could use an offline<br>mode implementation</font>
<SYNC Start=3639920><P Class=ENUSCC><font color="#ffff00">and provide alternative<br>gameplay options</font>
<SYNC Start=3642320><P Class=ENUSCC><font color="#ffff00">that work without any<br>server connectivity.</font>
<SYNC Start=3645440><P Class=ENUSCC><font color="#ffff00">You have community integration</font>
<SYNC Start=3647040><P Class=ENUSCC><font color="#ffff00">where you can connect players<br>to community resources</font>
<SYNC Start=3650000><P Class=ENUSCC><font color="#ffff00">where they can find active servers,<br>get help, and continue enjoying the game.</font>
<SYNC Start=3654640><P Class=ENUSCC><font color="#ffff00">The worst experience is a player<br>launching a game they paid for,</font>
<SYNC Start=3657920><P Class=ENUSCC><font color="#ffff00">and getting a cryptic error message.</font>
<SYNC Start=3660320><P Class=ENUSCC><font color="#ffff00">Instead, guide them towards ways<br>that they can continue playing.</font>
<SYNC Start=3664240><P Class=ENUSCC><font color="#ffff00">All right, so we are going to talk</font>
<SYNC Start=3665600><P Class=ENUSCC><font color="#ffff00">a little bit about tips<br>for existing games,</font>
<SYNC Start=3668720><P Class=ENUSCC><font color="#ffff00">'cause we've seen those questions,</font>
<SYNC Start=3670320><P Class=ENUSCC><font color="#ffff00">but it is important to note</font>
<SYNC Start=3671920><P Class=ENUSCC><font color="#ffff00">that the initiative states it would only<br>require new games to be built this way,</font>
<SYNC Start=3676960><P Class=ENUSCC><font color="#ffff00">and does not apply to older games.</font>
<SYNC Start=3679600><P Class=ENUSCC><font color="#ffff00">However, this may be<br>helpful for game developers</font>
<SYNC Start=3682400><P Class=ENUSCC><font color="#ffff00">who are taking their<br>existing codebase</font>
<SYNC Start=3684640><P Class=ENUSCC><font color="#ffff00">and are aiming on shipping it again<br>in a new game in the future.</font>
<SYNC Start=3690160><P Class=ENUSCC><font color="#ffff00">When making a new game,</font>
<SYNC Start=3691680><P Class=ENUSCC><font color="#ffff00">the right decisions can<br>be made from the start,</font>
<SYNC Start=3694080><P Class=ENUSCC><font color="#ffff00">which is much more cost-effective than<br>trying to retrofit preservation support</font>
<SYNC Start=3698960><P Class=ENUSCC><font color="#ffff00">into an existing game.</font>
<SYNC Start=3702160><P Class=ENUSCC><font color="#ffff00">But the initiative does not<br>intend to be retroactive.</font>
<SYNC Start=3705920><P Class=ENUSCC><font color="#ffff00">With that out of the way,<br>let's move forward.</font>
<SYNC Start=3708640><P Class=ENUSCC><font color="#ffff00">How would you decouple<br>online and offline features</font>
<SYNC Start=3712000><P Class=ENUSCC><font color="#ffff00">if the game was not built that way?</font>
<SYNC Start=3714880><P Class=ENUSCC><font color="#ffff00">Retrofitting preservation support<br>is very challenging, but possible.</font>
<SYNC Start=3720720><P Class=ENUSCC><font color="#ffff00">You'll want to document<br>existing systems:</font>
<SYNC Start=3723440><P Class=ENUSCC><font color="#ffff00">Create a detailed inventory<br>of all game features</font>
<SYNC Start=3726400><P Class=ENUSCC><font color="#ffff00">and categorize them as online-essential<br>if it requires server connectivity,</font>
<SYNC Start=3731520><P Class=ENUSCC><font color="#ffff00">or online-enhanced (better with<br>servers but can work offline).</font>
<SYNC Start=3735600><P Class=ENUSCC><font color="#ffff00">Offline-capable works independently.</font>
<SYNC Start=3738400><P Class=ENUSCC><font color="#ffff00">So identify the absolute<br>core gameplay loop</font>
<SYNC Start=3741360><P Class=ENUSCC><font color="#ffff00">that must be preserved<br>in offline mode.</font>
<SYNC Start=3744640><P Class=ENUSCC><font color="#ffff00">Architectural<br>modification strategies:</font>
<SYNC Start=3747040><P Class=ENUSCC><font color="#ffff00">So create abstraction layers between<br>game logic and online services.</font>
<SYNC Start=3751280><P Class=ENUSCC><font color="#ffff00">These abstractions can switch<br>between online implementation</font>
<SYNC Start=3754320><P Class=ENUSCC><font color="#ffff00">when servers are available,</font>
<SYNC Start=3755840><P Class=ENUSCC><font color="#ffff00">and offline implementations<br>when they're not,</font>
<SYNC Start=3758400><P Class=ENUSCC><font color="#ffff00">without changing core game mode.</font>
<SYNC Start=3760560><P Class=ENUSCC><font color="#ffff00">You'll separate online state,</font>
<SYNC Start=3762160><P Class=ENUSCC><font color="#ffff00">like global leaderboard,<br>social features, and cloud saves</font>
<SYNC Start=3765520><P Class=ENUSCC><font color="#ffff00">from offline state like local progress<br>settings and singleplayer content</font>
<SYNC Start=3769840><P Class=ENUSCC><font color="#ffff00">in your data models<br>and storage systems.</font>
<SYNC Start=3772880><P Class=ENUSCC><font color="#ffff00">This is significantly more work</font>
<SYNC Start=3774640><P Class=ENUSCC><font color="#ffff00">than building preservation<br>support from the beginning,</font>
<SYNC Start=3777360><P Class=ENUSCC><font color="#ffff00">which is why the initiative<br>focuses on new games.</font>
<SYNC Start=3780960><P Class=ENUSCC><font color="#ffff00">Which brings us to<br>a very important question.</font>
<SYNC Start=3784320><P Class=ENUSCC><font color="#ffff00">How do you design your next game<br>to make end of life easier from the start?</font>
<SYNC Start=3789840><P Class=ENUSCC><font color="#ffff00">Prevention is better than a cure<br>when it comes to preservation.</font>
<SYNC Start=3793920><P Class=ENUSCC><font color="#ffff00">Avoid unnecessary online DRM.</font>
<SYNC Start=3796640><P Class=ENUSCC><font color="#ffff00">Don't require online connectivity</font>
<SYNC Start=3798560><P Class=ENUSCC><font color="#ffff00">unless it's essential for<br>the core gameplay experience.</font>
<SYNC Start=3801840><P Class=ENUSCC><font color="#ffff00">When multiplayer is essential,<br>include things like LAN, direct IP,</font>
<SYNC Start=3806800><P Class=ENUSCC><font color="#ffff00">or peer-to-peer options as fallbacks.</font>
<SYNC Start=3809600><P Class=ENUSCC><font color="#ffff00">Always provide multiple ways for<br>players to connect to each other.</font>
<SYNC Start=3813760><P Class=ENUSCC><font color="#ffff00">Plan for server shutdown ahead<br>of time with an end-of-life plan.</font>
<SYNC Start=3818320><P Class=ENUSCC><font color="#ffff00">Document your preservation<br>strategy before you need it.</font>
<SYNC Start=3822320><P Class=ENUSCC><font color="#ffff00">And separate game logic from online<br>components as much as possible.</font>
<SYNC Start=3827440><P Class=ENUSCC><font color="#ffff00">Design your architecture so the game<br>can run independently of cloud servers</font>
<SYNC Start=3831600><P Class=ENUSCC><font color="#ffff00">and make sure you have a build<br>flag for an end-of-life build.</font>
<SYNC Start=3835360><P Class=ENUSCC><font color="#ffff00">Test your preservation mode throughout<br>development, not just at the end.</font>
<SYNC Start=3839840><P Class=ENUSCC><font color="#ffff00">Make sure your code and design<br>patterns use a driver pattern.</font>
<SYNC Start=3843520><P Class=ENUSCC><font color="#ffff00">Build flexibility into your service<br>connections from the beginning.</font>
<SYNC Start=3847600><P Class=ENUSCC><font color="#ffff00">Having this planned from the start<br>will reduce cost significantly</font>
<SYNC Start=3852400><P Class=ENUSCC><font color="#ffff00">compared to retrofitting<br>preservation support.</font>
<SYNC Start=3855120><P Class=ENUSCC><font color="#ffff00">Now, how much could it cost to convert<br>my game to one that can be preserved?</font>
<SYNC Start=3860720><P Class=ENUSCC><font color="#ffff00">That's a question that<br>we've heard a lot.</font>
<SYNC Start=3863760><P Class=ENUSCC><font color="#ffff00">The cost varies dramatically<br>based on your planning.</font>
<SYNC Start=3867200><P Class=ENUSCC><font color="#ffff00">Doing it from the start for a game<br>that has well-planned out architecture</font>
<SYNC Start=3871680><P Class=ENUSCC><font color="#ffff00">could be a few weeks to patch in<br>direct connect IP options,</font>
<SYNC Start=3875360><P Class=ENUSCC><font color="#ffff00">fallout LAN servers, etc.,</font>
<SYNC Start=3877360><P Class=ENUSCC><font color="#ffff00">and can be implemented<br>as features are developed</font>
<SYNC Start=3879840><P Class=ENUSCC><font color="#ffff00">to massively cut down<br>on cost and time.</font>
<SYNC Start=3882240><P Class=ENUSCC><font color="#ffff00">It's much easier to flip the<br>switch later to patch out DRM,</font>
<SYNC Start=3886320><P Class=ENUSCC><font color="#ffff00">release dedicated server build, etc.</font>
<SYNC Start=3888960><P Class=ENUSCC><font color="#ffff00">I mean, estimated cost could<br>be 5 to 20 (thousand) euro.</font>
<SYNC Start=3893200><P Class=ENUSCC><font color="#ffff00">Feasibility is considered easy.</font>
<SYNC Start=3895840><P Class=ENUSCC><font color="#ffff00">Two to six months may be needed for<br>a game that is not well documented,</font>
<SYNC Start=3899280><P Class=ENUSCC><font color="#ffff00">poorly planned with poor decisions<br>made during the development process.</font>
<SYNC Start=3903600><P Class=ENUSCC><font color="#ffff00">It could require digging<br>through legacy code,</font>
<SYNC Start=3906000><P Class=ENUSCC><font color="#ffff00">rebuilding client/server architecture,<br>legal reviews, documentation, and testing.</font>
<SYNC Start=3910560><P Class=ENUSCC><font color="#ffff00">It may need to pay to<br>re-license middleware</font>
<SYNC Start=3913600><P Class=ENUSCC><font color="#ffff00">or rewrite parts that<br>can't be reused easily.</font>
<SYNC Start=3916800><P Class=ENUSCC><font color="#ffff00">The estimated cost on the smaller scale<br>could be 50 to 200 thousand euro.</font>
<SYNC Start=3921440><P Class=ENUSCC><font color="#ffff00">The feasibility is really risky.</font>
<SYNC Start=3923920><P Class=ENUSCC><font color="#ffff00">This is why again the initiative<br>is only focused on new games.</font>
<SYNC Start=3928080><P Class=ENUSCC><font color="#ffff00">One of the big reasons is the<br>cost difference is enormous.</font>
<SYNC Start=3931947><P Class=ENUSCC><font color="#ffff00">All right.</font>
<SYNC Start=3932647><P Class=ENUSCC><font color="#ffff00">So, from my end,<br>that's all I've got for you.</font>
<SYNC Start=3936640><P Class=ENUSCC><font color="#ffff00">I'm going to go ahead<br>and pass this over</font>
<SYNC Start=3939840><P Class=ENUSCC><font color="#ffff00">to Matt of Alderon Games,</font>
<SYNC Start=3942400><P Class=ENUSCC><font color="#ffff00">and he's going to talk about a case<br>study for his game, <i>Path of Titans</i>.</font>
<SYNC Start=3948560><P Class=ENUSCC><font color="#00ffff">Okay, as mentioned earlier,</font>
<SYNC Start=3949920><P Class=ENUSCC><font color="#00ffff">I'll be examining <i>Path of Titans</i> to<br>show how an end-of-life plan could work.</font>
<SYNC Start=3954000><P Class=ENUSCC><font color="#00ffff">You can see here,<br>here's our game here.</font>
<SYNC Start=3956000><P Class=ENUSCC><font color="#00ffff">So, for this slide, we've<br>got a lot of microservices.</font>
<SYNC Start=3959840><P Class=ENUSCC><font color="#00ffff">So, over the years—over the past<br>five or six years making this game,</font>
<SYNC Start=3963920><P Class=ENUSCC><font color="#00ffff">we've had to add a lot of services.</font>
<SYNC Start=3966080><P Class=ENUSCC><font color="#00ffff">Most of these, however,<br>are not needed for end of life.</font>
<SYNC Start=3969200><P Class=ENUSCC><font color="#00ffff">So, we just need the, kind of,<br>the core gameplay functionality to work.</font>
<SYNC Start=3972320><P Class=ENUSCC><font color="#00ffff">So you can see, like<br>anti-cheat, and stuff like that,</font>
<SYNC Start=3974880><P Class=ENUSCC><font color="#00ffff">as per the previous<br>slides are not needed.</font>
<SYNC Start=3976720><P Class=ENUSCC><font color="#00ffff">We have our own game launcher,</font>
<SYNC Start=3978240><P Class=ENUSCC><font color="#00ffff">and this also has a<br>lot of microservices.</font>
<SYNC Start=3980480><P Class=ENUSCC><font color="#00ffff">The entire launcher though<br>probably could be removed,</font>
<SYNC Start=3982880><P Class=ENUSCC><font color="#00ffff">and people could launch the<br>game executable directly,</font>
<SYNC Start=3986000><P Class=ENUSCC><font color="#00ffff">but this will likely be supported in the<br>future, 'cause we'll ship more games.</font>
<SYNC Start=3989200><P Class=ENUSCC><font color="#00ffff">You can see here is a login screen.</font>
<SYNC Start=3991520><P Class=ENUSCC><font color="#00ffff">So what we could do is we could patch<br>the login screen out potentially,</font>
<SYNC Start=3995200><P Class=ENUSCC><font color="#00ffff">or have some kind of work around</font>
<SYNC Start=3996880><P Class=ENUSCC><font color="#00ffff">where community servers<br>could host their own database.</font>
<SYNC Start=3999680><P Class=ENUSCC><font color="#00ffff">You kind of log into that.</font>
<SYNC Start=4000800><P Class=ENUSCC><font color="#00ffff">So here's our main menu for our game.</font>
<SYNC Start=4003280><P Class=ENUSCC><font color="#00ffff">You can see we have a lot<br>of options here for example.</font>
<SYNC Start=4005713><P Class=ENUSCC><font color="#00ffff">So we have a multiplayer,<br>a singleplayer,</font>
<SYNC Start=4008280><P Class=ENUSCC><font color="#00ffff">community servers, and a store,<br>and stuff like that.</font>
<SYNC Start=4010367><P Class=ENUSCC><font color="#00ffff">So here is a slide of kind of<br>the microservices we've removed.</font>
<SYNC Start=4014800><P Class=ENUSCC><font color="#00ffff">So, you'd just be, uh, have<br>singleplayer and community servers.</font>
<SYNC Start=4018160><P Class=ENUSCC><font color="#00ffff">You can see here we<br>also have the server list.</font>
<SYNC Start=4022560><P Class=ENUSCC><font color="#00ffff">So you can see down<br>here on the bottom left,</font>
<SYNC Start=4024640><P Class=ENUSCC><font color="#00ffff">we added a direct connect option.</font>
<SYNC Start=4028000><P Class=ENUSCC><font color="#00ffff">So, when the server list<br>goes down for example,</font>
<SYNC Start=4030880><P Class=ENUSCC><font color="#00ffff">players will still be able to<br>direct connect to other servers.</font>
<SYNC Start=4034960><P Class=ENUSCC><font color="#00ffff">We have some skins in our game that<br>you can buy for a small payment.</font>
<SYNC Start=4038560><P Class=ENUSCC><font color="#00ffff">If the player purchases our skins,<br>however difficult to manage,</font>
<SYNC Start=4042320><P Class=ENUSCC><font color="#00ffff">the game could be patched to simply<br>allow all purchased content to be usable.</font>
<SYNC Start=4046480><P Class=ENUSCC><font color="#00ffff">That way you could preserve<br>players' transactions</font>
<SYNC Start=4048400><P Class=ENUSCC><font color="#00ffff">and purchase what they pay for,</font>
<SYNC Start=4049840><P Class=ENUSCC><font color="#00ffff">but also while making the content<br>available for the community.</font>
<SYNC Start=4053200><P Class=ENUSCC><font color="#00ffff">So in this case,</font>
<SYNC Start=4053920><P Class=ENUSCC><font color="#00ffff">we could patch the game to make all<br>the ownership checks return true.</font>
<SYNC Start=4056960><P Class=ENUSCC><font color="#00ffff">You can see here is an example<br>showing the in-game character editor</font>
<SYNC Start=4059680><P Class=ENUSCC><font color="#00ffff">where the premium skin is<br>unlocked for all players.</font>
<SYNC Start=4061920><P Class=ENUSCC><font color="#00ffff">Meanwhile, the other skins<br>are still unavailable in-game.</font>
<SYNC Start=4064480><P Class=ENUSCC><font color="#00ffff">So here's an example of the<br>game not gracefully handling</font>
<SYNC Start=4068560><P Class=ENUSCC><font color="#00ffff">a transaction from the store.</font>
<SYNC Start=4070960><P Class=ENUSCC><font color="#00ffff">So, these are the things that<br>are kind of likely to break</font>
<SYNC Start=4073520><P Class=ENUSCC><font color="#00ffff">when you patch out the<br>services for your game.</font>
<SYNC Start=4076080><P Class=ENUSCC><font color="#00ffff">Um, if the check is<br>too hard to remove,</font>
<SYNC Start=4078480><P Class=ENUSCC><font color="#00ffff">we could easily add<br>a error message like this,</font>
<SYNC Start=4081094><P Class=ENUSCC><font color="#00ffff">indicating to the player<br>that it's not working.</font>
<SYNC Start=4082960><P Class=ENUSCC><font color="#00ffff">So, here's the friends list and<br>kind of how it works in-game.</font>
<SYNC Start=4085680><P Class=ENUSCC><font color="#00ffff">You can see here after our<br>service has been shut down,</font>
<SYNC Start=4089167><P Class=ENUSCC><font color="#00ffff">um, you can see there's,<br>uh, retry warnings</font>
<SYNC Start=4091760><P Class=ENUSCC><font color="#00ffff">where it can't connect<br>to our friends list.</font>
<SYNC Start=4093440><P Class=ENUSCC><font color="#00ffff">So, we want to make sure<br>here that the game times out</font>
<SYNC Start=4095760><P Class=ENUSCC><font color="#00ffff">and throws an error<br>message to the player,</font>
<SYNC Start=4097840><P Class=ENUSCC><font color="#00ffff">saying it can't connect<br>to the friends list.</font>
<SYNC Start=4100000><P Class=ENUSCC><font color="#00ffff">Uh, the bug here is the game<br>gets stuck loading forever,</font>
<SYNC Start=4102800><P Class=ENUSCC><font color="#00ffff">so that might be a<br>bad sign to players.</font>
<SYNC Start=4105120><P Class=ENUSCC><font color="#00ffff">This is kind of another example where we<br>have kind of this family tree structure,</font>
<SYNC Start=4108560><P Class=ENUSCC><font color="#00ffff">where we have some character data.</font>
<SYNC Start=4110160><P Class=ENUSCC><font color="#00ffff">So this would be something<br>that we could kind of migrate</font>
<SYNC Start=4112400><P Class=ENUSCC><font color="#00ffff">to, um, a local database or something<br>that could be run by community servers.</font>
<SYNC Start=4116640><P Class=ENUSCC><font color="#00ffff">So here's an example of<br>the servers we would have.</font>
<SYNC Start=4119440><P Class=ENUSCC><font color="#00ffff">So the servers we host for<br>our official servers currently</font>
<SYNC Start=4122320><P Class=ENUSCC><font color="#00ffff">are based on this Supermicro 1U.</font>
<SYNC Start=4125600><P Class=ENUSCC><font color="#00ffff">Um, here's an example of six I have<br>in my basement at the moment,</font>
<SYNC Start=4128720><P Class=ENUSCC><font color="#00ffff">just for testing purposes.</font>
<SYNC Start=4130240><P Class=ENUSCC><font color="#00ffff">This server is a<br>really decent server,</font>
<SYNC Start=4132400><P Class=ENUSCC><font color="#00ffff">and you can see that's very similar</font>
<SYNC Start=4134000><P Class=ENUSCC><font color="#00ffff">to the kind of hardware you'd<br>have currently on your PC.</font>
<SYNC Start=4138240><P Class=ENUSCC><font color="#00ffff">And with this server,</font>
<SYNC Start=4139120><P Class=ENUSCC><font color="#00ffff">we can host four to six instances<br>of about 100 to 200 players.</font>
<SYNC Start=4143840><P Class=ENUSCC><font color="#00ffff">So, a single one of these boxes</font>
<SYNC Start=4146160><P Class=ENUSCC><font color="#00ffff">that only costs around three grand</font>
<SYNC Start=4148720><P Class=ENUSCC><font color="#00ffff">can get you 1,200 players per server.</font>
<SYNC Start=4151200><P Class=ENUSCC><font color="#00ffff">For hosting 1,200 players,</font>
<SYNC Start=4153120><P Class=ENUSCC><font color="#00ffff">this is insanely affordable,</font>
<SYNC Start=4155360><P Class=ENUSCC><font color="#00ffff">and more than enough to meet<br>the server requirements.</font>
<SYNC Start=4158080><P Class=ENUSCC><font color="#00ffff">Especially because players can<br>host these servers on their own PC.</font>
<SYNC Start=4162000><P Class=ENUSCC><font color="#00ffff">But yeah, that's all from me,<br>and thanks for watching,</font>
<SYNC Start=4164240><P Class=ENUSCC><font color="#00ffff">and hopefully this video<br>helps you preserve your game</font>
<SYNC Start=4166320><P Class=ENUSCC><font color="#00ffff">and keep it working after shutdown.</font>
<SYNC Start=4168000><P Class=ENUSCC><font color="#00ffff">I know there might be a lot of<br>additional questions we didn't get to.</font>
<SYNC Start=4171440><P Class=ENUSCC><font color="#00ffff">You might be able to leave a comment<br>and we'll get back to you on those,</font>
<SYNC Start=4174560><P Class=ENUSCC><font color="#00ffff">but we could potentially do<br>another video in the future.</font>
<SYNC Start=4177680><P Class=ENUSCC><font color="#00ffff">But hopefully for some<br>developers there in the audience</font>
<SYNC Start=4180160><P Class=ENUSCC><font color="#00ffff">that are looking for answers<br>on how to preserve their game,</font>
<SYNC Start=4183520><P Class=ENUSCC><font color="#00ffff">and how to keep things working,<br>"How is it even possible?"</font>
<SYNC Start=4186480><P Class=ENUSCC><font color="#00ffff">Hopefully we've tried to<br>answer most of those questions.</font>
<SYNC Start=4189840><P Class=ENUSCC><font color="#00ffff">Thanks everybody. Bye.</font>
<SYNC Start=4191347><P Class=ENUSCC>[Subtitles by <font color="#ffff00">Erasmus Magnus</font>]
<SYNC Start=4192084><P Class=ENUSCC>&nbsp;
</BODY>
</SAMI>

 

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in the community.

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Who's Online   0 Members, 0 Anonymous, 113 Guests (See full list)

    • There are no registered users currently online
×
×
  • Create New...

This website uses cookies, as do most websites since the 90s. By using this site, you consent to cookies. We have to say this or we get in trouble. Learn more.