ExtroForge is both a first person shooter, and a real-time strategy game, with colony building and construction as the basis of the experience. ExtroForge also has a rich story deep in lore and history, with a good measure of thematic mystery thrown in.
This game won't just be fun to play, but it'll be fun to talk about and ponder about, like a digital version of the hit TV show "Lost".
ExtroForge takes players to a strange and mysterious alien world, where they must work with their teammates to make a new home for the human race. The alien world is both beautiful and ruthless. There are sweltering jungles, frozen ice lands, ancient canyons, rolling valleys, and more.
Using only minimal technology, players must begin securing resources, and then use those resources to establish a colony and base of operations. Utilizing a modular structure building mechanic, players use various building materials to construct whatever they can imagine. Towers, walls, buildings, bridges, etc.
The core of this game is a first person shooter that innovates in a number of different ways:
· Open World - Players have absolute freedom to go anywhere in the world. Each game is on a completely and totally randomly pre-generated 36 square km island in the middle of a vast ocean. Every game will be unique and memorable. It's one big battleground.
· Multiplayer Resource Management - The team must work together to build an infrastructure to maximize their resources. From discovering the mineable items deep in the wilderness, to extracting energy and building materials, to chopping down trees, to building power lines over mountains and valleys to bring those resources back to the colony, players will have to work together for the success of the team.
· Powerful Construction Tools - Using intuitive controls, players will quickly be able to set about the construction of epic bases, towns, cities, towers – whatever can be imagined. Build a towering platform that overlooks half the map. Construct a bridge between two mountain tops. Create a walled fortress that protects your resources and infrastructure. Build automated defenses around your resources. If your enemy destroys your resource extractors, your supply is cut off.
· Colony Establishment - The task before players will be to work with their team to establish a new home for the human race. By building critical infrastructure to support a population, civilians will arrive and the team’s population will increase. The goal of the game is to successfully establish a colony. Population inflow is determined with via easy-to-master civilian needs management. Is the population unhealthy? Build a medical module. Are they unhappy? Build an entertainment center. Are they abandoning your colony for the enemy’s? Win them over by erecting statues, billboards, flags and other loyalty-building propaganda.
· Gameplay Choices - Players can choose to focus on creating and building, research, combat, reconnaissance, scouting, or commanding. The gameplay is open ended, and players will choose roles that best match their play style. Infiltrate an enemy city and destroy their infrastructure, or use propaganda to sway enemy civilians to join your side. Win a match without firing a shot, or completely bombard the enemy base and watch it crumble to the ground. It’s up to the team as to where they’ll focus their efforts; how they’ll choose to play.
· Story - The story behind Extroforge is rich, deep and full of mystery. What is this planet? Why is it uninhabited? Who used to live here? Throughout the exploration of regular gameplay, hints and relics will be discovered. At key points throughout the game, memories from this ancient planet will be discovered. Players will learn there's much more than meets the eye on this planet, and will be presented with quest-like choices that will determine whether the planet works with them, or against them. Are humans truly alone on this planet? Reminiscent of the kind of mystique surrounding movies like "The Matrix", and "Inception", and TV shows like "Lost". With tons of "Aha moments", players will spend as much time talking about the game as they will playing it.
While ExtroForge is first and foremost, a beautifully rendered game using traditional 3D mesh models to represent the terrain, players, creatures and buildings- we wanted player constructions to be unbounded by what elements we could pre-create for the game.
Early prototypes used mesh blocks that the player could create and connect to build all sorts of structures, large and small. Having our game engine track and manage each of these individual game objects would have worked on a small scale - but not in the multiplayer, massive world, massive construction game that we envisioned.
Our new (current) voxel engine is instead a kind of hybrid solution that reduces the game engine load by combining voxels into discrete mesh chunks in a sparse array - but does not use any special voxel rendering techniques like volume rendering/rasterization.
The current ExtroForge play area as about 4096x2048x4096 meters. When a player chooses to place a voxel building block (1 square meter) in the game, its home ‘chunk’ is determined for it. A chunk represents 4096 individual blocks (16X16X16 at the moment).
As a player decides to add a new block to the world, first we determine which ‘chunk’ it will reside in (based on it’s coordinates in world space). If that chunk does not yet exist in our collection of world chunks, we instantiate it. This ‘lazy’ initialization ensures that we don’t manage, track or update more objects in the game than we absolutely need to. This chunk consists of an internal data structure that represents the block types of the 4096 possible blocks that reside within it. We use some bitwise logic to help track certain key elements in order to make future calculations faster (like whether this block ‘touches’ the ground or not).
While the ‘chunk’ might seem like an abstract data storage mechanism, each chunk also represents a single mesh object of its own. As blocks are added to (or removed from) a chunk, its single mesh is updated (faces/triangles are recalculated) dynamically - along with its mesh collider that allows it to interact with the physical world. Internal (unseen) mesh ‘faces’ are removed so that we reduce rendering calculation time.
One of the things we decided early on was that we didn’t want the removal (or destruction) of blocks to result in ‘floating’ block islands with no visible means of support. While the chunk objects have colliders associated with them, they do not implement any real physics interaction (gravity/force). What we implemented was a check on every block removal. Essentially we do a flood-fill type search on all blocks surrounding the block being removed. If that block does not connect to the ground, we remove it from the voxel chunk representation and in its place, we instantiate a real-world block with physics properties (like gravity) that then cause it to fall to the ground. The logic is recursive so that removing a single block could result in huge sections of walls/structures falling to the ground.
In addition, we added some rudimentary ‘stickiness’ logic so that each islanded block that needs to fall has a ‘chance’ of being stuck to a neighbor, so that structures don’t collapse as a cascade of individual blocks - but instead of large chunks of building.
Another key element of our voxel construction world was the actual texturing of the blocks. In the example below, we have 10 different block types represented by 10 different unique textures - each texture combined into a single PNG atlas image.
As each block is added to the chunk, the 3d model uv coordinates are set to the appropriate coordinates in the combined texture. We wrote a custom shader to allow us to use the same logic for normal mapping, specular and gloss attributes.
One of the final key aspects that we had to deal with was block damage. Originally we tweaked our custom shader to apply a ‘decal’ texture representing cracks. More cracks meant more damage. It looked sorta like this:
We determined we could do better. We decided that we could combine another aspect of the block construction attributes - that of ‘solidification’. The original idea is that freshly placed blocks wouldn’t be as ‘strong’ as blocks that had ample time to ‘set’. This was originally denoted by a color shift from a blueish color (fresh) that would eventually fade as the blocks solidified. Instead we decided that block ‘strength’ would be denoted by it’s temperature.
When blocks are freshly placed, they are glowing hot red (and very weak). As they cool down, the red color fades and they grow in strength until they reach maturity (currently, about 30 seconds). When blocks take damage, they ‘heat up’ ...building up a red glow - until they burst apart at a threshold temperature.
In order to implement this, we again had to turn to custom shader logic so that we could offload the color change into the shader itself (and not have to manage/update in our main game loop). The shader would handle the shifting of the color from the current temperature as the block cooled. If a block’s temperature was adjusted externally (by damage from a projectile or explosion), the new temperature would be passed to the shader by use of the uv2 coordinates of the chunk mesh and the shader would take over from there - applying an emission effect (again using another atlas texture for emissions)
Technical details were a little trickier - we needed an easein/easeout formula/algorithm to take time as an input and temperature as an output. We also needed to have the same algorithm on our game engine side and on the vertex shader. On the game engine side we needed it to be able to determine what the current temperature was based on last update and when damage is applied. On the shader side, we need to apply emission settings based on current time compared to time when block was at it's highest temperature. So most traditional easein/easeout algorithms (to cool the blocks as per our decision) use conditional (if) statements. Conditionals are a performance bottleneck for shaders. … However, we were lucky enough to run across a Bezier curve formula that doesn't require them:
z=(t^2)(3-2t). It produces a nice S curve representing easein/easeout.
With large spherical AOE explosions, it is neat to see the different ‘damage’ (represented by temperature/color)
Stay tuned for part 2 - Collision Damage and Vehicle Rotation!
On the alien world of Sorteria, life is far different from what we know on Earth. Explore what creatures this new world holds!
Who doesn't enjoy blowing things up? Here's a demonstration of some of our voxel block destruction.
Today's feature is more concept art from our resident artist, Danny. Today, we have the soldiers from the other playable faction, the Republic of Earth...
No articles were found matching the criteria specified. We suggest you try the article list with no filter applied, to browse all available. Post article and help us achieve our mission of showcasing the best content from all developers. Join now to share your own content, we welcome creators and consumers alike and look forward to your comments.
A detailed look at the gameplay of EXTROFORGE. Extroforge takes players to a strange and mysterious alien world, where they must work with their teammates...
No files were found matching the criteria specified. We suggest you try the file list with no filter applied, to browse all available. Add file and help us achieve our mission of showcasing the best content from all developers. Join now to share your own content, we welcome creators and consumers alike and look forward to your comments.