Skip to content

Changelog

The battle logic changes often, as it is measured against the real game. This file lists changes to how you install and call the engine. Logic changes are listed by release in the GitHub Releases.

0.1.4 (2026-10-02)

  • A level overtime now ends as in the game. From tick 6067 every crown tower loses the same hit points each tick, and the first tower to fall decides the match (1-0, or 2-1 from 1-1). If both sides' weakest towers are exactly level, the match is a draw at tick 6147. At the end of a level overtime no more cards can be played, and every troop, building and spell leaves the board, so only the towers and the drain remain.
  • state_json(): each spell row gains a 12th value, ticks_flown, the ticks a flying spell has moved.
  • catalogue_json(): each card row gains a 12th value, champion, true for a champion card.
  • Wheels are tested on CPython 3.10, 3.11, 3.12, 3.13 and 3.14.
  • Battle logic: illegal troop taps, Furnace spirits, first hits, random delays, death rings and chases after a kill, as measured in the game.

0.1.3 (2026-10-02)

  • A played card's slot can now stay empty for a moment, as in the game. Each player has one refill timer: a new card enters the hand once every 1 second (0.5 s in double elixir, 0.35 s in triple). Play two cards quickly and the second slot is empty until the timer lets the next card in. An empty slot reads -1 in state_json()'s "hand", and playing it is refused with EMPTY_SLOT.
  • Battle logic changes: shots, Skeleton King copies, placement ties, targets of knocked-back and slapped units, death spawns, containers and building scans, as measured in the game.

0.1.2 (2026-10-02)

  • No change to installing or calling the engine. Battle logic changes only: the Skeleton King's copies are placed, and take their first step, as in the game.

0.1.1 (2026-10-02)

  • No change to installing or calling the engine. Battle logic changes only: a unit keeps chasing a target just past its sight range, and the Skeleton Barrel flies straight at its target, as in the game.

0.1.0 (2026-10-01)

  • Prebuilt wheels for Windows, Linux and macOS. One wheel per platform runs on CPython 3.10 and later. You no longer need Rust to install the engine.
  • The engine carries its card table inside the wheel. An installed engine no longer reads files from the machine it was built on.
  • New: royalesim.data_dir(), the folder holding the engine's data files.
  • New: royalesim.card_table_source(), which card table a battle loads.
  • state_json(): each row of a player's "evo" list gains a fourth value, the plays the evolution needs. Plays divided by it is the progress to the next evolved play. Readers of the first three values are unaffected.
  • royalesim is now a package. The compiled module is still royalesim.royalesim, and everything in it is available as royalesim.<name>, as before.