May Update - Networking, Player controls, Character customization
Please keep in mind we are still very early in the development process. Everything is subject to change and is still a work in progress.
Foundational aspects of networked play are up and running. Players can host a game as a listen server (a client that runs both the server logic and the game itself) but early research and planning has been conducted to expand this to a dedicated server option for the future, if need (or player requests) dictate.
Our current technology is developed up to the "Session" level – the functional basics of connectivity, creation, and administration of a game. This includes things like:
- Requesting game info from the server (How many people are playing? Is the game full? Is the game in progress? How long has the server been up? Is it password protected? Am I banned?)
- Requesting player info from clients (What is your handle/in-game name? What character are you playing? What is your "rich presence" status (afk/in menu, etc)?)
- Server: relay session-level events to clients so they know who they are playing with and relay chat messages between clients
Gameplay synchronization is still very primitive, but there has been some fruitful experimentation.
This was one of the areas we were most eager to rebuild coming from the prototype. Unity 4 uses a new (and awesome) animation system that can very tightly and precisely bind the concept of mapping a player's inputs to richly animated outputs. However, having debuted shortly before we started working on the prototype, we encountered a number of challenges with this young, emerging technology. Starting on this system as early as possible also allows us to iterate on it as much as we need to achieve the touch and precision we demand.
For now, controls are divided into two distinct domains, which we've dubbed "exploration" and "combat."
Exploration: Anything non-combat. Tuned for adventuring and exploring. Feels and controls like a top down RPG.
- Crawling, sneaking, sprinting, actions (looting, climbing over things, using cover), interacting with the environment.
Combat: Uses a traditional top-down style dual-axis control scheme (as in the prototype). Tuned for combat, or any other activity that requires precise aiming with the mouse.
- Melee, ranged, etc. Any combat oriented interactions.
[We recorded a quick demo in Unity showing off a select few basic animations being controlled with a mouse/keyboard.]
[Character select screen using temporary prototype assets]
Very early workings of survivor selection (using mostly prototype models as placeholders) and customization menus (newer models below). Currently, you can select your survivor's head (face, hair, facial hair/accessories), torso, and legs. Once you are finished rolling your survivor, you can save it as a "template" that can be loaded and reused in the future.
This feature will be useful while setting up new games, as you won't have to waste time recreating your favorite character load-outs (or have to wait while other players to do the same!) This is just the first layer of character customization. As you travel and collect items in-game, you will acquire a variety of items and pursue developmental options that further distinguish your survivor.
In the example below, we have 2 unique head, torso, leg models being posed and swapped around to show how the customization will work in game.
[Character customization examples]
Other boring but important developments
We are using a fully functioning command console integrated into the game's chat system to perform a number of development and gameplay tasks without having to make complex GUIs direct them. This has been of immeasurable use in testing and debugging (especially in clients that aren't running inside the Unity editor). The system took a day to write, and using some C# language magic, can turn existing code into console-enabled code with one simple line (seen below enclosed in square brackets):
This system also includes function-like commands that accept multiple, type-checked arguments. For example, spawning a zombie at world coordinates x=0, y=0, z=0 might look like this: "/spawn zombie 0 0 0".
On that note....here is a redneck dancing to a remixed Thriller.