← all tags

#Combat

9 entries

It’s been a while - ARC Raiders has taken up more of my free time than I’d like to admit… But! I’ve been working on some combat improvements.

Statuses: I tried to convey more details about status conditions. I’m worried it’s too much currently - but I’d rather add too much up front and then only keep what’s important later. That said, I was able to create visual feedback for all the parts of a status:

  • Statuses are applied with “stacks” which are removed over time. This is shown with the status background, it’s kind of like a vertical progress bar.
  • Based on thresholds of how many stacks are applied, the status is in level 1, 2, or 3 - indicated by the dots below it. As the level changes, a “upwards” or “downwards” animation is shown on top of it.
  • Statuses trigger their effects every 4 combat ticks (starting from the time they are applied). This is indicated by the “rotating” and flashing border.

Move “Animations”: Not to be confused with actually animating my sprites, hehe - I added a flexible system for adding sprite transformations as skills are triggered. This was a relatively cheap way to add some much needed visual feedback for combat.

Tempo: Combat doesn’t have to be real time, but if you queue moves fast enough, it is. If you’re able to keep moves queued you increase your tempo, which adds a damage bonus. This used to be a tick counter, but I’ve changed it to a more abstract gauge.

Overall, I’m trying to focus on adding some more feedback elements (animations/sounds) to help the player understand if their actions are doing what they want. Combat is a tricky thing to balance and tune. I’m eager to get sounds working - and then I think I’ll be at the point where I’d be happy to get some play testing and feedback on it.

Not a whole lot to show - I’ve mostly been working on refactoring and clean up. I’ve been refining my player load out design and “Primortal” archetypes. I originally wanted:

  • A party system, where you would “load in” 1 of your 4-6 Primortals in your team
  • Damage Types, Body Types, and Type Affinities with strengths and weaknesses amongst each other

Ultimately - it was too complex and not fun. I’ve decided to simplify it quite a bite. I went from 8 body types & 8 damage types, to 5 Primortal “Flavors”. Each flavor has general patterns for the types of skills they use an and how they behave in combat. But it’s not like rock, paper scissors - more like the colors in Magic the Gathering - it’s behavioral theming - no strict rules.

Instead of party members, defeating and optionally capturing Primortals reward you with research points to unlock the skills that creature uses. Before deploying on your next adventure, you can change your skill loadout with skills you’ve unlocked from all Primortals.

This shift has made it much easier to focus in on a tighter combat experience - focused more on building fun and interesting skill sets, and the puzzle solving of applying those skills in an efficient sequence to maximize outgoing damage and minimize incoming damage in real time - and less about swapping party members to play against type weaknesses.

I decided to focus on 5 core creatures to start - one for each type:

  • Kinetic: focuses on direct hits and defending one-self
  • Thermal: Sustained burning status damage
  • Voltaic: Glass cannon, weak - but string hits
  • Corrosive: Low passive damage + low damage small hits
  • Mutagenic: Self healing while chipping away the opponent

Plus a 6th creature - a dummy robot to start building out the combat tutorial.

Small update to statuses - internally, they are tracked with “stacks”, but visually they are represented with level, 1-3. It simplifies the effects a bit. Burning now does more damage the more “exposure” the (longer, and strong the effect is) - Poisoning deals flat damage, but the higher the level, the slow the stacks decrease. I think it looks much cleaner

I also implemented “Interrupt”, which is when you get hit while in a vulnerable stance. It nullifies the remaining ticks in your current skill. I also want to add a skill that stuns a player after, essentially making them “sleep” for a few ticks after their current skill.

I feel like this is a bigger update than most. I mocked up the core game play loop I’m looking for: travel to a planet, battle mobs to get research points, then gather enough elythium to escape back. Once back at HQ, use your research points to upgrade your character. At first, to get to a rough demo to have people try it out and offer feedback on the general idea, I want to trade research points in for new combat skills.

Speaking of combat… I also added a status system! In this video, you can see burning and poison - a tad cliche, but easy examples to implement. I’m still feeling out how I want statuses to impact you exactly. I think burning will scale based on the number of applied stacks, poison will damage based on % of max health. I’m also considering adding exposed to increase incoming damage, stun to randomly prevent skills from triggering, and symbiotic which will cause you take damage if your opponent does. I guess there are tons more I want to try, but that’s too much for this post.

The last major combat mechanic I want to implement is “staggered” - a condition applied to opponent that forces a stance where they can’t make moves and are vulnerable to damage. Then I wan to work on the basic upgrade screen :)

Today: Mob Shadows..

I’ve been on the fence on how to handle combat encounters - Do monsters wonder around (expensive to animate/code)? Do I introduce tall grass a la Pokemon (limiting in different biomes)? Do certain zones just randomly trigger combat like FF (unpredictable and feels jarring)?

My current plan? Shadows! Here’s my first stab at a “Mob Shadow” that wanders around an area, but once you get close, speeds up and tracks towards you. If it comes in contact with you, combat is triggered! I like the idea of seeing the mobs and have control over the situation, as well as dodging if you wish.

Some pipe-dreams would be different shadow shapes/colors, footprints, sound effects, etc. to hint at what the mob might be. But for now - I think this is perfect for the initial game loop.

This one will be hard to explain.. but this blog is for me in the end. I’ve added stances to the skill execution, represented by the black lines with an icon (shield = defending, !!! = vulnerable). Those stances will eventually impact how damage is calculated.

This adds a nice layer to the skill system where you need to time your skills’ stances with your opponents damage ticks (white dot with black border) to avoid taking extra damage or even reduce it.

Next steps will be to actually adjust damage calculation, not just render the stances. Then I want to add a stunned effect (getting hit while vulnerable) which will basically “parallelize” you for a few ticks (adding a dummy skill that does nothing). Then? Statuses! Always need burn…

Small iteration in the combat state. Health is now fluid - damage adjusts a target, but the actual health takes time to reach that target. This means the health bar updates smoothly and it technically allows you to recover from death. I want to add skills that change how quickly (or slowly) the effective health updates.

I also added a pending animation on the next skill, and some UI button hints for canceling the pending skill.

Next up, I want to show both the “target” and “current” health in the stats bar.

I spent a lot of time recently on non-visual work recently, which is hard to demo.

I’ve revamped my asset & sprite atlas engine to allow states to filter/specify which assets they want to load into a shared sprite atlas. This shared atlas (a single giant image containing all the sprites I might want to draw) is used with a batch rendering engine to greatly reduce the amount of resources it takes to run the game. It’s currently sitting pretty at ~30MB of RAM. Most importantly, this work required me to fork the pixel v2 library to support this batching with the built-in text package.

After that, I did the work to render the opponent health in combat, and got rid of the debug text rendering. It looks much better now!

Next up, I want to continue to add UX features to combat to make it easier to see what’s happening (and what’s happened), and add the tempo counter.

The first stab at combat. Player skills are on the bottom, opponent skills on on top. Each skill lasts a number of “ticks” - each tick can do something. Currently, the white dots are damage ticks, the black ticks are idle time. The color corresponds to the skill type.