We’re going to take a look at Crayta’s world editing in this post, but before we do, I have to say that my experience with the editor is limited, so this is not a tutorial. I spent a good part of a day working with it, however, and have kicked several tires, but ultimately feel as if there’s a whole lot more to uncover.
As I had written in my initial post about Crayta, my experience with these “tools for the masses” applications has been colored by Microsoft’s failed Project Spark. While Spark had been marketed in ways that promised users the ability to create “games”, the reality was that such creations were very, very limited in what could be accomplished. Whether it was a tech issue, a scope issue, or simply a shortage of effort, Project Spark was very disappointing.
Based on what I had seen in Crayta prior to launch, I had no expectation that it would solve Spark’s shortcomings for two reasons. The first was that as a “free” product for Stadia Pro users, Unit 2 Games would need to make money over the long haul. Buying the app outright was certainly going to be one way to accomplish this, but I also expected that there would be some in-app sales to generate ongoing revenue. As Spark wanted to sell you more goods to build your worlds, I anticipated that Crayta might also sell you unlocks for more building props. Obviously, this would hobble the creative process and limit the “best” toolset to those who could afford to pay for it. The second is that in order to really “wow” people, the tools would have to be simple enough for those who want to make something quick for their friends, but also offer hidden depths for power-users to get their hands into the guts of the app. Cross-pollination of these two camps would have to be made simple, so the power-users could make items for non power-users with drag-and-drop simplicity. This would result in some kind of marketplace, possibly with a third-tier currency that would reward power-users who make popular stuff, get their work featured, and let FOMO drive the quick-and-dirty crowd towards learning how to expand their experience and grow the user base who would then have to spend money in order to unlock advanced features.
So, how’s that working in Crayta?
When you opt to create a new world, you can select an “Empty” world, or start with a template that provides several key items that will make creation of a particular type of world easier. For example, a team deathmatch world will provide you with weapons, the ability to form teams, score tracking, and power-ups. Each of the starter kit worlds are represented in the launch-day “Featured” games so if you want to understand what can be accomplished with one of these kits, play the official game first.
Since I’m not development wimp, I chose the “Empty Game” template and started off in the Void.
Crayta uses voxels for their building tools, which is a word we’ve not heard in a while. As a result, you build using cubes. When you start, you don’t have any cubes equipped in your hotbar. If you want to do any work, you have to open the Asset Library and select some items to add to the bar.
Here’s my first revised opinion and praise for Crayta: They give you a shitload of blocks to use, and none of them appear to be behind a paywall.
The asset library has several tabs, with the first being the voxel building blocks you can use to build up your world. Meshes are objects that you can add that aren’t blocks.
This is followed by effects, sounds, primitives, templates from other users or Unit 2 Games, worlds, and voxel meshes. This is where things get murky: voxels, meshes, effects, and sounds make sense as we can see or hear them in the world when placed, but the other options don’t provide a whole lot of guidance in-app on how to use them.
Once you choose an item and place it on your hotbar, you can select it using the numbers on your keyboard. Once selected, using the scroll wheel will resize the voxel.
Placing items is intuitive, but a little watery; they do snap together, but can snap on fractional faces meaning you can have overhang. This makes exact placement for, say, creating a wall an exercise in precision mouse-work. The guides you see on the ground and on the blank voxel can help you align placement.
Crayta offers an advanced UI for building. Here you get the asset options on the right, properties on the left, and advanced tools along the top including the ability to work with the pre-established ground plane. You can use WASD to fly around the zone, and the mouse to tilt and pan the view.
When you start, your “world” is of a fixed size, which falls in line with Project Spark‘s offering, although I believe you can expand this landmass using a voxel mesh. Not sure how far you can build up, though. Truthfully, this landmass seems nicely generous, and such limits only foster creativity.
Placement of voxels is the primary way to design a world, and the addition of meshes, effects, and sounds bring that world to life. However, a world of “stuff” isn’t going to get you project into the Featured rotation, so we have to get behind the curtain and work with properties.
Here I’ve added a “cash register” mesh object to the world and have opened its properties. At the top of the panel we have values which can affect the location of the object in the world, in case the drag-and-drop method wasn’t able to get the item in the place you really wanted it to occupy. These properties are available to script against, so you could switch off the visible property in response to world or player conditions, for example.
Templates, Scripts, and Interactions
Programming at its most basic is taking an input, using data to make a decision, and altering some part of the application as a result. In games, we expect that when players take an action on an entity in the game world, something is going to happen. It could be that pressing the left mouse button fires a weapon, which spawns bullet assets that move in a straight line. When those assets collide with a target — say, an explosive barrel — the game should remove the untouched barrel mesh and replace it with a damaged barrel mesh, display an explosion particle system, and play the “explosion.ogg” audio clip. As players, we understand that we’re shooting at the barrel to make it explode, but in game terms, we need scripts to make all of this happen.
Scripts can be added from the menu at the top of the properties column, and can be edited by clicking the “edit” icon next to the script name that’s added at the bottom of the properties stack. From here, you are given a tabbed editor which allows you to open several scripts at once, and also keep access to the game world handy.
Crayta uses Lua as it’s scripting language, so if you know Lua, you’re in luck! If not, Lua is tried, true, and pretty easy to pick up if you understand basic scripting tropes.
Second opinion revision: Crayta is far more powerful than I had imagined.
My opinion of Crayta has shot up several notches with this discovery. In fact, a quick search for “crayta scripting” lead me to their developer site which I am going to have to spend time with.
Scripts can be assigned to these “on” events for the object in the game world so that when the assigned event happens to the object, the script is run and the world affected. You can also handle events directly in script, expose public functions, communicate between scripted objects, broadcast to other objects in in the world, and so much more.
In the initial attempt, pictured above, I animated the door opening and closing when a user interacts with it. It seems all doors have animations, although none come with a pre-wired script to fire those animations.
On The Horizon
Now that I have found the script editor, I want to walk back my previous association with Project Spark and say that Crayta looks to be on a better path than it’s predecessor. Lua scripting alone opens up potential.
One discovery that blew my mind was that a Crayta world can have sub-worlds, allowing players to travel between them.
After creating a sub-world in the project, I added a trigger behind a door. A trigger is an invisible volume which fires a script when a player enters or leaves the volume. When the player enters, I send them to a world specified by a public property on that script. Although I was having issues with the exact syntax of the setup (as well as some unclear non-error error messages), I got some feedback directly from the devs who were making themselves available to answer such questions on the official Discord and on Reddit. More points to Crayta, then.
In light of all of this discovery, I am now more optimistic for what Crayta can provide. Allowing Lua scripting of objects and interaction, and the potential to link worlds, means that the simplistic nature of of the games that are currently available at launch points more towards having to provide expedient samples and does not reflect the width and breadth of what the platform is able to provide.