build(steam): the SDK zip IS the only download — ContentBuilder included, links recorded
The partner dashboard offers exactly one download because there is only one: the SDK zip carries the runtime (steam_api64.dll) and the release tooling (sdk/tools/ContentBuilder with steamcmd.exe for Windows and steamcmd.sh for Linux/macOS, plus the app_build and depot_build VDF templates). Verified against the zip rather than assumed. scripts/steam-sdk.sh gains --contentbuilder, opt-in because it is 27 MB of binaries that only the uploading machine needs. Distribution.md §2 now opens with that fact — there is no separate ContentBuilder download to hunt for — plus a reference table of the pages that actually get used: SteamPipe upload, DLC setup, BIsDlcInstalled, store artwork sizes, Coming Soon window, the Wallet rule, recurring subs, partner support and Steamworks.NET.
This commit is contained in:
+26
-3
@@ -40,6 +40,28 @@ dotnet publish ytLive.csproj -c Release -r win-x64 --self-contained true \
|
||||
|
||||
## 2. Steamworks setup, once
|
||||
|
||||
**The SDK zip is the only download.** It is ~24 MB and contains the runtime
|
||||
(`sdk/redistributable_bin/win64/steam_api64.dll`) *and* the release tooling
|
||||
(`sdk/tools/ContentBuilder/` → `steamcmd.exe` for Windows, `steamcmd.sh` for Linux/macOS, plus the
|
||||
`app_build_*.vdf` / `depot_build_*.vdf` templates). There is no separate "ContentBuilder download"
|
||||
on the partner dashboard — the dashboard's Downloads page only re-offers the SDK.
|
||||
|
||||
**Reference links, so nobody hunts again:**
|
||||
|
||||
| What | Where |
|
||||
|---|---|
|
||||
| SDK zip (sign in to partner first) | `partner.steamgames.com/downloads/steamworks_sdk.zip` |
|
||||
| Docs home | `partner.steamgames.com/doc/home` |
|
||||
| SteamPipe upload (steamcmd + VDF fields) | `partner.steamgames.com/doc/sdk/uploading` |
|
||||
| DLC configuration | `partner.steamgames.com/doc/store/application/dlc` |
|
||||
| `BIsDlcInstalled` | `partner.steamgames.com/doc/api/ISteamApps` |
|
||||
| Store artwork sizes | `partner.steamgames.com/doc/store/assets/standard` |
|
||||
| Coming Soon / 2-week public window | `partner.steamgames.com/doc/store/coming_soon` |
|
||||
| Wallet rule (in-app purchases) | `partner.steamgames.com/doc/features/microtransactions` |
|
||||
| Recurring subscriptions | `partner.steamgames.com/doc/store/pricing/subscriptions` |
|
||||
| Partner support | `help.steampowered.com/en/wizard/HelpWithPublishing` |
|
||||
| Steamworks.NET (managed wrapper) | `nuget.org/packages/Steamworks.NET` |
|
||||
|
||||
1. **Steamworks account** → onboarding (NDA, identity, company details, tax interview, payout bank,
|
||||
then the **$100 Steam Direct fee** per app). The store page cannot be configured before the fee.
|
||||
2. **App IDs.** One **base app** (free) and one **DLC app** (the lifetime Pro). Note both numbers:
|
||||
@@ -49,9 +71,10 @@ dotnet publish ytLive.csproj -c Release -r win-x64 --self-contained true \
|
||||
4. **Steamworks SDK.** `./scripts/steam-sdk.sh ~/Downloads/steamworks_sdk_165.zip` extracts
|
||||
`steam_api64.dll` from `sdk/redistributable_bin/win64/` into `steam/` (gitignored) and stages
|
||||
`steam_appid.txt` = 480 — Valve's Spacewar app, so `SteamAPI.Init()` works locally before
|
||||
LlamaCasty has an App ID. The csproj copies the DLL **beside the exe** (`Link`) with
|
||||
`ExcludeFromSingleFile`, and copies `steam_appid.txt` in Debug only — never into a depot. The
|
||||
managed side is the `Steamworks.NET` package (`SteamApps.BIsDlcInstalled`).
|
||||
LlamaCasty has an App ID. Add `--contentbuilder` on the machine that uploads a depot. The csproj
|
||||
copies the DLL **beside the exe** (`Link`) with `ExcludeFromSingleFile`, and copies
|
||||
`steam_appid.txt` in Debug only — never into a depot. The managed side is the `Steamworks.NET`
|
||||
package (`SteamApps.BIsDlcInstalled`).
|
||||
5. **Store page** configured and made public **two weeks before release** — Valve's rule, and it is
|
||||
the window where wishlists accumulate.
|
||||
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
# is only needed on the machine that uploads a depot.
|
||||
#
|
||||
# ./scripts/steam-sdk.sh ~/Downloads/steamworks_sdk_165.zip
|
||||
# ./scripts/steam-sdk.sh ~/Downloads/steamworks_sdk_165.zip --contentbuilder
|
||||
#
|
||||
# --contentbuilder also extracts sdk/tools/ContentBuilder into steam/contentbuilder/ — that is
|
||||
# the release tooling (steamcmd + the app_build/depot vdf templates). It is a separate opt-in
|
||||
# because it is only needed on the machine that uploads a depot, and it is ~12 MB of binaries.
|
||||
#
|
||||
# steam_api64.dll is Valve's redistributable — shipping it beside a Steam-published exe is
|
||||
# permitted by the Steamworks terms. It is NOT committed: steam/ is gitignored, like ffmpeg/.
|
||||
@@ -14,6 +19,7 @@
|
||||
set -euo pipefail
|
||||
|
||||
ZIP="${1:-$HOME/Downloads/steamworks_sdk_165.zip}"
|
||||
WANT_CONTENTBUILDER="${2:-}"
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
|
||||
[ -f "$ZIP" ] || { echo "❌ SDK zip not found: $ZIP" >&2; echo " Download it from partner.steamgames.com/downloads/steamworks_sdk.zip while signed in." >&2; exit 1; }
|
||||
@@ -41,5 +47,29 @@ PY
|
||||
printf '480\n' > "$ROOT/steam/steam_appid.txt"
|
||||
echo "✓ steam/steam_appid.txt = 480 (Spacewar, local Debug testing only)"
|
||||
|
||||
if [ "$WANT_CONTENTBUILDER" = "--contentbuilder" ]; then
|
||||
python3 - "$ZIP" "$ROOT" <<'PY'
|
||||
import sys, zipfile, pathlib
|
||||
|
||||
zip_path, root = sys.argv[1], pathlib.Path(sys.argv[2])
|
||||
prefix = "sdk/tools/ContentBuilder/"
|
||||
dest = root / "steam" / "contentbuilder"
|
||||
|
||||
count = 0
|
||||
with zipfile.ZipFile(zip_path) as z:
|
||||
for name in z.namelist():
|
||||
if not name.startswith(prefix) or name.endswith("/"):
|
||||
continue
|
||||
target = dest / name[len(prefix):]
|
||||
target.parent.mkdir(parents=True, exist_ok=True)
|
||||
with z.open(name) as src, open(target, "wb") as out:
|
||||
out.write(src.read())
|
||||
count += 1
|
||||
|
||||
print(f"✓ steam/contentbuilder/ ({count} files)")
|
||||
print(" Windows upload: steam/contentbuilder/builder/steamcmd.exe +login <user> +run_app_build <vdf>")
|
||||
PY
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Next: the entitlement seam (IEntitlement + SteamApps.BIsDlcInstalled)."
|
||||
|
||||
Reference in New Issue
Block a user