Perforce Tutorial: Corrupted UTF-16 file content

January 5, 2017
/ / /

I’ve run into this issue from time to time while using Unreal Engine, but I finally found the solution and decided it was worth sharing.

So if you’re a Perforce user in a Windows environment, like me, you may have noticed that occasionally you’ll sync a file and it will return corrupted, usually being filled with Chinese characters (see the image below).  I’ve only ever encountered this issue with Unreal’s .ini files, but I assume at this point it could happen to anything encoded with UTF-16 (which is UE4’s default encoding method).

In this screenshot, you can see how every other line of my DefaultEngine.ini file has been corrupted with Chinese characters after syncing from my Perforce depot.

Turns out that Perforce is already aware of this issue, and even has a KB article on their website for it.  (Perforce KB3488)  The KB article claims P4 stores text files in it’s database as “text” type, and does not correctly set Windows line endings when converting with UTF-16. You can avoid this issue entirely with a proper typemap setting, which Epic has totally already put in the documentation, so you may never experience this issue if you actually followed the documentation while setting up your P4 server (unlike me, obviously………).  You can read the original on perforce.com, but I’ll reproduce that article with the image below:

Specifically, the article is referring to the LineEnding setting found in the Advanced tab of your Perforce workspace’s configuration  (see image below).  Once you’ve changed this setting to UNIX, you can re-sync the files, convert their encoding back to whatever you needed it to be (I’m using UTF-8 now for everything, since it’s a PS4 requirement), and finally submit the new version of the file to your P4 depot.

Hopefully this helps some people in the future!  I’ve been re-making this file by hand every time I encountered this error, which has been a total nightmare.

If you enjoyed this post, follow me on Twitter, and be sure to check out Ethereal Legends, coming soon to Steam, PS4, and Xbox One!

Read More

Endless Reach 2.4.1 is now Open Source

January 9, 2016
/ / /

# EndlessReach
Source code for the last Unity version of Endless Reach, dated November 2014.

// version 2.4.1 – November 2014
// Soverance Studios
// www.soverance.com


This repository contains the source code for the final version of Endless Reach, built by Soverance Studios. The last version update was version 2.4.1, released in November of 2014. This application was built in Unity 4 and programmed in C#, and as it will never again be updated, the project is now entirely open source. No assets are included, this is only the source code.

Endless Reach is a hardcore shoot ‘em up that puts you in the shoes of a lone space drone pilot, laying claim to the uncharted galaxy known as the Reach.

Send your starfighter drone out into the unknown, and use it to battle your way through the alien hordes and make the regions safe for colonization. The future of humanity depends on you!

Endless Reach was originally prototyped for mobile devices, and released for Android and Windows Phone devices. Oculus Rift support was added shortly afterward, and the VR supported version was released to Oculus Share. We also ran promotional campaigns for Endless Reach on both Steam Greenlight and the Square Enix Collective, though both were ultimately unsuccessful. The Greenlight page has since been removed, but the remaining informative links persist:

Main Website: http://soverance.com/endlessreach/

Google Play: https://play.google.com/store/apps/details?id=com.Soverance.EndlessReach&hl=en

Windows Phone: https://www.microsoft.com/en-us/store/apps/endless-reach/9nblggh0k1tz

Oculus Share: https://share.oculus.com/app/endless-reach

Square Enix Collective: http://collective.square-enix.com/projects/54/endless-reach

Reddit: https://www.reddit.com/r/EndlessReach/

Endless Reach contains some basic shoot ’em up logic with the addition of a few new things, namely the Overload and Boost features. Online leaderboards are also incorporated, and they are powered a public Google Spreadsheet. There’s saving and loading, as well as a “world hub” called the Nautilus that essentially serves as a fancy level select menu.


  • 10 action-packed levels set in beautiful spacescapes
  • Amazing electronic soundtrack by Shiny Baubles
  • High powered particle effects and visual stimuli
  • Power-up chaining and limit break mode
  • 5 enemy types, 3 turret types, and a different boss in every stage!
  • Missile targeting via head tracking!


note that all platforms other than VR are no longer in development. VR ONLY!

  • Complete Version History is found on soverance.com.
  • Windows PC – VR [Oculus Rift]
  • Android
  • Windows Phone


Download from Official Website: http://soverance.com/endlessreach/


Endless Reach supports the Xbox 360 gamepad ONLY

  • Head Tracking – Lock On Target [look at target to lock]
  • Left Analog – Drone movement
  • Left Stick Down (L3) – Unused
  • Right Analog – Unused
  • Right Stick Down (R3) – Unused
  • Directional pad – Menu movement
  • A – Fire
  • X – Purge [when prompted]
  • B – Missile [when locked on target]
  • Y – Unused
  • Left Trigger – Boost [hold to continue]
  • Right Trigger – Unused
  • Left Shoulder – Toggle FPS counter
  • Right Shoulder – Unused
  • Start – Pause / Unpause
  • Back – Reset HMD Orientation


Collect BLUE orbs to advance fire mode to the next level.

* Standard [0.4 second fire rate, single shot, blue effect]
* Plus [0.2 second fire rate, single shot, green effect]
* Multi [0.1 second fire rate, triple shot loose, yellow effect]
* Cannon [0.06 second fire rate, double shot strong, red effect]
* Limit Break [20 second duration, 0.03 second fire rate, single shot strong, purple effect + shield]


* When entering a Limit Break, a timer will appear on the HUD. This timer indicates the remaining duration before the ship begins to overload.
* You can reset the timer, thereby extending the duration of a Limit Break, by simply collecting another blue power orb.
* The drone takes no damage during limit break.
* When the Limit timer reaches zero, the drone will begin to Overload.


* The drone becomes unable to move while overloading.
* Overloading is a sort of quick time event, in which the player will be prompted to press button “X” in order to safely purge the overloading energy.
* A successful purge will send a large shockwave to destroy all enemies within a large radius, and deal damage to bosses as 25% of their maximum HP.
* Failure to purge at the appropriate time will destroy the drone.


Hold the Left Trigger to increase movement speed. Initial boost shockwave will destroy all enemies in a small radius. The shockwave does no damage to bosses. Boost power is limited to a meter on the HUD. When the meter is depleted, the boost feature will no longer be available. Collect orange orbs to refill the boost meter.


Using the Oculus Rift HMD, certain objects can be targeted simply by looking directly at them. When locked on, a targeting reticle will appear around the object, and the drone will notify the pilot of it’s locked on status via a sound effect. The following objects are currently targetable:

* Turrets
* Certain portions of Bosses


Once locked on to a target, press “B” to fire a homing missile of charged energy. The drone can charge an infinite number of missiles, but they can only be fired while locked on to a target.


The Nautilus is the pilot’s vessel, used to explore the Reach, and it serves as the starfighter drone’s dock. Since sectors of the Reach are currently too dangerous to send humans to, the Alliance has chosen to deploy these starfighter drones to eradicate hostile alien life in the area, making the Reach safe for colonization.


Ethereal is the A.I. companion on board the Nautilus. He is your psychic link to your starfighter drone, Aurgus, and will be your sole source of information concerning mission objectives and status. Listen to what he has to say, as the voice of Ethereal provides valuable insight into playing the game!

[Galaxy Map]

Activate the Galaxy Map by pressing “A” when in range of the pedestal. A black hole will appear to let you know you are in range. Use the Galaxy Map to select the system you wish to explore. Choosing a system will notify your intent to Ethereal, who will open a portal in the staging area. Entering the portal will link your mind to his, and together you will launch the Aurgus to the chosen planetary system.

* You can hit “B” at any time to close the Galaxy Map


View the Leaderboards at the official website

Leaderboards are separated by each level, and high scores are level-independent. Pilots will be prompted at the status screen to enter a name if their score beats one of the level’s Universal High Scores.

* Only ten (10) Universal High Scores are allowed per level.
* Names can only be 15 characters long.


Level Name (Music Track) [Boss Name]

0 – Main Menu (Song For You, Milkman)
1 – Lumoria Nebula (Thunder Muscle) [Rex’Aern]
2 – Celestial Plains (Lightstabber) [Celestial Archon]
3 – The Spiral Downs (House-Step) [The Watcher]
4 – Coral Dreamscape (Power Moves!!! v2)
5 – The Drudgeon Edge (This One’s For You)
6 – Cirrus Straight (Aphrodisia)
7 – Visceral Downfall (Hocus Pocus)
8 – Centurion Dust Fields (It’s a Mega Dub Style)
9 – The Shinkansen Spiral (They Come)
10 – Omega Terminal (Fatima’s Funk)


1: (Ra’Aern)/ Turret_01 – Boss 01 – Aern – (Easy Boss)
2: (Ra’Aern)/ Turret_01 – Boss 02 – Celestial Archon – (Easy Boss+1)
3: (Disarray Probe)/Turret_02 -Boss 03 – The Watcher – (Easy Boss+1)
4: (Disarray Probe)/Turret_02 -Boss 04 – Harbinger of Chaos – (Intermediate Boss)
5: (Centipede Minion)/Turret_03 -Boss 05 – Wyvern – (Intermediate Boss)
6: (Centipede Minion)/Turret_03 -Boss06 – Dragon Worm – (Hard Boss)
7: (All minions + turrets) -Boss07- The Hammer – (Very Tough)
8: (All minions + turrets) -Boss08- Karasue – (Very Tough +1)
9: (All minions + turrets) -Boss09- Guardian of The Reach – (Incredibly Tough)
10:THE GAUNTLET – CONCURRENT BOSS FIGHTS ( 02,04,06,07,08,09) 10 – Omega – (Impossible to Gauge)

Read More

OSVR in Unreal Engine

November 9, 2015
/ / /


As we’ve been building Ethereal Legends, one thing we’ve been actively researching are which platforms we should target. Just like any other game developer, we’ve had to weigh the cost of resources spent developing for different platforms; what is our experience with said platform, how quick or easy is it to integrate, and how many players can we get from those devices. Should we target PC or console? Think about Linux or Mac? What about mobile devices?

Virtual reality development is naturally shaping up to be more of the same. What headset do you target? Rift or Vive? What about PlayStation VR? Have you considered Gear VR and mobile?

Razer has taken a shot at attempting to solve this problem with OSVR, their open source virtual reality initiative. The idea being that all software and hardware is completely open source, available for download from their website. That’s a pretty big deal for virtual reality enthusiasts, but maybe a bigger deal for VR as a whole. There’s a lot of potential there, and it’s what first drew our attention to OSVR.

We were contacted a few weeks ago by some friends over at Razer, and they were able to send us one of their Hacker Development Kits to work with. Jacob and I were excited to be greeted by a FedEx guy this afternoon with the headset in tow, and we got right to work implementing support for the device into Ethereal Legends.


IR tracker says hello!

I’m sure you can find an unboxing video of the headset somewhere (here), so I’ll just make a few quick comments about the hardware. First, it’s packaged extremely well, everything fitting cleanly and snugly into the box. All the parts seem to be of a pretty high quality, and the headset definitely has some weight to it (more than the DK2). Cables seem to be of excellent quality. Needless to say, despite how nice the headset is, by far the coolest part is the silly little stand they used for the IR camera. It’s flexible and fun… just look at it!

Well, since we’re an Unreal shop… first things first, we wanted to see how OSVR would work with Unreal Engine. We skipped a bunch of the intro stuff in the docs and went straight to getting the plugin into the engine. Razer has an OSVR plugin available for UE4 engine versions 4.6 through 4.9, and I assume they’ll keep updating for the foreseeable future.

First thing we noticed is how sparse the documentation is. There really isn’t much info out there yet on working with OSVR, and Razer’s own documentation leaves much to be desired. Luckily what is there is enough to get a savvy user up and running, but it’s definitely not consumer friendly by any means. So the rest of this post is aimed at helping you get your OSVR HDK up and running with Unreal Engine, and hopefully you’ll use it to create cool stuff! We were able to get the headset working with Ethereal Legends within a couple hours of unboxing the thing, so it’s relatively simple.

First, right after you get your HDK, read this Getting Started post. It’ll help familiarize yourself with some of the specifics of the headset, like adjusting the optics and whatnot. Before you can do anything, you need what they call the “OSVR Core“, which is the SDK that controls the headset (grab it here).  Download the latest version (choose x86 or x64, whatever your OS is) and unzip the archive to a directory of your choosing. Next step is to open the root directory of the SDK and run a file called “add_sdk_to_registry.cmd“. (You can optionally run the .ps1 file of the same name to perform these actions through PowerShell, but it’s not required). The idea is that this file will run a series of commands letting your computer know where the SDK was installed.

Next up, you’ll need the OSVR-Unreal Plugin. Download it through their Github page. Instead of just the plugin, what you get when you download is actually an entire UE4 project with the OSVR plugin installed. However, you may notice that the project can’t be run and attempts at building always fail. This is, of course, due to the OSVR-Unreal plugin, and you’ll have to fix it by running the “ImportFromSDK.cmd” file found in the root of the OSVR-Unreal download. This command will actually import a bunch of files into the plugin’s directory from the SDK, which will then allow you to successfully build the UE4 project. This seems necessary due to the file size of the transfer (the plugin goes from like 210k to a whopping 663 MB after transfer). Unfortunately for us here at Soverance, this command file did not work on the first try. And of course, the documentation on this process just assumes you’ve already completed this step.


While I could find no reference to this in Razer’s documentation, I did find it in this forum thread, where apparently the “ImportFromSDK.cmd” file cannot be successfully run while the installed OSVR SDK resides in a path that contains spaces. For whatever reason, the “ImportFromSDK.cmd” fail just stops executing when it hits a path with a space. So if you installed your SDK at “C:OSVR“, then you’re good! If you picked “C:Program FilesOSVR“, well… you’re out of luck. Go edit the SDK’s path until it has no spaces whatsoever, and then you’ll have to re-run the “add_sdk_to_registry.cmd” file so you computer knows where to find it’s new location.

Once your SDK has no spaces in it’s path, return to the OSVR-Unreal project and run the “ImportFromSDK.cmd” file. It’ll hopefully find the SDK this time, and import the necessary files into the plugin’s directory. You can then successfully build and run the UE4 editor.

Before you open the UE4 editor, you will need to start the OSVR server. You’ll find it in the SDK’s bin directory, as an executable named “osvr_server.exe“. Run this file to open a command line interface which will give you some debug info. You’ll need to have this server running any time you wish to use the OSVR HDK, and before you start the UE4 editor.

For us, the downloaded project wasn’t going to cut it to start with OSVR development. We’ve already got a project file with a game in it, and we needed the plugin installed into our project. Luckily, it was as easy as copying the entire OSVR plugin directory, and pasting it into our project for Ethereal Legends. A quick rebuild later, and we were up and running.

Some quick caveats to working with OSVR in Unreal Engine:

  • Not UE4-specific: the OSVR headset works as an extended monitor, and seems to set it’s display to portrait mode when physically looking at it, even though the Nvidia control panel claimed it was in landscape mode. We had better results by swapping the rotation of the OSVR display to portrait mode, which would make the display render in landscape mode. It’s swapped, and makes for a strange user experience.
  • Also not UE4-specific, but the device doesn’t seem to have a “Saver” mode like the Rift does, and therefore it’s screen is on full power 100% of the time. We only had it active for a couple hours, and it definitely started getting warm. A 12-hour development session might melt this thing.
  • Definitely UE4 specific: You will need to disable ALL other virtual reality plugins in the editor, including Oculus and Steam VR. This will likely cause an editor restart, if you had them enabled previously.
  • We tried this using UE 4.9.2 and the OSVR SDK 0.6.193. There doesn’t seem to be a way to use a Direct Mode like the Rift has, and every time we tried to play in Standalone mode, the game would crash with OSVR as the culprit (I fired off a few crash reports to Epic, but I don’t recall the exact error. I’ll look again later.) We were only able to get the OSVR headset to work with the Unreal Editor by using the “Play VR-Preview” mode, and the PIE window had to be set to 1920×1080 beforehand to ensure maximum resolution.
  • Because Unreal’s PIE window pops up on whatever screen has the main editor window, the only solutions we had were to either set the OSVR HDK as the main monitor (an awful solution), or drag the editor’s main window over to the headset’s screen, and then hit the PIE button. For development purposes, this process is a time-wasting nightmare. Every time you want to test something you now have to drag the window over, peek through the lenses to find your cursor and hit the button, playtest it, then drag the window back over to continue editing. Oh and good luck finding the cursor again to do that, now that you can’t really see the editor window. I’m having DK1 nightmares all over again.
  • Even though OSVR has a cool little belt clip (which will be really nice with motion controllers), there are still freaking cables EVERYWHERE.

Overall, implementing OSVR support into Ethereal Legends made for a pretty fun evening, as Jacob and I got everything unpacked, installed, and running. We’re pretty impressed with the quality of the OSVR hardware, though there are certainly some points to be scored in the software and documentation departments. We haven’t had the opportunity to play with the OSVR positional tracking yet, but we’ll get to that soon. We’re sure Razer will continue to put support behind OSVR and turn it into something great, and we’re happy to be on-board at an early stage to help show what we can do with the tech. Should make for an interesting ride!


If you enjoyed this post, follow us on Twitter and keep up with our work! Also be sure to check out Ethereal Legends, coming in 2016!

Read More

Tutorial: Unreal Tournament style Lifts in Blueprint

October 18, 2015
/ / /

I made a quick tutorial to show how to make lift actors, similar to those found in Unreal Tournament. I figured they were a pretty cool way to help navigate maps vertically, and I wanted them for the new design of Ethereal Legends to help us get our character around the world. So here’s a recreation of the lifts found in UT, to work in 100% Blueprints.

Read More

Tutorial: iTween Missing Reference Exception after Application.LoadLevel

February 23, 2014
/ / /

A Unity C# tutorial on fixing missing reference exception errors thrown by iTween after using Application.LoadLevel.

Calling Application.LoadLevel in the middle of a tween will cause iTween to maintain the object references even though the objects attached to them are now gone. This causes the tweens array list to be incorrect, and iTween.Count() to be inaccurate.

To fix this issue, you must reset the array list manually. Create a new function inside iTween.cs to reset the tweens array by making a new list that is of the same type (you’ll find the type at the top of the file, where tweens is initially declared).

public static void Destructor()
        // Deletes all references just before destruction
        // your file may have a different list type, such as
        // tweens = new ArrayList(); or; tweens = new List();
        tweens = new List<Dictionary<object, object>>();

You can then call this function in your classes prior to using Application.LoadLevel. This will destroy the current list, allowing the newly loaded level to create a new list with proper references.

void GameOver()

Alternatively, you could also call DontDestroyOnLoad() on each gameObject you tween.

Read More

Tutorial: Light Functions in UDK

January 29, 2014
/ / /

Here I’ll show you a quick video of how I used light functions in UDK to bring simple fire to life in my Gothic Cathedral demo.

I forgot to mention this in the video, but any material you create to be used as a light function will need to have this property enabled: MUTUALLY EXCLUSIVE USAGE Be sure to tick “Used as Light Function” in order for this material to, well, be used as a light function…..


Below you’ll find a still image of the material I built for this light function. You may also be interested to know that I used this same technique to achieve the stained glass lighting for the Gothic Cathedral. For stained glass, it was as simple as creating a new light function material that added the stained glass texture to an emissive node. Nothing fancy about it like the one below, just texture to emissive. Though you’ll also need to make the static mesh with an emissive material to achieve the proper effect.


Read More

Tutorial: Scaleform HUD

March 20, 2013
/ / /

EDIT:  8/24/2015

Due to some changes in our services with Google Drive, I no longer have access to the presentation file that originally formed this tutorial. Luckily, the three videos involved still remain on our YouTube channel and are now embedded on this page. I’ve also recovered the UnrealScript classes via Pastebin, which are now linked below.

Below you’ll find a new tutorial for creating a working Scaleform HUD. I recently began working on this HUD project, and during my research I came across a number of tutorials that were of exceptional quality, but a bit outdated. Many of the tutorials I found were a few years old at best, operating on deprecated code from previous builds of UDK. It took a few hours of research to figure out how to make it the UnrealScript work with a more current version of UDK. During that research I found a few threads on this very forum where other people had run into the same issue, so I figured I’d shoot a couple quick videos and put it all together here for your perusal.

I’ve also posted this on the Epic Games forums, of which you’ll find the thread here:




Read More