- Python 57.1%
- Lua 41%
- Shell 1.9%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Players.CharacterAutoLoads defaults to true, so the engine already reloads a dead player after about five seconds. The keeper added on top reloaded them a second time, somewhere else, well after they had got up: measured at 5s for the engine and 26s for ours, three times running. The 26s is its own lesson. RESPAWN_FRAMES was 300, meant as five seconds at 60fps, but the headless host renders in software at about twelve, so every frame-counted duration on the server ran five times long. |
||
| corescripts | ||
| deploy/openrc | ||
| docs | ||
| templates | ||
| trollbricks | ||
| .gitignore | ||
| README.md | ||
trollbricks
Run a 2013 Roblox client on Linux, under Wine, against your own backend. CLI only, no GUI.
Not a Novetus port. Novetus is a Windows WinForms app whose value is the per-version knowledge behind it, not its code. This reimplements the same facts for Linux, with no GUI and no Windows launcher. The only Windows code that runs is the Roblox binaries.
Status
Working. Two players connect to a host, spawn apart, see each other move, chat, and use tools. The host runs headless and can be on another machine.
Targets build version-1112937d32504d8c: PE32 i386, VS2012 runtime, branch
Trunk2012, binaries dated 2013-01-01. Wine 11 staging (WoW64), WineD3D over
OpenGL, tested on Intel HD 4000 with Mesa.
Verified end to end, including a host 100 miles away reached over Yggdrasil. Not done: accounts, persistence, more than one place per host.
Requirements
wine11+ withUSE="wow64", and a win64 prefixopensslonPATH- Python 3.11+, no third-party packages
Quick start
python3 -m trollbricks init
python3 -m trollbricks keys gen
python3 -m trollbricks prefix init --players 2
# client files go in clients/2013/, places in places/<id>.rbxl
python3 -m trollbricks patch clients/2013/RobloxPlayerBeta.exe
python3 -m trollbricks configure
The client only talks to a hostname ending in .roblox.com, on port 80. Add to
/etc/hosts:
127.0.0.1 trollbricks.roblox.com
and let the backend bind 80 without root:
sudo sysctl -w net.ipv4.ip_unprivileged_port_start=80
Then check and play:
python3 -m trollbricks doctor
python3 -m trollbricks up --place-id 1 --players 2
up runs the backend, starts the host, waits for it to bind, and launches the
players. Closing a player shuts it all down.
Docs
| page | what is in it |
|---|---|
| running | setup, layout, commands, headless hosting |
| remote | LAN, IPv6 and Yggdrasil, running as a service |
| interface | playerlist, chat, backpack, keys, appearance |
| binary | what the exe told us, and why there is no RCCService |
| replication | SimulationRadius, and why players froze |
| debugging | logs, tracing, signature problems |
Scope
Personal, local, single machine. No accounts, no persistence, no public server.
Roblox client binaries, places and assets are Roblox Corporation copyright and
are not in this repository. .gitignore excludes them on purpose. Source
them yourself into clients/, places/ and assets/, and keep them out of git.
Remaining work
- One place per host; switching means a restart
- No accounts, persistence or place list
- Studio (
clients/2013-studio/) is wired but never launched. Qt4, and a different Wine risk from the player
Credit
Client version metadata and the general shape of this approach are informed by Novetus (MIT). No Novetus code is used here, only facts, which are not copyrightable.