Nov 1, 2019

Levels of Room Motion Intensity

For my Steam Curator VR Motion, I have had difficulty expressing the different kinds of Room Motion a game can have within the limited amount of text space available when posting a review. I've been toying around with the idea of different levels of intensity in Room Motion. For me, as the levels increase, the symptoms become more severe, and the less amount of time I can play the game.

If you play VR games, I am interested in feedback regarding these intensity levels. Is there a higher level that your mind can tolerate better than a lower level of Room Motion? Is there something not listed that you think should be? I’d love to hear your input!

Levels of Room Motion Intensity


Level 0: No Room Motion


If the player needs to move to a different location in the game, a translocation device or some sort is used. A common method of this is a “teleport here” selection, with either no travel time between the locations or a short fade to a solid color and fade back transition.
The game Budget Cuts has a neat way of handling this non-locomotion translocation action.

Some games will use an animated zoom effect between two teleported locations to help players understand visually where they are traveling. These usually have comfort blinders that reduce the view to a window for where the player is going. I consider these to be level 1.

Level 1: Basic player Enacted Locomotion


Traveling using a joystick, touchpad, or button press with the controller facing the direction of travel are common actions. There are requirements that when input from the player stops, the movement stops as well. This level allows for deviations in turning (yaw only), but not in roll (falling over), or pitch (walking up a wall). An example would be Rec Room’s default movement option “walkers.”

Level 2: Advanced Player Enacted Locomotion


Much like level 1, but after the player input ends an understandably expected direction of travel continues, such as traveling by vehicle or by maintained momentum. Jet Island is an example of a game that does this.

Level 3: Uncontrolled Locomotion Events Outside of the Player’s Direct Control


These uncontrolled events cause movement of the player’s POV (Point of View), but can reasonably be expected by the player. i.e. a user pushing their head into a wall, and their position is virtually held inside the room. Riding a roller coaster while being able to see the track, or at least having an idea of where the vehicle being ridden is taking you. A player’s room position deciding if they should fall down a cliff ledge.

Level 4: Space like player enacted locomotion


Like level 2, but allows pitch and roll room rotations as well. Generally, this only occurs in zero gravity space like simulations.

Level 5: Uncontrolled unexpected locomotion


Events outside of the player’s direct control causes movement of the player’s POV. An unseen NPC shoving the player around. A vehicle the player doesn’t control moving them. An otherwise level 0 game that has a trigger that pushes the user to a new location.


Comfort Options


A+: The developers display a clear understanding of Room Motion mitigation options, with options to provide additional room presence, reduce player vision during Room Motion, or remove Room Motion entirely by providing alternate control options.
A: Comfort options are available for the majority of primary gameplay. Room Motion unmitigated sections may exist.
B: Comfort options exist, but large sections of primary gameplay still has unmitigated Room Motion.
F: No comfort options available, and are needed for primary gameplay.

Games I've Reviewed for Room Motion


Check out my Steam Currator VR Motion to see games a list of VR games that have Room Motion, and what kinds of Room Motion they have.

Jul 22, 2019

Pathery Map Generator

This blog post is a help document for Pathery's Map Editor's Map Generator. This document assumes you already know how to use the editor before it had BlockCode. At time of writing, the feature isn't released yet.

6.6.5.Testmap...:2,y1.,y1.2,s1.1,y1.,y1.4,y2.,y2.1,f1.2,y2.,y2.2,y12.,y1.,r1.,y21.,y12.,y21.,y13.,y2.,r1.,y21.
The above is an example of Pathery BlockCode. The upper four rows in this example are the base map, declaring a few start locations, an end, and two selector groups. The lower three rows is the block code that manipulates the map for a desired generator outcome. An example outcome of this generator is:


Lets dive into this one line at a time.

ReplacePoint 1 Rock EndOfLine
ReplacePoint [FromBlock{1}] [ToBlock{1 or more}] EndOfLine
The ReplacePoint Command looks for blocks matching the FromBlock type, and randomly replaces them with the ToBlocks. In the example above, the top right 1 selector was replaced with a rock.

(Note to self: Known bug: If a user attempts to place out more blocks then their selector FromBlock has spaces for, the page will bug out due to extra text provided in the AJAX return.)

Fill 2 Rock EndOfLine
Fill [FromBlock{1}] [ToBlock{1}] EndOfLine
The Fill Command looks for blocks matching the FromBlock type, and replaces all of them with the ToBlock's type. In the example above, the six lower rocks are from this fill command.

Empty EndOfLine
Areas without commands are fine. Above these two blocks is an example of empty space existing before a command block. If non-BlockCodes are provided before a command, they will be ignored.

ReplacePoint Start Void Void Void EndOfLine
ReplacePoint [FromBlock{1}] [ToBlock{1 or more}] EndOfLine
FromBlocks are allowed to be any map placeable block (all standard blocks and the selector BlockCode. In the above example, three of the start locations were replaced with void spots.



SurroundPoint 1 Rock EndOfLine
SurroundPoint [FromBlock{1}] [ToBlock{1}] EndOfLine
The Surround Point Command select a random FromBlock and places it's ToBlock type in the four orthogonal directions. This will replace whatever block is on those squares, pre-existing or placed by BlockCode earlier. Blocks to be placed that would be off the map are ignored instead.

(Note to self: Known bug: If a user attempts to use a FromBlock that doesn't exist, the page will bug out due to extra text provided in the AJAX return.)
The last component you need to know to create the majority of maps on Pathery is the OR and Percent BlockCode. The following image and BlockCode is an idea from 是我人 to combine both Normal and Complex into a single map. This includes OR blocks, which are equal chance options of multiple command blocks, as well as percent chance sections appearing after the last ToBlock of a command set, which gives a chance that a given command set won't fire. This also has dynamic waypoints, allowing the 1 section to have 1 or 2 waypoints, allowing the 2 section be the next waypoint (either B or C), then 3 to 5 more waypoints after that, correctly selected starting at C or D based on the previous rolls.

(Note to self: Fix wall count so that it works, allow it to softly fail, document it.)

(Note to self: Document how to view the soft errors via JS's console view, or code it into the UI to naturally view it. Document Multi ORs. Document Last % and NotLast %. Make icons for these two.)

(clicky for big)

19.39.33.NormalAndComplex...:,s1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,t1.,y2.,r3.,s1.1,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,t1.,y2.,r3.,s1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,t1.,y2.,r3.,s1.1,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,t1.,y2.,r3.,s1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,t1.,y2.,r3.,s1.1,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,t1.,y2.,r3.,s1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,t1.,y2.,r3.,s1.1,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,t1.,y2.,r3.,s1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,y1.,t1.,y2.,r3.,r3.,r3.,r3.,r3.,r3.,r3.,r3.,r3.,r3.,r3.,r3.,r3.,r3.,r3.,r3.,r3.,r3.,r3.,r3.,u1.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.1,f1.,u1.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,f1.,u1.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.1,f1.,u1.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,f1.,u1.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.1,f1.,u1.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,f1.,u1.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.1,f1.,u1.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,f1.,u1.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.,y3.1,f1.,y19.,y19.,y19.,y19.,y19.,y19.,y19.,y19.,y19.,y19.,y19.,y19.,y19.,y19.,y19.,y19.,y19.,y19.,y19.,y12.,y1.,y15.,y17.,y12.,y1.,y15.,y15.,y21.10,y12.,y2.,y15.,y16.,y16.,y16.,y16.,y16.,y16.,y16.,y16.,y21.7,y12.,y3.,y16.,y15.,y15.,y17.,y12.,y3.,y16.,y15.,y15.,y17.,y12.,y3.,y16.,y15.,y15.,y15.,y17.,y12.,y3.,y16.,y15.,y15.,y15.,y15.,y21.11,y12.,y1.,r1.,r1.,r1.,r1.,r1.,r1.,r1.,r1.,y21.,y12.,r1.,r1.,y18.,y8.,y10.,y21.1,y12.,y1.,r1.,r1.,y18.,y6.,y10.,y21.,y12.,y1.,r1.,r1.,y18.,y4.,y10.,y21.3,y12.,y1.,r1.,r1.,y18.,y2.,y10.,y21.11,y12.,y3.,r1.,r1.,r1.,r1.,t3.,u3.,r1.,y21.,y12.,y3.,t4.,u4.,y18.,y3.,y3.,y21.1,y12.,y3.,r1.,r1.,r1.,y18.,y8.,y10.,y21.2,y12.,y1.,z5.,z5.,y18.,y3.,y21.1,y12.,y3.,r1.,r1.,r1.,y18.,y6.,y10.,y21.2,y12.,y1.,t2.,u2.,y18.,y3.,y21.1,y12.,y3.,r1.,r1.,r1.,y18.,y4.,y10.,y21.10,y12.,y3.,r1.,r1.,r1.,y18.,y2.,y10.,y21.10,y12.,y3.,z5.,z5.,y18.,y8.,y10.,y21.11,y12.,y3.,z5.,z5.,z5.,y18.,y2.,y10.,y21.10,y12.,y3.,z5.,z5.,z5.,y18.,y2.,y10.,y21.10,y12.,y3.,z5.,z5.,z5.,z5.,y18.,y1.,y10.,y21.9,y12.,s1.,r3.,r3.,r3.,r3.,r3.,r3.,r3.,r3.,y21.8,y11.,y1.,y5.,y19.,y2.,y2.,y21.12,y11.,y1.,y1.,y19.,y1.,y1.,y21.


[ToAdd: SurroundBlock, OR blocks, Percent block]

Jun 12, 2019

2d10 + the absolute difference between the two dice

I pondered what 2d10 + the absolute difference between the two of them would be. After thinking though a few of the rolls, I realized that 3 isn't a possible outcome. The lowest roll would be 2, at a 1% chance (two back to back 10% chances). The max roll was from either 10 10 or 1 10.

Typed it up into Anydice.
function: sum plus difference of A:n and B:n {
    C: [absolute A - B]
    result: A + B + C
}

output [highest 1 of 2d20]
output [sum plus difference of d10 and d10]


Turns out, it is really similar to having advantage in DnD 5e, aka Higher 1 of 2d20 (image is the same graph as above, with "at most" selected). If on the advantage though, you "rounded up" odds to evens, it is the same.

I had hoped that this would have resulted in an upper bell curve, seen below in green. Blue is the standard 3d6 bell curve for comparison.

Dec 24, 2017

VR Room Motion Curator: Detached

All of the Room Motion. Six degrees of motion controller input for facing direction and movement. Trailer suggest non-player controlled movement events will occur too.

Each launch, there was a popup error message on my desktop that needed clicked "Ok" for to allow the game to launch. The initial location of the opening menu always put my head inside of the selections. On the left (invisible) controller, hitting down on the touch pad reset the room's position. Game didn't tell me this.

Dec 22, 2017

VR Room Motion Curator: OrbusVR

Paraphrased From Developer Daynab: By default we use the teleporting movement standard like many VR games, but you can opt to turn on sliding locomotion (with a few different settings for camera orientation). So you can pick which of the two types of movement you want. There is an airship you can go on to travel between cities. Traveling via the airship is peaceful, requiring minimal attention for when you need to get off.

Dec 15, 2017

SUPERHOT Multi Profile Manager

SUPERHOT is a fun game, but it is designed such that sharing the true experience from start to finish with others is not possible. The game is intentionally designed to have a single user profile to ever exist. Due to it's story, this makes sense.

I still wanted to share the full experience (perhaps sans-achievements) with friends, so I created a tool that renames the game saves of both SUPERHOT and SUPERHOT VR to allow additional users to enjoy the game. If the game is running while you attempt to alter the game saves, it will refuse. I imagine if I allowed that, overwrites of game saves and loss of progress would be likely. If you find this tool useful, let me know on twitter @memoryleaked

SUPERHOT Multi Profile Manager download link

Please inform me of any bugs you find. I can't fix what I don't know about.

This works on my Win7 machine. I don't have other OS'es to test this on. I haven't tested this when the user only owns one of SUPERHOT or SUPERHOT VR. It should be fine.

Dec 11, 2017

VR Room Motion Curator: RuneSage

Starts with float logo that follows the face without any other indicator of where the room is.

Adjusts player's height based on where your head is over different terrain. For example, as you move around in RL while on VR stairs, your view height changes. Avoidable by not moving around while on ramp surfaces. If you move your head over a stool, view point fades out and back in at new height. Teleporting is a mechanic in which the player isn't shown the movement from one point to another, and instead their viewpoint instantly moves the the new spot, or the view fades out then back after a short duration in at the new location.

Zoom Teleporting is when the user is shown their teleport movement over a short period of time, zooming to their new location. Wall walking occurs when the player attempts to stick their head though a VR wall. This game teleports the player unexpectly away from the wall they were about to wall walk past.

Intended to be No Room Motion, but fails on a few points. Floaty Logo, Forced player height while RL walking, unexpected teleport on wall walk attempts. Usually uses teleporting, but sometimes fails to fade the viewpoint and shows the player's zoom teleport.

Store Link