<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts on Idle Daylight</title><link>https://blog.kiserai.net/posts/</link><description>Recent content in Posts on Idle Daylight</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 20 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.kiserai.net/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Private Exercise Tracking With Android, Tasker, Opentracks, and Fittrackee</title><link>https://blog.kiserai.net/posts/private-exercise-tracking-with-android-tasker-opentracks-and-fittrackee/</link><pubDate>Fri, 20 Mar 2026 00:00:00 +0000</pubDate><guid>https://blog.kiserai.net/posts/private-exercise-tracking-with-android-tasker-opentracks-and-fittrackee/</guid><description>&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;Recently I set up a private and self-hosted exercise tracker, like Strava but without sharing my data with them and their 700 advertising partners.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://codeberg.org/OpenTracksApp/OpenTracks"&gt;OpenTracks&lt;/a&gt; is a sport tracking application that completely respects your privacy, and it&amp;rsquo;s so private, that it doesn&amp;rsquo;t even request Internet permissions, and can&amp;rsquo;t upload to your Google Drive either.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/SamR1/FitTrackee"&gt;FitTrackee&lt;/a&gt; is a simple self-hosted, web-based, workout/activity tracker.&lt;/p&gt;
&lt;p&gt;OpenTracks can export activity records to a file, and FitTrackee can import them, but how can we &lt;strong&gt;automatically&lt;/strong&gt; get the record from one to the other? This post is about doing that with Tasker.&lt;/p&gt;</description><content:encoded><![CDATA[<h2 id="intro">Intro</h2>
<p>Recently I set up a private and self-hosted exercise tracker, like Strava but without sharing my data with them and their 700 advertising partners.</p>
<p><a href="https://codeberg.org/OpenTracksApp/OpenTracks">OpenTracks</a> is a sport tracking application that completely respects your privacy, and it&rsquo;s so private, that it doesn&rsquo;t even request Internet permissions, and can&rsquo;t upload to your Google Drive either.</p>
<p><a href="https://github.com/SamR1/FitTrackee">FitTrackee</a> is a simple self-hosted, web-based, workout/activity tracker.</p>
<p>OpenTracks can export activity records to a file, and FitTrackee can import them, but how can we <strong>automatically</strong> get the record from one to the other? This post is about doing that with Tasker.</p>
<h2 id="task">Task</h2>
<p><a href="https://tasker.joaoapps.com/">Tasker</a> is a total automation app for Android and here I&rsquo;ll share the task I wrote to solve this problem. It watches a folder for the activity record, then uploads it over HTTPS.</p>
<p>First, set OpenTracks to export a track to storage after recording is finished. For where, use a folder named <code>Opentracks/</code> on the root of the filesystem.</p>
<p>Then, import <a href="https://taskernet.com/shares/?user=AS35m8no7xpg6%2BR1D4HOE1YaVRTxUwQ5WQgKbpLBGojqzOTOhXCnWCM2jo1BJYdzuC8%3D&amp;id=Profile%3ANew+Opentrack#">this profile and task</a>.</p>
<p>Then:</p>
<ol>
<li>Change the URL to that of your FitTrackee instance in 3 places.</li>
<li>Change the login email and password to that of your FitTrackee user.</li>
<li>If needed, change the folder the profile watches.</li>
</ol>
<p>Finally, try recording an activity with OpenTracks and opening FitTrackee.</p>
<p><img alt="image" loading="lazy" src="https://dabor.kiserai.net/i/9005664a-c213-482c-9733-990d40b9462a.jpg"></p>
]]></content:encoded></item><item><title>Elite Dangerous Hud Mod UI on Linux</title><link>https://blog.kiserai.net/posts/elite-dangerous-hud-mod-ui-on-linux/</link><pubDate>Wed, 21 Feb 2024 00:00:00 +0000</pubDate><guid>https://blog.kiserai.net/posts/elite-dangerous-hud-mod-ui-on-linux/</guid><description>&lt;p&gt;&lt;strong&gt;2025 update&lt;/strong&gt;: With the &lt;a href="https://github.com/BlueMystical/EDHM_UI/releases"&gt;release of version 3&lt;/a&gt;, none of the below is necessary.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://bluemystical.github.io/edhm-api/"&gt;EDHM+UI&lt;/a&gt; is a tool that lets you change the colors and lighting of the HUD in Elite: Dangerous. Does it work on Linux? Yes!&lt;/p&gt;
&lt;p&gt;tl;dr: Install EDHM+UI in its &lt;em&gt;own&lt;/em&gt; WINE prefix, then point it at your E:D install.&lt;/p&gt;</description><content:encoded><![CDATA[<p><strong>2025 update</strong>: With the <a href="https://github.com/BlueMystical/EDHM_UI/releases">release of version 3</a>, none of the below is necessary.</p>
<hr>
<p><a href="https://bluemystical.github.io/edhm-api/">EDHM+UI</a> is a tool that lets you change the colors and lighting of the HUD in Elite: Dangerous.  Does it work on Linux? Yes!</p>
<p>tl;dr: Install EDHM+UI in its <em>own</em> WINE prefix, then point it at your E:D install.</p>
<p>Long version:</p>
<ol>
<li>Download the EDHM+UI installer (<code>EDHM_UI_Setup.msi</code>) from <a href="https://github.com/BlueMystical/EDHM_UI/releases/latest">GitHub</a>.</li>
<li>Choose a name for a new WINE prefix: <code>export WINEPREFIX=&quot;$HOME/.wine_edhmui&quot;</code></li>
<li>Initialize the prefix with: <code>wine wineboot</code></li>
<li>Install .NET to the prefix: <code>winetricks dotnet48</code>. This will take you through a couple installers. Just continue through any warnings the installers show.</li>
<li>Make sure the Windows version is set to one supported by EDHM+UI: <code>winetricks win10</code></li>
<li>Install EDHM+UI to the prefix (replace with the path to the .msi if it is not in the current folder): <code>wine msiexec /i ./EDHM_UI_Setup.msi</code></li>
<li>(Optional) Download an icon for a shortcut: <code>wget https://bluemystical.github.io/edhm-api/assets/img/logo.png -O &quot;${WINEPREFIX}/logo.png&quot;</code></li>
<li>Set up a .desktop file to put EDHM in your menu.  Create <code>~/.local/share/applications/edhm-ui.desktop</code> with a text editor and put the following in. Replace NAME with your username.</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span><span style="color:#f92672">[</span>Desktop Entry<span style="color:#f92672">]</span>
</span></span><span style="display:flex;"><span>Name<span style="color:#f92672">=</span>EDHM UI
</span></span><span style="display:flex;"><span>Comment<span style="color:#f92672">=</span>E:D HUD Mod UI
</span></span><span style="display:flex;"><span>Exec<span style="color:#f92672">=</span>env WINEDEBUG<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;-all&#34;</span> WINEPREFIX<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;/home/NAME/.wine_edhmui&#34;</span> <span style="color:#e6db74">&#34;/home/NAME/.wine_edhmui/drive_c/users/NAME/AppData/Local/EDHM_UI/EDHM_UI_mk2.exe&#34;</span>
</span></span><span style="display:flex;"><span>Icon<span style="color:#f92672">=</span>/home/NAME/.wine_edhmui/logo.png
</span></span><span style="display:flex;"><span>Terminal<span style="color:#f92672">=</span>false
</span></span><span style="display:flex;"><span>Type<span style="color:#f92672">=</span>Application
</span></span><span style="display:flex;"><span>Categories<span style="color:#f92672">=</span>Game
</span></span></code></pre></div><ol start="8">
<li>Start EDHM+UI. Point it at your Elite Dangerous install(s). In the following picture it references my Steam install. You can likely find your install with: <code>find ~ -name elite-dangerous-odyssey-64</code>, but be sure to use the Windows-style path like I do, usually under <code>Z:\</code>. <strong>To make the box editable/browsable, CTRL+LEFT-CLICK the pi (π) symbol first.</strong>
<img alt="image" loading="lazy" src="https://dabor.kiserai.net/i/fcd388e2-095f-4c41-87ff-69676bae4246.jpg"></li>
<li>You can then use EDHM+UI like on Windows. Select a premade theme, tweak it, add third-party plugins, and apply it. And just like Windows, you can use a hotkey (F11 by default) to reload a changed theme <em>while the game is running</em>.</li>
</ol>
<p><strong>Note</strong>: I was getting frequent crashes from EDHM UI, but I was still able to apply a theme and add a third-party plugin.</p>
<hr>
<p>References:</p>
<ol>
<li><a href="https://discord.com/channels/773552741632180224/773553131568889916/1171209291856883773">EDHM+UI Discord MrVaad</a></li>
<li><a href="https://discord.com/channels/773552741632180224/773553131568889916/1016666369774858240">EDHM+UI Discord Thorned Rose</a></li>
<li><a href="https://github.com/BlueMystical/EDHM_UI/issues/36#issuecomment-1595329861">GitHub issue</a></li>
</ol>
<hr>
<p>Tested versions:</p>
<ul>
<li>Arch Linux as of 2024-02-19</li>
<li>wine 9.2-1</li>
<li>winetricks 20240105-1</li>
<li>EDHM+UI v2.2.19</li>
</ul>]]></content:encoded></item><item><title>Scheduled Game Save Backups With Ludusavi on Linux</title><link>https://blog.kiserai.net/posts/scheduled-game-save-backups-with-ludusavi-on-linux/</link><pubDate>Mon, 04 Dec 2023 00:00:00 +0000</pubDate><guid>https://blog.kiserai.net/posts/scheduled-game-save-backups-with-ludusavi-on-linux/</guid><description>&lt;p&gt;&lt;a href="https://github.com/mtkennerly/ludusavi"&gt;Ludusavi&lt;/a&gt; is a cross-platform tool for backing up game saves and configuration. Currently, it does not have a built-in way to schedule backups, but we can use system tools to do so instead. In the post, we will use &lt;strong&gt;systemd user timers&lt;/strong&gt;.&lt;/p&gt;</description><content:encoded><![CDATA[<p><a href="https://github.com/mtkennerly/ludusavi">Ludusavi</a> is a cross-platform tool for backing up game saves and configuration.  Currently, it does not have a built-in way to schedule backups, but we can use system tools to do so instead. In the post, we will use <strong>systemd user timers</strong>.</p>
<p>The following steps make a couple assumptions:</p>
<ol start="0">
<li>You are running Linux and using systemd</li>
<li>The ludusavi command is available at <code>/usr/bin/ludusavi</code>, which it is at least for the Arch Linux <a href="https://aur.archlinux.org/packages/ludusavi">AUR package</a>.  You may need to adjust it when using another distribution or package.</li>
<li>The timer is set to run daily, or 5-10 minutes after boot. You can <a href="https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html">adjust it if you want</a>.</li>
</ol>
<h2 id="steps">Steps</h2>
<p>1. Set Ludusavi up in the GUI as you wish. Test with the Preview and Back Up buttons.
2. Create a service with <code>systemctl edit --user --force --full ludusavi-backup.service</code> and put the following text in it:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#66d9ef">[Unit]</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Description</span><span style="color:#f92672">=</span><span style="color:#e6db74">Back up game saves</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">After</span><span style="color:#f92672">=</span><span style="color:#e6db74">network.target</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">[Service]</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Type</span><span style="color:#f92672">=</span><span style="color:#e6db74">oneshot</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">ExecStart</span><span style="color:#f92672">=</span><span style="color:#e6db74">/usr/bin/ludusavi backup --force</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">[Install]</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">WantedBy</span><span style="color:#f92672">=</span><span style="color:#e6db74">default.target</span>
</span></span></code></pre></div><p>3. Create a timer with <code>systemctl edit --user --force --full ludusavi-backup.timer</code> and put the following text in it:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#66d9ef">[Unit]</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Description</span><span style="color:#f92672">=</span><span style="color:#e6db74">Back up game saves</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">RefuseManualStart</span><span style="color:#f92672">=</span><span style="color:#e6db74">no</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">RefuseManualStop</span><span style="color:#f92672">=</span><span style="color:#e6db74">no</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">[Timer]</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">OnCalendar</span><span style="color:#f92672">=</span><span style="color:#e6db74">daily</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">RandomizedDelaySec</span><span style="color:#f92672">=</span><span style="color:#e6db74">5min</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">OnBootSec</span><span style="color:#f92672">=</span><span style="color:#e6db74">5min</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">[Install]</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">WantedBy</span><span style="color:#f92672">=</span><span style="color:#e6db74">timers.target</span>
</span></span></code></pre></div><p>4. Enable the timer and run the backup with: <code>systemctl --user enable --now ludusavi-backup.timer</code></p>
<h2 id="other-commands">Other Commands</h2>
<ul>
<li>List timers: <code>systemctl --user list-timers --all</code></li>
<li>Run a backup manually: <code>systemctl --user start ludusavi-backup.service</code></li>
<li>Check logs: <code>journalctl --user -u ludusavi-backup.service</code></li>
</ul>]]></content:encoded></item><item><title>Hardening Tailscale on Arch Linux With Polkit &gt;= 106</title><link>https://blog.kiserai.net/posts/hardening-tailscale-on-arch-linux-polkit-106/</link><pubDate>Tue, 24 Oct 2023 00:00:00 +0000</pubDate><guid>https://blog.kiserai.net/posts/hardening-tailscale-on-arch-linux-polkit-106/</guid><description>&lt;p&gt;&lt;a href="https://tailscale.com/"&gt;Tailscale&lt;/a&gt; is an easy and free service for creating your own mesh VPN, built on &lt;a href="https://www.wireguard.com/"&gt;Wireguard&lt;/a&gt; and easier to scale. Tailscale does provide &lt;a href="https://tailscale.com/kb/1279/security-node-hardening/"&gt;instructions&lt;/a&gt; for hardening it - reducing its privileges to the minimum necessary to run. However, the instructions don&amp;rsquo;t fully work for Linux distributions running &lt;a href="https://discourse.ubuntu.com/t/use-of-javascript-rules-in-polkit/13892"&gt;polkit &amp;gt;= 106&lt;/a&gt;, like Arch Linux.&lt;/p&gt;</description><content:encoded><![CDATA[<p><a href="https://tailscale.com/">Tailscale</a> is an easy and free service for creating your own mesh VPN, built on <a href="https://www.wireguard.com/">Wireguard</a> and easier to scale.  Tailscale does provide <a href="https://tailscale.com/kb/1279/security-node-hardening/">instructions</a> for hardening it - reducing its privileges to the minimum necessary to run.  However, the instructions don&rsquo;t fully work for Linux distributions running <a href="https://discourse.ubuntu.com/t/use-of-javascript-rules-in-polkit/13892">polkit &gt;= 106</a>, like Arch Linux.</p>
<h1 id="solution">Solution</h1>
<p>The solution I came up with is, instead of using the Tailscale-provided polkit configuration, create <code>/etc/polkit-1/rules.d/99-tailscaled-dns.rules</code> with the following content:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#a6e22e">polkit</span>.<span style="color:#a6e22e">addRule</span>(<span style="color:#66d9ef">function</span>(<span style="color:#a6e22e">action</span>, <span style="color:#a6e22e">subject</span>) {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">action</span>.<span style="color:#a6e22e">id</span>.<span style="color:#a6e22e">startsWith</span>(<span style="color:#e6db74">&#34;org.freedesktop.resolve1.&#34;</span>) <span style="color:#f92672">&amp;&amp;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">subject</span>.<span style="color:#a6e22e">user</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;tailscaled&#34;</span>)
</span></span><span style="display:flex;"><span>    {
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">polkit</span>.<span style="color:#a6e22e">Result</span>.<span style="color:#a6e22e">YES</span>;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>});
</span></span></code></pre></div><p>Then restart it with <code>sudo systemctl restart polkit.service</code> .</p>
<p>I have filed <a href="https://github.com/tailscale/tailscale/issues/9344">#9344</a> and hope the official documentation will be updated soon, as Ubuntu 23.10 and later have finally updated polkitd.</p>]]></content:encoded></item><item><title>Save Your Stellaris Mod Playset Before a Game Update</title><link>https://blog.kiserai.net/posts/save-your-stellaris-mod-playset-before-a-game-update/</link><pubDate>Wed, 06 Sep 2023 00:00:00 +0000</pubDate><guid>https://blog.kiserai.net/posts/save-your-stellaris-mod-playset-before-a-game-update/</guid><description>&lt;p&gt;Game updates frequently break mods, and mod updates often break your saved multiplayer games because players don&amp;rsquo;t reliably get them at the same time. Here is how to use Irony Mod Manager to create a stable, unchanging mod pack. You can combine it with the Steam beta menu to have an unchanging checksum that will always work with the version of the game it was made for.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Game updates frequently break mods, and mod updates often break your saved multiplayer games because players don&rsquo;t reliably get them at the same time.  Here is how to use Irony Mod Manager to create a stable, unchanging mod pack. You can combine it with the Steam beta menu to have an unchanging checksum that will always work with the version of the game it was made for.</p>
<h2 id="step-1-make-your-mod-playset-as-usual">Step 1: Make your mod playset as usual</h2>
<p>In the Paradox launcher (or Irony if you already use it), set up your mods in a playset as usual, and test them out ingame. This is the most important step, because once we&rsquo;re done, it will be difficult to change.</p>
<p>Each mod should list its recommended load order in its description, but if you need tips for setting a load order, the wiki has guidelines <a href="https://stellaris.paradoxwikis.com/Modding#Mod_load_order">here</a>.</p>
<h2 id="step-2-get-irony-mod-manager">Step 2: Get Irony Mod Manager</h2>
<p>Download and install <a href="https://github.com/bcssov/IronyModManager/releases">Irony</a>. Instructions are on the linked page.</p>
<h2 id="step-3-create-a-merged-mod">Step 3: Create a merged mod</h2>
<h3 id="import-your-playset">Import your playset</h3>
<p>Open up Irony Mod Manager.</p>
<p>If you are an Irony user already, then select your collection.</p>
<p>Otherwise, for <strong>Paradox launcher</strong> users, make sure your desired playset is selected in the Paradox launcher, then close it.</p>
<p>Then in Irony, import from the launcher: In the top middle, click the three-dot menu next to Import, and select Import From Paradox Launcher.</p>
<p><img alt="Import menu in Irony" loading="lazy" src="https://dabor.kiserai.net/i/c6ae3c0c-e6ec-4e5c-9258-d3f872ad5c3c.jpg"></p>
<h3 id="merge-your-playset">Merge your playset</h3>
<p>Click Merge in the top right, then select Basic. Irony will create one local megamod containing the files from all mods in your playset.</p>
<p><img alt="Merge menu in Irony" loading="lazy" src="https://dabor.kiserai.net/i/61e5a5a2-235e-4e00-81ff-e4be5d6aac4b.jpg"></p>
<blockquote>
<p><strong>Aside</strong>: <em>Merge Compress</em>
If you will not be uploading this merged mod, then you can select Compress instead. The game usually loads compressed mods faster, but this will create a compressed local copy of <em>every</em> mod in the playset. More info can be found in the <a href="https://github.com/bcssov/IronyModManager/wiki/Collection-Mods">Irony documentation</a>.</p>
</blockquote>
<blockquote>
<p><strong>Aside</strong>: <em>Resolving Conflicts</em>
I do <em>not</em> recommend resolving mod conflicts in Irony unless you are an experienced modder.  A conflict is not necessarily a bug, and <em>properly</em> resolving conflicts requires in-depth knowledge of modding Stellaris and of the mods that are conflicting.  There&rsquo;s no point in clicking Resolve without thought. The easier way to resolve conflicts is by not using conflicting mods, or by setting your load order properly.</p>
</blockquote>
<h3 id="tada">Tada!</h3>
<p>Back in the Paradox launcher, you may now select your merged mod in your playset like any other mod. It will be named the same as your existing playset with <code>(Merged)</code> prepended. I recommend adding it to a new playset by itself and naming the playset after the current game version.</p>
<p><img alt="Paradox launcher menu of All Installed Mods" loading="lazy" src="https://dabor.kiserai.net/i/544ad6ad-29a2-4301-b489-5943a402f942.jpg"></p>
<h2 id="step-4-upload-to-steam-optional---for-multiplayer-games">Step 4: Upload to Steam (optional - for multiplayer games)</h2>
<ol>
<li>Upload your merged mod to Steam. More info on the <a href="https://stellaris.paradoxwikis.com/Steam_Workshop#Uploading_a_mod">Stellaris WIki</a>.
<img alt="Steam mod upload dialog" loading="lazy" src="https://dabor.kiserai.net/i/b4c58365-f69e-456b-b4b2-f4e49dce026a.jpg">.</li>
<li>Change the visibility on your mod to unlisted/friends only.</li>
<li>Give your friends the link and have them subscribe.</li>
<li>Make a playset containing only your own local copy of the merged mod. Your friends should make a playset containing only the Steam Workshop upload.</li>
<li>Congrats, the checksum will never change!</li>
</ol>
<blockquote>
<p><strong>Aside</strong>: <em>Don&rsquo;t subscribe to your own mod</em> on the workshop! (from the Stellaris Modding Den):
If your mod doesn&rsquo;t seem to be having any effect, this is often caused by a common beginner mistake: subscribing on the workshop to a mod you have in your local files. This will cause the game to ignore the workshop version, and only the local version will work. Avoid subscribing to your own mod - if the version you uploaded works, the workshop version will work. Alternatively, if you must test it, change the name of your local mod in the descriptor file. This will allow you to subscribe to the workshop version separately.</p>
</blockquote>
<h2 id="step-5-revert-to-a-previous-version-optional---after-the-game-updates">Step 5: Revert to a previous version (optional - after the game updates)</h2>
<p>Paradox provides the ability to revert to many previous game versions via the Steam Beta menu. After a new game version releases, if you want to go back and use the merged mod you created, this is where you go back to the game version it worked with.</p>
<p><img alt="Steam Beta Menu" loading="lazy" src="https://dabor.kiserai.net/i/2375d38d-a44c-4e05-a8ac-6e2626a747e9.jpg"></p>]]></content:encoded></item><item><title>Crafting a DNS-Over-HTTPS GET Request Manually</title><link>https://blog.kiserai.net/posts/crafting-a-dns-over-https-get-request-manually/</link><pubDate>Mon, 21 Aug 2023 00:00:00 +0000</pubDate><guid>https://blog.kiserai.net/posts/crafting-a-dns-over-https-get-request-manually/</guid><description>&lt;p&gt;Let&amp;rsquo;s say I want to create an external health check for &lt;a href="https://adguard.com/en/welcome.html"&gt;AdGuard&lt;/a&gt; that exercises both the HTTP interface and the DNS resolution, because I do. Unlike &lt;a href="https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/make-api-requests/"&gt;Cloudflare&lt;/a&gt;, AdGuard doesn&amp;rsquo;t take an easy &lt;code&gt;name&lt;/code&gt; parameter, and I found it quite difficult to find existing documentation on how to craft a DoH request manually. Here&amp;rsquo;s how to do it in Python.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Let&rsquo;s say I want to create an external health check for <a href="https://adguard.com/en/welcome.html">AdGuard</a> that exercises both the HTTP interface and the DNS resolution, because I do.  Unlike <a href="https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/make-api-requests/">Cloudflare</a>, AdGuard doesn&rsquo;t take an easy <code>name</code> parameter, and I found it quite difficult to find existing documentation on how to craft a DoH request manually. Here&rsquo;s how to do it in Python.</p>
<h2 id="requirements">Requirements</h2>
<ul>
<li>Python 3</li>
<li>Ideally <code>dnspython</code> &gt;= 2.2.0 (so, Ubuntu 22.04&rsquo;s <code>python3-dnspython</code> package will not work. Use pip or a <a href="https://hub.docker.com/_/python">python docker image</a>). Earlier versions will work without setting <code>id=0</code>.</li>
<li><code>requests</code> for testing</li>
</ul>
<h2 id="one-liner">One-liner</h2>
<p>Change <code>example.com</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>DOMAIN<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;example.com&#34;</span> python3 -c <span style="color:#e6db74">&#34;import os, dns.message, requests, base64; req = dns.message.make_query(os.environ[&#39;DOMAIN&#39;], &#39;A&#39;, id=0).to_wire(); print(base64.urlsafe_b64encode(req).decode(&#39;utf-8&#39;).rstrip(&#39;=&#39;))&#34;</span>
</span></span></code></pre></div><h2 id="script">Script</h2>
<p>Set DOMAIN environment variable before running:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> os
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> dns.message
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> requests
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> base64
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>req_raw <span style="color:#f92672">=</span> dns<span style="color:#f92672">.</span>message<span style="color:#f92672">.</span>make_query(os<span style="color:#f92672">.</span>environ[<span style="color:#e6db74">&#39;DOMAIN&#39;</span>], <span style="color:#e6db74">&#39;A&#39;</span>, id<span style="color:#f92672">=</span><span style="color:#ae81ff">0</span>)<span style="color:#f92672">.</span>to_wire()
</span></span><span style="display:flex;"><span>req_str <span style="color:#f92672">=</span> base64<span style="color:#f92672">.</span>urlsafe_b64encode(req_raw)<span style="color:#f92672">.</span>decode(<span style="color:#e6db74">&#39;utf-8&#39;</span>)<span style="color:#f92672">.</span>rstrip(<span style="color:#e6db74">&#39;=&#39;</span>)
</span></span><span style="display:flex;"><span>print(<span style="color:#e6db74">&#34;Query path and encoded string to use with a GET request to a DNS-over-HTTPS server:&#34;</span>)
</span></span><span style="display:flex;"><span>print(<span style="color:#e6db74">&#34;/dns-query?dns=&#34;</span> <span style="color:#f92672">+</span> req_str)
</span></span><span style="display:flex;"><span>print(<span style="color:#e6db74">&#34;</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">Testing query with Cloudflare...&#34;</span>)
</span></span><span style="display:flex;"><span>resp <span style="color:#f92672">=</span> requests<span style="color:#f92672">.</span>get(<span style="color:#e6db74">&#34;https://cloudflare-dns.com/dns-query?dns=&#34;</span> <span style="color:#f92672">+</span> req_str)
</span></span><span style="display:flex;"><span>resp<span style="color:#f92672">.</span>raise_for_status()
</span></span><span style="display:flex;"><span>msg <span style="color:#f92672">=</span> dns<span style="color:#f92672">.</span>message<span style="color:#f92672">.</span>from_wire(resp<span style="color:#f92672">.</span>content)
</span></span><span style="display:flex;"><span>print(<span style="color:#e6db74">&#34;DNS response:&#34;</span>)
</span></span><span style="display:flex;"><span>print(msg)
</span></span></code></pre></div><h2 id="example-output">Example output</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>$ DOMAIN<span style="color:#f92672">=</span>example.com python3 ./doh.py
</span></span><span style="display:flex;"><span>Query path and encoded string to use with a GET request to a DNS-over-HTTPS server:
</span></span><span style="display:flex;"><span>/dns-query?dns<span style="color:#f92672">=</span>AAABAAABAAAAAAAAB2V4YW1wbGUDY29tAAABAAE
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Testing query with Cloudflare...
</span></span><span style="display:flex;"><span>DNS response:
</span></span><span style="display:flex;"><span>id <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>opcode QUERY
</span></span><span style="display:flex;"><span>rcode NOERROR
</span></span><span style="display:flex;"><span>flags QR RD RA
</span></span><span style="display:flex;"><span>;QUESTION
</span></span><span style="display:flex;"><span>example.com. IN A
</span></span><span style="display:flex;"><span>;ANSWER
</span></span><span style="display:flex;"><span>example.com. <span style="color:#ae81ff">82324</span> IN A 93.184.216.34
</span></span><span style="display:flex;"><span>;AUTHORITY
</span></span><span style="display:flex;"><span>;ADDITIONAL
</span></span></code></pre></div><h2 id="references">References</h2>
<p><a href="https://github.com/dohwg/draft-ietf-doh-dns-over-https/issues/30#issuecomment-345850479">https://github.com/dohwg/draft-ietf-doh-dns-over-https/issues/30#issuecomment-345850479</a></p>
<p><a href="https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/make-api-requests/dns-wireformat/">https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/make-api-requests/dns-wireformat/</a></p>
<p><a href="https://datatracker.ietf.org/doc/html/rfc8484#section-4.1">https://datatracker.ietf.org/doc/html/rfc8484#section-4.1</a></p>]]></content:encoded></item><item><title>Final Fantasy 14 Battle Effects Macro</title><link>https://blog.kiserai.net/posts/final-fantasy-14-battle-effects-macro/</link><pubDate>Sun, 20 Aug 2023 00:00:00 +0000</pubDate><guid>https://blog.kiserai.net/posts/final-fantasy-14-battle-effects-macro/</guid><description>&lt;p&gt;Originally posted on &lt;a href="https://www.reddit.com/r/ffxiv/comments/s3y7rp/titans_arse_too_big_for_you_holy_hurting_your/"&gt;reddit&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The following macro will:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Make every summoner summon small on your screen (this is a &lt;em&gt;client-side&lt;/em&gt; setting)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Keep&lt;/em&gt; limited party effects (bubbles, etc)&lt;/li&gt;
&lt;li&gt;Turn off effects outside your party&lt;/li&gt;
&lt;li&gt;Also turn down sound effects&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Add this macro and the second one to a bar if you want to toggle back and forth.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Originally posted on <a href="https://www.reddit.com/r/ffxiv/comments/s3y7rp/titans_arse_too_big_for_you_holy_hurting_your/">reddit</a>.</p>
<p>The following macro will:</p>
<ul>
<li>Make every summoner summon small on your screen (this is a <em>client-side</em> setting)</li>
<li><em>Keep</em> limited party effects (bubbles, etc)</li>
<li>Turn off effects outside your party</li>
<li>Also turn down sound effects</li>
</ul>
<p>Add this macro and the second one to a bar if you want to toggle back and forth.</p>
<h2 id="thals-balls-man-i-cant-see-anything-macro">THAL&rsquo;S BALLS, MAN, I CAN&rsquo;T SEE ANYTHING macro:</h2>
<pre tabindex="0"><code>    /micon &#34;shut eyes&#34; emote
    /bfx party simple
    /bfx other off
    /petsize all small
    /soundeffectsparty 50
    /soundeffectsother 20
</code></pre><p>Use the following to turn it all back up:</p>
<h2 id="on-second-thought-i-want-to-go-blind-macro">ON SECOND THOUGHT I WANT TO GO BLIND macro:</h2>
<pre tabindex="0"><code>    /micon &#34;Examine Self&#34; emote
    /bfx party all
    /bfx other all
    /petsize all large
    /soundeffectsparty 100
    /soundeffectsother 100
</code></pre><p>Command reference:</p>
<ul>
<li><a href="https://na.finalfantasyxiv.com/lodestone/playguide/db/text_command/ded8f6e43d6/">/petsize</a></li>
<li><a href="https://na.finalfantasyxiv.com/lodestone/playguide/db/text_command/9241c2b27da/">/bfx</a></li>
</ul>]]></content:encoded></item><item><title>Zabbix Web Interface With LLDAP</title><link>https://blog.kiserai.net/posts/zabbix-web-interface-with-lldap/</link><pubDate>Tue, 08 Aug 2023 00:00:00 +0000</pubDate><guid>https://blog.kiserai.net/posts/zabbix-web-interface-with-lldap/</guid><description>&lt;p&gt;I wrote a &lt;a href="https://github.com/lldap/lldap/blob/main/example_configs/zabbix-web.md"&gt;document&lt;/a&gt; for configuring &lt;a href="https://www.zabbix.com/"&gt;Zabbix&lt;/a&gt; 6.0 web interface to use &lt;a href="https://github.com/lldap/lldap"&gt;LLDAP&lt;/a&gt; for logins. Here is the same information, with pictures.&lt;/p&gt;</description><content:encoded><![CDATA[<p>I wrote a <a href="https://github.com/lldap/lldap/blob/main/example_configs/zabbix-web.md">document</a> for configuring <a href="https://www.zabbix.com/">Zabbix</a> 6.0 web interface to use <a href="https://github.com/lldap/lldap">LLDAP</a> for logins. Here is the same information, with pictures.</p>
<p>This example is for the Zabbix Web interface <strong>version 6.0</strong>, which is the supported LTS version as of August 2023.  Later versions have additional options.</p>
<p>For the associated 6.0 documentation see <a href="https://www.zabbix.com/documentation/6.0/en/manual/web_interface/frontend_sections/administration/authentication">here</a> and for the current manual see <a href="https://www.zabbix.com/documentation/current/en/manual">here</a>.</p>
<p><em><strong>Note that an LDAP user must exist in Zabbix Web as well, however its Zabbix password will not be used.</strong></em> When creating the user in Zabbix, the user should also be added to your desired Zabbix roles/groups.</p>
<h2 id="configure-ldap-settings">Configure LDAP Settings</h2>
<ul>
<li>Log in to the web interface as an admin</li>
<li>Navigate to <code>Administration &gt; Authentication &gt; LDAP Settings</code></li>
</ul>
<p>Here&rsquo;s a picture, see below for details:
<img alt="picture of the below settings in the Zabbix web configuration area" loading="lazy" src="https://dabor.kiserai.net/i/cee7e227-16c2-4a0f-86e8-5bf2adcc4184.jpg"></p>
<h3 id="enable-ldap-authentication">Enable LDAP authentication</h3>
<p>Checked</p>
<h3 id="ldap-host">LDAP host</h3>
<p>URI of your LLDAP host. Example: <code>ldap://ldap.example.com:3890</code> or <code>ldaps://ldap.example.com:6360</code> for TLS.</p>
<h3 id="port">Port</h3>
<p>Not used when using a full LDAP URI as above, but feel free to put <code>3890</code> or <code>6360</code> for TLS.</p>
<h3 id="base-dn">Base DN</h3>
<p>Your LLDAP_LDAP_BASE. Example: <code>dc=example,dc=com</code></p>
<h3 id="search-attribute">Search attribute</h3>
<p><code>uid</code></p>
<h3 id="case-sensitive-login">Case-sensitive login</h3>
<p>Checked</p>
<h3 id="bind-dn">Bind DN</h3>
<p><code>uid=admin,ou=people,dc=example,dc=com</code></p>
<p>Alternately, it is recommended that you create a separate user account (e.g, <code>bind_user</code>) instead of <code>admin</code> for sharing Bind credentials with other services. The <code>bind_user</code> should be a member of the <code>lldap_strict_readonly</code> group to limit access to your LDAP configuration in LLDAP.</p>
<h3 id="bind-password">Bind password</h3>
<p>Password for the above bind DN user.</p>
<h3 id="test-authentication">Test authentication</h3>
<p>The test authentication <code>Login</code> and <code>User password</code> must be used to check the connection and whether an LDAP user can be successfully authenticated. Zabbix will not activate LDAP authentication if it is unable to authenticate the test user.</p>
<h2 id="enable-ldap-in-zabbix-web">Enable LDAP in Zabbix Web</h2>
<ul>
<li>Navigate to <code>Administration &gt; Authentication &gt; Authentication</code> (the first tab)</li>
<li>Set &ldquo;Default authentication&rdquo; to &ldquo;LDAP&rdquo;</li>
<li>Click &ldquo;Update&rdquo;</li>
</ul>]]></content:encoded></item><item><title>Elite Dangerous Utilities</title><link>https://blog.kiserai.net/posts/elite-dangerous-utilities/</link><pubDate>Wed, 28 Jun 2023 00:00:00 +0000</pubDate><guid>https://blog.kiserai.net/posts/elite-dangerous-utilities/</guid><description>&lt;p&gt;&lt;a href="https://siriuscorp.cc/"&gt;Sirius Corporation Covert Creations (SCCC)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Not affiliated with Li-Yong Rui, PowerPlay, nor any player minor factions. Still secretly controlling a galaxy near you.&lt;/p&gt;
&lt;h2 id="bounty-hunting-spot-finder"&gt;Bounty Hunting Spot Finder&lt;/h2&gt;
&lt;p&gt;Find RES/CNB near you, dynamically updated as the galaxy changes.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://siriuscorp.cc/bounty/"&gt;https://siriuscorp.cc/bounty/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="ship-anatomy-rehost"&gt;Ship Anatomy (Rehost)&lt;/h2&gt;
&lt;p&gt;Rehost of Anton Natarov&amp;rsquo;s interactive ship anatomy tool.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://siriuscorp.cc/edsa/"&gt;https://siriuscorp.cc/edsa/&lt;/a&gt;&lt;/p&gt;</description><content:encoded><![CDATA[<p><a href="https://siriuscorp.cc/">Sirius Corporation Covert Creations (SCCC)</a></p>
<p>Not affiliated with Li-Yong Rui, PowerPlay, nor any player minor factions. Still secretly controlling a galaxy near you.</p>
<h2 id="bounty-hunting-spot-finder">Bounty Hunting Spot Finder</h2>
<p>Find RES/CNB  near you, dynamically updated as the galaxy changes.</p>
<p><a href="https://siriuscorp.cc/bounty/">https://siriuscorp.cc/bounty/</a></p>
<h2 id="ship-anatomy-rehost">Ship Anatomy (Rehost)</h2>
<p>Rehost of Anton Natarov&rsquo;s interactive ship anatomy tool.</p>
<p><a href="https://siriuscorp.cc/edsa/">https://siriuscorp.cc/edsa/</a></p>
<h2 id="guides">Guides</h2>
<p>Various guides on mining, Robigo, etc.</p>
<p><a href="https://siriuscorp.cc/guides/">https://siriuscorp.cc/guides/</a></p>
<h2 id="community-goal-progress-graphs">Community Goal Progress Graphs</h2>
<p><a href="https://siriuscorp.cc/goal/">https://siriuscorp.cc/goal/</a></p>
<p><img alt="Graph" loading="lazy" src="https://siriuscorp.cc/goal/776-775-perhr.webp"></p>
<h2 id="space-conflict-zone--war-finder">Space Conflict Zone / War Finder</h2>
<p><a href="https://siriuscorp.cc/conflict/">https://siriuscorp.cc/conflict/</a></p>]]></content:encoded></item><item><title>Stellaris Custom Empire: Prime Collective (from Peter F. Hamilton's Commonwealth saga)</title><link>https://blog.kiserai.net/posts/stellaris-custom-empire-prime-collective-from-peter-f/</link><pubDate>Wed, 28 Jun 2023 00:00:00 +0000</pubDate><guid>https://blog.kiserai.net/posts/stellaris-custom-empire-prime-collective-from-peter-f/</guid><description>&lt;h2 id="requirements"&gt;Requirements&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://steamcommunity.com/sharedfiles/filedetails/?id=682691478"&gt;Cybrxkhan&amp;rsquo;s Assortment of Namelists for Stellaris&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="description"&gt;DESCRIPTION&lt;/h2&gt;
&lt;p&gt;The Primes are a xenophobic, aggressively expansionist alien species originating in the Dyson Alpha system. &amp;hellip; The race is extremely xenophobic, to the point that individual immotiles view the very existence of other independent life forms as a threat to their continued existence. &amp;hellip; This xenophobia is so extreme that the Prime exterminated all mobile life on their home world, lest it ever become a threat, and upon gaining nuclear technology immediately and unhesitatingly used it against each other, stopping only when the damage to their world became so extreme that it threatened the survival of the remaining immotiles. Upon contact with humans, the immotile collective known as MorningLightMountain immediately deployed wormhole technology to eliminate every other immotile, leaving it and its offspring as the only representative of its race on the homeworld. It then proceeded to immediately turn all its forces against humanity, as the very possibility of not destroying them was beyond its comprehension.&lt;/p&gt;</description><content:encoded><![CDATA[<h2 id="requirements">Requirements</h2>
<p><a href="https://steamcommunity.com/sharedfiles/filedetails/?id=682691478">Cybrxkhan&rsquo;s Assortment of Namelists for Stellaris</a></p>
<h2 id="description">DESCRIPTION</h2>
<p>The Primes are a xenophobic, aggressively expansionist alien species originating in the Dyson Alpha system. &hellip; The race is extremely xenophobic, to the point that individual immotiles view the very existence of other independent life forms as a threat to their continued existence. &hellip; This xenophobia is so extreme that the Prime exterminated all mobile life on their home world, lest it ever become a threat, and upon gaining nuclear technology immediately and unhesitatingly used it against each other, stopping only when the damage to their world became so extreme that it threatened the survival of the remaining immotiles. Upon contact with humans, the immotile collective known as MorningLightMountain immediately deployed wormhole technology to eliminate every other immotile, leaving it and its offspring as the only representative of its race on the homeworld. It then proceeded to immediately turn all its forces against humanity, as the very possibility of not destroying them was beyond its comprehension.</p>
<h2 id="picture">Picture</h2>
<p><img alt="A picture of the in-game empire summary screen" loading="lazy" src="https://dabor.kiserai.net/i/13c36cba-6549-4bbd-87d5-dce31688ca11.jpg"></p>
<h2 id="code-384">Code (3.8.4)</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span><span style="color:#e6db74">&#34;Prime Collective&#34;</span><span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>        key<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Prime Collective&#34;</span>
</span></span><span style="display:flex;"><span>        ship_prefix<span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>                key<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;ISS&#34;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>        species<span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>                class<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;LITHOID&#34;</span>
</span></span><span style="display:flex;"><span>                portrait<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;lith8&#34;</span>
</span></span><span style="display:flex;"><span>                species_name<span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>                        key<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Prime&#34;</span>
</span></span><span style="display:flex;"><span>                        literal<span style="color:#f92672">=</span>yes
</span></span><span style="display:flex;"><span>                <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>                species_plural<span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>                        key<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Primes&#34;</span>
</span></span><span style="display:flex;"><span>                        literal<span style="color:#f92672">=</span>yes
</span></span><span style="display:flex;"><span>                <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>                species_adjective<span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>                        key<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Prime&#34;</span>
</span></span><span style="display:flex;"><span>                        literal<span style="color:#f92672">=</span>yes
</span></span><span style="display:flex;"><span>                <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>                species_bio<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;The Primes are a xenophobic, aggressively expansionist alien species originating in the Dyson Alpha system. ... The race is extremely xenophobic, to the point that individual immotiles view the very existence of other independent life forms as a threat to their continued existence. ... This xenophobia is so extreme that the Prime exterminated all mobile life on their home world, lest it ever become a threat, and upon gaining nuclear technology immediately and unhesitatingly used it against each other, stopping only when the damage to their world became so extreme that it threatened the survival of the remaining immotiles.&#34;</span>
</span></span><span style="display:flex;"><span>                name_list<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;cybrxkhan_abstract_3&#34;</span>
</span></span><span style="display:flex;"><span>                gender<span style="color:#f92672">=</span>indeterminable
</span></span><span style="display:flex;"><span>                trait<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;trait_lithoid&#34;</span>
</span></span><span style="display:flex;"><span>                trait<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;trait_hive_mind&#34;</span>
</span></span><span style="display:flex;"><span>                trait<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;trait_survivor&#34;</span>
</span></span><span style="display:flex;"><span>                trait<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;trait_industrious&#34;</span>
</span></span><span style="display:flex;"><span>                trait<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;trait_natural_physicists&#34;</span>
</span></span><span style="display:flex;"><span>                trait<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;trait_strong&#34;</span>
</span></span><span style="display:flex;"><span>                trait<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;trait_repugnant&#34;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>        name<span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>                key<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Prime Collective&#34;</span>
</span></span><span style="display:flex;"><span>                literal<span style="color:#f92672">=</span>yes
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>        adjective<span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>                key<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;%ADJ%&#34;</span>
</span></span><span style="display:flex;"><span>                variables<span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>                        <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>                                key<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;adjective&#34;</span>
</span></span><span style="display:flex;"><span>                                value<span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>                                        key<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Primes&#34;</span>
</span></span><span style="display:flex;"><span>                                        literal<span style="color:#f92672">=</span>yes
</span></span><span style="display:flex;"><span>                                <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>                        <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>                <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>        authority<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;auth_hive_mind&#34;</span>
</span></span><span style="display:flex;"><span>        government<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;gov_devouring_swarm&#34;</span>
</span></span><span style="display:flex;"><span>        planet_name<span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>                key<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Dyson Alpha Arche&#34;</span>
</span></span><span style="display:flex;"><span>                literal<span style="color:#f92672">=</span>yes
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>        planet_class<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;pc_tropical&#34;</span>
</span></span><span style="display:flex;"><span>        system_name<span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>                key<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Dyson Pair&#34;</span>
</span></span><span style="display:flex;"><span>                literal<span style="color:#f92672">=</span>yes
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>        initializer<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;custom_starting_init_03&#34;</span>
</span></span><span style="display:flex;"><span>        graphical_culture<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;arthropoid_01&#34;</span>
</span></span><span style="display:flex;"><span>        city_graphical_culture<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;arthropoid_01&#34;</span>
</span></span><span style="display:flex;"><span>        empire_flag<span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>                icon<span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>                        category<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;lithoid&#34;</span>
</span></span><span style="display:flex;"><span>                        file<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;lithoid_12.dds&#34;</span>
</span></span><span style="display:flex;"><span>                <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>                background<span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>                        category<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;backgrounds&#34;</span>
</span></span><span style="display:flex;"><span>                        file<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;inverted_v.dds&#34;</span>
</span></span><span style="display:flex;"><span>                <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>                colors<span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>                        <span style="color:#e6db74">&#34;red_orange&#34;</span>
</span></span><span style="display:flex;"><span>                        <span style="color:#e6db74">&#34;yellow&#34;</span>
</span></span><span style="display:flex;"><span>                        <span style="color:#e6db74">&#34;black&#34;</span>
</span></span><span style="display:flex;"><span>                        <span style="color:#e6db74">&#34;null&#34;</span>
</span></span><span style="display:flex;"><span>                <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>        ruler<span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>                gender<span style="color:#f92672">=</span>indeterminable
</span></span><span style="display:flex;"><span>                name<span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>                        full_names<span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>                                key<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;MorningLightMountain&#34;</span>
</span></span><span style="display:flex;"><span>                                literal<span style="color:#f92672">=</span>yes
</span></span><span style="display:flex;"><span>                        <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>                <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>                portrait<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;lith8&#34;</span>
</span></span><span style="display:flex;"><span>                texture<span style="color:#f92672">=</span><span style="color:#ae81ff">1</span>
</span></span><span style="display:flex;"><span>                attachment<span style="color:#f92672">=</span><span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>                clothes<span style="color:#f92672">=</span><span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>                ruler_title<span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>                        key<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Immotile&#34;</span>
</span></span><span style="display:flex;"><span>                        literal<span style="color:#f92672">=</span>yes
</span></span><span style="display:flex;"><span>                <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>                trait<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;trait_ruler_warlike&#34;</span>
</span></span><span style="display:flex;"><span>                leader_class<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;general&#34;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>        spawn_as_fallen<span style="color:#f92672">=</span>no
</span></span><span style="display:flex;"><span>        ignore_portrait_duplication<span style="color:#f92672">=</span>no
</span></span><span style="display:flex;"><span>        room<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;lithoid_room&#34;</span>
</span></span><span style="display:flex;"><span>        spawn_enabled<span style="color:#f92672">=</span>always
</span></span><span style="display:flex;"><span>        ethic<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;ethic_gestalt_consciousness&#34;</span>
</span></span><span style="display:flex;"><span>        civics<span style="color:#f92672">={</span>
</span></span><span style="display:flex;"><span>                <span style="color:#e6db74">&#34;civic_hive_devouring_swarm&#34;</span>
</span></span><span style="display:flex;"><span>                <span style="color:#e6db74">&#34;civic_hive_natural_neural_network&#34;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>        origin<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;origin_post_apocalyptic&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">}</span>
</span></span></code></pre></div>]]></content:encoded></item><item><title>Stellaris Mods</title><link>https://blog.kiserai.net/posts/stellaris-mods/</link><pubDate>Wed, 28 Jun 2023 00:00:00 +0000</pubDate><guid>https://blog.kiserai.net/posts/stellaris-mods/</guid><description>&lt;p&gt;See on: &lt;a href="https://steamcommunity.com/id/forbiddenlake/myworkshopfiles/?appid=281990"&gt;Steam Workshop&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="elite-dangerous-star-names"&gt;Elite: Dangerous Star Names&lt;/h2&gt;
&lt;p&gt;Add tons of star names from Elite: Dangerous to your next galaxy.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://steamcommunity.com/sharedfiles/filedetails/?id=2904925738"&gt;Steam&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="combined-repeatable-techs"&gt;Combined Repeatable Techs&lt;/h2&gt;
&lt;p&gt;Combines several pairs of vanilla repeatable technologies in to one, and halves their effect.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://steamcommunity.com/sharedfiles/filedetails/?id=2963390128"&gt;Steam&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="hive-namelists-restored"&gt;Hive Namelists Restored&lt;/h2&gt;
&lt;p&gt;Re-adds the Hive 1 and 2 namelists from Stellaris 3.6: Autonomous Drone, Motile Organ, etc.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://steamcommunity.com/sharedfiles/filedetails/?id=2947933598"&gt;Steam&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="lemonade-names"&gt;Lemonade Names&lt;/h2&gt;
&lt;p&gt;Are you a determined exterminator born from robots sent to a landfill, populating the worst planets in the galaxy? This is the name list for you!&lt;/p&gt;</description><content:encoded><![CDATA[<p>See on: <a href="https://steamcommunity.com/id/forbiddenlake/myworkshopfiles/?appid=281990">Steam Workshop</a>.</p>
<h2 id="elite-dangerous-star-names">Elite: Dangerous Star Names</h2>
<p>Add tons of star names from Elite: Dangerous to your next galaxy.</p>
<p><a href="https://steamcommunity.com/sharedfiles/filedetails/?id=2904925738">Steam</a></p>
<h2 id="combined-repeatable-techs">Combined Repeatable Techs</h2>
<p>Combines several pairs of vanilla repeatable technologies in to one, and halves their effect.</p>
<p><a href="https://steamcommunity.com/sharedfiles/filedetails/?id=2963390128">Steam</a></p>
<h2 id="hive-namelists-restored">Hive Namelists Restored</h2>
<p>Re-adds the Hive 1 and 2 namelists from Stellaris 3.6: Autonomous Drone, Motile Organ, etc.</p>
<p><a href="https://steamcommunity.com/sharedfiles/filedetails/?id=2947933598">Steam</a></p>
<h2 id="lemonade-names">Lemonade Names</h2>
<p>Are you a determined exterminator born from robots sent to a landfill, populating the worst planets in the galaxy? This is the name list for you!</p>
<p><a href="https://steamcommunity.com/sharedfiles/filedetails/?id=2948257189">Steam</a></p>
]]></content:encoded></item><item><title>Stellaris Console Snippets</title><link>https://blog.kiserai.net/posts/stellaris-console-snippets/</link><pubDate>Tue, 27 Jun 2023 00:00:00 +0000</pubDate><guid>https://blog.kiserai.net/posts/stellaris-console-snippets/</guid><description>&lt;h2 id="see-planet-size-of-targeted-planet"&gt;See planet size of targeted planet&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;trigger planet_size &lt;span style="color:#f92672"&gt;=&lt;/span&gt; trigger:planet_size
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="find-the-biggest-barren-planet-within-your-borders"&gt;Find the biggest barren planet within your borders&lt;/h2&gt;
&lt;p&gt;Useful to decide what to use Azaryn&amp;rsquo;s power on. If you want to find more, change the number in &lt;code&gt;position = 0&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;effect ordered_planet_within_border &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;{&lt;/span&gt; limit &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;{&lt;/span&gt; planet_size &amp;gt; &lt;span style="color:#ae81ff"&gt;25&lt;/span&gt; is_planet_class &lt;span style="color:#f92672"&gt;=&lt;/span&gt; pc_barren NOT &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;{&lt;/span&gt; has_modifier &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;terraforming_candidate&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;}&lt;/span&gt; &lt;span style="color:#f92672"&gt;}&lt;/span&gt; position &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; order_by &lt;span style="color:#f92672"&gt;=&lt;/span&gt; trigger:planet_size inverse &lt;span style="color:#f92672"&gt;=&lt;/span&gt; no set_variable &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;{&lt;/span&gt; which &lt;span style="color:#f92672"&gt;=&lt;/span&gt; Size_Of_Planet value &lt;span style="color:#f92672"&gt;=&lt;/span&gt; trigger:planet_size &lt;span style="color:#f92672"&gt;}&lt;/span&gt; custom_tooltip &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;[This.GetName] is an Azaryn candidate, in system [This.System.GetName]&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;}&lt;/span&gt; &lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="find-hidden-presapients-in-your-empire"&gt;Find hidden presapients in your empire&lt;/h2&gt;
&lt;p&gt;You may see the notification for Unspent Trait Points but be unable to find the species on your empire screen, nor on your species screen, nor on any of your colonies. This is because presapients on planets within your borders spawn the notification even if you do not have the body colonized, and they can even spawn on barren planets which hides the Population tab entirely.&lt;/p&gt;
&lt;p&gt;Use this to find them (it is two lines - just paste in to the console):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;effect space_owner &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;{&lt;/span&gt; every_planet_within_border &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;{&lt;/span&gt; limit &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;{&lt;/span&gt; is_colony &lt;span style="color:#f92672"&gt;=&lt;/span&gt; no &lt;span style="color:#f92672"&gt;}&lt;/span&gt; every_owned_species &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;{&lt;/span&gt; limit &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;{&lt;/span&gt; is_archetype &lt;span style="color:#f92672"&gt;=&lt;/span&gt; PRESAPIENT &lt;span style="color:#f92672"&gt;}&lt;/span&gt; custom_tooltip &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;in system [Prev.System.GetName]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;}&lt;/span&gt; &lt;span style="color:#f92672"&gt;}&lt;/span&gt; &lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><content:encoded><![CDATA[<h2 id="see-planet-size-of-targeted-planet">See planet size of targeted planet</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>trigger planet_size <span style="color:#f92672">=</span> trigger:planet_size
</span></span></code></pre></div><h2 id="find-the-biggest-barren-planet-within-your-borders">Find the biggest barren planet within your borders</h2>
<p>Useful to decide what to use Azaryn&rsquo;s power on. If you want to find more, change the number in <code>position = 0</code>.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>effect ordered_planet_within_border <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> limit <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> planet_size &gt; <span style="color:#ae81ff">25</span> is_planet_class <span style="color:#f92672">=</span> pc_barren NOT <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> has_modifier <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;terraforming_candidate&#34;</span> <span style="color:#f92672">}</span> <span style="color:#f92672">}</span> position <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span> order_by <span style="color:#f92672">=</span> trigger:planet_size inverse <span style="color:#f92672">=</span> no set_variable <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> which <span style="color:#f92672">=</span> Size_Of_Planet value <span style="color:#f92672">=</span> trigger:planet_size <span style="color:#f92672">}</span> custom_tooltip <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;[This.GetName] is an Azaryn candidate, in system [This.System.GetName]&#34;</span> <span style="color:#f92672">}</span> <span style="color:#f92672">}</span>
</span></span></code></pre></div><h2 id="find-hidden-presapients-in-your-empire">Find hidden presapients in your empire</h2>
<p>You may see the notification for Unspent Trait Points but be unable to find the species on your empire screen, nor on your species screen, nor on any of your colonies.  This is because presapients on planets within your borders spawn the notification even if you do not have the body colonized, and they can even spawn on barren planets which hides the Population tab entirely.</p>
<p>Use this to find them (it is two lines - just paste in to the console):</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>effect space_owner <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> every_planet_within_border <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> limit <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> is_colony <span style="color:#f92672">=</span> no <span style="color:#f92672">}</span> every_owned_species <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> limit <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> is_archetype <span style="color:#f92672">=</span> PRESAPIENT <span style="color:#f92672">}</span> custom_tooltip <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;in system [Prev.System.GetName]
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">&#34;</span> <span style="color:#f92672">}</span> <span style="color:#f92672">}</span> <span style="color:#f92672">}</span>
</span></span></code></pre></div><h2 id="choose-l-cluster-outcome">Choose L-Cluster outcome</h2>
<p>Do this any time before actually opening the cluster.</p>
<p>First, check which it is (source: <a href="https://stellaris.paradoxwikis.com/L-Cluster#Outcome_.28spoiler.29_technically">Stellaris Wiki</a>):</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>effect switch <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> trigger <span style="color:#f92672">=</span> has_global_flag
</span></span><span style="display:flex;"><span>  gray_goo_crisis_set   <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> custom_tooltip <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;Gray Tempest&#34;</span><span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>  dragon_season     <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> custom_tooltip <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;L-Drake&#34;</span> <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>  gray_goo_empire_set   <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> custom_tooltip <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;Dessanu Consonance&#34;</span> <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>  default               <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> custom_tooltip <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;Gray&#34;</span> <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">}</span>
</span></span></code></pre></div><p>Next, choose a different one:</p>
<p>Gray Tempest:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>effect remove_global_flag <span style="color:#f92672">=</span> dragon_season remove_global_flag <span style="color:#f92672">=</span> gray_goo_empire_set set_global_flag <span style="color:#f92672">=</span> gray_goo_crisis_set
</span></span></code></pre></div><p>L-Drake:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>effect set_global_flag <span style="color:#f92672">=</span> dragon_season remove_global_flag <span style="color:#f92672">=</span> gray_goo_empire_set remove_global_flag <span style="color:#f92672">=</span> gray_goo_crisis_set
</span></span></code></pre></div><p>Dessanu:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>effect remove_global_flag <span style="color:#f92672">=</span> dragon_season set_global_flag <span style="color:#f92672">=</span> gray_goo_empire_set remove_global_flag <span style="color:#f92672">=</span> gray_goo_crisis_set
</span></span></code></pre></div><p>Gray chance:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>effect remove_global_flag <span style="color:#f92672">=</span> dragon_season remove_global_flag <span style="color:#f92672">=</span> gray_goo_empire_set remove_global_flag <span style="color:#f92672">=</span> gray_goo_crisis_set
</span></span></code></pre></div><h2 id="spawn-g-type-star-if-the-system-is-missing-a-star">Spawn G-type star if the system is missing a star</h2>
<p><strong>Click something in the system first</strong>. If the system is completely empty, then fly a ship there first and click it.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>effect solar_system <span style="color:#f92672">=</span>  <span style="color:#f92672">{</span> spawn_planet <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> class <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;star&#34;</span>  size <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> min <span style="color:#f92672">=</span> <span style="color:#ae81ff">25</span> max <span style="color:#f92672">=</span> <span style="color:#ae81ff">30</span> <span style="color:#f92672">}</span>  orbit_distance <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>   orbit_angle <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span> init_effect <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> change_pc <span style="color:#f92672">=</span> pc_g_star set_name <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;Perfectly Normal Star&#34;</span> <span style="color:#f92672">}</span>  <span style="color:#f92672">}</span>  <span style="color:#f92672">}</span>
</span></span></code></pre></div><h2 id="set-dominant-species-to-your-most-populous-sentient-species">Set dominant species to your most populous sentient species</h2>
<p><a href="https://forum.paradoxplaza.com/forum/threads/stellaris-dominant-species-check-broken-orion3-6-1-a6c5-root-owner-bug-that-breaks-hydrocentric-synth-assimilation-and-more.1562649/">Bug report here</a>.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>effect owner <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> ordered_owned_species <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> limit <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> is_same_species <span style="color:#f92672">=</span> root.owner_main_species can_think <span style="color:#f92672">=</span> yes is_sapient <span style="color:#f92672">=</span> yes <span style="color:#f92672">}</span> order_by <span style="color:#f92672">=</span> trigger:count_species_pop position <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span> save_global_event_target_as <span style="color:#f92672">=</span> species_to_change <span style="color:#f92672">}</span> <span style="color:#f92672">}</span>  owner <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> change_dominant_species <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> species <span style="color:#f92672">=</span> event_target:species_to_change change_all <span style="color:#f92672">=</span> yes <span style="color:#f92672">}</span> <span style="color:#f92672">}</span>
</span></span></code></pre></div><h2 id="allow-construction-of-fallen-empire-sky-dome-building">Allow construction of fallen empire Sky Dome building</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>effect owner <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> change_variable <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> which <span style="color:#f92672">=</span> skydome_build_count value <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span> <span style="color:#f92672">}</span> <span style="color:#f92672">}</span>
</span></span></code></pre></div><h2 id="spawn-random-new-system-in-the-rimward-direction">Spawn random new system in the rimward direction</h2>
<p>Target something in the system you want it to be near first.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>effect solar_system <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> spawn_system <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> min_distance <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span> max_distance <span style="color:#f92672">=</span> <span style="color:#ae81ff">10</span> max_jumps <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span> initializer <span style="color:#f92672">=</span> random direction <span style="color:#f92672">=</span> rimwards <span style="color:#f92672">}</span> <span style="color:#f92672">}</span>
</span></span></code></pre></div><h2 id="add-regular-terraforming-candidate-modifier-to-targeted-planet">Add regular terraforming candidate modifier to targeted planet</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>effect add_modifier <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> modifier <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;terraforming_candidate&#34;</span> days <span style="color:#f92672">=</span> -1 <span style="color:#f92672">}</span>
</span></span></code></pre></div><h2 id="un-stick-stuck-archaeology-dig-site">Un-stick stuck archaeology dig site</h2>
<p>Symptom: Scientist assigned, but it&rsquo;s stuck at 90 days. Open the site and:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>effect archaeological_site <span style="color:#f92672">=</span> <span style="color:#f92672">{</span> set_site_progress_locked <span style="color:#f92672">=</span> no <span style="color:#f92672">}</span>
</span></span></code></pre></div>]]></content:encoded></item></channel></rss>