• [AoNW] Adding Gamepad Support to a Flutter 4X Game

    Age of New Worlds started as a mobile-first game.

    That shaped a lot of early decisions. The map had to work with touch. The HUD had to survive small screens. Panels had to slide in and out without burying the world. Most interactions were built around taps, long presses, drags, and responsive layouts.

    For a while, that was enough.

    Then the game started growing toward more platforms: web, desktop, Steam, and eventually devices like the Steam Deck. At that point controller support stopped being a nice extra and became part of the shape of the game.

    (more…)
  • [Peryhelium] Moving a 4X Game Domain From AoNW to Unity

    While waiting for Age of New Worlds to move through the publishing path for iOS, Steam, and Android, I tried a small experiment.

    This time in Unity.

    Not as a replacement for AoNW. More as a question:

    What happens if I take some of the mechanics and architecture from AoNW, move them into a 3D engine, and let the concept grow in a different direction?

    A few hours later, I had the first slice of Peryhelium: a space 4X prototype about colonizing the Solar System, starting with the Moon, previewing locked planets, and rendering spherical hex maps with real planetary textures.

    (more…)
  • [AoNW] Refactoring Multiplayer to Serverpod

    The first multiplayer implementation in Age of New Worlds was not a mistake.

    It was a proof of concepts.

    I needed to learn where the hard parts really were: command dispatch, reconnects, snapshots, event offsets, fog of war, match lobbies, AI turns, and the strange little edge cases that only appear when a turn-based game is running across two devices instead of one.

    That version used a custom Dart server, HTTP routes, WebSockets, JWT handling, PostgreSQL repositories, and a lot of glue code.

    It worked well enough to answer the most important question:

    Can this game have multiplayer at all?

    The answer was yes.

    But once the concept was proven, the shape of the problem changed.

    Now I do not need “a server that works”. I need a server architecture that is boring in the right places, strict in the important places, and easy to evolve without leaving a trail of networking code across the Flutter app.

    That is why I started moving multiplayer to Serverpod.

    (more…)
  • [AoNW] Turning Game History Into Something You Can Actually Use

    A strategy game is not only about making decisions.

    It is also about understanding them later.

    In Age of New Worlds, a turn can contain many tiny things: a scout discovers a new civilization, a city finishes production, a unit moves through fog of war, diplomacy changes slightly, a battle resolves, research progresses, and the player probably notices only half of it while thinking about the next move.

    (more…)
  • [AoNW] Containerizing and Deploying

    For a long time I could run the Flutter app. I could run the Dart server. I could start a database. I could test multiplayer locally. That was enough while everything lived on my machine.

    But a public build changes the shape of the problem.

    Suddenly the project needs a real URL, TLS certificates, a running backend, a database that survives restarts, a static web bundle, a homepage, health checks, version numbers, iOS archives, and one command that can push the whole thing without me reconstructing the release process from terminal history.

    (more…)
  • [AoNW] Bringing a Flutter Game to the Web

    When I started building Age of New Worlds, I was thinking mostly about the native app.

    Flutter gave me the UI layer. Flame gave me the game scene. Dart gave me a shared language for the client, the rules, the AI, and the server. That was already enough complexity for a solo project.

    Then I wanted one more thing: a public web version.

    Not because the browser is the best place to play a heavy 4X strategy game. It is not. The native app is still the better experience. But the web version solves a very practical problem: people can open a link, see the game, start a match, and give feedback without installing anything.

    (more…)
  • First public test build of Age of New Worlds

    After nearly two months of intensive Dart and Flutter learning, I’m finally releasing the first public playtest build of AoNW, my 4X strategy game.

    You can try it here: https://aonw.net

    This is not a polished release. It is very much an unstable public test build for single player mode. Saves may break, progress may be lost, and weird things will definitely happen. I’m putting it out mainly so people can test the core mechanics, feel the game loop, and help me catch the rough edges early.

    (more…)
  • [AoNW] How I Built Multiplayer for a Turn-Based 4X Game with Flutter, Dart, WebSockets, and PostgreSQL

    When I started building multiplayer, I was not trying to bolt networking onto an existing single-player prototype at the last minute. A 4X game has a large world state, hidden information, turn submission, AI players, long reconnect windows, and plenty of tiny UI-only interactions that should never touch the server. I needed a multiplayer architecture that treated the server as the source of truth while still letting the Flutter client feel responsive.

    This post walks through the architecture I ended up with: repository layout, protocol contracts, command dispatch, event log, snapshots, WebSocket replay, fog-of-war projection, deployment, observability, and tests.

    (more…)
  • [AoNW] The Road to Open Source

    At some point after the first proper release of Age of New Worlds, I would like to make the project open source.

    Not immediately. Not while the game is still changing shape every week. Not as a way to avoid finishing it. I want the game to stand on its own first: playable, understandable, and coherent enough that someone can experience it as a game, not only as a repository.

    But after that, I want to open it.

    Because Age of New Worlds has always been more than a private experiment for me. It started as a small project to learn the Apple ecosystem, Flutter, Flame, and the shape of building a game across client and server. Over time, it became a compact 4X architecture study: commands, reducers, projections, fog of war, AI, map editing, multiplayer safety, and a domain model that tries to stay testable.

    That kind of project feels worth sharing.

    (more…)
  • [AoNW] Responsiveness in a Strategy Game: Supporting Phones, Tablets, and Desktop in Flutter

    Responsiveness in Age of New Worlds is not the same problem as responsiveness on a normal website.

    A 4X game is dense by nature. It has a map, units, cities, resources, action buttons, panels, notifications, fog of war, overlays, turn state, and sometimes multiplayer information. The challenge is not only to “fit the UI on the screen”. The challenge is to keep the map playable while still giving the player enough information to make decisions.

    That means I do not treat responsiveness as a final CSS-like pass. I treat it as part of the presentation architecture.

    (more…)