The Big One.
almost 9 years ago
– Fri, Nov 06, 2015 at 10:47:15 PM
A moment in the sun
At GenCon 2015 this year, we unveiled the first public appearance of Mage Hand (D20PRO Unlimited) to the world. We ran a large number of sessions using this very early build of the application with a mixed amount of success. The rotation capabilities of the map elements worked as intended, but the resource management was exceedingly difficult [to manage] and none of the network layer were present at the time.
The features, from a Kickstarter point of view, which were available in this build included Unlimited Grids as well as the a decent amount of the Unlimited Rules, Unlimited Creatures, and the Shadow casting Fog of War.
We also demonstrated the Multi-touch, multi-user capabilities allowing for widget rotation, simultaneous token movement and interaction as well as the ability to support touch events across multiple windows.
At the same event we showed our progress on the mobile character sheet system. Unfortunately, we had yet to associate the HTTP/Rest server in such a way that we were able to demo it's full capabilities this past July.
A difficult and winding path
Since then, some of you have had the opportunity to see this engine in action and have some hands on experience with both its strengths and weaknesses.
The weaknesses, as reported, primarily center around the UI and access to the features including proper shadow casting (in the released build).
Thraxxis has spent the intervening months working to improve and expand the Mage Hand platform to fully support Shadow casting, the Unlimited creatures data modeling, and a more robust board/layer solution (Unlimited Grids) – many of which proved to be substantially more time consuming due to various unforeseen technical issues and limitations.
The project has metamorphosed, denoted through a handful of name changes, to reflect some design goal changes which were necessary to provide the level of product we’re committed to providing.
When the Kickstarter launched, the intent was for the product to be a direct descendant of d20Pro Classic – an iterative build which would lead us to D20PRO Unlimited. Despite the early success, we quickly encountered several technical limitations due to the state and language of the original code base.
This resulted in a push to move to a fresher coding base using JavaFX. Thus nBoard was introduced to the community and work continued quite quickly. As a result of the shift to an alternate code base, we split some of our attention to begin investigating and building out technology previews using Unity3D.
At the time, Unity3D was a pretty solid platform however, the road to a full 3D/2D hybrid VTT seemed particularly daunting. All the while Thraxxis and team continued work on nBoard refinement and converted the project into Mage Hand – still a JavaFX based VTT but now designed from the ground up to be a platform for rulesets.
A pathway to the future
While Thraxxis and team continued work, a smaller team has been paralleling some of their efforts using Unity3D. This has not been a focus for the company but more of a rapid way to proof concepts for UI development and express ideas. Owlbear and some of the other Mesa Mundi staff are much more comfortable in C# than in Java.
This leads us to the present. We’re at a point where Thraxxis has agreed that the current Java direction is going to prove to be too long of a road. Java requires building an exceeding percentage of core functions for Mage Hand from scratch. In response to this, we have spent the last few weeks compiling additional proofs of concept for technological components as well as evaluating feature requirements as they related to existing Unity3D engine features. We, as a complete group, are going to migrate the entire project into Unity3D.
The decision to do this is based on several factors. The biggest factor being portability of code. With Unity3D we can deploy to mobile, desktop and web, as well as a few other odd targets. Our focus will be predominately on the desktop experience. However, the final product should function in a client mode on mobile as well!
The second reason of note is timeline. Over the years, Mesa Mundi has done a fair amount of contract work – nearly all of which has been Unity3D based. We have a lot of background and experience in building complex Unity applications and are confident that we can provide Mage Hand in Unity faster than in Java.
Lastly, we are completely confident that we can provide all of the backed features using Unity3D as well as provide a substantially more intuitive rules and content creation framework. This is key to strengthening our community and allowing anyone to build on the platform. Unity3D immediately allows for several technologies which provide access at runtime, as well as in Editor (using Unity3D Free edition), that enable creators and publishers to create phenomenal additions to the application.
Are we home yet?
We’ll go over a few of the features we’ve already stubbed out in the next section. For now, we want to talk timeline.
First off, we’re not 100% done with the updated roadmap. Moving to Unity3D is a big change and we want to double check our figures, dot our I’s, and cross our T’s. At this stage, I (Owlbear) am comfortable saying that we’ll be able to deliver our first Kickstarter release of Mage Hand in Q2/Q3 2016. With full completion by Q4 barring any catastrophic events – rapture, tsunami, etc. It is highly likely that we can complete sooner, however, I want to stick to a conservative view until we’re done mapping the features to the available hours in the days/weeks/months ahead.
The second reason for the conservative estimate is that we’re in the final rounds of securing capital funding. When the funding goes through, we’ll be able to expand the team slightly and build faster. Those developers out there know that this is not a 1:1 ratio, adding additional developers can enhance some aspects of a coding task but not all.
A few warm bodies
In addition to adding coding staff, we’ll be expanding our Marketing and Sales staff, likely by one or two people. This will free up Thraxxis and Owlbear to focus on coding and development as, in conjunction with Joe Richardson (who’s awesome btw) they have had to deal with aspects related to publishers, content creation and management of these elements.
In order for a Virtual Tabletop to thrive, a vibrant Marketplace is a must. Retooling and revamping our Marketplace is a requirement as we move forward.
In addition to the Marketplace, we are striving to keep momentum in rolling some of the Mage Hand features out to you immediately through minor updates to d20Pro Classic. Some of the changes and developments which Mage Hand includes are immediately viable in Classic. As a result, Thraxxis has been spending a small amount of time retro-fitting these features into the product which nearly all of you have access too. Honestly, only the tip-jar/hall of famers didn’t gain access to Classic as part of the Kickstarter.
What this means is that in the next week to two weeks, you’ll see a handful of features appear in an update to Classic.
A couple of these features include SRD integration via a web space widget and a Trigger system which will allow Classic to connect to a popular sound board.
As development on Mage Hand continues, we will attach other features to d20Pro Classic as appropriate. Doing so will give everyone access to certain features of Mage Hand while waiting for the Alpha, Beta and Pre-Release phases.
Wait, phases?
I know, I said I was going to be vague about the timeline and I was. What I can tell you now is this – We plan to release Mage Hand in a series of phases. One of the core changes to the methodology in migrating to Unity3D is that we’re building the Network Layer immediately. This infrastructure will be a core component at every step of development enabling the first, and every release after, to communicate with the same version of the application.
- Phase I – Technology Preview to Early Access and Developer Level backers
- Phase II – Alpha Release to Early Access and Developer Level backers
- Phase III – Closed Beta for Early Access and Developer Level backers
- Phase IV – Open Beta for all Kickstarter Backers above the Legacy Upgrade tier
- Phase V – Open Beta for all Kickstarter Backers and Pre-orders
- Phase VI – Public Beta (if needed)
- Phase VII – Public Release
We will iterate over the above path for major feature upgrades such as new systems/rule-sets – i.e. Early Access and Developer Level backers will have first experience with these additional pieces as they prepare for launch.
Show and tell
I know there’s bound to be a billion questions, or at least some multiple of the ~1,800 of you out there who have supported our efforts. Let me start this section by saying how amazingly grateful we are for your support then and now.
It is because of your belief in our project that we’ve come this far. And it is through your support that we can push the rest of the way through.
To give you a bit of a glimpse behind the developer scenes, I’ve prepared a few videos illustrating some of the functions as we’ve realized them within Unity3D. This should give you a sense of what we’re doing and where we’re at from a technology stand point.
2D Map Editor in and out of Engine
Here we have a sample map created using the 2D editing tools we’re working on. This specific video is illustrating access through the Unity3D Editor window. However, when all’s said and done, you’ll be able to do the same type of work from within the App itself!
One of the cooler features of this solution is the ability to use procedural textures for fill while using generated art for the wall textures.
In the video, I’m using a smart snapping method to align points to each other. At runtime, we’ll initially be supplying a grid snap mechanic and will evaluate the smart snapping option – the latter will likely be pushed to a future update.
The method of drawing I’m using in the video is called subtractive. The idea is pretty straight forward, you build out a large shape and remove parts to make your final object. If you’ve never worked with this method before it can be confusing at first, however once you’ve done it once or twice you’ll likely find it remarkably easy.
In the following video I show some extremely crude Runtime editor support. At this stage, as a technology demo, it was unnecessary to build out drag handles and other UI controls. As a result, the presented method of editing in the video is pick by nearest neighbor. Not something we’d ship with!
Let there be light
One of my favorite features of utilizing the 2D editor for map making is that we can programmatically create “walls” for shadow casting and light mapping. This allows for rapid dynamic content creation which is immediately useful for VTT.
In addition to having shadow casting work without having to add in extra blockers, the 2D map editor features allow for slightly transparent edges on walls. This means that the light doesn’t just stop at the Wall edge, preventing the player from seeing that there IS a wall, it penetrates just a few pixels in to give the player a chance to recognize the map boundaries for what they are.
This is configurable as part of the brush you would draw your maps with. Depending on how far down the editor path we get, you’ll be able to pull in art from existing maps to create brushes which then allow you to extend those maps in roughly the same style.
The brush in the examples of the 2D editor and the shadow casting all use a section of wall from MonkeyBlood Designs.
The final video for shadow casting shows another map created using the 2D engine and our sample of MBD’s wall art.
In addition, this video shows the ability to use lighting effects even when fog of war is not enabled.
Some of the features of our existing lights are as follows:
Color, Range, Fall-off, Intensity, Sharpness, Opacity, Angle, Halo and Blend Mode.
- The Color option is pretty obvious, allowing you to configure what color any given light source is on the map.
- Range allows you to set the maximum reach of the light. This is the distance from center to complete darkness.
- Fall-off controls the hazy area near the maximum range of the light. Using Fall-off controls you can create regions of shadowy illumination or create universally dim lighting.
- Intensity is the control for the amount of light at origin and is limited by the Fall-off value.
- Sharpness determines if the light has a hazy border or no shadowy area.
- Opacity allows you to control how much the light source changes the color of the map and other graphical elements.
- Angle allows for you to change the light source a complete circle into a pie slice between 1 and 359 degrees.
- Halo paints an additional lighting effect around the origin. This effect doesn’t do anything mechanically, but it does create an interesting bloom effect at origin. Cool for glowing objects which also shed light such as a torch.
- Blend Mode controls how the light effects the surrounding area as well as how other lights effect each other.
Map Editor and Lighting alone a VTT is not
As I’m sure Master Yoda would agree, the previous features are flashy, but they’re not really indicative of a good reason to move to Unity3D compared to our Java work thus far. To that end, let me introduce the next video in the series.
In this installment, I would like to show you an early tech preview of a virtual tabletop built in Unity3D using some of our design language and concepts from nBoard/Mage Hand. This demo was designed specifically for Android/iOS and so the behavior on desktop is slightly less than what I would have liked to illustrate here. The core bit which fails in the video is the path highlighting. You’ll see that as I drag some tokens around, the system draws a path from some random grid location to the lower left corner.
On mobile this behavior is non-existent. It wasn’t worth the additional time to fix it for the video, as we’ll be replacing this pathfinding solution with a more mature version for our Unity3D builds.
With caveat in hand, the features of note in this video are as follow:
- Multiple Token movement (not demonstrable on my desktop)
- Pathfinding with staggered/timed movement and path decoration
- Dynamic lighting and reveal
- True historical Fog of War
- Layered map elements allowing for travel under scene elements
- Animated effects (fire pit, hit/miss animations)
- Early prototype UI for shared space play.
- Skin-able UI
- Rotatable and orientation dependent UI elements – you’ll note that when a character page appears or a damage dialog, it faces the UI marker hosting the Player/Creature’s token image
- Map panning, zooming and rotation (rotation disabled for this build)
- Shadow Casting/Fog of War Zones – prevents player from revealing further into the terrain than the GM would like
- Large size creatures configured as vision blocking (configurable)
- Area of effect templates used to show target ranges for actions
- Table lighting effects used to turn a black and white map into a cavern
- Auto light mapping by 3D/2D tile elements – this map is a mix of SketchUp Built tiles by MonkeyBlood Designs as well as 2D tiles which also block lighting effects similar to the Editor illustrated previously
There are a handful of other bits and pieces of note in the combined tech demo. However, the one thing which is not represented here is dice.
A die in the hand
As some of you may be aware, Mesa Mundi was responsible for the coding work for Games Workshop’s recent Warhammer 40,000: Assault Dice app for iOS. This technology is something we developed in conjunction with Lifeform Entertainment and have retained rights to re-use the tech in Mage Hand and other places.
What this means for the current project is that we have access to a best-in-class physics-based dice simulation which is designed to be light weight and capable of rolling 100’s of dice simultaneously –for those times when you really need to roll an Empowered and Heightened Disintegrate at your party's wizard.
Earlier I mentioned how the dice technology can, and will, be accessible from Classic. This is a near term goal and does not distract from the greater whole. One of the networking systems being built for Mage Hand allows Mage Hand, and it’s components, to pass messages and trigger events between clients and servers.
RPG Dice for Classic is a slight re-roll of this technology using “desktop pet” overlay techniquesto allow you to roll 3D dice via the d20Pro Trigger system and receive/process results.
Here’s a quick view of what it would look like. Keep in mind that this is a proof of concept/technology demo so the controls are being run from within Unity3D (the window on the right). The overlay product would not need or have that control window as all of the controls will be native to d20Pro Classic through the Trigger system.
As we develop more features for Mage Hand, we will continue to push these to you in bits and pieces which can augment your existing game play. Once we move into the Alpha and Beta stages, the mini-release will stop -- to be fair, they are likely to stop before then. The lead up to Alpha will be substantial and focused.
In closing
The road has been long and winding, and there’s been more than one major pothole along the way. However, I feel quite strongly that we’re on the right path here and hope that you still want to come along for this wild ride.
Unity3D is opening a lot of doors for us in addition to the detailed bits above. I hope to be in a position to share some of the additional exciting news regarding partnerships and publishing agreements in the next few weeks. Many of these new opportunities to grow our VTT space are related or dependent on the decision to move onto this new development path. We’re set to take the VTT market by storm!
- Owlbear (and team)