Biome Defense: An RTS fought between the animals of earth's biomes

Biome Defense is an RTS fought between the animals of earth’s biomes. It’s inspired by Age of Empires II, with an aim toward greater diversity, content, and moddability.

There’s a lot left to implement, but once it’s stable (and fun), I plan to release it on Steam and begin a long-term, open-ended series of updates.

General:

Development:

Screenshots





Features
○○○○○○○○○○
Completely open content infrastructure (implemented)

All maps, plants, structures, units, and ais are files in well-organized folders using formats that are designed to be user-created and edited. An open pipeline is available for exporting custom object models from Blender into the game, and eventually I hope to make a really nice content sharing website/workshop.

Play as one of 10 biomes (implemented, though sparse)

Biomes:

  • Desert
  • Savanna
  • Grassland
  • Old World Temperate Forest
  • New World Temperate Forest
  • Old World Rainforest
  • New World Rainforest
  • Swamp/Marsh/Cave
  • Oceanic Island
  • Boreal Forest/Tundra/Polar

The plant, structure, unit, and technology lists for these biomes are in-place, although far from complete.

At some point I’ll put together the full tech-tree, but for now I’ll just list the added unit-types in flat-form:

  • African Elephant
  • Asian Elephant
  • Battering Ram
  • Boar
  • Camel
  • Crocodile
  • Deer
  • Fox
  • Giraffe
  • Grizzly Bear
  • Lion
  • Rabbit
  • Rhino
  • Wolf
  • Zebra

One interesting part about the creature distribution is that so many of them overlap between biomes–but without being present in every one. This makes it really interesting as a player to decide on a biome, as most of your favorite units will be found in multiple of them. This gives you more options, as you can mix-and-match by trying the related biomes, without giving up the full set of units from the last one you tried.

Optional high-level strategic control (planned)

While I plan to always support the direct control of individual units, you’ll also be able to perform some higher-level operations, such as marking an area is high-priority to attack or defend, and, in the pre-match, even creating your own ‘unit behavior modules’ (using visual scripting). This will let you prepare your units for some common scenarios, to at least behave well enough that they aren’t completely helpless on their own. (e.g. retreating into buildings if a raid becomes too intense)

While this may seem overpowered, it becomes practical by three factors:

  1. Match hosts will have full control over how far this ability can be used. If a player doesn’t like it, he can easily turn it off.
  2. The most common behaviors will likely be filled-in pretty early by modders, and put on the workshop/included with the game (if they’re made well enough). Because everyone will have access to these basic behaviors, the gap between skilled and non-skilled scripters won’t be as large. (my hope is to make the game’s visual scripting system as accessible as possible to beginners, however, to reduce this issue even further)
  3. Some people may enjoy, at times, having scripting wars to see who can develop the best unit behaviors! I know I’d really enjoy that, having a dynamic and competitive arena to experiment with different AI and unit-behavior script designs.

Combat diversity (planned)

For example, having creatures that are able to climb trees, or building lookouts which will alert you when they see an enemy.

There will also be greater defensive options than are available in most RTS games. While, head-to-head, offense needs to end up stronger (so that the game eventually closes down), defense will resist more effectively. For example, a well-supported siege on a fortress should be able to win in the end, but the defense should last long enough and inflict enough damage that it’s not worth attacking unless it’s important strategically. (note that build time will also be longer, and perhaps require more economic backing (to compensate for the increased strength), which should keep the frontiers for each player mostly open)

Flexible AI (started)

All strategy and tactics level AI behavior is specified through in-game visual scripting.

Creating a custom AI is as simple as opening the Modules page, cloning the built-in AI, and opening the Nodes editor. Not only does this make AI creation and modification accessible to regular players, it also means it’s trivial to add rich configuration options that can be set per-match or per-user to add variety/customization to your AI opponent’s gameplay.

A powerful AI debugger also exists allowing in-match script modifications, breakpoints, and so on. Never be confused about what’s causing your AI to make the wrong decisions.

Solid multiplayer experience (planned)

Hopefully, no more desyncs! It’s easy to promise before the network code is in, but the idea is to create a system that’s able to handle network problems by resolving them as soon as they happen instead of completely breaking. (for example, if a desync occurs, just picking one player’s version as authoritative and continuing, instead of completely crashing)

Another issue with P2P lock-step games is what to do when there are clients with high pings/lag. This is where the idea of a “lag policy” system comes in. Match hosts will be able to pick a preset, or customize these settings manually:

  1. Consider someone a lagger if [their ping over the last ? seconds] is over ?ms. (and lock their ‘is lagger’ property for at least ? seconds)
  2. Keep the non-lagger simulation-delay at/at-or-under [the ?th-percentile of non-lagger pings over the last ? seconds] + ?ms.
  3. Keep the lagger simulation-delay at/at-or-under ?ms.

The tools for filtering and configuring online matches should also be easy-to-use, and extensive. If you want unlimited population, ok! If you want to set a min and max ELO, the controls are right there!

Other planned configurations:

  • Integrated voting on match options (optional).
  • What mods (or mod types) are allowed.
  • Max ping and desync-rate for players.

Concerning finding matches that suit your playing style:

  • A match-setting value should be able to be marked as ‘divergent’ from your preferences, with a ‘divergence’ penalty specified. Online matches then show their total ‘divergence’ amount, and are (by default) sorted by it. This should help players quickly and easily hone in on lobbies matching the type of gameplay they’re looking for.

Well-integrated community features (planned)

For example, being able to post recorded games to a gallery, where other people can watch, comment, explore the game state, etc. Also, a feedback area where new features can be voted on, and significantly affect what course of development is followed.

That’s the basic idea. Now back to Unity, Visual Studio, Notepad++, Blender, Chrome, and the imagination.

4 Likes

The current (or semi-recent, anyway) state of each page is shown below, with a screenshot and summary.

Settings
○○○○○○○○○○
Screenshot: https://15cd9dd7f31c1098736d478e1990277bef239001-www.googledrive.com/host/0B27vx28MKrWFNTdSRWJ3X1ZFY1E

Where all the settings are configured. (at the moment there are few-to-no contextual setting panels)

  • Tab-based layout, with instant setting application. (no need to press save or the like)

Console
○○○○○○○○○○
Screenshot: https://afe22642291a5e8dad4e38eaadcfef473ac30899-www.googledrive.com/host/0B27vx28MKrWFV2I1UkQ2dVR2c0k

Tools to help with development and debugging.

  • JS Code and CS Code tabs where you can enter code and run it in-game. (for development/debugging purposes)
  • Calls tab, where all the changes made to the master data-tree are logged. (the data-tree shared between the UI context in JS, and the game context in C#; it will eventually be extended to work for sharing data between players in multiplayer games)
  • Log page, showing the text logged through the standard Debug.Log method. (as well as showing errors that occur)

Maps
○○○○○○○○○○


Where you edit and create your own maps!

  • Maps panel where you load and manage (create, rename, delete, etc.) the maps.
  • Soils panel where you manage the soils.
  • Tools panel letting you configure the tools:
  1. Terrain>Select Chunk (select a chunk for analysis in the Chunks panel)
  2. Terrain>Resize (change terrain width and length)
  3. Terrain>Shape (raise/extrude and lower/intrude the terrain)
  4. Regions>Paint (paint the selected region as active in a given area, thus applying its texturing, etc.)
  5. Objects>Place (place plants, structures, or other object types)
  • Chunks panel where you can view/edit the data of the selected chunk. (subsection of terrain)
  • Regions panel where you add, remove, and configure the ‘components’ attached to each region.

Biomes
○○○○○○○○○○

Shows the list of Biomes, and what structures/units are available to them.

  • General panel showing detailed information about each structure/unit, when selected.

Objects
○○○○○○○○○○

Nice place to confirm that all the objects are loaded correctly. In the future, will be used to modify the objects, as an alternative to editing the object’s data files.

  • Objects panel lists all of the trees, units, etc. (they are all considered “objects”)
  • General panel letting you modify some basic settings, and preview any animations contained within the object.

Modules
○○○○○○○○○○
Screenshot: https://89189e02c2731f18985e4b7ddbd009c6c334293a-www.googledrive.com/host/0B27vx28MKrWFbDJMM3lackIyMmM

Where custom AIs are created and edited. (using visual scripting)

Matches
○○○○○○○○○○
Screenshot: https://5bb6cfcce1ecb4d7be5f5e22387310aa9842915f-www.googledrive.com/host/0B27vx28MKrWFSXJ1Ni1kbldmSkU

The (currently quite sparse) setup page for new matches.

Live
○○○○○○○○○○

The heart of the game. This is where you actually “play”.

  • Top menu showing your resources, the resign button, etc.
  • Object action panel at the bottom left. Can be used to produce units and build structures.
  • Object selection panel at the bottom-center. Displays an icon for each object selected, an active tasks bar at the bottom (when applicable), and a small info panel on its right.
  • Map panel at the bottom-right. Shows a map overview, and lets you quickly move to other locations.

Looks nice!

Updates:

  • Startup time reduced by having a map’s loading delayed until the map is about to be opened/used. (will be much more important when there are many maps available)
  • Began modularization/methodizing of setting declaration/setup. (two settings are currently using it)
  • Fixed that some tools, when selected on the Maps page, would attempt to apply themselves while on the Live page!
  • Greatly reduced the text required to save an in-terrain/in-match v-object. It now only saves the properties that have changed from that of its parent (the type-v-object).

Updates:

  • Added health bars to structures and units. (configurable on the settings page)
  • The object info panel now auto-updates when its underlying values change.
  • Added a unit-speed-multiplier developer setting.
  • The Ctrl+X/A/etc. key-combos work in the editor now.
  • Fixed that when a match was open, the maps page would be able to show the unit-selection box.
  • Fixed that when the selected object was destroyed, the UI for it would still be visible.
  • Cleaned up the Change class application sequence.
  • Further modularized the setting page’s UI setup. (now has calls to start a new row, etc., giving more flexibility, e.g. adding multiple setting controls on one row)

Updates:

  • Fixed that start structures would sometimes be placed on top of each other.
  • Fixed that units could walk through structures.
  • Fixed that cloning a map, then cloning that clone, would cause an error.
  • Fixed that start structures would sometimes be placed underwater.
  • Fixed that unit attacks would occur too quickly. (it was applying the full attack strength every frame, rather than every X frames)
  • Added basic island map. (nothing worth showing; just useful for testing without some of the structures getting put up on the super-high hills -_-)

Updates:

  • Maps can now be placed in subfolders of the “Maps” folder without causing errors.
  • Fixed that units would sometimes go through structures. (fixed additional occurrence-path)
  • Fixed that starting a match with a map that hadn’t yet been fully loaded (from being selected on the Maps page) would cause an error.
  • Fixed that units could go further than allowed when attacking an object.
  • Fixed that units could slow-down/get-stuck when moving over non-flat terrain.
  • Fixed that selecting an object, after having had an object selected while it was destroyed, and then pressing the button to select it again on the object-selection panel, would cause an error.
  • Added map named “Base”. Has no modifications, so is perfectly flat and bare. Good for testing systems that aren’t affected by terrain complexity, but for which terrain complexity just makes the testing harder to carry out.
  • Fixed that paths could sometimes not be found to large objects. (when the object was large, and had its anchor point surrounded by occupied blocks)

Updates:

  • Added objects>place-structures tool to the Maps page. (you can add neutral structures to maps now)
  • Fixed that the well of the Outpost object would not anchor to the terrain.
  • Updated Outpost mesh to fit within efficient block areas, to work with structures being placed by distinct absolute-block-position. (block position relative to terrain)
  • Fixed that objects for which L2Cache was created, could not be displayed/used during that first launch. (the subassets would get nulled, since we created a prefab for it, then deleted the prefab)
  • Added “Barriers” map, with lines of trees and structures, to test path-finding around obstacles and such.
  • Fixed that structures could sometimes be spawned, at start, on top of each other. (intersection-avoidance code wasn’t calculating the object bounds correctly)

Updates:

  • Added “Hover Mode” option for Live page camera. (always moves horizontally rather than panning, disables mouse-based around-x-axis rotation, etc.)
  • Camera can now be rotated using the arrow keys.
  • Added “Edge of screen scrolling” option for Live page.
  • Neutral buildings now show marker objects at their centers. (colored white)
  • Neutral building health bars are now show-able. (new setting for it)
  • Converted the remaining settings UI setup code to use the helper methods. (the html and code is much shorter and cleaner now)

Updates:

  • Added a minimap to the Live page. The minimap is a top-view image of the map with overlay dots/boxes for units and such. It also shows your current location/view, and lets you click or drag to any location on the map to quickly relocate there.
  • Added “move/turn vs drag” settings group, for the four types of transformations (pan, rotate, rotate around, and zoom).
  • Call-log-entry data-trees can now be browsed as data-trees rather than as VDF text.
  • Improved performance of call-logging and normal logging on UI side. (reduced time-taken to about 30%)
  • Fixed that the middle-click map-drag would not work for forward/backward when the camera was looking straight down.
  • The UI pages now show their name in the tab/window title when opened/made-visible. (when in an external browser)
  • Fixed that VTexture objects would not get destroyed when their creator PixelRenderer scripts were.
  • VObjects, when serialized to the UI, no longer write values that are unchanged from their defaults.
  • Fixed that starting a match could cause an error if the map had not already been opened in the map editor, or selected as the Matches page map from launch time.
  • Fixed that resizing the right panel of the Maps page would cause it to collapse onto the left side of the screen.

New screenshots

https://fadfc29f185a5105e5d817cb92ca9677437bdc9b-www.googledrive.com/host/0B27vx28MKrWFNHh1S0wwcTliV28
New “Place Structures” tool in the tools panel on the left.

https://15cd9dd7f31c1098736d478e1990277bef239001-www.googledrive.com/host/0B27vx28MKrWFNTdSRWJ3X1ZFY1E
New settings for controlling the camera.

https://afe22642291a5e8dad4e38eaadcfef473ac30899-www.googledrive.com/host/0B27vx28MKrWFV2I1UkQ2dVR2c0k
Call log entries can now be explored in the form of data-trees rather than flat text.

https://e7c6de7ac8fdf341d8e7c5e80bffb07371f07c3a-www.googledrive.com/host/0B27vx28MKrWFclRyNGIyV3JZSzA
The minimap at the bottom right is now functional! The white shape represents the area of the map currently visible. The small colored dots represent player structures and units.

https://74974b043dfc20cb1a889ed5a4b514ce56ed583d-www.googledrive.com/host/0B27vx28MKrWFckdNRkFkRnZKa1k
The island map. I should note that these are not long-term maps. I just throw them together so I can see something more interesting while testing. (the biggest problem with them is how small they are–when you’re testing and restarting stuff constantly, the seconds you can save on their loading each time really helps)

1 Like

Updates:

  • Outpost structures can now be used to produce new Elephant units.
  • Added ability to delete your own structures and units using the Delete key.
  • Added health bars to the object-selection boxes.
  • The object-selection boxes now show how many active tasks a unit has.
  • The object-selection panel now has a “tasks” bar at the bottom, which displays when the select-objects have any active tasks. It shows the tasks’ progress, and lets you cancel the tasks by clicking on them.
  • Added a new setting: Developer>BuildSpeedMultiplier
  • Removed the now-unneeded ID property from the Map, Region, and VObject classes.
  • Fixed that opening the Maps or Live page, then returning to the main menu, would cause the camera viewport rect to be incorrect.