diff --git a/README.md b/README.md index 0f30fd1..3b46824 100644 --- a/README.md +++ b/README.md @@ -259,8 +259,7 @@ choice, and troubleshooting). In short, after a one-time Developer-Mode pairing: # override the target with --host steamos@ or FRAME_HOST ``` -Either way the app appears in **Steam ▸ Library ▸ Non-Steam** as *Devkit Game: -PixelVRPlayer*. To run it manually over SSH for debugging: +Either way the app appears in **Steam ▸ Library ▸ Non-Steam** as **Pixel VR Player**. To run it manually over SSH for debugging: ```bash ssh steamos@frame '~/devkit-game/PixelVRPlayer/launch.sh /path/to/video.mp4' diff --git a/assets/icon.png b/assets/icon.png new file mode 100644 index 0000000..4d9a7fb Binary files /dev/null and b/assets/icon.png differ diff --git a/assets/icon_option1_cyber_neon.png b/assets/icon_option1_cyber_neon.png new file mode 100644 index 0000000..1a769b6 Binary files /dev/null and b/assets/icon_option1_cyber_neon.png differ diff --git a/assets/icon_option2_retro_synthwave.png b/assets/icon_option2_retro_synthwave.png new file mode 100644 index 0000000..9673427 Binary files /dev/null and b/assets/icon_option2_retro_synthwave.png differ diff --git a/assets/icon_option3_industrial.png b/assets/icon_option3_industrial.png new file mode 100644 index 0000000..413285d Binary files /dev/null and b/assets/icon_option3_industrial.png differ diff --git a/assets/icon_option4_isometric_glass.png b/assets/icon_option4_isometric_glass.png new file mode 100644 index 0000000..7b6ee47 Binary files /dev/null and b/assets/icon_option4_isometric_glass.png differ diff --git a/docs/assets/icons/icon_option1_cyber_neon.png b/docs/assets/icons/icon_option1_cyber_neon.png new file mode 100644 index 0000000..1a769b6 Binary files /dev/null and b/docs/assets/icons/icon_option1_cyber_neon.png differ diff --git a/docs/assets/icons/icon_option2_retro_synthwave.png b/docs/assets/icons/icon_option2_retro_synthwave.png new file mode 100644 index 0000000..9673427 Binary files /dev/null and b/docs/assets/icons/icon_option2_retro_synthwave.png differ diff --git a/docs/assets/icons/icon_option3_industrial.png b/docs/assets/icons/icon_option3_industrial.png new file mode 100644 index 0000000..413285d Binary files /dev/null and b/docs/assets/icons/icon_option3_industrial.png differ diff --git a/docs/assets/icons/icon_option4_isometric_glass.png b/docs/assets/icons/icon_option4_isometric_glass.png new file mode 100644 index 0000000..7b6ee47 Binary files /dev/null and b/docs/assets/icons/icon_option4_isometric_glass.png differ diff --git a/docs/deploy-to-steam-frame.md b/docs/deploy-to-steam-frame.md index 1d26980..9695209 100644 --- a/docs/deploy-to-steam-frame.md +++ b/docs/deploy-to-steam-frame.md @@ -94,8 +94,7 @@ All three methods below share the same setup. Do this once. - **Easiest to iterate:** Option B (one command builds nothing you didn't ask for and launches in the headset). -They all end up in the same place: *Steam ▸ Library ▸ Non-Steam ▸ **Devkit Game: -PixelVRPlayer***. +They all end up in the same place: *Steam ▸ Library ▸ Non-Steam ▸ **Pixel VR Player***. --- diff --git a/tools/deploy.py b/tools/deploy.py index c37bbab..56678ad 100644 --- a/tools/deploy.py +++ b/tools/deploy.py @@ -127,7 +127,7 @@ def main() -> int: 'mkdir -p "$target/shaders"; printf %s "$target"' ) - # 2. Copy binary, shaders and the direct-run helper. + # 2. Copy binary, shaders, launcher, and icon. print("Copying binary ...") scp([str(binary)], f"{REMOTE_DIR}/pixelvr") if shaders: @@ -136,6 +136,9 @@ def main() -> int: launch_helper = PROJECT_ROOT / "tools" / "launch.sh" if launch_helper.is_file(): scp([str(launch_helper)], f"{REMOTE_DIR}/launch.sh") + icon_file = PROJECT_ROOT / "assets" / "icon.png" + if icon_file.is_file(): + scp([str(icon_file)], f"{REMOTE_DIR}/icon.png") # 3. Register the Non-Steam shortcut (runs on the host, not in Sniper). request = { @@ -165,6 +168,67 @@ def main() -> int: if isinstance(response, dict) and response.get("error"): raise RuntimeError(f"shortcut registration failed: {response['error']}") + # 3b. Sanitize shortcuts.vdf to remove the 'Devkit Game: ' prefix and set icon. + sanitize_script = ( + "import glob, os, struct, shutil\n" + "OBJ, STR, INT, U64, END = 0, 1, 2, 7, 8\n" + "def read_cstr(buf, pos):\n" + " end = buf.find(b'\\0', pos)\n" + " return buf[pos:end].decode('utf-8', 'surrogateescape'), end + 1\n" + "def parse_obj(buf, pos):\n" + " entries = {}\n" + " while pos < len(buf):\n" + " kind = buf[pos]\n" + " if kind in (END, 0x0B): return entries, pos + 1\n" + " key, pos = read_cstr(buf, pos + 1)\n" + " if kind == OBJ: value, pos = parse_obj(buf, pos)\n" + " elif kind == STR: value, pos = read_cstr(buf, pos)\n" + " elif kind == INT: value = struct.unpack_from(' int: print(f"Deployed to {host}:~/{REMOTE_DIR}") if player_args: print(" argv:", " ".join(["./pixelvr", *player_args])) - print(f" Launch from Steam > Library > Non-Steam > 'Devkit Game: {GAME}'") + print(" Launch from Steam > Library > Non-Steam > 'Pixel VR Player'") print(f" Or over SSH: ssh {host} '{REMOTE_DIR}/launch.sh