iFactor 1.0.0 Released

That’s right, 1.0.0!

This release adds three computer opponents in varying difficulty levels to enable single-player gameplay:

  • The Easy opponent chooses a legal move at random so will often make dumb moves.

  • The Medium opponent will only search 2 moves into the future so it can make strategic mistakes but should be pretty good at tactical moves.

  • The Hard opponent is given 5 seconds to analyze as any moves as possible to find the best move possible. (within the time constraints)

To play against a computer opponent choose "Local Game" from the main menu then choose one of the three opponent levels.

1.0.0 also integrates the latest versions of the frameworks and libraries used to make iFactor.

This release will be rolling out to the various app stores as is is approved by each store.

P.S. Don’t forget to give the gift of candyheart.website this Valentine's Day!

iFactor 0.4.6 Rolling Out Now

A new update for iFactor is rolling out on the various platforms where you can get the game. Changes:

  • Updated to the latest version of Unity and other libraries.

  • Added particle effects when capturing products.

  • Fixed an issue that could cause resuming a game to fail.

Check out the Steam community announcement for instructions on how to participate in the beta there.

Additionally, DRM-free download links have been added to the iFactor page.

iFactor-particles.gif

iFactor Is Now Free!

Hello,

(and yes, I am still alive)

I apologize for not putting up even a small update but I have been very busy with work for the last year and a half. I am still working on my games whenever I have the time.

As of yesterday I have submitted requests to make iFactor free on all platforms. This is for two reasons:

  1. iFactor sold very few copies and many of those were refunded after people quickly got all the achievements.

  2. Charging for iFactor was meant to recoup the cost of publishing to the various digital storefronts. However, it is now clear that iFactor will never sell enough to break even. At this point charging for iFactor is only pricing people out of playing the game. It is my hope that this change will enable more people to play the game.

To everyone who did purchase the game: thank you so much. Your support means a lot to me. I don’t have anything special with which to reward you for buying the game before it was free, but I am investigating options.

Progress on Fragmented Galaxy is continuing as usual. (meaning slowly) I am working on a re-write which uses the latest ECS features in Unity to ensure that the game stays performant at large scales.

Another item I’d like to mention is that I am almost done with my next mini-game called Trends. This will be free for all platforms from the beginning. For now I am planning to release on Steam for Mac, Windows, and Linux only - but iOS and Android builds are not impossible.

Also, after Trends comes out I’d like to release an update for iFactor that uses the latest version of Unity.

Thanks again,

-Tristan

iFactor 0.4.5 Released

This release is geared toward fixing an issue where the "Wow, just wow" achievement could not be unlocked if a multiplayer game had previously been won. 

This version is also built with the latest version of Unity and the Photon multiplayer framework. Unfortunately this means that previous versions (0.4.4 and before) do not play with 0.4.5 and above. 

0.4.5 is already out on Steam and online. The Mac App Store, iOS, Android, and Windows App Store versions are being processed by their respective stores now.

iFactor is 51% off on Steam right now, as part of the summer sale!

Path-Finding in 3D

The first step is for the user to give a ship a move command. In this example, I told the ship to move to two waypoints. The list of waypoints are stored and a waypoint is removed when the ship arrives at each one. 

However, there are some objects in the ship's way: Obstruction 1 and Obstruction 2. 

To calculate the path, the list of input waypoints (which is really treated like a queue) are put onto a stack of proto-waypoints. (see a visualization below)

The green line is the path from the ship's current location through the waypoints. 

The green line is the path from the ship's current location through the waypoints. 

Then the algorithm enters into a loop. The first step of the loop is to test the first proto-waypoint on the stack. A sphere is cast from the ship toward the proto-waypoint, using a radius that is approximately that of the ship. In this case the sphere cast detects Obstruction 1. A point is then calculated as an intermediate waypoint to avoid the obstacle using this formula: 

The new waypoint is pushed onto the stack of proto-waypoints and the loop repeats. 

On the next iteration of the loop, the route between the ship and the first proto-waypoint is tested, just like before, except now the first proto-waypoint is the new avoidance waypoint. (see the image below)

The green line represents the currently calculated path. The red line is the direct path between the ship and the first user-input waypoint. The blue line is showing the obstacle that was detected when testing the proto-waypoint. The black line is t…

The green line represents the currently calculated path. The red line is the direct path between the ship and the first user-input waypoint. The blue line is showing the obstacle that was detected when testing the proto-waypoint. The black line is the avoidance vector, between the avoidance waypoint and the spherecast collision point. 

Since there are no obstacles between the ship and the proto-waypoint, the proto-waypoint is popped off the stack and added to the real waypoint list. 

Now the loop switches perspectives from the ship to the new real waypoint, so route tests originate from there. 

The loop begins another iteration, testing the route from the avoidance waypoint to the first proto-waypoint on the stack, which is the first user-input waypoint. Another avoidance waypoint is calculated and put onto the stack. 

The loop iterates again and sees no obstacles on the route to the first proto-waypoint on the stack, popping it from the stack, adding it to the real waypoint list, and shifting perspective again. 

Now clear of the first obstacle, the loop sees no obstacles en route to the first proto-waypoint on the stack, which is the first user-input waypoint. The proto-waypoint is popped, added, and the perspective is shifted. 

The loop continues this way until there are no more proto-waypoints on the stack, or the iteration limit is reached. 

The final path. 

The final path. 

The iteration limiter ensures that very complicated paths do not create lag in the game by not calculating paths that will be traversed far in the future. 

The path is calculated when the move command is given, then every few seconds after that, in case new obstacles get in the way. Below is a video of the path being updated every 0.5 seconds. 

It is important to note that the green line is not the exact path of the ship. The ship's movement system is responsible for producing thrust in the appropriate direction to get the ship to the next waypoint. This system will account for unexpected collisions/forces such as incoming weapons fire by adjusting the ship's thrust. 

More Virtual Reality

A new version of the VR build has been released. It is using a new version of Unity and includes tons of bug fixes so it now runs very smoothly. 

Also included are some new ships to command, including a cruiser and a mobile space station. 

Next, I want to introduce a basic resource collection mechanic!

Try out the new build here. (requires the HTC Vive and controllers)

Virtual Reality

Today I released my first VR version of Fragmented Galaxy. (download it here) Right now it requires the motion controls that only the HTC Vive has. The controls may be a bit unconventional because of the new input devices so here is a small primer: 

Navigation

You can grab any location in the world and translate it. Do this by holding down the grip button on any controller and moving that controller around. 

You can also scale the world (zoom in/out) in order to move around quickly, view things more strategically, or see more details. Do this by holding the grip buttons on both the controllers and moving the controllers. 

This takes some practice and really requires that you experience it in VR to understand. Think of it like Ender moving his veiw around in the Ender's Game movie

Ship Control

To bring up the selection reticle, press the trigger of the green controller slightly (the controllers are color-coded in-game). Move the selection reticle over a ship and press the trigger fully to select a ship. Clicking the trigger over other ships will add those ships to your selection. Click and hold the trigger until you feel a pulse to only select the ships in the reticle. 

To start plotting a course for your ships, lightly press the trigger on the red controller. A line will be drawn from the ships to the red controller. (other reference lines will also be shown) Click the trigger to set a waypoint. If you just want the ships to move to that location, let go of the trigger. Otherwise, move the red controller and click the trigger again to add more waypoints. Let go of the trigger to tell the ships to go to all the waypoints. 

Navigation using the controller grip buttons works while plotting a course, just keep the trigger lightly pressed while navigating. 

Other commands can be found on the green controller's touch pad. Right now the only useful one is the stop command which cancels all selected ships' commands. To show the menu, lightly touch the touch pad. Move your thumb to highlight an option and press on the touchpad to select that menu item. 

 

There are also other controls but I will let you discover them on your own. This VR version isn't quite up-to-date with version 1.4.0 but it is a solid start. 


Also, I will be at RTX again this year. See you in Austin, TX in a few short hours! 

1.4.0 Released

I am pleased to announce the release of Fragmented Galaxy version 1.4.0. To see all changes, go to the Version History. Download at the Fragmented Galaxy page. 

I added a floating origin system to display distant objects and a new ship model. 

This version also includes an upgrade to the newest version of Unity (5.2) and the assets I use with Unity. 

There are a few known issues that I couldn't fix before I released but they aren't game breaking: 

  • Lines with one point far off-camera aren't always drawn correctly. 
  • While focused on a moving object, far and distant objects appear to 'jitter' in the sky. 
  • Performance is bad when the camera moves. Necessary until a better floating-origin system is devised. 

The State of the Build

So, no new build this week. There are two issues I want to resolve before letting you guys play with it, both pertaining to integrating the floating-origin system. 

The floating origin system allows me to render very large scenes, the size of a planetary system. The camera sits in the middle and the world moves around the camera. The objects in the world are split into three categories: near, far, and distant. The near-world is normal, with physics enabled and objects of a regular size. The near-world is a cube only only 20km on each edge due to 32-bit floating-point number accuracy issues. The far-world is also 20km on each edge but all the objects are 10,000 times smaller, move 10,000 times more slowly when the camera moves, and is rendered before the near-world to give the illusion that it is farther away. These objects are visible but do not interact with the physics of the world. The same goes for the distant-world but by another factor of 10,000. 

The first issue is that all of the line drawing is done in world space, not in floating origin space. The same goes for move-to-position commands given to ships. This needs to be tied to the near-world otherwise all lines and commands will appear to be relative to the camera, moving around when the view moves. I don't think this will be terribly difficult to fix. 

The second issue is that of the Unity physics system. As it tuns out, PhysX doesn't like having all of the physics bodies in a scene moved every frame because then it has to recalculate everything every frame. That is collisions, velocity, everything. This causes a large performance hit but more than that, the ships jitter all over the place because their velocities are constantly being erased. To solve this I can update the position of the physics bodies less frequently or during the physics update cycle. The first solution would allow the camera to move a certain distance then snap it back to the origin. Every time a snap happens, PhysX will freak out but at least it will be less often. Updating during the physics cycle is problematic because physics changes are made visible before the camera movement code makes any movement so the world would move one frame after the command to do so was given, thus incurring input lag. 

Neither option is particularly appealing. I'm still experimenting with ways to make the side effects less noticeable and when I have something more playable I'll release it to you fine folks! 

Thanks! 

Fragmented Galaxy Development Hiatus

Unfortunately, due to constraints put on my by my employer, I can no longer contribute to Fragmented Galaxy while I am employed by my employer. 

I will still post on this blog from time to time with my musings on various subjects but there will be no further versions of Fragmented Galaxy until I can work something out with my employer. 

I am still dedicated to making game come true in the future so keep watching this place for when I can continue development. 

Thanks for your support!