Skip to content

Steamworks 对接

Galgo 的 Steamworks 支持是可选能力。默认构建不启用 Steamworks 绑定;需要构建 Steam 版本时再使用 steamworks build tag 并准备 Steamworks SDK。

默认行为

不带 tag 构建时,steam_disabled.go 会提供 no-op 客户端。此时:

  • SteamConfig.Enabled 为 false 时不会做 Steam 初始化。
  • 如果强制启用 Steam 但未带 steamworks tag,会返回禁用错误。
  • 普通非 Steam 版本不需要 SDK。

SDK 放置

Steamworks SDK 应放在仓库根目录:

text
steamworks_sdk/
  public/
    steam/
      steam_api_flat.h
  redistributable_bin/
    win64/
      steam_api64.lib
      steam_api64.dll
    linux64/
      libsteam_api.so
    osx/
      libsteam_api.dylib

当前 cgo 路径从 internal/galgo 回到仓库根目录查找 steamworks_sdk

基础配置

go
Steam: galgo.SteamConfig{
    Enabled:               true,
    AppID:                 480,
    RequireSteam:          true,
    RestartAppIfNecessary: true,
    AutoSyncAchievements:  true,
}

字段说明:

  • Enabled:是否启用 Steam。
  • AppID:Steam App ID。
  • RequireSteam:Steam 初始化失败时是否直接报错。
  • RestartAppIfNecessary:必要时通过 Steam 重启应用。
  • AutoSyncAchievements:解锁 Galgo 成就时同步 Steam 成就。
  • AchievementAPINamePrefix:给 Steam API 名加前缀。
  • DLCs:DLC 配置。

构建

powershell
go build -tags steamworks ./example

Windows 发布时还需要把 steam_api64.dll 放到可执行文件旁边。Linux/macOS 同理放置对应动态库。

成就同步

Galgo 成就:

go
Achievements: []galgo.AchievementItem{
    {Key: "walk_home", Title: "Walk Home", Description: "Chose to walk home with Aria."},
},

解锁:

go
galgo.UnlockAchievement("walk_home")

如果 AutoSyncAchievements 为 true,会调用 Steam 成就 API。Steam API 名默认使用 key,也可以用 AchievementAPINamePrefix 统一加前缀。

手动同步:

go
engine.SyncSteamAchievement("walk_home")
engine.SyncSteamAchievements()

进度成就:

go
galgo.SteamAchievementProgress("collector", 3, 10)

DLC

配置 DLC:

go
Steam: galgo.SteamConfig{
    Enabled: true,
    DLCs: []galgo.SteamDLCItem{
        {
            Key:       "episode_2",
            AppID:     123456,
            MountPath: "./dlc/episode_2",
            AutoMount: true,
        },
    },
}

刷新 DLC:

go
states := engine.RefreshSteamDLCs()

脚本中刷新:

go
galgo.RefreshSteamDLC("episode_2")

挂载资源根:

go
galgo.MountSteamDLC("episode_2")

根据 DLC 是否安装跳转:

go
galgo.BranchSteamDLC("episode_2", "dlc_start", "dlc_missing", true)

如果 mountIfInstalled 为 true,会在安装时把 MountPath 加入资源搜索根。

开发建议

Steam 相关逻辑建议做成可降级:

  • 非 Steam 版本不要强依赖 Enabled: true
  • 剧情 DLC 缺失时跳到提示节点。
  • Steam 成就同步失败不要阻塞剧情。
  • DLC 资源路径和普通资源路径保持同一套命名规则。

Released under the project license.