<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Inuman Games</title>
    <description>The latest articles on DEV Community by Inuman Games (@inumangames).</description>
    <link>https://dev.to/inumangames</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4175795%2F537b26c6-129d-4ade-b713-b91f538df63a.png</url>
      <title>DEV Community: Inuman Games</title>
      <link>https://dev.to/inumangames</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/inumangames"/>
    <language>en</language>
    <item>
      <title>Sinete: a 2-player bluffing card game in Godot 4.6, and what I learned making it (looking for Android testers)</title>
      <dc:creator>Inuman Games</dc:creator>
      <pubDate>Sat, 10 Oct 2026 18:26:25 +0000</pubDate>
      <link>https://dev.to/inumangames/sinete-a-2-player-bluffing-card-game-in-godot-46-and-what-i-learned-making-it-looking-for-1a4a</link>
      <guid>https://dev.to/inumangames/sinete-a-2-player-bluffing-card-game-in-godot-46-and-what-i-learned-making-it-looking-for-1a4a</guid>
      <description>&lt;p&gt;I'm Rapha, a solo dev from Brazil. Sinete is a 2-player bluffing card game made in Godot 4.6, and it's in closed testing on Google Play right now. I'm looking for Android testers. Before the link, here are a few things Godot taught me while making it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The game
&lt;/h2&gt;

&lt;p&gt;Two brothers split a dead king's estate, and each noble sides with whoever hands over more of his land. The key move is the offer. You show 3 deeds, your brother takes 1 and you keep the other 2. Pick the wrong 3 and you've just paid for his best noble. You can play the computer, pass the phone around, or play online at your own pace. A match takes under 10 minutes. No ads, nothing to buy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdrom6h52nvk1l6nmy1bp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdrom6h52nvk1l6nmy1bp.png" alt="Answering an offer in Sinete" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Godot taught me
&lt;/h2&gt;

&lt;p&gt;The whole UI is built in code, no scenes from the editor. I can review a screen by reading one file, and the headless tests can build every screen and play full matches with simulated taps.&lt;/p&gt;

&lt;p&gt;Scripts run with &lt;code&gt;-s&lt;/code&gt; don't see autoloads. All my tooling broke on that, so &lt;code&gt;Settings&lt;/code&gt; and the save store became static classes instead.&lt;/p&gt;

&lt;p&gt;My random-match test passed while the game was broken. A function would hit an error, Godot would abort it, and the run still exited green. Now every headless tool listens to the engine log, and any script error or &lt;code&gt;push_error&lt;/code&gt; fails the run.&lt;/p&gt;

&lt;p&gt;A lambda that captures a node dies with that node. My card animations kept breaking until I switched to &lt;code&gt;Callable.bind()&lt;/code&gt; on methods of the screen.&lt;/p&gt;

&lt;p&gt;In 4.6 a &lt;code&gt;Label&lt;/code&gt; with autowrap and &lt;code&gt;clip_text&lt;/code&gt; inside a container can come out 1 px tall, and the text just disappears. &lt;code&gt;size_flags_vertical = SIZE_FILL&lt;/code&gt; fixes it.&lt;/p&gt;

&lt;p&gt;The strongest AI level needs up to a second per move on my PC, so it thinks on a &lt;code&gt;Thread&lt;/code&gt;. That only works because the AI code is pure. Any shared mutable static state would turn into a race.&lt;/p&gt;

&lt;p&gt;Online play is server-authoritative, because in a game that's mostly hidden information the client can't hold the full state. The rules engine exists twice, in GDScript and in TypeScript on Supabase, and a JSON test corpus runs on both in CI. I also dropped Godot's &lt;code&gt;RandomNumberGenerator&lt;/code&gt; for a tiny xorshift32, so the server can deal the exact same cards from the same seed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Joining the test
&lt;/h2&gt;

&lt;p&gt;Fill in the form with the email of the Google account on your phone. I add you to the list and send the Play Store link. Google wants testers to stay 14 days in a row, so please keep it installed after the first match. There's a feedback form in the release notes and I read all of it.&lt;/p&gt;

&lt;p&gt;Sign up: &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSfwONJx8qGfLv-lYQAy4xKopcDx3srNlRh5xrWBwEJW9mhoJg/viewform?usp=pp_url&amp;amp;entry.901672391=devto" rel="noopener noreferrer"&gt;https://docs.google.com/forms/d/e/1FAIpQLSfwONJx8qGfLv-lYQAy4xKopcDx3srNlRh5xrWBwEJW9mhoJg/viewform?usp=pp_url&amp;amp;entry.901672391=devto&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy to go deeper on any of this, especially the headless testing setup.&lt;/p&gt;

</description>
      <category>godot</category>
      <category>gamedev</category>
      <category>android</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
