Articles

Windows Code Signing ๐Ÿ‡บ๐Ÿ‡ธ

Windows packaging is implemented in .github/workflows/build-windows.yml. The workflow is reusable and is called by both the weekly packaging job and the release workflow. When the signing secrets are available, it signs standard_of_iron.exe with Authenticode and verifies the result before packaging ...

Pathfinding Architecture ๐Ÿ‡บ๐Ÿ‡ธ

Pathfinding in Standard of Iron is deliberately simple at the core: the game keeps one flat 2D navigation grid, and A* searches that grid. The grid is not a physics simulation, not a unit occupancy map, and not a navmesh. It is a compact answer to one question...

Battlefield Capture ๐Ÿ‡บ๐Ÿ‡ธ

battlefield_capture is a deterministic, render-free acceptance runner used to validate battlefield behavior during migration work. It advances the simulation on a fixed 30 Hz clock from an explicit seed and writes newline-delimited JSON (JSONL), making its output suitable for repeatable comparisons ...

Animation Architecture ๐Ÿ‡บ๐Ÿ‡ธ

How a creature in Standard of Iron goes from "this unit is attacking" to moving geometry on screen โ€” and why it is fast enough to do for thousands of units at once...

Frame Pacing ๐Ÿ‡บ๐Ÿ‡ธ

Frame pacing in Standard of Iron is measured from real gameplay runs and reported as a frame_pacing verdict. The gate is designed to answer a broader question than โ€œwhat was the average FPS?โ€ It measures whether presented frames arrive consistently, whether CPU/GPU frame work fits the active graphic...

Map Object Placement ๐Ÿ‡บ๐Ÿ‡ธ

An object authored in map JSON has to become two things that agree with each other: a physical body on the ground and a model on the screen. This document explains the coordinate contract that keeps them aligned, how object footprints are validated, and how the placement audit detects geometry that ...

Cursed Gold Vein ๐Ÿ‡บ๐Ÿ‡ธ

The cursed gold vein is a capturable world element built around a deliberate trade-off. Visually, it is a crag of dark rock split by an ore seam, with gold crystals growing from the fracture and a claim flag planted beside it. Mechanically, it rewards ownership with a steady income while damaging th...

Unit Balance ๐Ÿ‡บ๐Ÿ‡ธ

Unit balance in Standard of Iron is defined by executable simulation inputs: shipped troop data, nation overrides, combat multipliers, formation/stance behavior, production/economy values, and deterministic matchup fixtures run through tools/balance_sim...

Mission Framework ๐Ÿ‡บ๐Ÿ‡ธ

Missions add authored gameplay rules to an existing battlefield. A map defines terrain, structures, spawns, environment, camera data, regions, and other world geometry. A mission selects that map and adds player/AI setup, objectives, scripted waves, stages, events, commander messages, and campaign-f...

Victory System ๐Ÿ‡บ๐Ÿ‡ธ

Victory rules look simple to a player: eliminate an enemy, survive long enough, capture a position, or keep a commander alive. The implementation has to satisfy a harder set of requirements. Rules must be cheap enough to evaluate during simulation, expressive enough for both skirmishes and authored ...

Ambient Wildlife ๐Ÿ‡บ๐Ÿ‡ธ

Ambient wildlife makes battlefields feel inhabited rather than staged. Sheep occupy pasture, wolves work the edges of settlement and cover, and bird flocks move through the sky or burst away from nearby threats...

Architecture ๐Ÿ‡บ๐Ÿ‡ธ

Standard of Iron is organized around one rule: gameplay state belongs to the simulation, while application code, UI, rendering, tools, persistence, and AI consume or transform that state through explicit boundaries...

Save Load System ๐Ÿ‡บ๐Ÿ‡ธ

Standard of Iron stores match saves in a versioned SQLite database. A save is more than a serialized entity list: it combines the authoritative battlefield, non-entity session state, campaign/mission metadata, and a preview image, then stores that snapshot with compression, checksums, transactional ...

Combat System ๐Ÿ‡บ๐Ÿ‡ธ

Combat in Standard of Iron is coordinated by Game::Systems::CombatSystem. It owns the shared combat query context and advances normal attacks, combat state, formation contacts, siege behavior, elephant behavior, automatic engagement, target commitment, hit feedback, and threat alerts in a fixed orde...

Accessibility ๐Ÿ‡บ๐Ÿ‡ธ

Standard of Iron exposes accessibility and input options from Settings in both the main menu and pause menu. Every option has a default that reproduces the shipped presentation and controls, so accessibility features can be enabled deliberately without changing the experience for a fresh installatio...

Ui Design System ๐Ÿ‡บ๐Ÿ‡ธ

Standard of Iron's interface uses the StandardOfIron.Design QML module as the shared presentation layer for colour, spacing, typography, motion, iconography, faction styling, notifications, hints, sound hooks, accessibility-derived values, and reusable controls...

Macos Signing ๐Ÿ‡บ๐Ÿ‡ธ

macOS packaging is implemented in .github/workflows/build-macos.yml. The workflow is reusable and is called by both the weekly packaging job and the release workflow...

Camera Controls ๐Ÿ‡บ๐Ÿ‡ธ

The RTS camera supports nine ways to move or restore the view. The same control definitions feed the in-battle legend and field manual, while automated tests cover the underlying geometry and input rules. This page explains the complete control model and ends with the manual regression pass needed f...

Formation Architecture ๐Ÿ‡บ๐Ÿ‡ธ

Standard of Iron has two formation layers because they solve two different spatial problems...

Rendering Architecture ๐Ÿ‡บ๐Ÿ‡ธ

Standard of Iron renders from published simulation snapshots. Gameplay state belongs to the simulation; the renderer receives a detached view of that state, resolves visibility and presentation, records draw work, and submits the result through a backend boundary...

Backtracking ๐Ÿ‡บ๐Ÿ‡ธ

Backtracking is a method used to solve problems by building potential solutions step by step. If it becomes clear that a partial solution cannot lead to a valid final solution, the process "backtracks" by undoing the last step and trying a different path. This approach is commonly applied to constra...

Brain Teasers ๐Ÿ‡บ๐Ÿ‡ธ

Programming puzzles and brain teasers are a fun way to sharpen your coding and problem-solving skills. Youโ€™ll often see them in technical interviews, where theyโ€™re used to test how you think, analyze problems, and come up with efficient solutions. To do well, it helps to practice and build solid str...

Graphs ๐Ÿ‡บ๐Ÿ‡ธ

In many areas of life, we come across systems where elements are deeply interconnected, whether through physical routes, digital networks, or abstract relationships. Graphs offer a flexible way to represent and make sense of these connections...

Math Set Relationship ๐Ÿ‡บ๐Ÿ‡ธ

You begin with a small set of โ€œbuilding blocks,โ€ and then you systematically manufacture bigger collections (pairs, sequences, subsets, orderings). The punchline is always the same: what did you build, how many objects exist, and what does it cost to generate them? If you care about algorithms, this...

Basic Concepts ๐Ÿ‡บ๐Ÿ‡ธ

Data structures and algorithms are fundamental concepts in computer science and they are the only way to write efficient software...

Searching ๐Ÿ‡บ๐Ÿ‡ธ

Searching is the task of finding whether a particular value exists in a collection and, if it does, where it lives (its index, pointer, node, or associated value). It shows up everywhere: checking if a username is taken, locating a record in a database, finding a file in an index, routing packets, o...

Greedy Algorithms ๐Ÿ‡บ๐Ÿ‡ธ

Greedy algorithms are the โ€œmake progress nowโ€ strategy: build a solution one step at a time, and at each step take the option that looks best right now according to a simple rule (highest value, earliest finish, smallest weight, smallest distance label, etc.). You keep the choice only if it doesnโ€™t ...

Dynamic Programming ๐Ÿ‡บ๐Ÿ‡ธ

Dynamic Programming (DP) is a way to solve complex problems by breaking them into smaller, easier problems. Instead of solving the same small problems again and again, DP stores their solutions in a structure like an array, table, or map. This avoids wasting time on repeated calculations and makes t...

Sorting ๐Ÿ‡บ๐Ÿ‡ธ

In the realm of computer science, 'sorting' refers to the process of arranging a collection of items in a specific, predetermined order. This order is based on certain criteria that are defined beforehand...

Matrices ๐Ÿ‡บ๐Ÿ‡ธ

Matrices represent images, game boards, and maps. Many classic problems reduce to transforming matrices, traversing them, or treating grids as graphs for search...

Data Structures ๐Ÿ‡บ๐Ÿ‡ธ

In computer science, a collection (often interchangeably referred to as a container) is a sophisticated data structure designed to hold multiple entities, these could be simple elements like numbers or text strings, or more complex objects like user-defined structures. Collections help you store, or...

Asynchronous Programming ๐Ÿ‡บ๐Ÿ‡ธ

Asynchronous programming is a technique for achieving concurrency without forcing one operation to block progress while it waits for another to finish. Instead of requiring each task to complete before the next can make progress, asynchronous code can suspend waiting work and continue with other rea...

Mpi ๐Ÿ‡บ๐Ÿ‡ธ

The Message Passing Interface (MPI) is a standardized, portable interface for message passing across a wide range of parallel-computing systems. It provides library routines for building parallel applications whose processes communicate by explicitly sending and receiving data. The MPI standard defi...

Hardware ๐Ÿ‡บ๐Ÿ‡ธ

Parallel computing uses multiple hardware execution resources to make progress on more than one operation at a time. Those resources may exist inside one CPU core, across several cores or processor sockets, on a GPU, or across multiple networked machines. The useful performance gain depends not only...

Designing Parallel Programs ๐Ÿ‡บ๐Ÿ‡ธ

Designing a parallel program means restructuring a computation so that useful work can proceed concurrently without making coordination costs dominate. A good design does more than create many tasks: it exposes enough parallelism, keeps processors busy, limits communication and synchronization, pres...