Devblog
Mission Selection: Script-Driven Windows
The mission selection and briefing flow is now fully script-driven. The new ui_mission_choice_window.js replaces mission_next.cpp, the briefing window switches to autoconfig init, and branching mission paths can now be defined in script files without recompiling.
Tax Collector Window: Script-Driven UI
The Tax Collector's info window is now fully script-driven. This migration from C++ to JavaScript allows modders to customize window behavior without recompiling. Includes hot-reloading support and event-driven tax rate controls.
Read more →Sound Settings Window
Redesigned sound options window with individual volume controls for music, speech, effects, ambient, and city audio channels. Migrated to JavaScript configuration as part of ongoing UI modernization.
Read more →Reverse-engineering Caesar III: City Rendering (Part 2)
Deep dive into Caesar III's isometric rendering system: tile format, map structure, rendering order algorithm, and the .map file format. Covers how to properly draw a 2.5D city with moving objects, animations, and multi-tile buildings.
Read more →Changes in Akhenaten for 2025
A comprehensive changelog covering major work done in 2025: architecture refactoring, migration to JS configs, new enemy types, language support, new buildings, resource depletion, UI improvements, deferred rendering, mod system, and more.
Read more →Game++. Cooking Vectors (Part 2)
Discusses hybrid_vector — a static_vector that falls back to heap allocation when exceeding a threshold. Draws a parallel to SSO (Short String Optimization). Covers when hybrid_vector helps vs. when it doesn't, and how C++17's std::pmr can emulate the pattern.
Game++. Cooking Vectors (Part 1)
Explores performance tradeoffs of std::vector in game dev: allocation costs, memory layout, std::array vs static_vector, and the PS4→Switch porting story with 480KB stack limits.
Game++. String Interning
Covers string interning (string pools) as a game engine optimization: compiler-level interning, fragility with char[] and std::string, custom xstring class using CRC hashes, and a 30% animation performance boost in practice.
Should Players Be Hand-Held?
A game design essay analyzing level design techniques from Witcher 3, Zelda, and Metro Exodus: landmarks/weenies, golden path, breadcrumbs, affordance, leading lines, and more.
Read more →Working on Walls Logic
New logic for walls — buildings now connect and render properly.
Read more →Temple Complex
Screenshot gallery showing temple complex buildings added to the game — multiple new structures extending the religious building set.
Read more →
Works in Browser
Credits @ololoken for getting the game running in-browser via Emscripten/WASM. Try it at dalerank.github.io/Akhenaten.
Sprite Tool Added
A new sprite viewer tool for inspecting runtime animations by selecting items from a list. Useful for verifying animations during development.
Base Class for Hyena Animal
Added a base class for hyenas: "It's not very functional yet, but it's another step toward restoring the game."
See figure_hyena.h on GitHub.
The Story of Original Pharaoh Game
A history of Pharaoh (1999) by Impressions Games: development origins, key figures like Simon Bradbury and Chris Beatrice, the ping-pong texturing art technique, and how the game sold 1.7 million copies on a sub-$2M budget.
Read more →How to Build a Mastaba
Technical deep-dive into recreating the mastaba monument system: the .sg3/.555 texture format, decomposing the original single-pass render into independent isometric parts, and the 8-stage construction process requiring 400 stones per segment.
Read more →