This is a mod for Play Club that introduces VR capabilities for both the Vive and the Oculus Rift using OpenVR. It provides both a seated and a standing mode to be usable in any environment.
Caution: SteamVR needs to be installed, set up, and running! Rift users might otherwise experience a weird "monitor" effect.
PlayClubVR comes in two modes:
Mode | Description |
---|---|
Seated | Default mode. This mode lets you play the game with a mouse, keyboard, or gamepad. The controls are essentially the same as in the main game. The screen is presented on a big monitor in front of you. |
Standing | As soon as tracked controllers are registered by the game, it switches into standing mode, also called room scale mode. In this mode, you can freely move around and use your Vive or Touch controllers to do cool stuff. |
As stated earlier, the controls are basically the same as in the main game with the exception of a few VR-related shortcuts. You are presented with a screen in front of your that replaces your monitor and can be configured via the settings or via shortcuts (see below).
Keys | Effect |
---|---|
Ctrl+C, Ctrl+C | Change to standing mode. |
Ctrl+C, Ctrl+V | Enable (very experimental) third person camera. Was used for this video. |
Alt+S | Save settings (IPD, screen position, etc.). |
Alt+L | Load settings (last saved state). |
Ctrl+Alt+L | Reset settings to the initial state. |
F4 | Switch GUI projection mode (flat, curved, spherical). |
F5 | Toggle camera lock (enabled by default). This prevents the camera to tilt because such movements are known to cause cyber sickness. |
Ctrl+F5 | Apply shaders (only for the brave) |
F12 | Recenter |
Ctrl+X | Impersonate protagonist. Places the camera at the head position of the protagonist and moves along a little. |
Ctrl+Shift+X | Impersonate protagonist. Places the camera at the head position of the protagonist and imitates all head movements. |
NumPad + NumPad – |
Move GUI up / down. |
Ctrl+Shift+NumPad + Ctrl+Shift+NumPad – |
Move GUI left / right |
Ctrl+NumPad + Ctrl+NumPad – |
Increase / decrease GUI size. |
Alt+NumPad + Alt+NumPad – |
Increase / decrease player scale |
Shift+NumPad + Shift+NumPad – |
Increase / decrease GUI distance |
This mod comes with a plugin that enables XInput devices to work with Play Club. Actually, you can also use most of these key bindings in the game without VR!
If you don't know what those buttons mean, take a look at this image.
Buttons | Effect |
---|---|
Move LS | Control cursor |
Move RS | Rotate & zoom |
LT+Move LS | Pan left/right, up/down |
LT+Move RS | Rotate camera |
RT+Move LS | Pan left/right, foward/backward |
RT+Move RS | Rotate camera |
A | Left click |
B | Right click |
X | Toggle "grind" animation |
Y | Toggle "piston" animation |
Start | Toggle GUI |
DPad Up / DPad Down | Change animation speed |
DPad Left / DPad Right | Change position (prev / next) |
Press RS | Come inside |
Press LS | Come outside |
LB+LS Horizontally | Move GUI left / right |
LB+LS Vertically | Move GUI up / down |
LB+RS Horizontally | Change GUI distance |
LB+RS Vertically | Change GUI width |
LB+DPad Up / LB+DPad Down | Change player scale |
LB+Y | Impersonate protatonist |
LB+Start | Reset camera |
The standing mode is where things start to get interesting. This mode is pretty much disconnected from the usual game in that it comes with its very own controls -- although you can still use your mouse and your keyboard.
Keys | Effect |
---|---|
Ctrl+C, Ctrl+C | Change to s mode. |
Ctrl+C, Ctrl+V | Enable (very experimental) third person camera. Was used for this video. |
Alt+S | Save settings (IPD, screen position, etc.). |
Alt+L | Load settings (last saved state). |
Ctrl+Alt+L | Reset settings to the initial state. |
Ctrl+F5 | Apply shaders (only for the brave) |
Alt+NumPad + Alt+NumPad – |
Increase / decrease player scale |
Impersonating someone is as easy as moving at the position of that character's head. The head will disappear and you can pretend to be him / her. By setting <FullImpersonation>
you can even control their hands!
Interacting is currently only possible either with the conductor tool (which lets you move around the limbs of characters), or by touching the breasts, hair or skirts of girls. They will then start to wiggle more or less realistically, but it can be fun.
PlayClubVR comes with speech recognition, based on Windows built-in speech recognition system. Therefore, any language can be used as long as you have the right language pack installed.
In order to get the speech recognition working, you need to install the appropriate language pack. Chances are that it's already installed, but to make sure follow these steps (on Windows 10):
When you start the game and speech recognition is enabled, it will generate a dictionary file at UserData/dictionaries/{Locale}.txt that you can edit. (Locale can be set in vr_settings.xml)
The file is built up like so:
[Command1]
Text 1
Text 2
...
[Command2]
Text 3
Text 4
The commands are used by the game to do things like scaling the camera or controlling the animation. The texts are what you have to say to activate the commands.
These tools are mainly meant to be used in standing mode but some of them are also available in seated mode. By default, your left hand will start with the menu tool and your right hand will start with the warp tool. In order to change them on either hand, press the menu button on your Vive controller. See here an overview of buttons.
You can get in-game help any time by holding the menu button!
With the menu tool you can interact with the user interface of the game. There are, in fact, two ways you can control the mouse: a two-handed way that makes use of a laser pointer, and a one-handed way that lets you use your trackpad like a ... touchpad!
To use the laser pointer, simply point the other controller at the menu screen. A laser pointer will appear and you can easily interact with the UI. To make a click, press the trigger button.
To use the trackpad, slide with your thumb over the trackpad and the mouse cursor will move accordingly. To make a click, press the trackpad.
It's possible to detach and resize the menu you're holding at any point in the game.
Simply press the grip button to "let go" of the menu screen -- the screen will then stay put where you left it. You can even use other tools and still interact with the screen using the laser pointer mechanism.
Furthermore, it's possible to resize the screen. In order to do that, point both your controllers at a screen, press the trigger button, and move the controllers apart. It's also possible to move the screen around like this.
Lastly, to take control of the screen again, press the grip button once more.
The warp tool is only available in room scale mode and allows you to jump around in the scene.
In order to warp, touch the center of the trackpad, choose your position and press. While touching the trackpad you are able to see:
You can also rotate your play area while touching the trackpad by drawing circles with your thumb.
With this tool it's also possible to jump to the position of the protagonist: it's as easy as pressing the trigger button.
However, this will only change your position along the ground plane and not adjust your height! If you are too lazy to move into the right position in real life, hold the trigger and your height will also be adjusted.
It's also possible to change scale and height with this tool, although it's a bit cumbersome at the moment. To do this, hold the trackpad pressed before warping. You can now change your future height by moving the Vive controller up and down and your scale by moving back and forth. Note that you can only change one of those two each time.
By pressing the grip button you can reset the scale and height.
An alternative way to move your position is "grabbing." Just hold the grip button and move the controller around to move in the opposite direction. At any time, you can rotate your view by pressing the left or right side of your trackpad.
This also works in conjunction with warping. To get back to ground level, press the grip button once to reset your play area and warp somewhere.
Note: Grabbing is activated if A) you hold the grip button for more than 0.5s or B) you move your controller for more than 3cm. This is to discern between resetting and grabbing.
The play tool is used to interact with the scene.
Button | Effect |
---|---|
Trackpad up | Start the action (piston movement) |
Trackpad down | Start the action (grind movement) |
Trackpad left | Previous position |
Trackpad right | Next position |
Grip | Finish |
You can also change the speed of the animation. In order to do this, touch the center of the trackpad and slide your thumb up or down.
Caution: Requires Maestro Mode to work in the main game!
The conductor tool lets you pose the guys and gals. The tool works differently in the main game and the studio.
The tool is basically a wrapper around the built-in FK/IK functionality. When you switch to this tool, it will be deactivated at first (indicated by a "-" sign). In this state, you can only move the characters as a whole.
In order to show the handles and move the limbs, activate the tool via the grip button. Press the trackpad to switch between IK and FK modes.
To interact with the handles, simply grab them using the trigger button. You do not need to hover over them exactly! The tool will automatically detect the nearest handle and take control of it!
In the main game you can use this tool if you install the Maestro Mode plugin.
Press the trackpad to toggle Maestro Mode on or off. When it's on, you should see blocks and spheres inside the body of your girl. In order to move them around, simply grab them with the trigger button. You can also reset their position by pressing the grip button.
Caution: For this to work, you mustn't reconfigure the key bindings of Maestro Mode!
Leap Motion is somewhat supported by PlayClubVR. To enable this feature, set <Leap>
to True
in your vr_settings.xml.
When the game detects your hands, it will automatically change into room scale mode, so make sure to set up your room correctly.
It is possible to use the menu with your hands. Simply pinch your fingers and pull in different directions to draw the interface. To hide it, just keep the area small and it will disappear.
Use your index finger to control the mouse cursor.
The system is not yet complete, but you can more or less jump around like so:
Your play area should now appear. Keep your hand like this and move it around until you found a good position.
Settings can be changed in the file vr_settings.xml, which is generated the first time you start the game. Use RenderScale
to tweak the resolution, not the internal resolution dialog, as that one will currently only change the resolution of the GUI.
Tag | Default | Effect | Mode |
---|---|---|---|
<Distance> |
0.3 | Sets the distance between the camera and the GUI at [0,0,0] . |
Seated |
<Angle> |
170 | Sets the width of the arc the GUI takes up. | Seated |
<IPDScale> |
1 | Sets the scale of the camera. The higher, the more gigantic the player is. | Seated / Standing |
<OffsetY> |
0 | Sets the vertical offset of the GUI in meters. | Seated |
<Rotation> |
0 | Sets by how many degrees the GUI is rotated (around the y / up axis) | Seated |
<Rumble> |
True | Sets whether or not rumble is activated. | Seated / Standing |
<RenderScale> |
1 | Sets the render scale of the renderer. Increase for better quality but less performance, decrease for more performance but poor quality. | Seated / Standing |
<MirrorScreen> |
False | Sets whether or not the view should be mirrored in the game window. | Seated / Standing |
<FullImpersonation> |
False | Sets whether or not you should take control over the character's hands whenever you impersonate someone. | Standing |
<PitchLock> |
True | Sets whether or not rotating around the horizontal axis is allowed. | Seated |
<Projection> |
Curved | Sets the projection mode of the monitor in seated mode. (Flat / Curved / Spherical) | Seated |
<SpeechRecognition> |
False | Sets whether or not speech recognition is enabled. | Seated / Standing |
<Locale> |
en-US | Sets which locale is used for speech recognition. | Seated / Standing |
<Leap> |
False | Sets whether or not Leap Motion support is activated. | Seated / Standing |
<AutoLookAtMe> |
True | Sets whether or not the girls should look at you by default | Seated / Standing |
The mod writes all its log output to a file called vr.log
. In order to display the log at runtime, you can either start PlayClubVR.exe (which, incidentally, is really just this) with the "--verbose" argument or drop the debug plugin into your plugins folder.
PlayClubVR depends on the VRGIN library which is included as a submodule. It is therefore important that when you clone the project, you clone it recursively.
git clone --recursive https://github.com/Eusth/PlayClubVR.git
cd PlayClubVR
After cloning the repo and setting up the submodule, you should be able to compile the project by simply opening the *.sln file with Visual Studio and building.
Note that there is a build configuration called "Install" that will extract your Play Club install directory from the registry and copy the files where they belong.
Once you have set up your workspace, you can start coding away. The PlayClubVR project only contains the PlayClub-specific code, like the play tool and the boilerplate code. The actual framework code can be found in the VRGIN project.
Your first point of interest will be PlayClubVR.cs
, which sets the stage for VR.
var manager = VRManager.Create<PlayClubInterpreter>(new PlayClubContext());
manager.SetMode<PlayClubSeatedMode>();
This snippet shows the four central components utilized in the mod.
Class | Lifetime | Purpose |
---|---|---|
VRManager |
Application | Holds everything together and takes care of the camera generation and mode switching. |
PlayClubInterpeter |
Application | Implements a few game specific methods that are needed by the VRGIN library. For example, finds the actors. |
PlayClubContext |
Application | Simple data holder with a number of configurations, like materials, layers, colors, etc. |
PlayClubSeatedMode |
Mode | The initial mode to start in. Modes contain the actual VR game logic. |
VRGIN.Controls
namespace.VRGIN.Core.VRCamera
.VRGIN.Core.VRGUI
and is rendered by VRGIN.Visuals.GUIQuad
and VRGIN.Visuals.GUIMonitor
(curved).VRGIN.Helpers.UnityHelper
has a few useful methods for debugging purposes. Also, use the Ctrl+C, Ctrl+D shortcut to dump the entire scene to dump.json
.Tool
subclass and add it to PlayClubStandingMode#Tools
.CreateShortcuts()
method in the mode where you want it.