<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>RaidGuild Forge</title>
        <link>https://paragraph.com/@raidguild-forge</link>
        <description>Prospecting the realm of Digital Physics and patent-royalty stacking in web3 games.</description>
        <lastBuildDate>Sat, 25 Jul 2026 06:49:07 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[Building a Voice-Controlled Cooking Companion]]></title>
            <link>https://paragraph.com/@raidguild-forge/diy-cooking-companion</link>
            <guid>qBWLtaeO2ZKGZba9sAfk</guid>
            <pubDate>Wed, 03 Jun 2026 16:20:57 GMT</pubDate>
            <description><![CDATA[My Cooking Companion currently resides plugged in on my kitchen countertop. While not the first DIY device I've ever 3D printed or assembled, this is the first I've designed from scratch. Because of this, I figured I would go through the process, key learnings, and pitfalls here.]]></description>
            <content:encoded><![CDATA[<h1 id="h-how-it-ended" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">How It Ended</h1><figure float="none" data-type="figure" class="img-center"><img src="https://storage.googleapis.com/papyrus_images/e302b04e0710b892c30f3e563e5570d2820c45b5b0fd3a86efaedc02c67a25fd.jpg" blurdataurl="data:image/png;base64,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" nextheight="2808" nextwidth="4257" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">where it sits now in my kitchen</figcaption></figure><p>My Cooking Companion currently resides plugged in on my kitchen countertop. When I need to retrieve a recipe, I simply switch on the power, click the top "talk" button, and say, "get so and so recipe." After an admittedly long 5 to 12 seconds, it responds with the required ingredients, then the first step. To continue, I tap the side "next" button, and my sous chef moves on to the next step for me.</p><p>While relatively simple, and completely replaceable by a phone or Google Home, this device was quite fun to make. It started as an OpenClaw cooking chat bot about a month ago, and that OpenClaw instance gradually built a fork of itself with API endpoints for requesting recipes by voice, and a three.js frontend to simulate the hardware that would eventually use these endpoints. This laid the groundwork for an actual embedded device spec, physical prototype, and eventually an encased assembly.</p><p>While not the first DIY device I've ever 3D printed or assembled, this is the first I've designed from scratch. Because of this, I figured I would go through the process, key learnings, and pitfalls here. I'll keep it relatively short in this post, and I'll link to more detailed specs for anyone who wants to actually follow along. </p><h1 id="h-how-it-started" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">How It Started</h1><figure float="none" data-type="figure" class="img-center"><img src="https://storage.googleapis.com/papyrus_images/ac6e3d06141525c60f023e4c8d218d9703f1d6b7271a04f35a1ef0dbb545d2e3.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAUCAIAAABj86gYAAAACXBIWXMAABYlAAAWJQFJUiTwAAAE8UlEQVR4nLWSbWwTZQDHH0dm3dYXOra7tVvkHQa6DzA0gAsMNCDGREk0KuElaiIhfhBnQgiBMIQAgWyjjpfO8aJMQwSzkrLUOljIxgxLnHuTrr2tbK5va9e7a3u95+7aaz3zPN1GIfEjzS9Nem1/v+f+LRBYrxDxChGfEPWL0YAYm0xw4STPJCErw4gsRGWBSyX4VEJIJYW0LKZlMZUUUglBluKywOEPsEnIJnla4kJibFKMBoSoHwkRXgAZj8B6cMYnRnCDCyY4OskzMmRlATekeFqabmTsaYnHgSj6ALIzEhfO2MUItrNejAdAZlxgJ1Aj4hEiXjHqF2MBCTXCMmRkIbsRx7fCp6W4LHGzdplnkvyUxAXFWECM+kS0R+bQEwIzDiA9BplxxHTmSSPJ0+j70/fBIZB6dpkIykNmZpyAiJZBp4bsBGQmsHYMwLAb0o9xBpUyc6GDRFFDQr8HmivJsxLPiBwrcowQo4UYLaEZaYkLS7EgXgYtnjk1UtNjSBt2Azg1ihozGQEvFqcRPCoFZH4qLbBKMqqkoaJIiiIrSlpRkoocF6MBGPGhO0ajewQG22fUMDwKp0YBH6Lg1Ah6EXbzqPEYMuP/JmlFiSupqAxDccZDB9zj1EDPg47bv94wX/zu6JHD33y9/4/O35VUVEmw07PgQSD9mH9iH4FTFOCDThiiYFYGht0/X/v+4IGaLz77dPv726uqqpcuXVFMlGq0xIt5hQDkA/wgCHLP7h09XXYx4sGnzj74CAxRfMjFB12Anxzmg06ccfEhl0C7Ge+j5ctWIoeKwKrclwrmqXVELtAt+eCN+RtXFajmkSVGgiBVqrw8jebOrRZFmIwHKbQ2ViMVcg7zk8OAn3Q8CQSdCXbMR/UuWLSs7L0D5Qfbyg9Zixa9qlKp1foSjZbQG4y6YkOBtkhfSBKkwVhaBgC4am5QEqF40JXZ5OmAA3j7Wr19Fm+/xTdg9Q7cCVMdD61NZRt2LKz6uIQse6XWtrrWQhTO0xNGtY4o0BZptMUaHaEvJI1kUUX5UtJgvHD2MP9Pt2/AFvj7N/+QzT/QhlT9FmxuBa77ZkwT1dns6rzi7WmxtNQb131oMCwgiw0L127fdN1TvqKCNJTma4s0OkKjI9T6EnVe3pJNH1W8vSs/V1X/7f7QkIXq+nG0u2W064eRritUZzN1vyljBs6OS857Zuc9s6vD7Oxo8j28evXSKaLyHUNJKakvXrTl85cbR+bMyS+YsU8HcsCq83+uujAIAKir/TLYf8vVeQWrL1P3m5HqnhmZOy4BR3sjxuRoNw3ZG/0Prx2v2aN+66slr20pXbhymclVtrNBnfvC3GKDrpCcq0foCg26XLD46INKU38OAGcO7/X3tDjuYundi87289iW0TaCR7aGWfqsdb7u5n2fbAO5i/P3XgeHesDOFpAzF/01c3QAaGfQgZw5BfMri5avBQAcq9nt6b48aDM9spscWbYMYNB6epZ+y0l3e8Pxml2VKxdXr1+zuXrDm2srtm58fWv1+q0b12WzbfP6bdWr362u3Fy1pun4vtF208DtM9mqWUB/64ls+lpPDN0+Odx21mE95bCedtrrhm11TnuD01aPOYepR1fs55z2huG2s4PWU31PS7IBf92sfYbem7W9v+DnGdD1W8eeJfvd/wf03jjyXAE9Px18rvwHiZsPbGYo2DYAAAAASUVORK5CYII=" nextheight="1610" nextwidth="2580" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">my first attempt at simulating the hardware</figcaption></figure><p>As mentioned above, this project started as someone else's OpenClaw cooking assistant agent, which they built as part of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.raidguild.org/join">RaidGuild's April cohort</a>. That original agent is <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/raid-guild/Pinata-Agent-Chef">here</a>, but I should note that because of a cohort sponsorship, this agent is meant to be deployed through <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.pinata.cloud/agents/templates/overview">Pinata's Agent Templates</a>.</p><p>For my own cohort project, I wanted to make something hardware-oriented, but within the constraints of the sponsorship. So I deployed the cooking assistant agent through Pinata, and began prompting it to fork its own original repo, and build off of itself. To do this I created a GitHub user for the bot, generated a temporary PAT, then had it cherry-pick all the relevant template code into a new template repo.</p><p>I began with the following features:</p><ul><li><p>SQLite-backed recipe, food-event, and voice-session persistence</p></li><li><p><code>/query</code> for JSON text / next-step requests</p></li><li><p><code>/query-audio</code> for multipart spoken queries and JSON next-step requests</p></li><li><p>generated MP3 serving via <code>/app/api/audio/[name]</code></p></li><li><p>generated-audio cleanup script under <code>workspace/scripts/prune-generated-audio.sh</code></p></li></ul><p>I used <code>query</code> for initial text-based Postman testing, as well as what was to be hit when the "next" button was pushed. <code>/query-audio</code> was reserved for the "talk" button. The flow for <code>/query-audio</code> went like this:</p><ul><li><p>Client hits the endpoint with multipart data primarily containing some common type of audio file</p></li><li><p>OpenAI's <code>whisper-1</code> model is used to transcribe the audio</p></li><li><p>OpenAI's <code>gpt-4.1-nano</code> is used to figure out intent, and general routing to retrieve the correct data</p></li><li><p>OpenAI's <code>gpt-4o-mini-tts</code> is used to generate a response audio file</p></li><li><p>The response audio file is stored temporarily in the agent workspace</p></li><li><p>When the response gets to the client, the client finds the URL for the temporary audio file, downloads it, and plays it to the user</p></li><li><p>All audio files are pruned daily</p></li></ul><p>Once I got a bare-minimum working, I decided to create a simulated hardware page to test the UX. This may seem like overkill, but it actually did help quite a lot in improving the quality of responses, and for getting a feel for how I'd actually use the device. The first version (see image above) was completely made by OpenClaw, and to be honest, it was very time consuming and expensive. Remarkably, it was actually faster to learn how to use <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.tinkercad.com/">Tinkercad</a>, and make my own 3D model from scratch.</p><figure float="none" data-type="figure" class="img-center"><img src="https://storage.googleapis.com/papyrus_images/83839e5231533095cba69ba7bc54574b56fb6ca0049fc66fd41422abc5dcc093.jpg" blurdataurl="data:image/png;base64,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" nextheight="1150" nextwidth="1704" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">my second attempt at simulating the hardware</figcaption></figure><p>The second attempt turned out much better, and as I realized midway through 3D modeling, it could be used as the file for the 3D printed case too. Something I realized through this process is that simulating things accurately early on saves you a lot of time later on. Planning for this to be the first of many of these types of projects, which means much more attention will be put on fast and accurate simulations in the future.</p><h1 id="h-the-build" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The Build</h1><p><em>Warning: soldering is requiring to properly follow along</em></p><p><em>For those who don't want to use a Pinata Agent for the backend, I've since created a </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ECWireless/voice-cooking-companion"><em>bare-minimum API on its own</em></a><em>, which can be hosted anywhere.</em></p><h2 id="h-picking-the-parts" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Picking the Parts</h2><p>Before I (OpenClaw) wrote my endpoints, case, and overall simulation, I actually already had all my parts picked out (important before simulating, of course). Three sets of parts were need: 3D printed pieces, electronic components, and miscellaneous things to connect everything together.</p><p>My 3D printed pieces were:</p><ul><li><p>Top enclosure</p></li><li><p>Bottom enclosure</p></li><li><p>"Talk" button parts</p></li><li><p>"Next" button parts</p></li></ul><p>My electronic components were:</p><ul><li><p>Microcontroller</p></li><li><p>Mic</p></li><li><p>Amp</p></li><li><p>Speaker</p></li><li><p>2 buttons</p></li><li><p>1 LED light</p></li><li><p>USB power cable</p></li></ul><p>And miscellaneous parts were:</p><ul><li><p>Wires</p></li><li><p>Breadboard for prototyping</p></li><li><p>Perfboard for final assembly</p></li></ul><p>You can find a reference for the exact electronic components I used <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ECWireless/voice-cooking-companion/blob/main/hardware/reference/recipe_helper_hardware_reference.pdf">here</a>. Not including negligible parts that you can bulk-buy like wires, buttons, perfboard, and the LED, this only cost me $23.54.</p><h2 id="h-breadboarding" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Breadboarding</h2><figure float="none" data-type="figure" class="img-center"><img src="https://storage.googleapis.com/papyrus_images/2a626a2fe2fdfef0d5abd1d238756bdff89724b933d8656a57990051094f6115.jpg" blurdataurl="data:image/png;base64,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" nextheight="3413" nextwidth="5712" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">first working version of the cooking companion via breadboard</figcaption></figure><p>This project was my first time using a breadboard, and as I'm sure anyone who does maker stuff will point it, it's an absolutely must-have for anything you are designing from scratch. Using a breadboard is relatively intuitive, but I found <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/watch?v=W6mixXsn-Vc">this video</a> useful for filling in my mental gaps. I also took a 1-week detour to go through all tutorials in the starter kit my breadboard came with (the ELEGOO UNO Project Super Starter Kit).</p><p>Some extra bits I did and learned from this process:</p><ul><li><p>You can flash your program to the ESP32 using most common languages. I used Arduino's IDE, and so flashed <code>.ino</code> files. You can see the exact code I used <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ECWireless/voice-cooking-companion/tree/main/hardware/cooking-companion-sketch">here</a></p></li><li><p>This may seem obvious, but you should solder on all the component headers before using the breadboard; I spent well over an hour wondering why my speaker wasn't working due to my loose-fitting amp headers</p></li><li><p>Make sure you wire the GPIO and GND on opposite sides (diagonally) and across the breadboard gap when connecting the buttons</p></li></ul><h2 id="h-printing-the-case" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Printing the Case</h2><figure float="none" data-type="figure" class="img-center"><img src="https://storage.googleapis.com/papyrus_images/dc18d369061414fd8a1903db4388b3f114cb576091b0a84db660bffc5b947657.jpg" blurdataurl="data:image/png;base64,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" nextheight="2335" nextwidth="4284" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">first attempt at 3D printing my own design</figcaption></figure><p>3D modeling and printing the enclosure turned out to be surprisingly laborious. In the first place, I had to freshen up on how to actually use 3D modeling software. I used Tinkercad, which seems to have handled my simple needs, but I can also see moving on to Blender for any future designs that are relatively complicated.</p><figure float="none" data-type="figure" class="img-center"><img src="https://storage.googleapis.com/papyrus_images/4ce55f94c38de2b3e2a349436611718bb72ead711d2303f8d5b14204cf9059dd.gif" blurdataurl="data:image/png;base64,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" nextheight="338" nextwidth="600" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">enclosure print in action</figcaption></figure><p>Once I got the handle of the software, a lot of things came down to trial and error. I had the original design that I made of the hardware simulator, but the measurements, hole placements, and whole sizes turned out to not be accurate. I also realized a bottom piece of the enclosure was needed to hold the ESP32 in place.</p><figure float="none" data-type="figure" class="img-center"><img src="https://storage.googleapis.com/papyrus_images/ce7ef4b1489677f37545450549ad3c3ad307e182133ba199f865d9220bd885d9.jpg" blurdataurl="data:image/png;base64,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" nextheight="4032" nextwidth="3024" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">a mere fraction of my failed attempts</figcaption></figure><p>The final count for design iterations was 40. Another seemingly obvious thing I learned while going along is that I could design each enclosure component separately (speaker hole, buttons, mic holder/shelf, bottom enclosure, etc.), then piece them together at the end. Unfortunately, even at the end, fitting all the components together in the 3D modeling software took multiple iterations to get right as well.</p><p>For those building along, I've hosted my final enclosure 3D model <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://forge.raidguild.org/marketplace/voice-controlled-cooking-companion-kit">here</a>, at the cost of $1 (charging mainly as an experiment with x402).</p><h2 id="h-final-assembly" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Final Assembly</h2><p>At long last, I reached the final stage of assembly. This meant upgrading from a breadboard to a perfboard (a perforated board board meant for prototyping or simple assembly; basically, the middle-ground between breadboard and custom printed circuit board), soldering numerous wires between board and components, and shoving everything into the newly minted enclosure.</p><figure float="none" data-type="figure" class="img-center"><img src="https://storage.googleapis.com/papyrus_images/304dd89fed1e0a9b214713bc6a7ec3dc9afa3e5565a5a925eae648f1f278250b.jpg" blurdataurl="data:image/png;base64,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" nextheight="1852" nextwidth="3011" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">working device in soldered form</figcaption></figure><p>Incidentally, this was the easiest bit of the entire project. The only false starts came from trying to balance a few of the components in place while also shoving everything into the case. As you can see below, I ended up using Scotch Tape to hold the buttons and LED in place, while I shoved the wires in and clicked the bottom piece into position.</p><figure float="none" data-type="figure" class="img-center"><img src="https://storage.googleapis.com/papyrus_images/4cd043fc409173630a2da2a379d97f7219710430f62a5d364843b8a2fedd7a24.gif" blurdataurl="data:image/png;base64,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" nextheight="337" nextwidth="600" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">shoving wires into the case and hoping nothing breaks</figcaption></figure><h1 id="h-biggest-takeaways" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Biggest Takeaways</h1><p>To wrap things up, I've compiled a short list of biggest takeaways from this project:</p><ul><li><p>Simulations are important; not only for ensuring your endpoints and design work together, but also for ensuring the entire UX actually makes sense in the way you want to use the device in day-to-day life</p></li><li><p>For large 3D models, break it down into small parts. And once they all fit correctly composite them together</p></li><li><p>Before you start on any kind of soldering, breadboard your prototype first. You want to make sure that specific parts and wiring work together, as well as your firmware software, before you commit to soldering</p></li><li><p>Test at all stages as often as possible. You just added the amp to your breadboard? Make sure it is receiving current. You added the speaker? Write a quick timed beep program first before you move on to a button trigger. Testing often saves you a lot of time and confusion when you inevitably make a mistake</p></li></ul><br>]]></content:encoded>
            <author>raidguild-forge@newsletter.paragraph.com (ECWireless)</author>
            <category>hardware</category>
            <category>maker</category>
            <category>tech</category>
            <category>raidguild</category>
            <category>forge</category>
            <category>esp32</category>
            <category>pinata</category>
            <category>agent</category>
            <category>openclaw</category>
            <enclosure url="https://storage.googleapis.com/papyrus_images/c03e81869a800b6914b2f6688331b32792600e1e01e5246c81e6284e37424f84.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Auto Tower Defense: Early Alpha Round 2 Updates Updates]]></title>
            <link>https://paragraph.com/@raidguild-forge/auto-tower-defense-early-alpha-v2-updates</link>
            <guid>A11kdSNOBPREXCnMbggA</guid>
            <pubDate>Tue, 22 Jul 2025 14:09:03 GMT</pubDate>
            <description><![CDATA[For context, read about the early alpha playtest here, and RaidGuild Forge (the studio behind Auto Tower Defense) here. New Features: ability to update your username; ability to transfer your account to a separate EOA; have player 1 go 2nd each round, rather than 1st; end stale battles that have not finished within 24 hours...]]></description>
            <content:encoded><![CDATA[<p>For context, read about the early alpha playtest <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://paragraph.com/@raidguild-forge/introducing-auto-tower-defense">here</a>, and RaidGuild Forge (the studio behind Auto Tower Defense) <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://paragraph.com/@raidguild-forge/introducing-raidguild-forge">here</a>.</p><h2 id="h-new-features" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">New Features</h2><ul><li><p>Ability to update your username</p></li><li><p>Ability to transfer your account to a separate EOA</p></li><li><p>Have player 1 go 2nd each round, rather than 1st</p><ul><li><p>This allows player 1 to actually react to their opponent, rather than guessing what they will do</p></li></ul></li><li><p>End stale battles that have not finished within 24 hours</p></li></ul><h2 id="h-new-minor-improvements" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">New Minor Improvements</h2><ul><li><p>Handle for comments in Solidity patent code</p></li><li><p>Add footer</p></li><li><p>Improve visibility of Battery Details button during tutorial</p></li><li><p>Darken tower color when it has been modified</p></li></ul><h2 id="h-bug-fixes" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Bug Fixes</h2><ul><li><p>Better indicators for when session wallet balance is low</p></li><li><p>Hide battle control buttons when battle is over or user is not player 1</p></li></ul><hr><p>You can enter the playtest now at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://autotowerdefense.com/">autotowerdefense.com</a>. </p><p>For support, questions, or ideas, reach out to <strong>RaidGuild Forge</strong> via the RaidGuild DAO Discord: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/AWHGb8Fs">https://discord.gg/AWHGb8Fs</a></p><p>This blog is also dedicated to sharing upcoming games by RaidGuild Forge, and feature updates for Auto Tower Defense, so subscribe if you want to stay up-to-date. <span data-name="crossed_swords" class="emoji" data-type="emoji">⚔</span></p>]]></content:encoded>
            <author>raidguild-forge@newsletter.paragraph.com (ECWireless)</author>
            <category>auto</category>
            <category>tower</category>
            <category>defense</category>
            <category>early</category>
            <category>alpha</category>
            <category>web3</category>
            <category>game</category>
            <category>gaming</category>
            <category>redstone</category>
            <category>mud</category>
            <category>autonomous</category>
            <category>worlds</category>
            <category>raidguild</category>
            <category>forge</category>
            <enclosure url="https://storage.googleapis.com/papyrus_images/03e420d8a635c3b1b8d7a354499fb0fc.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Introducing Auto Tower Defense]]></title>
            <link>https://paragraph.com/@raidguild-forge/introducing-auto-tower-defense</link>
            <guid>eddLjOtuQ1nwAmML0d7G</guid>
            <pubDate>Tue, 01 Jul 2025 14:20:36 GMT</pubDate>
            <description><![CDATA[Auto Tower Defense is a tower defense auto battler with a patent-royalty system baked in. This puts a few twists on the traditional tower defense format. Instead of fighting off continuous waves of AI enemies, you battle waves of other async players on a chess-like board. Your top battles are also saved permanently at the end of your run, and at the level you lost at, allowing other players to face you as part of their continuous wave of player-enemy encounters. You can also earn royalties (i...]]></description>
            <content:encoded><![CDATA[<p>Auto Tower Defense is a tower defense <strong>auto battler</strong> with a <strong>patent-royalty system </strong>baked in. This puts a few twists on the traditional tower defense format.</p><p>Instead of fighting off continuous waves of AI enemies, you battle waves of other <strong>async players</strong> on a chess-like board. Your top battles are also <strong>saved permanentl</strong>y at the end of your run, and at the level you lost at, allowing other players to face you as part of <em>their</em> continuous wave of player-enemy encounters.</p><p>You can also earn <strong>royalties (in electricity)</strong>, which can later be sold for USDC. These royalty fees are divvied out when someone wins a battle using a tower component that you engineered and patented. Many patents may never get used, but if you strike on something incredibly useful, you'll find yourself earning a fair amount of electricity asynchronously.</p><p>With these two twists, the hope is to showcase mechanics that RaidGuild Forge plans to use in all its upcoming mini-games.</p><h2 id="h-part-of-raidguild-forge" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Part of RaidGuild Forge</h2><p>RaidGuild Forge is a web3 gaming venture from <strong>RaidGuild DAO</strong>. You can read much more about it <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://paragraph.com/@raidguild-forge/introducing-raidguild-forge">here</a>, but suffice it to say that we'll be running mini-game experiments--like Auto Tower Defense--from now through the end of the year.</p><p>The goal is to apply our <strong>3 Personas mechanic</strong> to different genres until we strike on something that works really well.</p><h2 id="h-game-mechanics" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Game Mechanics</h2><h3 id="h-the-3-personas" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">The 3 Personas</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/591b9fa34c5d7655168f90d7a66587c2.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAVCAIAAACor3u9AAAACXBIWXMAABYlAAAWJQFJUiTwAAADp0lEQVR4nLVVTW8bVRQ9tsfjj/HHhMnYcWYy9mTmzZuxx54Z14lraohLlLZpQmkhQNUFEgpVVaRKCVR0iYgQ5AewQEiIVTewyIYFICgLkJBgg7rkQ12gihVix4ZF0ZtJYtc0SSuBdDV6enPfPe+ee+59sDj8r4b/PCLlDwYwMf7but9MgBx6JwPQwNweBMCjU5k09nZMDM0Iv5THnFpypSzlQWLjDgQgCXQm8YyT8UXmcB8A5VEFbt7cufrCizMATaElpgJZCGTBk9I9tdQSk46A1y9f2Vy/TNOwMwhkwZeyvpRtiameIs9NiSpw41zp3jdr5+qivkfGLgBJMIC339z+7vbd5WO+DvT16ZNUGxD1CWP6QrfZU8sm8Gz/8UBTdaApcgOiDkxlYCp9vbLSsvpaeRpY1LMfb7qzYxSRBLw83AxoBm25UC8m2WaYuBFaDbATIBwaec5Joy1yNLHLTGR6SFS7EG+LWK3lmsKwlqBJdv6SUd7wqtsn7E1X2/C0q67m52IWBzsVMityN44Zr7rqhlfdOm5v953XPN0vxCNuKc8YM4C35unWcft6YLwRGIvlvBEG36tBEk0BZ9UJP88u4oRlHFVeI8v2mxmWaDPPMh5VB4mxJJw0glzczaCVZQHHVURiLJUo8YsL83Uh1EZsWKQaMF+ROlOsgCQxPGWwkqSWXZMpKo6uIh8g0xGkbmVi1bcbRb5R5If7wGmXDExtvxUoj3o+0Simng6cE9pUFPe0a5CRVnhwK2rASav2192vv//iw6gDSAyOEPvlh0/+uPNlS8oRgKYZLTsfbN37+/b5rq+GOxaHRbsWSfywUUFiqBeTX+28d+fHzwZkpordMu589O7vP9260PVqIaoOvP/O9T9/+/ba2lk19GEAVHvKmlnxbDvD4hzW9xrgScKqz1yj3p6vyG15IjpJeSy3LHciNQs08vH9aq20rEi7Rw87yjM/T0qfcQ07wwAGpjJXLphg8j3jGoEcchVKPtKrxWOtF9DkSB8cORrNMPfZUGM0FzM51vMG4Ai7Etq3qFqnrMlHH9dxvEQqS1OFBTlzcbb0XHVyIAs0yYKeqptLjv6koSxSrSXllshjv356baH2r1l0uJEE1m1l3VZetqav1JVXbOWSUXbS7Mo9pdQpFz0p2wmpO++Xf/58c6VR0h4JwOIwE04kE2xRDdf7D8Do3G6K6ed7rUaRGx/XRxqrYTK0aHHAu0R51tWjfx8W4OFtdIhZHP4BLcbCUSO7WvoAAAAASUVORK5CYII=" nextheight="1134" nextwidth="1710" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>As RaidGuild Forge's first mini-game, Auto Tower Defense will apply the 3 Personas mechanic with the following persona instantiations.</p><ol><li><p><strong>Component Engineer</strong>: the player who uses the game's Digital Physics constraints to engineer tower components (components could include projectile launchers, wheels, and shields)</p></li><li><p><strong>Tower Assembler</strong>: the player who assembles pre-engineered components into a full tower (towers can be offensive, defensive, or a hybrid)</p></li><li><p><strong>Battler</strong>: the player who uses pre-assembled towers to battle</p></li></ol><p>A single player can of course be all 3 personas, or just 1, if they so choose.</p><p>Part of the 3 Personas mechanic is also how it relates to patent-royalty stacking.</p><figure float="none" width="100%" data-type="figure" class="img-center" style="max-width: 100%;"><img src="https://storage.googleapis.com/papyrus_images/63e484d9175ca994e682b65bfb7056db.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAUCAIAAABj86gYAAAACXBIWXMAABYlAAAWJQFJUiTwAAADiklEQVR4nO2S3U/bVhTAb8AOzsfSlNAlRHESCAQom9aNdS8te+gekKZVfdjL/phpKqWDUk1DbOuaqVWrTt34d4ogsSFOQhLnQ0m4CYnt2L6+904kQFlGVW2atJdZP517bF2f37HvAZwvzr076/DPHcfRKW5sxuGfdY7OOT3TjCs64p5k3NERd8zpjTu9Mbsr6vFMMq7wkINnXGG7O2Jz8Jw76vROMd4YexFgZPx98NES+OAWWFgCn34JPvl8KH7DyUYugUDIPR90xHnPe2M23jEUusIEZ9nAJWCfs4fm7KEpxh8bDsxzoXHgHmWDnC/OeiffIFhYAlcXwbXPwK2vwI07zMziO/YJz3Agevla0B2fGF3ws1EXy/tHQjNc0AHs887wdc/0jDM0wQQ+9MT4Id8Yx7vHZp2+mMM3PQBgvVOADQMuchxt48AVAi4ecDxgwjYmMmyPAlsQMBFgjwKWByA4zPDAFgDAf8plAK4AMH7uyZ+ZvHrz0ZMXP/7yYjPx7KfEy+V7W/fXfr+/trX+/fN7aw+/Xl79dv2Hb1bWV9Y3765+92Dj8d3VjeXVjZUHmw83ExuPniae/ZZ4vvXz05ePn/x6IeD64m2MsY5xxzSJRY8gbR3SUpbAGi3moFyoycW8kErJclFIJSvlUv4gl81IoigUCrl2u6XrumHoCCH6hgt8fPMLhMyOrkNFs5BJqdHVrNweqZawlCSlQlcQd1692hZFMZPNFAp5QUhVqxVJkpKpZDqdzmYzu7u7h4cNQjBCpmWhAcDC4m1CcBehlqZRgjEm/XY6nfb+fnJnZ7tWq6qqSiklhJy2Rc7n/VtCcD8f4ESgmSbsCQglltUXHEmSkExu1+s10zR6uxGlmFLcq36eE81bBK2uTrBFCDFNrVrWpCQpZkil1JWk/WIx3zykcoaUcqRepRDCXC4rigKEsFwuCUJKktLNJkTIJAQPcCJQNL3d0QhBGFu6oXVaqCIbe2JZSpcODjL5fLZRP8qmm2VZbdQ0COHenlitllVVabdbjUYdQqhpKkImxtYArwWw3RdgVVVM0zAMTZbzslxQFAVCqKodCBvNZr2jNLvdbqVSQQid/fp+s3+tfizojamFMFYMo7damqYqSuf0VEm/Sn85l5wUfSvHX0AJPtL1Vlc3dK3VbvVKv+6L9pKzeDo2F8/MxYdsYeus6N99n/4zwb8I+F9A/2vBH/7jrDopVahgAAAAAElFTkSuQmCC" nextheight="710" nextwidth="1118" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">What engineering looks like projectile components. If the engineer is happy with their work, they can patent it.</figcaption></figure><p><strong>Engineers</strong> and <strong>Assemblers</strong> have the opportunity to patent their work for others to use, and when a <strong>Battler</strong> earns stake from their win, a portion of that stake gets distributed to the patentees of all towers and components that the battler used. As the game grows, the list of components and towers grows; as that list grows, the battle meta changes; and as the meta changes, demand for which components and towers are needed changes. The goal is for this dynamic to always be in flux.</p><p><span data-name="warning" class="emoji" data-type="emoji">⚠</span> <em>Note, however, that during the initial alpha playtests, the Tower Assembler persona will not be available.</em></p><h3 id="h-async-battles" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Async Battles</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9558cf979252bbc64dc28ae8955deb1d.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAIAAAD4YuoOAAAACXBIWXMAABYlAAAWJQFJUiTwAAACu0lEQVR4nJ1Uy27TQBSdJqYodmzHHs947NR52G5DycOOnaZNKVIfm0qtSkGiBIFYVlAoqBsaqRLsywYkAuqKBTs2XcGab+AL2PMJLEAzdt20aSOBFF0dS+fOnXPO3AAg2WOCAziLgxXAWeP4eowzRQ5WxgQnJTkp2U3JLgBasb2+2XsHQJY3/ZjMlzlYoXwGAGdljEZSQXoCcLACYR3CKsIerbp/ikmMEfZy0lRr6dHz/tc7u2+EdCmmRYQTGoRVBdbiXlZTgg0AZzF2fbiqlEQx0v2cNLWw/nTv6Nvm7qHI2dgIE0JCg1rjZEB8QjrrAN5oaLiJdH+4qthLMM63xkHeW3zw8OBI5GyjMMcIdDbOtxKsYg8bYdJFBwDOuswidrVqYpciV+Y3drq9Pg8sRIJBizStdqlFvNFAJKBG6/65ShXgGGMzjAZs7b8X0iWj0E4ImhlsN1fc/IxKWO/AaZcrYHVAQR0RPydMdtYed3t9kStGChKCiRsxjY1MuqIM6qTQIeUFZLQQoYaq7Gr0R3xshFES2Axz8rUbG8/u7X/g0zax2iqsYzNUEauMHHWxTz9PAsdsivRxA/Tq44+9w+9ZwYmkJQokpfrr95/Zxfu37ZmZYjtz1Z1nCgAgK7Nbn/c+FSbmjg++lAsdFUUtVAHWvYww+fruy59vj9VcEaRkt7P6orW0jYYcRMRfurVTdG9irUaMOINurx9lQM/FXrnQ0Y1wsAWRQIG1ZW91e7krSSVwBU7LoqsqU4N3TzIQOVuBtQszUNRppPu0DkYVZ1CXtRovV1jIfDl5xRe8IhJEmka8ImyeVxB96nozXjSoNUZvMmQ4J0zOrT3p9voZYP3DJgO+fOaZnl0uOIBl3oksGl60Uf9F4kQwbM6IRUtCvsAi3UfEJ/lTx5gCkGcKaD7/vWhDIccnpLPOX78x0ONsnyLjAAAAAElFTkSuQmCC" nextheight="758" nextwidth="1524" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">Blue player fights the Saved Battle of the red player.</figcaption></figure><p>A mechanic that may end up being unique to the Auto Tower Defense mini-game is the idea of async battles. As mentioned above, a player's best battle in a run is saved at that level in order for other players to face in their own continuous wave of async player-enemy encounters. The way this works is relatively straightforward:</p><ol><li><p>Every turn is broken into discrete actions</p></li><li><p>Actions are saved into a replay-able “Saved Battle”</p></li><li><p>Once you lose your run, the Saved Battle with the highest level in that run is saved permanently at that level</p></li><li><p>When another player reaches that level, there is a random chance of running into your Saved Battle</p></li><li><p>If this happens, the saved actions are replayed against that player</p></li><li><p>As your Saved Game wins battles, it accumulates and divvies electricity:</p><ul><li><p>Half goes to you and the patentees<strong> </strong>of your towers/components</p></li><li><p>The other half stays with your Saved Game and becomes a reward for the next player who defeats it</p></li></ul></li></ol><p>The idea is to let the game evolve continuously—as more players join, the catalog of enemy encounters grows organically. There is also the appeal of creating an amazing Saved Battle that earns you electricity while you sleep.</p><h2 id="h-playtest-schedule" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Playtest Schedule</h2><p>This is a <strong>very early alpha playtest</strong>, primarily to test out the patent-royalty economy. There are currently only 2 tower types, and 1 component type, but more will be added throughout the playtest. We also only included 2 personas for now: <strong>Component Engineer </strong>and <strong>Battler</strong>. The <strong>Tower Assembler </strong>persona is being worked on, though, and should be included in later rounds of the alpha playtest.</p><p>There will be 5 rounds, starting on June 30th and going until September 7th:</p><ol><li><p><strong>Round 1: </strong>starts<strong> </strong>June 30th</p></li><li><p><strong>Round 2: </strong>starts July 21st</p></li><li><p><strong>Round 3: </strong>starts August 4th</p></li><li><p><strong>Round 4: </strong>starts August 18th</p></li><li><p><strong>Round 5: </strong>starts September 1st</p></li></ol><p><strong>Every round will last 1 week</strong>, leaving the week after dedicated to bug fixes and new features. Each round will also be loaded up with around <strong>100 USDC in winnings</strong> in order to incentivize people to play what is frankly a fairly incomplete game right now. As time goes on, people may decide to purchase electricity from the <strong>Solar Farm</strong>, which will introduce more money into the economy. Finally, these playtest rounds will start with only 100 open player slots, so if you want to play, create an account early!</p><h2 id="h-how-to-participate" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">How to Participate</h2><p>You can enter the playtest now at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://autotowerdefense.com/">autotowerdefense.com</a>. </p><p>For support, questions, or ideas, reach out to <strong>RaidGuild Forge</strong> via the RaidGuild DAO Discord: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/AWHGb8Fs">https://discord.gg/AWHGb8Fs</a></p><p>This blog is also dedicated to sharing upcoming games by RaidGuild Forge, and feature updates for Auto Tower Defense, so subscribe if you want to stay up-to-date. <span data-name="crossed_swords" class="emoji" data-type="emoji">⚔</span></p>]]></content:encoded>
            <author>raidguild-forge@newsletter.paragraph.com (ECWireless)</author>
            <category>auto</category>
            <category>tower</category>
            <category>defense</category>
            <category>web3</category>
            <category>gaming</category>
            <category>forge</category>
            <category>raidguild</category>
            <category>crypto</category>
            <category>autonomous</category>
            <category>worlds</category>
            <category>mud</category>
            <category>redstone</category>
            <category>patent</category>
            <category>royalty</category>
            <category>royalties</category>
            <category>engineer</category>
            <category>battle</category>
            <enclosure url="https://storage.googleapis.com/papyrus_images/3e18af4404f47e41700d576612559757.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Introducing RaidGuild Forge]]></title>
            <link>https://paragraph.com/@raidguild-forge/introducing-raidguild-forge</link>
            <guid>HuwIGrN7thwXCPc4IRLf</guid>
            <pubDate>Tue, 10 Jun 2025 14:21:33 GMT</pubDate>
            <description><![CDATA[The RaidGuild DAO is a network of developers that has collectively provided services to companies and protocols for over 5 years. Starting as the world's first DevShop DAO in 2019, it's weathered the many ups and downs of the web3 ecosystem. Along the way, we've worked with over 150 clients, shipped over 200 projects, and grown to over 140 members. But we've stuck primarily with building products for others. Today, we announce our first "venture" as a DAO: RaidGuild Forge. A ...]]></description>
            <content:encoded><![CDATA[<h2 id="h-the-raidguild-dao" class="text-3xl font-header">The RaidGuild DAO</h2><p>The RaidGuild DAO is a network of developers that has collectively provided services to companies and protocols for over 5 years. Starting as the world's first DevShop DAO in 2019, it's weathered the many ups and downs of the web3 ecosystem. Along the way, we've worked with over 150 clients, shipped over 200 projects, and grown to over 140 members. But we've stuck primarily with building products for <em>others</em>.</p><p><strong>Today, we announce our first "venture" as a DAO: RaidGuild Forge. </strong>A venture for RaidGuild is a concentrated experiment in a particular sector to see if it can add value, and ultimately, a full product. For Forge, we will focus on niche mini-games and go through 3 stylized phases over the next 6 months (from June to December, 2025).You've </p><ol><li><p><strong>Prospecting:</strong> early public launches of mini-game experiments</p></li><li><p><strong>Mining: </strong>fast iteration on experiments that have traction</p></li><li><p><strong>Ore Processing: </strong>building out a mini-game with traction into a full game</p></li></ol><p>Of course, if the venture ever loses steam it could wind down at any of these phases.</p><h2 id="h-the-forge-venture" class="text-3xl font-header">The Forge Venture</h2><p>The Forge Venture is spinning up specifically to prospect the area of Digital Physics (or <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://aw.network/posts/the-case-for-autonomous-worlds">Autonomous Worlds</a>) in web3 games. A handful of studios have investigated these grounds before: particularly, Dust (formerly Biomes) and CCP Games with EVE Frontier are exploring them. However, Forge will specifically focus on <strong>patent-royalty stacking in games with Digital Physics.</strong> Our prospecting will focus on building experimental mini-games with 4 core mechanics.</p><ol><li><p><strong>Patented</strong> <strong>Components: </strong>engineered parts that can be used in the machines of assemblers; requires low-level skills</p></li><li><p><strong>Patented</strong> <strong>Machines:</strong> structures that are assembled as one of the core items of multiplayer battles; requires mid-level skills</p></li><li><p><strong>Multi-player</strong> <strong>Battles</strong>: contests between players using assembled machines; requires high-level skills</p></li><li><p><strong>Royalty</strong> <strong>Splits</strong>: rewards that go to the winner of a battle, as well as both the assemblers of machines and engineers of components that were used to win the battle</p></li></ol><p>While the patent-royalty mechanics will remain relatively fixed between mini-games, the battle types will differ for each release. For instance, our first mini-game will center around 2D Tower Defense battles, but future games could center around RoboCup, kart racing, or even FPS games (the respective machines being robot fighters, karts, and weapons).</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b0ea6b196b72071b4bb04cb1ecfb6296.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAVCAIAAACor3u9AAAACXBIWXMAABYlAAAWJQFJUiTwAAADp0lEQVR4nLVVTW8bVRQ9tsfjj/HHhMnYcWYy9mTmzZuxx54Z14lraohLlLZpQmkhQNUFEgpVVaRKCVR0iYgQ5AewQEiIVTewyIYFICgLkJBgg7rkQ12gihVix4ZF0ZtJYtc0SSuBdDV6enPfPe+ee+59sDj8r4b/PCLlDwYwMf7but9MgBx6JwPQwNweBMCjU5k09nZMDM0Iv5THnFpypSzlQWLjDgQgCXQm8YyT8UXmcB8A5VEFbt7cufrCizMATaElpgJZCGTBk9I9tdQSk46A1y9f2Vy/TNOwMwhkwZeyvpRtiameIs9NiSpw41zp3jdr5+qivkfGLgBJMIC339z+7vbd5WO+DvT16ZNUGxD1CWP6QrfZU8sm8Gz/8UBTdaApcgOiDkxlYCp9vbLSsvpaeRpY1LMfb7qzYxSRBLw83AxoBm25UC8m2WaYuBFaDbATIBwaec5Joy1yNLHLTGR6SFS7EG+LWK3lmsKwlqBJdv6SUd7wqtsn7E1X2/C0q67m52IWBzsVMityN44Zr7rqhlfdOm5v953XPN0vxCNuKc8YM4C35unWcft6YLwRGIvlvBEG36tBEk0BZ9UJP88u4oRlHFVeI8v2mxmWaDPPMh5VB4mxJJw0glzczaCVZQHHVURiLJUo8YsL83Uh1EZsWKQaMF+ROlOsgCQxPGWwkqSWXZMpKo6uIh8g0xGkbmVi1bcbRb5R5If7wGmXDExtvxUoj3o+0Simng6cE9pUFPe0a5CRVnhwK2rASav2192vv//iw6gDSAyOEPvlh0/+uPNlS8oRgKYZLTsfbN37+/b5rq+GOxaHRbsWSfywUUFiqBeTX+28d+fHzwZkpordMu589O7vP9260PVqIaoOvP/O9T9/+/ba2lk19GEAVHvKmlnxbDvD4hzW9xrgScKqz1yj3p6vyG15IjpJeSy3LHciNQs08vH9aq20rEi7Rw87yjM/T0qfcQ07wwAGpjJXLphg8j3jGoEcchVKPtKrxWOtF9DkSB8cORrNMPfZUGM0FzM51vMG4Ai7Etq3qFqnrMlHH9dxvEQqS1OFBTlzcbb0XHVyIAs0yYKeqptLjv6koSxSrSXllshjv356baH2r1l0uJEE1m1l3VZetqav1JVXbOWSUXbS7Mo9pdQpFz0p2wmpO++Xf/58c6VR0h4JwOIwE04kE2xRDdf7D8Do3G6K6ed7rUaRGx/XRxqrYTK0aHHAu0R51tWjfx8W4OFtdIhZHP4BLcbCUSO7WvoAAAAASUVORK5CYII=" nextheight="1134" nextwidth="1710" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">Engineers build components from raw materials, Assemblers build machines from components, and Battlers win stake using machines. Stake is distributed to the winning battler, and all patent owners of machines and components they used.</figcaption></figure><p>To illustrate this further, let's take the example of a kart racing mini-game, where our 4 mechanics form 3 player personas.</p><ol><li><p><strong>The Battler:</strong> the player driving the pre-assembled karts in races</p></li><li><p><strong>The Assembler:</strong> the player who builds unique karts using pre-engineered components</p></li><li><p><strong>The Engineer:</strong> the player who creates and optimizes components (like wheels, frames, and engines) based on the constraints of the game's digital physics</p></li></ol><p>Players can focus on 1 persona, or dabble with all 3. Our goal will be to find an initial battle style that's both fun and easily illustrates these 3 personas and underlying patent-royalty system.</p><h2 id="h-mud-and-redstone" class="text-3xl font-header">MUD and Redstone</h2><p>To keep as much on-chain as possible, we'll be building all initial mini-games on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mud.dev/">MUD</a> and deploying on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://redstone.xyz/">Redstone</a>, which allows for extremely cheap transactions and eventually 7ms latency through <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://lattice.xyz/quarry">Quarry</a>. However, for in-game payments--in order to start the flow of royalties--we will be using Base USDC, given how easy it is for users to purchase.</p><h2 id="h-our-niche-and-raidguilds-advantage" class="text-3xl font-header">Our Niche and RaidGuild's Advantage</h2><p>Because of high gas costs and slow block speeds many of these games are forced to move most of the data off-chain, reducing them to somewhat unsophisticated and overly traditional versions of what they could be. While web3 games have improved quite a bit in the last few years, they are still not far off from the flash games of 20 years ago (think <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://addictinggames.com">addictinggames.com</a> circa 2008). At the same time, high-quality web2 games are continuing to dabble with web3 features, but generally not beyond introducing NFTs into already existing franchises. There has been a strong increase in web3 games released in the last couple years, but clearly there are plenty of areas that are untapped.</p><p>As is no surprise, we believe the real magic of web3 games comes when most of the data is on-chain and Digital Physics is built into it from the beginning. While traditional games focus on 1 type of player (The Battler), our games will focus on 3 types of players: The Battler, The Assembler, and The Engineer. Each plays a role in driving what's possible in the game and even changing the meta for the entire player base. A new component is introduced that changes what assemblers use, a new machine is introduced that changes the strategy of battlers, or a new battle style changes what components and machines are most in demand. Once a fair patent-royalty framework is solidified, it will be exciting to see this dynamic applied to many different genres.</p><p>Since the beginning, RaidGuild has straddled the world of role-playing and work. In our DAO, each contract is a raid, our main meeting is a RoundTable, and every internal role has an associated class (e.g., solidity engineers are wizards). Thus, building games that straddle these worlds is a natural inclination. RaidGuild's very existence illustrates the power of pseudonymous players around the world voluntarily coming together to make a living through role-play. RaidGuild Forge is an attempt to make this possible for those beyond our 140 member base. </p><p>What we've always lacked, though, is an automated way of attributing value and distributing rewards based on it. Numerous projects have tried to crack this nut: SourceCred notably tried until it dissolved in 2022, and Tea Protocol is attempting to do it now for open source software. Building out a patent-royalty system for Autonomous Worlds is perhaps another attempt at doing this, albeit narrowly focused. But if successful, it will not only change what players come to expect from their games, but potentially what sovereign workers expect for making a living.</p>]]></content:encoded>
            <author>raidguild-forge@newsletter.paragraph.com (ECWireless)</author>
            <category>raidguild</category>
            <category>forge</category>
            <category>gaming</category>
            <category>web3</category>
            <category>patent</category>
            <category>royalty</category>
            <category>battle</category>
            <category>dao</category>
            <category>venture</category>
            <category>battlers</category>
            <category>assemblers</category>
            <category>engineers</category>
            <category>mud</category>
            <category>redstone</category>
            <enclosure url="https://storage.googleapis.com/papyrus_images/523b7a1e11c500f1e189bc9c59562f01.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Building a Web3 Gaming Console - Part 1]]></title>
            <link>https://paragraph.com/@raidguild-forge/building-a-web3-gaming-console-part-1</link>
            <guid>DCZOIVIlx21EIUg8SAMe</guid>
            <pubDate>Thu, 05 Jun 2025 12:29:58 GMT</pubDate>
            <description><![CDATA[When we think about "hardware" for web3, we tend to think of the blockchain that an application runs on. For web3 gaming, the metaphor extends even further. There are plenty of web3 gaming "consoles" and "arcades" out there, but those consoles and arcades are generally just branding around digital distribution platforms. This project is an attempt to make a physical web3 gaming console. In its final form, I want the console to be cheap (less than $125 in parts), handheld, and fully dedicated to ]]></description>
            <content:encoded><![CDATA[<p>When we think about "hardware" for web3, we tend to think of the blockchain that an application runs on. For web3 gaming, the metaphor extends even further. There are plenty of web3 gaming "consoles" and "arcades" out there, but those consoles and arcades are generally just branding around digital distribution platforms. This project is an attempt to make a physical web3 gaming console.</p><p>In its final form, I want the console to be cheap (less than $125 in parts), handheld, and fully dedicated to web3.</p><h2 id="h-early-dabbling" class="text-3xl font-header">Early Dabbling</h2><p>Earlier this year, I put together a couple pre-designed kits for Retropie consoles built around the Raspberry Pi Zero W 2. The first was a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://learn.adafruit.com/pigrrl-zero/overview">PiGRRL Zero by Adafruit</a>, and cost me <strong>$92.26</strong> in parts. It took a fair amount soldering, 3D printing, and wire wrangling, and still resulted in a device that technically worked, but was still very clunky.</p><figure float="none" width="494px" data-type="figure" class="img-center" style="max-width: 494px;"><img src="https://storage.googleapis.com/papyrus_images/a99048d8ee24ebb26202c3eaeeddf0d6.jpg" blurdataurl="data:image/png;base64,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" nextheight="3024" nextwidth="3024" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">PiGIRRL before its 3D printed casing</figcaption></figure><figure float="none" width="499px" data-type="figure" class="img-center" style="max-width: 499px;"><img src="https://storage.googleapis.com/papyrus_images/45409ff14bf4cb70db12ac59ed0656e9.jpg" blurdataurl="data:image/png;base64,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" nextheight="3024" nextwidth="3024" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">PiGRRL after its 3D printed casing</figcaption></figure><p>My second build was the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.null2.co.uk/build-guide">Null 2 by Ampersand</a>, which cost me <strong>$99.38 </strong>in parts. While still requiring some soldering, and multiple failed 3D case prints, the result was super compact and enjoyable to use. In fact, I still play on it a couple times a week. My conclusion is that attaching all major components to a large, pre-designed PCB is the way to go (less wires to wrangle).</p><figure float="none" width="493px" data-type="figure" class="img-center" style="max-width: 493px;"><img src="https://storage.googleapis.com/papyrus_images/0a7298e0ab07042821a525361a0550f7.jpg" blurdataurl="data:image/png;base64,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" nextheight="3024" nextwidth="4032" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">Null 2 back before 3D printed casing</figcaption></figure><figure float="none" width="501px" data-type="figure" class="img-center" style="max-width: 501px;"><img src="https://storage.googleapis.com/papyrus_images/7b687ac66fa19d75b012d416ad855efc.jpg" blurdataurl="data:image/png;base64,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" nextheight="3024" nextwidth="3024" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">Null 2 after 3D printed casing</figcaption></figure><p>These 2 previous builds exclusively ran old Retropie games, though. To make a console that works exclusively with web3 games, I'll need a handful of additional features.</p><ul><li><p>Web3 game launcher that opens at startup (this will house the players library of web3 games)</p></li><li><p>A web2 game engine that can build around on-chain data storage and syncing (like Unreal, Unity, or Godot)</p></li><li><p>A web3 game engine that will handle the on-chain data storage and syncing (like MUD)</p></li><li><p>A board powerful enough to run modern 2D games (and maybe 3D games), while making heavy use of network calls</p></li><li><p>A built-in hardware wallet that permanently links gameplay to a particular device</p></li></ul><h2 id="h-potential-parts-of-this-series" class="text-3xl font-header">Potential Parts of This Series</h2><p>The continuation of this series primarily depends on if a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mud.dev/">MUD</a> plugin can be made to work with Godot 4 (MUD is an on-chain game engine built by Lattice, and Godot 4 is an open source traditional game engine). But assuming all goes well, I can see there being at least 4 parts.</p><ol><li><p>Testing the waters with Godot and cheap DIY components (this post)</p></li><li><p>Adding a MUD plugin to make my Godot game on-chain</p></li><li><p>Designing my own console and web3 Godot game</p></li><li><p>Adding a hardware wallet to my console</p></li></ol><h2 id="h-testing-with-godot-and-cheap-diy-components" class="text-3xl font-header">Testing with Godot and Cheap DIY Components</h2><h3 id="h-the-hardware" class="text-2xl font-header">The Hardware</h3><p>I wanted a board that was as cheap as I could go, while still being capable of displaying a 2D game on a 3 inch screen, and while also having decent support/documentation/community for when things go wrong. For the third quality, Raspberry Pi seemed like the obvious choice. There's a huge and friendly community for Raspberry Pi, and plenty of solid documentation. For the first two qualities, I narrowed it down even further to the <strong>Raspberry Pi 3 B+</strong>, which cost me <strong>$48</strong> before taxes and shipping.</p><p>The screen was a bit more persnickety. My first choice was a <strong>$14 Waveshare 240x320 IPS LCD Display</strong>. However, because it used an IPS connection, a fair amount of driver installation and configuration was required. As it turned out, one of the drivers (FBCP) is deprecated in the latest Raspberry Pi OS (Bookworm). And the older OS (Bullseye) didn't have OpenGL 3, which my Godot game required. So I moved on to another screen.</p><p>My second choice was a <strong>$33 Osoyoo 480x320 HDMI LCD Display</strong>. While a little pricier, I at least didn't have to install any drivers, and it's likely that the HDMI connection will look smoother given its faster responsiveness. It also means no soldering! I may change back to IPS in the future, if I need something that is more compact, but I'll return to that in a later post.</p><p>My remaining bits of hardware are a 5v micro USB power cable, a cheap Logitech game controller, and a wireless keyboard and mouse to launch the game (in the future I'll have the game launch at startup).</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ec4cfe81e80e9b3ceded28bc14050898.jpg" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAALCAIAAACRcxhWAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEM0lEQVR4nD3BaUxaBwAA4Nd0qU1KhlqPCQy55PBAQNAH6uNQfOB7wENu5EYRXoUKVPFCrFTUAh5I1mkXZ1bXZk3WpEvWLUvWNEvT/djVJnYakzb9saQ7su1Xfyzp0v3b9wHK3ja4TyKRtAgFvEGt3GFHwyP2zHS0sDy/XcjubK/ultc+eD+/t7O+t7O1t1Pau14ubxfyV3Pl7WJpa31rc30xMxePx3x+bzQWzRULy/l8On2pmJvOLkzgI1ZAKofcblsM90wmQwtTeC6TLCzPZNOTuUyquDKfW0ylEpGpOD43NTGbiq9m04vpVH75cmkrf/Pm/o0b+1eySyiqIxAqyWQyi0mVCNjwQLfZoh3H3VevTG2szQOf4PSNkMxl0Mcd5mjYfzHi9rgwDFWiiCoRHV1eSBWWF0qFbHEls1lcKZfy5ffW79//4vjk8OVfv716/frxz0fxWKShvvatinOVVVUcNh2SCS0Wjd2OOOzItc0M8CAErLnYn5NY33DoFutwLrv4LqmKyaRCvdLpRGRlcXp1aW5pfnLh0ti9j1eeHH57dPLj0+PHxyeHJy+e/fLHn6/evPn7n3+v75ZBcRuBQCASidwmqtWovnVQWFtLLszggCdFSewCFqhdLhQP6sy3b99NJSeUEDgZC6fioclYKBpyXwz7MZ1WKWzMTwcfPLz33U8Pnx49ef7i2fHzk0ePvi6VVi7PXkjgwy6Llsmkvk2o4HJotw627ty5loh6AATrQs0ycbdMIAE1Gn1mcfXXl7/PJMf9TuxCaDjoNsVxfyqOi/it9MaGfhEt6dd9+dWnn9092CimhzDVINyt0ojtZig+5oiHbbGQ1aCFOoU8uE824jctzY0DMGwSCiQikbBTIgZBEIbR7384/Gj/Q40StJsQnxMbD7ktOnUbl8Hj0KVdrXZE4tT1YEM9ErWY1crolLc4Peoxnz7o0o+69XjAlMCd6URgatyexO3Z2QhQS2KKRAJ+O08obOkQtTfzeL5AaGd3D0MGUFhpN6EadY8UFAzACpGQ9059NYNe7/HKfVP9iAVEUJlOI3WbtWH3kN+mDTjRoAuN+IzRoHkibJkIW+YngwCTzenp6eZyWfzWJpGoubm5icViKJRKOdQDSvjCNjaFfP581enTp4BzZ4GzpwAypRJzgFq1WCFtH1R2GQchn9OAj9hCHr3HAnttmoBD4zT1BV1INGSOh23AGUIdg8lqpFHYHLpSITbqlSIRj06n1tXVMGgkNoPEpNbQyVUNNRXUBiKbVsfnUPqlbTqVpFvMQ1WgCVF4Hdio12Y3DjhNfVaD3GpQOI0qqwHyWAfCviHgf2x2oxzq8Dq1GKpgNVHPVAA0Sl0TrZZGJjIp1TQSkUmtbmE18NlkqJMD97Z3i7mwvAPTQgG3ORxwOExaEwLZDCqrQe4y91l0vTaDPOBE/wNKbXQIxIMX8wAAAABJRU5ErkJggg==" nextheight="1409" nextwidth="4030" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-the-software" class="text-2xl font-header">The Software</h3><p>As mentioned earlier, I'm using the latest <strong>full Raspberry Pi OS</strong> as my operating system. This may be overkill for a device that is purely dedicated to launching a game on startup, but it seemed the easiest to go with for testing.</p><p>On the game side, I'm beginning with the <strong>Godot</strong> engine--it's open source, growing in popularity, and doesn't include the pricing hikes that Unity recently introduced. 7 years ago, I dabbled with Unreal for a music VR project, but didn't get far. Already, though, getting up and running with Godot is much easier (based on my memory of Unreal): the download file is tiny, and going from their website's splash page to loading your first project takes about 2 minutes.</p><p>Given that I've never created a game in Godot, I started with a beginner tutorial. This one seemed good: </p><div data-type="youtube" videoid="LOhfqjmasi0">
      <div class="youtube-player" data-id="LOhfqjmasi0" style="background-image: url('https://i.ytimg.com/vi/LOhfqjmasi0/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=LOhfqjmasi0">
          <img src="https://paragraph.com/editor/youtube/play.png" class="play">
        </a>
      </div></div><p>A couple hours later, and the demo was ready to test. While running perfectly smoothly on my MacBook, the game moved at glacier speeds on the Pi. As it turned out, my 1GB of RAM was no match for the HD resolution I exported at, and the default resolution the OS ran on. I found that exporting the game at 640x480 and downgrading the Raspberry Pi OS' resolution to the lowest setting was the winning combination to get things running smoothly. The result is just enough to feel like I'm cutting my teeth on what constraints will look like throughout the project.</p><figure float="none" width="100%" data-type="figure" class="img-center" style="max-width: 100%;"><img src="https://storage.googleapis.com/papyrus_images/4edeac479195aa514175681bef3da59b.gif" blurdataurl="data:image/png;base64,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" nextheight="1080" nextwidth="1920" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>As much as I'd like to jump into designing a full minigame, PCB, and 3D printed housing, I first need to make sure that the web3 plugin will work. The next post will primarily deal with trying to get a MUD-ified version of this demo working.</p><h2 id="h-next-steps" class="text-3xl font-header">Next Steps</h2><ul><li><p>Get a MUD plugin working in Godot</p></li><li><p>Add on-chain components to my demo game (each coin picked up is stored on-chain)</p></li><li><p>Ensure MUD-ified game can be exported and played on the current demo device</p></li><li><p>Launch game at startup and play in kiosk mode</p></li><li><p>Add a safe power shut down when user quits game</p></li></ul><br>]]></content:encoded>
            <author>raidguild-forge@newsletter.paragraph.com (ECWireless)</author>
            <category>web3</category>
            <category>crypto</category>
            <category>gaming</category>
            <category>console</category>
            <category>hardware</category>
            <category>tech</category>
            <category>raidguild</category>
            <category>forge</category>
            <category>arcade</category>
            <category>raspberry</category>
            <category>pi</category>
            <category>godot</category>
            <enclosure url="https://storage.googleapis.com/papyrus_images/3c3fdc19ded18e79cd61c60abba16552.jpg" length="0" type="image/jpg"/>
        </item>
    </channel>
</rss>