<?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: Tony Costanzo</title>
    <description>The latest articles on DEV Community by Tony Costanzo (@patrity).</description>
    <link>https://dev.to/patrity</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%2F1063068%2F7118555a-626e-403a-b3cf-410bd46d0061.jpeg</url>
      <title>DEV Community: Tony Costanzo</title>
      <link>https://dev.to/patrity</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/patrity"/>
    <language>en</language>
    <item>
      <title>I Spent 22 Years Programming Just to Fail at Making a Skeleton Swing a Sword</title>
      <dc:creator>Tony Costanzo</dc:creator>
      <pubDate>Fri, 29 Aug 2025 15:43:11 +0000</pubDate>
      <link>https://dev.to/patrity/i-spent-22-years-programming-just-to-fail-at-making-a-skeleton-swing-a-sword-455o</link>
      <guid>https://dev.to/patrity/i-spent-22-years-programming-just-to-fail-at-making-a-skeleton-swing-a-sword-455o</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://techhivelabs.net/blog/thundoria-architecture" rel="noopener noreferrer"&gt;techhivelabs.net&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thundoria.com" rel="noopener noreferrer"&gt;Thundoria Site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/ThePatrity" rel="noopener noreferrer"&gt;X / Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/patrity.com" rel="noopener noreferrer"&gt;Blue Sky&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Why I'm Building an MMORPG (By Learning How NOT to Build One First)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Every Game Developer Tells Us The Same Thing...
&lt;/h2&gt;

&lt;p&gt;"Don't build an MMO."&lt;/p&gt;

&lt;p&gt;It's literally the first rule of indie game devs. Right up there with "start small" and "your first 10 games will suck." And you know what? After 22 years of programming and two months of trying to build one, can confirm: they're absolutely right.&lt;/p&gt;

&lt;p&gt;The thing is.. I'm still going to build my MMORPG. I'm just taking a massive detour through a completely different game first. Let me explain why building my dream game meant stepping the hell away from it.&lt;/p&gt;

&lt;h2&gt;
  
  
  From RuneScape Private Servers to Full-Stack Development
&lt;/h2&gt;

&lt;p&gt;My programming journey started when I was 11, doing what any reasonable (totally not degenerate) pre-teen would do in 2004: hacking together RuneScape private servers so I could spawn max cash stacks and party hats. Those early days of tearing apart poorly-written Java codebases by other degenerates taught me one thing exceptionally well: how to duct-tape other people's code together until it (mostly) worked.&lt;/p&gt;

&lt;p&gt;Over the years, I graduated from game server shenanigans to real backend development. I built RESTful APIs, managed millions of rows of data for EPC contractors, and became what I'd call a "real programmer." Java, Kotlin, Python, TypeScript, PostgreSQL, microservices.. you name it, I could architect it.&lt;/p&gt;

&lt;p&gt;But deep down? I never stopped scoping out game ideas in markdown files. Mountains of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter Thundoria: My Beautiful, Overscoped Monster
&lt;/h2&gt;

&lt;p&gt;Earlier this year, I finally said "screw it" and started building &lt;strong&gt;&lt;a href="https://thundoria.com" rel="noopener noreferrer"&gt;Thundoria&lt;/a&gt;&lt;/strong&gt;, a browser-based multiplayer roguelike bullet-hell with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Procedurally generated dungeons&lt;/li&gt;
&lt;li&gt;Real-time multiplayer combat&lt;/li&gt;
&lt;li&gt;RPG progression systems (because why not?)&lt;/li&gt;
&lt;li&gt;Crafting, fishing, mining (who doesn't love scope creep)&lt;/li&gt;
&lt;li&gt;Social features like guilds and parties&lt;/li&gt;
&lt;li&gt;And yes... it's an MMO&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;[Want to watch this trainwreck unfold? Join the mailing list at &lt;a href="https://thundoria.com" rel="noopener noreferrer"&gt;thundoria.com&lt;/a&gt;!]&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Technical Flex That Nobody Asked For
&lt;/h3&gt;

&lt;p&gt;In two months of near-daily work, I built some fairly impressive infra:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NuxtJS Frontend:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Supabase auth with JWT passthrough to the game client&lt;/li&gt;
&lt;li&gt;Embedded game frame with seamless auth&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Kotlin Service Layer:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RESTful API for game server orchestration&lt;/li&gt;
&lt;li&gt;Dynamic instance balancing&lt;/li&gt;
&lt;li&gt;Procedural map generation&lt;/li&gt;
&lt;li&gt;HTTP map data serving to both client and server&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Nakama Game Server (Go):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-character system per account&lt;/li&gt;
&lt;li&gt;Server-authoritative collision detection using map data from Kotlin&lt;/li&gt;
&lt;li&gt;Real-time multiplayer synchronization&lt;/li&gt;
&lt;li&gt;Full inventory and stats persistence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Godot Client:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fully integrated with the entire stack&lt;/li&gt;
&lt;li&gt;Complete UI with MMO-style panels&lt;/li&gt;
&lt;li&gt;Character creation with class selection&lt;/li&gt;
&lt;li&gt;Multiple polished scenes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I was crushing it. Architecture? Check. Data flow? Nailed it. Scalability? Ready for millions of players that would definitely (never) come.&lt;/p&gt;

&lt;p&gt;Here's some posts where I talked about progress:&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1954976218299895986-830" src="https://platform.twitter.com/embed/Tweet.html?id=1954976218299895986"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1954976218299895986-830');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1954976218299895986&amp;amp;theme=dark"
  }



&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1953539709730205787-385" src="https://platform.twitter.com/embed/Tweet.html?id=1953539709730205787"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1953539709730205787-385');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1953539709730205787&amp;amp;theme=dark"
  }



&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1952172653894148553-928" src="https://platform.twitter.com/embed/Tweet.html?id=1952172653894148553"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1952172653894148553-928');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1952172653894148553&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  The Brutal Realization
&lt;/h2&gt;

&lt;p&gt;Then I tried to implement combat.&lt;br&gt;
And NPCs.&lt;br&gt;
And enemy AI.&lt;br&gt;
And suddenly, it hit me like a wave attack from a boss I needed to design: &lt;strong&gt;I had no idea how to actually design game systems.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Twenty-two years of programming experience, and I was paralyzed by questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Should enemies attack on a timer or use complex behavior trees?&lt;/li&gt;
&lt;li&gt;What percentage of loot should be rare vs common?&lt;/li&gt;
&lt;li&gt;How do you make death punishing but not ragequit inducing?&lt;/li&gt;
&lt;li&gt;Why does every design decision have 47 interdependent systems?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I knew HOW to make an enemy attack. I knew HOW to implement a loot table. Shit, I could build you a distributed loot service with Redis caching. But WHAT should that enemy's attack pattern teach the player? WHAT loot distribution keeps players engaged without breaking the economy? &lt;/p&gt;

&lt;p&gt;I was an architect and never built a house.&lt;/p&gt;

&lt;h2&gt;
  
  
  The YouTube Immersion Therapy
&lt;/h2&gt;

&lt;p&gt;When I started this journey a few months ago, my entire YouTube feed became game development content. I immersed myself in design philosophy while coding, listening to creators like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/@thomasbrush" rel="noopener noreferrer"&gt;Thomas Brush&lt;/a&gt; (indie success stories and reality checks)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/@JonasTyroller" rel="noopener noreferrer"&gt;Jonas Tyroller&lt;/a&gt; (the science of game feel)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/@Aarimous" rel="noopener noreferrer"&gt;Aarimous&lt;/a&gt; (roguelike design deep dives)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/@JackieCodes" rel="noopener noreferrer"&gt;Jackie Codes&lt;/a&gt; (Godot-specific wisdom)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/@DevWorm" rel="noopener noreferrer"&gt;DevWorm&lt;/a&gt; (practical indie dev insights)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not tutorials, mind you. Working with the Fireship YouTube channel has taught me that tutorial hell is real, and most developers just need concepts, not code-alongs, something he does a great job at. I needed to understand how game designers THINK, not how they type.&lt;/p&gt;

&lt;p&gt;Everyone kept saying the same damn thing: "Start small. Build Pong. Make a platformer."&lt;/p&gt;

&lt;p&gt;But telling a seasoned developer to make Pong is like telling Gordon Ramsay to make a ham sandwhich. Sure, I could do it, but what would I actually learn?&lt;/p&gt;

&lt;h2&gt;
  
  
  Dungeon Supply Co: My "Small" Game That's Actually Perfect
&lt;/h2&gt;

&lt;p&gt;Instead of abandoning everything like so many times in the past, I started designing a new game specifically to teach me what I didn't know: &lt;strong&gt;Dungeon Supply Co.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The premise? &lt;br&gt;
We've all crawled our fair share of dungeons, right? We grind and grind for gear, pots, and food for hours before finally attempting the dungeon. How the hell do the dungeon NPCs always have everything that they need??&lt;br&gt;
You're enslaved by an asshole orc who forces you to run a factory that supplies dungeons with everything—swords for skeletons, potions for bosses, and yes, all those ceramic pots that heroes compulsively smash.&lt;/p&gt;

&lt;p&gt;It's automation meets subtle dark humor and a bit of irony.&lt;/p&gt;

&lt;p&gt;More importantly, it's designed to force me to learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;State Management&lt;/strong&gt;: Hundreds of items on conveyor belts without melting CPUs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Game Feel&lt;/strong&gt;: Making automation satisfying (that sweet, sweet production line dopamine)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Art Pipeline&lt;/strong&gt;: Expanding on &lt;a href="https://mwaayk.itch.io/16x16-automation-asset-pack" rel="noopener noreferrer"&gt;Mwaayk's excellent 16x16 automation pack&lt;/a&gt; with my own sprites&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope Control&lt;/strong&gt;: 4-8 week timeline, not 4-8 years of development hell&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Player Psychology&lt;/strong&gt;: What makes "just one more production line" addictive&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why This Actually Works
&lt;/h3&gt;

&lt;p&gt;Building an automation game teaches fundamental game development skills without the complexity of combat, multiplayer networking, or making sure your netcode doesn't let players phase through walls like interdimensional ghosts.&lt;/p&gt;

&lt;p&gt;The technical challenges are real (managing thousands of moving items at 60 FPS), but bounded. The design space is constrained but meaningful. Most importantly, it's a game I'd actually want to play while procrastinating on building my actual dream game.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Developer's Paradox: Failing Up
&lt;/h2&gt;

&lt;p&gt;Here's what nobody tells you: As programmers, we're trained to build incrementally. We start with "Hello World," not "Let's rebuild Google from scratch." But the moment passion enters the equation, we immediately try to build our own GSuite replacement for enterprise customers.&lt;/p&gt;

&lt;p&gt;My MMORPG isn't dead. In fact, working on Dungeon Supply Co. has made me MORE excited about Thundoria, not less. Every system I implement teaches me something I'll need. Every optimization technique, every player feedback loop, every scene implementation, it's all training for the main event.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Lesson: Your Dream Game Needs Practice Games
&lt;/h2&gt;

&lt;p&gt;If you're a developer sitting on your own "dream game" idea, here's my advice: &lt;strong&gt;Don't abandon it. Orbit it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Build smaller games that teach you specific skills you'll need. Want to make an RPG? Build an inventory system game first. Dream of a shooter? Start with a wave defense game.&lt;br&gt;
Think of it as building your own curriculum where every assignment directly contributes to your final project, except nobody's grading you and you can drink while doing it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Join Me on This Beautiful Disaster
&lt;/h2&gt;

&lt;p&gt;I'm documenting everything—the successes, failures, and the times I spent 6 hours debugging only to realize I spelled "strength" wrong. &lt;strong&gt;&lt;a href="https://thundoria.com" rel="noopener noreferrer"&gt;Thundoria&lt;/a&gt;&lt;/strong&gt; is still happening, and I'm trying to build it in public because apparently I'm a masochist.&lt;/p&gt;

&lt;p&gt;The game design is stupidly ambitious:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Roguelike extraction mechanics where you gamble progression like a degenerate&lt;/li&gt;
&lt;li&gt;Bullet-hell combat that scales from "tutorial grandmother" to "what the fuck is happening"
&lt;/li&gt;
&lt;li&gt;"Just one more floor" addiction that ruins friendships&lt;/li&gt;
&lt;li&gt;No pay-to-win BS, just honest "give me money for cosmetics" capitalism&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Meanwhile, Dungeon Supply Co. is teaching me how to actually deliver on that vision without having a complete mental breakdown.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want to watch this slow-motion catastrophe?&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sign up for development updates at &lt;strong&gt;&lt;a href="https://thundoria.com" rel="noopener noreferrer"&gt;thundoria.com&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Watch me learn game dev fundamentals the hardest way possible&lt;/li&gt;
&lt;li&gt;Get early access to both games (whenever the hell they're ready)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;Every game developer is right: don't build an MMO as your first game. But also, don't let your dreams die in a folder called "maybe_someday_projects_final_v2_actual_final."&lt;br&gt;
Instead, be strategic. Build towards your dream, not away from it. Learn in public. Fail spectacularly. And remember—even the creators of World of Warcraft probably started by spawning themselves max cash stacks in someone else's terrible code.&lt;/p&gt;

&lt;p&gt;Although... how can I expect you to listen to me? I didn't listen, and honestly, I don't really expect anyone else to either. I'm just a guy with a dream and a tendency to overcomplicate things.&lt;/p&gt;

&lt;p&gt;Now if you'll excuse me, I have some conveyor belts to optimize. These skeletons won't arm themselves, and my orc overlord is getting bitchy.&lt;/p&gt;




&lt;h3&gt;
  
  
  Links
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Are you also building a game way above your skill level? Learning game development after years of "real" programming? Let's suffer together!&lt;/em&gt;&lt;br&gt;
Follow the journey at &lt;a href="https://thundoria.com" rel="noopener noreferrer"&gt;thundoria.com&lt;/a&gt; and let's fail upward as a community.&lt;/p&gt;

&lt;p&gt;I post about my progressions sometimes on &lt;a href="https://bsky.app/profile/patrity.com" rel="noopener noreferrer"&gt;Bluesky&lt;/a&gt; and &lt;a href="https://x.com/ThePatrity" rel="noopener noreferrer"&gt;X / Twitter&lt;/a&gt; as well.&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>programming</category>
      <category>gamedev</category>
      <category>architecture</category>
    </item>
    <item>
      <title>I Let Amazon's AI Build My Game for 3 Days. Here's What Happened</title>
      <dc:creator>Tony Costanzo</dc:creator>
      <pubDate>Tue, 17 Jun 2025 17:08:56 +0000</pubDate>
      <link>https://dev.to/patrity/i-let-amazons-ai-build-my-game-for-3-days-heres-what-happened-160j</link>
      <guid>https://dev.to/patrity/i-let-amazons-ai-build-my-game-for-3-days-heres-what-happened-160j</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://techhivelabs.net/blog/q-roguelike" rel="noopener noreferrer"&gt;techhivelabs.net&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: Built a working roguelike with Amazon Q in hours. It was amazing until it wasn't. Enemy projectiles broke me. AI coding is powerful but not ready to fly solo yet.&lt;/p&gt;

&lt;p&gt;🎮 &lt;a href="https://q-rogue.nuxt.dev" rel="noopener noreferrer"&gt;Try the Game&lt;/a&gt; | 💻 &lt;a href="https://github.com/patrity/q-rogue" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Setup
&lt;/h2&gt;

&lt;p&gt;When Amazon threw down the gauntlet with their AI coding challenge, I couldn't resist. The mission? Build a browser-based game using their new AI assistant, Q. As someone who's been curious about the current state of AI-powered development, this seemed like the perfect opportunity to push the boundaries and see just how far we could go with "vibe coding" - that magical state where you describe what you want and the AI makes it happen.&lt;/p&gt;

&lt;p&gt;My weapon of choice? A fresh Nuxt.js project, my go-to framework for web development. I fired up Tabby and was pleasantly surprised to see Q integrate seamlessly with it - I'd half expected it to only work with the built-in terminal. While I noticed Q only offered Claude models (no complaints there, it's my LLM of choice anyway), I was ready to embark on this adventure.&lt;/p&gt;

&lt;h2&gt;
  
  
  First Contact: Setting Expectations
&lt;/h2&gt;

&lt;p&gt;I started by spitballing a rough idea for a roguelike game:&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%2F6pdoe097cocr4yvvoykb.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%2F6pdoe097cocr4yvvoykb.png" width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The initial response was... well, exactly what you'd expect from an eager AI assistant - way too affirmative. I don't need a yes-man; I need honest feedback and alternative suggestions!&lt;/p&gt;

&lt;p&gt;After some gentle encouragement (okay, I may have talked some shit to the LLM), I finally got the honest feedback I was looking for. Be careful what you wish for, though - the reality check was humbling!&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%2F9esn4b0uwk85b4khdp94.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%2F9esn4b0uwk85b4khdp94.png" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding the Perfect Assets
&lt;/h2&gt;

&lt;p&gt;Before diving deeper, I needed some visual assets. I stumbled upon an absolutely gorgeous asset pack on &lt;a href="https://trevor-pupkin.itch.io/tech-dungeon-roguelite" rel="noopener noreferrer"&gt;itch.io by Trevor Pupkin&lt;/a&gt; - affordable, high-quality, and perfect for the cyberpunk roguelike vibe I was going for. I dropped it in the root directory and asked Q for its honest opinion about our game design and timeline.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Okay check out the asset pack in q-roguelike/TechDungeonAssets I really like this and think we could build a simple roguelike.. We can just do projectile combat, no building.. we can have upgrades like speed, multi projectile (adds +1 at a slight angle each time), health, fire speed, exploding bullets, etc.. We can keep it simple enough I suppose. What do you think about game engine with this design? is it doable in our timeframe? again dont just reaffirm, give honest feedback
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F656m2ucrgumcj0xq6ppz.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%2F656m2ucrgumcj0xq6ppz.png" width="800" height="621"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Q suggested we should just yeet a 2d canvas and start building on that. I was certainly hesitant about that considering all of the helpers libraries like Phaser or PixiJS gives us..&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%2Frpv1njy92hsanp89k57e.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%2Frpv1njy92hsanp89k57e.png" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The First Attempt: A Comedy of Errors
&lt;/h2&gt;

&lt;p&gt;The "actual" first attempt was... let's call it educational. The code was non-functioning, mixing Vue 2 Options API inside a Vue 3 Composition API script block. But hey, I was being intentionally vague with my requirements, so I can't blame Claude or Q entirely. One prompt later pointing out the issue, and we had our first error-free pass.&lt;/p&gt;

&lt;p&gt;Well... it was &lt;em&gt;something&lt;/em&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%2Fg5b7ed5vklfms93kity4.gif" 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%2Fg5b7ed5vklfms93kity4.gif" width="846" height="676"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm still not entirely sure what I was looking at, but asking an LLM to parse multiple spritesheets and properly set up sprites with animations is admittedly a tall order.&lt;/p&gt;

&lt;p&gt;Before diving into fixing the sprite issues, I noticed Q had done something quite thoughtful - it had taken all the assets I'd dumped in the root directory and organized them nicely in the public folder. Small wins!&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%2Ftxbaspac6otgxpztb6tw.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%2Ftxbaspac6otgxpztb6tw.png" width="241" height="688"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The TexturePacker Breakthrough
&lt;/h2&gt;

&lt;p&gt;Then I thought of a way to give more image context.. the TexturePacker app outputs JSON data alongside its spritesheets. If I gave each image and animation a descriptive name, Q should be able to parse and use them correctly... right?&lt;/p&gt;

&lt;p&gt;RIGHT!&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%2Fknlhv4cvk94vgo84omo4.gif" 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%2Fknlhv4cvk94vgo84omo4.gif" width="1028" height="778"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Suddenly, we had a working run animation and projectiles firing in the direction of my mouse! Sure, my character wasn't facing the right direction and the projectiles were angled incorrectly, but this was genuine progress. This was the point where I thought I'd need to take over completely, but I was curious to see how far Q could go.&lt;/p&gt;
&lt;h2&gt;
  
  
  Building the Core Game Loop
&lt;/h2&gt;

&lt;p&gt;Instead of getting bogged down in perfectionism, I asked Q to outline the next steps:&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%2Foy5nk0k12yoe9pscng3f.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%2Foy5nk0k12yoe9pscng3f.png" width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Q provided a solid roadmap:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Priority Order:&lt;/span&gt;
&lt;span class="p"&gt;
1.&lt;/span&gt; Collision &amp;amp; Combat System
• Projectile-enemy collision detection
• Enemy health and death
• Basic enemy AI (move toward player)
&lt;span class="p"&gt;
2.&lt;/span&gt; Wave System
• Spawn enemies in waves
• Wave progression with increasing difficulty
• Wave completion detection
&lt;span class="p"&gt;
3.&lt;/span&gt; Roguelike Upgrades
• Upgrade selection screen between waves
• Core upgrades: damage, fire rate, health, speed, multi-shot
• Persistent upgrade effects
&lt;span class="p"&gt;
4.&lt;/span&gt; Game State Management
• Health system for player
• Game over/restart
• Score tracking
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Implementing Combat
&lt;/h3&gt;

&lt;p&gt;Starting with collision and combat systems, I prompted: &lt;code&gt;Okay let's go in order! We can go ahead and implement the projectile hits, enemies chasing, health system, and death animations!&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The first attempt introduced some bugs - I couldn't shoot and spawned with 0 HP. By the time I died, my health was between -5 and -10. Classic game development!&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%2Fp2trjrzt4oqrh4mt5e7e.gif" 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%2Fp2trjrzt4oqrh4mt5e7e.gif" width="900" height="700"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One clarifying prompt later: &lt;code&gt;I'm ready to move on but we do have some issues. I'm not able to shoot but I think it may be because I spawn with 0hp and by the time I die, my hp is -5 - -10.. I think we need some delay between death and restarting so that the death animation can play as well. Finally I see a lot of warnings in the console from the animation manager stating that our animation keys already exist.. Are we reinitializing these unnecessarily?&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And just like that, we had a functioning combat system! Complete with health management, incremental damage, immunity periods, and even a score system:&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%2Fwd3umph0uviwwyd77jfz.gif" 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%2Fwd3umph0uviwwyd77jfz.gif" width="884" height="728"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Code Quality Check
&lt;/h3&gt;

&lt;p&gt;At this point, I hadn't really examined the code beyond fixing that initial Vue 2/3 issue. I was expecting a thousand lines of spaghetti. To my surprise, we had only ~450 lines of surprisingly clean code. All in a single component (not ideal, but workable), including ~20 lines of CSS and 10 lines of templating. The JavaScript was well-structured, without duplicated logic, and documented concisely - not in that typical verbose AI fashion. Color me impressed!&lt;/p&gt;

&lt;h3&gt;
  
  
  The Wave System
&lt;/h3&gt;

&lt;p&gt;Next up: the wave system. One prompt. Just one prompt, and boom:&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%2Fmhocdanykde7zhs77v4r.gif" 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%2Fmhocdanykde7zhs77v4r.gif" width="826" height="670"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I was genuinely impressed at this point. We had a working wave system with progressive difficulty in a single iteration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hitting the Wall: Context Limits and Collision Detection
&lt;/h2&gt;

&lt;p&gt;The next challenge - implementing the upgrade system and tilemap collision - is where things got rocky. Q struggled. Hard. My codebase ballooned from ~500 lines to about 1,000 lines. Despite having all the tilemap data in JSON format, Q couldn't get the collision layers working properly.&lt;/p&gt;

&lt;p&gt;It loaded the map and registered all the layers correctly, but when it came to setting up collision detection, we went in circles. Q eventually decided that Phaser's built-in collision system was broken (spoiler: it wasn't) and attempted to write its own per-tile collision system. Yikes.&lt;/p&gt;

&lt;p&gt;I tried to guide it back to using Phaser's built-in features, but we'd hit the classic AI coding limitation: context window exhaustion. Under 1,000 lines of code and we were already having fundamental issues. Q started creating basic TypeScript errors that prevented the page from running entirely.&lt;/p&gt;

&lt;p&gt;Recognizing the signs, I asked Q to strip out all the collision work so I could handle it myself. I created a git commit (should have done this earlier!) and prompted Q to create documentation to maintain high-level context.&lt;/p&gt;

&lt;h2&gt;
  
  
  Taking Back Control
&lt;/h2&gt;

&lt;p&gt;I performed a major refactor, splitting the monolithic component into separate TypeScript files and Phaser scenes. With the help of &lt;a href="https://www.youtube.com/@ourcadetv" rel="noopener noreferrer"&gt;Ourcade TV's&lt;/a&gt; excellent YouTube tutorials, I implemented proper collision detection myself.&lt;/p&gt;

&lt;p&gt;This created a new problem: the basic straight-line enemy AI couldn't navigate around walls. Time to see how Q handled pathfinding:&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%2Ft167jq30jkul940aud6n.gif" 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%2Ft167jq30jkul940aud6n.gif" width="860" height="652"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Well... the enemies were certainly moving, just not in any useful direction. When I clarified that I needed proper pathfinding, Q implemented A* pathfinding with heuristic functions for 8-directional movement. The first attempt was too precise, causing enemies to overshoot waypoints and backtrack:&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%2Fvf2d9j3cnf69mv361i0s.gif" 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%2Fvf2d9j3cnf69mv361i0s.gif" width="454" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But third time's the charm! In just three prompts, Q had implemented fairly sophisticated pathfinding:&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%2Fjzty1li5qn8if3y69t7h.gif" 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%2Fjzty1li5qn8if3y69t7h.gif" width="760" height="568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pushing Forward and Finding the Limits
&lt;/h2&gt;

&lt;p&gt;At this point, we'd essentially completed the original goal, but I was feeling inspired. I've had this concept for a browser-based MMO/roguelike hybrid brewing for a while, and this seemed like the perfect opportunity to explore it further.&lt;/p&gt;

&lt;p&gt;I took more control from here, using Q as a coding assistant rather than the primary developer. We added more enemy types, complex wave patterns, tiered upgrades, and other roguelike elements. But the final straw? Enemy projectiles.&lt;/p&gt;

&lt;p&gt;Getting enemy projectiles to move correctly, deal damage, and not freeze the entire game took over 10 prompts. I never successfully got Q to implement this feature without game-breaking bugs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Verdict: Impressive but Not Ready for Prime Time
&lt;/h2&gt;

&lt;p&gt;Let me be clear: I was genuinely impressed with how quickly Q created a functioning game that felt like a real project worth iterating on. The initial results had me excited about the possibilities of AI-assisted development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But here's the bottom line:&lt;/strong&gt; I ended up with a pile of unfamiliar, difficult-to-maintain code with a clunky development pattern that I didn't want to continue building on.&lt;/p&gt;

&lt;p&gt;As a reasonably experienced developer, I had to guide Q toward correct solutions fairly early in the process. I'm not confident that less experienced developers would be able to provide the same guidance when things go sideways.&lt;/p&gt;

&lt;p&gt;This isn't really a criticism of Q specifically - it's more about the current state of AI coding assistants in general. Language models will undoubtedly improve, but will we ever be able to go completely hands-free on larger projects? I doubt it. Context windows need to expand dramatically, and tools like Q need more sophisticated agentic processes to prevent the accumulation of "AI slop."&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;I'm glad Amazon put this challenge out there. It gave me a valuable opportunity to assess the current state of AI coding assistants in a real-world scenario. The technology is impressive and shows tremendous promise, but for now, I'll stick with using LLMs through web interfaces and copilot-style IDE extensions for specific tasks rather than full project development.&lt;/p&gt;

&lt;p&gt;I'm not quite ready to hand over the reins completely - but I'm excited to see where this technology goes. The future of AI-assisted development is bright, even if we're not quite there yet. Who knows? Maybe in a year or two, I'll be writing a follow-up post about how I built an entire MMO using just voice commands and interpretive dance.&lt;/p&gt;

&lt;p&gt;Until then, happy coding - whether you're doing it with AI assistance or good old-fashioned keyboard mashing!&lt;/p&gt;

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