We’re all familiar with feature creep, the adding of features to software until you’ve either bloated the program or significantly deviated from the original intent. Even this early in the process, I suddenly found myself recognizing this happening. While working on some new artwork as I begin adding terrain templates and costs, I realized I was targeting the wrong aesthetic.
First it was lighting. I was considering, as I worked with the art, the effects of torches and other motivated light sources. How was I going represent lighting in the world when, for example, the character is carrying a torch or lantern?
Second it was the miniature. I modeled a quick miniature and rigged it to a skeleton so that I could not only pose it, but do some simple animation.
Lastly, it was the materials. I was thinking in terms of real world materials: stone, marble and the like. read more
Now With Pathfinding
Pathfinding is finally working on the map. After spending some time with a recursive function that just didn’t want to return, I have a functioning shortest-path algorithm implemented. Surprising, I had the most difficulty with moving the miniature off the grid. You’ll notice in the video that not only is it successfully finding its way around the hole in the floor, but you can also drag the miniature over the hole and it solves the path as soon as it’s on the other side.
I’ve spent some time considering different methods of movement, in particular, setting waypoints and evaluating movement at the end of the turn. After picking up and moving the mini around the map countless times, I’m currently inclined to not do waypoints. Picking up the mini and setting it down until all the moves are expended feels the most natural to me, the most like moving a real miniature. If the player really has made a mistake and needs to reset the move, the GM could undo the action and allow the player to redo some or all of the move. read more
What Makes You Special?
There are a number of virtual tabletops for gaming available: Roll20, Tabletop Forge, and RPGTable Online. I was recently asked, what will make your product different from what’s already available? It’s a fair question to ask and a good question to answer. From time to time, it’s important to “justify” your work. To make sure that what you’re doing is unique and addresses existing needs.
So let’s take a look and see what’s the difference between what I’m offering versus other in this space. read more
Movement With Cost
I picked up some VFX work, so I’ve been away from the project for a few days. Now I’m back and working on movement again. I’ve made quite a few changes behind the scenes and added some features up front.
On the back-end, the grid and movement have been completely abstracted to separate classes with support for arbitrary grid size and distance. I’ve also added a main game loop rather than lazily attaching the logic to the camera which is what I had done. read more
Nerd Poker: A Diversion
While setting up podcasts on my new phone, Microsoft helpfully suggested Nerd Poker, Brian Posehn’s weekly podcast of he and his friends playing D&D. It did make me a little suspicious of how much data MS is actually sifting through. I’m not subscribed to any similar podcasts and only my Twitter feed would obviously make the connection. However, I’m going to put aside my suspicions and simply going to appreciate the serendipity of the find.
If you haven’t listened, it’s exactly what it sounds like. And while these sessions may not be exactly what I remember face-to-face gaming to be like, it bears an eerie familiarity. Each podcast is about an hour long and it takes the entire first episode to get the characters rolled-up and introduced. There is a great amount of silliness and distraction, a lot of off color humor, and some confusion about maps and distances and who can see what.
There have only been two episodes so far and I’ll stick with it awhile to see how it develops. As for the utility of the podcast? I think it will be of great service to me to be able to observe gaming sessions without being part of them. To see both the familiar and the unusual. As a tool, this project needs to both account for the commonalities and allow for the unexpected.
More on Moving
I spent the morning re-factoring much of the movement code into a separate class, all the while giving some more thought on the final method for moving the miniature. I’ve been considering setting waypoints: picking up the miniature, moving it a distance, set it down, and then pick it up to move in another direction. This will let me keep the metaphor of lifting the miniature.
Then it occurred to me, what about traps? Let’s say there is a classic 10′ pit trap in the floor. We certainly need to make sure that the player is intending on crossing over that space and, of course, if the trap is sprung, the rest of the move is rendered moot. Traps aren’t the only thing we need to account for. Any number of different checks might need to be resolved before the planned movement can be executed. For example, a Rogue may attempt to move to a wall and then scale it. Or a Warrior might charge through a door, hoping to break it open.
Time for some Photoshop prototyping. The current method I’m considering is using arrows to indicate the movement between waypoints and a die-roll icon whenever a check is required. (The icon, of course, wouldn’t be displayed on the player’s map for hidden checks like traps). Once the move is committed, we evaluate it along the path. The waypoint methodology shouldn’t be too intrusive, I suspect that most practical movement will be in a straight or nearly straight path.
We’ll see how this survives contact with implementation. Anything else I’m overlooking?
Lift and Carry
It was suggested that I try picking up the miniature to move it (Thanks, Jim). I liked the idea of a more natural feel. I’m trying to keep this as tactile as possible.
I’ve made some modifications to the movement code and now we have a lift and carry interface. It does feel better, especially with the static camera.
Unity Lift Movement from C. Lewis Pinder on Vimeo.
There are few things left to do for this style of movement:
- Move the camera as the miniature nears the edge of the screen.
- Switch out some of the hard-coded values for a more programmatic approach.
- Add terrain with height. This will certainly require some extra work, e.g, stairs and slopes.
Moving Things Around
Today I dug into a few Unity features: instantiating objects in script, moving and rotating objects, and ray casting for mouse interface and object collision. The first test, moving the miniature around the map.
I’m still wrestling somewhat with how to do movement on the map. In this first version, clicking on the miniature overlays a grid of areas to which the miniature can be moved. Clicking on a square moves the miniature there, while clicking on the square beneath the miniature cancels the move.
I’m not sure, yet, whether this is best interface for movement. It maintains the classic battlemat idea of discrete grids, but isn’t necessary. Moving the miniature “off the grid” can be every bit as valid. I could display a radius of possible movement, or track the mouse and show possible paths, or display a grid and let the player set “waypoints.” Certainly this is an area that will benefit from testing and iteration.
Test of Miniature Movement from C. Lewis Pinder on Vimeo.
What interaction with the miniature feels most “natural?”
One of the must have features listed in the announcement is an “integrated game system, inspired by old school games that anyone who’s gamed before would quickly understand and simple enough that even new players could join.” The inital work has begun on fantasy rules for use in play. There are a lot of vagaries and the numbers are educated guess based on years of play. They have yet to be play-tested. To keep it simple, for now, the rules are presented as a “one-sheet.” Everything needed for initial play can be found a single page (minus spell lists). The system is entirely d6-based with success rolls based on rolling under some value: an attribute, or a modified to hit roll.
Revisiting some older RPGs, I found that systems like D&D Basic were easy to understand with a high-level of abstraction. Whereas, the AD&D rules that I had always enjoyed thumbing through are pretty obtuse. They read more like a collection of house rules that are shoe-horned into the Basic rules to nearly the breaking point. They Gygaxian prose, too, is a little thick. It gives AD&D a particular flavor, but are poorly suited to clear and precise rules. read more
Powered by Unity
I’ve made the choice to use Unity as my engine. It’s a Fool’s errand in game development to write your own engine unless the thing you need to do is so unusual and so specific that existing tech won’t match your needs.
Call of Duty is still running a long-in-the-tooth and heavily modified variant of the Quake2 engine. When I worked on Medal of Honor it was developed using EAGL, a graphics library originally intended for use with their sports franchises. When Might and Magic made the final leap to real 3D, it was using the LithTech engine. read more