BigScreen
A shared in-world screen for watching YouTube together in Big Walk. Everyone with the mod sees and hears the same video, in sync.
| Date uploaded | a week ago |
| Version | 1.0.4 |
| Download link | HotelCharlie-BigScreen-1.0.4.zip |
| Downloads | 180 |
| Dependency string | HotelCharlie-BigScreen-1.0.4 |
This mod requires the following mods to function
BepInEx-BepInExPack_IL2CPP
BepInEx pack for IL2CPP x64 Unity games. Preconfigured and ready to use.
Preferred version: 6.0.755README
BigScreen
A shared, in-world screen for Big Walk. The host places a screen somewhere on the island, pastes a YouTube link, and everyone with the mod sees and hears the same video at the same moment. Sit around it, heckle, walk off and let the sound fade behind you.
Status: alpha, runs in-game. As of 2026-09-19 the mod compiles against Big Walk (Unity 6000.3.17f1, BepInEx 6.0.0-be.755), loads, hooks Mirror, and places a working screen that syncs and tears down correctly. Video playback is the remaining unverified step. All three risks in docs/ARCHITECTURE.md are now resolved or retired and annotated with what actually happened; docs/PLAYTEST.md tracks what is still unverified.
How it works, in one paragraph
Big Walk is a Unity (IL2CPP) game networked with Mirror. BigScreen is a BepInEx plugin.
Every player who wants to watch installs it. The host owns a tiny piece of shared state
(where the screen is, which video, playing or paused, and a timeline anchor); it is sent
to modded guests over the game's own Mirror connection on a private message id. Each
player resolves the YouTube link to a direct stream URL locally with yt-dlp and plays it
with Unity's built-in VideoPlayer onto a quad in the world, with positional audio. Everyone
keeps their playback locked to the host's timeline using Mirror's shared clock. Players
without the mod are unaffected: they see nothing and receive nothing.
Requirements
- Big Walk on Steam (Windows, or Linux through Proton)
- BepInExPack IL2CPP (installed for you by a mod manager such as Gale or r2modman)
yt-dlp.exe. BigScreen downloads it automatically the first time it is needed (from the official yt-dlp GitHub releases), or setYtDlp.Pathin the config.
Install
With a mod manager (recommended): in Gale or r2modman, select Big Walk, create a profile,
install BepInExPack_IL2CPP, then import the BigScreen zip (or install it from Thunderstore
once it is published). Launch the game from the manager.
Manually: install BepInExPack IL2CPP into the game folder, launch the game once (the first
launch takes a few minutes while it generates interop files), then drop BigScreen.dll into
BepInEx\plugins\BigScreen\.
Everyone who wants to watch needs the mod. The host does not need to do anything special.
Use
- Host or join a walk.
- Press F8 to open the panel.
- Place screen here puts a screen 4 m in front of you, facing you.
- Paste a YouTube URL and press Load. Everyone with the mod resolves and starts the video in sync a few seconds later.
- Play/pause and seek from the panel. Guests can only control playback if the host ticks "Let modded guests control playback".
Your own volume slider is local. The audio is positional: stand close to hear it, walk away and it fades (configurable range).
Configuration
BepInEx\config\dev.h223chen.bigscreen.cfg (created on first launch). Highlights:
| Section | Key | Default | Meaning |
|---|---|---|---|
| Keys | ToggleUI | F8 | Open/close the panel |
| Audio | Volume / MaxDistance | 0.8 / 40 | Local volume; distance at which the screen goes silent |
| Screen | WidthMeters | 4 | Physical screen width (16:9) |
| YtDlp | Path / AutoDownload | "" / true | Where yt-dlp.exe lives; download it if missing |
| YtDlp | FormatSelector | muxed-MP4 chain | yt-dlp -f expression. Unity needs a single H.264+AAC MP4 |
| Sync | DriftToleranceSeconds | 1.0 | Re-seek when you are further than this from the host's timeline |
| Sync | GuestsCanControl / AutoPlay | false / true | Host-side permissions |
| Debug | Diagnostics | false | Verbose log line every 2 s |
Building from source
Prerequisites:
- .NET SDK 10 or newer
- A mod manager: Gale or r2modman
- BepInExPack_IL2CPP installed via your chosen mod manager
- Big Walk launched modded at least once so that
BepInEx\interopexists
Setup:
# 1. Install and launch the game modded through Gale or r2modman
# (this generates the interop files you need to build)
# 2. Verify .NET SDK is installed
dotnet --version
# 3. Build and deploy the mod
.\scripts\build.ps1 -Deploy # build and copy into <BepInEx>\plugins\BigScreen
# Alternative: create a Thunderstore-ready package
.\scripts\package.ps1 # creates dist\BigScreen-*.zip
The build auto-detects the Gale profile, the r2modman profile, and the Steam game folder in
that order. For a custom BepInEx path: copy Config.Build.user.props.template to
Config.Build.user.props and set BepInExPath.
New to Unity or game modding? Start with docs/MODDING-PRIMER.md.
Docs
- docs/MODDING-PRIMER.md: how Big Walk modding works, the toolchain, the dev loop, publishing.
- docs/ARCHITECTURE.md: design, sync protocol, risks, roadmap.
- docs/MIRROR-MESSAGING.md: how the networking works and why it bypasses Mirror's public message API, for readers new to Mirror.
- docs/TASK_LIST.md: planned improvements, and what the game's own interaction systems offer.
- docs/PLAYTEST.md: what to verify on the first in-game runs.
Credits
Built on the shoulders of the Big Walk modding community, in particular dougwithseismic/bigwalk-mods (toolchain and reverse-engineering guide), iameli/big-walk-practice (Mirror ownership notes, CI pattern) and the Trifocals mods (in-game patterns for players, audio and effects). BepInEx, Il2CppInterop, Harmony, Mirror and yt-dlp do the heavy lifting. Not affiliated with House House or Panic.
License
MIT. See LICENSE.
CHANGELOG
Changelog
1.0.4
1.0.3 was never published: Thunderstore rejected the package and this release carries its changes plus the packaging fix.
Fixed
package.ps1wrotemanifest.jsonwith a UTF-8 BOM, which Thunderstore rejects without giving a reason.Set-Content -Encoding UTF8means "with BOM" on Windows PowerShell 5.1; the manifest is now written throughWriteAllTextwith an explicit no-BOM encoder. Every package built before this carried the BOM - the source file was always clean, so it never showed up in the repo.
Both players must be on this version: the sync message gained two fields, so the protocol version went to 2 and a 1.0.2 peer is rejected outright rather than misreading the message.
Changed
- Screen geometry (
GroundClearance,WidthMeters) is now part of the shared state and owned by the host, the way position and yaw already were. A guest joining a lobby renders the host's screen at the host's height and width instead of their own, so everyone is looking at the same thing. Your own config still decides the screen for lobbies YOU host. - Raise/Lower is a host control now, and moves the screen for the whole lobby. A guest pressing it is told the host sets the height; the panel shows the shared value.
GroundClearancenow defaults to -0.3 rather than 0.6, which puts the screen near the ground and hides the stand. A fresh install and a tuned one no longer disagree by almost a metre. Existing configs keep whatever value they already hold - BepInEx does not rewrite a setting that is already there, so a host on the old default still needs to lower theirs once.
1.0.2
Fixed
-
Guests never received anything from the host, so the screen only ever existed on the hosting machine. Mirror's message delegate hands us the connection typed as
NetworkConnection, and the legacy-signature path cast it withas, which compares IL2CPP interop wrapper types rather than the native type and so producednull. The host then dropped every guest's Hello without logging anything, and with no peer registered it never broadcast state. UsesTryCastnow, and a Hello that still arrives without a connection says so in the log instead of vanishing.Only reachable with two machines: a solo host never sends itself a Hello, so no amount of single-machine testing could have hit it.
1.0.1
Comfort tweaks for actually sitting and watching something, rather than standing in front of a screen fighting the game's idle handling.
Added
Comfort.KeepAwake, which holds off the game's idle sleep - the dimming that creeps in when you stand still - while a video is playing and you are withinComfort.KeepAwakeRadius(15 m) of the screen. Sleep still works normally away from the screen. Set it toAlwaysto hold it off for the whole lobby, orOfffor stock behaviour. Local only: it resets your own idle timer and changes nothing for other players.Comfort.HideCrosshair, which takes the crosshair off the picture once you have stood still forComfort.HideCrosshairDelaySeconds(5 s), and brings it back the instant you move or look around. Same conditions asKeepAwake: only in front of a playing screen, and only withinComfort.KeepAwakeRadius. Set the delay to 0 to follow the game's own sleep timer instead.
1.0.0 - alpha
First version verified end to end in game: a YouTube link plays on a shared screen with positional audio, driven from an in-world control podium.
Added
- In-world control console beside the screen: skip back/forward 10 s, play/pause, and a paste bar that loads whatever YouTube link is on the clipboard. Aimed at and pressed with the game's own interact button, on mouse or controller.
- Status lamp on the console: grey idle, amber while resolving, green ready, red failed. Colour is the only feedback channel available - the mod ships no font.
- Screen positioning from the panel: raise/lower, and slide left/right/forward/back along the screen's own axes. Placement is remembered across restarts.
YtDlp.CookiesFromBrowser, for when YouTube blocks anonymous requests with "Sign in to confirm you're not a bot".
Changed
- Audio falls off as 1/distance rescaled to reach silence at
MaxDistance, instead of linear. Standing 4 m from the screen was previously 97% of full volume. - Guests with the mod can control playback by default.
Known limitations
- YouTube serves only one muxed format to the client yt-dlp can still reach, so playback is
capped at 360p. Higher resolutions are separate video and audio streams, which Unity's
VideoPlayer cannot take. Lifting this needs the ffmpeg backend in
docs/ARCHITECTURE.md. - Two modded players staying in sync has not been tested; there has only ever been one
machine. See milestone 3 in
docs/HANDOFF.md.
0.1.0 (unreleased)
- Initial scaffold: BepInEx 6 IL2CPP plugin, Mirror-based sync channel, yt-dlp resolver, Unity VideoPlayer backend, in-world screen with positional audio, IMGUI control panel.
- Not yet verified in-game. See docs/PLAYTEST.md.