It seems that you're using an outdated browser. Some things may not work as they should (or don't work at all).
We suggest you upgrade newer and better browser like: Chrome, Firefox, Internet Explorer or Opera

×
Just in case anyone has the same idea - I'm going to see if I can get FreeTrack working for "head" movement in Terra Nova.

Updates will follow when I get home tonight!!

.... might also rig up my rudder pedals for strafing movement...
avatar
Eranimulli: Just in case anyone has the same idea - I'm going to see if I can get FreeTrack working for "head" movement in Terra Nova.

Updates will follow when I get home tonight!!

.... might also rig up my rudder pedals for strafing movement...
That is pretty cool. I have never heard of FreeTrack until you mentioned it. Just looked it up. According to the readme in the TN folder the game had VR headset support, but back in 1996 I knew not one person who owned one. It will be interesting to hear about your results.
Post edited July 01, 2015 by LiqMat
It sometimes amazes me just how far ahead of its time Terra Nova really was.

This is one of those games I wish hadn't been forgotten by most.
That was Looking Glass through and though -- way ahead of their time (or way ahead of their competition, at any rate).
Post edited July 09, 2015 by Shadowcat
TL;DR:

Haven't been able to get analog head-tracking working using the VR support that TN shipped with. The slightly less exciting alternative is to emulate the keypresses for rotating and pitching your head in-game by passing the FaceTrackNoIR output through VJoy and JoyToKey or something like that - mapping regions of the axis to the appropriate keys in TN. Looking left and right would be an on/off thing but looking up and down could be controlled in a more granular fashion.

Will post something up when I have a working solution.


Long bit:

So, I found the EF2000 Reloaded project where a couple of geniuses (genii?!) have forked the DOSBox code and written a helper app (Track Mapper) which will accept TrackIR input and emulate VFX1 output, passing that through to EF2000.

They've said that, in principal, this should work for any game with VFX support, though that is dependant on said game implementing the same subset of VFX API features that EF2000 does.........

The helper app is picking up the "TrackIR" output from FaceTrackNoIR fine.

To enable VFX1 support in Terra Nova, you have to pass through command line arguments:

+vr +neck

+vr enables the vfx1 input and output and uses tracking data from the headset to turn your suit in-game. +neck alternatively uses the tracking data from the headset to turn just your head in-game.

GOG's DOSBox conf bypasses the original batch file that ran Terra Nova, tn.bat but all that does is pass on the command line arguments to _tn.bat, ff.bat and finally the actual executable __ff.exe ... I'm pretty sure I've enable VFX support in Terra Nova.

I've replaced the DOSBox executable with the modded EF2000 Reloaded one and copied in the prerequisite .dll files that are included in the EF2000 Reloaded download. Game runs fine. No tracking. If I change the resolution in-game, I do now for a few seconds see the stereo video outputs that TN is trying to pass to the VFX1.

Possible reasons are either the helper app isn't passing the output through to DOSBox correctly ...or... TN is using the VFX API in very a different manner to EF2000 ...or... GOG have necessarily or otherwise broke the feature in TN.

Wasn't really expecting to be able to get the above to work.

The less exciting alternative to using TN's VFX support is to just emulate keypresses using FaceTrackNoIR output. Think I will have to pass that through VJoy + JoyToKey or something like that. When I've got a working solution, I'll post it up.

I did for giggles set FaceTrackNoIR to emulate my mouse and attempt to use my head to aim in TN. Couldn't even hit a tree...
avatar
Eranimulli: TL;DR:

Haven't been able to get analog head-tracking working using the VR support that TN shipped with. The slightly less exciting alternative is to emulate the keypresses for rotating and pitching your head in-game by passing the FaceTrackNoIR output through VJoy and JoyToKey or something like that - mapping regions of the axis to the appropriate keys in TN. Looking left and right would be an on/off thing but looking up and down could be controlled in a more granular fashion.

Will post something up when I have a working solution.

Long bit:

So, I found the EF2000 Reloaded project where a couple of geniuses (genii?!) have forked the DOSBox code and written a helper app (Track Mapper) which will accept TrackIR input and emulate VFX1 output, passing that through to EF2000.

They've said that, in principal, this should work for any game with VFX support, though that is dependant on said game implementing the same subset of VFX API features that EF2000 does.........

The helper app is picking up the "TrackIR" output from FaceTrackNoIR fine.

To enable VFX1 support in Terra Nova, you have to pass through command line arguments:

+vr +neck

+vr enables the vfx1 input and output and uses tracking data from the headset to turn your suit in-game. +neck alternatively uses the tracking data from the headset to turn just your head in-game.

GOG's DOSBox conf bypasses the original batch file that ran Terra Nova, tn.bat but all that does is pass on the command line arguments to _tn.bat, ff.bat and finally the actual executable __ff.exe ... I'm pretty sure I've enable VFX support in Terra Nova.

I've replaced the DOSBox executable with the modded EF2000 Reloaded one and copied in the prerequisite .dll files that are included in the EF2000 Reloaded download. Game runs fine. No tracking. If I change the resolution in-game, I do now for a few seconds see the stereo video outputs that TN is trying to pass to the VFX1.

Possible reasons are either the helper app isn't passing the output through to DOSBox correctly ...or... TN is using the VFX API in very a different manner to EF2000 ...or... GOG have necessarily or otherwise broke the feature in TN.

Wasn't really expecting to be able to get the above to work.

The less exciting alternative to using TN's VFX support is to just emulate keypresses using FaceTrackNoIR output. Think I will have to pass that through VJoy + JoyToKey or something like that. When I've got a working solution, I'll post it up.

I did for giggles set FaceTrackNoIR to emulate my mouse and attempt to use my head to aim in TN. Couldn't even hit a tree...
"GOG have necessarily or otherwise broke the feature in TN"

The original install CD image is in the CD folder of the GOG TNSFC install folder. You could try to install it from the original CD image and see if it works that way possibly. Thanks for looking into to this regardless.
Info from the original readme file for anybody who is interested:

VR HEADSETS
-----------

First, you must have the headset turned on before you start up Terra Nova.

VR headset support is enabled through command line arguments. For example, you would type "tn +vr" rather than typing "tn".

+vr enables headset auto-detection. The game should auto-detect which type of headset you have.
+iglass only looks for the Virtual IO iglasses
+vfx1 only looks for the Forte VFX1 Headgear
+cmaxx only looks for the VictorMaxx CyberMaxx

These put you into a mode where the direction you look is the direction your PBA faces. That way, if your head turns, your PBA turns to match. You'll still need to use the keyboard to turn as well, since your head only moves so far. The [F] key and keypad center key recenter your pitch and heading to zero.

The more advanced (but harder) way to play is by also specifying "+neck" on the command line. That gives you a flexible "neck" so that your facing isn't equal to your PBA's facing. In this mode you can do things like look over your shoulder and shoot at the enemies behind you as you run away from them. In this mode the [F] and keypad center
keys turn your body to match your facing.

Terra Nova does not support stereoscopic vision, only headtracking. But it's cool anyway.
Post edited June 11, 2018 by zjorz
Got myself an Oculus Rift and VorpX, tried around with all my favorite games and ended up with building me a FreePie-Script mapping the Orientation of my headset. It basically simulates orientation by key presses of A and D for rotating horizontally and R and V for up and down.

It's not perfect, but it works kind of. Already played some missions and it's fun. Looking up and down is stronger so you only have to look 45° up and should get the complete 90°. I also mapped the mouse wheel to zoom in and out.

Regarding VorpX you need to tweak the dosboxTerraNova.conf by changing the output to openglnb. In VorpX I used Full VR Mode, tuned down the sensitivity of head tracking to 0.2 and inverted both x and y axis. In this way the aiming reticle "keeps" its position when you move the head set.

The script should be started before the game. It is inactive until you press F2 (can be changed), than it will track your head. In menus you can deactivate it by pressing F1. F2 also recenters the head tracking, getting the "initial" position (see below). Sry, the forum formatting sucks (tabs have been deleted so I replaced them by _, you can also look at it under pastebin: 2tKVnK2n. I will post an url as soon as I am allowed to ...


import time

# method for centering
def center():
_global yaw
_global pitch

_# recenter the device
_oculusVR.center()

_# recenter yaw settings and stop moving horizontally
_yaw.Center = oculusVR.yaw
_yaw.Current = yaw.Center
_yaw.TargetYaw = yaw.Center
_yaw.InCenter = True
_yaw.UpdateTimer = time.clock()
_yaw.Updating = False

_keyboard.setKeyUp(Key.D)
_keyboard.setKeyUp(Key.A)

_# recenter pitch settings and stop moving vertically
_pitch.Center = oculusVR.pitch
_pitch.Current = pitch.Center
_pitch.Target = pitch.Target
_pitch.UpdateTimer = time.clock()
_pitch.Updating = False

_keyboard.setKeyUp(Key.R)
_keyboard.setKeyUp(Key.V)
_keyboard.setPressed(Key.F)

# getting new information from device
def update():
_global yaw
_global pitch

_yaw.Target = oculusVR.yaw
_pitch.Target = oculusVR.pitch

# initialization of state and constants
if starting:
_FramesPerSecond = 40 # the "frame rate" of the game for updating internal state
_UpdateFrequency = 1.0 / FramesPerSecond # fragments of a seconds between two updates
_LastUpdate = time.clock() # last time an update happened
_MouseTimer = time.clock() # last time the mouse was checked for events

_Running = False # determines whether to use head tracking (True) or not (False), see below to activate/deactive head tracking

_yaw = type('yaw',(object,),{})() # all information regarding the yaw (horizontal head tracking)
_yaw.Center = 0.0 # the initial orientation (used for stabilizing head tracking when looking straight)
_yaw.Current = 0.0 # the simulated current yaw in the game
_yaw.Target = 0.0 # the yaw of the head set
_yaw.RadPerSeconds = 1.25 # how fast you can rotate in the game (2*PI / seconds for one complete rotation)
_yaw.Epsilon = yaw.RadPerSeconds * UpdateFrequency_# how fast the simulated yaw is in/decreased in one update step
_yaw.CenterEpsilon = 0.05 # the arc in which no head tracking happens when looking straight
_yaw.InCenter = True # whether the horizontal orientation is in the center (looking straight)
_yaw.UpdateTimer = time.clock() # the time when to release the rotation buttons
_yaw.Updating = False # whether the head (sadly whole body) is rotated in the game

_pitch = type('pitch',(object,),{})() # all information regarding the pitch (vertical head tracking)
_pitch.Center = 0.0 # the initial orientation (used for stabilizing head tracking when looking straight)
_pitch.Current = 0.0 # the simulated current pitch in the game
_pitch.Target = 0.0 # the pitch of the head set
_pitch.RadPerSeconds = 0.3 # how fast you can rotate in the game (2*PI / seconds for one complete rotation), pitch is slower (~2) and it is hurting looking completely up (so rotation is scaled by a factor of 2)
_pitch.Epsilon = pitch.RadPerSeconds * UpdateFrequency # how fast the simulated pitch is in/decreased in one update step
_pitch.CenterEpsilon = 0.025 # the arc in which no head tracking happens when looking straight
_pitch.UpdateTimer = time.clock() # the time when to release the rotation buttons
_pitch.Updating = False # whether the head (sadly whole body) is rotated in the game
__
_center() # reorient the head set settings
_oculusVR.update += update # register to update events of the head set

# de-activation of head tracking
if keyboard.getKeyDown(Key.F1):
_Running = False
if keyboard.getKeyDown(Key.F2):
_Running = True
_center()

# update orientation and internal state
if Running and LastUpdate < time.clock() - UpdateFrequency:_
_# reset clock for next update
_LastUpdate = time.clock()

_# check for updating yaw
_if not yaw.Updating:
__# center stabilization check
__if ((not yaw.InCenter) or abs(yaw.Target - yaw.Center) > yaw.CenterEpsilon) and keyboard.getKeyDown(Key.D) != True or keyboard.getKeyDown(Key.A) != True:
___# right rotation check
___if yaw.Target < yaw.Current - yaw.Epsilon:
____keyboard.setKeyDown(Key.D) # push rotation button
____yaw.UpdateTimer = time.clock() + max(0.05, abs(yaw.Target - yaw.Current) / yaw.RadPerSeconds) # hold for the duration needed to perform the rotation arc
____yaw.Updating = True
___# left rotation check
___elif yaw.Target > yaw.Current + yaw.Epsilon:
____keyboard.setKeyDown(Key.A) # push rotation button
____yaw.UpdateTimer = time.clock() + max(0.05, abs(yaw.Target - yaw.Current) / yaw.RadPerSeconds) # hold for the duration needed to perform the rotation arc
____yaw.Updating = True

_# check for updating pitch
_# center stabilization check
_if abs(pitch.Target - pitch.Center) < pitch.CenterEpsilon:
__keyboard.setKeyUp(Key.R)
__keyboard.setKeyUp(Key.V)
__keyboard.setPressed(Key.F) # reset pitch when looking in center
__pitch.Current = pitch.Target
__pitch.UpdateTimer = time.clock() + 1
__pitch.Updating = True
_# up rotation check
_elif pitch.Target < pitch.Current - pitch.Epsilon:
__keyboard.setKeyDown(Key.V) # push rotation button
__pitch.UpdateTimer = time.clock() + max(0.05, abs(pitch.Target - pitch.Current) / pitch.RadPerSeconds) # hold for the duration needed to perform the rotation arc
__pitch.Updating = True
_# down rotation check
_elif pitch.Target > pitch.Current + pitch.Epsilon:
__keyboard.setKeyDown(Key.R) # push rotation button
__pitch.UpdateTimer = time.clock() + max(0.05, abs(pitch.Target - pitch.Current) / pitch.RadPerSeconds) # hold for the duration needed to perform the rotation arc
__pitch.Updating = True

_# update simulated current yaw
_if yaw.Updating:
__if yaw.Current < yaw.Target:
___yaw.Current = min(yaw.Target, yaw.Current + yaw.Epsilon)
__elif yaw.Current > yaw.Target:
___yaw.Current = max(yaw.Target, yaw.Current - yaw.Epsilon)

_# update simlulated current pitch
_if pitch.Updating:
__if pitch.Current < pitch.Target:
___pitch.Current = min(pitch.Target, pitch.Current + pitch.Epsilon)
__elif pitch.Current > pitch.Target:
___pitch.Current = max(pitch.Target, pitch.Current - pitch.Epsilon)

# check for end of yaw update, release buttons
if Running and yaw.Updating and yaw.UpdateTimer < time.clock():
_yaw.InCenter = abs(yaw.Current - yaw.Center) < yaw.CenterEpsilon
_yaw.Updating = False
_keyboard.setKeyUp(Key.A)
_keyboard.setKeyUp(Key.D)

# check for end of pitch update, release buttons
if Running and pitch.Updating and pitch.UpdateTimer < time.clock():
_pitch.Updating = False
_keyboard.setKeyUp(Key.R)
_keyboard.setKeyUp(Key.V)

# handle mouse events
if Running and MouseTimer < time.clock():
_# use mouse wheel for zooming
_if mouse.wheelUp:
__keyboard.setPressed(Key.NumberPadPlus)
__MouseTimer = time.clock() + 0.2
_elif mouse.wheelDown:
__keyboard.setPressed(Key.NumberPadMinus)
__MouseTimer = time.clock() + 0.2
Post edited July 21, 2020 by IA_Predator