iPowerTech/cyberpunk-vr-port

cyberpunk2077 VR Port

25

stars

70

commits

Lua

primary language

Sep 9, 2026

updated

README

CyberpunkVR Port

What's New in v0.1.6-beta2

πŸ–οΈ Reach Out and Touch Night City

Your hands now decide what the game is looking at.

New Features

  • Point with your hand, not your head. The prompt, the scanner target and the look-at object all follow a ray that leaves your palm β€” so you can open a door while looking somewhere else.
  • Either hand works, and you never pick one. The ray alternates between your hands until one of them finds something, then stays with it. Move off and the other hand takes over instantly.
  • Touch to interact. Lay a hand on a terminal, an elevator panel or a car door and it answers β€” no wrist twisting, no pushing your fingers through the screen. Items are taken by reaching for them and squeezing the grip.
  • Jump by miming a hop. Both hands flick up from your belly to your shoulders and you jump. No thumb leaves a stick.
  • Physical crouch. Bend your knees in the room and V crouches; stand and V stands. Adjustable depth, and it measures your neck rather than your eyes, so looking down at your feet is not a squat.
  • Swap X and A. Interact and reload move onto the right thumb, so reloading in a firefight no longer costs you the movement stick. Jump moves to the left hand, where the hop gesture makes it optional anyway.
  • Haptics. Your controllers now answer on the four things the picture cannot say: the hand that takes an object, a panel actually pressing, the horn, and every round fired β€” in both hands when you are holding the gun with two.

Everything above is a switch in the F10 overlay, Controls tab. Hand pointing, the hop and the X/A swap ship on; physical crouch ships off, because it only reads right if you recentered standing up.

Fixes in this release

  • Braindances no longer re-enter themselves in a loop after you leave one.
  • The first object of a session responds β€” the reach gesture used to be dead until you had interacted with something once.
  • Elevator panels and terminals can be reached at all: the proximity test was returning garbage on every frame.
  • With physical body rotation on, your hands no longer turn twice with the car while steering.
  • The view no longer jumps back and forth during braindances.
  • With a weapon drawn, the left-hand ray no longer points behind you.

A 6-DoF VR mod for Cyberpunk 2077, built as a RED4ext plugin - CyberpunkVR_Stereo is the ONLY native plugin: it drives OpenXR head tracking, real stereo, the in-headset overlay and the full-body VR avatar with motion-controlled hands that used to live in a second DLL; and a set of CET / redscript mods add VR weapon aiming, the physical reload, motion melee, hand-to-holster equipping and more. Everything is configured from an in-headset F10 overlay.

Motion-controller vehicle driving demo: https://youtu.be/WKH7KeZjmx0

Repository: https://github.com/iPowerTech/cyberpunk-vr-port

⚠️ Experimental community mod. Not affiliated with CD PROJEKT RED. Use at your own risk and keep backups of your saves.

Credits

This port is developed by iPowerTech β€” VR driving, the hand interaction system, the physical reload, the body and gesture work, and the releases you install.

It builds on the original cyberpunk-vr-port by dariulone, which this repository is forked from and still merges from. Everything that came from upstream is credited there.

Features

  • Real stereo, not reprojection. The second eye is an actual engine view β€” a render-to-texture camera on the player entity that runs the frame graph for its own eye, from its own position, with its own projection. It falls back to mono automatically whenever that view has nothing fresh to give (menus, loading).
  • OpenXR head tracking injected into the REDengine render path, with the submitted frustum matching the one the engine actually rendered on both axes, plus world-scale / IPD controls. Off-axis lenses (Quest 3 and family) get a frustum sized to COVER the panel rather than match its span, so there is no black band down the outer edge.
  • The game HUD in both eyes β€” the engine's own HUD composite is ported shader-for-shader for the second eye. By default it is pasted at the same PIXEL in both eyes so markers land in the same place; the finite-distance placement is still there behind one setting, because wide-FOV headsets want it.
  • The F10 overlay in both eyes, so a settings panel no longer costs you stereo the way a full-screen game menu does.
  • The two views agree. Sun cascade shadows, the shader clock, the foliage wind volume and the reflection march are all shared engine structures that the second view used to rebuild from its own frustum β€” which is where blinking shadows, dead flags, jittering vegetation and a mirror-finish ceiling came from. All four are lent from one view now.
  • Full-body VR avatar (VRIK) β€” body under the HMD, arm-length calibration, leg IK, real-life squat. Hands are with the controllers, the shoulder girdle and elbows hang off the BODY rather than the head, and the solve is clocked by the engine's own animation batch. VRIK suspends itself during cutscenes so the avatar does not fight an authored scene.
  • Physical body rotation (optional) β€” the character turns to follow the headset through the engine's own heading channel, so the mesh, the collision capsule, the aim and the movement direction all move with it. The view does not move and the hands stay on the controllers.
  • Physical crouch (optional) β€” bend your knees in the room and the character crouches; stand and it stands. It measures the NECK rather than the eyes, so looking down at your feet is not a squat, and how far you must drop is a slider (0.30 m by default, released at 60% of it so the crouch cannot flicker). Off by default, because a head height only means "crouching" if you recentred standing up β€” played seated, leaning toward the desk is the same movement.
  • The physical reload. Grab the magazine with your free hand's grip, pull it out along the path the weapon's own well defines, carry it, push it home; rack the slide with the other palm and release it with the right stick click. Ammo and sound follow the hands, not a timeline. Thirteen weapons are tuned individually β€” Unity, Tamayura, Tsunami Nue, Constitutional Liberty, Arasaka Kenshin, Militech Lexington, Militech Omaha, Kang Tao Chao, Tsunami Kappa, Arasaka Yukimura, Militech Ticon, Silverhand's Malorian, and the Malorian Overture revolver, which rolls its cylinder, ejects its cases and reloads from a real speedloader.
  • Decoupled VR weapon aim β€” bullets follow the real weapon muzzle, not the camera. The hit is redirected inside the engine's own PhysicalRay evaluator, so shotgun spread stays spread and every other shooter in the world keeps firing from their own barrel. Optional barrel dot in both eyes, scope-zoom aware.
  • Recoil in the hands, not the camera β€” the shot turns the wrist on a damped spring, and every weapon kicks by its own measured amount.
  • A resting hand and a real two-handed hold β€” with a weapon out the empty hand relaxes instead of clawing at nothing, and bringing it to the weapon offers the support grip: squeeze and the wrist locks on, the off hand steers the aim, and the kick drops. Twelve weapons have a captured hold.
  • Collimated reflex sights β€” the reticle is placed by angle along the sight's own optical axis, so it stays on the bore instead of sliding across the glass when you look at the sight from the side.
  • VR motion melee β€” real swings trigger the game's native melee along the blade (native damage/reaction/stamina).
  • Hand-to-holster equip/unequip on a grip squeeze β€” immersive (by visual holster) or simple (fixed weapon slots).
  • VR smoking β€” cigarette and lighter as real props, with a captured finger grip, a hands-free mouth anchor and the game's own FX and audio.
  • VR controller mapping merged into XInput: one movement speed whatever the stick deflection, sprint on a held detent, dash and crouch on the right stick, the scanner as a one-hand gesture, snap or smooth turn, HMD/hand-relative locomotion, and a D-pad chord. See Controls below.
  • The hand chooses what the game is looking at. The engine builds every "what am I looking at" answer β€” the interaction prompt and its choices, the scanner target, the look-at object scripts read β€” from a single ray, and that ray now leaves the PALM instead of the camera. Point at a door and it is the door that is offered, wherever your head happens to be. Either hand, with nothing to configure: the ray alternates between them until one finds something, then stays with that hand until it points at nothing again β€” so the first hand to acquire wins and the other takes over the moment you reach with it. With a weapon drawn it is the free hand; with both hands on the gun, or while driving, no hand points and the head has it back.
  • Reach out and take it. With an interaction already offered, putting a hand on the thing and squeezing the grip presses it. Devices press themselves: a palm laid on a terminal, an elevator panel or a car door is enough, held long enough for the game's hold bindings. The contact point is where the engine's own look-at ray lands, pulled 6 cm toward your hand β€” so a panel answers when the hand looks like it has arrived, without pushing fingers through it. That point has to belong to the object the game is offering, and a device that has pressed itself stays pressed until the hand LEAVES it rather than until the object changes: a braindance rebuilds its shard case with a fresh entity id on every exit, which used to read as a new object under a hand that had not moved and re-entered the braindance forever.
  • Jump by miming a hop (optional) β€” both hands flick up together from about the belly to the shoulders, in one unbroken movement, and the character jumps. No thumb leaves a stick for it, which is what pays for the X/A swap (optional too): interact and reload move onto the right thumb, so reloading under fire no longer costs you the movement stick. Menus keep A as Confirm and vehicles are untouched.
  • Haptics on the four things you cannot see. A light tap on the hand that takes an object, a firmer one when a touch panel actually fires, one on the hand that sounds the horn, and every round in the hand that fired it β€” both hands when the support grip is on the gun, weaker on the forestock, because it is the same shot arriving through the other arm.
  • VR driving β€” squeeze a grip with your hand where the driving animation holds the wheel and that arm is handed back to the animation; the tilt of the line through your controllers is the steering, one-handed or two, with adjustable deadzone and lock angle. A hand on the hub sounds the horn, and drawing a weapon turns the right trigger into the gun while the throttle latches so the car keeps rolling.
  • World-map head-lock β€” DLSS/NGX handling (the second view gets its own upscaler viewport automatically).
  • 13 headsets, 60 resolutions, every ladder reaching 6000 px, picked before launch β€” PlayStation VR2 and the Bigscreen Beyond 2/2e included.
  • HUD placement is HUDitor, which moves and scales each widget individually. The port shipped its own HUD mod until 2026-08-20 and it is gone: it scaled the shared HUD root around screen centre, which is too blunt to be comfortable and actively fights a real HUD editor. What the port still does for the HUD is the part only it can do -- compositing the engine's own HUD into the SECOND eye. The port's own HUDitor setup -- the editor moved to F11, plus a VR-tuned layout for all 26 widgets -- is saved in mods\config\huditor\, opt-in rather than installed for you.
  • The cascade shadow rows are hidden from Graphics β†’ Advanced. The atlas is shared between the two views, so raising them gives you artefacts the port cannot fix from its side.
  • In-headset F10 overlay with tabbed, live, persisted settings.
  • SteamVR (OpenVR) runtime supported alongside OpenXR; pre-launch resolution selector; quiet-by-default logging with a DEBUG toggle in the launcher.

Requirements

  • Cyberpunk 2077 (PC, 2.31).
  • Cyber Engine Tweaks
  • RED4ext
  • ArchiveXL
  • TweakXL
  • redscript
  • Codeware (1.20 or newer β€” older builds fail script compilation)
  • Visual Holsters (Automatic Clothes Swap)
  • Visible Bullets (Projectile Restoration)
  • Equipment-EX
  • Nova Optics
  • Input Loader
  • HUDitor

Recommended but not required: HUDitor, Visible Bullets, for HUD placement β€” the port ships a VR-tuned layout for it in mods\config\huditor\ and no longer moves HUD widgets itself.

Install RED4ext, CET and redscript first (the usual Nexus dependencies).

Installation (drop-in)

Download the release archive and extract its contents into your Cyberpunk 2077 game root (the folder that contains bin\, r6\, red4ext\). The files land as:

red4ext\plugins\CyberpunkVR_Stereo\CyberpunkVR_Stereo.dll     # the VR plugin: OpenXR, stereo, overlay, VRIK
red4ext\plugins\CyberpunkVR_Stereo\CyberpunkVR_Sight*.dxil    # sight shaders, loaded by name at PSO swap
                                                              # NOTE: CyberpunkVR_Hands.dll is GONE -- its
                                                              # code is inside CyberpunkVR_Stereo.dll now.
                                                              # An old copy left in red4ext\plugins makes
                                                              # two plugins detour one address, which
                                                              # crashes with a fault at FFFFFFFFFFFFFFFF.
archive\pc\mod\cyberpunkvrport.archive                        # held props, weapon assets, the VRCAM cameras
archive\pc\mod\VRCigarette.archive.xl, vrport_basketball...   # the smoking and basketball props
bin\x64\plugins\cyber_engine_tweaks\mods\CyberpunkVRPort_*\   # CET mods -- see the table below
r6\scripts\CyberpunkVRPort_*\                                 # redscript mods -- see the table below
r6\input\HUDitor.xml, r6\config\...                           # the HUDitor binding and the port's config

Then start your OpenXR runtime first, and launch the game.

There is no dxgi.dll any more β€” this is a RED4ext plugin. Anything else that proxies dxgi (R.E.A.L. VR, for one) must be out of bin\x64 or the two fight over the same engine hooks; scripts\deploy_stereo.ps1 moves one aside for you.

Keep only one .dll in each red4ext\plugins\CyberpunkVR_* folder. RED4ext loads every DLL it finds there, so a renamed backup beside the real build loads as a second copy of the plugin and the two fight over the same hooks.

From a source tree, install with:

cmake --build build --config Release --target cyberpunkvrport_stereo
pwsh scripts\deploy_stereo.ps1 -GameRoot "<game root>"

Controls

VR controller input is merged into the native CP2077 gamepad, so the in-game "Controller" key bindings apply.

Every control, at a glance

Button names are the Touch ones (left controller carries X/Y, right carries A/B); Index, Vive and WMR get the same actions through their own interaction profile. A dash means the port sends nothing there.

Motion controllerOn footDrivingMenus
Left stickMove β€” one speed, direction from the stickTrim the latched throttle (weapon drawn); steering, if no hand is on the wheelNavigate
Left stick, fully forward 0.2 sSprint, heldβ€”β€”
Left stick clickHold = D-pad modifier; released bare = the vanilla L3Hold = D-pad and radio modifier; released bare = nothingβ€”
Left triggerAim / melee block (the lighter, empty-handed)Brakeβ€”
Left gripGrab the magazine during a reloadGrab the wheelTab left (LB)
Left grip, hand at your left earScanner, heldβ€”β€”
XReload Β· interactHornβ€”
YWeapon switchβ€”β€”
Left menu buttonPause menuPause menuClose
Right stick XTurn β€” snap or smoothFree lookNavigate
Right stick, fully upDash / dodge, once per pushβ€”β€”
Right stick, fully downCrouch (R3)β€”β€”
Go down in the roomCrouch, optional β€” follows your knees, both waysβ€”β€”
Right stick clickSlide release β€” racks the weaponAutodriveβ€”
Right triggerFireThrottle β€” or fire, weapon drawn, and the throttle latchesβ€”
Right gripHand-to-holster equip / unequip; melee powerGrab the wheel; + left stick click = radioTab right (RB)
AJump β€” double and charge jump unchangedβ€”Confirm
BMagazine drop (weapon in hand); the game's own B holsteredHeld 0.4 s: get out. A tap does nothingBack

Six things are gestures rather than buttons and answer to no press at all: a palm on the wheel hub honks, a swing is melee, a hand on what the game is offering interacts, both hands flicked up is a jump, going down in the room crouches (optional), and the tilt between your controllers steers.

X and A can be swapped (Controls tab, on by default): interact and reload move to the right thumb so they cost you nothing while walking, and jump moves to the left β€” which the hop gesture then makes optional. Menus and vehicles are left alone, and the presses the gestures make are never swapped.

Default VR mapping, on foot:

InputAction
Left stickMove β€” one speed whatever the deflection, direction from the stick
Left stick fully forward, held 0.2 sSprint β€” held, and it survives a dash
Right stick XTurn camera (snap or smooth; a snap needs a FULL push)
Right stick fully upDash (dodge, direction from the left stick) β€” once per push
Right stick fully downCrouch (R3)
Squat physicallyCrouch β€” optional (Controls tab), with an adjustable depth
Right thumb clickSlide release β€” racks the weapon (physical reload)
Left hand to your left ear + left gripScanner, toggled β€” squeeze to open, squeeze again to close
Right trigger / Left triggerFire / Aim (left trigger is also melee block)
Right gripHand-to-holster equip / unequip; melee power modifier
Left gripGrab the magazine during a reload (at the ear it is the scanner)
Left stick up / down, to the stopPage the quickhack list while the scanner is open
AJump (double jump and charge jump unchanged)
B, weapon in handDrop the magazine (physical reload) β€” not dodge
B, holsteredThe game's own B again β€” close the phone, back out
X / YReloadΒ·interact / Weapon switch
Left menu buttonPause menu
Swing a melee weaponVR motion melee (native attack along the blade)

While the scanner is open the same hand works it: the left stick to the stop pages the quickhack list (below the stop it still walks, so you can read and move), X applies the selected hack, the right trigger tags the target instead of firing, the right stick click changes the tab and left trigger + right stick zooms. The list used to sit on X and Y, which meant reaching across the face buttons with the hand that is already holding a grip at your ear β€” the very reach a one-hand scanner exists to avoid.

B is the port's only while a weapon is actually in your hand, because a magazine drop is the only thing the port needs it for. Holstered, it reaches the game β€” so the phone and the radial close normally. Known limit: with a weapon drawn, B cannot close the phone.

While driving, the same controllers do something else:

InputAction
Grip, hand at the wheel / handlebarsGrab it β€” that arm goes back to the driving animation
Tilt of the line through both controllersSteering (one hand: that controller against the wheel centre)
Hand on the middle of the wheelHorn β€” no grip needed; a hand that is grabbing never honks
XHorn too β€” the vanilla button, back where it belongs
Left stick click + right gripRadio on / off
Right stick clickAutodrive. Moved off the left click, which this port uses for the D-pad chord β€” a slip there handed the car to the autopilot. The look-back camera it replaces is a head turn in VR
Right trigger / Left triggerThrottle / Brake
Right trigger with a weapon drawnFire. The throttle latches at the speed it had
Left stick forward / back, weapon drawnTrim the latched throttle
B, heldGet out. A tap does nothing β€” only a deliberate hold ejects you
Perspective toggleDoes nothing β€” the camera is held in first person

Each hand is independent, so you can hold the wheel with one and keep the other on a gun. With a weapon equipped the right hand shoots and cannot grab the wheel; holster it and the wheel is its again β€” and since reaching for a holster is how you draw in the first place, that hand is already off the wheel by then. A grip that is holding the wheel does nothing else: no holster equip, no magazine grab. Nothing here needs to know which vehicle you are in, because the reference pose is the game's own driving animation β€” bikes included.

The exit is a HOLD rather than a tap on purpose. The game's ExitVehicle_Button carries no hold of its own, so the vehicle acts on the first frame it sees the action β€” and at speed acting on it means throwing you out of the car.

D-pad chord. Hold the left stick clicked in, then pick the direction with the right stick β€” up / down / left / right, to the stop, the same full push every other gesture here asks for so that a resting thumb cannot step a list. While the chord is held the right stick is taken out of the camera, so selecting a direction cannot snap-turn you. Release the left stick without having chosen a direction and it emits the normal L3 press instead, so nothing is lost by using it β€” except in a vehicle, where that click is Vehicle_Autodrive and the release emits nothing at all. The autopilot moved to the right stick click for exactly that reason: the modifier and the autopilot cannot share a button you hold down all the time.

Buttons follow each runtime's interaction profile (Touch / Index / Vive / WMR); customise the actual actions in the game's Settings β†’ Key Bindings β†’ Controller.

Hotkeys:

  • F7 β€” recenter HMD
  • F8 β€” toggle the VR menu rectangle between full-HMD and a small panel
  • F10 / Insert β€” open the in-headset settings overlay
  • F11 β€” HUDitor's editor, if you installed it (the port rebinds it off F7)

In-headset overlay (F10)

Four tabs, live, and saved to vrport.ini β€” nothing here needs a restart. The driving block sits under Controls: wheel grab and its grab radius, steering deadzone and full-lock angle, horn on/off with its hub radius, trigger-fires-the-gun with its throttle trim rate β€” plus a live read-out of what is grabbed, what the steering is doing and whether the horn is being pressed.

  • General β€” world scale, IPD scale, stereo separation, VR menu FOV and quad size, motion prediction, reuse-last-clean-frame, pose pair-lock, and the head offset (X right / Y forward / Z up), with a second set that applies only in a vehicle.
  • Controls β€” decoupled weapon aim and its laser dot, locomotion source (Game / HMD / left hand / right hand), snap turn and angle, physical body rotation, physical crouch and its depth, the X/A swap, the hop gesture, immersive holsters, the driving block, and the current binding list.
  • Stereo β€” the second eye itself: which eye VRCAM is sent to, how stale its last frame may get before the submit falls back to mono, the HUD composite, and the live counters that say whether the second view is producing, being captured and reaching the headset.
  • VRIK β€” start/stop tracking, the free-look cone that physical body rotation turns within, the cutscene-suspend tier, IK calibration (reach scale, height, elbow swing/pole, wrist offset), diagnostics. The body-rotation switch itself moved to Controls: it is solved by VRIK, but a player hunting for it is hunting for a way to turn.

The launcher (before the game starts) picks the render resolution and carries a DEBUG tick-box that arms every diagnostic probe at once. Leave it off for play: it is for diagnosis and it costs both frame time and a very large log.

Mod components

ComponentTypePurpose
CyberpunkVR_Stereo.dllRED4ext pluginOpenXR head tracking, the second engine view, HUD composite, sight shaders, F10 overlay, XInput merge
CyberpunkVR_Stereo.dll(same plugin)Full-body avatar / hand IK, hand recoil, weapon-aim and muzzle override, smoking and reload poses, shared-memory bridge -- was CyberpunkVR_Hands.dll until the single-plugin build
cyberpunkvrport.archivearchiveThe magazine/prop carriers on the player templates, the weapon assets the reload drives, the case-ejection effects, and the 62 VRCAM camera components
CyberpunkVRPort_StereoCETEnables the VRCAM component the launcher picked
CyberpunkVRPort_VRIKCETStarts hand tracking, bridges calibration, publishes the locomotion state
CyberpunkVRPort_WeaponCETDecoupled weapon aim + VR motion-melee detection
CyberpunkVRPort_ReloadCETThe physical reload β€” thirteen per-weapon configs, the magazine, the slide, the revolver cylinder
CyberpunkVRPort_HandCollisionCETHand / finger / weapon push-out. Off since 0.1.2 (COLL_ON = false) β€” the body capsules came back out of the archive after a vehicle launched the player
CyberpunkVRPort_CrosshairCETHides the game's own crosshair while decoupled VR aim is on
CyberpunkVRPort_InteractCETHand-on-object interaction: with an interaction already offered, the grip presses it for a pickup and a hand laid on a device presses it by itself. Gated on the game's own focus -- which now follows the pointing hand, so looking away no longer takes the object with it
CyberpunkVRPort_JumpCETThe hop gesture: both hands rising together from the belly to the shoulders, in one unbroken movement, becomes A. Measures and logs whether or not the switch is on, so its thresholds can be read out of a normal session
CyberpunkVRPort_InteractProbeCETMeasurement only, no gameplay: asks the engine's own interaction look-at test about the object in hand and logs the answer against head and hand angles. The record of how the interaction query was found
CyberpunkVRPort_HolsterCET + redsHand-to-holster equip/unequip (immersive / simple)
CyberpunkVRPort_SmokingCET + redsCigarette / lighter props, FX, audio, auto-puff
CyberpunkVRPort_BasketballCET + redsVR basketball with real ball values (the physics half is redscript)
CyberpunkVRPort_WorldMapCET + redsWorld-map head-lock
CyberpunkVRPort_HoldredsPuts a real item in a hand β€” AddItemToSlot works from redscript and silently does nothing from CET. This is how the Overture's speedloader is carried
CyberpunkVRPort_MeleeredsNative melee along the blade segment
CyberpunkVRPort_WeaponUpredsStops auto-lower / auto-unequip of a drawn MELEE weapon
CyberpunkVRPort_NoAnimsredsDisables VR-fighting animations (keeps gameplay systems); also carries no-auto-reload and the firearm half of no-auto-lower
CyberpunkVRPort_SettingsGuardredsRemoves the two cascade shadow rows from the settings menu

Logs

  • Cyberpunk 2077\bin\x64\cyberpunkvrport.log β€” the plugin's own log, and the right file for a bug report. Quiet by default; tick DEBUG in the launcher for per-frame diagnostics.
  • Cyberpunk 2077\red4ext\logs\ β€” script validation and plugin load errors. If redscript compilation fails, every redscript mod is off, not just the one that failed, so check here first when something stops working all at once.
  • Per-mod CET logs live in each mod folder; they follow the same DEBUG switch.

Test hardware used during development

  • Headset: PICO 4 (via VDXR)
  • CPU: AMD Ryzen 7 5800X
  • GPU: NVIDIA RTX 5070 Ti
  • RAM: 32 GB DDR4
  • OS: Windows 11 Pro 25H2 (26200)

Donations

Donating is your personal choice. It speeds up development and makes new features possible β€” nobody is forcing you to do it.

The original port upstream has its own links, and they are on its own page.

Contributors

dariulone

39 commits

iPowerTech

31 commits

iPowerTech/cyberpunk-vr-port

cyberpunk2077 VR Port

25

stars

70

commits

Lua

primary language

Sep 9, 2026

updated

README

CyberpunkVR Port

What's New in v0.1.6-beta2

πŸ–οΈ Reach Out and Touch Night City

Your hands now decide what the game is looking at.

New Features

  • Point with your hand, not your head. The prompt, the scanner target and the look-at object all follow a ray that leaves your palm β€” so you can open a door while looking somewhere else.
  • Either hand works, and you never pick one. The ray alternates between your hands until one of them finds something, then stays with it. Move off and the other hand takes over instantly.
  • Touch to interact. Lay a hand on a terminal, an elevator panel or a car door and it answers β€” no wrist twisting, no pushing your fingers through the screen. Items are taken by reaching for them and squeezing the grip.
  • Jump by miming a hop. Both hands flick up from your belly to your shoulders and you jump. No thumb leaves a stick.
  • Physical crouch. Bend your knees in the room and V crouches; stand and V stands. Adjustable depth, and it measures your neck rather than your eyes, so looking down at your feet is not a squat.
  • Swap X and A. Interact and reload move onto the right thumb, so reloading in a firefight no longer costs you the movement stick. Jump moves to the left hand, where the hop gesture makes it optional anyway.
  • Haptics. Your controllers now answer on the four things the picture cannot say: the hand that takes an object, a panel actually pressing, the horn, and every round fired β€” in both hands when you are holding the gun with two.

Everything above is a switch in the F10 overlay, Controls tab. Hand pointing, the hop and the X/A swap ship on; physical crouch ships off, because it only reads right if you recentered standing up.

Fixes in this release

  • Braindances no longer re-enter themselves in a loop after you leave one.
  • The first object of a session responds β€” the reach gesture used to be dead until you had interacted with something once.
  • Elevator panels and terminals can be reached at all: the proximity test was returning garbage on every frame.
  • With physical body rotation on, your hands no longer turn twice with the car while steering.
  • The view no longer jumps back and forth during braindances.
  • With a weapon drawn, the left-hand ray no longer points behind you.

A 6-DoF VR mod for Cyberpunk 2077, built as a RED4ext plugin - CyberpunkVR_Stereo is the ONLY native plugin: it drives OpenXR head tracking, real stereo, the in-headset overlay and the full-body VR avatar with motion-controlled hands that used to live in a second DLL; and a set of CET / redscript mods add VR weapon aiming, the physical reload, motion melee, hand-to-holster equipping and more. Everything is configured from an in-headset F10 overlay.

Motion-controller vehicle driving demo: https://youtu.be/WKH7KeZjmx0

Repository: https://github.com/iPowerTech/cyberpunk-vr-port

⚠️ Experimental community mod. Not affiliated with CD PROJEKT RED. Use at your own risk and keep backups of your saves.

Credits

This port is developed by iPowerTech β€” VR driving, the hand interaction system, the physical reload, the body and gesture work, and the releases you install.

It builds on the original cyberpunk-vr-port by dariulone, which this repository is forked from and still merges from. Everything that came from upstream is credited there.

Features

  • Real stereo, not reprojection. The second eye is an actual engine view β€” a render-to-texture camera on the player entity that runs the frame graph for its own eye, from its own position, with its own projection. It falls back to mono automatically whenever that view has nothing fresh to give (menus, loading).
  • OpenXR head tracking injected into the REDengine render path, with the submitted frustum matching the one the engine actually rendered on both axes, plus world-scale / IPD controls. Off-axis lenses (Quest 3 and family) get a frustum sized to COVER the panel rather than match its span, so there is no black band down the outer edge.
  • The game HUD in both eyes β€” the engine's own HUD composite is ported shader-for-shader for the second eye. By default it is pasted at the same PIXEL in both eyes so markers land in the same place; the finite-distance placement is still there behind one setting, because wide-FOV headsets want it.
  • The F10 overlay in both eyes, so a settings panel no longer costs you stereo the way a full-screen game menu does.
  • The two views agree. Sun cascade shadows, the shader clock, the foliage wind volume and the reflection march are all shared engine structures that the second view used to rebuild from its own frustum β€” which is where blinking shadows, dead flags, jittering vegetation and a mirror-finish ceiling came from. All four are lent from one view now.
  • Full-body VR avatar (VRIK) β€” body under the HMD, arm-length calibration, leg IK, real-life squat. Hands are with the controllers, the shoulder girdle and elbows hang off the BODY rather than the head, and the solve is clocked by the engine's own animation batch. VRIK suspends itself during cutscenes so the avatar does not fight an authored scene.
  • Physical body rotation (optional) β€” the character turns to follow the headset through the engine's own heading channel, so the mesh, the collision capsule, the aim and the movement direction all move with it. The view does not move and the hands stay on the controllers.
  • Physical crouch (optional) β€” bend your knees in the room and the character crouches; stand and it stands. It measures the NECK rather than the eyes, so looking down at your feet is not a squat, and how far you must drop is a slider (0.30 m by default, released at 60% of it so the crouch cannot flicker). Off by default, because a head height only means "crouching" if you recentred standing up β€” played seated, leaning toward the desk is the same movement.
  • The physical reload. Grab the magazine with your free hand's grip, pull it out along the path the weapon's own well defines, carry it, push it home; rack the slide with the other palm and release it with the right stick click. Ammo and sound follow the hands, not a timeline. Thirteen weapons are tuned individually β€” Unity, Tamayura, Tsunami Nue, Constitutional Liberty, Arasaka Kenshin, Militech Lexington, Militech Omaha, Kang Tao Chao, Tsunami Kappa, Arasaka Yukimura, Militech Ticon, Silverhand's Malorian, and the Malorian Overture revolver, which rolls its cylinder, ejects its cases and reloads from a real speedloader.
  • Decoupled VR weapon aim β€” bullets follow the real weapon muzzle, not the camera. The hit is redirected inside the engine's own PhysicalRay evaluator, so shotgun spread stays spread and every other shooter in the world keeps firing from their own barrel. Optional barrel dot in both eyes, scope-zoom aware.
  • Recoil in the hands, not the camera β€” the shot turns the wrist on a damped spring, and every weapon kicks by its own measured amount.
  • A resting hand and a real two-handed hold β€” with a weapon out the empty hand relaxes instead of clawing at nothing, and bringing it to the weapon offers the support grip: squeeze and the wrist locks on, the off hand steers the aim, and the kick drops. Twelve weapons have a captured hold.
  • Collimated reflex sights β€” the reticle is placed by angle along the sight's own optical axis, so it stays on the bore instead of sliding across the glass when you look at the sight from the side.
  • VR motion melee β€” real swings trigger the game's native melee along the blade (native damage/reaction/stamina).
  • Hand-to-holster equip/unequip on a grip squeeze β€” immersive (by visual holster) or simple (fixed weapon slots).
  • VR smoking β€” cigarette and lighter as real props, with a captured finger grip, a hands-free mouth anchor and the game's own FX and audio.
  • VR controller mapping merged into XInput: one movement speed whatever the stick deflection, sprint on a held detent, dash and crouch on the right stick, the scanner as a one-hand gesture, snap or smooth turn, HMD/hand-relative locomotion, and a D-pad chord. See Controls below.
  • The hand chooses what the game is looking at. The engine builds every "what am I looking at" answer β€” the interaction prompt and its choices, the scanner target, the look-at object scripts read β€” from a single ray, and that ray now leaves the PALM instead of the camera. Point at a door and it is the door that is offered, wherever your head happens to be. Either hand, with nothing to configure: the ray alternates between them until one finds something, then stays with that hand until it points at nothing again β€” so the first hand to acquire wins and the other takes over the moment you reach with it. With a weapon drawn it is the free hand; with both hands on the gun, or while driving, no hand points and the head has it back.
  • Reach out and take it. With an interaction already offered, putting a hand on the thing and squeezing the grip presses it. Devices press themselves: a palm laid on a terminal, an elevator panel or a car door is enough, held long enough for the game's hold bindings. The contact point is where the engine's own look-at ray lands, pulled 6 cm toward your hand β€” so a panel answers when the hand looks like it has arrived, without pushing fingers through it. That point has to belong to the object the game is offering, and a device that has pressed itself stays pressed until the hand LEAVES it rather than until the object changes: a braindance rebuilds its shard case with a fresh entity id on every exit, which used to read as a new object under a hand that had not moved and re-entered the braindance forever.
  • Jump by miming a hop (optional) β€” both hands flick up together from about the belly to the shoulders, in one unbroken movement, and the character jumps. No thumb leaves a stick for it, which is what pays for the X/A swap (optional too): interact and reload move onto the right thumb, so reloading under fire no longer costs you the movement stick. Menus keep A as Confirm and vehicles are untouched.
  • Haptics on the four things you cannot see. A light tap on the hand that takes an object, a firmer one when a touch panel actually fires, one on the hand that sounds the horn, and every round in the hand that fired it β€” both hands when the support grip is on the gun, weaker on the forestock, because it is the same shot arriving through the other arm.
  • VR driving β€” squeeze a grip with your hand where the driving animation holds the wheel and that arm is handed back to the animation; the tilt of the line through your controllers is the steering, one-handed or two, with adjustable deadzone and lock angle. A hand on the hub sounds the horn, and drawing a weapon turns the right trigger into the gun while the throttle latches so the car keeps rolling.
  • World-map head-lock β€” DLSS/NGX handling (the second view gets its own upscaler viewport automatically).
  • 13 headsets, 60 resolutions, every ladder reaching 6000 px, picked before launch β€” PlayStation VR2 and the Bigscreen Beyond 2/2e included.
  • HUD placement is HUDitor, which moves and scales each widget individually. The port shipped its own HUD mod until 2026-08-20 and it is gone: it scaled the shared HUD root around screen centre, which is too blunt to be comfortable and actively fights a real HUD editor. What the port still does for the HUD is the part only it can do -- compositing the engine's own HUD into the SECOND eye. The port's own HUDitor setup -- the editor moved to F11, plus a VR-tuned layout for all 26 widgets -- is saved in mods\config\huditor\, opt-in rather than installed for you.
  • The cascade shadow rows are hidden from Graphics β†’ Advanced. The atlas is shared between the two views, so raising them gives you artefacts the port cannot fix from its side.
  • In-headset F10 overlay with tabbed, live, persisted settings.
  • SteamVR (OpenVR) runtime supported alongside OpenXR; pre-launch resolution selector; quiet-by-default logging with a DEBUG toggle in the launcher.

Requirements

  • Cyberpunk 2077 (PC, 2.31).
  • Cyber Engine Tweaks
  • RED4ext
  • ArchiveXL
  • TweakXL
  • redscript
  • Codeware (1.20 or newer β€” older builds fail script compilation)
  • Visual Holsters (Automatic Clothes Swap)
  • Visible Bullets (Projectile Restoration)
  • Equipment-EX
  • Nova Optics
  • Input Loader
  • HUDitor

Recommended but not required: HUDitor, Visible Bullets, for HUD placement β€” the port ships a VR-tuned layout for it in mods\config\huditor\ and no longer moves HUD widgets itself.

Install RED4ext, CET and redscript first (the usual Nexus dependencies).

Installation (drop-in)

Download the release archive and extract its contents into your Cyberpunk 2077 game root (the folder that contains bin\, r6\, red4ext\). The files land as:

red4ext\plugins\CyberpunkVR_Stereo\CyberpunkVR_Stereo.dll     # the VR plugin: OpenXR, stereo, overlay, VRIK
red4ext\plugins\CyberpunkVR_Stereo\CyberpunkVR_Sight*.dxil    # sight shaders, loaded by name at PSO swap
                                                              # NOTE: CyberpunkVR_Hands.dll is GONE -- its
                                                              # code is inside CyberpunkVR_Stereo.dll now.
                                                              # An old copy left in red4ext\plugins makes
                                                              # two plugins detour one address, which
                                                              # crashes with a fault at FFFFFFFFFFFFFFFF.
archive\pc\mod\cyberpunkvrport.archive                        # held props, weapon assets, the VRCAM cameras
archive\pc\mod\VRCigarette.archive.xl, vrport_basketball...   # the smoking and basketball props
bin\x64\plugins\cyber_engine_tweaks\mods\CyberpunkVRPort_*\   # CET mods -- see the table below
r6\scripts\CyberpunkVRPort_*\                                 # redscript mods -- see the table below
r6\input\HUDitor.xml, r6\config\...                           # the HUDitor binding and the port's config

Then start your OpenXR runtime first, and launch the game.

There is no dxgi.dll any more β€” this is a RED4ext plugin. Anything else that proxies dxgi (R.E.A.L. VR, for one) must be out of bin\x64 or the two fight over the same engine hooks; scripts\deploy_stereo.ps1 moves one aside for you.

Keep only one .dll in each red4ext\plugins\CyberpunkVR_* folder. RED4ext loads every DLL it finds there, so a renamed backup beside the real build loads as a second copy of the plugin and the two fight over the same hooks.

From a source tree, install with:

cmake --build build --config Release --target cyberpunkvrport_stereo
pwsh scripts\deploy_stereo.ps1 -GameRoot "<game root>"

Controls

VR controller input is merged into the native CP2077 gamepad, so the in-game "Controller" key bindings apply.

Every control, at a glance

Button names are the Touch ones (left controller carries X/Y, right carries A/B); Index, Vive and WMR get the same actions through their own interaction profile. A dash means the port sends nothing there.

Motion controllerOn footDrivingMenus
Left stickMove β€” one speed, direction from the stickTrim the latched throttle (weapon drawn); steering, if no hand is on the wheelNavigate
Left stick, fully forward 0.2 sSprint, heldβ€”β€”
Left stick clickHold = D-pad modifier; released bare = the vanilla L3Hold = D-pad and radio modifier; released bare = nothingβ€”
Left triggerAim / melee block (the lighter, empty-handed)Brakeβ€”
Left gripGrab the magazine during a reloadGrab the wheelTab left (LB)
Left grip, hand at your left earScanner, heldβ€”β€”
XReload Β· interactHornβ€”
YWeapon switchβ€”β€”
Left menu buttonPause menuPause menuClose
Right stick XTurn β€” snap or smoothFree lookNavigate
Right stick, fully upDash / dodge, once per pushβ€”β€”
Right stick, fully downCrouch (R3)β€”β€”
Go down in the roomCrouch, optional β€” follows your knees, both waysβ€”β€”
Right stick clickSlide release β€” racks the weaponAutodriveβ€”
Right triggerFireThrottle β€” or fire, weapon drawn, and the throttle latchesβ€”
Right gripHand-to-holster equip / unequip; melee powerGrab the wheel; + left stick click = radioTab right (RB)
AJump β€” double and charge jump unchangedβ€”Confirm
BMagazine drop (weapon in hand); the game's own B holsteredHeld 0.4 s: get out. A tap does nothingBack

Six things are gestures rather than buttons and answer to no press at all: a palm on the wheel hub honks, a swing is melee, a hand on what the game is offering interacts, both hands flicked up is a jump, going down in the room crouches (optional), and the tilt between your controllers steers.

X and A can be swapped (Controls tab, on by default): interact and reload move to the right thumb so they cost you nothing while walking, and jump moves to the left β€” which the hop gesture then makes optional. Menus and vehicles are left alone, and the presses the gestures make are never swapped.

Default VR mapping, on foot:

InputAction
Left stickMove β€” one speed whatever the deflection, direction from the stick
Left stick fully forward, held 0.2 sSprint β€” held, and it survives a dash
Right stick XTurn camera (snap or smooth; a snap needs a FULL push)
Right stick fully upDash (dodge, direction from the left stick) β€” once per push
Right stick fully downCrouch (R3)
Squat physicallyCrouch β€” optional (Controls tab), with an adjustable depth
Right thumb clickSlide release β€” racks the weapon (physical reload)
Left hand to your left ear + left gripScanner, toggled β€” squeeze to open, squeeze again to close
Right trigger / Left triggerFire / Aim (left trigger is also melee block)
Right gripHand-to-holster equip / unequip; melee power modifier
Left gripGrab the magazine during a reload (at the ear it is the scanner)
Left stick up / down, to the stopPage the quickhack list while the scanner is open
AJump (double jump and charge jump unchanged)
B, weapon in handDrop the magazine (physical reload) β€” not dodge
B, holsteredThe game's own B again β€” close the phone, back out
X / YReloadΒ·interact / Weapon switch
Left menu buttonPause menu
Swing a melee weaponVR motion melee (native attack along the blade)

While the scanner is open the same hand works it: the left stick to the stop pages the quickhack list (below the stop it still walks, so you can read and move), X applies the selected hack, the right trigger tags the target instead of firing, the right stick click changes the tab and left trigger + right stick zooms. The list used to sit on X and Y, which meant reaching across the face buttons with the hand that is already holding a grip at your ear β€” the very reach a one-hand scanner exists to avoid.

B is the port's only while a weapon is actually in your hand, because a magazine drop is the only thing the port needs it for. Holstered, it reaches the game β€” so the phone and the radial close normally. Known limit: with a weapon drawn, B cannot close the phone.

While driving, the same controllers do something else:

InputAction
Grip, hand at the wheel / handlebarsGrab it β€” that arm goes back to the driving animation
Tilt of the line through both controllersSteering (one hand: that controller against the wheel centre)
Hand on the middle of the wheelHorn β€” no grip needed; a hand that is grabbing never honks
XHorn too β€” the vanilla button, back where it belongs
Left stick click + right gripRadio on / off
Right stick clickAutodrive. Moved off the left click, which this port uses for the D-pad chord β€” a slip there handed the car to the autopilot. The look-back camera it replaces is a head turn in VR
Right trigger / Left triggerThrottle / Brake
Right trigger with a weapon drawnFire. The throttle latches at the speed it had
Left stick forward / back, weapon drawnTrim the latched throttle
B, heldGet out. A tap does nothing β€” only a deliberate hold ejects you
Perspective toggleDoes nothing β€” the camera is held in first person

Each hand is independent, so you can hold the wheel with one and keep the other on a gun. With a weapon equipped the right hand shoots and cannot grab the wheel; holster it and the wheel is its again β€” and since reaching for a holster is how you draw in the first place, that hand is already off the wheel by then. A grip that is holding the wheel does nothing else: no holster equip, no magazine grab. Nothing here needs to know which vehicle you are in, because the reference pose is the game's own driving animation β€” bikes included.

The exit is a HOLD rather than a tap on purpose. The game's ExitVehicle_Button carries no hold of its own, so the vehicle acts on the first frame it sees the action β€” and at speed acting on it means throwing you out of the car.

D-pad chord. Hold the left stick clicked in, then pick the direction with the right stick β€” up / down / left / right, to the stop, the same full push every other gesture here asks for so that a resting thumb cannot step a list. While the chord is held the right stick is taken out of the camera, so selecting a direction cannot snap-turn you. Release the left stick without having chosen a direction and it emits the normal L3 press instead, so nothing is lost by using it β€” except in a vehicle, where that click is Vehicle_Autodrive and the release emits nothing at all. The autopilot moved to the right stick click for exactly that reason: the modifier and the autopilot cannot share a button you hold down all the time.

Buttons follow each runtime's interaction profile (Touch / Index / Vive / WMR); customise the actual actions in the game's Settings β†’ Key Bindings β†’ Controller.

Hotkeys:

  • F7 β€” recenter HMD
  • F8 β€” toggle the VR menu rectangle between full-HMD and a small panel
  • F10 / Insert β€” open the in-headset settings overlay
  • F11 β€” HUDitor's editor, if you installed it (the port rebinds it off F7)

In-headset overlay (F10)

Four tabs, live, and saved to vrport.ini β€” nothing here needs a restart. The driving block sits under Controls: wheel grab and its grab radius, steering deadzone and full-lock angle, horn on/off with its hub radius, trigger-fires-the-gun with its throttle trim rate β€” plus a live read-out of what is grabbed, what the steering is doing and whether the horn is being pressed.

  • General β€” world scale, IPD scale, stereo separation, VR menu FOV and quad size, motion prediction, reuse-last-clean-frame, pose pair-lock, and the head offset (X right / Y forward / Z up), with a second set that applies only in a vehicle.
  • Controls β€” decoupled weapon aim and its laser dot, locomotion source (Game / HMD / left hand / right hand), snap turn and angle, physical body rotation, physical crouch and its depth, the X/A swap, the hop gesture, immersive holsters, the driving block, and the current binding list.
  • Stereo β€” the second eye itself: which eye VRCAM is sent to, how stale its last frame may get before the submit falls back to mono, the HUD composite, and the live counters that say whether the second view is producing, being captured and reaching the headset.
  • VRIK β€” start/stop tracking, the free-look cone that physical body rotation turns within, the cutscene-suspend tier, IK calibration (reach scale, height, elbow swing/pole, wrist offset), diagnostics. The body-rotation switch itself moved to Controls: it is solved by VRIK, but a player hunting for it is hunting for a way to turn.

The launcher (before the game starts) picks the render resolution and carries a DEBUG tick-box that arms every diagnostic probe at once. Leave it off for play: it is for diagnosis and it costs both frame time and a very large log.

Mod components

ComponentTypePurpose
CyberpunkVR_Stereo.dllRED4ext pluginOpenXR head tracking, the second engine view, HUD composite, sight shaders, F10 overlay, XInput merge
CyberpunkVR_Stereo.dll(same plugin)Full-body avatar / hand IK, hand recoil, weapon-aim and muzzle override, smoking and reload poses, shared-memory bridge -- was CyberpunkVR_Hands.dll until the single-plugin build
cyberpunkvrport.archivearchiveThe magazine/prop carriers on the player templates, the weapon assets the reload drives, the case-ejection effects, and the 62 VRCAM camera components
CyberpunkVRPort_StereoCETEnables the VRCAM component the launcher picked
CyberpunkVRPort_VRIKCETStarts hand tracking, bridges calibration, publishes the locomotion state
CyberpunkVRPort_WeaponCETDecoupled weapon aim + VR motion-melee detection
CyberpunkVRPort_ReloadCETThe physical reload β€” thirteen per-weapon configs, the magazine, the slide, the revolver cylinder
CyberpunkVRPort_HandCollisionCETHand / finger / weapon push-out. Off since 0.1.2 (COLL_ON = false) β€” the body capsules came back out of the archive after a vehicle launched the player
CyberpunkVRPort_CrosshairCETHides the game's own crosshair while decoupled VR aim is on
CyberpunkVRPort_InteractCETHand-on-object interaction: with an interaction already offered, the grip presses it for a pickup and a hand laid on a device presses it by itself. Gated on the game's own focus -- which now follows the pointing hand, so looking away no longer takes the object with it
CyberpunkVRPort_JumpCETThe hop gesture: both hands rising together from the belly to the shoulders, in one unbroken movement, becomes A. Measures and logs whether or not the switch is on, so its thresholds can be read out of a normal session
CyberpunkVRPort_InteractProbeCETMeasurement only, no gameplay: asks the engine's own interaction look-at test about the object in hand and logs the answer against head and hand angles. The record of how the interaction query was found
CyberpunkVRPort_HolsterCET + redsHand-to-holster equip/unequip (immersive / simple)
CyberpunkVRPort_SmokingCET + redsCigarette / lighter props, FX, audio, auto-puff
CyberpunkVRPort_BasketballCET + redsVR basketball with real ball values (the physics half is redscript)
CyberpunkVRPort_WorldMapCET + redsWorld-map head-lock
CyberpunkVRPort_HoldredsPuts a real item in a hand β€” AddItemToSlot works from redscript and silently does nothing from CET. This is how the Overture's speedloader is carried
CyberpunkVRPort_MeleeredsNative melee along the blade segment
CyberpunkVRPort_WeaponUpredsStops auto-lower / auto-unequip of a drawn MELEE weapon
CyberpunkVRPort_NoAnimsredsDisables VR-fighting animations (keeps gameplay systems); also carries no-auto-reload and the firearm half of no-auto-lower
CyberpunkVRPort_SettingsGuardredsRemoves the two cascade shadow rows from the settings menu

Logs

  • Cyberpunk 2077\bin\x64\cyberpunkvrport.log β€” the plugin's own log, and the right file for a bug report. Quiet by default; tick DEBUG in the launcher for per-frame diagnostics.
  • Cyberpunk 2077\red4ext\logs\ β€” script validation and plugin load errors. If redscript compilation fails, every redscript mod is off, not just the one that failed, so check here first when something stops working all at once.
  • Per-mod CET logs live in each mod folder; they follow the same DEBUG switch.

Test hardware used during development

  • Headset: PICO 4 (via VDXR)
  • CPU: AMD Ryzen 7 5800X
  • GPU: NVIDIA RTX 5070 Ti
  • RAM: 32 GB DDR4
  • OS: Windows 11 Pro 25H2 (26200)

Donations

Donating is your personal choice. It speeds up development and makes new features possible β€” nobody is forcing you to do it.

The original port upstream has its own links, and they are on its own page.

Contributors

dariulone

39 commits

iPowerTech

31 commits

Languages

Lua

49.1%

C++

46.3%

Redscript

2.4%

Python

1.3%