<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Wine on axiom0x0</title><link>https://axiom0x0.sh/tags/wine/</link><description>Recent content in Wine on axiom0x0</description><generator>Hugo</generator><language>en-us</language><copyright>© axiom0x0</copyright><lastBuildDate>Wed, 06 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://axiom0x0.sh/tags/wine/index.xml" rel="self" type="application/rss+xml"/><item><title>Diablo 2: Resurrected | Building a Memory Trainer on Linux from Scratch (Part 3)</title><link>https://axiom0x0.sh/posts/d2r-memory-trainer-part3/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><guid>https://axiom0x0.sh/posts/d2r-memory-trainer-part3/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Part 3 of 3. &lt;a href="https://axiom0x0.sh/posts/d2r-memory-trainer-part1/"&gt;Part 1&lt;/a&gt; covered pointer chains. &lt;a href="https://axiom0x0.sh/posts/d2r-memory-trainer-part2/"&gt;Part 2&lt;/a&gt; covered pattern scanning and save editing. This is the one where everything shits the bed and elegant solutions are abandoned in favor of the good enough.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Finally, we arrive at Part3 of our D2R trainer series. After Parts 1 and 2, the trainer could read and write stats, freeze values, and edit save files. But the player still died. The freeze thread was writing max HP back to the stat array at 100ms intervals (10 times a second), and that sounds fast until you realize what the game is doing under the hood. The damage function reads HP, subtracts damage, checks for death, and writes the result back in a single frame (~16ms at 60fps). Our thread was racing the game and still losing. The player took a hit, HP dropped, the death check fired, and &lt;em&gt;then&lt;/em&gt; our thread wrote max HP back, but unfortunately too late.&lt;/p&gt;</description></item><item><title>Diablo 2: Resurrected | Building a Memory Trainer on Linux from Scratch (Part 2)</title><link>https://axiom0x0.sh/posts/d2r-memory-trainer-part2/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><guid>https://axiom0x0.sh/posts/d2r-memory-trainer-part2/</guid><description>&lt;p&gt;&lt;em&gt;Part 2 of 3 — &lt;a href="https://axiom0x0.sh/posts/d2r-memory-trainer-part1/"&gt;Part 1&lt;/a&gt; covered pointer chains and the building blocks. This is where the plan meets reality.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Part 1 ended with a fairly clean setup. That is, find the process, find the module base, walk a pointer chain, read or write the value. On Windows, that&amp;rsquo;s a well-established approach. Cheat Engine has built-in pointer scanning, there are community-maintained offset tables, and the technique has been documented for decades.&lt;/p&gt;</description></item><item><title>Diablo 2: Resurrected | Building a Memory Trainer on Linux from Scratch (Part 1)</title><link>https://axiom0x0.sh/posts/d2r-memory-trainer-part1/</link><pubDate>Sun, 05 Apr 2026 00:00:00 +0000</pubDate><guid>https://axiom0x0.sh/posts/d2r-memory-trainer-part1/</guid><description>&lt;h1 id="diablo-2-resurrected--building-a-memory-trainer-on-linux-from-scratch-part-1"&gt;Diablo 2: Resurrected | Building a Memory Trainer on Linux from Scratch (Part 1)&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Part 1 of 3&lt;/strong&gt; — scanmem, pointer chains, and the building blocks of a trainer.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;If you&amp;rsquo;ve ever tried to create your own game cheats, you probably started with memory scanning. By far, it&amp;rsquo;s the most direct path: find a value, narrow it down, change it, done.&lt;/p&gt;
&lt;p&gt;I know how to use &lt;code&gt;scanmem&lt;/code&gt; or CheatEngine to do that. But every time your game restarts, the addresses are gone and you have to do your scanning all over again. It works, but it&amp;rsquo;s tedious, and it&amp;rsquo;s clearly not how real trainer makers do it. Tools created from groups like CheatHappens and WeMod don&amp;rsquo;t ask you to scan for gold every launch. They somehow just know how to &lt;em&gt;find it&lt;/em&gt;.&lt;/p&gt;</description></item></channel></rss>