.\nanover-cli.exe --name "SubtleGame" "..\Inputs\sandbox_2_C10_alkanes.xml" "..\Inputs\17-ala.xml" "..\Inputs\nanotube_langevin.xml" "..\Inputs\ANGLE\buckyball_angle_A_0.75.xml" "..\Inputs\ANGLE\buckyball_angle_A_0.625.xml" "..\Inputs\ANGLE\buckyball_angle_A_0.875.xml" "..\Inputs\ANGLE\buckyball_angle_A_1.7.xml" "..\Inputs\ANGLE\buckyball_angle_A_1.25.xml" "..\Inputs\ANGLE\buckyball_angle_A_1.125.xml" "..\Inputs\ANGLE\buckyball_angle_A_1.375.xml" "..\Inputs\ANGLE\buckyball_angle_B_0.3.xml" "..\Inputs\ANGLE\buckyball_angle_B_0.75.xml" "..\Inputs\ANGLE\buckyball_angle_B_0.625.xml" "..\Inputs\ANGLE\buckyball_angle_B_0.875.xml" "..\Inputs\ANGLE\buckyball_angle_B_1.7.xml" "..\Inputs\ANGLE\buckyball_angle_B_1.25.xml" "..\Inputs\ANGLE\buckyball_angle_B_1.125.xml" "..\Inputs\ANGLE\buckyball_angle_B_1.375.xml" "..\Inputs\ANGLE\buckyball_angle_A_0.3.xml"
Or the following for a short game:
.\nanover-cli.exe --name "SubtleGame" "..\Inputs\sandbox_2_C10_alkanes.xml" "..\Inputs\17-ala.xml" "..\Inputs\nanotube_langevin.xml" "..\Inputs\ANGLE\buckyball_angle_A_0.3.xml" "..\Inputs\ANGLE\buckyball_angle_A_1.7.xml" "..\Inputs\ANGLE\buckyball_angle_B_0.3.xml" "..\Inputs\ANGLE\buckyball_angle_B_1.7.xml"
If you want to record the session, add --trajectory "write-your-file-name-here.traj --state "write-your-file-name-here.state"
to the end of the above commands.
subtle-game
conda environment activated (as detailed below).y
and press Enter
on your keyboard to accept this username and continue, or alternatively press Enter
to generate a new username.IMPORTANT NOTE: both the VR client and python client are hardcoded to connect to a locally-running server called "SubtleGame". This will cause issues if you are on the same network as another person who is also running the game. If you want to change the server name, you need to change this in the VR client and the puppeteering client, and then type modify the --name
field in the server command.
git clone paste-repo-URL-here
.cd .\SubtleGame\
and run the following commands to update the NanoverUnityPlugin submodule:
git submodule sync
git submodule update --init --recursive --remote
The game is handled by a python script that is referred to as the 'puppeteering client' and can be found here: Client/puppeteering_client.py. To run this script you will first need to follow these instructions:
Install Conda through whichever program you prefer, e.g., Miniforge.
Open a Windows Powershell terminal (or whichever terminal you have conda installed in) and run the following commands to create a Conda environment called subtle-game
and activate that environment:
conda create -n subtle-game "python>3.11"
conda activate subtle-game
Navigate to the Subtle Game repo directory and install the required packages using pip:
pip install -r .\requirements.txt
This will install the following packages in your conda environment: Numpy, Random-Username, Knot-Pull, and pytz.
Install Nanover Protocol with conda:
conda install -c irl -c omnia -c conda-forge nanover-server
Open the SubtleGame
directory in your favourite Python IDE, select the subtle-game
conda environment as your python interpreter and set the SubtleGame
directory to be the root.
Add
button and select the Client/vr-client directory.Main
scene, which is found in Client/vr-client/Assets/Scenes.The game can be played on a Quest 2 or 3 headset using Quest Link or AirLink. You must configure the Oculus PC App settings:
Settings
-> General
and selecting Set Oculus as active
for the OpenXR Runtime option. If this option is not selected then you will receive the warning unable to start Oculus XR plugin
in the Unity console when you click play.Settings
-> Beta
. Toggle the button to enable Developer runtime features
and then toggle the option for Pass-through over oculus link
. This allows the game to use passthrough, where you can see your physical surroundings through the cameras on the VR headset. You must also configure the Oculus settings inside the headset to enable hand tracking:
Movement tracking
. Hand and body tracking
option and click Enable
.A NanoVer server is used to run the molecular simulations and stream data between clients. Each instance of a game needs its own server. To run a server, you can use either the command line or the GUI. You will need to load a minimum of four simulations:
nanotube_langevin.xml
17-ala.xml
sandbox_2_C10_alkanes.xml
buckyballs_angle_A_0.3.xml
and buckyballs_angle_A_1.7.xml
. IMPORTANT NOTE: you can load as many buckyball simulations as you want, but you must have a minimum of two: one with a multiplier of <1 and one with >1.The commands for running a server can be found in the Server directory in the server-commands.txt file.
To run a full game, which has 8 multipliers for the trials task: [0.3, 1.525, 1.75, 0.875, 1.125, 1.125, 1.375, 1.7]
.\nanover-cli.exe --name "SubtleGame" "..\Inputs\sandbox_2_C10_alkanes.xml" "..\Inputs\17-ala.xml" "..\Inputs\nanotube_langevin.xml" "..\Inputs\ANGLE\buckyball_angle_A_0.75.xml" "..\Inputs\ANGLE\buckyball_angle_A_0.625.xml" "..\Inputs\ANGLE\buckyball_angle_A_0.875.xml" "..\Inputs\ANGLE\buckyball_angle_A_1.7.xml" "..\Inputs\ANGLE\buckyball_angle_A_1.25.xml" "..\Inputs\ANGLE\buckyball_angle_A_1.125.xml" "..\Inputs\ANGLE\buckyball_angle_A_1.375.xml" "..\Inputs\ANGLE\buckyball_angle_B_0.3.xml" "..\Inputs\ANGLE\buckyball_angle_B_0.75.xml" "..\Inputs\ANGLE\buckyball_angle_B_0.625.xml" "..\Inputs\ANGLE\buckyball_angle_B_0.875.xml" "..\Inputs\ANGLE\buckyball_angle_B_1.7.xml" "..\Inputs\ANGLE\buckyball_angle_B_1.25.xml" "..\Inputs\ANGLE\buckyball_angle_B_1.125.xml" "..\Inputs\ANGLE\buckyball_angle_B_1.375.xml" "..\Inputs\ANGLE\buckyball_angle_A_0.3.xml"
To run a short game, which has only 2 multipliers for the trials task: [0.3, 1.7]:
.\nanover-cli.exe --name "SubtleGame" "..\Inputs\sandbox_2_C10_alkanes.xml" "..\Inputs\17-ala.xml" "..\Inputs\nanotube_langevin.xml" "..\Inputs\ANGLE\buckyball_angle_A_0.3.xml" "..\Inputs\ANGLE\buckyball_angle_A_1.7.xml" "..\Inputs\ANGLE\buckyball_angle_B_0.3.xml" "..\Inputs\ANGLE\buckyball_angle_B_1.7.xml
You are ready to play! Please head to the instructions for running a game.