Early Combat Setup & Party Members

There’s been a lot of progress since the last update I made so I felt like it was about time to post another update. While the actual combat is still on-going all the logic up until the point of actually doing the damage to the enemy/enemies is all set at this point which is great. A summary of all the new stuff since the last update:

Party Members

The player can normally have up to 3 additional characters with them in a battle. I’ve started the structure this month with party member & party member manager classes. The party member implements the ICombatant interface that I use to define a fighter in the battle. The ICombatant stores stuff like the character data & persona held for each party member with a setup to allow the wildcard player to switch persona held. Below is the current class for that, but I imagine it’ll have extra properties in the future:

using Data.Personas;
using Gameplay.Characters;
using UnityEngine;

namespace Gameplay.Combat
{
    public interface ICombatant
    {
        string Name { get; }
        bool IsEnemy { get; }
        GameObject Obj { get; }
        PersonaData Persona { get; }
        CombatantStats Stats { get; set; }
    }
}

I’ve also been working on some more models for the characters. For the party members etc, I’ve decided to make my own instead of copying any from P5R. I’ve also decided at the same time to allow the user to choose between a male or female protagonist. I’ve started the setup of the velvet room scene to accommodate this. The UI is placeholder here for now, but it is all functional at setting the value in the save data for the player selection. I’m hoping to have animated characters in the windows when you change your selection over each of them as well as a name & description of the character.

I’ve still got to define some of the characters and I’ve only got a few made so far, so I’ll be making more over the coming months. The data for the characters is still a bit work in progress:

The last main bit I’ve sorted for the party members is the UI for the party stats. This was pretty straight forward to setup with the existing setup. I also added the smaller UI for the inactive party members as well as the animated stat visuals when hovering over skills in the persona skill select screen. The portraits for the characters are the only thing left to do here as and when I get around to making them.

Combat

While I’ve yet to do damage, its all set now to use an ability. I’ve got the data for the damage, hit + the weakness checks and even spawning particles for each effect. I had to do a fair bit of work in the backend to allow the user to select all enemies or just one based on the skill selected. The UI is also now pooled to allow for re-using of elements, though the heart UI is still a little bit off, so that’ll be worked on at some point.

When you use a skill, the UI updates to show the skill name used for a few seconds before hiding. If the skill is just one target it’ll play on the one you’ve targeted while multi hit skills are currently slightly staggered like they are in P5R. I know some skills hit all at the same time but that’ll be easy to update as and when. I’ve also sorted to removing of Hp/Sp for using a move. You’ll note there a drastic difference between the two screenshots around this paragraph. That’s a bug I’ve nto gotten around to yet, but the player’s starting health is 100 and I’d used a few skills to test before so it was on 90 before using Giant Slice which take 9hp off 100 Hp base (9%) resulting in the 81 remaining.

I also updated the enemies & battle system managers. The turn manager now correctly determines the right player party member to start the fight based on their persona’s agility level. The party manager allows the active data to be received from the turn manager instead from a static class like it was before and the enemy spawner now spawns into slots based on the number of enemies in the wave. This has been set to a max of 5 currently like in P5R.

Minor Bits

Other than that, I’ve been working on a lot of minor bits which I’ll list out below:

Control UI

As you’ll have seen in some of the screenshots already, I’ve setup a controls system for the game. This translates any control I’ve setup based on the active input device. So if I were to connect a PlayStation or Xbox controller, the UI would update to show the controls for that scheme. I’ve yet to add the controls to every screen, but it is all working and pretty each to add where needed. Even the root options screen uses it now.

Skill Weak/Technical Text

There’s now a UI element for when a skill will hit & Weakness or Technical hit any enemy.

View Persona UI

I’ve upped the colours a tad as they were a bit dull. Though I’ve still got to fix a few bugs with it, the display for level and xp being one and the other being the obvious model scale issue.

Backend

  • Player held persona’s now use a variant of persona data that is saveable. Before I was using a direct reference to a scriptable object. But that kept breaking between sessions. So there’s now a variant with implicit operators to convert between the two versions.
  • Minor bug fixes to sheet downloading & persona skill custom editors so they show cost again. Also fixed the instant kill display to only show one set of costs for the skill.
  • Imported a lot of old models from game jams and other projects to use as persona’s in the future.
  • Started work on a new persona data maker to aid with making persona’s as the sheet is a bit of a pain to handle when it comes to this. We’ll see which workflow works out best as and when.

That’s it for this update, but lots of progress which I’m pretty happy with, hopefully I can keep this up going forward with more combat stuff in June/July. See you all in the next update.