In this article a number of words are linked to Wikipedia’s glossary of computer graphics so that you can follow along without too much interruption.
👨🏫A BRIEF LESSON IN COMPUTER GRAPHICS
Often we get feedback from players who wish the camera in Brigador could be moved to see different angles of the various models of the vehicles or buildings seen in the environment. We don't wish to disappoint those players but within the game engine this isn't possible because what you are seeing rendered in the game is not a 3D model that can be rotated along any axis. Instead, what you are seeing are sprites (more specifically, you are looking at 2D quadrilateral shapes, and what you are also looking at right now is a flat, two-dimensional screen upon which is a moving image that can create the illusion of depth through particular techniques).
Ironically, how we even make these sprites is initially by creating 3D models, typically through the process of kitbashing (this part of the process we won't go into, and we'll ignore animation rigging too, but feel free to check out this timelapse video for the Pantry Boy vehicle from several years ago that you may not have seen before) usually in 3DS Max. The part we're concerned with comes after a 3D model has been decimated, which is a process that reduces the size of the polygon mesh. Once this happens, we can give the mesh a texture map, which is the point where the model starts to more closely resemble the final product.
Before we do that we'll need UV maps first. A quick way to explain UV mapping is to imagine an animal that has been skinned: our 3D model is the animal and the skin that has been removed from it and can be laid flat is our UV map. Or if you refer to the cube below.
The program we'll use to do this to our 3D model is called Houdini.
To give our UV maps texture information what we then do is take them from Houdini along with the 3D model that was made in 3DS Max into another powerful program called Substance Painter that allows us to detail the materials of the model (for example, how rough a stone looks or how glossy a metallic surface is). We don't have footage of us working on Substance Painter but you can get a good idea of what it's capable of just by looking at this short official video that touches on a lot of what we've just written.
At this point we have crafted the shape of our model, peeled off its skin, given it materials to make it resemble the final object, and now we have to take it into a fourth program: Blender. Why we take the textured model into Blender is to do three things. The first is lighting, which we only do a little of. Blender allows us to influence the light-matter interaction, or how 3D models are illuminated – a process that is often referred to as baking. The second thing we do in addition to this is framing the 3D model from an angle of our choosing – in other words we recreate the same view frustrum that the player will see when playing Brigador. The third and final major thing in the Blender step is we also get depth buffer information, which tells us how far away the model is with respect to the camera's perspective.
🔀FROM MODELS TO SPRITES
We said at the top that in the game you were technically looking at sprites, not 3D models. The basic reason for that is because the game engine is told to display sprites, which in turn spoofs the appearance of 3D models in an apparent isometric perspective. How we get from 3D models to sprites is via open source software – a version of which comes included with the Brigador Modkit & Map Editor called SJSpritePacker. What this does is takes the original 3D model and (depending on the model's level of detail) captures up to 64 rotations of all that model's positions and animations at a particular resolution and creates not one but two sheets of sprites along with the XML data for the sheets. Below you will see the sprite sheets for the loyalist infantry NPC (AKA loy_foot_01 AKA “Dave”), which if you own a copy of the game you can find in the folder Brigador\assets\units\loyalists\foot.
This is where things start to get complicated. In addition, the purpose of the second sprite sheet is it provides z-depth information. The XML data that's outputted for both of these sprite sheets by SJSpritePacker is "pointer data" - this is information that tells the sprites to face the correct direction but before it can do so, it's fed into a .json file, which is the file type the game engine reads for the majority of the game's data.
Let’s use another example of how we both use pointer data and slip in an optimization while we’re at it. Here’s a gif of the Arlo agrav from Brigador at twice the usual zoom seemingly turning 360 degrees on the spot. Every single angle of this shot is its own individual sprite, but it is *not* a 3D model rotating in space despite appearances.
Within the game’s own data you’ll find rotations of the Arlo, aka spc_agrav_05. However, the sprites below only point to the right. Why? Because we mirror the left-hand side to save on those frames.
Meanwhile what the XML data itself looks like is a list of coordinates that tell which parts of the images above point to where.
Fun fact: at one point early on in development all of this data had to be manually inputted. Fortunately, our artists nowadays have scripts that export the required rotation data automatically.
🤔WAIT, WHY DOES IT LOOK 3D THEN?
Careful readers might be asking why did we go to all the trouble of putting together 3D models, give them detailed materials for their textures, bake in some lighting and not just use those models in the game instead? This question was asked many years ago and was finally answered around the winter of 2012. While Brigador does have a 3D look, it is not 3D. Games that are true 3D are extremely complicated because once you go 3D, now you really are in a situation where the player can view a model from every conceivable angle in a game's environment. Creating such a thing is a considerable undertaking for any studio's engineers and technical artists to deal with, who essentially have to figure out a way for models that are exported in a particular format to be understood by their game engine and also be optimal (i.e. not grind to a crawl and run at single digit FPS). In other words, everything we've talked about so far took five different programs alone: 3DS Max > Houdini > Substance Painter > Blender > SJSpritePacker – and that was only for 2D sprites. So, knowing this, and with respect to the amount of time, people, money and energy it would take to make a true 3D Brigador game, hopefully it's clearer now what some of the reasoning was for Brigador's look.
So Brigador's not true 3D and yet visually the game still looks impressive - so what else is going on? Recall the sprite sheets from before that look black and white. Let's look at another one that's only ever seen at one rotation - the orbital cannon (AKA battery_01 in the game data). The first variant of the orbital cannon you can think of as the diffuse version, while the second is the z-depth information visualized as a grayscale image (where the brightness can be considered as an indication of how close the model is to the camera). The purpose of the latter is to inform the lighting of the Brigador engine against the sprite, which you can see in the final version of the game itself.
Or in motion...
What should be apparent from the above image and the gif is there is additional lighting being displayed on the sprite itself. As it turns out, the Brigador engine is doing two specific things: deferred shading and with it dynamic lighting and this is what we've been building up to this whole time.
We encourage you to read up a little on both topics, because it's a rabbit hole of its own, though we will point out here how even for the mid-2010s, applying deferred shading and dynamic lighting to 3D models was a very expensive thing to do in terms of hardware... except we are not using 3D models in the engine! Remember: the sprites are fundamentally just two-dimensional quadrilateral shapes – they are not polygons where every facet would have to be lit properly and because we are able to decouple a scene's geometry from its lighting. Also, because we have the depth information from the z-depth sprite sheet in the XML data, this allows us to put in a bunch of lights into the levels without causing major performance hits and allows the engine to apply dynamic lighting to those sprites. Or, in other words, we can do things like this such as when the effects of an EMP wear off...
Or dynamically light up the player when they fire a railgun shot with the Zeus...
*This* is where the payoff is and why so many people have asked over the years “is this 3D?”. This might also prompt the question of why other developers don’t do this nowadays if it’s so visually effective. The main culprit is the games industry’s pursuit of graphical fidelity in the early 2000s, which meant most people moved on from sprites in favor of full 3D.
So, in summary:
Nothing is 3D in Brigador – we make spritesheets out of 3D models instead
Brigador's custom game engine draws 2D quadrilaterals on screen which are inexpensive to light
Sprite z-depth information informs the lighting and helps spoof a sense of 3D despite the fixed isometric view
💭WHERE DO YOU GO FROM HERE?
What you've read so far is an abridged version of what goes into what you actually see on your screen when you play Brigador and why it looks the way it does. For our next game, Brigador Killers, what we are changing about the visuals is we are doubling the output resolution of all sprites from their 3D models. In the next two images you will see the first game's masthead Touro Loyalist mech. The first image is from Brigador with the camera set to a 3x zoom...
While this is an image of the Touro at the doubled output resolution at 1x zoom.
...And together in the same scene within an early dev build of Brigador Killers.
We realize that this article may not end requests from people asking for different camera angles, but we hope players will be able to better enjoy a new level of detail that goes into each art asset in both our sequel and our current game. Speaking of which, Brigador is currently on sale.
The those of you who prefer videos, the 5 minute one below contains all you need to know about this update: https://youtu.be/mbW7WVN-6_E There is also a new map competition coming up towards the end of this week, so keep and eye out for that.
New Content From AW2
Those of you who played the previous part Ancient Warfare 2 on itch.io know that there is some content which didnt make it into AW3. But this update features some remastered content from AW2:
Camels are similar to horses, but larger and slower. You can now create custom ranged or melee units on camels.
Armored horses not only look better, they are also more likely to survive a battle
Catapults are now available in two new variants: fire and poison
And siege weapons now have shoot sounds
New image effects
There are new scripting image effects that work similar to the Vignette and ColorOverlay scripting nodes, but allow you to heavily modify how the game looks and opens up many possibilities for new effects. All these effects are represented in the update video. The new effects/nodes are:
Nightvision can be used to simulate NVGs with a custom color and intensity. The effect features noise and while bright areas become white, darker areas can be seen better.
The Glitch effect enables screen shaking and distortions
The CRT/VHS effect makes the game look like it's running on an old tv with bleeding, fringing, scanlines and a fisheye effect
The Posterize effect reduces the colors per channel to simulate retro rendering like 8-bit colors
The Noise effect can be used to overlay noise with custom intensity and scale
The Invert Color effect can invert any color channel
Grayscale can be used to modify the saturation of the game
The Pixelation effect makes the game look pixelated and allows you to choose how many pixels to render to make it look more or less pixelated
The damage of ranged weapons in AW3 depends entirely on the projectile/caliber of the weapon. But now you can choose to modify the caliber for your custom weapons to modify stats like Damage, Armor Pen, Armor Dmg, Projectile Amount and Fire Probability to adjust the projectile stats when used with this weapon.
Custom Physics Objects
Custom physics objects are a new type of custom object. They are somewhat experimental and should be used with caution to avoid performance problems, but they also allow a lot of new stuff to be created.
Physical parameters like mass, drag, angular drag, friction and bounciness can be adjusted, to select how your object reacts to the physics simulation
Depending on the settings, these objects can be picked up and/or thrown by the player
There are various settings to select how the object is thrown like throw force modes, strength and whether you want to see a throw preview or not
Thrown or falling/moving objects can also cause damage to units or buildings
Resting physics objects can also block units from walking somewhere if set up correctly
Full scripting support for physics objects allow you to
Spawn/delete objects
Modify physical parameters
Apply force to objects
Freeze/Unfreeze objects
Force the player to pick up/drop objects or react to events when the player interacts with these objects
React to collision events to create custom behaviour
And more...
Ragdoll improvements
There are various improvements to ragdolls in terms of performance and functionality.
Ragdolls now react to the force of the kill shot or melee impact to make them more realistic
Ragdoll simulation quality is dynamically adjusted based on the amount of active ragdolls and units in an area to help with performance in dense melee battles
Inactive ragdolls are now frozen in place (this is experimental and might be changed or adjusted in the future)
Other improvements
Increased material limits of most custom object types
Weapons, shields, grenades, armor, clothing, environment, consumables, modulars, background from 8 to 16
Attachments from 6 to 12
Objects are now much easier to interact with by not having to hit it directly. This makes clicking buttons or picking up weapons much less annoying
Aim sway was reduced when using scopes. The higher the zoom of the scope, the less aim sway can be noticed
Crouching now reduces aim sway by 50%
The background grid in the scripting view can now be toggled on and off
Hovering over node connections now also highlights the connected in- and output to help while editing large scripts with many overlapping connections
The vehicle spawn nodes now output a reference to the spawned vehicle object
Added a SetRotation node to quickly set the rotation of a unit without having to calculate delta angles
Added button input node and BindPress event node
When dragging into an empty area, the available scripting nodes now show more possible options like custom events and variables
Bug fixes
Fixed that custom objects with "delete object" destruction mode are indestructible
Fixed that anti air rockets are blocked by triggers
Fixed that pausing/unpausing causes ragdolls to fly around
Fixed that the tank mgs on the WW1 tanks would shoot itself by targeting targets on the opposite side
Fixed that editing a unit in the embedded unit editor would result in all guard mode poses to be reset
Fixed that face shields would become invisible on corpses
Adjusted most L and U stair models to connect to the floors
Fixed a bug that allowed invalid placement outside of the allowed area
Fixed that newly infected zombies could not infect other units
Fixed that hiding scripting objects would result in them not being saved
Attachment settings on 3rd and 4th weapons now work correctly
Fixed a bug that allowed invalid battles (with multiple players or other problems) to be uploaded to the workshop
Fixed that passing no input to a custom event with a value type would output 'null' on the event output
Fixed that despawned units were still visible on the conquest respawn map overview
A new balance update is on its way! Join us this Friday, February 3 at noon Pacific Time (UTC-8) on the official Guild Wars 2 Twitch channel for a look at the February 14 profession balance update preview.
Skills and Balance Team Lead Cal "cmc" Cohen and Associate Game Designer Roy "Roy" Marks will be on stream to guide you through all you need to know about the upcoming profession changes. Following the stream, we'll post the full balance preview notes on our official forums.
New player stats: Stone altars and Andromeda's can now provide new player effects: Armor, Critical hit chance and mana.
Big rework on the room spawn options you get after finishing a room. Prepare for very different progression now!
New rooms type: Two new rooms type added: The Forge and Telluric ruins. They should give options to make your spells stronger or new spells to pick
Chameleon: Chameleon has been reworked and now. They're found in intro rooms and offers a option to pick between random quantities of different free loot
New world and Zodiacs: Players can now progress untill reaching the new 4th world, Crimson Highlands! They can also find two band new Zodiacs waiting to be faced there: Libra and Aquarius
New playable character: Calie: Players can unlock now Calie, the Architect! She can shapes her Gems into dangerous weapons. Her basic attacks leave precious stones on the battleground. She can call back the stones with her signature move dealing even more damage!
Small Features
Achievements appear in Death Recap if occured during the run
Astral Spirits are slower, bigger, have a better hitbox but they have more HP and drop more elements
Only one achievement can appear at a time
Easier to open Zodiac chests
Signature Spells damage increase with characters levels now
Zodiacs always look toward players once defeated
Added crystal jumps in the hub
Added explication about Kiran signature spell when unlocking him
Re-enabled Fire Rain spell after its fix
Kiran Giant Fists spell collider is a bit more generous
Freeze effect now deals damage when reaching 10 stacks
Added new text hints for some effects, and changed the name of some old ones
Changed conditions for Zodiacs spawn inside Andromeda's bar
Some currencies like Quartz and Keys are automatically picked after leaving a room
Portals rewards: Some room portals can offer different rewards (like Auras) and some of them can have cooldown to avoid same reward picks too often
New super powerfull gambit tier added, Astral Gambits! They can be found after beating Zodiacs... If you're luck
Amount of life restore by crystal shards is now subtly feedback on life bar
Removed ability from Zim-zim that added aditional loot for rewards found, as most rewards have multiple choices by defaultt now. This ability will be replaced by a new one in future patches
community inspired ⭐ Crystal shards can't be used if player is full life
More elements have been added to the glossary
Hidden Chamaeleon was missing in Telluric Ruins & The Forge - ☄️ hotfix 0.41.2
Aquarius pattern with many projectiles now prevents bullets hit before they are launched - ☄️ hotfix 0.41.2
When your Armor absorbs completely an enemy attack, it now displays ""Absorbed"" and your hurt animation is not triggered - ☄️ hotfix 0.41.2
World 4 flying enemy launching 2 projectiles has been made clearer to read - ☄️ hotfix 0.41.2
World 4 flying enemy electricy wyrm patterns have been improved - ☄️ hotfix 0.41.2
Removing plushies from andromeda's bar when they overlap a Zodiac, so they don't interfeer with the Zodiac interaction - ☄️ hotfix 0.41.3
Added Aquarius Kid sprite spawning alongside with Aquarius Golem sprite inside Andromeda's bar - ☄️ hotfix 0.41.3
community inspired ⭐ Calie Stone of The Ancients now hit in air too - ☄️ hotfix 0.41.4
Key chest now feature both rewards inside each chest - ☄️ hotfix 0.41.4
Aquarius bubble attack is better feedbacked & more precise - ☄️ hotfix 0.41.4
Aquarius ultimate attack zoom out before explosion to better feedback - ☄️ hotfix 0.41.4
Aquarius & Libra had their voice lines missing during battle - ☄️ hotfix 0.41.4
Andromeda drinks cannot be 2 times the same - ☄️ hotfix 0.41.4
Balancing
Merchant itinerant altars are not reset if already bought
Merchant itinerant now have 7 slots
Balanced quartz per exploration room
Increased a bit XP gained by defeating enemies
Invincibility after dash from 0.1 to 0.06 seconds
More HP per Rest Room depending of the world
Increased most enemies/bosses HP
Quartz and experience given by most places
Buffed damage dealt by Combustion effect explosions
Pavo sacrifice cost is higher now
Enemies keep aggro for longer
Salvaging an aura is now worth 4 stars
Reduced Chamaeleon fight room summon rewards
Adjustments made on the following effects : ignition, thunder orb, ice fragments, wisp
Some effects like NPCs/Zodiacs summons and LDI elements like world 1 bouncing mushrooms are not affected by damage buffs anymore
Reduced Ayla's invencibility time after using signature move
Loot found during co-op mode should be more fairly balanced
Kiran's signature move trigger a smaller cooldonwn if he doesn't sucessfully trigger a counter
Decreased Armor stat from 2 to 1 per point - ☄️ hotfix 0.41.2
Minibosses give 10 more quartz everytime - ☄️ hotfix 0.41.2
Slightly buffed Quartz gain from scrapping Spells and Gambits: Spells will now give 20 Quartz + 12 * the level of the spell and the number of Gambits. Gambit will now give 12 Quartz + 7 * the rarity level of the Gambit. - ☄️ hotfix 0.41.3
Nerf the power of the lifesteals gambits: Lifesteal on hit nerf to 50% chance on hit Lifesteal on death value nerfed to 2 HP regen (5 before) - ☄️ hotfix 0.41.3
Reduced Aquarius ultimate damage when you cannot avoid it - ☄️ hotfix 0.41.4
community inspired ⭐ Nerfed the damage output of World 2/World 3 and World 4 enemies. - ☄️ hotfix 0.41.4
Nerfed the overall damage output of World 3 boss Scorpio and World 4 bosses Aquarius and Libra. - ☄️ hotfix 0.41.4
Adjusted Leo Phase 2 damage output. (Some buffs and some nerfs) - ☄️ hotfix 0.41.4
Adjusted Aquarius damage output. (Some buffs and some nerfs) - ☄️ hotfix 0.41.4
Level Design
New Treasure room available
Increased Pavo's room width
Music & SFX
Captured yalee now have sound design
various enemy sfx and mix update
worlds ambiance sfx update
Zodiac intros do not interrupt sound as abruptly as before
Replaced SFX for World 3 enemies
Visuals
Merchant itinerant altars visual improvement
Removed Andromeda visual asset when a puzzle wasn't available in an exploration room
Feedback improved
Improved NPC cooldown font
Meteors in the void room will not dissapears and flicker anymore
Embers now spawn with the right angle
Improved rarity feedback on gambits
Bug Fixes
community inspired ⭐ Bapy / Main Menu escape attempts could not be the same
Zodiac summon icon would disappear for current room after summon zodiac tutorial
Bosses & World 2 golem could become invisible in some circumstances
Zodiac Chest input was very big at the start
Yalees in treasure rooms had some gray parts
Cryogenic Sword could explain in side walls or ceiling
Chamaeleon could have wrong cloak colors
Enemies killed without being hit achievement is not reset anymore when loosing an Andromeda's trial
Scorpio could hit 2 times during his ultimate and purple patterns
community inspired ⭐ Invisible platforms in Virgo challenge
Fix an issue where changing window with shortcuts made the game window become black and resulted in softlock
community inspired ⭐ It was possible to get a softlock after getting a Zodiac summon from the bar and triggering it's first time tutorial
community inspired ⭐ It was possible for the game to wrongly trigger timers that could cause unexpected behaviors such as teleporting player outside of game area or spawning Scorpio Zodiac in impossible scenarios.
community inspired ⭐ Healing shards feedback for amount of life restored, on player inventory, could wrongly display float values
community inspired ⭐ Sometimes in coop, spell used to stay open and never close resulting in the player not being able to interact with it anymore
Octave's perks that affected his summon duration could not work correctly
It was possible to get FPS drops after leaving game paused in certain parts of the game
Cooldown from enemies hitting player could not trigger properlly in some situations
Sidescreen tips were not being destroyed after opening the Prowess menu with player 2
Kiran's counter colider, from his signature spell, could wrongly keep attached to the sprite if the attack animation was canceled
The knockback caused on enemies after a attack could push them to the wrong side
Ayla's signature move could teleport player outside of game area
Wooden Guardian minions could sometimes not be instantly killed when Wooden Guardian is killed
Water snakes could get stuck when launching their attacks near walls
Octave revive particles were wrongly placed
Fixing reward loots spawning position in some cases - ☄️ hotfix 0.41.1
Perk UI in player inventory for player 2 had texts seted in wrong position - ☄️ hotfix 0.41.1
Zim-Zim could wrongly display icon notifying new unlocked abilities, even if there were none - ☄️ hotfix 0.41.1
Hidden Chamaeleon was badly placed in Challenge room - ☄️ hotfix 0.41.2
community inspired ⭐ Fixed a bug that could cause portal choices not to spawn at end of a level - ☄️ hotfix 0.41.2
community inspired ⭐ Sometimes portals portals choices for next world could take a unusual long time to spawn - ☄️ hotfix 0.41.2
Fixed wrong icons for Zodiacs summon rewards in challenge room portals - ☄️ hotfix 0.41.5
community inspired ⭐ Leo could be stuck in air during his fight - ☄️ hotfix 0.41.2
During co-op mode if player two takes a Zodiac challenge and wins, player one would lose their summon if they already had one - ☄️ hotfix 0.41.3
Spell icon above player's head could wrongly display as ""disabled"" after a spell refresh - ☄️ hotfix 0.41.3
It was possible to not be able to interact with other objects in game after salvaging loots too quickly - ☄️ hotfix 0.41.3
Aquarius falling after the bullet hell pattern attack was dealing between 1 to 2x the intended damages - ☄️ hotfix 0.41.4
Plushies in bar room interior could interfeer between interactions with Zodiacs - ☄️ hotfix 0.41.5
Aquariu's kid sprite is correctly displayed inside bar interior - ☄️ hotfix 0.41.5
NPCs dialog icons could miss correctly feedbacking important dialogs - ☄️ hotfix 0.41.5
community inspired ⭐ Game could softlock during co-op if one of the players triggered a heal action just before dying - ☄️ hotfix 0.41.5
community inspired ⭐ Improved players platform behavior to avoid cases on where they could get stuck into walls - ☄️ hotfix 0.41.5
community inspired ⭐ Fixed glitch on hub spawn animation during co-op mode - ☄️ hotfix 0.41.5
Pausing during Libra challenge wouldn't prevent for minigame to register player inputs - ☄️ hotfix 0.41.5
community inspired ⭐ It was possible to avoid a certain special, end game, interaction by triggering actions that makes player ivulnerable - ☄️ hotfix 0.41.5
community inspired ⭐ World 1 enemy could hook player through walls, causing them to be stuck inside level solids - ☄️ hotfix 0.41.5
First of all, I want to let you know how much I appreciate you buying this game, it's the first one I've ever been motivated enough to publish.
It's a short game I made for a game jam, but I ended up enjoying it quite a bit and spacing out playing it for hours and I hope you will too. (If not - no biggie, we can still be friends).
If all 5 of you potential buyers enjoy it, I'll be more than happy to keep working on it. Luckily, I have enough ideas for gigabyte-worth of additional content which I'd be able to dish out on weekly basis. Otherwise, I'll probably work on other projects, but I digress.
Thank you again for buying this game. You're all amazing.