<?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: varun chaaras</title>
    <description>The latest articles on DEV Community by varun chaaras (@asaleg).</description>
    <link>https://dev.to/asaleg</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3620776%2F72cd8857-0b03-45f6-ba59-1158be07a41e.png</url>
      <title>DEV Community: varun chaaras</title>
      <link>https://dev.to/asaleg</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/asaleg"/>
    <language>en</language>
    <item>
      <title>What permadeath taught me about cooperative game design (7 games in 7 weeks – week 6)</title>
      <dc:creator>varun chaaras</dc:creator>
      <pubDate>Mon, 19 Jan 2026 15:18:16 +0000</pubDate>
      <link>https://dev.to/asaleg/what-permadeath-taught-me-about-cooperative-game-design-7-games-in-7-weeks-week-6-4n21</link>
      <guid>https://dev.to/asaleg/what-permadeath-taught-me-about-cooperative-game-design-7-games-in-7-weeks-week-6-4n21</guid>
      <description>&lt;p&gt;I’m currently doing a personal &lt;strong&gt;7 Games in 7 Weeks&lt;/strong&gt; challenge to get better at shipping small multiplayer games and learning from them quickly.&lt;/p&gt;

&lt;p&gt;Week 6’s game is &lt;strong&gt;Dead Squad&lt;/strong&gt;, a 3-player cooperative side-scrolling zombie survival game — and it’s the first one in the challenge where everything started interacting in messy, interesting ways.&lt;/p&gt;

&lt;p&gt;You can play it here (free):&lt;br&gt;&lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://join.rune.ai/game/QvqxHKXD-HQI" rel="noopener noreferrer"&gt;https://join.rune.ai/game/QvqxHKXD-HQI&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It’s built using &lt;strong&gt;Rune + Forge&lt;/strong&gt;, which let me prototype real-time multiplayer without spending the entire week fighting infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  The core idea
&lt;/h2&gt;

&lt;p&gt;Dead Squad is intentionally simple:&lt;/p&gt;

&lt;p&gt;Three players move together through an auto-scrolling level. Zombies spawn in structured waves. Ammo is limited. When ammo runs out, you’re forced into melee. If all players die, the run ends.&lt;/p&gt;

&lt;p&gt;There’s no traditional “win” state — the goal is to survive as long as possible and see how many enemies your squad can take down before everything collapses.&lt;/p&gt;




&lt;h2&gt;
  
  
  Designing cooperation without explicit rules
&lt;/h2&gt;

&lt;p&gt;One of my main goals was to &lt;strong&gt;force cooperation through constraints&lt;/strong&gt;, not tutorials or UI warnings.&lt;/p&gt;

&lt;p&gt;Each player has a fixed role:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The center player is a melee-focused tank with higher health
&lt;/li&gt;
&lt;li&gt;The left and right players are hybrid gunners with strong ranged damage
&lt;/li&gt;
&lt;li&gt;Gunners automatically switch to melee when ammo runs out or enemies get too close
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That single ammo constraint ended up doing a lot of design work.&lt;/p&gt;

&lt;p&gt;Players naturally cluster around the tank.&lt;br&gt;&lt;br&gt;
They hesitate before spending bullets.&lt;br&gt;&lt;br&gt;
They panic when both gunners click empty at the same time.&lt;/p&gt;

&lt;p&gt;No popups required.&lt;/p&gt;




&lt;h2&gt;
  
  
  The unexpected lesson: permadeath changes psychology
&lt;/h2&gt;

&lt;p&gt;I added permadeath mostly for tension. What I didn’t expect was how dramatically it would change &lt;strong&gt;player behavior&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The moment one player dies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Movement becomes tighter and more deliberate
&lt;/li&gt;
&lt;li&gt;Risk tolerance drops immediately
&lt;/li&gt;
&lt;li&gt;Players protect space instead of chasing kills
&lt;/li&gt;
&lt;li&gt;Coordination increases, even without voice chat
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The mechanics don’t change — but the &lt;em&gt;tone&lt;/em&gt; of the game does.&lt;/p&gt;

&lt;p&gt;Difficulty sliders change numbers.&lt;br&gt;&lt;br&gt;
Permadeath changes how people think.&lt;/p&gt;




&lt;h2&gt;
  
  
  Systems that started colliding
&lt;/h2&gt;

&lt;p&gt;Compared to earlier games in the challenge, Dead Squad forced me to juggle several systems at once:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Asymmetric player roles
&lt;/li&gt;
&lt;li&gt;Ammo economy and forced weapon switching
&lt;/li&gt;
&lt;li&gt;Structured wave escalation across a scrolling level
&lt;/li&gt;
&lt;li&gt;Boss encounters layered into continuous movement
&lt;/li&gt;
&lt;li&gt;Multiplayer state sync while the camera never stops
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s still a small game, but it was the first one that felt like systems were colliding instead of politely taking turns.&lt;/p&gt;




&lt;h2&gt;
  
  
  Open questions
&lt;/h2&gt;

&lt;p&gt;If I continue iterating on this design, these are the things I want to test next:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are the player roles readable enough for first-time players?
&lt;/li&gt;
&lt;li&gt;Does the difficulty curve spike too hard once bosses appear?
&lt;/li&gt;
&lt;li&gt;Does permadeath feel tense and motivating — or just punishing over long sessions?
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Right now it sits in an interesting middle ground where some players love the pressure and others bounce off immediately, which might be a feature or a design smell. I’m still figuring that out.&lt;/p&gt;




&lt;h2&gt;
  
  
  Closing thoughts
&lt;/h2&gt;

&lt;p&gt;This project reinforced something I keep relearning:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Co-op games work best when systems quietly push players together instead of asking them to cooperate explicitly.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Dead Squad isn’t the biggest or flashiest game in the challenge, but it’s the one that taught me the most about how rules shape behavior — not just difficulty.&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.amazonaws.com%2Fuploads%2Farticles%2Fiwp4v1s6tf88el3oojv2.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.amazonaws.com%2Fuploads%2Farticles%2Fiwp4v1s6tf88el3oojv2.png" alt=" " width="720" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built with &lt;strong&gt;Rune / Forge&lt;/strong&gt; as part of a rapid multiplayer prototyping workflow.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ai</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Building a Social Deduction Game with a State Machine (7 Games in 7 Weeks – Week 4)</title>
      <dc:creator>varun chaaras</dc:creator>
      <pubDate>Mon, 05 Jan 2026 06:13:10 +0000</pubDate>
      <link>https://dev.to/asaleg/building-a-social-deduction-game-with-a-state-machine-7-games-in-7-weeks-week-4-2jj8</link>
      <guid>https://dev.to/asaleg/building-a-social-deduction-game-with-a-state-machine-7-games-in-7-weeks-week-4-2jj8</guid>
      <description>&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.amazonaws.com%2Fuploads%2Farticles%2Fnihpvy1gd13ijnq9qdi5.jpg" 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.amazonaws.com%2Fuploads%2Farticles%2Fnihpvy1gd13ijnq9qdi5.jpg" alt=" " width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m currently running a personal challenge: &lt;strong&gt;shipping 7 small multiplayer games in 7 weeks&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Each week, I force myself to explore a completely different design problem. After a physics-heavy multiplayer golf game last week, I deliberately pivoted in the opposite direction.&lt;/p&gt;

&lt;p&gt;This week’s experiment: &lt;strong&gt;a social deduction game where almost nothing moves&lt;/strong&gt;, but the tension comes from psychology, synchronization, and constraint.&lt;/p&gt;

&lt;p&gt;The result is &lt;strong&gt;Odd One Out&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Core Idea
&lt;/h2&gt;

&lt;p&gt;Odd One Out is a fast-paced social deduction game for 3–6 players.&lt;/p&gt;

&lt;p&gt;Each round:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All players receive a secret word&lt;/li&gt;
&lt;li&gt;Most players get the same word (e.g. &lt;em&gt;Coffee&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;One player gets a slightly different word (e.g. &lt;em&gt;Tea&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Players take turns giving &lt;strong&gt;one-word clues&lt;/strong&gt; to prove they belong, without revealing too much. After all clues are revealed, everyone votes on who they think the Odd One Out is.&lt;/p&gt;

&lt;p&gt;If the Odd One Out blends in, they score. If they’re caught, everyone else wins.&lt;/p&gt;

&lt;p&gt;Simple rules — surprisingly tense outcomes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Game Is State-Driven
&lt;/h2&gt;

&lt;p&gt;Unlike my previous game (which revolved around physics and continuous simulation), Odd One Out is driven almost entirely by a &lt;strong&gt;state machine&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In social deduction games, synchronization is everything. You can’t have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One player voting while another is still typing a clue&lt;/li&gt;
&lt;li&gt;One client revealing results early&lt;/li&gt;
&lt;li&gt;Late actions sneaking into the wrong phase&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To avoid this, the game moves through explicit phases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Role Reveal
&lt;/li&gt;
&lt;li&gt;Giving Clues
&lt;/li&gt;
&lt;li&gt;Voting
&lt;/li&gt;
&lt;li&gt;Round Results
&lt;/li&gt;
&lt;li&gt;Game Over
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every action checks the current phase before executing. If the phase doesn’t match, the action is rejected.&lt;/p&gt;

&lt;p&gt;This made the multiplayer logic &lt;strong&gt;dramatically easier to reason about&lt;/strong&gt; and eliminated an entire class of desync bugs.&lt;/p&gt;




&lt;h2&gt;
  
  
  When Randomness Feels Broken
&lt;/h2&gt;

&lt;p&gt;One unexpected issue was content repetition.&lt;/p&gt;

&lt;p&gt;Originally, word pairs were selected using simple randomness. Statistically valid — but players would occasionally see the same pair twice in a short session.&lt;/p&gt;

&lt;p&gt;Even though that’s “correct,” it &lt;em&gt;felt&lt;/em&gt; like a bug.&lt;/p&gt;

&lt;p&gt;The fix was simple: track which word pairs have already been used, and only reshuffle once everything has appeared. Essentially, &lt;strong&gt;bag randomization&lt;/strong&gt; instead of pure randomness.&lt;/p&gt;

&lt;p&gt;That small change made sessions feel far more intentional and fair.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Learned This Week
&lt;/h2&gt;

&lt;p&gt;A few takeaways from building this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explicit state machines are safer than scattered boolean flags&lt;/li&gt;
&lt;li&gt;Randomness often needs curation to &lt;em&gt;feel&lt;/em&gt; good to players&lt;/li&gt;
&lt;li&gt;Text input introduces very different UX and validation challenges than movement or physics&lt;/li&gt;
&lt;li&gt;Tension doesn’t come from complexity — it comes from &lt;strong&gt;constraints and consequences&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Odd One Out has almost no mechanical depth, yet players still hesitate, bluff, overthink, and second-guess each other. That was the most interesting part to watch.&lt;/p&gt;




&lt;h2&gt;
  
  
  Play the Game
&lt;/h2&gt;

&lt;p&gt;Odd One Out is playable right now on Rune with friends:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://join.rune.ai/game/v8uzM6DU-HwI" rel="noopener noreferrer"&gt;https://join.rune.ai/game/v8uzM6DU-HwI&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All the games in this challenge are built using Rune / Forge, and the focus is on rapid multiplayer prototyping rather than polish.&lt;/p&gt;

&lt;p&gt;If you’re building multiplayer games yourself, I’d love to hear how you approach synchronization, state flow, or randomness in similar designs.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>gamedev</category>
      <category>ai</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Building Bushido: Designing Tension with Only Two Buttons (7 Games in 7 Weeks - Week 3)</title>
      <dc:creator>varun chaaras</dc:creator>
      <pubDate>Sat, 27 Dec 2025 13:21:27 +0000</pubDate>
      <link>https://dev.to/asaleg/building-bushido-designing-tension-with-only-two-buttons-7-games-in-7-weeks-week-3-1727</link>
      <guid>https://dev.to/asaleg/building-bushido-designing-tension-with-only-two-buttons-7-games-in-7-weeks-week-3-1727</guid>
      <description>&lt;h1&gt;
  
  
  Building Bushido: Designing Tension with Only Two Buttons
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;(7 Games in 7 Weeks – Week 3)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I’m currently running a personal challenge: &lt;strong&gt;building and shipping 7 small games in 7 weeks&lt;/strong&gt;. Each game is intentionally scoped to explore one specific design or technical idea.&lt;/p&gt;

&lt;p&gt;Week 3’s game is &lt;strong&gt;Bushido&lt;/strong&gt; — a minimalist, timing-based samurai duel built around a single question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;How much tension can you create with almost no mechanics at all?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bushido is a two-player duel with only &lt;strong&gt;two actions&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Attack&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Block&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There’s no movement, no health bars, and no combos. A successful hit scores a point unless the opponent blocks at the correct moment. &lt;strong&gt;First to five points wins.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Designing Around Commitment
&lt;/h2&gt;

&lt;p&gt;One of the core design decisions was removing cancellation entirely.&lt;/p&gt;

&lt;p&gt;Once a player commits to an action, they’re locked into it until the animation finishes. You can’t react halfway through. You can only &lt;strong&gt;predict&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That single rule turns very simple inputs into a psychological game. Every attack is a risk. Every block is a read.&lt;/p&gt;

&lt;p&gt;Under the hood, the game is driven by a small, explicit state machine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Idle&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacking&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Blocking&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keeping the states clear and deterministic helped avoid edge cases and made the outcome of each interaction feel fair — even when it was brutal.&lt;/p&gt;




&lt;h2&gt;
  
  
  Timing Over Reflexes
&lt;/h2&gt;

&lt;p&gt;Attacks aren’t instant. They play out over a short window, and blocks only succeed if they overlap the attack within a narrow timing range.&lt;/p&gt;

&lt;p&gt;Each attack is marked as a &lt;em&gt;pending hit&lt;/em&gt;. When the animation ends, the game checks whether a valid block occurred during the correct window. If not, the attacker scores.&lt;/p&gt;

&lt;p&gt;This structure made the outcome feel &lt;strong&gt;earned rather than random&lt;/strong&gt;, especially in close matches.&lt;/p&gt;




&lt;h2&gt;
  
  
  Solo Play and Multiplayer
&lt;/h2&gt;

&lt;p&gt;Although Bushido is designed as a multiplayer duel, it’s fully playable solo.&lt;/p&gt;

&lt;p&gt;If only one player joins, the game spawns an AI opponent that follows the same rules — no cheating, no hidden advantages. If a second real player joins mid-session, the AI cleanly drops out and the match restarts.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Game Taught Me
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Simple mechanics don’t mean simple design
&lt;/li&gt;
&lt;li&gt;Commitment creates tension faster than speed
&lt;/li&gt;
&lt;li&gt;Clear state machines make timing-based games feel fair
&lt;/li&gt;
&lt;li&gt;Constraint is a design tool, not a limitation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🎮 Want to Play?
&lt;/h2&gt;

&lt;p&gt;Think you’ve got the timing?&lt;/p&gt;

&lt;p&gt;You can play &lt;strong&gt;Bushido&lt;/strong&gt; right now on Rune — solo against the AI or in a tense two-player duel:&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://join.rune.ai/game/cBxaHQpQ-FAI" rel="noopener noreferrer"&gt;https://join.rune.ai/game/cBxaHQpQ-FAI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re interested in building small multiplayer games like this, I’m using &lt;strong&gt;Forge by Rune&lt;/strong&gt; to prototype and ship these weekly builds:&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://forge.rune.ai" rel="noopener noreferrer"&gt;https://forge.rune.ai&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’ll be continuing the &lt;strong&gt;7 Games in 7 Weeks&lt;/strong&gt; challenge and sharing breakdowns as the series goes on.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>programming</category>
      <category>ai</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I Lost a Week to a Physics Bug in a Multiplayer Golf Game</title>
      <dc:creator>varun chaaras</dc:creator>
      <pubDate>Sun, 21 Dec 2025 14:10:30 +0000</pubDate>
      <link>https://dev.to/asaleg/i-lost-a-week-to-a-physics-bug-in-a-multiplayer-golf-game-2f4d</link>
      <guid>https://dev.to/asaleg/i-lost-a-week-to-a-physics-bug-in-a-multiplayer-golf-game-2f4d</guid>
      <description>&lt;p&gt;While building a small turn-based multiplayer golf prototype, I hit a bug that completely soft-locked the game.&lt;/p&gt;

&lt;p&gt;The ball would roll, slow down… and never actually stop.&lt;/p&gt;

&lt;p&gt;Visually, it looked stationary.&lt;br&gt;&lt;br&gt;
Numerically, it was still moving.&lt;/p&gt;

&lt;p&gt;In a turn-based multiplayer game, that’s fatal - the turn can’t advance unless the ball fully stops.&lt;/p&gt;

&lt;h3&gt;
  
  
  What went wrong
&lt;/h3&gt;

&lt;p&gt;I was applying friction every update, assuming velocity would eventually reach zero.&lt;/p&gt;

&lt;p&gt;It didn’t.&lt;/p&gt;

&lt;p&gt;Floating-point math meant the velocity just kept approaching zero forever. The game thought the ball was &lt;em&gt;still moving&lt;/em&gt;, so the turn never ended.&lt;/p&gt;

&lt;h3&gt;
  
  
  The fix
&lt;/h3&gt;

&lt;p&gt;I moved all physics logic into the authoritative game logic and added a hard “snap-to-zero” threshold.&lt;/p&gt;

&lt;p&gt;Once the ball’s speed dropped below a small value, I forced it to stop and advanced the turn.&lt;/p&gt;

&lt;p&gt;One line of logic fixed the entire multiplayer flow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Takeaway
&lt;/h3&gt;

&lt;p&gt;If your game logic depends on something &lt;em&gt;ending&lt;/em&gt;, you can’t rely on “almost zero.”&lt;/p&gt;

&lt;p&gt;You need to define &lt;strong&gt;what zero actually means&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;I wrote a deeper postmortem about building this game in a week - including procedural generation, multiplayer decisions, and what I’d do differently next time - here:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;[&lt;a href="https://medium.com/@chaarasvarun/7-games-in-7-weeks-building-backyard-golf-on-rune-week-2-0fd3737f935f" rel="noopener noreferrer"&gt;https://medium.com/@chaarasvarun/7-games-in-7-weeks-building-backyard-golf-on-rune-week-2-0fd3737f935f&lt;/a&gt;]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Edit 1:&lt;/strong&gt;&lt;br&gt;
hey guys I wanted to record a youtube video for my game and here it is!&lt;br&gt;
&lt;a href="https://youtu.be/1wQWDLnT2BI" rel="noopener noreferrer"&gt;https://youtu.be/1wQWDLnT2BI&lt;/a&gt; &lt;br&gt;
lmk what you think!&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>multiplayer</category>
      <category>javascript</category>
      <category>ai</category>
    </item>
    <item>
      <title>🚇 I Built a Mini Metro–Style Multiplayer Game on Rune (And Learned a Lot About Real-Time Sync)</title>
      <dc:creator>varun chaaras</dc:creator>
      <pubDate>Thu, 20 Nov 2025 11:06:13 +0000</pubDate>
      <link>https://dev.to/asaleg/i-built-a-mini-metro-style-multiplayer-game-on-rune-and-learned-a-lot-about-real-time-sync-1330</link>
      <guid>https://dev.to/asaleg/i-built-a-mini-metro-style-multiplayer-game-on-rune-and-learned-a-lot-about-real-time-sync-1330</guid>
      <description>&lt;p&gt;🎮 The Game Concept&lt;/p&gt;

&lt;p&gt;The game is basically a cooperative Mini Metro: multiple players share the same transit map and have to keep it running as stations spawn across the city. Anyone can draw new train lines, extend existing ones, delete segments, or reroute an entire area if congestion hits.&lt;/p&gt;

&lt;p&gt;It starts out peaceful.&lt;br&gt;
Then new stations appear faster.&lt;br&gt;
Then passengers start piling up.&lt;br&gt;
Then someone accidentally deletes a key connection and everything collapses.&lt;/p&gt;

&lt;p&gt;That mix of clarity and chaos is what makes it fun — and multiplayer turns it into a kind of friendly group puzzle where communication becomes the real mechanic.&lt;/p&gt;

&lt;p&gt;⚙️ Why I Expected Multiplayer to Be Hard&lt;/p&gt;

&lt;p&gt;Real-time syncing is normally the hardest part of a project like this. You’ve got:&lt;/p&gt;

&lt;p&gt;stations spawning at random positions&lt;/p&gt;

&lt;p&gt;multiple players editing the same network&lt;/p&gt;

&lt;p&gt;passengers moving every second&lt;/p&gt;

&lt;p&gt;timers that need to match on every device&lt;/p&gt;

&lt;p&gt;reconnects that shouldn’t break everything&lt;/p&gt;

&lt;p&gt;I assumed most of my weekend would go into networking.&lt;/p&gt;

&lt;p&gt;Rune ended up handling almost all of it for me.&lt;/p&gt;

&lt;p&gt;When a player dragged a line, everyone saw the update simultaneously. When a new station spawned, it appeared for every user at the same moment. Even refreshes and rejoins restored the full current state automatically.&lt;/p&gt;

&lt;p&gt;Instead of debugging netcode, I spent my time actually designing the game.&lt;/p&gt;

&lt;p&gt;🛠️ Building the Game Loop&lt;/p&gt;

&lt;p&gt;The core of the game revolves around a single shared state: the list of stations, the train lines, the passenger queues, and the timers for new spawns. Every player action — adding a node, removing a segment, extending a connection — updates that state directly.&lt;/p&gt;

&lt;p&gt;Passenger movement runs on a short timer. On each tick, passengers look for valid routes, move toward their destinations, and contribute to overcrowding if the network isn’t efficient enough.&lt;/p&gt;

&lt;p&gt;When any station gets too full, the game ends.&lt;br&gt;
Simple rule.&lt;br&gt;
Guaranteed drama.&lt;/p&gt;

&lt;p&gt;It’s fun watching players frantically coordinate, arguing about which line should get priority, or yelling when someone accidentally nukes the wrong segment.&lt;/p&gt;

&lt;p&gt;🧩 What I Learned&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Minimalist games are deceptively deep.&lt;br&gt;
It took surprisingly careful tuning to make the rush of new stations feel fair but urgent.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Real-time multiplayer isn’t always painful.&lt;br&gt;
Having most of the networking handled freed me up to iterate on the gameplay loop instead of server logic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Chaos is a feature.&lt;br&gt;
The best moments happen when players misunderstand each other and everything snowballs.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🎮 Try It Out&lt;/p&gt;

&lt;p&gt;If you want to experience the multiplayer chaos yourself, you can try it here:&lt;br&gt;
&lt;a href="https://forge.rune.ai" rel="noopener noreferrer"&gt;https://forge.rune.ai&lt;/a&gt;&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.amazonaws.com%2Fuploads%2Farticles%2F1e5g6sz9r4udqw1ewo9z.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.amazonaws.com%2Fuploads%2Farticles%2F1e5g6sz9r4udqw1ewo9z.png" alt=" " width="800" height="381"&gt;&lt;/a&gt;&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fclyhzoh3ra6pocsarqib.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.amazonaws.com%2Fuploads%2Farticles%2Fclyhzoh3ra6pocsarqib.png" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>gamedev</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
