project-image

Lancer Tactics

Created by Olive

Be gay // do giant robot crimes. A mecha tactics game adapted from the Lancer TTRPG (under its third-party license). The game is NOW AVAILABLE on itch.io!

Latest Updates from Our Project:

First alpha is available!
almost 2 years ago – Tue, Jun 04, 2024 at 06:38:07 PM

It's time! Let's play some Lancer Tactics!

Early-access backers can download the Lancer Tactics 0.1.1 alpha by logging into Backerkit and going to lancer-tactics.backerkit.com/backer/digital_rewards. I'll also be sending out an email via Backerkit that should have a link to the download.

(It's PC-only for the moment; I'll be adding a mac build as soon as I can determine whether Gatekeeper is bluffing when it says it'll block running the game on other people's computers because I'm an unverified developer. Linux will come... sometime. Someday.)

We have a bug-report form here; please let us know when you find stuff that looks broken in a way other than us not having gotten around to implementing it yet!

My current plan is to include a new public build with each one of these monthly updates, but we'll have to see if that ends up being a good rate. I may update more or less frequently if a buncha game-breaking bugs get found or if it ends up taking too much focus away from the long-term features.

It's wild to me how it feels like we've skipped a lot of the typical steps in game development to get here. Usually, there's a long period of tooling around with demos and mechanics to "find the fun", but these mechanics have already had essentially the world's largest paper prototyping session via the TTRPG. Once again, I'm super grateful to Massif for making Lancer available to build on!

What's new from last time?

We've been stitching things together into a playable form like wild. I'm excited to send out this email so won't spend too long getting into the details, but here's some notable changes from the changelog:

Interface

  • Keep camera snapped to zoom levels that doesn't unnecessarily blur the pixel art.
  • Show current charges in Limited tooltips.
  • Optimized the target-picker calculation; improved the worst cases (AOE with long range) from 30FPS to the game's maximum.
  • Added backer credits with a fun little pagination effect
  • Added splash screen on load with the legally-mandated logos.
  • Added remappable controls.
  • Add "protocols" highlighted action bar.
  • Added "round max" to editor & settable via triggers.
  • Updated colors of the range indicators to make them less placeholder-y.
  • Added "apply" button for map size to emphasize that it edits the current map.
  • Large terrain brushes with modes for restricting painted blocks to certain layers.
  • Mousing over either the unit or the top-of-screen chit highlights both.
  • Add status icons above unit tokens. This was WAY more helpful than I expected.
  • Recolored all PC mechs to be blue until we get mech-recoloring working.
  • Fixed VERY cursed bug where all portrait eyes were missing in exported builds only.

Mechanics

  • Knockback can't knock units uphill.
  • Add "stand up from prone" action.
  • Involuntary movement paths go in straight lines instead of pathing intelligently.
  • Overwatching allows you to pick your precise target for AOE attacks, change variants, and cancel to pick different weapons.
  • Warn if your movement would trigger overwatch.
  • Fixed origin of AOE attacks from size 2+ units.
  • Fix visual movement ranges for size 2+ units
  • Wrecks grant hard cover.
  • Add all GMS weapons (not all tags are implemented yet tho).
  • Jammed actually prevents attacks/rxns.
  • Added improvised attack.
  • Added stabilize action; basically a choose-your-own-adventure multiple-choice quiz.
  • Added smoke fx to the grenade/mine.
  • Fix autopods being able to be fired like a normal weapon.
  • Fix reactive code triggering on normal weapon attacks.
  • Fixed AOE attacks being able to hit outside of LOS.
  • Fix getting overwatched when starting jumpjet movement.
  • Fix Engineering limited bonus getting applied twice.
  • Fix segment knife not getting thrown 5 from Hunter II.
  • Fixed NPCs moving before checking to see if they could stand up, so they never stood up.
  • Autopod now only triggers on allied attacks; RAW it technically can trigger on enemies consuming lock-on, but it's super rare that you'd want to actually shoot an ally.
  • Can no longer consume lock-ons on your own allies.
  • Can no longer ram larger targets.
  • Can now continue using protocols if you start using another action but then abort.
  • Prevent stapling a pistol to a rifle on a main/aux mount to be able to overwatch with the rifle at threat 3.

I hope y'all have fun playing this! Please let me know how it goes for you. (I continue to thrive on external validation :) )

Olive

Pre-alpha changelog + engine talent talk
almost 2 years ago – Wed, May 08, 2024 at 12:33:39 PM

We're aiming for getting the first public alpha for backers by the end of this month! Carpenter and I scoped out mechanics that can wait until after the alpha (e.g. grappling, hiding) in favor of tying up the hundred loose threads that are needed for something that approaches a playable game. So this is mostly a big ol changelog of an update from doing that.

But I also gave a talent talk at a local Portland Indie Game Squad event about engine architecture! It'll sound familiar if you've been reading these updates; I laid out the basic idea for this talk almost a year ago, back in the June 2023 update.

We've also signed contracts & had a kickoff meeting with our writers to start on the campaigns. While I've enjoyed like a year of engine-work, it'll be so so nice to start getting to tell stories. Data structures don't mean anything beyond how they affect humans & other life.

New Content

Implemented flying as a status; unit counts as +3 spaces above the current ground level and ignores terrain and elevation extra movement costs. Added hover + takeoff/land animations.

Gave deployables the ability to have 3D meshes instead of 2D sprites; we'll probably use this mostly when the deployable in question is climbable.

Related, I fixed a bug where after terrain destruction, all units recheck the ground height under them so they'll move down if the ground is shot out from under them. When the Jerichos do that, they say "oh heck, the ground is taller! I better move up to stand on it!" — not realizing that the taller ground they're seeing came from themselves. Fixed by locking some units' rendering to the ground level; this means no stacking climbable things, which is a call I'm comfortable making. We ain't making minecraft here (I whisper to myself, gazing at the bottom of my tea mug).

Increase map elevation cap to 10. It's nice but definitely is risky with increasing the voxel space, gonna have to keep an eye on performance.

Block sizes are currently 1x1x0.5 — half as tall as they are wide. Since that was a size I pulled out of nowhere for convenience, we did some art tests for different block heights and camera angles. TLDR that size works great and we're leaving it.

Added Cone AOE pattern, courtesy of an algorithm NMcCoy sent me that guarantees the correct number of tiles are picked at the correct distance from the origin.

  • pick your aim angle
  • for each distance step N of your cone, make a list ("ring") of all the cells at that distance from your origin
  • sort those cells by angular distance from your aim angle, and include the N closest cells in that ring in the cone's area

Here's a gif they made of it in Bitsy:

Units face where you're planning on moving/targeting them.

Got Walking Armory's Shock option working. Added subtle (too subtle, now that I look at it) electricity effect.

Added knockback and fall damage. Also added a bounce to units when it's using an ability or is available to start its turn.

Added Structured + Stress event and the associated popups. Also added meltdown status (and hidden countdown), but there's not animation for this yet so your guy just abruptly disappears and leaves huge crater.

Other things we've added but I don't have gifs for, you'll have to trust me:

  • disengage action
  • overcharge action
  • Improved Armament core bonus
  • basic mine explosion fx
  • explosion fx on character dying

UI Improvements

Rearranged the portrait maker. Auto-expand the color picker so you don't have to keep clicking into a submenu.

Added topdown camera mode by pressing R for handling getting mechs out of tight spaces.

The action tooltips have been bothering me for a while; they extend up and cover prime play-area real estate in the center of the screen. So I redesigned them to be shorter and have a max height by putting long descriptions in a scrollable box. This sounds simple, but the redesign, pulling in all the correct data for the tags, and wiring up the tooltips took like seven hours. Game dev is hard, yo.

Put the unit inspect popups in lockable tooltips + added a bunch of tooltips to them.

Implemented the rest of Carpenter's cool hex-y action and end turn readout. I'm a big fan of whenever we can make the game look more like a game and less like a website (though he balances out my impulse for that for the sake of legibility).

Added a JANKY talent/frame picker. I swear we have designs for a better one, but sometimes you gotta just get it working. Also seen briefly here are basic level up/down and HASE buttons.

Other no-picture things:

  • Negated the map-scaling effect that happens when the window resizes to prevent bad pixel scaling of mechs at different resolutions; making the window bigger now just lets you see more play area instead of making things bigger.
  • WIP Objectives Bullets panel to give the current sitrep info
  • Wired up a buncha tooltips throughout the character sheet.

Under the Hood

Serialization: can save/load games! This is the payoff for sticking with that engine architecture I've been going on about. I had to add a serialization function to everything in the center layer which took a while, but it was fairly straightforward work with few curveballs.

  • Finished replacement of the kit/unit/reinforcement group/sitrep pickers with a new standardized system that can pull from stock data and user-saved data.
  • Updated to Godot 4.2.2; the game (and editor) has been crashing on exit for a LONG time and for the life of me I couldn't track down why, but this minor update in Godot completely fixed the bug. I still have no idea what was happening, but it's so cool to be working in an engine that's this active bugfixing-wise! 

Other Bugfixes

Pulled straight from the internal changelog, no edits for public parseability:

  • calculate cover for fliers correctly
  • no overwatch when outside of vertical threat
  • fixed skirmisher triggering for each attack in an AOE
  • fixed jumpjets boost-available detection
  • fixed mines not triggering when you step right on top of them // at a different elevation but still adjacent
  • weapon mods not a valid target for destruction
  • made camera pan less jumpy and adjust to the terrain height
  • better Buff name/desc localization
  • Fixed compcon planner letting you both boost and attack with one quick action.
  • Fix displayed movement points not updating
  • Prevent wrecks from going prone
  • fix berserkers not moving if they were exactly one tile away
  • hex mine uses deployer's save target instead of 0
  • restrict weapon mod selection if you don't have the SP to pay
  • fix deployable previews not going away
  • fix impaired not showing up in the unit inspector (its status code is 0 so there was a check that was like "looks like there's no status here")
  • fix skirmisher letting you move to a tile that should cost two movement if it's only one space away
  • fix hit percent calculation
  • fix rangefinder grid shader corner issues (this was like a full day to rewrite the shader to be better)
  • Teleporting costs the max(spaces traveled, elevation change) instead of always 1

So um, yeah, that's my talk, any questions? (I had a professor once tell us to never end a talk like this, so now of course it's the phrase that first comes to mind whenever I end a talk)

— Olive

New mech art style! + terrain destruction, overwatch, ramps
about 2 years ago – Thu, Mar 28, 2024 at 04:13:55 PM

Hellooo again, friends! It's that time again!

Art + Sound

The most exciting update: I'd like to introduce you to Gen (@gentrigger), our new mech artist!

> Yo, I'm Gen. A non-binary artist who wears many hats including ttrpg design, pixel art, and illustration. I've admired mechs since catching Gundam Wing on Toonami and renting Armored Core 2 from Blockbuster. That love of their mechanical design and dramatic stories lead me to the lovely Lancer community where I've made a living illustrating over 100 lancer mechs and their pilots for players. I'm hoping to bring that experience to Lancer Tactics to bring these well-loved designs to life for way more people, and leave my personal touch where I can. When not working on mechanical friends, I express my other loves for masks, deities, and overgrown cities with my own personal TTRPG project Songs we Sing.

Gen has been working hella quickly, and has already made sprites for the Death's Head, Goblin, Nelson, and drafts for the Hornet and Drake in this gorgeous front-and-back-facing isometric style!

Other art updates:

- Added an x-ray vision shader so you can see mechs and planned movement lines while they're behind terrain.

- Added the ability of a mech to have alternate sprites; we'll need this for the Everest especially. A possibility (that I'd be interested in hearing opinions on) is in addition to some generic-ish Everests, we'll let you choose from any size-1 NPC sprite for your Everest. This'd give folks the most freedom in their appearance without making much extra work for us.

- I had a lot of fun in working on an out-of-bounds cloudy area! Here's some styles we decided not to go with:

I specifically did NOT want to do an Into-The-Breach "floating block island" style; I want the map to feel like it connects to a larger world instead of being an isolated chessboard. And doing any kind of "fog" style meant we'd have to add an out-of-bounds area around the edge of the map which meant reworking the coordinate system — not an ideal way to spend our dev time.

So here's where we landed. The map ends, but there's a flat animated area outside of it with blocky, shifting pixellated shapes meant to evoke "weather radar". The map is also slightly inset with a small lip to literally make it "embedded" in that outside world. I had a very focused few days learning enough about shaders to make this kind of effect, and picked up a few techniques that I'm going to bring back to other effects like command zone edges.

- Robin convinced us to integrate FMOD as the way to handle sound composition and mixing. I was skeptical at first because it meant pulling in a hefty piece of third-party middleware that is only kind of community-supported for Godot, but I have been won over by how much easier it makes adding interesting variations like having multiple footstep sounds as units move. It also lets Godot delegate that kind of logic over to FMOD's editor, allowing the game engine to just say "play a footstep sound" and not worry about it more than that.

I also ended up submitting a PR to the Godot-FMOD integration, which I think was both my first time contributing to an open-source project AND was my first time writing any C++!

UI

- Made custom versions of a lot of basic godot UI components so we could easily control font size. This will be an ongoing effort to make sure the various sizes are used on and work on all screens, but I'll rest better knowing the that we have a solution on the technical side.

- Added basic settings menu + persistent config file for audio volume and text size.

- Can edit pilot background/name/callsign/mech name in char sheet.

- Carpenter added manufacturer icons + colors to the character sheet, and improved the gear/weapon picker.

- Can add weapon mods in the character sheet (thermal charge).

- Added a lockable terrain attributes inspector.

Game content + mechanics

- Whenever Gen makes a new sprite, it inspires me to add its content immediately. By following these breadcrumbs, I've added Nelson frame traits + its simple gear, some Archer systems, Everest frame traits and CP, Goblin traits + autopod + Horus upgrade I, Deaths head frame + traits + a lot of its gear. I'm learning that the speed at making a frame varies greatly: some things are very easy (weapons without more than the basic bells an whistles), while others require reworking a bunch of internal logic and unique moving pieces (giving a free boost for the Everest was weirdly hard because it's the only thing in the game that provides one and needs to be available for anything that interacts with boost).

- Added Overwatch reaction.

- Mechs spawn wrecks on destruction.

- Added a context-verification system for Reactions to guard against situations where the triggering unit dies before it reaches the second reaction, e.g. if two overwatches trigger and the first destroys the target, the second won't crash the game because it's targeting a dead unit

- Added "additional damage" field so weapons like bolt thrower can do multiple types of damage. As a bonus, this has made it easy to add weird amounts of heat on hit for things like the Hornet's Impale tech attack.

- Set up Manufacturer as resources instead of hardcoded values as a future investment in modders being able to add their own manufacturers. Once again, mod support isn't on our list of promises, but I'd be a fool to leave a landmine like "manufacturers are hardcoded" for our future selves. 

- Ramps! These aren't a mechanic in Lancer RAW but they make a lot of sense to have as a mapmaking tool — there's no extra cost from climbing for stepping up on a ramp, which ends up being a 1-move discount for an equivalent climb. It's the same numerical niche that the DH magnetic clamp feet thing does, and I learned this last weekend that Eld had independently invented the exact same thing for Solstice Rain.

- Line AOEs are calculated correctly and show up during the attack process.

- Ironed out terrain destruction & a single instance of damage being able to cascade down to lower layers if it destroys the top layer. This is a lot of fun!! Here's a juiced-up railgun digging a ditch across the map.

There's more thinking to be done about how let AOE weapons interact with destroying the ground like this (nobody wants Jackhammer round to be used literally anywhere) but the dream of a Barb Apoc Rail leaving a huge crater will be realized, and I think that's beautiful. 🥲

Coming up/status update

Some of my next todos are:

- Get writing/narrative work started up

- Sort out our block height; we've been defaulting to them being half as tall as the are long/wide, but we want to try out a few other ratios.

- Figure out how to handle attaching separate units for grappling, goblin CP, mule harness, etc.

- Implement the Flying status.

- Set up a "pilot roster" screen

- As always, keep working towards a playable demo by playing the game and adding missing things. We should probably get a clear version of what a "vertical slice" needs to include instead of just kind of feeling our way there.

As for the Portrait Maker, Martina's not had a lot of time to work on the assets, so making the standalone version of that is on pause for a bit. Always better to kick things back than crunch to hit self-imposed deadlines.

Oh! Also, I don't know what it looks like on your side Kickstarter's UI, but one of y'all has found a button that sends me this very annoying notification. Please don't. I hope you're just trying to send encouragement, but it just makes me spiteful. These update are ~monthly because even as a changelog they take a fair amount of time to write, and I'm already going as fast as it make sense for me to do.

Until next time!

~ Olive

3D map editor, more UI, and Mourning Cloak license
about 2 years ago – Thu, Feb 15, 2024 at 04:49:30 PM

EDIT: looks like the gifs didn't survive Kickstarter's new backer update system.

To see 'em, check the post on itch.io: https://wick.itch.io/lancer-tactics/devlog/682706/3d-map-editor-more-ui-and-mourning-cloak-license

(I tried pasting them in and they showed up in preview just fine, but it was only because my browser had them cached, oops)

==============

Hey y'all! This is gonna be one of those bona-fide glorified-changelog-with-gifs updates. Buckle up! (and maybe make sure you're on wifi if you have limited data?)

Map Editor

  • Got units able to be placed/deleted/moved in the mission editor

  • Can paint/remove command zones in the editor
  • Can paint minecraft-like terrain blocks in the editor

  • Can paint/rotate multi-tile props in the editor

  • Can edit unit character sheets and portrait via the editor

3D maps

  • Did a bunch of art tests with 3D mech models, provided by GeneralChaos. We ultimately decided to stick with 2D mechs as a concession to our limited time and experience.

To avoid the can of worms that is animation, we'd have to lean into a static "tabletop minatures" aesthetic, which we decided is not a style we want to be stuck with. By sticking with 2D sprites, we avoid falling into a sort of uncanny valley; it's easier to get away with not animating a 2D sprite than it is for a 3D model.

  • We also experimented with 3D terrain. We decided to make a rule that the visual style for a piece of terrain should match its mechanical effect: obstructing terrain that you can't move through, such as rocks or buildings, will be in 3D, while non-obstructing terrain like trees will stick with 2D sprites.

  • Hooking up the 3D camera to follow events like movement and attacks did a LOT for making it starting to feel like it's cohering into an Actual Game™

  • Implemented cover! And an attack preview! Cover works by aiming a ray from the target to the originator (technically to and from each voxel of each, respectively, to handle size 2s shooting above size 1 cover) and tracking all the terrain blocks it hits (how we'll handle non-terrain hard cover TBD). I think I have it working according to Perijove's cover rules manual, but I'm sure there'll be edge cases to work out. This is a case where things are significantly simplified by working in squares instead of hexes; hexes have a lot more possible weird angles you have to deal with.

UI & game screens

  • Added ability for the engine to show UI that's anchored to the game world via a little word bubble line but also stay on screen as the camera moves around.

  • Got word bubbles working; you can now write dialogue in the mission editor, hit playtest, and see it work in a mission! (it does actually translate correctly now; this gif is just from a bug I thought was funny)

  • Got ability effects mostly behaving appropriately again, including muzzle flashes. The easiest way to handle them ended up being NOT billboarding them so they always face the camera (like all other 2D sprites in the game); instead, I put them on a plane parallel with the ground and just spin them around the unit to point at wherever their target is.

  • Did some work ironing out our tooltip system. The standard in CRPGs these days is this kind of nested labyrinth of tooltops that you see in Baldur's Gate 3:

I Did Not Want to try and figure out how to wrangle that much UI, so we're instead opting to cap the nested tooltips at the second layer. You can lock a general tooltip for e.g. an action and then mouseover various items within that tooltip to get glossary definitions...

...and then instead of having those glossary tips be lockable/mouse-overable themselves, I collect all related terms to that glossary definition and let you tab through them.

  • Added skin overlay functionality to the portrait maker, enabling textures like scars, tattoos, stubble, and vitiligo to be applied to just the skin and not extend off into space.

  • Midway through writing this update, Carpenter sent me this gif of the randomization button working! There's a still a bunch of skintones/assets missing and a few are a bit janky, but it was exciting to start seeing the range of these lil freaks (affectionate) that this editor can create.

Mourning cloak license!

This is the one I'm probably most excited about: I did a bit of a content dive and implemented a basic character sheet + all Mourning Cloak traits and equipment. They don't have fancy graphics yet, but the weapons and systems can be added via the character sheet and used in-game.

It took a little under a day, including adding soon-to-be common mechanisms like bonus damage. This is great news in that it means the engine we've been building for so long in the abstract seems to do a great job in handling comprehensive actual game content, and that it looks like we've set ourselves up for success when it comes time to buckle down on churning that out.

I'm sure other licenses will come with unique difficulties (I fear the day it comes time to do the Mule Harness // Goblin CP) but I'm feeling good about it!

Vertical slice?

Taking a step back, the pressing question on my mind has been "when will we have a playable early access build?"

I was originally hoping for Feb/March, but what we've internally been referring to as the "3D cataclysm" has pushed everything back by at least three months, so the target for the first alpha build is now in May. So, ah, thanks for your patience! Seeing things come together, I've become more and more convinced that moving to 3D was the right call.

✌️Olive

New year new dimension (aka 3D maps!!!)
about 2 years ago – Fri, Dec 29, 2023 at 03:42:15 PM

Not gonna bury the lede: inspired by another project in the Lancer community, about two weeks ago I did a quick tech demo to answer the question "what would LT look like rendered in 3D?"

Unfortunately, both I and everyone I showed it to really, really liked it:

I say "unfortunately" because we're a lot later in the development process than I'd like for this kind of change AND I have almost no experience in 3D games. 🙃 But I would be a fool to ignore this clear an experimental result!

Moving to a 3D map solves these problems:

  • Depicting elevation. We've been jumping through some pretty wild hoops to try and depict size 3 terrain without obstructing the tiles above. A 3D view allows for more interesting and taller terrain-shapes and covering up tiles is fine because the player can rotate the camera.
  • Handling cliffs. The most complicated part of the map system was handling having cliffs in-between tiles and the auto-tiling system to select the right graphics for given elevation data. There was a whole second tilemap offset by half a tile in both directions for cliffs over top of the ground — which meant there had to be a system of sorting z-indices for units on both the ground and elevation layers. Putting stuff in 3D space handles visual ordering for free.
  • Destructible and constructable terrain. It's gonna be so much easier to make a crater the size of the moon from a charged apoc rail or for a Kobold to play minecraft by being able to add and remove voxels at will and have the engine set up to handle it.

Reasons this is not a huge change of scope that will sink the project:

  • I've been doing an AMAZING job keeping the game logic separate from the view layer. It's a common backend engineer's fantasy to be able to say "yeah you can just swap out the frontend for a new one" — and we've actually done that! The circled areas here are the only things I've had to change so far: only stuff that handles rendering to the map-space.
  • We keeping the style of lowish-res pixel art. We're not modelling the robots in 3D or animating them; they remain billboarded 2D sprites. I think we can make the game look good with this style (3D pixel-art-esque games are somewhat in vogue right now) AND this will be easier to pull off with our limited 3D experience. The only change is that the map is rendered with 3D voxels instead of 2D tilesets. 
  • Well, that's not totally accurate; the one data-level change that I have had to make is a more nuanced system of figuring out what properties the terrain has at any given voxel; a blast-1 smoke bomb should not affect a cliff 4 tiles up (this is that leftmost little red island on the graph above). But I've already made the appropriate changes and it took like two days soooo no worries there.

I feel like expanding on that last point: under the hood, this is still almost entirely a 2D game. This means we have decided against allowing overhangs (e.g. no archways, walking under bridges) or stacking flying units up on top of each other (flying is still an on/off status rather than giving you precise control of your height). This hedges out a tonne of edge cases and will allow us to proceed with the current engine without too severe of a speed bump.

Show the goods!

Now that I've justified to myself and y'all why this idea is good and feasible, let's see where we've gotten two weeks out from that initial test!

Once I got the new cursor hooked up to be able to point at a tile (harder than it sounds; you have to do raycasts and have collision shapes and there was a Godot bug on those that cost me half a day), it was just a matter of feeding that current-tile data into the engine and the event system happily moved units around like we've always been in 3D.

Our current approach for ramps is that they're going to count as elevated tiles, but be cheaper to walk up (no half-speed climb penalty) and will render units on them halfway between their raised and lower parts.

We briefly discussed and discarded the feature of dynamic water tiles. They raise too many questions when combined with destructible terrain. I ain't simulating minecraft or dwarf fortress here. Instead, it's likely that we'll let the level designer choose a z-level and have everything below that be "underwater".

As a bonus side-effect of space rules being the same as underwater rules, this'll give us zero-G maps for free by choosing the maximum water level and making it look like space instead of water. Game design! :)

I've also got multi-voxel objects loading in correctly. These have a "true" origin voxel, but cast out a rectangular area that intercepts requests for terrain at those voxels and feeds the request its own terrain data. There's nothing actually at those voxels in the map file, but the game acts like there is. It works on rotated objects via the sort of 3D math I've spent my life avoiding up to this point (meet Quaternions).

(Those hangar buildings are from this Kenny asset pack! I expect to lean on his resources a lot in the coming months.)

Here you can see me learning how to manually generate meshes from terrain data. In order to show tile ranges (for movement, attack, line of sight) I need a "shell" mesh that sits on top of the terrain like shrinkwrap. I can then draw a texture on it with the same 2D shader I described here to get the final effect:

And finally, this morning I got 3D bezier curves working for movement preview lines:

What's next?

As surprisingly easy as switching to 3D has been, it has taken and will continue to take time we weren't expecting. A vertical slice for early access backers is still months off — I'm still hoping for Q1 next year, but I'd say it's likely that's going to slip.

Remaining todo items to catch up 3D to where we were in 2D:

  • convert the attack and ability effects to use 3D
  • different textures for the edges of terrain cubes
  • texture variants for terrain types (so not all grass blocks look the same)
  • getting 2D UI to position itself correctly relative to the tile it's relevant to
  • update the mission editor to use the new 3D maps

After we get those done, I be back to hooking up the player-facing UI (e.g. alternate actions e.g. melee vs thrown), character sheets, and working towards that treasure of a shareable early access demo.

Carpenter and Martina have been hard at work on the pilot portrait creator. I don't have a good picture of it, but we've gotten masking layers working which allows hats/hoods to stop hair from poking through and skin-wide texture modifications like tattoos, scars, and short beards. That'll definitely be ready to try out as a standalone program sometime in the next few months.

Happy new year! If you choose to celebrate, please do so safely and covid-consciously! Also it was my birthday a few days ago and I'm 33 now! Cool!