Skip to content

Native Plugin SDK

Native plugins are an advanced opt-in path. These notes are generated from the approved public SDK document.

Safety Gate

  • Toggle in game Mods menu: **Unsafe Native Mods: ON/OFF**.
  • OFF blocks all native plugin declarations.
  • ON still validates manifest/API/permission requirements before activation.

Runtime Validation

  • `nativeApiVersion` in mod manifest must match game API (`1` in this build).
  • Requested `nativePermissions` must be present in `data/modding/native_permissions.json`.
  • Rejections are logged with actionable reasons.
  • Plugin binaries must resolve to the current platform and export required entry points.

C ABI Contract (`engine/mod/NativePluginApi.h`)

  • `WardenPlugin_GetApiVersion`
  • `WardenPlugin_GetMetadata`
  • `WardenPlugin_OnLoad`
  • `WardenPlugin_OnUnload`
  • `WardenPlugin_OnTick`
  • `logInfo`, `logWarn`, `logError`
  • economy/state:
  • `grantCopper(int amount)`
  • `setCopper(int amount)` / `getCopper()`
  • `addExperience(int amount)`
  • `getCurrentWave()`, `getHeroLevel()`, `setWave(int wave)`
  • combat/gameplay multipliers:
  • `setEnemyScaleMultiplier(float multiplier)`
  • `setEnemyHealthMultiplier(float multiplier)`
  • `setEnemySpeedMultiplier(float multiplier)`
  • `setEnemyDamageMultiplier(float multiplier)`
  • `setPlayerDamageMultiplier(float multiplier)`
  • `setPlayerMoveSpeedMultiplier(float multiplier)`
  • `setPlayerAttackSpeedMultiplier(float multiplier)`
  • `setPlayerXpGainMultiplier(float multiplier)`
  • `setPlayerGoldGainMultiplier(float multiplier)`
  • `setCopperRewardMultiplier(float multiplier)`
  • `setWaveClearBonusMultiplier(float multiplier)`
  • direct actions:
  • `healHero(float amount)`, `damageHero(float amount)`
  • `spawnEnemyBatch(const char* enemyId, int count, int spawnBoss, int markAsElite)`

SDK Assets

  • SDK header + sample plugin are shipped in `tools/native_sdk/`:
  • `tools/native_sdk/include/WardenNativePluginApi.h`
  • `tools/native_sdk/sample_plugin/`
  • `tools/native_sdk/README.md`
  • Shipped native mod template:
  • `mods/template_enemy_size_pulse_cpp/`

Current Runtime Status

  • Native plugin loading is enabled in unsafe mode.
  • Host validates manifest API/permissions, binary platform/path, required exports, and plugin ABI before activation.
  • Loaded plugins participate in runtime tick and in compatibility/save digest metadata.