[DEVLOG] Escarmouche

Hello there!

Do you remember TAZS?

It’s inspired by Totally Accurate Battle Simulator by Landfall, a goofy-looking game where two armies fight until the death. Most of the gameplay is about placing your units within a budget and watch them fight against a pre-deployed army.

So here is the followup game, Escarmouche, in a WIP state. I started worked on it last year under another name (Tiny War Simulator), but I think I only mentioned it here on the forums.

Objectives

  • This is a C++ game using an experimental video mode, which is strip-based. In summary it’s TAS, but instead of 176 1-pixel-thick line, it’s 11 small buffers.
  • It’s also using a 3D iso engine I’m going to implement for ARIAT, tho it’s not showing much at this time (only using the 3D iso transformations for sprites right now)
  • While it’ll be a game on its own, its aim is also to polish said engine so I don’t spend too much time refactoring stuff while working on ARIAT later.
  • This thread will serve as the devlog for it.

Current features

  • Available Units
    • Soldier - Punch with an invisible fist.
    • Shield Bearer - Wears a Shield, which blocks a good deal of front damage -but none from their back; Use said shield to bash away their enemies.
  • Preparation
    • Crappy random party generation.
    • Side cleanup tool.
    • Holding A to place or remove multiple units.
  • Battle
    • Camera rotation by holding B and pressing left/right.
    • Time control by holding B and pressing up/down (x0, x1, x2, x4, x8).
    • Replay a placement.
    • 128 units at most (not getting the highest FPS when this happens :stuck_out_tongue:).
  • Results
    • A proper Victory or Defeat screen.
  • Campaign mode?
    • Not sure about this one, we’ll see how well this is going!
  • Preparation, Battle & Results
    • Menu showing by pressing C.
    • Armies’ Life bar (which is missing from the gif somehow).
  • Debug stuff
    • FPS bar. It’s the white/pink lines on the bottom, with each black dot indicating 10 fps.

What’s missing?

  • A lot of stuff obviously.
  • Audio.
    • @jonne complained about the lack of it in TAZS, so I definitely need to do that.
    • I think I got a strategy about how to do it.
  • More different units.
    • I’ll import most of the other Units available from TAZS (Slap, Spear, Bow, Dash (yes, the guy from that Door Game).
    • I also want to implement a few characters unique to the Pokitto from other games, like Matti or Joe, as a homage, if their respective authors allow me by then!
    • Also, the actual Pokitto itself is definitely going to be a unit.
    • That aside, I’ll also add a catapult and other fun toys; and probably some explosive barrels technical units.
  • UI. UI. UI.
    • All the menu, main screen, options, etc.
    • An actual Unit Grid. Currently pressing B would place a Shield Bearer instead of a Punch Soldier, but that’s not exactly scalable.
  • Challenges.
    • Puzzle-like challenges where you need to beat a small army with a limited budget.
    • Possibly custom challenges and an in-place editor, saved on the FS.
  • Playing as a Unit.
    • It’s also useful for debugging stuff.

A few gifs

2021-06-03 - Escarmouche - 1 - Preparation
Preparation Phase - where you place units.

2021-06-03 - Escarmouche - 2 - Battle
Let the battle begins!

2021-06-03 - Escarmouche - 3 - Battle 2
Removing a few units.

2021-06-03 - Escarmouche - 4 - Large Battle
128 units. When the limit is reached, the cursor switches to Disabled state and you can only remove Units.

2021-06-03 - Escarmouche - 5 - Large Battle Fight
On the HW, this drops to under 20 FPS - there is a lot of room for optimization tho.

2021-06-03 - Escarmouche - 6 - Shield Bearer Solo
Here is the Shield Bearer. Almost always winning on 1-1 because of its direction-based damage absorption.

2021-06-03 - Escarmouche - 7 - Shield Bearer Duo
Tho they do perform good against two punch guys.

2021-06-03 - Escarmouche - 8 - Large Sped Up
Time-control. Extremely handy to test things, but also when dealing with very long fights like this shield vs shield battle. The FPS on HW is pretty much catastrophic with 128 units of course.

So what’s next?

  • Lots of minor bugs to fix (non-mirrored soldiers, buggy save/restore, …).
  • Implementing the actual punch.
  • Adding more stuff on the ground so have a better notion of the space.
  • Drawing the placement area.
  • Leaving corpses when the soldiers die.
6 Likes

This is so cool! I really loved TAZS so I am glad to see a continuation :smiley:

I will never, ever live that one down will I :sweat_smile:

3 Likes

Never :laughing::stuck_out_tongue:

3 Likes

Devlog #2 - 2021-06-15 !

On the Engine Side

  • Template-based, generic blitting facilities. It supports the following features:
    • N bytes output (only 8bpp are going to be used in my case).
    • 1 bpp (with up to 32 pixels) sources.
    • N bytes sources (e.g. 8 bpp, 16 bpp, 32bpp) sources.
    • X, Y and X+Y mirroring and X-Y swapping (both of which can be used to rotate sprites).
    • Full clipping whatever the mirroring/swapping is.
    • Custom pixel operation (e.g. 1bpp asks for a bool to uint8 operator).
      • Which would be “use a given color when the pixel is on”, “do not copy if zero”, “copy with an offset”, …
    • The coordinates mirroring/swapping/clipping has its own facilities so it’d be easier to implement new sources types (2bpp and 4bpp are especially interesting for me).
    • It considers reading the source to be the hardest thing to do, so the source is always read from topleft to bottomright, horizontal first.
    • Because everything is based on templates parameters, including the pixel operation, a if constexpr() or a specialized template could be easily used to implement a potentially faster assembly version of a given blitter (e.g. the ubiquitous 4bpp to 8bpp, no mirror, no swap, non-zero copy blitting).
  • Actual Text Rendering :tm:
    • Uses the GLCD fonts with the generic 1bpp blitter above with x-y swap.

On the Game side

  • INTERNAL - Merged most of Shield Bearer and Punch Soldier code to allow easier Unit creation and maintenance.
  • GFX - Attacks are now animated, TAZS-style.
  • GFX - Dead Soldiers will now leave a Corpse behind, with a small Death animation.
  • FIXED - Soldiers’ body sprite is always facing right.
  • FIXED - Placing Soldiers too far from the center will place them at a location which is wrapped around a rather small area around the center.
  • FIXED - x2/x4/x8 speed on the Preparation Phase/Victory Phase shouldn’t be a thing.

GIFs

2021-06-15 - Escarmouche - Mirrored Soldiers, Corpses
Animated death, facing the right direction, shields falling on the ground

Upcoming

  • UNITS - Archer.
  • UNITS - Spear Soldier
  • UNITS - Dash Soldier
  • UI - Title Screen
  • UI - The Unit to be Placed will be Previewed at the cursor position.
  • UI, GAMEPLAY, CONTENT - Challenges.

Stay tuned!

9 Likes

Devlog #3 - 2021-06-21 !

Gameplay

  • Ground color is now brown.
  • Units - Temporarily removed the Shield Bearer.
  • Units - Spear Soldier
    • Perks - A bit sturdier, longer reach (can hit behind an allied unit!), higher damage / knockback.
    • Quirks - Somewhat slower to attack and to move.

UI

  • Title Screen.
    • Exit to the loader, Sandbox game, Instructions.
  • Instructions Screen.
    • A simple page-based text.
    • Explains roughly what the game is about and a few concepts.
    • Also contains the credits.
  • Game - Added a menu action to go back to the Title Screen.
  • Game / Preparation - A preview of the unit-to-be-placed is shown with the cursor.

Engine

  • GFX - Minor refactors to simplify the drawing API.
  • Units - Reworked the units to avoid rewriting the same code since they share a lot of features (search target / seek target / use weapon against target / retarget) and added stats variation between the kinds of units.
  • Title Screen - Added a build version (actually updated whenever the assets are built again).

GIFs

2021-06-21 - Escarmouche - TitleScreen, Instructions
Title Screen, Instructions Screen, Version.

2021-06-21 - Escarmouche - Spear Soldier 2021-06-21 - Escarmouche - Spear Soldier - two guys
The Spear Soldier. Their longer reach help keeping at bay a lone Punch Guy, but they will have a hard time dealing with two or more. Also, unit preview on the cursor.

Upcoming

  • Units - Putting back the Shield Bearer.
  • Units - Archer Soldier

Stay tuned!

6 Likes

Every time I see this thread I can’t help but think “Scaramouche, Scaramouche, can you do the fandango?”, a line from Queen’s six-minute song Bohemian Rhapsody.

It’s no coincidence though, both ‘Escarmouche’ and ‘Scaramouche’ have the same etymology.
Both are descendants of the Italian word ‘scaramuccia’.

3 Likes

Devlog #4 - 2021-07-12 !

Wow time passes quickly. 21 days is too long, it’s almost enough time for PPoT to make a new polished game!
I struggled quite a lot with the archer, and I was also busy with other things.

Gameplay

  • Units - Added back the Shield Bearer.
    • Combines greatly with the Spear Bearer, as this one can pokes a target repelled by the Shield Bearer!
  • Units - Added the Target.
    • This is current for debugging.
  • Units - Added the Archer.
    • Shoots arrow at the enemies when within range.
      • The Arrows curve in the air until they reach their target.
      • Because there is a delay, the arrows might miss their original target, or hit another target (no friendly fire tho), especially when the target is far away and moving.
    • Has a long range.
    • Slowest attack rate, average damage, less than average health, average speed.
    • Best counter is currently a Shield Bearer.
      • Other than meat shields, fast moving units will probably be their doom as well since they’re pretty stupid.
    • Internally:
      • The Arrow isn’t an Entity on itself, but part of the Archer Entity.
      • When an Arrow is active, the Archer Entity asks the 3D Iso Engine to render the Arrow at the Arrow’s current location.
      • This means 1 Arrow per Archer, which is already enough for interesting battles.
      • When the arrow reaches the right altitude, a check is done to see if the target is around.
      • If it is not, another check is done when it lands - and it’ll hit an enemy if they happen to be here at this moment.

UI

  • (Nothing).

Engine

  • A new lifecycle has been implemented with the following stages:
    • SEEKING - The Unit is seeking a Target.
      • When it times out, another closer Target is selected.
      • When the Target is within range, it switches to CHARGING.
    • CHARGING - The Unit is charging or aiming their Weapon.
      • As long as the Target is within range, the Weapon will keep charging.
      • When it’s fully charged, it switches to FIRING.
    • FIRING - The Weapon’s effect is in effect.
      • (Usually 1 frame).
    • COOLING DOWN - The Weapon is cooling down or reloaded.

GIFs

2021-07-12 - Escarmouche - Spear + Shield
Spear + Shield is pretty good at crowd control.

2021-07-12 - Escarmouche - Archer vs Punch 2021-07-12 - Escarmouche - Archer vs 2 Punch
A single archer can take on most units all by itself.

2021-07-12 - Escarmouche - Archer vs Shield 2021-07-12 - Escarmouche - 3 Archers vs 3 Shields
But they don’t fare well against Shield Bearer because of how Shields reduce damage in a directional fashion.

2021-07-12 - Escarmouche - Small Battle
It works well with others units.

2021-07-12 - Escarmouche - Battle
It’s raining arrows. Archers are good when shooting at a pack, so having a few sacrifice units helps wasting their arrows. Flanking is better for taking out Shields

Upcoming

I still got to figure out a roadmap. My list of ideas is growing every time I play, so it’s easy to get scope creep.
I’ll make a review soon enough to decide on what I want to include on the upcoming demo.

  • Menu/Gameplay - Challenges & Cost System!
    • “Place your army within the given constraints to beat the opponent’s own army!”
    • Such constraints include: area of placement, total cost, number of units, available types of units.
    • Pretty much the same thing than TAZS. That also would be the basis of a campaign mode, too.
    • Interestingly, such a system will help me test more easily the balance between units - and their price too.
  • Units - Sword Soldier? A fast-moving one?
  • Less visible corpses.
  • A more interesting environment?
    • With grass here and there, maybe some trees, things like that.
  • A more interesting game UI
  • Demo!

Stay tuned!

7 Likes

Looks impressive! Rotation really adds up the visual experience.
I suppose archers select the nearest target in the given distance range? Can they also miss the target or do they always hit?

3 Likes

Archers don’t anticipate the movement - they’re pretty stupid, like everything else in this game.
However, to compensate this, they do aim a bit lower than necessary:

  • A target moving toward them will be most likely hit, unless it’s fast AND far enough.
  • A target moving laterally or away from the Archer has more chance to be missed, but it depends greatly on the distance as well.
  • A static target will never be missed, whatever the distance.

Additionally, if the arrow misses the primary target, it might get a chance to hit a secondary target just behind.

  • Shields are slow enough to avoid that, and will protect the unit behind them without any issue
  • However, the second or (potentially) the third line of a pack of fast units will probably suffer more damage than the first line!
  • Also, if the primary target died before the arrow touched it, the arrow might instead end up into a secondary target. Can’t hide forever!

As a side note:

  • Punchers are the currently fastest units. When on 1 to 1 and far enough, often the first arrow will miss them by a pinch, but the next arrows as the distance reduces always connect.
  • There is a future unit that will move in a zig-zag pattern. This unit will probably be the doom to any dumb, non-instant Ranged units such as the Archers.
5 Likes

Devlog #5 - 2021-07-28 [Demo] !

16 days later, oops
This is an update for a game UI overhaul, and, more importantly, the Challenges!

Gameplay

  • Units - Attached a Cost.
  • Challenges Mode!
    • A Challenge is currently about defeating a given army within the following constraints:
      • A deployment area.
      • A maximum budget - in relation with Units’ individual cost.
      • More specifically, you cannot place a unit that’d make you go over the allocated budget.
      • A “tech” limitation (i.e. not every kind of Units can be used for every challenges).
  • Challenges - Added 7 challenges
    • These are mostly for testing Challenges. They’re not really challenging, as the game needs more balancing.

UI

  • Added the Challenges Screen - which is where the challenges are listed.
  • Revamped the Game UI (still a WIP).
  • Added a Side Bar:
    • Accessible through C.
    • There is a Command bar “major” game options, such as “Launch Battle”, “Clear this side”, “Randomize this Side”, “Reload this Battle”, “Exit to menu”, etc.
    • There is a new Command Palette, which is currently dedicated to the Units in preparation.
      • Each cell has the Unit’s Cameo (much like C&C / RA), which, most of the time, represents the units’ weapons.
      • When placing units on the field, it also indicates the current Unit Type.
    • An empty location for the minimap.
    • Currently the side bar is always expanded, but in the future it’ll
  • Added a in-game Hint area.
    • For telling what the highlighted action is going to do (with messages such as “Place Archer for 200$”, “Launch the Battle”, “Exit to Menu”, …).

Engine

  • The Battleground is a bit more fleshed out, allowing for deployment areas different depending on the Challenges or Sandbox.

GIFs

2021-07-20 - Escarmouche - IG GUI
Still an early WIP, but most of the Game UI is fleshed out.

Demo Binary!

2021-07-28 - Escarmouche-Pokitto.zip (394.5 KB)

  • Doesn’t rely on SD except for FemtoLib stuff.
  • Doesn’t rely on the EEPROM either.
  • No audio (well, not intended one at least).
  • The data folder should be at the root of your SD Card. I think the game would still launch without it, but the FemtoLib Menu probably won’t display much :stuck_out_tongue:
  • The binary itself can be placed wherever you want.

Have fun!

Upcoming

So the Cute Demake Jam just started, so Escarmouche will probably go a bit more slower for a couple of weeks.
Nonetheless, the followings will be worked on:

  • An option to launch the next Challenge after finishing one.
  • Make the deployment area visible.
  • Simplify the “Clear this side” when in Challenge -so it clears everything the Player controls.
  • Make the Camera free in Results Phase (currently stuck for some reason).
  • Registering the solved Challenges, with the lowest Budget that was used to do so.

Stay tuned!

7 Likes

This looks so so good, I can’t stress enough how great this idea is, there’s something about just setting the army up and then watching the simulation go by itself. I’ll need to program something like this one day.

5 Likes