VR dungeon crawlin' https://crawler.vrg.party
Find a file
incidentalstoat e16580808b
All checks were successful
/ deploy (push) Successful in 3s
grappling hooks
2024-09-27 17:31:06 -05:00
.forgejo/workflows change workflow job name to deploy 2024-08-19 13:00:07 -06:00
config Changed gesture bindings 2024-08-23 22:43:39 -05:00
global_packs/required_data/new_player_start_lvl1 fix datapack reward function name 2024-08-16 21:37:59 -06:00
mods grappling hooks 2024-09-27 17:31:06 -05:00
multimc-instance move options into .minecraft dir 2024-08-23 14:28:36 -06:00
patchouli_books/vrcrawler Merge branch 'master' of https://git.vrg.party/hiina/minecraft-crawler 2024-08-16 22:04:04 -05:00
.gitattributes patch stoat changes 2024-08-09 14:20:36 -06:00
.gitignore put {mine,vive}craft defaults in the instance 2024-08-23 14:21:32 -06:00
.packwizignore add minecraft/vivecraft default configs 2024-08-23 13:46:49 -06:00
collect-mod-descriptions.py improve website/regen mod list 2024-08-22 16:41:57 -06:00
index.html Update index.html 2024-09-12 21:46:05 -06:00
index.toml grappling hooks 2024-09-27 17:31:06 -05:00
LICENSE.txt add multimc instance scaffold, actual readme 2024-08-23 12:52:04 -06:00
mods.html improve website/regen mod list 2024-08-22 16:41:57 -06:00
options.txt Too Many Binds, adjusted options.txt 2024-09-20 16:32:04 -05:00
org.jrbudda.vivecraft.steamvrinput_knuckles.json Adds bindings 2024-08-22 23:34:30 -05:00
org.jrbudda.vivecraft.steamvrinput_pico_controller.json Add anon's pico bindings 2024-08-24 14:10:35 -06:00
pack.toml grappling hooks 2024-09-27 17:31:06 -05:00
pico.red.min.css move website to toplevel 2024-08-15 14:30:28 -06:00
README.md add steamvr binding automation script 2024-08-23 16:05:21 -06:00
requirements.txt improve mod list html 2024-08-15 13:27:18 -06:00
setup-steamvr-bindings.ps1 fix ps1 syntax error 2024-09-05 20:45:00 -06:00
setup-steamvr-bindings.vbs add steamvr binding automation script 2024-08-23 16:05:21 -06:00
style.css improve website/regen mod list 2024-08-22 16:41:57 -06:00

/vrg/ crawler

If you're just here to use this modpack, see the website.

This is all the glue code and infrastructure to make the pack work. Read on if you want the gory details.

Goals

  • Turn minecraft into an acceptable VR co-op dungeon crawler.
  • Smooth over as many of the implementation details (including the fact it's a minecraft mod pack) as much as possible.
    • Auto-update clients automatically from the server config
    • Auto-update the canonical server from this repo.
    • Patch around the awful steamVR bindings setup experience.

How It Works

This repo is primarily a packwiz-based mod pack. All the mods are pinned to specific Modrinth versions and the configs (client and server) are versioned directly in the modpack. A deploy script on the webserver syncs this repo state to https://crawler.vrg.party/pack.toml.

MultiMC instance

The MultiMC / PolyMC / Prism Launcher compatible instance zip is put together with minimal configuration in the multimc-instance dir. The instance uses packwiz-installer as a pre-launch task to fetch the pack.toml file and actually download all the mods for you, including updating/removing mods as needed.

The pack currently also autojoins the crawler.vrg.party server on launch. I think this is nice and saves a few clicks, but could be convinced otherwise.

Default Minecraft / Vivecraft Config

We include default options.txt and optionsviveprofiles.txt which unfuck some of the conflicting keybinds and bad default Vivecraft settings, and have Vivecraft radial menu bindings for some of the need-to-have things in the mod pack (like the voice chat UI and the skills tree).

The defaults are only applied once by including them in the multimc instance zips, rather than in the packwiz pack (which would overwrite whatever the user changes). I think this is acceptable; if the user wants new defaults they can reimport the entire instance and probably not lose anything important.

SteamVR Bindings

The SteamVR bindings are awful, and even worse for non-steam games like Vivecraft; the bindings are supposed to be in the workshop, but they're not. Plus you still have to click through a bunch of things even if it was there.

Thus, we bundle the bindings json file in the pack, downloaded by packwiz, and include the setup-steamvr-bindings.ps1 script to copy the bindings file to the <documents>/steamvr/input/imports directory, and then call the HTTP API that steamVR uses internally in the bindings UI to click the button for you.

And also there's the setup-steamvr-bindings.vbs wrapper script, since ps1 scripts don't seem to run on double-click by default, but VBS does.

So you still have to do some stuff manually, but it's way less hassle than it'd be otherwise.

Ideally the multiMC script would run the script on boot, but the packwiz-installer already runs there. Might be able to make a wrapper to call both though.

Mod Descriptions

Somehow, there is no existing tool that really shows you what's in a giant modpack like this one. Sure you can stare at the multimc mods UI, or even look at the flat list of mods in a modrinth modpack, but that's not very helpful; it's at best an alphabetical list, all the library mods you don't really care about are mixed in there, and it's hard to tell what's actually important.

So, I made collect-mod-descriptions.py to gather and update mod descriptions into a nice html page. It involves manually categorizing all the mods by their modrinth slug, which is a bit of a pain, but it's way more useful than a flat list (or even the author-provided modrinth tags, which aren't that good).

To run it, first setup the environment:

python3 -m venv venv
pip install -r requirements.txt

Then run:

python3 collect-mod-descriptions.py mods mods.html

The script will complain if some of the mods in packwiz aren't tracked in the python file itself (for manual categorization).

Server

Since this is packwiz, you can use itzg Minecraft Docker image to (relatively) easily deploy a server using this pack.

One difficulty is that this pack uses Simple Voice Chat which needs UDP 24454 exposed to work. With docker-compose you can use:

services:
  mc:
    ports:
    - 25565:25565 # minecraft TCP
    - 24454:24454/udp # simple voice chat UDP

to do this.

Web Deployment

I set up a forgejo workflow to run on push to master. The workflow just sends an HTTP POST to the webserver, where I set up a CGI script (through nginx and fcgiwrap) that does the dirty work (git pull, update the multimc zip file); I didn't want to give direct SSH access to the server for this since it's not well isolated. Janky setup, but works for me.

Contributing

If you'd like to contribute to this modpack or suggest changes, post in the thread. We'll see it. Upload your git patch output to pastebin or whatever, if you're autistic enough to do that.