Late Qing Historical Simulation Devlog 0 - SK5 Digitization and Battle of Yalu River


This is a devlog for a historical simulation game set in the late Qing Dynasty. The ultimate goal is to create a combination of political simulation, hex-based land warfare, and tactical naval warfare, modeling various aspects of the late Qing's politics, economy, and military. This post documents the first experiment in implementing the tactical naval warfare system, using the SK5 rules to simulate the Battle of the Yalu River (1894 Yellow Sea Naval Battle).

For those unfamiliar with SK5, SEEKRIEG 5 is one of the most detailed tabletop miniature naval wargame rulesets, focusing surface gun engagements from 1880 to 1945. Having worked on the digital adaptation of Harpoon V at my previous job, I found the style of exposing all data for real-time editing and adjudication quite under-explored and full of potential. Thus, I decided to adopt this approach for the first experiment.

In SK5, ship data and status are recorded in a table called the Ship Log:

As seen, each ship records the positions of its guns, firing angles, fire control tables (hit probabilities based on distance, target speed, and aspect), penetration tables (horizontal and vertical penetration at various ranges, along with rate of corrected fire), rapid-fire gun batteries (guns under 100mm), torpedo status, nine types of armor ratings, maximum speed and its relation to engine, propulsion, and boiler damage, turning speed, and more.

One of SK5's defining features is its use of over a hundred types of Damage Effects (DE) instead of a traditional "hit point" (called damage point, DP in SK5) system. In SK5, increasing DP only has a chance to cause certain damage effects, which are generally more severe than those caused by regular hits. A DP exceeding 100% does not guarantee sinking but, due to accumulated DE and morale checks, very likely renders the ship combat-ineffective.

This is already more complex than some PC naval tactical wargames. For example, JTS Naval Campaign is highly simplified—in its Tsushima title, ships only have these stats:

Each gun only has range, ammunition count, and firepower value, while ships only feature vertical and horizontal armor, speed, and big calibre guns.

Of course, JTS Naval Campaign might be oversimplified—even War in the Pacific (WITP), which even doesn’t feature tactical combat, is more detailed:

Rule the Waves (RTW) is roughly on par with or slightly more complex than SK5, with some aspects more detailed and others simpler. RTW also models many of SK5's DEs—like rudder failure, magazine explosions, capsizing, miscommunication and etc.


Thus, SK5's mechanics serve as a solid benchmark for naval combat simulation. I didn’t adopt all its rules—for instance, I skipped its distinguish command system entirely, and replaced its torpedo "probability spread" with physics-collision-based calculations. My focus was on gunfire resolution, damage calculation, and movement rules.

In the demo, the original SK5 Ship Log is divided into three parts in the demo: Ship ClassNamed Ship (an instance of a ship class at a specific time, generally beginning of a campaign) and Ship Log (battle/volatile status of a ship).

Ship Class Editor:

(Basic Info: Type, size, DP, damage control capability, ram, armor and etc)

(Dynamic Info: max speed, turn speed, acceleration and relationship of specific damage and max speed)

(Battery Info: range, damage rating, ROF, # of FCS, shell size, weight, ammo capacity, fire control table, penetration table, mount location and firing arc and etc)

(RF Batteries Info: Fire Control Table, range, damage factor and mounts distributions and damage relationship.)

(Torpedo Info: Ammo Cap, Damage Class, Dub Prob, Range-Speed settings and mounts)

(Remark: Length/Beam will determine ship icon size and collision, others are remark only)

(Graphic: side, top view, where top view is used to draw the icon)

(Score: Scores of survivability and firepower, used to calculate VP and AI decision)

Named Ship Editor:


(Instance of an ship class at a specific time point, crew rating, speed modifier subject to aging, captain and other historical remarks .)

Ship Log Editor:

(Basic Info: sinking state, operational state, location, current and desired speed & heading, control mode, damage point, damage tier, speed, acceleration modifier, engine/prop/boiler normal hit or flooding hit, damage control rating hit,searchlight hit, and etc)


Here the Yangwei sinks due to severe flooding in its engine and boiler rooms (damage exceeding 80% of total capacity):


(Damage Effects (DE) and damage control team assignments)

Currently, manual editing of DEs isn’t supported for implementation simplicity (though most other stats are editable in real time). This may change with future UI improvements.


(Every battery mount is tracked independently, they can fire fully automatically, restricted by doctrine or fully manual)


(Torpedoes launch when an interception point solution exists and aligns with doctrine)


(RF Batteries are not tracked independently but can also split into multiple firing group)


(ShipLog-level score would reflect damage status)


(Unit-level doctrine controls automation levels and behavior for movement and firing)


(The Order of Battle (OOB) currently has limited functionality (formation movement is handled via unit-level follow/relative positioning rather than OOB hierarchy). Its main use is high-level doctrine assignment—e.g., enabling auto-maneuvering for the entire Beiyang Fleet or Japanese fleet)


The leader currently has no significant role, other than marking the historical command of ships and formations, because in the original SK5 rules, commander abilities function through the Bridge/Flag Command Rating, but there are no plans to use the Command System at the game. In future development, the three abilities would be processed as:

  • Strategic ability: Generating favorable engagements and avoiding unfavorable ones.
  • Operational ability: Commanding a battle or large fleets.
  • Tactical ability: Directing individual ships or small formations.

(Launched torpedo states: their shooter, desired target, endgame states)


(Scenario global states: weather and other factors)

Gameplay resembles Rule the Waves or JTS Naval Campaign—players control formation flagships, with other ships maintaining relative positions. Slowed or sunk ships drop out, and others fill gaps.

Pressing 1, 2, 3, etc. advances time by 1, 2, or 3 minutes. Firepower redistribution occurs every minute, while many SK5-derived checks run every 2 minutes. The default time pulse is 1 second (adjustable), useful for observing torpedo movement given their short range in this era. Other controls:

  • Shift-Left click to adjust ship heading.
  • Right-drag to pan the map.
  • Speed adjustments in the right information panel.
  • I/F/R to set unit's control mode (Independent (detach), follow, relative to)
  • Edit and inspect many parameter and state in editors.

Most data can be edited real-time, mimicking CMO’s play in edit mode experience.

For AI, firing follows a utility-maximizing principle and can be automated or manually controlled via doctrine. Maneuvering AI is disabled by default but can be enabled in doctrine settings. Currently, it evaluates 18 possible headings and distances (assuming the enemy maintains course) to maximize firepower output while minimizing exposure. It’s not particularly smart yet, so players is recommended to manually control both sides as a sandbox tool.

Note on scenario data correctness: The current scenario uses SK5’s scenario shiplogs supplemented by Dawn of the Battleship and other sources. SK5’s data unfortunately contains many errors (even copy-paste mistakes), so a revised version may follow. English field of global string uses SK5’s descriptions, while Japanese/Chinese text draws from other sources, possibly causing inconsistencies (in general, Japanese/Chinese source would be more accurate, but note the numerical data still come from SK5's questionable source).

SK5 also tends to overestimate damage for the battle—the armor advantages of the Tingyuen and Chenyuen aren’t fully reflected, protected cruisers modeling is questionable and no common home-rule is made in the community. No adjustments have been made yet, so ships may degrade much faster than historically. This can be tweaked via global hit probability coef parameter. Ammunition types also follow SK5’s defaults setting, so Beiyang Fleet’s poor performance of solid shot is not reflected, which may change in revised scenarios.

Overall, the experiment was successful I guess. With minimal polish (e.g., handmade ship sprites), this could serve as the final tactical naval system module (yet another spreadsheet-game). Additional features like coastal battery and night battles are needed for simulating the Weihaiwei battle, and AI requires further development.

The next devlog will likely cover land/strategic naval warfare design or another system demo. The vision is a War in the Pacific-like scale hex-based system, but with more detailed land combat and supply modeling, also the tactical naval resolutions replace the pure strategic things. By introducing tactical naval battles, the game could avoid the awkward naval abstractions seen in land-focused wargames like The Operational Art of War. My goal is that the system could be able to simulate the entire First Sino-Japanese War, then it may be sent to be combined with a interesting policy simulation system.

Files

Late-Qing-Naval-Combat-demo.zip Play in browser
5 days ago

Leave a comment

Log in with itch.io to leave a comment.