Skip to content
unity · game · rareicon

DOTS hex-world game clientRareIcon

A Unity DOTS hex-world game client with a Burst-driven simulation — shipping to itch.io as Win/Linux/macOS standalone and to Steam as a demo.

Two destinations, one build

The same ci-unity.yml run reads external_publish to pick which post-build deploy fires — itch.io standalone or Steam.

  • itch.io — Win/Linux/macOS standalone builds.
  • Steam — demo (AppID 3791950) + main (AppID 2238370).
Unity DOTSEngine
unityPipeline
itch.io + SteamShips to
betaStatus

What it gives you

Features

ECS DOTS world

A Burst-driven hex-world simulation covering hex tiles, items, logistics, buildings, units, combat, professions, and quests.

Standalone-only Steam

Steam integration is locked to standalone via RareIcon.Platform.asmdef plus a SteamPluginPlatformGate editor hook, so mobile builds compile without seeing Steamworks types.

Two publish destinations

One build ships to itch.io as Win/Linux/macOS standalone and to Steam with a demo and main app.

Manifest-driven CI

The unity pipeline dispatches ci-main.yml to ci-unity.yml whenever the MDX version outpaces version.toml.

The client

Overview

RareIcon Unity client. Source: apps/rareicon/unity-rareicon. ECS DOTS world (Hex / Items / Logistics / Buildings / Units / Combat / Professions / Quests).

Pipeline & CI

Build, publish & release

pipeline: unity → dispatched by ci-main.yml to ci-unity.yml whenever version here outpaces version.toml. Standard manifest-driven flow, no bespoke workflow.

engine.build_targets:

  • StandaloneLinux64
  • StandaloneWindows64
  • StandaloneOSX
  • Android — APK / AAB (debug-signed for now; production keystore + Play upload pending)
  • iOS — Unity exports the Xcode project; the .ipa step is gated on an Apple Developer account

WebGL deliberately omitted — DOTS hybrid renderer + Burst aren’t WebGL-friendly.

Steam integration is locked to standalone via RareIcon.Platform.asmdef (includePlatforms excludes mobile / WebGL) plus SteamPluginPlatformGate editor hook (disables com.rlabrecque.steamworks.net native binaries on iOS / Android / WebGL importers). Mobile builds compile without seeing Steamworks types and ship without libsteam_api.so in the APK / IPA.

Two destinations from one build:

Itch (external_publish.itch_user / itch_game):

  • kbve/rareicon:linux-x86_64
  • kbve/rareicon:windows-x86_64
  • kbve/rareicon:osx-universal

Build runs with DISABLESTEAMWORKS scripting define so SteamManager auto-no-ops when launched outside Steam.

Steam (external_publish.steam_apps[]):

  • AppID 3791950label: demo (the public demo, shipped first)
  • AppID 2238370label: main (full game, queued for later)
  • Build keeps steam_appid.txt + Steamworks.NET enabled (the AppID flips per build via the Editor postprocessor)

The same ci-unity.yml run can target either route — the workflow reads external_publish to pick which post-build deploy fires.

  • UNITY_LICENSE (Personal/Professional auth artifact, GameCI flow)
  • UNITY_EMAIL, UNITY_PASSWORD (Personal license)
  • BUTLER_API_KEY (itch.io upload)
  • STEAM_USERNAME, STEAM_CONFIG_VDF (Steam Guard mobile auth, encoded)

Tag-driven via the standard manifest dispatch. Bump version here, run npx nx run astro-kbve:sync:ci-manifest, commit, the next push fans ci-main.ymlci-unity.yml for this entry.

Questions

Frequently asked

What is Unity RareIcon?

RareIcon is a KBVE game client built in Unity using the DOTS ECS. It runs a Burst-driven hex-world simulation covering hex tiles, items, logistics, buildings, units, combat, professions, and quests.

Where does RareIcon ship?

RareIcon ships to itch.io as a Windows, Linux, and macOS standalone build, and to Steam, where it has a demo app (AppID 3791950) and a main app (AppID 2238370).

How is RareIcon built in CI?

It uses the unity pipeline; ci-main.yml dispatches to ci-unity.yml whenever the MDX version outpaces version.toml. The engine build targets are StandaloneLinux64, StandaloneWindows64, StandaloneOSX, Android, and iOS.