<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Godot on Nibbleblog</title><link>https://nibble.blog/tags/godot/</link><description>Recent content in Godot on Nibbleblog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><copyright>Ясен Динков 2022</copyright><lastBuildDate>Thu, 04 Jun 2026 12:00:00 +0200</lastBuildDate><atom:link href="https://nibble.blog/tags/godot/index.xml" rel="self" type="application/rss+xml"/><item><title>Glass Bead</title><link>https://nibble.blog/projects/glass-bead/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://nibble.blog/projects/glass-bead/</guid><description>&lt;p&gt;A daily word-association game. You get eight words in a circle and have to connect them in the right order. Wrong guesses and hints add time to your score.&lt;/p&gt;
&lt;p&gt;The frontend is plain JavaScript. The backend handles games and leaderboards in ASP.NET Core, with Azure Table Storage. You can also sign in with Bluesky to compare scores.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Built with:&lt;/strong&gt; .NET 8, JavaScript, Azure Table Storage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://glassbead.games/"target="_blank" rel="noopener noreferrer"&gt;Play Glass Bead&lt;/a&gt;
&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Does it Spread</title><link>https://nibble.blog/projects/does-it-spread/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://nibble.blog/projects/does-it-spread/</guid><description>&lt;p&gt;A short point-and-click puzzle game made for Pirate Software Game Jam 14. I put it together in about eleven hours.&lt;/p&gt;
&lt;p&gt;Made with Godot 4.2, Krita, Paint.NET, LMMS and Audacity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://nibblebit.itch.io/does-it-spread"target="_blank" rel="noopener noreferrer"&gt;Download on itch.io&lt;/a&gt;
&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Seasons</title><link>https://nibble.blog/projects/seasons/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://nibble.blog/projects/seasons/</guid><description>&lt;p&gt;A short adventure about travelling between parallel timelines to solve puzzles. Made for the Summer Fediverse Jam in 2023.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a Godot game, with a Windows download on itch.io.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://nibblebit.itch.io/seasons"target="_blank" rel="noopener noreferrer"&gt;Download on itch.io&lt;/a&gt;
&lt;/strong&gt; · &lt;strong&gt;&lt;a href="https://github.com/ydinkov/Seasons"target="_blank" rel="noopener noreferrer"&gt;Source on GitHub&lt;/a&gt;
&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Creddy</title><link>https://nibble.blog/projects/creddy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://nibble.blog/projects/creddy/</guid><description>&lt;p&gt;A browser app for keeping track of store credit, shared spending, cards and cashback rules.&lt;/p&gt;
&lt;p&gt;The PWA is built in Blazor WebAssembly. Programs can be kept in browser storage or use a Google Sheets source. The cloud-connected side is still a work in progress.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Built with:&lt;/strong&gt; C#, .NET 10, Blazor WebAssembly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://creddy.asdf.tools/"target="_blank" rel="noopener noreferrer"&gt;Open Creddy&lt;/a&gt;
&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>ASDF Tools</title><link>https://nibble.blog/projects/asdf-tools/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://nibble.blog/projects/asdf-tools/</guid><description>&lt;p&gt;A bunch of small web tools that don&amp;rsquo;t really need a home of their own.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a countdown timer, QR-code generator, graph visualizer, connection-string converter and a few others. Most are standalone HTML, CSS and JavaScript pages.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://asdf.tools/"target="_blank" rel="noopener noreferrer"&gt;Browse ASDF Tools&lt;/a&gt;
&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Dialogative</title><link>https://nibble.blog/projects/dialogative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://nibble.blog/projects/dialogative/</guid><description>&lt;p&gt;A .NET library for writing dialogue trees in YAML. It handles branching options, conditions and updates to game state. Expressions use Power Fx.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s on NuGet, and the repository has examples.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Built with:&lt;/strong&gt; C#, .NET 10, YAML, Power Fx.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/ydinkov/Dialogative"target="_blank" rel="noopener noreferrer"&gt;Source and examples&lt;/a&gt;
&lt;/strong&gt; · &lt;strong&gt;&lt;a href="https://www.nuget.org/packages/Dialogative/"target="_blank" rel="noopener noreferrer"&gt;NuGet package&lt;/a&gt;
&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>SpriteCombiner</title><link>https://nibble.blog/projects/spritecombiner/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://nibble.blog/projects/spritecombiner/</guid><description>&lt;p&gt;A small command-line tool for combining individual images into a sprite sheet. The source images are named with their X and Y positions, and the tool assembles them into one image.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a Windows download on itch.io, along with the source on GitHub.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Built with:&lt;/strong&gt; C#, .NET.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://nibblebit.itch.io/spritecombiner"target="_blank" rel="noopener noreferrer"&gt;Download on itch.io&lt;/a&gt;
&lt;/strong&gt; · &lt;strong&gt;&lt;a href="https://github.com/ydinkov/SpriteCombiner"target="_blank" rel="noopener noreferrer"&gt;Source on GitHub&lt;/a&gt;
&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Spirit Games</title><link>https://nibble.blog/projects/spirit-games/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://nibble.blog/projects/spirit-games/</guid><description>&lt;p&gt;A website where I keep my game-development projects. It links to games and tools, the Nibblebit Challenge and Spawn Point, a beginner Godot webinar.&lt;/p&gt;
&lt;p&gt;The site is plain HTML, CSS and JavaScript.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://spirit.games/"target="_blank" rel="noopener noreferrer"&gt;Visit Spirit Games&lt;/a&gt;
&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Socials</title><link>https://nibble.blog/socials/</link><pubDate>Tue, 27 Oct 2026 00:00:00 +0000</pubDate><guid>https://nibble.blog/socials/</guid><description>&lt;h1 id="find-me-online"&gt;Find me online&lt;/h1&gt;
&lt;p&gt;I&amp;rsquo;m &lt;strong&gt;Yasen Dinkov&lt;/strong&gt;, also known as &lt;strong&gt;nibblebit&lt;/strong&gt;. These are the public accounts and projects I link to from my own sites.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/nibblebit.bsky.social"target="_blank" rel="noopener noreferrer"&gt;Bluesky — @nibblebit.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/ydinkov"target="_blank" rel="noopener noreferrer"&gt;X — @ydinkov&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/yasendinkov/"target="_blank" rel="noopener noreferrer"&gt;LinkedIn — Yasen Dinkov&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ydinkov"target="_blank" rel="noopener noreferrer"&gt;GitHub — @ydinkov&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nibblebit.itch.io/"target="_blank" rel="noopener noreferrer"&gt;itch.io — nibblebit&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://linktr.ee/ydinkov"target="_blank" rel="noopener noreferrer"&gt;Linktree — @ydinkov&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Threads&lt;/strong&gt;: profile URL to be added after verification.&lt;/p&gt;
&lt;p&gt;For game-development projects and experiments, visit &lt;a href="https://spirit.games/"target="_blank" rel="noopener noreferrer"&gt;spirit.games&lt;/a&gt;
. For more about me, see &lt;a href="https://nibble.blog/about/"&gt;About me&lt;/a&gt;
. Spirit Games also has a &lt;a href="https://spirit.games/socials/"target="_blank" rel="noopener noreferrer"&gt;socials page&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>The Clone Wars: Why Your Best Anti-Clone Tool Might Be Marketing</title><link>https://nibble.blog/posts/godotcon-2026-clone-wars-reupload-scams/</link><pubDate>Thu, 04 Jun 2026 12:00:00 +0200</pubDate><guid>https://nibble.blog/posts/godotcon-2026-clone-wars-reupload-scams/</guid><description>&lt;p&gt;At &lt;strong&gt;GodotCon Amsterdam 2026&lt;/strong&gt;, I gave a talk called &lt;strong&gt;The Clone Wars: Defending Godot Games From Reupload Scams&lt;/strong&gt;. It was about something nobody wants to put on their game-dev roadmap: people stealing your game and pretending it&amp;rsquo;s theirs.&lt;/p&gt;
&lt;p&gt;Godot is open, accessible, and makes it wonderfully easy to get games into people&amp;rsquo;s hands. Unfortunately, exporting a game also puts a lot of its guts into other people&amp;rsquo;s hands. Some of those people are curious modders or researchers. Others are interested in repackaging somebody else&amp;rsquo;s work, publishing it under a new name, or tricking players into buying the wrong game.&lt;/p&gt;
&lt;p&gt;The talk was partly about thinking like a security engineer. But the point I really wanted developers to take away was less technical:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Protecting your game&amp;rsquo;s identity often matters more than protecting its binaries.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Since the talk, developments in AI-assisted reverse engineering have only made that distinction more important.&lt;/p&gt;
&lt;h2 id="you-cant-protect-what-you-distribute"&gt;You can&amp;rsquo;t protect what you distribute&lt;/h2&gt;
&lt;p&gt;When we think about securing a game, our instinct is to reach for technical barriers: encrypted assets, obfuscated scripts, license checks, anti-tampering systems. If we can make the build sufficiently difficult to take apart, surely that&amp;rsquo;s a win?&lt;/p&gt;
&lt;p&gt;Sometimes it is. Those techniques introduce friction, and friction can discourage opportunistic abuse. But the player controls the computer running the game. Somewhere, the game has to load its assets, execute its logic, and render its output. A sufficiently motivated person can observe and inspect those things.&lt;/p&gt;
&lt;p&gt;Consider an encrypted asset pack. It&amp;rsquo;s useful for discouraging casual extraction, but your game still needs to decrypt the assets to use them. If the threat is somebody willing to investigate the running process, encryption isn&amp;rsquo;t an absolute barrier. It&amp;rsquo;s one more cost imposed on the attacker.&lt;/p&gt;
&lt;p&gt;That is a perfectly respectable thing to do, provided we remember the difference between &lt;strong&gt;making copying harder&lt;/strong&gt; and &lt;strong&gt;making copying impossible&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;And there&amp;rsquo;s an uncomfortable twist: the cost of understanding an unfamiliar piece of software is changing.&lt;/p&gt;
&lt;h2 id="ai-has-changed-the-economics-of-reverse-engineering"&gt;AI has changed the economics of reverse engineering&lt;/h2&gt;
&lt;p&gt;When I prepared the original talk, using AI to reverse engineer an entire game was possible in principle, but often impractical or prohibitively expensive. That is no longer a safe assumption.&lt;/p&gt;
&lt;p&gt;By October 2026, agentic tools can connect coding models to established reverse-engineering systems such as Ghidra or IDA, helping inspect binaries, follow function calls, and test hypotheses about program behaviour. &lt;a href="https://www.infoq.com/news/2026/10/reverse-engineer-anything/"target="_blank" rel="noopener noreferrer"&gt;InfoQ&amp;rsquo;s coverage of Reverse Engineer Anything&lt;/a&gt;
is one example of this shift.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s not oversell it. An AI model cannot reliably swallow any random executable and spit out a flawless, legally unencumbered recreation. Reconstructing a large game still takes effort, verification, and specialist knowledge.&lt;/p&gt;
&lt;p&gt;But the direction is clear: tasks that once required hours of tedious manual investigation are becoming easier to automate or accelerate. That lowers the cost of making an imitation, even when the imitation is imperfect.&lt;/p&gt;
&lt;p&gt;If your protection strategy depends on somebody finding your implementation too difficult or expensive to understand, it may have a shorter shelf life than you think.&lt;/p&gt;
&lt;h2 id="the-case-for-an-authoritative-server"&gt;The case for an authoritative server&lt;/h2&gt;
&lt;p&gt;One strong response is to stop shipping everything that makes your game valuable.&lt;/p&gt;
&lt;p&gt;If important game logic, persistent state, or decisions live on a server you operate, an attacker can&amp;rsquo;t simply extract those implementations from the downloadable client. For a multiplayer game, a server-authoritative design also helps prevent clients from inventing their own version of the truth.&lt;/p&gt;
&lt;p&gt;Godot provides &lt;a href="https://docs.godotengine.org/en/stable/tutorials/networking/high_level_multiplayer.html"target="_blank" rel="noopener noreferrer"&gt;high-level multiplayer building blocks&lt;/a&gt;
that can support this kind of architecture. The security comes from the decisions your server actually controls and validates, not merely from having a network connection.&lt;/p&gt;
&lt;p&gt;There are trade-offs. Servers cost money and require maintenance. Connectivity introduces latency, operational work, and a dependency on the developer keeping the service alive. For a single-player indie game, always-online DRM can end up being a worse experience for legitimate players than for the people you&amp;rsquo;re trying to stop.&lt;/p&gt;
&lt;p&gt;And even an authoritative server doesn&amp;rsquo;t stop somebody from looking at your game, learning its visible rules, and building a similar experience independently.&lt;/p&gt;
&lt;p&gt;So yes: keeping genuinely sensitive mechanics on an authoritative server is a powerful tool &lt;strong&gt;where that architecture fits the game&lt;/strong&gt;. It isn&amp;rsquo;t a magic anti-clone button.&lt;/p&gt;
&lt;h2 id="make-something-recognisable-not-merely-difficult-to-copy"&gt;Make something recognisable, not merely difficult to copy&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s the more interesting question: &lt;strong&gt;what makes your game unmistakably yours?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A distinctive visual language. A particular rhythm to its mechanics. Characters, humor, writing, sound, and a world that people remember. None of these elements is individually immune to imitation. Game mechanics aren&amp;rsquo;t automatically protected just because they&amp;rsquo;re clever, and an artistic style alone doesn&amp;rsquo;t guarantee legal exclusivity.&lt;/p&gt;
&lt;p&gt;But a coherent creative identity has an advantage that obfuscated code doesn&amp;rsquo;t: players can recognise it.&lt;/p&gt;
&lt;p&gt;Imagine two games with superficially similar mechanics. One is a pile of features; the other has a recognisable world, art direction, voice, and relationship with its players. A copycat may be able to reproduce a feature, but reproducing the &lt;em&gt;whole identity&lt;/em&gt; convincingly is a different challenge.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a production advantage too. Ideally you develop a visual language and design vocabulary that&amp;rsquo;s hard for outsiders to imitate convincingly, yet easy for &lt;strong&gt;your own team&lt;/strong&gt; to keep extending. Good tools, reusable assets, and clear creative direction let the original evolve faster and more consistently.&lt;/p&gt;
&lt;p&gt;In other words: don&amp;rsquo;t just make something hard to steal. Make something you&amp;rsquo;re uniquely well placed to keep making.&lt;/p&gt;
&lt;h2 id="the-boring-stuff-is-surprisingly-effective"&gt;The boring stuff is surprisingly effective&lt;/h2&gt;
&lt;p&gt;Developers love technical puzzles. Marketing, community building, store listings, publication records, and trademark research? A considerably tougher sell.&lt;/p&gt;
&lt;p&gt;Unfortunately, that less glamorous work is often better aligned with the actual problem of a &lt;strong&gt;reupload scam&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Suppose somebody republishes your build under a different name. Encryption might not help once the build has escaped. But an established official site, recognisable branding, public release history, and direct channels to your players all make it easier to identify the original and report an impersonator.&lt;/p&gt;
&lt;p&gt;There are practical things worth doing before you spend months designing exotic anti-tampering measures:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Keep a clear official website and link to your legitimate store pages.&lt;/li&gt;
&lt;li&gt;Build relationships with players through communities, newsletters, or other channels you control.&lt;/li&gt;
&lt;li&gt;Preserve release dates, source files, artwork, and records of who created what.&lt;/li&gt;
&lt;li&gt;Check names and marks before launch, and understand which copyright or trademark protections may apply.&lt;/li&gt;
&lt;li&gt;Learn how the platforms you distribute on handle copyright complaints and impersonation reports.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;a href="https://www.wipo.int/cooperation/en/docs/ip-video-games.pdf"target="_blank" rel="noopener noreferrer"&gt;World Intellectual Property Organization&amp;rsquo;s guide to IP in video games&lt;/a&gt;
is a useful introduction to the distinctions between copyright, trademarks, and other rights. Actual protection and enforcement depend on the jurisdiction and facts; none of this replaces legal advice.&lt;/p&gt;
&lt;p&gt;None of these activities makes the executable impossible to copy. What they do is make it harder for somebody else to &lt;strong&gt;pass their copy off as the original&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s a different problem, and it&amp;rsquo;s the one many reupload scams actually exploit.&lt;/p&gt;
&lt;h2 id="protect-against-the-threat-you-actually-face"&gt;Protect against the threat you actually face&lt;/h2&gt;
&lt;p&gt;Before adding a technical safeguard, ask which attack you&amp;rsquo;re defending against.&lt;/p&gt;
&lt;p&gt;Someone redistributing your original build? Extracting assets? Impersonating your studio? Recreating visible mechanics? Cheating in an online game? Those aren&amp;rsquo;t interchangeable threats, and their mitigations shouldn&amp;rsquo;t be interchangeable either.&lt;/p&gt;
&lt;p&gt;For a multiplayer economy, server authority and validation may be essential. For an asset-theft problem, keeping evidence and making platform reports may matter more. For a counterfeit store listing, a recognisable brand and clear official distribution channels are especially valuable.&lt;/p&gt;
&lt;p&gt;The right answer is usually a mix of proportionate technical friction, sensible architecture, and good old-fashioned creative and commercial work.&lt;/p&gt;
&lt;p&gt;There are lessons here from enterprise security, but I promise I didn&amp;rsquo;t come to a game-development conference to sell anyone an ISO audit.&lt;/p&gt;
&lt;h2 id="make-the-original-matter"&gt;Make the original matter&lt;/h2&gt;
&lt;p&gt;AI is making software easier to inspect, understand, and reproduce. I don&amp;rsquo;t think that means security engineering is pointless. It means we should stop expecting technical obstacles alone to carry the full weight of protecting our work.&lt;/p&gt;
&lt;p&gt;Use them where they address a real threat. Put valuable decisions on a server when that fits the game. But also invest in the parts that give players a reason to seek out &lt;strong&gt;your&lt;/strong&gt; version rather than an imitation.&lt;/p&gt;
&lt;p&gt;Make your game distinctive. Make its creator identifiable. Make the legitimate version easy to find. And make it possible to keep building on what makes it yours.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The strongest defence against somebody copying your game might be giving people a reason to care about the original.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This article expands on my GodotCon Amsterdam talk with reflections added in October 2026, particularly on AI-assisted reverse engineering.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=CNBdxjWf8Fo"target="_blank" rel="noopener noreferrer"&gt;Watch The Clone Wars: Defending Godot Games From Reupload Scams — GodotCon Amsterdam 2026&lt;/a&gt;
&lt;/strong&gt;. The recording was published on June 3, 2026.&lt;/p&gt;</description></item></channel></rss>