Skip to content
CAI
Software that uses CAICheck a score

ForNeVeR/overtone

66.4

Adequate · 3 October 2026

1.7k

lines of production code

F#

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Overtone is a .NET-based remake of the game The Tone Rebellion, built using MonoGame with a scene-driven architecture. It provides a suite of command-line tools for parsing, extracting, and rendering legacy game assets such as COB archives, sprite shapes, fonts, and palettes. The application features a structured UI system with interactive menus, dynamic configuration loading, and centralized resource management for game logic and visual rendering.

How it got here

2020–2021 — Project scaffolding and core asset parsing

5 changes.

The Overtone project was initialized with its core repository structure and documentation, establishing a foundation for remaking The Tone Rebellion. Key development focused on creating the Overtone.Resources assembly to centralize the parsing of game assets like COB archives, fonts, and sprites, alongside the introduction of CLI tools for extraction and inspection. The codebase was also upgraded to .NET 10 with updated dependencies to support these new capabilities.

2022–2023 — MonoGame architecture and UI implementation

8 changes.

The project was restructured into a MonoGame application with a scene-based architecture, introducing a central game controller and new UI components for menus and interactions. This period focused on implementing core gameplay systems, including configuration parsing for assets and windows, along with comprehensive unit tests for resource handling and window settings.

Features

Add COB archive listing and extraction commands

The Overtone.Cob tool now supports two new commands for interacting with COB archive files. The 'ls' command lists the contents of a specified COB archive, displaying the offset, file path, and size for each entry. The 'x' command extracts the contents of a COB archive to a specified output directory, creating necessary subdirectories and writing the extracted files.

Overtone.Cob · high confidence

Add configuration parsers for game assets and UI windows

New configuration modules have been added to parse game data from text files. IslandsConfiguration reads island positions and bridge definitions from shapes.txt, while ShapesConfiguration maps shape IDs to names. SoundsConfiguration loads audio effects and background tunes from a sound file, and SpellsConfiguration parses spell definitions including costs and descriptions. WindowsConfiguration parses window layouts, states, and UI control definitions, enabling the game to dynamically load visual and audio assets based on external configuration files.

Overtone.Game/Config · high confidence

Initial project scaffolding and documentation

The repository has been initialized with the core structure for the Overtone project, a remake of The Tone Rebellion. This includes the solution file (Overtone.sln) defining projects such as Overtone.Cob, Overtone.Resources, Overtone.Extractor, and Overtone.Game, along with configuration files like global.json (targeting .NET SDK 10.0.401) and Directory.Build.props. Essential documentation has been added, including a README, a Contributor Guide detailing prerequisites and build steps, and specific format documentation for COB, palette, shape, and font files. The project also introduces license compliance via REUSE.toml and LICENSE.txt, a .gitignore file, and automated dependency updates via renovate.json.

(repo-wide) · high confidence

Introduce Overtone.Extractor CLI for game asset extraction

Adds a new command-line tool that allows users to inspect, render, and extract game resources. The tool supports reading shape files (.shp) to display sprite metadata or render them as PNG images, parsing font files (.fnt) to display character glyphs, and extracting cursor resources from PE32 executables. It also includes a command to list palette associations for shape files in a directory.

Overtone.Extractor · high confidence

Introduce new UI component system with sound-enabled buttons and dropdown menus

The game now features a new UI layer in the Overtone.Game.UI namespace, introducing interactive elements such as Buttons, Images, and DropdownMenuButtons. Buttons now play a hardcoded sound effect when clicked, with sound loading deferred to the Controls.Load stage to optimize performance. This change replaces previous ad-hoc UI handling with a structured IDrawableUI interface, enabling hover states, mouse interaction, and visual feedback for menu items.

Overtone.Game/UI · high confidence

Introduces utility modules for constants, geometry, and resource lifetimes

This change adds three new files to Overtone.Utils: Constants.fs defines named integer and string constants for scene IDs, window types, game data parameters, and asset paths; Geometry.fs provides a helper function to create XNA Rectangles from corner coordinates; and Lifetimes.fs offers a utility to attach IDisposable objects to a JetBrains Lifetime for automatic cleanup.

Overtone.Utils · high confidence

New Overtone.Resources assembly for game asset parsing

The Overtone.Resources assembly has been introduced to centralize the parsing and rendering of game data files. It includes modules for reading COB archive formats (Cob.fs), extracting and rendering Windows cursor resources (Cursor.fs), loading custom font formats (Font.fs), and accessing game disc archives (GameDisc.fs). Additionally, it provides utilities for handling color palettes (Palette.fs), rendering sprite shapes with SkiaSharp (Shape.fs, ShapePalette.fs), and parsing text configuration files (TextConfiguration.fs).

Overtone.Resources · high confidence

Behavioural changes

Initial MonoGame project template with scene-based architecture

The Overtone.Game module has been restructured as a MonoGame application, replacing the previous implementation with a scene-driven architecture. This change introduces a central GameState module to manage global settings (race, difficulty, map size) and configuration loading (sounds, shapes, islands). The main game loop now delegates rendering and input handling to a GameController and specific scenes (starting with MainMenu), while a dedicated TextureManager handles sprite loading and caching using SkiaSharp bitmaps. The entry point now initializes these systems and plays a startup sound before running the game loop.

Overtone.Game · high confidence

Introduce new scene architecture with animated menus

The game now uses a new \IScene\ interface and \SceneFactory\ to manage navigation between the Main Menu, New Game, and Planets views. The Main Menu and New Game screens feature animated background sparkles, while the New Game screen displays dynamic race selection visuals including animated glyphs, realm indicators, and floating entities.

Overtone.Game/Scenes · high confidence

New game controller and mouse input system

This change introduces the core game controller logic and mouse input handling for the application. The new GameController manages scene transitions (such as moving from the main menu to the new game or islands view), processes user events (like race selection and difficulty changes), and coordinates the rendering of UI elements and scenes. It also implements a new Mouse module that loads cursor textures from the game's executable resources and updates the cursor visibility and shape based on the current scene's requirements, replacing previous input handling mechanisms.

Overtone.Game/Controller · high confidence

Test coverage

Added tests for window configuration parsing and control retrieval; Added unit tests for resource file parsers.

Dependencies

Upgrade to .NET 10 and update core dependencies

The project has migrated its target framework to .NET 10 across all components, including the game, resources, utilities, and test projects. This update is accompanied by significant dependency upgrades: SkiaSharp and its Linux native assets have been updated to version 4.153.1, JetBrains.Lifetimes to 2026.3.1, MonoGame.Framework.DesktopGL to 3.8.5.1, and AsmResolver.PE.Win32Resources to 5.5.1. The test suite has also been updated to use Microsoft.NET.Test.Sdk 18.10.1 and xunit.runner.visualstudio 4.0.0.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 66 → 66 (+0.7)
  • Rubric changed (rubric-2026.09.15 → rubric-2026.10.1) — scores are not directly comparable.

Lenses

  • Code Health 95 → 95 (+0.0)
  • Architecture 87 → 92 (+5.0)
  • Maturity 46 → 46 (+0.0)
  • Readiness 76 → 76 (+0.0)
  • Security 100 → 100 (+0.0)

Resolved (1)

  • Documentation: no installation or build instructions (README.md)

Changes since last survey

  • 4 commits — 4 feature/other, 0 fixes

By area

  • Overtone.Resources/Overtone.Resources.fsproj — 2 commits
  • .github/workflows — 1 commit
  • Overtone.Game/Overtone.Game.fsproj — 1 commit

Notable commits

  • change: Update dependency JetBrains.Lifetimes to 2026.3.1
  • change: Update dependency ubuntu to v26
  • change: Update skiasharp monorepo to 4.153.0
  • change: Update skiasharp monorepo to 4.153.1

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

ForNeVeR/overtone was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 3 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 31868167623a23319518f5d4219bac3b84237617 — the exact code this score is about.
  • Scored under rubric-2026.10.1 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-4f4226d619ea.