July 2018 Devlog: Battle Stuff

This month I wanted to ensure that JARPUG’s battle mode worked well for multiple player characters. That required work on a few different things.

Character design for a new dog! GREYPOUND / BOLTHOUND

Like JARPUG / PUGJAR, this brave dog can shift between two different stances, wielding a car battery and sturdy antenna to get violent things done in an exciting variety of ways!

These characters have variable shoulder positions and widths as they’re created by a fairly flexible character creator. That makes two-handed weapons a complicated thing to animate! I ended up programming a weapon holding system that aligns my dogs’ noodly arm bones with bezier curves ending in the desired hand positions.

It’s no cure-all; I still need to be careful that the meshes following those bones don’t get mangled by these relatively arbitrary arm lengths and positions. But now I can share weapon animations across a wide array of dog shapes and sizes!

Battle design: Bending time, scampering dogs

In JARPUG you run around between turns before choosing the actions for your next character. It feels actiony and adds a nice layer of positioning strategy for avoiding attacks, grouping up for defensive spells, etc.

Running around in a turn-based battle is simple with a single character, but things get complicated with multiple characters. How do I ensure every character has enough time to run around between turns? How do I keep things from being too slow when every player character has move turns and performs actions in battle?

Most JRPGs with this sort of “run around on the field” battle action solve these issues by giving the player control of one character while AI teammates run around and choose their own actions in real time. That gives the games an actiony MMO feel. That’s not my goal for JARPUG.

In JARPUG I want players to run around between turns without giving up explicit control of their party. But I don’t want it to take forever or leave characters standing around hapless and helpless while you’re controlling someone else. I implemented new battle time and movement systems get that done.

Battle time system

To ensure every character gets a good amount of time to move without freezing the action, a new battle time system figures out turn order based on character stats and then adds gap times between turns.

So while the characters are all scampering and dodging in real time, they’re also guaranteed a minimum amount of time between turns for moving. I think it’s a pretty simple and intuitive system for players. Hopefully they won’t notice it much at all.

It sure was a pain to update everything from the old “active time battle” style system, though.

A nice bonus of this is that I’ve got an easy way to calculate the turn order for the next several turns and could show that in UI somewhere. That’s a personal favorite strategy element of mine in turn-based battles.

Battle movement system

Thanks to the new battle time system, I always know which party member is “next up” in the initiative and can give the player movement control over them until it’s time to choose an action. During that time they’re directly controlling that character’s movement and can also command their teammates to group/scatter.

The AI for teammate movement is as simple as I can manage. I want it to feel fast and predictable for the player. It’s not as accurate as individual joystick controls would be, but it’s simple and gives you quick ways to move teammates out of harm’s way.

I’d like to name those commands “shoo!” and “here doggy!”, but keeping this readable for VR necessitates things be clear without extra explanatory text. UI design is heartbreaking sometimes :(.

While it’s tempting to force “hard strategy” on the player by adding friendly fire for area attacks or “hazard zone” style attacks, the team movement controls probably aren’t going to be precise enough for that to be fun. Just avoiding enemy area attacks and trying to stay in “buff zones” should keep folks busy enough!

New battle background

The old battle background was tiny and complicated. I simplified it while making things more circular and spacious. I’ve still got some decisions to make about camera distance and battleground size, though. The current up-close camera feels great in VR, but it could complicate strategizing.

I think next month will also be spent working on battle stuff, with a dash of character stats injection. I’m hoping to create actual unique attacks for each player character and start doing a better job of differentiating their different stances, both in UI and gameplay.

Bye!